
    koi                     X   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlmZ  ej                  e      Zd2deded	e
e   fd
Z	 	 d3dedededededed	efdZdej,                  dedee   fdZdededee   deee	f   fdZdZdedefdZdedej,                  defdZdedej,                  defdZdedej,                  defdZdedej,                  defdZdedej,                  defdZ dedej,                  defd Z!dedej,                  defd!Z" ejF                  d"d#$      dededeee	f   fd%       Z$ ejF                  d"d&$      dededeee	f   fd'       Z% ejF                  d"d($      dededeee	f   fd)       Z& ejF                  d"d*$      dededeee	f   fd+       Z' ejF                  d"d,$      dededeee	f   fd-       Z( ejF                  d"d.$      dededeee	f   fd/       Z) ejF                  d"d0$      dededeee	f   fd1       Z*y)4a  
CSV Processing Celery Tasks
============================

Celery tasks for processing CSV file uploads asynchronously.
Each task reads the CSV file, processes it using the existing processor functions,
creates upload logs, and triggers snapshot tasks.

Task Pattern:
1. Read CSV file from file_path
2. Call existing processor function from controller.py
3. Create CSV upload log entry
4. Trigger snapshot tasks via trigger_tasks_for_affected_tables()
5. Update task tracker status
    N)datetime)Path)DictAnyOptionalListSet)
celery_apptask_idstatuserror_messagec                     	 ddl m}  || ||       y# t        $ r"}t        j	                  d|        Y d}~yd}~ww xY w)z$Helper to update task tracker statusr   )update_csv_task_statusz#Could not update CSV task tracker: N)/src.smart_inventory.utils.csv_task_orchestratorr   	Exceptionloggerwarning)r   r   r   r   es        L/var/www/html/hubwallet-dev/src/smart_inventory/tasks/csv_processing_task.py_update_trackerr       s@    BZw> B<QC@AABs    	>9>
company_idcsv_type	file_pathprocessing_statusrows_processed
rows_totalc           	      $   	 ddl m}  ||||||||      }	| j                  |	       | j                          t        j                  d| d|        y# t        $ r2}
t        j                  d|
        | j                          Y d}
~
yd}
~
ww xY w)z%Helper to create CSV upload log entryr   )CSVUploadLog)r   r   r   r   r   r   r   zCreated CSV upload log: z - z!Could not create CSV upload log: N)	+src.smart_inventory.apps.data_import.modelsr   addcommitr   infor   r   rollback)dbr   r   r   r   r   r   r   r   logr   s              r   _create_upload_logr&   )   s    L!/)!'
 	s
		.xj<M;NOP :1#>?
s   AA 	B(B

Bdfupload_typereturnc                    dgdgdgdgdgd}|j                  |g       }t               }|D ]  }|| j                  v s	 t        j                  | |   d      j                         }|j                  j                  j                         D ]"  }|j                  |j                  d             $  t        t        |            S # t        $ r%}t        j                  d	| d
|        Y d}~d}~ww xY w)zB
    Extract unique dates from CSV data based on upload type.
    receive_order_date
order_datereturn_datetransfer_datepurchase_receivesales_ordersales_returnpurchase_returnstock_transfercoerce)errors%Y-%m-%dz"Could not parse dates from column z: N)getsetcolumnspdto_datetimedropnadtdateuniquer    strftimer   r   r   sortedlist)	r'   r(   CSV_DATE_COLUMNSdate_columnsunique_datescoldatesdr   s	            r   _extract_unique_datesrJ   @   s     22$~&)?*+ $''R8L UL P"**Pr#wx@GGI--/ =A $$QZZ
%;<=	P $|$%%  P!CC51#NOOPs   A1C	C4C//C4rF   c           	         ddl m} g dg dg dg dddgd	}|j                  |g       }|sd
dddS t        j                         j                  d      }|r|d   |k7  r|j                  |       	  || |||      }t        j                  d|d    d|d    d|d           |S # t        $ r2}	t        j                  d|	        d
ddt        |	      dcY d
}	~	S d
}	~	ww xY w)z:
    Trigger snapshot tasks based on affected tables.
    r   )!trigger_tasks_for_affected_tables)purchase_order_receivepurchase_order_receive_linesinventory_batchesinventory_movements)sales_orderssales_order_linesrO   rP   )sales_return_orderssales_return_order_linesrO   rP   )purchase_order_returnpurchase_order_return_linesrO   rP   rP   rO   r/   N)batch_idtasks_triggeredtasks_on_holdr7   )r$   affected_tablesr   rF   z
Triggered rX   z snapshot tasks, rY   z on hold for batch rW   z"Failed to trigger snapshot tasks: )rW   rX   rY   error)+src.smart_inventory.utils.task_orchestratorrL   r8   r   nowrA   appendr   r"   r   r\   str)
r$   r   r(   rF   rL   CSV_TYPE_TO_AFFECTED_TABLESr[   	today_strresultr   s
             r   _trigger_snapshot_tasksrd   \   s    ^ Chw02EF# 255k2FO QKK ''
3I<+y8I&]2+!%	
 	 1233Do&'':6*;M:NP	
  ]9!=> QUXYZU[\\]s   24B' '	C"0'CC"C"d   batchc                 `    |r,| j                  |       | j                          t        |      S y)z*Commit a batch of objects to the database.r   )add_allr!   len)r$   rf   s     r   _commit_batchrj      s'    


5
		5z    c                 X   ddl m}m}m}m}m}m} d}	g }
|j                         D ]  \  }}|j                  d      sd}|j                  d      r| j                  |      j                  |j                  |d   k(  |j                  |k(        j                         }|s? ||d   |      }| j                  |       | j                          | j!                  |       | j                  |      j                  |j"                  |d   k(  |j                  |k(        j                         }|s |||r|j$                  nd|d   |j                  d      |j                  d      |j                  d	      |j                  d
      |j                  dd            }| j                  |       | j                          | j!                  |       n|r|j$                  n|j&                  |_        |j                  d|j(                        |_        |j                  d|j*                        |_        |j                  d	|j,                        |_        |j                  d
|j.                        |_        | j                  |       | j                          | j!                  |       |j                  d      r[t1        |d         j3                  d      }|D ]8  }| j                  |      j                  |j4                  |k(  |j                  |k(        j                         }|s< |||      }| j                  |       | j                          | j!                  |       | j                  |      j                  |j                  |k(  |j6                  |j$                  k(  |j8                  |j$                  k(        j                         }|r |||j$                  |j$                        }| j                  |       | j                          ; |j                  d      r[t1        |d         j3                  d      }|D ]8  }| j                  |      j                  |j:                  |k(  |j                  |k(        j                         }|s< |||      }| j                  |       | j                          | j!                  |       | j                  |      j                  |j                  |k(  |j6                  |j$                  k(  |j<                  |j$                  k(        j                         }|r |||j$                  |j$                        }| j                  |       | j                          ; |	dz  }	|	t>        z  dk(  sit@        jC                  d|	 d        |	S )z5Process product CSV synchronously with batch commits.r   )CategoryProductLocationProductLocationVendorProductVendorproduct_nameNcategory_name)rt   r   
short_namedescription
brand_nameskueligible_for_returnF)r   fk_product_category_idrs   ru   rv   rw   rx   ry   location_name|)r{   r   )r   
product_idlocation_idvendor_name)r   r   )r   r}   	vendor_id   
Processed z product rows)"(src.smart_inventory.apps.products.modelsrm   rn   ro   rp   rq   rr   iterrowsr8   queryfilterrt   r   firstr    r!   refreshrs   idrz   ru   rv   rw   rx   r`   splitr{   r}   r~   r   r   
BATCH_SIZEr   debug)r$   r   r'   rm   rn   ro   rp   rq   rr   inserted_rowsrf   idxrowcategoryproduct	locationsloc_namelocationproduct_locationvendorsr   vendorproduct_vendors                          r   _process_product_csv_syncr      s     MEKKM nDSww~& 77?#xx)00&&#o*>>##z1 eg  #"%o"6) x 		

8$ ((7#**  C$77*,
 %' 	
 %6>x{{D 077<0GGM277<0GGEN$'GG,A5$I	G FF7OIIKJJw<DX[['JhJhG*!$w7I7I!JG"%''-9L9L"MG!$w7I7I!JG''%5GKFF7OIIKJJw 77?#C0177<I%  88H-44**h6'':5 %'   'h:VHFF8$IIKJJx(#%88O#<#C#C#..*<#..'**<#//8;;>$ %'	 !
 ('6#-#*::$,KK($
 FF+,IIK/ 4 77=!#m,-33C8G&  &)00&&+5%%3 %'  #
SFFF6NIIKJJv&!#-!8!?!?!,,
:!,,

:!++vyy8" %'	 
 &%2#-#*::"())&N
 FF>*IIK/ 2 	 :%*LL:m_MBC]nD` rk   c                    ddl m}m}m} ddlm}m}m} d}	|j                         D ]  \  }
}| j                  |      j                  |j                  |d   k(  |j                  |k(        j                         }|sV| j                  |      j                  |j                  |d   k(  |j                  |k(        j                         }|s| j                  |      j                  |j                  |d   k(  |j                  |k(        j                         }| j                  |      j                  |j                   |d   k(  |j                  |k(        j                         } |||d   |r|j"                  nd|r|j"                  nd|d	   |j$                  
      }| j'                  |       | j)                          | j+                  |       | j                  |      j                  |j                  |k(  |j,                  |j"                  k(  |j.                  |j"                  k(        j                         }|sU |||j"                  |j"                  |d   |j1                  dd            }| j'                  |       | j)                          |	dz  }	|	t2        z  dk(  s~t4        j7                  d|	 d        |	S )z<Process purchase order CSV synchronously with batch commits.r   )PurchaseOrderPurchaseOrderLinePurchaseOrderStatusrn   ro   rq   rs   purchase_order_ref_nor   r{   Npurchase_order_date)r   
ref_numbersupplier_idr~   r,   r   	order_qty	unit_cost        )r   purchase_order_idr}   ordered_qtyr   r   r   z purchase order rows))src.smart_inventory.apps.inventory.modelsr   r   r   r   rn   ro   rq   r   r   r   rs   r   r   r   r   r{   r   SENTr    r!   r   r   r}   r8   r   r   r   )r$   r   r'   r   r   r   rn   ro   rq   r   r   r   r   purchase_orderr   r   purchase_order_items                    r    _process_purchase_order_csv_syncr     s     SRMKKM 7KS((7#**  C$77*,
 %' 	 -077$$,C(DD$$
2
 %' 	
 XXf%,,""c-&88!!Z/ eg  xx)00&&#o*>>##z1 eg 
 +%67)/FIIT+3HKK45*//N FF>"IIKJJ~& hh'89@@((J6//>3D3DD((GJJ6
 %'	 	 #"3%"0"3"3"::,''+s3# FF&'IIK:%*LL:m_4HIJo7Kr rk   c                    ddl m}m}m}m}m}m}m}	m}
 ddl	m
}m}m} d}|j                         D ]  \  }}| j                  |      j                  |j                   |d   k(  |j"                  |k(        j%                         }|sV| j                  |      j                  |j&                  |d   k(  |j"                  |k(        j%                         }|s| j                  |      j                  |j(                  |d   k(  |j"                  |k(        j%                         }| j                  |      j                  |j"                  |k(  |j*                  |d   k(  |j                   |d   k(        j%                         }|s| j                  |      j                  |j,                  |d   k(  |j"                  |k(        j%                         } |||d   |d   |d	   |j.                  |r|j.                  nd
|r|j.                  nd
|j0                        }| j3                  |       | j5                          | j7                  |       | j                  |      j                  |j"                  |k(  |j8                  |j.                  k(  |j:                  |j.                  k(        j%                         }|sU |||j.                  |j.                  |d   |j=                  dd            }| j3                  |       | j5                          | j                  |      j                  |j>                  |j.                  k(  |j:                  |j.                  k(        j%                         }|r(|j@                  |d   z   |_         | j3                  |       | j                  |      j                  |j>                  |j.                  k(        jC                         }tC        d |D              }|r"|j0                  |_"        | j3                  |       | j                  |      j                  |j"                  |k(  |j:                  |j.                  k(  |r|jF                  |j.                  k(  nd
      j%                         }|r;|jH                  |d   z   |_$        |d	   |_%        tM        jN                         |_(        nU |||j.                  |r|j.                  nd
|d   |d   |d	   tM        jN                         tM        jN                               }| j3                  |        |	||j.                  |r|j.                  nd
|r|j.                  nd
|d   |
jR                  tU        |j.                              }| j3                  |       | j5                          |dz  }|tV        z  dk(  svtX        j[                  d| d        |S )z>Process purchase receive CSV synchronously with batch commits.r   )r   r   r   PurchaseReceiveOrderPurchaseOrderReceiveLineInventoryBatchInventoryMovementMovementTyper   r   rs   r{   receive_order_ref_nor   r+   N)r   linked_ref_numberr   received_dater   r   r~   r   receive_qtyr   r   )r   purchase_order_receive_idr}   received_qtyr   c              3   N   K   | ]  }|j                   |j                  k\    y wN)r   r   ).0lines     r   	<genexpr>z5_process_purchase_receive_csv_sync.<locals>.<genexpr>  s!     ZT4,,0@0@@Zs   #%)r   r}   r~   	batch_refquantity_on_handr   
created_at
updated_atr   r}   r~   rW   quantity_deltamovement_type	referencer   r   z purchase receive rows).r   r   r   r   r   r   r   r   r   r   rn   ro   rq   r   r   r   r   r   r   rs   r{   r   r   r   RECEIVEDr    r!   r   r   r}   r8   r   r   allr   r~   r   r   r   r^   r   RECEIPTr`   r   r   r   )r$   r   r'   r   r   r   r   r   r   r   r   rn   ro   rq   r   r   r   linked_purchase_orderr   r   r0   r   receive_order_itempo_lineall_po_linesall_receivedcurrentstockinventory_moves                               r   "_process_purchase_receive_csv_syncr   `  sW     
 SRMKKM xMS " 7 > >$$,C(DD$$
2!
 %' 	 %((7#**  C$77*,
 %' 	 88H%,,""c/&:::-
 %' 	
 88$89@@ ++z9 22c:Q6RR ++s3I/JJ
 %'	 	  XXf%,,""c-&88!!Z/ eg 
  4%"%&=">56!"67"7":":)/FIIT+3HKK*33	  FF#$IIKJJ'(XX&>?FF$//:=$>>BRBUBUU$//7::=
 %'	 	 "!9%*:*=*=":: /''+s3" FF%&IIK ((,-44//3H3K3KK((GJJ6
 %' 	 #*#7#7#m:L#LG FF7O xx 1299//3H3K3KK

#% 	 Z\ZZ+>+G+G!(FF() xx/66%%3%%39AN&&(++5t
 %'	 	 ,8,I,ICP]L^,^L)),-A)BL&&.llnL#)%"::+3HKK56!$]!3!"67#<<>#<<>	L 	|*!zz'/T(4\__$}-&..*--.
 	~
		:%*LL:m_4JKLqxMt rk   c                    ddl m}m}m}m}m} ddlm}m}	 d}
|j                         D ][  \  }}| j                  |      j                  |j                  |d   k(  |j                  |k(        j                         }|sV| j                  |	      j                  |	j                  |d   k(  |	j                  |k(        j                         }| j                  |      j                  |j                   |d   k(  |j                  |k(        j                         }|sS |||d   |r|j"                  nd|d   d	
      }| j%                  |       | j'                          | j)                  |       | j                  |      j                  |j                  |k(  |j*                  |j"                  k(  |j,                  |j"                  k(        j                         }|sU |||j"                  |j"                  |d   |j/                  dd            }| j%                  |       | j'                          | j                  |      j                  |j                  |k(  |j,                  |j"                  k(  |r|j0                  |j"                  k(  nd      j                         }|rA|j2                  |d   z
  |_        t5        j6                         |_        | j%                  |        |||j"                  |r|j"                  nd|r|j"                  nd|d   dz  |j:                  t=        |j"                              }| j%                  |       | j'                          |
dz  }
|
t>        z  dk(  sCt@        jC                  d|
 d       ^ |
S )z9Process sales order CSV synchronously with batch commits.r   )
SalesOrderSalesOrderLiner   r   r   rn   ro   rs   r{   sales_order_ref_noNr,   store)r   r   r~   	sold_datechannelquantity
unit_pricer   )r   sales_order_idr}   r   r   rZ   r   r   r   z sales order rows)"r   r   r   r   r   r   r   rn   ro   r   r   r   rs   r   r   r{   r   r   r    r!   r   r   r}   r8   r~   r   r   r^   r   SALEr`   r   r   r   )r$   r   r'   r   r   r   r   r   rn   ro   r   r   r   r   r   
salesordersales_order_itemr   r   s                      r   _process_sales_order_csv_syncr     s7     KMKKM JHS((7#**  C$77*,
 %' 	 88H%,,""c/&:::-
 %' 	
 XXj)00!!S)=%>>!!Z/
 %' 	
 #%34+3HKKl+J FF:IIKJJz"88N3::%%3))Z]]:%%3
 %'	 	  -%)}}"::Z77<5  FF#$IIK xx/66%%3%%39AN&&(++5t
 %'	 	 ,8,I,ICPZO,[L)&.llnL#FF< *!zz'/T(4\__$
Ob0&++*--(
 	~
		:%*LL:m_4EFGUJHX rk   c                    ddl m}m}m}m}m}m} ddlm}	m	}
 d}|j                         D ]  \  }}| j                  |      j                  |j                  |d   k(  |j                  |k(        j                         }|sV| j                  |	      j                  |	j                   |d   k(  |	j                  |k(        j                         }|s| j                  |
      j                  |
j"                  |d   k(  |
j                  |k(        j                         }| j                  |      j                  |j                  |k(  |j$                  |d   k(  |j                  |d   k(        j                         }|sb |||j&                  |d   |d   |r|j&                  nd|d	   d
      }| j)                  |       | j+                          | j-                  |       | j                  |      j                  |j                  |k(  |j.                  |j&                  k(  |j0                  |j&                  k(        j                         }|sD |||j&                  |j&                  |d         }| j)                  |       | j+                          | j                  |      j                  |j                  |k(  |j0                  |j&                  k(  |r|j2                  |j&                  k(  nd      j                         }|rK|j4                  |d   z   |_        |d	   |_        t9        j:                         |_        | j)                  |        |||j&                  |r|j&                  nd|r|j&                  nd|d   |j>                  tA        |j&                              }| j)                  |       | j+                          |dz  }|tB        z  dk(  stD        jG                  d| d        |S )z:Process sales return CSV synchronously with batch commits.r   )r   SalesReturnOrderSalesReturnOrderLiner   r   r   r   r   rs   r{   return_order_ref_noNr-   r   )r   r   r   r   r~   returned_dater   r   )r   sales_return_order_idr}   r   r   r   r   z sales return rows)$r   r   r   r   r   r   r   r   rn   ro   r   r   r   r   r   r   rs   r{   r   r   r    r!   r   r   r}   r~   r   r   r   r^   r   SALE_RETURNr`   r   r   r   )r$   r   r'   r   r   r   r   r   r   rn   ro   r   r   r   linked_sales_orderr   r   r2   return_order_itemr   r   s                        r   _process_sales_return_csv_syncr   A  s     KMKKM TISXXj188!!S)=%>>!!Z/
 %' 	 "((7#**  C$77*,
 %' 	 88H%,,""c/&:::-
 %' 	
 xx 0188'':5..#6J2KK''3/D+EE
 %'	 	 +%14445"%&:";+3HKK!-0L FF< IIKJJ|$HH%9:AA ++z9 66,//I ++wzz9
 %'	 	 ! 4%&2oo"::Z	! FF$%IIK xx/66%%3%%39AN&&(++5t
 %'	 	 ,8,I,ICPZO,[L)),]);L&&.llnL#FF< *!zz'/T(4\__$z?&22,//*
 	~
		:%*LL:m_4FGHiTIl rk   c                    ddl m}m}m}m}m}m}m}	 ddlm	}
m
}m} d}|j                         D ]  \  }}| j                  |      j                  |j                  |d   k(  |j                   |k(        j#                         }|sV| j                  |
      j                  |
j$                  |d   k(  |
j                   |k(        j#                         }|s| j                  |      j                  |j&                  |d   k(  |j                   |k(        j#                         }| j                  |      j                  |j                   |k(  |j(                  |d   k(  |j                  |d   k(        j#                         }|s| j                  |      j                  |j*                  |d   k(  |j                   |k(        j#                         } |||j,                  |d   |d   |r|j,                  nd	|r|j,                  nd	|d
   |j.                        }| j1                  |       | j3                          | j5                  |       | j                  |      j                  |j                   |k(  |j6                  |j,                  k(  |j8                  |j,                  k(        j#                         }|sD |||j,                  |j,                  |d         }| j1                  |       | j3                          | j                  |      j                  |j                   |k(  |j8                  |j,                  k(  |r|j:                  |j,                  k(  nd	      j#                         }|rA|j<                  |d   z
  |_        t?        j@                         |_!        | j1                  |        |||j,                  |r|j,                  nd	|r|j,                  nd	|d   dz  |	jD                  tG        |j,                              }| j1                  |       | j3                          |dz  }|tH        z  dk(  stJ        jM                  d| d       ! |S )z=Process purchase return CSV synchronously with batch commits.r   )r   PurchaseReturnOrderPurchaseOrderReturnLiner   r   r   r   r   r   rs   r{   r   r   Nr-   )r   purchase_receive_order_idr   r   r   r~   r   r   
return_qty)r   purchase_order_return_idr}   r   rZ   r   r   r   z purchase return rows)'r   r   r   r   r   r   r   r   r   rn   ro   rq   r   r   r   r   r   r   rs   r{   r   r   r   RETURNEDr    r!   r   r   r}   r~   r   r   r^   r   PURCHASE_RETURNr`   r   r   r   )r$   r   r'   r   r   r   r   r   r   r   rn   ro   rq   r   r   r   linked_receive_orderr   r   r3   r   r   r   r   s                           r   !_process_purchase_return_csv_syncr     s      SRMKKM YLS!xx(<=DD ++s3I/JJ ++z9 
 %' 	 $((7#**  C$77*,
 %' 	 88H%,,""c/&:::-
 %' 	
 ((#67>>**j811S9O5PP**c2G.HH
 %'	 	 XXf%,,""c-&88!!Z/ eg 
 2%*>*A*A45"%&<"=)/FIIT+3HKK!-0*33	O FF?#IIKJJ'HH%<=DD#..*<#<<@R@RR#..'**<
 %'	 	 ! 7%)8););"::|,	! FF$%IIK xx/66%%3%%39AN&&(++5t
 %'	 	 ,8,I,ICP\L],]L)&.llnL#FF< *!zz'/T(4\__$-2&66/,,-
 	~
		:%*LL:m_4IJKsYLv rk   c           
      ,   ddl m}m}m} ddlm}m} d}|j                         D ]k  \  }	}
| j                  |      j                  |j                  |
d   k(  |j                  |k(        j                         }|sV| j                  |      j                  |j                  |
d   k(  |j                  |k(        j                         }| j                  |      j                  |j                  |
d   k(  |j                  |k(        j                         }|
d   }|
j                  dd	      }| j                  |      j                  |j                  |k(  |j                  |j                   k(  |r|j"                  |j                   k(  nd
      j                         }|r>|j$                  |z
  |_        t'        j(                         |_        | j-                  |        |||j                   |r|j                   nd
|r|j                   nd
|dz  |j.                  |      }| j-                  |       | j1                          | j                  |      j                  |j                  |k(  |j                  |j                   k(  |r|j"                  |j                   k(  nd
      j                         }|rH|j$                  |z   |_        |
d   |_        t'        j(                         |_        | j-                  |       | j1                           |||j                   |r|j                   nd
|r|j                   nd
||j4                  |      }| j-                  |       | j1                          |dz  }|t6        z  dk(  sSt8        j;                  d| d       n |S )z<Process stock transfer CSV synchronously with batch commits.r   )r   r   r   r   rs   from_location_nameto_location_namer   transfer_ref_no NrZ   r   r.   r   r   z stock transfer rows)r   r   r   r   r   rn   ro   r   r   r   rs   r   r   r{   r8   r}   r   r~   r   r   r^   r   r    TRANSFER_OUTr!   r   TRANSFER_INr   r   r   )r$   r   r'   r   r   r   rn   ro   r   r   r   r   from_locationto_locationtransfer_qtytransfer_refcurrentstock_fromtransfer_out_movecurrentstock_totransfer_in_moves                       r    _process_stock_transfer_csv_syncr    sQ     KMKKM JKS((7#**  C$77*,
 %' 	 *11""c*>&??:-
 %' 	
 hhx(//""c*<&==:-
 %' 	
 :ww0"5 HH^4;;%%3%%3>KN&&-*:*::QU
 %'	 	 1B1S1SVb1b.+3<<>(FF$%-!zz,9((t->&))D(2-&33"
 	 !
		 ((>299%%3%%3<GN&&+..8T
 %'	 	 />/O/OR^/^O,,/,@O))1O&FF?#
		,!zz*54+:_'''&22"
 	 
		:%*LL:m_4HIJUJKX rk   TzAsrc.smart_inventory.tasks.csv_processing_task.process_product_csv)bindnamec                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        ||d
|d||       t        | j                  j
                  d       d|d
d|j                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t        $ r}|j!                          t        j#                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j                          S d}~ww xY w# |j                          w xY w)zProcess product CSV file.r   get_db_sessionfailureFsuccessr\   NstartedzProcessing product CSV:  rowsr   	succeededr  Tr  r   r(   zError processing product CSV: exc_infofailed)src.utils.dbr  ImportErrorr   requestr   r`   r;   read_csvri   r   r"   r   r&   closer   r#   r\   	selfr   r   r  r   r$   r   r'   r   s	            r   process_product_csvr  h  sz   3/
 
	BJ3 [[#W
.zl%@A 32z2F 	2z9in^hi3 ,$
 	
I  3CF; 3q62238  3
5aS9DI2z9i1jZ]^_Z`aCF; 3q622 	
3 	
N   B? BD ?	D
7D?D
D
	F-A<F(F-F0 (F--F0 0GzHsrc.smart_inventory.tasks.csv_processing_task.process_purchase_order_csvc                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        ||d
|d||       t        | j                  j
                  d       d|d
d|j                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t        $ r}|j!                          t        j#                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j                          S d}~ww xY w# |j                          w xY w)z Process purchase order CSV file.r   r  r	  Fr
  Nr  zProcessing purchase_order CSV: r  r   r  r  Tr  z%Error processing purchase_order CSV: r  r  )r  r  r  r   r  r   r`   r;   r  ri   r   r"   r   r&   r  r   r#   r\   r  s	            r   process_purchase_order_csvr    sy   3/
 
	BJ3[[#W
5j\GH9"j"M2z+;YUceop3 ,+
 	
A  3CF; 3q62230  3
<QC@4P2z+;YRSU_adefaghCF; 3q622 	
3 	
r  zJsrc.smart_inventory.tasks.csv_processing_task.process_purchase_receive_csvc                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        |d
      }	t        ||d
|	       t        ||d
|d||       t        | j                  j
                  d       d|d
d|j!                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t"        $ r}|j%                          t        j'                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j!                          S d}~ww xY w# |j!                          w xY w)z"Process purchase receive CSV file.r   r  r	  Fr
  Nr  z!Processing purchase_receive CSV: r  r0   r  r  Tr  z'Error processing purchase_receive CSV: r  r  )r  r  r  r   r  r   r`   r;   r  ri   r   r"   r   rJ   rd   r&   r  r   r#   r\   
r  r   r   r  r   r$   r   r'   r   rF   s
             r   process_purchase_receive_csvr     s   3/
 
	BJ3[[#W
7
|5IJ;B
BO -R1CDJ0BLQ2z+=y+Wegqr3 ,-
 	
I  3CF; 3q62238  3
>qcBTR2z+=y(TUWacfghcijCF; 3q622 	
3 	
N   C B6D' 	D$"7DD$D$'	G0A<G,G-G
 GG
 
GzEsrc.smart_inventory.tasks.csv_processing_task.process_sales_order_csvc                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        |d
      }	t        ||d
|	       t        ||d
|d||       t        | j                  j
                  d       d|d
d|j!                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t"        $ r}|j%                          t        j'                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j!                          S d}~ww xY w# |j!                          w xY w)zProcess sales order CSV file.r   r  r	  Fr
  Nr  zProcessing sales_order CSV: r  r1   r  r  Tr  z"Error processing sales_order CSV: r  r  )r  r  r  r   r  r   r`   r;   r  ri   r   r"   r   rJ   rd   r&   r  r   r#   r\   r  s
             r   process_sales_order_csvr#    s   3/
 
	BJ3[[#W
2:,eDE6r:rJ -R?J|L2z=)[R`blm3 ,(
 	
I  3CF; 3q62238  3
9!=M2z=)XqR\^abc^deCF; 3q622 	
3 	
r!  zFsrc.smart_inventory.tasks.csv_processing_task.process_sales_return_csvc                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        |d
      }	t        ||d
|	       t        ||d
|d||       t        | j                  j
                  d       d|d
d|j!                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t"        $ r}|j%                          t        j'                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j!                          S d}~ww xY w# |j!                          w xY w)zProcess sales return CSV file.r   r  r	  Fr
  Nr  zProcessing sales_return CSV: r  r2   r  r  Tr  z#Error processing sales_return CSV: r  r  )r  r  r  r   r  r   r`   r;   r  ri   r   r"   r   rJ   rd   r&   r  r   r#   r\   r  s
             r   process_sales_return_csvr%    s   3/
 
	BJ3[[#W
3J<uEF7JK -R@JM2z>9kSacmn3 ,)
 	
I  3CF; 3q62238  3
:1#>N2z>9hPQS]_bcd_efCF; 3q622 	
3 	
r!  zIsrc.smart_inventory.tasks.csv_processing_task.process_purchase_return_csvc                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        |d
      }	t        ||d
|	       t        ||d
|d||       t        | j                  j
                  d       d|d
d|j!                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t"        $ r}|j%                          t        j'                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j!                          S d}~ww xY w# |j!                          w xY w)z!Process purchase return CSV file.r   r  r	  Fr
  Nr  z Processing purchase_return CSV: r  r3   r  r  Tr  z&Error processing purchase_return CSV: r  r  )r  r  r  r   r  r   r`   r;   r  ri   r   r"   r   rJ   rd   r&   r  r   r#   r\   r  s
             r   process_purchase_return_csvr'  @  s   3/
 
	BJ3[[#W
6zl%HI:2z2N -R1BCJ0A<P2z+<iVdfpq3 ,,
 	
I  3CF; 3q62238  3
=aSADQ2z+<iSTV`befgbhiCF; 3q622 	
3 	
r!  zHsrc.smart_inventory.tasks.csv_processing_task.process_stock_transfer_csvc                    	 ddl m}  |       }d}	 t        | j                  j
                  d       t        j                  |      }t        |      }t        j                  d| d	       t        |||      }t        |d
      }	t        ||d
|	       t        ||d
|d||       t        | j                  j
                  d       d|d
d|j!                          S # t        $ rB}t        | j                  j
                  dt        |             dt        |      dcY d}~S d}~ww xY w# t"        $ r}|j%                          t        j'                  d| d       t        ||d
|dd|t        |             t        | j                  j
                  dt        |             dt        |      dcY d}~|j!                          S d}~ww xY w# |j!                          w xY w)z Process stock transfer CSV file.r   r  r	  Fr
  Nr  zProcessing stock_transfer CSV: r  r4   r  r  Tr  z%Error processing stock_transfer CSV: r  r  )r  r  r  r   r  r   r`   r;   r  ri   r   r"   r  rJ   rd   r&   r  r   r#   r\   r  s
             r   process_stock_transfer_csvr)  l  s   3/
 
	BJ3[[#W
5j\GH9"j"M -R1ABJ0@,O2z+;YUceop3 ,+
 	
I  3CF; 3q62238  3
<QC@4P2z+;YRSU_adefaghCF; 3q622 	
3 	
r!  r   )NNN)+__doc__loggingpandasr;   r   pathlibr   typingr   r   r   r   r	   src.utils.celery_workerr
   	getLogger__name__r   r`   r   intr&   	DataFramerJ   rd   r   rC   rj   r   r   r   r   r   r   r  taskr  r  r   r#  r%  r'  r)   rk   r   <module>r6     s        1 1 .			8	$BS B# Bhsm B FJDHs c c *-?B#&>A.&bll & &c &8,],] ,] s)	,]
 
#s(^,]f 
T c yc yr|| y yxBS Bbll Bs BJEs E EQT EPV# V2<< VC Vr`3 `BLL `S `Fec er|| ePS ePUS Ubll Us Ux d!de(# (# ($sCx. ( f(V d!kl$ $ $cSVh $ m$N d!mn(3 (3 (4PSUXPX> ( o(V d!hi(c (c (d3PS8n ( j(V d!ij(s (s (tCQTH~ ( k(V d!lm(# (# ($sTWx. ( n(V d!kl( ( (cSVh ( m(rk   