
    ia&                       d 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
 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 dd
lmZmZmZ ddlmZmZ ddlmZm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z. 	 	 	 	 	 	 	 	 	 	 ddZ/y)u=   Dashboard service — aggregated summary data across modules.    )annotations)date)Decimal)funcselectcase)AsyncSession)selectinload)Expense)LaporanShiftPenjualanNozzleStatusLaporanStockAdjustmentStockAdjustmentItem)	PenebusanPenebusanItemStatusPenebusan)
PenerimaanPenerimaanItem)
PenyetoranStatusPenyetoran)Produk)NozzleShiftTangki)anomali_repository)DashboardPenebusanPendingDashboardProdukSalesDashboardShiftStatusDashboardSummaryDashboardTangkiStatusc                V  K   t        t        j                  t        j                  t        j
                        t        d            t        j                  t        j                  t        j                        t        d                  j                  t        t        j                  t        j                  k(        j                  t        j                  |k(  t        j                  |k\  t        j                  |k        }| j                  |       d{   }|j!                         \  }}t        t        j                  t        j                  t"        j$                        t        d                  j                  t"        j                  |k(  t"        j                  |k\  t"        j                  |k        }| j                  |       d{   j'                         xs t        d      }	t        t        j                  t        j                  t(        j*                        t        d                  j                  t(        j                  |k(  t(        j                  |k\  t(        j                  |k        }
| j                  |
       d{   j'                         xs t        d      }t        t        j                  t        j                  t,        j.                        t        d                  j                  t0        t,        j2                  t0        j                  k(        j                  t0        j                  |k(  t0        j                  |k\  t0        j                  |k        }| j                  |       d{   j'                         xs t        d      }t        t4        j                  t4        j6                  t4        j8                  t        j                  t        j                  t        j
                        t        d            t        j                  t        j                  t        j                        t        d                  j                  t:        t        j<                  t:        j                  k(        j                  t4        t:        j>                  t4        j                  k(        j                  t        t        j                  t        j                  k(        j                  t        j                  |k(  t        j                  |k\  t        j                  |k        jA                  t4        j                  t4        j6                  t4        j8                        jC                  t        j                  t        j                        jE                               }| j                  |       d{   jG                         }|D cg c]!  }tI        |d   |d   |d   |d   |d         # }}t        tJ              jM                  tO        tJ        jP                              j                  tJ        j                  |k(  tJ        jR                  jU                  d	      tJ        jV                  jU                  d            }| j                  |       d{   jY                         jG                         }g }|D ]  }t        tZ        j\                        j                  t^        tZ        j`                  t^        j                  k(        j                  t^        j                  |k(  tZ        jb                  |j                  k(        jC                  t^        j                  jE                         t^        j                  jE                               je                  d      }| j                  |       d{   jg                         }d}|9|jh                  dkD  r*||jh                  z  d
z  jk                  t        d            }|jm                  to        |j                  |j6                  |jP                  r|jP                  j6                  nd|jh                  ||              t        tp              j                  tp        j                  |k(  tp        jR                  jU                  d	      tp        jV                  jU                  d            jC                  tp        jr                        }| j                  |       d{   jY                         jG                         }g }|D ]Q  }t        t        jt                        j                  t        j                  |k(  t        jv                  |j                  k(  t        j                  |k(        }| j                  |       d{   jg                         }t        t^        jt                        j                  t^        j                  |k(  t^        jv                  |j                  k(  t^        j                  |k(        }| j                  |       d{   jg                         } |jm                  ty        |j                  |j6                  ||              T t        tz              jM                  tO        tz        j|                              j                  tz        j                  |k(  tz        jt                  j                  t        j                  t        j                  t        j                  t        j                  g            jC                  tz        j                  jE                               je                  d      }!| j                  |!       d{   jY                         jG                         }"|"D #cg c]^  }#t        |#j                  |#j                  |#jt                  |#j                  t        d |#j|                  D        t        d                  ` }$}#t        t        j                               j                  t              j                  t        j                  |k(  t        jt                  t        j                  k(        }%| j                  |%       d{   j'                         }&t        j                  | |       d{   }'t        |||xs t        d      |xs t        d      |	||||||$|'|&      S 7 7 .7 
p7 	7 Cc c}w 7 g7 N7 7 a7 7 c c}#w 7 7 cw)z4Build aggregated dashboard summary for a date range.0Nr               )	produk_idproduk_namaproduk_kodetotal_volumetotal_nilaiTd   z0.1)	tangki_idtangki_namar)   kapasitas_litervolume_terakhir
persen_isi)shift_id
shift_namalaporan_statusstock_status
   c              3  4   K   | ]  }|j                     y w)N)volume_pesan).0is     @/var/www/html/spbu.com/backend/app/services/dashboard_service.py	<genexpr>zget_summary.<locals>.<genexpr>   s     >ganngs   )idno_dostatustanggalr+   )tanggal_mulaitanggal_akhirtotal_penjualan_volumetotal_penjualan_nilaitotal_expensestotal_penyetorantotal_penerimaan_volumeproduk_salestangki_statusshift_statuspenebusan_pendinganomali_countlaporan_pending_count)Mr   r   coalescesumr   volumer   nilaijoinr   laporan_shift_idr>   wherespbu_idrA   executeoner   jumlah
scalar_oner   jumlah_setorr   volume_diterimar   penerimaan_idr   namakoder   	nozzle_idr(   group_byorder_bydescallr   r   optionsr
   produk	is_activeis_
deleted_atscalarsr   volume_final_literr   stock_adjustment_idr.   limitscalar_one_or_noner0   quantizeappendr!   r   	jam_mulair@   r3   r   r   itemsin_r   DRAFT
WAITING_SO	SUBMITTEDPARTIALLY_RECEIVEDr   r?   countselect_fromr   r   count_activer    )(dbrV   rB   rC   sales_qsales_resultr+   r,   exp_qrF   setor_qrG   pen_qtotal_penerimaanproduk_qproduk_rowsrrI   tangki_list_qtangki_listrJ   tlatest_qvolpersenshifts_qshiftsrK   slap_qlap_stsa_qsa_stpenebusan_qpenebusan_rowsprL   	pending_qrN   rM   s(                                           r<   get_summaryr   #   s	     	MM$((?#9#9:GCLIMM$((?#8#8973<H	
 
lO<<O	P	  G+  M1  M1

  G,,L , 0 0 2L+ 	t}}TXXgnn5ws|DE	OOw&OO},OO},

 
 JJu--99;Kws|N 	t}}TXXj&=&=>MN	')-/-/

  !jj11==?O73< 	t}}TXXn&D&DEws|TU	j.66*--G	H	')-/-/

 
 !jj//;;=M 	IIKKKKMM$((?#9#9:GCLIMM$((?#8#8973<H	
 
fo//699<	=	ff&&&))3	4	lO<<O	P	  G+  M1  M1


 
&))V[[&++	6	$((?001668	9# & H--224K 
 A	 	d!!A$11Q4	
    	v	fmm,	-	NNg%  &!!$'

  M22;;=AACKM &99:T/#6#J#JoN`N`#`aU''72#--5 Xo--224o6H6H6M6M6OPU1X 	 ZZ))==??q0014A---3==genMF2dd)*t--
 	# 8 	u	MMW$OO%  &


 
%//	"  JJx((113779FL|**+11  G+!!QTT)  M1

 

5))==?o,,-33##w.$$,##}4

 zz$'';;=0TTvv!	
 	 0 	y	ioo.	/	(  %%**))22	" 

 
)##((*	+	r  JJ{33<<>BBDN  	  A 	"tt''88II>agg>M	
    	 	tzz|	\	"	  G+=#:#::

  $&::i#88DDF -99"gFFM##+;ws|)9WS\%) 0!#!+#3 m - . 2 0, .$ 3 *0 ) * (2 4	( 9 Gs  Dt)s:B8t)s=C t)t C3t)tH>t)tt)&t	 B't)'t(Dt)tEt)tB#t)6t7Bt)tEt)	t
$t).A#t Bt)t%+t)t'7t)=t) t)t)t)	t)t)t)t)t)t) t)'t)N)
r{   r	   rV   intrB   r   rC   r   returnr    )0__doc__
__future__r   datetimer   decimalr   
sqlalchemyr   r   r   sqlalchemy.ext.asyncior	   sqlalchemy.ormr
   app.models.expensesr   app.models.operationalr   r   r   r   r   app.models.penebusanr   r   r   app.models.penerimaanr   r   app.models.penyetoranr   r   app.models.productr   app.models.spbur   r   r   app.repositoriesr   app.schemas.dashboardr   r   r   r    r!   r        r<   <module>r      s    C "   ) ) / ' '  K J < > % 1 1 / YYY Y 	Y
 Yr   