
    6i                         d dl Z d dlmZ 	 d dlmZ  e j                  e	      Z
 ej                  d      d	dedz  fd       Zy# e$ rZ ede        dZY dZ[JdZ[ww xY w)
    N)
celery_app)get_db_sessionz,Warning: Could not import required modules: T)bindtarget_date_strc                    	 ddl m}m} ddlm} ddlm} t        sdd	dS |r|j                  |      }n|j                         }t               }	 |j                  |      j                  |j                  |k(        j!                  d
       |j#                          |j                  |j$                  j'                  d      |j(                  j'                  d      |j*                  j'                  d      |j-                  |j/                  |j0                        d      j'                  d            j                  |j                  |j2                        |k(        j5                  |j$                  |j(                  |j*                        j7                         }	|	D 
ci c]=  }
|
j$                  |
j(                  |
j*                  ft9        |
j:                  xs d      ? }}
t=        |j?                               }g }|D ]L  }|\  }}}|jA                  |d      }d}|}|dk  rd}n||z  } |||||||||      }|jC                  |       N |r!|jE                  |       |j#                          d|jG                         tI        |      d|jK                          S # t        $ r0}t        j                  d|        dt        |      dcY d}~S d}~ww xY wc c}
w # tL        $ rR}|jO                          t        j                  d| d       dt        |      dcY d}~|jK                          S d}~ww xY w# |jK                          w xY w)z
    Compute daily service level per (company, location, product) from
    sales (fulfilled demand) + stockout events (lost demand).

    service_level = fulfilled_qty / (fulfilled_qty + lost_sales_qty)
    r   )
DailySalesServiceLevelDaily)func)datez#Failed to import required modules: F)successerrorNzDatabase session not available)synchronize_session
company_idlocation_id
product_idg        fulfilled_qtyg      ?)r   r   r   r   
demand_qtyr   lost_sales_qtyservice_levelT)r   r   rows_insertedz&Error in compute_service_level_daily: )exc_info)()src.smart_inventory.apps.inventory.modelsr   r	   
sqlalchemyr
   datetimer   ImportErrorloggerr   strr   fromisoformattodayqueryfilterdeletecommitr   labelr   r   coalescesumquantity_sold	sale_dategroup_byallfloatr   setkeysgetappendbulk_save_objects	isoformatlenclose	Exceptionrollback)selfr   r   r	   r
   r   etarget_datedb
sales_rowsr	sales_mapall_keysservice_level_rowskeyr   r   r   r   r   r   service_level_valuerecords                          K/var/www/html/hubwallet-dev/src/smart_inventory/tasks/service_level_task.pycompute_service_level_dailyrC      s	   3[#!
 !,LM	M ((9jjl		Ba
"#**""k1	

&U&
+
		 HH%%++L9&&,,];%%++L9dhhz'?'?@#FLL_]	 VDIIj223{BCX%%&&%%
 SU 	$  
 \\1==!,,7q?URU9VV
	 
: y~~'( 	.C25/JZ%MM#s3M N 'JQ&)#&3j&@#& %'%%+-1	F %%f-/	.2   !34IIK ))+ !34
 	
_  3:1#>? 3q6223L
H  3
=aSADQ 3q622

3
 	
sb   J  EK!  AK"B-K!  	K)%KKKK! !	L<*7L7!L<"L? 7L<<L? ?M)N)loggingsrc.utils.celery_workerr   src.utils.dbr   r   r7   print	getLogger__name__r   taskr   rC        rB   <module>rM      s{     .+
 
		8	$ d{sTz { {  	8
<=Ns   A A!
AA!