
    ]i!                        d 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 ddlmZ ddl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mZ  eddg      ZdZdee z  de	fdZ!ejE                  de#       e
d       e
d       ee       ee      fde$de$dededede#fd       Z%ejE                  de#       e
d       e
d       e
dd       e
dd d!"       ee       ee      fde$d#edz  d$e$dz  d%e$d&e$dedefd'       Z&ejO                  de#ejP                  (       ee       ee      fde$d)ededefd*       Z)ejE                  d+e#       ee       ee      fde$d,e$dedefd-       Z*ejW                  d+e#       ee       ee      fde$d,e$dedefd.       Z,ejO                  d/e#       e
dd01       e
dd23       ee       ee      fde$d,e$d4ed5e-d6e$dz  dedefd7       Z.ejO                  d8e#       ee       ee      fde$d,e$dedefd9       Z/ejO                  d:e#       ee       ee      fde$d,e$d)ededef
d;       Z0ejO                  d<e#       ee       ee      fde$d,e$d)ededef
d=       Z1ejW                  d>e#       ee       ee      fde$d,e$d?e$dedef
d@       Z2ejE                  dA       ee       ee      fde$d,e$dedefdB       Z3y)Cz.Router for penerimaan (BBM receipt) endpoints.    )date)Decimal)	APIRouterDependsFormHTTPExceptionQuery
UploadFilestatus)AsyncSession)get_db)get_current_userget_spbu_access)User)PenerimaanCreateReviewRequestUnlockRequest)penerimaan_servicestock_servicez/spbus/{spbu_id}/penerimaan
penerimaan)prefixtagsi   ereturnc                     t        | t              r$t        t        j                  t        |             S t        t        j                  t        |             S )Nstatus_codedetail)
isinstancePermissionErrorr   r   HTTP_403_FORBIDDENstrHTTP_400_BAD_REQUEST)r   s    8/var/www/html/spbu.com/backend/app/routers/penerimaan.py_service_errorr%      s:    !_%)B)B3q6RRV%@%@QPP    z/calculate-volume)response_model.spbu_id	tangki_id	height_mmdbcurrent_userc                    K   	 t        j                  || ||       d{   }ddt        |      iiS 7 # t        t        f$ r}t	        |      d}~ww xY ww)zRCalculate volume (litres) from dipstick height using the tank's calibration table.Ndatavolume_liter)r   calculate_volume_for_tank
ValueErrorr    r%   r"   )r(   r)   r*   r+   r,   volumer   s          r$   calculate_volumer3      s`      $>>r7IW`aa ^S[122 b(  Q s1   A5 35 A5 AAAA N)default)r5   ge      d   )r5   r6   letanggalpenebusan_idskiplimitc                    K   t        j                  || ||||       d {   \  }}|D 	cg c]  }	|	j                          c}	|||ddS 7 ,c c}	w w)N)r;   r<   r=   r>   )totalr=   r>   )r.   meta)r   list_penerimaan
model_dump)
r(   r;   r<   r=   r>   r+   r,   rowsr@   rs
             r$   rB   rB   -   sg      +::
GW<dRW KD% *..A.>  /s    AAAAAA)r'   r   bodyc                    K   	 t        j                  || ||j                         d {   }|j                         ddS 7 # t        t        f$ r}t        |      d }~ww xY ww)NzPenerimaan berhasil dicatatr.   message)r   create_penerimaanidr1   r    r%   rC   )r(   rF   r+   r,   resultr   s         r$   rJ   rJ   @   sd      );;B|__ %%'4QRR `(  Q 7   A%%A AA A%A A"AA""A%z/{penerimaan_id}penerimaan_idc                    K   	 t        j                  || |       d {   }d|j                         iS 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY ww)Nr   r.   )r   get_penerimaan_detailr1   r   r   HTTP_404_NOT_FOUNDr"   rC   )r(   rN   r+   r,   rL   r   s         r$   get_penerimaanrR   N   sg     R)??G][[ F%%'(( \ R(A(A#a&QQRs1   A,7 57 A,7 	A) $A$$A))A,c                    K   	 t        j                  || |       d {    ddiS 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY ww)Nr   rI   zPenerimaan berhasil dihapus)r   delete_penerimaanr1   r   r   rQ   r"   )r(   rN   r+   r,   r   s        r$   rT   rT   \   s`     R 222wNNN 455 	O R(A(A#a&QQRs0   A) ') A) 	A$AAAz/{penerimaan_id}/fotosz`Tipe foto: truck|stick_t3|compartment_buka|compartment_kosong|surat_jalan|stick_awal|stick_akhir)descriptionu:   penerimaan_item_id — required for stick_awal/stick_akhir)r5   rU   filetipeitem_idc           
      N  K   |j                          d {   }t        |      t        kD  rt        dd      	 t	        j
                  || |||||j                  xs d       d {   }|j                         ddS 7 h7 # t        t        f$ r}	t        |	      d }	~	ww xY ww)N  zFile terlalu besar (max 10 MB)r   fotozFoto berhasil diuploadrH   )readlenMAX_FILE_SIZEr   r   add_fotofilenamer1   r    r%   rC   )
r(   rN   rV   rW   rX   r+   r,   
file_bytesrL   r   s
             r$   upload_fotorb   j   s      yy{"J
:&4TUU )22z4==CZTZ
 

 %%'4LMM #
 (  Q sD   B%A?#B%,B 'B(B ,B%B B"BB""B%z/{penerimaan_id}/submitc                    K   	 t        j                  || ||j                         d {   }|j                         ddS 7 # t        t        f$ r}t        |      d }~ww xY ww)NzPenerimaan berhasil di-submitrH   )r   submit_penerimaanrK   r1   r    r%   rC   )r(   rN   r+   r,   pr   s         r$   rd   rd      sd      $66r7MS_SbSbcc LLN/NOO d(  Q rM   z/{penerimaan_id}/reviewc                    K   	 t        j                  || |||j                  |j                         d {   }|j                         ddS 7 # t        t
        f$ r}t        |      d }~ww xY ww)NzPenerimaan berhasil di-reviewrH   )r   review_penerimaanactioncatatanr1   r    r%   rC   r(   rN   rF   r+   r,   re   r   s          r$   rg   rg      sp      $66r7MS_aealalnrnznz{{ LLN/NOO |(  Q s7   A11A AA A1A A.A))A..A1z/{penerimaan_id}/unlockc                    K   	 t        j                  || |||j                         d {   }|j                         ddS 7 # t        t        f$ r}t        |      d }~ww xY ww)NzPenerimaan berhasil di-unlockrH   )r   unlock_penerimaanalasanr1   r    r%   rC   rj   s          r$   rl   rl      sg      $66r7MS_aealalmm LLN/NOO n(  Q s7   A&&A AA A&A A#AA##A&z /{penerimaan_id}/fotos/{foto_id}foto_idc                    K   	 t        j                  || ||       d {   }|j                         ddS 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY ww)Nr   zFoto berhasil dihapusrH   )r   delete_fotor1   r   r   rQ   r"   rC   )r(   rN   rn   r+   r,   rL   r   s          r$   rp   rp      sk     R)55b'=RYZZ %%'4KLL [ R(A(A#a&QQRs1   A.9 79 A.9 	A+$A&&A++A.z/{penerimaan_id}/bast-pdfc                   K   ddl m} ddlm} 	 t	        j
                  || |       d{   }|j                  dk7  rt        dd	      dd
lm} ddlm}	 |j                   |	|      j!                  |j"                  | k(               d{   j%                         }
|
r|
j&                  nd|  }dt        |j(                        fd|j*                  xs dfd|j,                  xs dfd|j.                   dfdt        t1        |j2                              fg} |d||t        |j(                        |j4                  xs d|j6                  |j8                  xs d|j:                  |	      }d|  d|j(                   d| d} ||ddd| di      S 7 m# t        $ r)}t        t        j                  t        |            d}~ww xY w7 Bw)zSDownload BAST PDF for an approved penerimaan. Requires: penerimaan:view permission.r   )Response)generate_bastNr   approvedrZ   z8BAST hanya tersedia untuk penerimaan yang sudah Approved)r   )Spbu)selectzSPBU Tanggalz
No. Polisi-zNama PengemudizTotal Volume Diterimaz LzJumlah ProdukzPenerimaan BBM)	modul	record_id	spbu_namer;   submitter_namesubmitter_atapprover_nameapprover_atdetailszBAST-Penerimaan-z.pdfzapplication/pdfzContent-Dispositionzattachment; filename="")content
media_typeheaders)fastapi.responsesrr   app.utils.bast_pdfrs   r   rP   r1   r   r   rQ   r"   app.models.spburu   
sqlalchemyrv   executewhererK   scalar_one_or_nonenamer;   	no_polisinama_pengemuditotal_volume_diterimar]   itemssubmitted_by_namesubmitted_atreviewed_by_namereviewed_at)r(   rN   r+   r,   FastAPIResponsers   rL   r   ru   	sa_selectspbur{   r   	pdf_bytesr`   s                  r$   download_bast_penerimaanr      s     >0R)??G][[ }}
"C(bcc$.**Yt_22477g3EFGG[[]D!		wi'8I	C'(	v''.3/	6007C8	 V%A%A$B""EF	#c&,,/01G -S%8//63((--4&&I "'!FNN+;1]O4PH99J26LXJVW4XY[ [5 \ R(A(A#a&QQR HsE   GF FF AGGD	GF 	G#$GGG)4__doc__datetimer   decimalr   fastapir   r   r   r   r	   r
   r   sqlalchemy.ext.asyncior   app.core.databaser   app.dependenciesr   r   app.models.userr   app.schemas.penerimaanr   r   r   app.servicesr   r   routerr^   r1   r    r%   getdictintr3   rB   postHTTP_201_CREATEDrJ   rR   deleterT   r"   rb   rd   rg   rl   rp   r    r&   r$   <module>r      s   4   V V V / $ >   Q Q :	(


 !Qj?2 Q} Q 5 3Zsv 1333 3 		3
 3 
3 63 Bt$ !.$T2aA&raC0v 1D[ * 	
  	  %$ R&2I2IJ v 1	
S
S

S 	
S 	
S K
S t4 v 1	
)
)
) 	
) 	
) 5
) !$7 v 1	
6
6
6 	
6 	
6 8
6 %d;
 c  (J  K:vwv 1NNN N 	N
 4ZN 	N N <N* &t< v 1	
P
P
P 	
P 	
P =
P &t<
 v 1PPP P 		P
 P =P &t<
 v 1PPP P 		P
 P =P 1$G
 v 1MMM M 		M
 M HM '( v 1	&[&[&[ 	&[ 	&[ )&[r&   