HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/hyperflight/apps/inxpress/prev/2025-10-31b/__pycache__/app.cpython-311.pyc
�

�i�R��j�ddlmZmZddlmZmZmZmZmZm	Z	m
Z
mZddlm
Z
mZddlmZddlmZddlmZddlmZmZdd	lmZdd
lZdd
lZddlmZee��Zhd�Zed
���e_e� d��d���Z!ej"d���Z#ej$dd��e_%ej&�'ddd���ej$dd��Z(ej$dd��Z)dAd�Z*d�Z+e� ddd g�!��d"���Z,e� d#��d$���Z-ej$d%d&��d'kr'de_.dej&d(<ej/ej0�)��ed*��Z1e� d+��d,���Z2ee��e� d��d-���Z3e� d.��d/���Z4e� d0��d1���Z5dd2lm
Z
mZddlmZd3�Z6e� d4��d5���Z7e� d6��d7e8fd8���Z9e� d9��d:���Z:e�;d;��d<���Z<ed=kre�=d>d?d�@��d
Sd
S)B�)�urlparse�urljoin)�Flask�session�redirect�url_for�request�abort�render_template�send_from_directory)�Decimal�InvalidOperation�)�get_db)�register_filters��country_name)�datetime�	timedelta��wrapsN)�Path>�/login�/health�/logout�)�hours�/c�:�ttd����S)N�shipments_parsed)rr���0D:\web\hyperflight.live\apps\inxpress\app\app.py�rootr$s���G�.�/�/�0�0�0r"c���tj}|�d��rdS|tvrdSt	jd��rdStjtd<ttd����S)Nz/static/�user�next�login)	r	�path�
startswith�PUBLIC_PATHSr�get�	full_pathrr)�ps r#�require_login_everywherer/sk����A��|�|�J�������L������{�6�������'�G�F�O��G�G�$�$�%�%�%r"�FLASK_SECRETz
replace-meT�Lax)�SESSION_COOKIE_SECURE�SESSION_COOKIE_HTTPONLY�SESSION_COOKIE_SAMESITE�APP_USER�admin�APP_PASS�	hyperbankr c�>�tj�d��ptjdd��}|st|��St
ttj|����}|j	r6|j	t
tj��j	krt|��Stj
pd�d��}|j�
|dz��s|j|krt|��S|jr|���n|S)Nr'z/apps/inxpressr)r	�argsr,r�poprrr�host_url�netloc�script_root�rstripr)r*�scheme�geturl)�
default_ep�nxt�test�prefixs    r#�
_safe_nextrF3s���
�,�
�
�6�
"�
"�
?�g�k�&�$�&?�&?�C��#��z�"�"�"��G�G�,�c�2�2�3�3�D��{�#�t�{�h�w�/?�&@�&@�&G�G�G��z�"�"�"��!�5�%5�
=�
=�c�
B�
B�F��9������-�-�#�$�)�v�2E�2E��z�"�"�"� �K�0�4�;�;�=�=�=�S�0r"c�<��t����fd���}|S)Nc���tjd��tkr�|i|��Stjtd<tt
d����S)Nr&r'r()rr,�USERr	r-rr)r:�kwargs�fns  �r#�wrapzlogin_required.<locals>.wrapGsO����;�v���$�&�&��2�t�&�v�&�&�&�!�+�������(�(�)�)�)r"r)rKrLs` r#�login_requiredrMFs3���
�2�Y�Y�*�*�*�*��Y�*��Kr"r�GET�POST)�methodsc���tjdkr�tj�d��tkr^tj�d��t
kr6ttd<dt_tt����Stdd���Stj�d	��}|r
|td	<td��S)
NrO�ur.r&Tz
login.htmlzInvalid credentials)�errorr')r	�method�formr,rI�PASSr�	permanentrrFrr:)rCs r#r(r(Ps����~�����<���C� � �$�&�&�7�<�+;�+;�C�+@�+@�$�+F�+F�"�G�F�O� $�G���J�L�L�)�)�)��|�3H�I�I�I�I�
�,�
�
�6�
"�
"�C�
�������<�(�(�(r"rc�`�tj��ttd����S)Nr()r�clearrrr!r"r#�logoutrZ_s#���M�O�O�O��G�G�$�$�%�%�%r"�	APP_DEBUG�0�1�PROPAGATE_EXCEPTIONS)�levelzD:\data\inxpress_pdfsz/pdf/<path:fname>c�$�t|��j}|����d��st	d��t
|z}|���st	d��tt
|dd|d���S)zs
    Stream a PDF from D:\data\inxpress_pdfs by file name.
    Prevent directory traversal and 404 if missing.
    z.pdf�zapplication/pdfFr)�mimetype�
as_attachment�
download_name�max_age)r�name�lower�endswithr
�PDF_ROOT�existsr)�fname�	name_only�fpaths   r#�pdf_downloadrnps����U��� �I��?�?���%�%�f�-�-��
�c�
�
�
��y� �E��<�<�>�>��
�c�
�
�
���)�"�������r"c��dS)Nzinxpress app aliver!r!r"r#�homerp�s���r"rc�
�ddiS)N�status�okr!r!r"r#�healthrt�s
���d��r"z	/inxpressc�t�tj�d��}tj�d��}d}t�����5}|�|||||f��|���}ddd��n#1swxYwYtd|||���S)z�
    Mirrors your ASP page but rendered via Jinja.
    - Numeric rules: blank if zero, 2dp for totals
    - Styling: use your existing CSS (copy into app/static/css/site.css)
    �from�toae
        SELECT  InvoiceNo,
                Base, Fuel, Other, Net, VAT, Total,
                Charged, Cost, Calculated,
                InvoiceDate
        FROM    inxpress_invoices
        WHERE   (%s IS NULL OR InvoiceDate >= %s)
        AND     (%s IS NULL OR InvoiceDate <  %s)
        ORDER BY InvoiceDate DESC, InvoiceNo DESC
        LIMIT 500
    Nz
inxpress.html)�rows�	date_from�date_to)r	r:r,r�cursor�execute�fetchallr)ryrz�sql�currxs     r#�inxpressr��s����� � ��(�(�I��� � ��&�&�G�
�C�
�����	�	��c����C�)�Y���A�B�B�B��|�|�~�~���������������������?���T[�\�\�\�\s�!/B�B �#B )rr	c���|���5}|�d|f��d�|���D��cddd��S#1swxYwYdS)z-Return list of column names in display order.z�
          SELECT COLUMN_NAME
          FROM information_schema.COLUMNS
          WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = %s
          ORDER BY ORDINAL_POSITION
        c��g|]
}|d��S)�COLUMN_NAMEr!��.0�rs  r#�
<listcomp>z&_get_table_columns.<locals>.<listcomp>�s��9�9�9�Q��-� �9�9�9r"N)r{r|r})�conn�tablers   r#�_get_table_columnsr��s���	
�����:�#�����
�X�	�	�	�:�9�#�,�,�.�.�9�9�9�:�:�:�:�:�:�:�:�:�:�:�:����:�:�:�:�:�:s�5A�A�Az
/shipmentsc	���d}t��}tj�d��pd���}tj�d��pd���}tj�d��pd���}tj�d��pd������}tj�d��pd���}tj�d��pd���}tj�d	��d
k}dtdzdtdzfd
�}	|	|��}
|	|��}tj�d��pd���}tj�d��pd���}
tj�d��pd������}|dvrdn*ttt|��d��d��}|�dn<tttj�dd��pd��d��}|�dn|dz
|z}tj�d��d
k}gg}}d}i}|���5}|�|��|�
��D] }t|d��||d<�!	ddd��n#1swxYwYt|�����}|r$d|�d�}|�d��||gd zz
}|r*|�d!��|�|��|r*|�d"��|�|��|r|�d#��|||gz
}|
r*|�d$��|�|
��|rtt#j|d%�����t)d�&��z���}|�d'��|�|��|ru|s|�d(��n]d)�d*gt/|��z��}|�d+|�d,|�d-|�d.���|�|d/z��|r|�d0��d1}|rd2d3�|��znd}d4|�d5|��}d6|�d7|�d8|�d5|
����d9�	|�dnd:z} |���5}|�d;|�d<���d=�|�
��D��}!|�d>|�d?���d@�|�
��D��}"|�dA|�dB���dC�|�
��D��}#|�||��|���dD}$|�|�| |��n|�| |||gz��|�
��}%ddd��n#1swxYwYt5dE�|#D��dF��G��}&dH�}'dI�dJD��}(t7dK��|(dL<|%D�]�})|'|)�dM����|'|)�dN����z|'|)�dO����z|'|)�dP����z|'|)�dQ����z|'|)�dR����z}*|*|)dL<|(dSxx|'|)�dS����z
cc<|(dTxx|'|)�dT����z
cc<|(dUxx|'|)�dU����z
cc<|(dVxx|'|)�dV����z
cc<|(dWxx|'|)�dW����z
cc<|(dLxx|*z
cc<���|�dnt|$|zdz
|zd��}+|�|$n|},tj�d��d
k}t9	deidY|%�dZ|�d|�d	|�d|�d|�d[|!�d|�d\|"�d|�d]|&�d^|
�d_|�d|�d|,�d`|$�da|+�db|(�d|�dc|
�dd|��S)fN�inxpress_shipments_parsed�q��invoice�carrier�countryrvrw�noorderr]�s�returnc��|sdSdD]M}	tj||��������cS#t$rY�JwxYwdS)z?Return YYYY-MM-DD from UK (DD/MM/YYYY) or ISO input; else None.N��%Y-%m-%dz%d/%m/%Yz%d-%m-%Yz%d.%m.%Y�r�strptime�date�	isoformat�
ValueError�r��fmts  r#�to_iso_datez%shipments_parsed.<locals>.to_iso_date�sy���	��4�C�	�	�C�
��(��C�0�0�5�5�7�7�A�A�C�C�C�C�C���
�
�
���
�����ts�8A�
A�A�sort�shipment_id�dir�asc�pagesize�200>r\�all�-1�@B�
r�pager�duponlya(
      SELECT ref, COUNT(*) AS cnt FROM (
          SELECT TRIM(LOWER(Reference))  AS ref FROM inxpress_shipments_parsed
           WHERE Reference  IS NOT NULL AND Reference  <> ''
        UNION ALL
          SELECT TRIM(LOWER(Reference2)) AS ref FROM inxpress_shipments_parsed
           WHERE Reference2 IS NOT NULL AND Reference2 <> ''
        UNION ALL
          SELECT TRIM(LOWER(Reference3)) AS ref FROM inxpress_shipments_parsed
           WHERE Reference3 IS NOT NULL AND Reference3 <> ''
      ) t
      GROUP BY ref
      HAVING cnt > 1
    �cnt�ref�%z�(invoice_number LIKE %s OR AirbillNumber LIKE %s OR Reference LIKE %s OR Reference2 LIKE %s OR Reference3 LIKE %s OR ReceiverName LIKE %s)�zinvoice_number = %szCarrier = %sz((DestCountry = %s OR OriginCountry = %s)zShipDate >= %sr���daysz
ShipDate < %sz1=0z, z%sz0(
                  TRIM(LOWER(Reference))  IN (z0)
               OR TRIM(LOWER(Reference2)) IN (z0)
               OR TRIM(LOWER(Reference3)) IN (z)
            )�zo.OrderNo IS NULLz^
    FROM inxpress_shipments_parsed sp
    LEFT JOIN orders o ON o.OrderNo = sp.Reference
    �WHERE � AND zSELECT COUNT(*) AS n � a
        SELECT
          sp.shipment_id, sp.invoice_number, sp.Carrier, sp.AirbillNumber, sp.ShipDate,
          sp.OriginCountry, sp.DestCountry, sp.Reference, sp.Reference2, sp.Reference3,
          sp.ReceiverName, sp.Pieces, sp.WeightKg, sp.Length, sp.Width, sp.Height, sp.Zone,
          sp.ServiceType, sp.BaseCharge, sp.FuelSurcharge, sp.Handling, sp.Insurance,
          sp.AreaSurcharge, sp.ProcessingFee, sp.ResidentialFee, sp.OtherCharges,
          sp.NetAmount, sp.VATAmount, sp.TotalParsed, sp.Total,

          o.Delivery               AS Charge,
          o.DeliveryAgentCost      AS Cost,
          o.DeliveryCalculatedCost AS Calculated,

          -- Value deltas vs NetAmount
          CASE
            WHEN o.DeliveryAgentCost IS NULL OR sp.NetAmount IS NULL THEN NULL
            ELSE o.DeliveryAgentCost - sp.NetAmount
          END AS DiffCost,
          CASE
            WHEN o.DeliveryCalculatedCost IS NULL OR sp.NetAmount IS NULL THEN NULL
            ELSE o.DeliveryCalculatedCost - sp.NetAmount
          END AS DiffCalc,

          -- Percent deltas vs NetAmount
          CASE
            WHEN o.DeliveryAgentCost IS NULL OR sp.NetAmount IS NULL OR sp.NetAmount = 0 THEN NULL
            ELSE 100.0 * (o.DeliveryAgentCost - sp.NetAmount) / sp.NetAmount
          END AS DiffCostPct,
          CASE
            WHEN o.DeliveryCalculatedCost IS NULL OR sp.NetAmount IS NULL OR sp.NetAmount = 0 THEN NULL
            ELSE 100.0 * (o.DeliveryCalculatedCost - sp.NetAmount) / sp.NetAmount
          END AS DiffCalcPct


          z
          z
          ORDER BY z, sp.shipment_id ASC

    � LIMIT %s OFFSET %sz$SELECT DISTINCT invoice_number FROM z6 WHERE invoice_number<>'' ORDER BY invoice_number DESCc��g|]
}|d��S)�invoice_numberr!r�s  r#r�z$shipments_parsed.<locals>.<listcomp>os��@�@�@�A�A�&�'�@�@�@r"zSELECT DISTINCT Carrier FROM z# WHERE Carrier<>'' ORDER BY Carrierc��g|]
}|d��S)�Carrierr!r�s  r#r�z$shipments_parsed.<locals>.<listcomp>rs��9�9�9�Q�A�i�L�9�9�9r"z\
          SELECT DISTINCT UPPER(COALESCE(DestCountry, OriginCountry)) AS cc
          FROM zD
          WHERE COALESCE(DestCountry, OriginCountry) <> ''
        c��g|]
}|d��S)�ccr!r�s  r#r�z$shipments_parsed.<locals>.<listcomp>ys��2�2�2�a�!�D�'�2�2�2r"�nc�6�g|]}|t|��p|d���S))r�rfr)r��cs  r#r�z$shipments_parsed.<locals>.<listcomp>�s+��A�A�A�Q��<��?�?�/�a�	0�	0�A�A�Ar"c��|dS)Nrfr!��xs r#�<lambda>z"shipments_parsed.<locals>.<lambda>�s
��a��i�r")�keyc�\�|�tt|����ntd��S�N�0.00�r
�strr�s r#�dzshipments_parsed.<locals>.d��!���
�W�S��V�V�_�_�_�7�6�?�?�Jr"c�.�i|]}|td����S�r��r
�r��ks  r#�
<dictcomp>z$shipments_parsed.<locals>.<dictcomp>�s ��g�g�g�1�A�w�v���g�g�gr")�
BaseCharge�
FuelSurcharge�	NetAmount�	VATAmount�Totalr��Other�Handling�	Insurance�
AreaSurcharge�
ProcessingFee�ResidentialFee�OtherChargesr�r�r�r�r��shipments_parsed.htmlrx�
duplicates�invoices�carriers�	countries�
date_from_iso�date_to_iso�total�	last_page�sums�	direction�pagesize_raw)r�)rr	r:r,�strip�upperr�rg�max�min�intr{r|r}�list�keys�appendrr�r�rr��join�len�extend�fetchone�sortedr
r)-r�r�r�r�r�r��
date_from_raw�date_to_rawr�r�r�r�r�r�r�r�r��offsetr��where�params�dup_sql�dup_mapr�row�dup_keys�like�next_day�ph�
from_parts�	where_sql�	count_sql�data_sqlr�r��ccodes�
total_rowsrxr�r�r�r��otherr��pagesize_effectives-                                             r#r r �sT��'�E��8�8�D���!�!�#�&�&�,�"�3�3�5�5�A���!�!�)�,�,�2��9�9�;�;�G���!�!�)�,�,�2��9�9�;�;�G���!�!�)�,�,�2��9�9�;�;�A�A�C�C�G��\�%�%�f�-�-�3��:�:�<�<�M��\�%�%�d�+�+�3��:�:�<�<�K��|���	�*�*�c�1�G�	�s�T�z�	�c�D�j�	�	�	�	� �K�
�.�.�M��K��,�,�K���!�!�&�)�)�:�]�A�A�C�C�D���!�!�%�(�(�2�U�9�9�;�;�I��L�$�$�Z�0�0�9�E�@�@�B�B�H�H�J�J�L�#�'7�7�7�t�t�S��S��EV�EV�Xa�Ab�Ab�df�=g�=g�H�� �1�1�c�#�g�l�.>�.>�v�q�.I�.I�.N�Q�*O�*O�QR�&S�&S�D��"�Q�Q����X�(=�F��|���	�*�*�c�1�G���6�E�
�G��G�	
�����2�#����G�����<�<�>�>�	2�	2�C�"%�c�%�j�/�/�G�C��J���	2�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2��G�L�L�N�N�#�#�H�	���1�x�x�x��
���$�	
�	
�	
��d�V�A�X��6��D�
���*�+�+�+�V�]�]�7�-C�-C�-C��=�
���^�$�$�$�f�m�m�G�&<�&<�&<��_�
���?�@�@�@�&�W�V]�L^�B^�&��E�
���%�&�&�&��
�
�m�(D�(D�(D��?��%�k�:�>�>�C�C�E�E�	�WX�HY�HY�HY�Y�d�d�f�f��
���_�%�%�%�v�}�}�X�'>�'>�'>��
(��		(��L�L���������D�6�C��M�M�1�2�2�B��L�L��/1���/1���02����
�
�
�

�M�M�(�Q�,�'�'�'��(��l�l�&�'�'�'��J�
5:�A��G�L�L��/�/�/�/�r�I�@�
�@�@�Y�@�@�I�&�D�E&�&�F�G&�&�H�I&�&�H%�?�?�,�,�I&�&�&�L�!�2�2�'<�M&>�H�\
������#����x�5�x�x�x�y�y�y�@�@������@�@�@�����^�E�^�^�^�_�_�_�9�9�#�,�,�.�.�9�9�9����������	
�	
�	
�
3�2�3�<�<�>�>�2�2�2�����I�v�&�&�&��\�\�^�^�C�(�
����K�K��&�)�)�)�)��K�K��&�H�f�+=�"=�>�>�>��|�|�~�~��+������������������.�A�A�&�A�A�A������I�K�J�J�g�g�(f�g�g�g�D��F�O�O�D��M�
�	$�	$����!�%�%�
�#�#�$�$�q�q����{�);�);�'<�'<�<�q�q�����AW�AW�?X�?X�X���!�%�%��(�(�)�)�*�,-�A�a�e�e�4D�.E�.E�,F�,F�G�IJ��1�5�5�Q_�K`�K`�Ia�Ia�b����'�
��\����a�a����l� 3� 3�4�4�4�����_������1�5�5��#9�#9�!:�!:�:�����[����Q�Q�q�u�u�[�1�1�2�2�2�����[����a�a����k� 2� 2�3�3�3�����W�
�
�
�a�a����g���/�/�/�
�
�
��W�
�
�
�e�#�
�
�
�
��%���3�
�X�0E��0I�h�/V�XY�+Z�+Z�I�'/�'7���X���|���	�*�*�c�1�G�
��
�
�
�
�T�
��7�
���	
�
��
��!�

��W�

�(0�x�

���
�#+�(�
���
�$-�9�
�$�m�
� �K�
��T�
�/�.�
�7A�j�
�MV�I�
��T�
���
�)2�	�
�AM��
�
s&�AM&�&M*�-M*�D[*�*[.�1[.z/shipment/<int:shipment_id>r�c��d}t��}|���5}|�||f��|���}ddd��n#1swxYwY|st	d��td|���S)Nz�
        SELECT shipment_id, ShipmentDetails, SenderAddress, ReceiverAddress,
               PiecesWeightDimensionsZone, Charges, Total, source_pdf, invoice_number
        FROM inxpress_shipments
        WHERE shipment_id = %s
        LIMIT 1
    razpartials/shipment_detail.html)r�)rr{r|r�r
r)r�r~r�rr�s     r#�shipment_detailr�s����C��8�8�D�	
������#����C�+��(�(�(��l�l�n�n����������������������
�c�
�
�
��:�c�B�B�B�Bs�,A�A!�$A!z	/invoicesc�>
�d}tj�d��pd���}tj�d��pd���}tj�d��pd���}d�}||��}||��}tj�d��pd���}tj�d	��pd
���}hd�}	||	vrd}|dvrd
}tj�d
��pd������}
|
dvrdn*tt
t|
��d��d��}|�dn<tttj�dd��pd��d��}|�dn|dz
|z}
gg}}|r.|�d��|�d|�d���|r*|�d��|�|��|rttj
|d�����td���z�
��}|�d��|�|��|rdd�|��znd}d|�d|��}d|�d |�d!|�d"|����d#�	|�dnd$z}t!��}|���5}|�||��|���d%}|�|�||��n|�||||
gz��|���}ddd��n#1swxYwYd&�}d'�d(D��}|D�]}|d)xx||�d)����z
cc<|d*xx||�d*����z
cc<|d+xx||�d+����z
cc<|d,xx||�d,����z
cc<|d-xx||�d-����z
cc<|d.xx||�d.����z
cc<��
|�dnt||zdz
|zd��}|�|n|}t+d/|||||||||||
|�0�
�
S)1N�inxpress_invoicesr�r�rvrwc��|sdSdD]L}tj||��������cS#t$rY�IwxYwdS)Nr�r�r�s  r#�to_isozinvoices.<locals>.to_iso�sh������C�	$�	$�C� �)�!�S�1�1�6�6�8�8�B�B�D�D�D�D�D���#�#�#�t�t�#�����ts�8A�
A�Ar��invoice_dater��desc>�
amount_due�
invoice_idr�airbills_countr��customer_number�vat_shipments_vat�vat_shipments_total�vat_shipments_amount�non_vat_shipments_total�non_vat_shipments_amount>r�rr�r�>r\r�r�r�r�rr�rzinvoice_number LIKE %sr�zinvoice_date >= %sr�r�zinvoice_date < %sr�r�zSELECT COUNT(*) AS n FROM r�a*
        SELECT invoice_id, invoice_number, invoice_date, customer_number,
               airbills_count, amount_due,
               vat_shipments_amount, vat_shipments_vat, vat_shipments_total,
               non_vat_shipments_amount, non_vat_shipments_total,
               pdf_file
        FROM z	
        z
        ORDER BY `z` z, invoice_id DESC
    r�r�c�\�|�tt|����ntd��Sr�r�r�s r#r�zinvoices.<locals>.d
r�r"c�.�i|]}|td����Sr�r�r�s  r#r�zinvoices.<locals>.<dictcomp>s,�����1�A�w�v�����r")rrrrrrrrrrrrz
invoices.html)rxr�r�r�r�r�r�r�r�r�r�r�)r	r:r,r�rgr�r�r�r�rr�r�rr�r�r�rr{r|r�r}r)r�r�r�r�rr�r�r�r��
allowed_sortsr�r�r�r�r�r��ndrrrr�rrrxr�r�r�r�r
s                             r#r�r��s	���E�
��	�	�#�	�	�	$�"�+�+�-�-�A��\�%�%�f�-�-�3��:�:�<�<�M��\�%�%�d�+�+�3��:�:�<�<�K�����F�=�)�)�M��F�;�'�'�K���!�!�&�)�)�;�^�B�B�D�D�D���!�!�%�(�(�2�F�9�9�;�;�I����M��=� � ��$���&�&�F�	��L�$�$�Z�0�0�9�E�@�@�B�B�H�H�J�J�L�#�'7�7�7�t�t�S��S��EV�EV�Xa�Ab�Ab�df�=g�=g�H�� �1�1�c�#�g�l�.>�.>�v�q�.I�.I�.N�Q�*O�*O�QR�&S�&S�D��"�Q�Q����X�(=�F���6�E�� �
���-�.�.�.��
�
�h�!�h�h�h�����I�
���)�*�*�*�F�M�M�-�,H�,H�,H��=����Z�8�8�=�=�?�?�)�QR�BS�BS�BS�S�
^�
^�
`�
`��
���(�)�)�)�6�=�=��+<�+<�+<�49�A��G�L�L��/�/�/�/�r�I�@�U�@�@�Y�@�@�I�	��
	�	�
�	�	��	�	�%�?�?�,�,�	�	�	��!�2�2�'<�	>�H��8�8�D�	
������#����I�v�&�&�&�S�\�\�^�^�C�5H�
����K�K��&�)�)�)�)��K�K��&�H�f�+=�"=�>�>�>��|�|�~�~��
������������������K�J�J���)����D��O�O���\����1�1�Q�U�U�<�-@�-@�+A�+A�A�����
#�$�$�$�1�1�Q�U�U�3I�-J�-J�+K�+K�K�$�$�$��
 �!�!�!�1�1�Q�U�U�3F�-G�-G�+H�+H�H�!�!�!��
"�#�#�#�1�1�Q�U�U�3H�-I�-I�+J�+J�J�#�#�#��
'�(�(�(�1�1�Q�U�U�3M�-N�-N�+O�+O�O�(�(�(��
&�'�'�'�1�1�Q�U�U�3L�-M�-M�+N�+N�N�'�'�'�'��%���3�
�X�0E��0I�h�/V�XY�+Z�+Z�I�'/�'7���X����
�Q�#��
�.�j�I�
�Y�\�����s�2A9N7�7N;�>N;z/order/by-ref/<ref>c���t��}|���5}|�d|g��|���}ddd��n#1swxYwYt	d||���S)Na
            SELECT
              o.OrderNo,
              CONCAT_WS(' ', o.FirstName, o.Surname) AS Name,
              o.CompanyName,
              o.AddressLine1, o.AddressLine2, o.Town, o.County, o.Postcode, o.Country,
              o.EmailAddress,
              o.Message, o.Notes,
              o.DateTimeOrdered, o.DateTimePaid, o.DateTimeCompleted,
              o.TotalWeight, o.Subtotal, o.Discount, o.Delivery, o.VATIncluded, o.VATDeducted, o.GrandTotal,
              o.DeliveryWillCollect, o.DeliveryAddressSameAsInvoice,
              o.DeliveryName, o.DeliveryCompanyName, o.DeliveryAddressLine1, o.DeliveryAddressLine2,
              o.DeliveryTown, o.DeliveryCounty, o.DeliveryPostcode, o.DeliveryCountry, o.DeliveryInfo,
              o.DeliveryOption, o.DeliveryService, o.DeliveryCalculatedCost,
              o.EstimatedGrossWeight, o.EstimatedVolumetricWeight,
              o.PackageSize, o.PackageName, o.PaymentMethod, o.PaymentReference,
              o.Status, o.Courier, o.TrackingNo, o.MessageToCustomer,
              o.DeliveryAgentName, o.DeliveryAgentDate, o.DeliveryAgentCost,
              o.PackedBy, o.GrossWeight, o.CN22TariffCode, o.CommercialInvoiceInfo
            FROM orders o
            WHERE o.OrderNo = %s
            LIMIT 1
        zpartials/order_detail.html)�or�)rr{r|r�r)r�r�rr�s    r#�order_by_refr"%s����8�8�D�	
������#�����,�U�-	�	�	�.�l�l�n�n��1������������������2�7�3�C�H�H�H�Hs�,A�A�"A�__main__z	127.0.0.1i�)�host�port�debug)r )>�urllib.parserr�flaskrrrrr	r
rr�decimalr
r�dbr�filtersrrrr�	functoolsr�os�logging�pathlibr�__name__�appr+�permanent_session_lifetime�router$�before_requestr/�getenv�
secret_key�config�updaterIrVrFrMr(rZr&�basicConfig�DEBUGrirnrprtr�r�r r�rr�r,r"�runr!r"r#�<module>r<s���*�*�*�*�*�*�*�*�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�-�-�-�-�-�-�-�-�������%�%�%�%�%�%�!�!�!�!�!�!�(�(�(�(�(�(�(�(����������������������e�H�o�o��0�/�/��!*���!4�!4�!4������3���1�1���1���
&�
&���
&����>�<�8�8����
���� �!������r�y��W�%�%���r�y��[�)�)��1�1�1�1�&������8�e�F�^��,�,�)�)�-�,�)����9���&�&���&�

�2�9�[�#���#�%�%��C�I�)-�C�J�%�&��G��g�m�,�,�,�,�
�4�(�)�)���������� ���4���������3��� � ��� ����9�����������;���]�]���]�2+�*�*�*�*�*�*�*�������	:�	:�	:����<���m�m���m�`���(�)�)�C��C�C�C�*�)�C�"���;���`�`���`�D���	���I�I� ��I�@�z����G�G��4�t�G�4�4�4�4�4��r"