Ë
    ?žj  ã                   ó„  — d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZ  eddg¬«      Z de!de	fd„Z"e jG                  de¬«       ed«       ed«       ed«       ee«       ee«      fde$dede
de$de%dededefd„«       Z&e jO                  de(e   ¬«       ee«       ee«      fde$dedede(e   fd„«       Z)e jU                  de+¬«       ee«       ee«      fde$d e$dedede+f
d!„«       Z,e jO                  d"e¬«      d#d$d% ee«       ee«      fde$d e$d&e$d'e$d(e-d%z  dededefd)„«       Z.e jO                  d*e¬«       ee«       ee«      fde$d+ed,ede$dededefd-„«       Z/e jO                  d.e¬«      d% ee«       ee«      fde$d/ede$d%z  dededefd0„«       Z0e jO                  d1e¬«      d%d% ee«       ee«      fde$d+ed,ede$d%z  d2e$d%z  dededefd3„«       Z1e jG                  d4e¬«       ee«       ee«      fde$d5edededef
d6„«       Z2y%)7uE   POS Analytics router â€” Pertamina Excel import and report endpoints.é    )Údate)Ú	APIRouterÚBackgroundTasksÚDependsÚFileÚFormÚHTTPExceptionÚ
UploadFile)ÚAsyncSession)Úget_db)Úget_current_user)ÚUser)ÚPosUploadResponseÚPosCompareResponseÚPosAnomaliResponseÚPosGoldenHoursResponseÚPosBatchListItemÚPosBatchTransaksiResponseÚGoldenHoursInsightRequestÚGoldenHoursInsightResponse)Úpos_analytics_service)Únotify_pos_uploadz/spbus/{spbu_id}/pos-analyticszpos-analytics)ÚprefixÚtagsÚeÚreturnc           
      óä   — t        | «      }|j                  d«      rH|j                  d«      }t        ddt	        |d   «      t	        |d   «      |d   |d   |d	   d
œdœ¬«      S t        d|¬«      S )Nzduplicate_batch::z::i™  Úduplicate_batché   é   é   é   é   )Úbatch_idÚ
total_rowsÚtanggal_mulaiÚtanggal_selesaiÚuploaded_at)ÚdetailÚexisting©Ústatus_coder)   é�  )ÚstrÚ
startswithÚsplitr	   Úint)r   ÚmsgÚpartss      ú;/var/www/html/spbu.com/backend/app/routers/pos_analytics.pyÚ_service_errorr5      s{   € Ü
ˆa‹&€CØ
‡~�~Ð)Ô*Ø—	‘	˜$“ˆÜ¨Ø'ä  a¡›MÜ! %¨¡(›mØ!& q¡Ø#(¨¡8Ø$ Q™xññ	6
ô 	ð 		ô  S°Ô5Ð5ó    z/upload)Úresponse_model.FÚspbu_idÚbackground_tasksÚfileÚ	produk_idÚforce_replaceÚdbÚcurrent_userc           	   ƒ   óì  K  — |j                   st        dd¬«      ‚|j                   j                  «       }|j                  d«      rd}n!|j                  d«      rd}nt        dd¬«      ‚|j	                  «       ƒ d	{  –—† }		 t        j                  || ||	|j                  ||«      ƒ d	{  –—† }
|j                  t        | |
j                  «       |
S 7 ŒU7 Œ)# t        $ r}t        |«      ‚d	}~ww xY w­w)
z(Upload Pertamina POS .xlsx or .csv file.r-   zNama file tidak validr+   z.xlsxÚxlsxz.csvÚcsvz$File harus berformat .xlsx atau .csvN)Úfilenamer	   ÚlowerÚendswithÚreadr   Úupload_pos_xlsxÚidÚ
ValueErrorr5   Úadd_taskr   r$   )r8   r9   r:   r;   r<   r=   r>   ÚfnameÚfile_extÚcontentÚresultr   s               r4   Ú
upload_posrN   (   sß   è ø€ ð �=Š=Ü¨Ð4KÔLÐLØ�M‰M×ÑÓ!€EØ‡~�~�gÔØ‰Ø	�‰˜Ô	Ø‰ä¨Ð4ZÔ[Ð[Ø—I‘I“K×€Gð Ü,×<Ñ<Ø�˜ G¨\¯_©_¸mÈXó
÷ 
ˆð
 ×ÑÔ/°¸&¿/¹/ÔJØ€Mð  øð
ùô ò  Ü˜QÓÐûð üsH   ‚A<C4Á>CÁ?C4Â(C Â,CÂ-C Â1$C4ÃC Ã	C1Ã!C,Ã,C1Ã1C4z/batchesc              ƒ   óJ   K  — t        j                  || «      ƒ d {  –—† S 7 Œ­w©N)r   Úlist_batches)r8   r=   r>   s      r4   rQ   rQ   G   s!   è ø€ ô '×3Ñ3°B¸Ó@×@Ð@Ð@ús   ‚#œ!�#z/batches/{batch_id}r$   c              ƒ   óº   K  — 	 t        j                  || ||j                  «      ƒ d {  –—†  ddiS 7 Œ# t        $ r}t	        dt        |«      ¬«      ‚d }~ww xY w­w)Né”  r+   ÚmessagezBatch berhasil dihapus)r   Údelete_batchrG   rH   r	   r.   )r8   r$   r=   r>   r   s        r4   rU   rU   P   s]   è ø€ ð<Ü#×0Ñ0°°W¸hÈÏÉÓX×XÐXð Ð/Ð0Ð0ð 	YùÜò <Ü¨´C¸³FÔ;Ð;ûð<üs0   ‚A„%4 ©2ª4 ®A²4 ´	A½AÁAÁAz /batches/{batch_id}/transactionsr   é2   NÚpageÚper_pageÚsearchc              ƒ   ó¢   K  — 	 t        j                  || ||||«      ƒ d {  –—† S 7 Œ# t        $ r}t        dt	        |«      ¬«      ‚d }~ww xY w­w)NrS   r+   )r   Úget_batch_transactionsrH   r	   r.   )r8   r$   rW   rX   rY   r=   r>   r   s           r4   r[   r[   ^   sW   è ø€ ð<Ü*×AÑAØ�˜ 4¨°6ó
÷ 
ð 	
ð 
ùô ò <Ü¨´C¸³FÔ;Ð;ûð<üs0   ‚A„( ¡&¢( ¥A¦( ¨	A±AÁAÁAz/comparer&   r'   c              ƒ   óP   K  — t        j                  || |||«      ƒ d {  –—† S 7 Œ­wrP   )r   Úget_compare)r8   r&   r'   r;   r=   r>   s         r4   Úcomparer^   p   s(   è ø€ ô '×2Ñ2°2°wÀ	È=ÐZiÓj×jÐjÐjús   ‚&Ÿ$ &z/anomaliÚtanggalc              ƒ   óN   K  — t        j                  || ||«      ƒ d {  –—† S 7 Œ­wrP   )r   Úget_anomali)r8   r_   r;   r=   r>   s        r4   Úanomalirb   |   s%   è ø€ ô '×2Ñ2°2°wÀÈÓS×SÐSÐSús   ‚%ž#Ÿ%z/golden-hoursÚshift_idc              ƒ   óR   K  — t        j                  || ||||«      ƒ d {  –—† S 7 Œ­wrP   )r   Úget_golden_hours)r8   r&   r'   r;   rc   r=   r>   s          r4   Úgolden_hoursrf   ‡   s2   è ø€ ô '×7Ñ7Ø
ˆG�] O°YÀó÷ ð ð ús   ‚' %¡'z/golden-hours-insightÚbodyc              ƒ   óŒ   K  — t        j                  || |j                  |j                  |j                  «      ƒ d {  –—† S 7 Œ­wrP   )r   Úget_golden_hours_insightr&   r'   r;   )r8   rg   r=   r>   s       r4   Úgolden_hours_insightrj   –   s@   è ø€ ô '×?Ñ?Ø
ˆG�T×'Ñ'¨×)=Ñ)=¸t¿~¹~ó÷ ð ð ús   ‚;A½A¾A)3Ú__doc__Údatetimer   Úfastapir   r   r   r   r   r	   r
   Úsqlalchemy.ext.asyncior   Úapp.core.databaser   Úapp.dependenciesr   Úapp.models.userr   Úapp.schemas.pos_analyticsr   r   r   r   r   r   r   r   Úapp.servicesr   Úapp.services.telegram_servicer   ÚrouterÚ	Exceptionr5   Úpostr1   ÚboolrN   ÚgetÚlistrQ   ÚdeleteÚdictrU   r.   r[   r^   rb   rf   rj   © r6   r4   Ú<module>r~      s6  ðÙ Kå ç ^× ^Ñ ^Ý /å $Ý -Ý  ÷÷ ó õ /Ý ;á	Ð:À/ÐARÔ	S€ð6�ið 6 Mó 6ð" ‡�ˆYÐ'8€Ó9ñ ˜C“yÙ˜#“YÙ˜u›+Ù˜v“Ù Ð!1Ó2ñØðà%ðð ðð ð	ð
 ðð 	ðð ðð òó :ðð< ‡�ˆJ tÐ,<Ñ'=€Ó>ñ ˜v“Ù Ð!1Ó2ñAØðAàðAð ðAð 
Ð
Ñò	Aó ?ðAð ‡�Ð$°T€Ó:ñ ˜v“Ù Ð!1Ó2ñ	
1Øð
1àð
1ð 	ð
1ð ð	
1ð
 
ò
1ó ;ð
1ð ‡�Ð.Ð?X€ÓYð ØØÙ˜v“Ù Ð!1Ó2ñ<Øð<àð<ð ð<ð ð	<ð
 �$‰Jð<ð 	ð<ð ð<ð ò<ó Zð<ð" ‡�ˆJÐ'9€Ó:ñ ˜v“Ù Ð!1Ó2ñkØðkàðkð ðkð ð	kð
 	ðkð ðkð òkó ;ðkð ‡�ˆJÐ'9€Ó:ð !Ù˜v“Ù Ð!1Ó2ñTØðTàðTð �T‰zðTð 	ð	Tð
 ðTð òTó ;ðTð ‡�ˆOÐ,B€ÓCð
 !ØÙ˜v“Ù Ð!1Ó2ñØðàðð ðð �T‰zð	ð
 �D‰jðð 	ðð ðð òó Dðð ‡�Ð$Ð5O€ÓPñ ˜v“Ù Ð!1Ó2ñ	Øðà
#ðð 	ðð ð	ð
  òó Qñr6   