From 6177453cf7e77d6b83de0c8c4eda5d22b0ca2c22 Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Mon, 17 Nov 2025 13:44:32 +0700 Subject: [PATCH] fix: empty asset critical yearly data --- .../__pycache__/service.cpython-311.pyc | Bin 17065 -> 17262 bytes src/equipment/service.py | 38 ++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/equipment/__pycache__/service.cpython-311.pyc b/src/equipment/__pycache__/service.cpython-311.pyc index bea24cfca055914763a6bbd0d8524f0bafe379e9..1d59c71f0a9d2868e12a1efe149141ec50c6f356 100644 GIT binary patch delta 2403 zcmbVMQA}G^7`~_NEzsW5meNv6OQD60%3y=q3IhbDPTh2oY%_Z?TSMz8S%IBioNlKB zrkgzAWIKsCqmDgnI*AF}jgbelFr9Jw)J~#H6XVPFWU|x;AB;2l|1E`eb}ydX`{h6X z|DEst=bZn)mrs&=r-;;U< zB8=(+hP4R8QNXYPV_+?l)z8#02dh2`H=1y=s&E;z9~A`wUsl7am@_+r=ux02T+B7) zlbdrZ5t&PFIxE=^P@CMc?j5em+su{Ucg{mqVO_!{x8>uYU<~VlRdCrvm?blQd96eQ zf!`~$@lSOI9@E{>*W_1+CH`xTmDKY2l4?LxNsZ`c?s+EU?&>l(pb$F~*l6t(VHh<_4gb0$p0CL;sLO zBh#=Freh7Pk=4Db-7WYG%4B&X;d@OUk*YwOA2G%FXU1mI$bT|U8q^0Pa=HW{B+HcF zF)^}%hs^&tJV2!z5U_1&69QH|eT>$m2x#ENd<9xv4;0G*vK5TL82El=q5#O(H z%Y8DT6D*F5;1T=C?^&GI-Zoli*tF)hRQsx( zpRDR!YD-ByD^gDqo;`arYN5=RDHWdRSd8Tet&1cjwXaC+NvZv&8RNAO@9JJ^$;I0j z`}d`!;EEJXO2L~0Nbmq*YuD217upu#3xO3Wkdy*9`!QY*@qV(6EE{qX9ZU5ose480 zPQtT$4^o=`&7q?Eh1xY~qWkuHse#>S!}2jeuzha3%L56^fi`2~kv9ER`- z<(lIwLL&T_v$=T_I4Bl4#g()bVKabFLmg;mLqljqdCKV(V_+^Se>yLc?g*H>d?ghB znN*K}Vrf-0{0OZPf zjR@JK+R-WlNSh*u$D?Dh$cVf@7K+OeN;mQIo=!W;QHl)h;Akv1I+Fi*#^Vwh_^&Ay z-oG`DM+ws-+}HG6UG|8u^U|7dBtA%=LD}qS1<^Xr&oo(Daa(C=aGX+1JUyKXc68- zcnjeq!dlWa0MoQS79EMk#$)>gS#T6@8l zJ-OV4L}hA65B8`}%+=c*Iyk}*KNbv#AA)IDz6hpC@B^f+mgPrlH2k&4H2`%ms227Z9h#Hn=eBMaFT;FJxwG|a z^7J_jjUi+=oy|j?TeViwaqNQi44{G|kih~tKgUCO9S*^EwP%57CsC)1UwN`-TPK=> z2-ubsTZ>{(q}9<8nPP!btPzS=LGe5(oQory1ct__A`N?=JZl^a22@ delta 2187 zcma)6Uu;uV7{90OZAWkaZC$&qUDtN)Xlu*1LhIbdbRYpG5#^7G4MPOc`C3}&+!9aj`Q1xgbRl|>z9MwW!zzO+e`v2{B*r5K zP(hPS#6%3oIlP@1h^ePO$?!-=!<5=rG3F-Iv5M(zGUio`bn)#N|&|P z1EjY#PplAmsW&(B$O@yVW-2AC2J7{PxWbpYW^FhwH`-v>aXRQ_y@lQgZJ@tuZwP%2 zM%2L7P)Ll{^w6Z%Nc%K;zK`@>c2f74C+u9;p{wDdWg9naBlI`9oh+@5w4l=?@A>{N zYTIa`24NZv(3Pl#8U-El(iilbJdZ~D{~brsM*6AG(ynQ(mgItDkc*l$cHT|gmwk}R zKtJin4$?0w;SB0+!P0WDjH4F~j-ZDr+n7@GP?<&|lDtGkG(<~0#7mr0>it}xP5#|5 zfOxE6{^%uB5c%nC(+R3Gx#?z8ioVoNSgJp_|6|$A1b7QT1Rx6VIK9`go24*nKB*dD z6ZDqZOMf#vwJ|p6Vm;d_>pTBKc{OLYRXHsmuECE5F7}m&wq8F_ z8rohOiWhaEvNyc!EqO;u-sg%sciA6Z7EAu|lK;h`ZlLUoEFUQO#!9~ZMV+@iIDUOc zX>eO$7fTi+4O@= z*i2TZ=(_xi=Wms5y$$gkz2|>sSFJ>YuvjG~vT^)0GwT_` zTY(8MYF6w-T3pi9s|HC{bn!WiA=uXwG0e&*1$t13UI+~FXBqvId^>QF*TCvMSfZIB zTYmjGm)AzG3>0NY_`HI}y}adFWTf}EM1_YJB}~U6ZZt&?M*5iIjmRMX9$VKY ze-#lG>Ir6IKkXiI2=9Y=4q%E-jzsy7nAsuEk5o|Chsdu{TfO8Vn67)EFOTo!udwksd1?GRZA)c+ zRsBlR!bA_h!~|F5s}tX&e67^*_+fZzD#~mQSNPmqW+qWl%_P|fo_q}N0frw69|eHh zTu~;|x!TpjaK;!)iJ>MKQpS)FhQKgvhMfTL#MG|l{kE;CS#fSA@uULZl>dBcFWU7g xLh7=)x2mie{$Sm>!)q5KMN_aOguX~Di%T;_VXVZDS9wrXx&Pp9`R#3Y(Z5zZ%?JPh diff --git a/src/equipment/service.py b/src/equipment/service.py index 4ac3eef..e0289d7 100644 --- a/src/equipment/service.py +++ b/src/equipment/service.py @@ -52,24 +52,30 @@ async def get_master_by_assetnum( yeardata_records = yeardata_result.scalars().all() yeardata_dict = {y.year: y for y in yeardata_records} - # Get ens value from year data and calculate asset criticality per year + # Compute asset criticality per record/year and attach to each record. + # Use safe attribute access for Yeardata; if a value or attribute is missing, + # fall back to 0 so N/A data does not raise AttributeError. for record in records: year = record.tahun - if year in yeardata_dict: - asset_crit_ens_energy_not_served = yeardata_dict[year].asset_crit_ens_energy_not_served - asset_crit_bpp_system = yeardata_dict[year].asset_crit_bpp_system - asset_crit_bpp_pembangkit = yeardata_dict[year].asset_crit_bpp_pembangkit - asset_crit_marginal_cost = yeardata_dict[year].asset_crit_marginal_cost - asset_crit_dmn_daya_mampu_netto = yeardata_dict[year].asset_crit_dmn_daya_mampu_netto - - else: - asset_crit_ens_energy_not_served = 0 # Default value if year data not found - - - - # compute asset criticality per record/year and attach to each record - for record in records: - # use year-specific yeardata values already loaded above + y = yeardata_dict.get(year) + + asset_crit_ens_energy_not_served = ( + getattr(y, "asset_crit_ens_energy_not_served", 0) if y is not None else 0 + ) + asset_crit_bpp_system = ( + getattr(y, "asset_crit_bpp_system", 0) if y is not None else 0 + ) + asset_crit_bpp_pembangkit = ( + getattr(y, "asset_crit_bpp_pembangkit", 0) if y is not None else 0 + ) + asset_crit_marginal_cost = ( + getattr(y, "asset_crit_marginal_cost", 0) if y is not None else 0 + ) + asset_crit_dmn_daya_mampu_netto = ( + getattr(y, "asset_crit_dmn_daya_mampu_netto", 0) if y is not None else 0 + ) + + # Convert to floats and compute criticality safely ens = float(asset_crit_ens_energy_not_served or 0) bpp_system = float(asset_crit_bpp_system or 0) bpp_pembangkit = float(asset_crit_bpp_pembangkit or 0)