U
    &0h[                     @   sd  d Z dddgddgdge ge gddgdge ge gdd	gdge ge gdd
dddddddddddddddddgdd	gdgdgdgddgdgdgdgdd gdgdgdgdd!gdgdgdgdd"gdgdgdgdd#gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd$gdgdgdgdd%gdgdgdgdd&dd'dddgddgdge ge gddgdge ge gdd(gdge ge gdd
dddd)d*d+d,d-d.d/d0d1d2d3d4d5d6d7gd8d9gdge ge gdd:gdge ge gdd;gdge ge gdd<gdge ge gdd%gdge ge gdd=gdge ge gdd>gdge ge gdd?gdge ge gdd@gdge ge gddAgdge ge gddBgdge ge gddCgdge ge gddDgdge ge gddEgdge ge gddFgdge ge gddGgdge ge gddHgdge ge gddIdddd)ddJdKdLdMgdNdOgdgdPgdQgddRgdgdPgdQgddSgdgdPgdQgddTgdgdPgdQgddUgdgdPgdQgddVgdgdPgdQgddWgdgdPgdQgddXgdgdPgdQgddYdddd)dKdZgd[d\gd]gd^ge gdd:gd]gd^ge gdd;gd]gd^ge gdd_gd]gd^ge gdd`gd]gdage gddbddcdddgdi ddd)ddded*d-d.d/d0d1d2dfd,dgdhdidjdkdlgdmi ddddJdndodpdKgdqi ddrdddgdi ddsdtddudvdwdxdydzd{g
d|i dd}dddgddgdge ge gddgdge ge gdd~gdge ge gdd
dddd)ddddgddgdge ge gdd:gdge ge gddgdge ge gdd%gdge ge gddgdge ge gdd%gdge ge gdd%gdge ge gdddddd)ddJdKdLdgddgdgdPgdQgddRgdgdPgdQgddgdgdPgdQgddgdgdPgdQgddUgdgdPgdQgddVgdgdPgdQgddWgdgdPgdQgddWgdgdPgdQgdddddddgdi ddddKddgdi dddddgdi ddsdzdgdi dddZd S )NRECORD_INDICATORCLIENT	STREAM_IDz9{data[RECORD_INDICATOR]}|{data[CLIENT]}|{data[STREAM_ID]}zdata[ci]="HD"g        )
ProcessingLoops	Loop_Len1	Loop_Len2zdata[ci]="EM"zdata[ci]="IT")r   r   r   )zCol ListtemplatemappingACTION_INDICATORPRODUCTDESCRIPTIONEXTRA_DESCRIPTIONBRAND/PRODUCT GROUPMOQBARCODE_1 ( Unit)BARCODE_2 ( Inner )BARCODE_3 ( Outer )INNER CARTON QTYOUTER CARTON QTYUNIT LENGTHUNIT WIDTH UNIT HEIGHTUNIT WEIGHTak  {data[RECORD_INDICATOR]}|{data[ACTION_INDICATOR]}|{data[PRODUCT]}|{data[DESCRIPTION]}|{data[EXTRA_DESCRIPTION]}|{data[BRAND/PRODUCT GROUP]}|{data[MOQ]}|{data[BARCODE_1 ( Unit)]}|{data[BARCODE_2 ( Inner )]}|{data[BARCODE_3 ( Outer )]}|{data[INNER CARTON QTY]}|{data[OUTER CARTON QTY]}|{data[UNIT LENGTH]}|{data[UNIT WIDTH ]}|{data[UNIT HEIGHT]}|{data[UNIT WEIGHT]}g       @z(loops_dict[1] = len({var}['variations'])z:loops_dict[2] = len({var}['variations'][{index1}]['skus'])zdata[ci]="U"a  data[ci]={var}['variations'][{index1}]['skus'][{index2}]['ean']
if (not data[ci]) or (not isinstance(data[ci],str)):
      error['IT']= 'No ean number'
      error['send_to_CD'] = True
      if 'sku_errors' in error.keys():
          error['sku_errors'].append({var}['variations'][{index1}]['skus'][{index2}]['sku_number'])
      else:
          error['sku_errors']=[{var}['variations'][{index1}]['skus'][{index2}]['sku_number']]
      blank_line[0] = TruezHdata[ci]={var}['variations'][{index1}]['skus'][{index2}]['product_name']zFdata[ci]={var}['variations'][{index1}]['skus'][{index2}]['sku_number']zDdata[ci]={var}['variations'][{index1}]['skus'][{index2}]['category']zdata[ci]=''zdata[ci]="")r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )HDITzdata[ci]="OR"CUST_ORDER_NUMBER
ORDER_DATEE_T_DVENDOR_ORD_NOSHIP_TO_NAMESHIP_TO_ADDRESS_1_1SHIP_TO_ADDRESS_1_2AREASTATEPOSTCODECOUNTRY
ORDER_TYPECARRIER_CODEPHONE_NOEMAIL_ADDRESSaZ  {data[RECORD_INDICATOR]}|{data[ACTION_INDICATOR]}|{data[CUST_ORDER_NUMBER]}|{data[ORDER_DATE]}|{data[E_T_D]}|{data[VENDOR_ORD_NO]}|{data[SHIP_TO_NAME]}|{data[SHIP_TO_ADDRESS_1_1]}|{data[SHIP_TO_ADDRESS_1_2]}|{data[AREA]}|{data[STATE]}|{data[POSTCODE]}|{data[COUNTRY]}|{data[ORDER_TYPE]}|{data[CARRIER_CODE]}|{data[PHONE_NO]}|{data[EMAIL_ADDRESS]}zdata[ci]="OR1"zdata[ci]="A"zdata[ci]={var}['id']zdata[ci]=str(datetime.strptime({var}['date'],'%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=from_zone).astimezone(to_zone).strftime("%Y%m%d"))zdata[ci]={var}['order_number']zdata[ci]={var}['customer_name']z#data[ci]={var}['address']['line_1']a>  line2 = {var}['address']['line_2']
line3 = {var}['address']['line_3']
if bool(line2) and (line3):
     data[ci]=" ".join([{var}['address']['line_2'],{var}['address']['line_3']])
elif bool(line2):
     data[ci]={var}['address']['line_2']
elif bool(line3):
     data[ci]={var}['address']['line_3']
else:
     data[ci]=""aE  address_error = checkAddressForError({var})
if 'City Error' in address_error.keys():
     data[ci] = 'Error'
     error['OR']= 'Error in Address'
     error['send_to_CD'] = False
     error['address_error'] = address_error
     error['City data received']={var}['address']['city']
else:
     data[ci]={var}['address']['city']aW  address_error = checkAddressForError({var})
if 'Aust State Error' in address_error.keys() :
     data[ci] = 'Error'
     error['OR']= 'Error in Address'
     error['send_to_CD'] = False
     error['address_error'] = address_error
     error['State data received']={var}['address']['state']
else:
     data[ci]={var}['address']['state'].upper()aV  address_error = checkAddressForError({var})
if 'Aust Postcode Error' in address_error.keys():
    data[ci] = 'Error'
    error['OR']= 'Error in Address'
    error['send_to_CD'] = False
    error['address_error'] = address_error
    error['Postcode data received'] ={var}['address']['postcode']
else:
     data[ci]={var}['address']['postcode']zif {var}['address']['country'] in cc_codes_pd['Alpha-2 code'].to_list() :
     data[ci]=cc_codes_pd.index[cc_codes_pd['Alpha-2 code'] == {var}['address']['country']].to_list()[0]
else:
     data[ci]= {var}['address']['country']zdata[ci]={var}['channel']a  method = {var}['shipping_method']
if 'DHL' in method:
     data[ci]='EM001'
elif 'Standard' in method:
     if 'signature' in {var}['customer_note'].lower():
          data[ci]='CD004'
     else:
          data[ci]='CD003'
elif 'Express' in method:
     data[ci] = 'CD020'
elif len(method) == 0:
     data[ci] = 'CD001'
else:
     data[ci] = 'Error'
     error['OR']= 'Error in Carrier Coding'
     error['send_to_CD'] = False
zdata[ci]={var}['contact_phone']zdata[ci]={var}['contact_email'])r   r
   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   QUANTITY_ORDEREDLINE_NUMBERBATCH NUMBERSTOCK STATUSz{data[RECORD_INDICATOR]}|{data[ACTION_INDICATOR]}|{data[CUST_ORDER_NUMBER]}|{data[PRODUCT]}|{data[QUANTITY_ORDERED]}|{data[LINE_NUMBER]}|{data[BATCH NUMBER]}|{data[STOCK STATUS]}zsif getQtyOrdered({var},{index1},{index2}):
     data[ci]="OR2"
else:
     data[ci] = None
     blank_line[0] = Truez(loops_dict[1] = len({var}['line_items'])zEloops_dict[2] = len({var}['line_items'][{index1}]['line_quantities'])ztif getQtyOrdered({var},{index1},{index2}):
     data[ci]="A"
else:
     data[ci] = None
     blank_line[0] = True


zzif getQtyOrdered({var},{index1},{index2}):
     data[ci]={var}['id']
else:
     data[ci] = None
     blank_line[0] = True
aF  if getQtyOrdered({var},{index1},{index2}):
     data[ci]={var}['line_items'][{index1}]['line_quantities'][{index2}]['upc_number']
     if (not data[ci]) or (not isinstance(data[ci],str)):
          error['OR_product'] = 'No upc number'
          error['send_to_CD'] = False
else:
     data[ci] = None
     blank_line[0] = Truezif getQtyOrdered({var},{index1},{index2}):
     data[ci] = getQtyOrdered({var},{index1},{index2})
else:
     data[ci] = None
     blank_line[0] = Truezyif getQtyOrdered({var},{index1},{index2}):
    data[ci]={line_count}
else:
     data[ci] = None
     blank_line[0] = Trueznif getQtyOrdered({var},{index1},{index2}):
   data[ci]=""
else:
     data[ci] = None
     blank_line[0] = Truezoif getQtyOrdered({var},{index1},{index2}):
   data[ci]=""
else:
     data[ci] = None
     blank_line[0] = True
)r   r
   r   r   r*   r+   r,   r-   
ORDER_NOTEzr{data[RECORD_INDICATOR]}|{data[ACTION_INDICATOR]}|{data[CUST_ORDER_NUMBER]}|{data[LINE_NUMBER]}|{data[ORDER_NOTE]}zdata[ci]="OR4"g      ?zUloops_dict[1]=getNotesLength([{var}['customer_note'],{var}['shipping_instructions']])zdata[ci]={line_count}a  if {line_count} == 1 : 
     note = {var}['customer_note']
     if bool(note):
          if 'do not fulfill' in {var}['customer_note'].lower():
               error['DNF'] = 'Do Not Fulfill in Shipping Instructions'  #changed from error['OR'] in Aug 2025 so that can exclude from emails to customer reps
               error['send_to_CD'] = False
               data[ci] = 'Customer Note: ' + note
     else:
          if 'do not fulfill' in {var}['shipping_instructions'].lower():
               error['DNF'] = 'Do Not Fulfill in Shipping Instructions' #changed from error['OR'] in Aug 2025 so that can exclude from emails to customer reps
               error['send_to_CD'] = False
          data[ci] = 'Shipping Instructions: ' + {var}['shipping_instructions']
elif {line_count} == 2:
     note = {var}['shipping_instructions']
     if bool(note):
          if 'do not fulfill' in {var}['shipping_instructions'].lower():
               error['DNF'] = 'Do Not Fulfill in Shipping Instructions' #changed from error['OR'] in Aug 2025 so that can exclude from emails to customer reps
               error['send_to_CD'] = False
          data[ci] =  'Shipping Instructions: ' + note
     else:
          data[ci] = 'Shipping Instructions: N/A'zGgetNotesLength([{var}['customer_note'],{var}['shipping_instructions']]))r   r
   r   r+   r.   )r   ZOR1ZOR2ZOR4ZIFAC_CUSTOMER_NOZETDZDELIVERY_DESC1ZSERVICE_LEVELZASNZINVOICE_NUMBERzTOTAL ITEMSZFREIGHT_CHARGEZCONSIGNMENT_NUMBERa  {data[RECORD_INDICATOR]}|{data[CUST_ORDER_NUMBER]}|{data[IFAC_CUSTOMER_NO]}|{data[ETD]}|{data[ORDER_DATE]}|{data[SHIP_TO_NAME]}|{data[SHIP_TO_ADDRESS_1_1]}|{data[SHIP_TO_ADDRESS_1_2]}|{data[AREA]}|{data[STATE]}|{data[POSTCODE]}|{data[DELIVERY_DESC1]}|{data[VENDOR_ORD_NO]}|{data[SERVICE_LEVEL]}|{data[ASN]}|{data[INVOICE_NUMBER]}|{data[TOTAL ITEMS]}|{data[FREIGHT_CHARGE]}|{data[CONSIGNMENT_NUMBER]}ZQUANTITY_SHIPPEDZVARIANCEZPACK_IDz{data[RECORD_INDICATOR]}|{data[PRODUCT]}|{data[QUANTITY_ORDERED]}|{data[QUANTITY_SHIPPED]}|{data[VARIANCE]}|{data[PACK_ID]}|{data[LINE_NUMBER]})r   ZOS1ZOS2ZCONSTZDATE_RECEIVEDZQUANTITYZREASON_CODEZ
SA_COMMENTzCONSIGNMENT NO.ZTRANSACTION_TYPEZORDER_NOZSTOCK_STATUSz{data[CONST]}|{data[DATE_RECEIVED]}|{data[PRODUCT]}|{data[QUANTITY]}|{data[REASON_CODE]}|{data[SA_COMMENT]}|{data[CONSIGNMENT NO.]}|{data[TRANSACTION_TYPE]}|{data[ORDER_NO]}|{data[STOCK_STATUS]})r   SAzdata[ci]="PT"CONTAINER_NUMBERARRIVAL_DATECONTAINER_TYPETOTAL_CARTONSz{data[RECORD_INDICATOR]}|{data[ACTION_INDICATOR]}|{data[CUST_ORDER_NUMBER]}|{data[CONTAINER_NUMBER]}|{data[ARRIVAL_DATE]}|{data[CONTAINER_TYPE]}|{data[TOTAL_CARTONS]}zdata[ci]="PT1"zNdata[ci]=str({var}['production_order_number']).zfill(4)+{var}['delivery_name']zwif {var}['in_warehouse_date']:
     data[ci]={var}['in_warehouse_date'][0:10].replace('-','')
else:
     data[ci] = ''
)r   r
   r   r0   r1   r2   r3   CARTON PACK_IDz{data[RECORD_INDICATOR]}|{data[ACTION_INDICATOR]}|{data[CUST_ORDER_NUMBER]}|{data[PRODUCT]}|{data[QUANTITY_ORDERED]}|{data[LINE_NUMBER]}|{data[BATCH NUMBER]}|{data[CARTON PACK_ID]}zsif getQtyOrdered({var},{index1},{index2}):
     data[ci]="PT2"
else:
     data[ci] = None
     blank_line[0] = Truezif getQtyOrdered({var},{index1},{index2}):
     data[ci]=str({var}['production_order_number']).zfill(4)+{var}['delivery_name']
else:
     data[ci] = None
     blank_line[0] = True
aF  if getQtyOrdered({var},{index1},{index2}):
     data[ci]={var}['line_items'][{index1}]['line_quantities'][{index2}]['upc_number']
     if (not data[ci]) or (not isinstance(data[ci],str)):
          error['PT_product'] = 'No upc number'
          error['send_to_CD'] = False
else:
     data[ci] = None
     blank_line[0] = True)r   r
   r   r   r*   r+   r,   r4   )r   ZPT1ZPT2ZPURCHASE_ORD_NUMBERZTOTAL_QUANTITY_RECzs{data[RECORD_INDICATOR]}|{data[PURCHASE_ORD_NUMBER]}|{data[LINE_NUMBER]}|{data[PRODUCT]}|{data[TOTAL_QUANTITY_REC]})r   TPZACKNOWLEDGEMENT_FLAGz;{data[CONST]}|{data[ORDER_NO]}|{data[ACKNOWLEDGEMENT_FLAG]})r   MO)r   ORZPCr/   PTr5   r6   )nanCD_file_format r;   r;   2/var/www/FlaskApp/FlaskApp/app/file_format_GMcL.py<module>   s   