From c3d191182eb913001943cccdfa9b67058836ea20 Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Thu, 27 Feb 2025 16:29:58 +0700 Subject: [PATCH] feat: top 10 equipment economic life GET API --- .../__pycache__/router.cpython-311.pyc | Bin 6101 -> 6731 bytes .../__pycache__/schema.cpython-311.pyc | Bin 9473 -> 10736 bytes .../__pycache__/service.cpython-311.pyc | Bin 10633 -> 12165 bytes src/equipment/router.py | 14 ++++++++ src/equipment/schema.py | 21 ++++++++++++ src/equipment/service.py | 30 ++++++++++++++++++ 6 files changed, 65 insertions(+) diff --git a/src/equipment/__pycache__/router.cpython-311.pyc b/src/equipment/__pycache__/router.cpython-311.pyc index b42a9ed5fe4c9c7d751327f6a14a2313aedb41a5..234e8a8886836ed1df08f8739128c1961ddf6422 100644 GIT binary patch delta 2227 zcmb_cO>7%Q6y90e>z~BQ`Y(2DCu=88lWpTTAq}EXQD~DELVtu>gtQ1OZ|u&l zE44yOgnB^YfZDktwH#;(iOrr$^%#2U6t6i<2*}SrH>bB-3Lm^{5pyVpiOU zTL~j!4H-jL(nwklrI+WUUcnM2rLVQA;y4aUZPbth|x8#*8sB z4%Nr4f>9unEK%=O5dR1rh|8Fu6IXUg{2qz=C9{tfXqc;>G@l~HjAp7dYeuL{Cx?6S zk{N~Z6mJsErz4erOJYIEj02NUmH$a5Gun!5CN4ZIw7VA#IztdW06Lju@`Ch`p*_7g z$eI#ar!cFgnZtB!#cQT_WS;IZAakahc?9CKbPD1}cElGUeg=K}M8*7utW9d>C>=C4 zninboGq;0P0@f_DKqU_<5%52EIh6mTP3+>klGgF6S@R96wWyy?;Mf(iZ#JE9*m z2Tn@*1i#@iiNX`!rJ3~7nO3c7(N*VEqd7ObRBfy_tXlPGZH2Z6x7J>2niYrY0bcjM zmTsp`Q>W}Sn&r9KGVKz|bzt1Q<2_8&aoABdfv^jqz;nt%HjcL%fbL@=pnwx@6hEU> zeKRo5@vjv-l_){(;@oVpm%E6$tK?E3PEPUne96Fda+SbQBm72xVvRT+pmwjfh$&z9 zT$N!Je(nVodynfx$ey2tGIMjYxn7|;tTeY+aVj}R9af`fshP7|)he~^l~%oej_Hs^ zml>W@w*c8KU>YWDSy}_zIaY*0dmQ^xt<11+9=A%g+8&_2Ljv1u zJ2o~vhgI|M0=n-B7#-n};7PDSgAd%S`*5&@Nib_uIe(j2_A)rGyLuFo1}E} z=WvSb5{k!=_Y}f@0Nv{r_ySIJ%}ft!Yr;%`#c*0d@FOfDJP*(gwZtQ5mcgIs))36< ziknPGY%_^06tFSV_716TmTjJ2got%X;&%pbLz~`JzgJJdOxt7Gr@N;4dL&=o1Cwkw z07yQ{V-nXz%ev=8SP~w#4hQB{O8(FfYZ@N*X6K{6s9dmcWbz&h@E+tX}03_HoN8V1i@ zzW3n4_>aJT&}r4_)69e+ys0F+YAU(9qIoAHHi8CJuLjE=x*>3e-Qua$fh^5 z85_T{xS=1qTUfjsTk7~ExgXv`vJCGbS?&aUM7gDRB>4Lq?g#&|-cfJfOZ-B-xb=Sl DIi>l^ delta 1742 zcmbtTU1%d!6rP(&CO>T^Kh1wKnIv74PP_dH-Ln3ytJRHGL~vO|7-3`0y<4l9w%$oZ z@gXl2pA?t-DyT0C`rt!h@j+yLTo>_4Sms?=5M;qOAByMPNn^Wp5p-Za?!D)n@B7Y~ zJGamMvaEj@kH-{vKDqV%)<*ieULgC|TQ84@LRG5uQ%>4WJ2Uo-ld&^S*3LRPJLlx> zyi>3XkfYFWzvz_gl2f+Jav$ke9K$x`I@+%~rfoVkyC(Ose%)!<4Wa}T7W@K4zeZ*G z*t2Z*vol9KMTAvdZLqlL2TEdvES3$LWF?wn0rpUFl10<7Z;E$_X|zt1PcjsRW>`bq z3>d4~edRvMxd+zdSc4H@{+6`P8#K>q*MhXLf4^nxf%QeHX_^Ktu_n}(Pu0#t?SeQA z6f%nF#>Sd~5QLI^!3sMpi?*%*QMCYyH_MXFb1~2W=%>lE*;`iXygKME@ zNU{#}d=>#eFK>wNw6)3%E)4)H#AQMQ5Bw|<5BEZ6VP6%)uq!S{H|CZximmen05848 z23>X}*&T4k_zDD8#ShUOSrm7opKFq}Ek?1`Vhci6fMdhHrs`|9#qC&yEQq@?D|8Nm zkBHpV6)1mW>d-G=6Fbwdka_Xr^rP`6R!b(0r$j2=u+cu(0j!A6w}uCgAxyx34)2ikq@U1^tR;ndQ6GAVJ=I7a~&nfw`zJ^L)jJih=L zTv5c&shcpTkJG;s2Z z?8MMsgz!fql=)P{TWPI`uQHpu7j_wcd%MSY3JygvTNUfsyjFk>FN&+#{HO#=FX{5$ z(&ljR`qEK)88a#vi($;!1wB_9^EAFY95C*wa7{dQdk4TBaE`x+yz(3`uDmr~aBmkv z_&GgwZ#dv`NNAKF{XS>>|L4!h1&|o_*+u>;gbBRvPtfo^l@M}A)N&co&aIC$61b=Q bU(h4S@?W6-Z*>{b%>Q=KE!-tR{0M&momXAg diff --git a/src/equipment/__pycache__/schema.cpython-311.pyc b/src/equipment/__pycache__/schema.cpython-311.pyc index 86ca1f8f31df34e4fff0b336717d6c0c199e7e49..8e257be96cee90194a9d2b951a1b855e66540058 100644 GIT binary patch delta 473 zcmZql`Vh>woR^o20SK%N4y3OYpU5Y{=(bT^g3*|J88ZXJY9NMyC?O^WcZL+P7KRk@ zR4z0*;S`Br22IJ$VT@O$nOK-M>&jkYoa`?vX(^n_k;*9vGlL>RjL9D* zg(vGP@G*97wo^!EG`OLxvA}eN$PShZ%C;AkZLcWXHuz4knBhFd_5uqCT?CUrMv)TG z?xNVq|2ZT#Ys_t&6Wx!jEq^6*C|$T=Ym98z*3V9l_a=wKui!(Jvms(j2*=C1A1qIQZ^gd zfSk#Hlw`S!fWnMGT+G0oQHz(+?gIlRu|W1CNc0OrN@4Om6|u?dRHPX-CZAF< F2LMBzbTt3~ delta 163 zcmewm+~~!(oR^o20SNMM?o0n7Jdsa=QEQ{R1fw|DGG+#b)j$jZQ9>zV!3>(>n~NB) zN^cHSde1mHSANOlI+eo7(-inN|5YhqoNTTnIJr(OgF6eTrHBPY#7_RGCc%{nVuFaY y$-?Sp>>!q(rtstd^=!t>$p_VCx$}V{j6hs`jdAl!^%BO(?V5&+a+7yzngamAv?|R2 diff --git a/src/equipment/__pycache__/service.cpython-311.pyc b/src/equipment/__pycache__/service.cpython-311.pyc index 0c970e42f47d887a76f73ff9e185918e4f98f75e..ea6d475fdc7134d33a84dbd549104af80b37bbdb 100644 GIT binary patch delta 1464 zcmah}TWB0r7@jjTJDE*(cQ$*=?lyZ(ve`}3CIvxAMM$W|6e%$gF#%b&drsnpy(DL5 znV>v9t8Kn)(7zd0|k9CpeU$FHw+{!D8A`~NQxFORP>zLEKy%PGxN{? zegEa0|NLj>+Vs`5<88aWouk7uyfgph;FiM=-rMT`sE30fADxXt1^J;9#b76jqaNf4 zFjsS+-mM1#YoF=hMlliwU26#lp!W@6az4}#yUf5IWIqa@o7LyQTom zNtwg3Ad?4Tn0y>|I2X*lV|UKFds zJXaMfLe0&*A3DQ5H(0e)EKoRVOI4y+Ji-+z?P*O?5o=zS_i3rQ>J|^U%@Y-o?yO}s zG=;P>E~-(jv=}`#97Wkuu~f)qqxsw%I@z$daGK$Bm~9L0pd#fXy}q6`{1nw2GR$a5 z%N0;VD3+ER;tI;(Mn?w1bheZ)7m6xoooNV}^J>Fc$Q5&iav_Z}*|h0s$!E@^JnmsG zB1CEyhp37ZOgzg-DYLkUiZIoN{fv8pakgw3V>DmX%p7=vaSpUp&Mg)YCG$B|YY4cs zjAPWIwowsn4m`$O{qsmm(~{GthSUEl5hH3Yv6wO1=pX2{&fS;Dx4yBp`wq_2ZMb{) z+{s;cvhE%**gdrVOUfwxP)a8!IRIbL}F6>an4w(Zu6(LY-EkJgnjLmAss#&?zRx-wxX6LsmVA)P(2 zaBY@$I*}(#esaYp48?^_DA`c3_-;7hzzq$*w@ zGocZSO4XbCcIX~xvDYK9t|jKcOewM19IYAgc_bpOP}K(XA0t72^a7(NnV*E0>8sJE zA}yn77_$rw@j?cxn0=_tWY%Uf);oNdaXdaFv2WW8^xJU{?_6ZIaVE^uvP8b<9caHw z@p0NW^&h}hUfML|Ti zwUsL^UZseIHX@c*dxgdIg4Y~eb2sx8#0NY3eKX(pF|%7ZnD+m$ZJ&nk@!@*uEPdh+ zv%{0V%bjK(h5(O43s3NF?(ZOpdOQhiyI#{u`g^Zrfm1W)dVpL(ftKri6hSeo7OT3>9K#GSWtSlVY09C$#D!eD}RTEn7oTRI;*-rW9Q}q9=axv list[Equipment]: + """Returns top 10 economic life.""" + query = ( + Select(Equipment) + .join(EquipmentMaster, Equipment.assetnum == EquipmentMaster.assetnum) + .options(selectinload(Equipment.equipment_master)) + ) + + # Get current year + current_year = datetime.datetime.now().year + + # Order by difference between current year and minimum_year + # Add absolute difference between current year and minimum_eac_year as a new column + query = query.add_columns( + func.abs(current_year - Equipment.minimum_eac_year).label("economic_life") + ).order_by(func.abs(current_year - Equipment.minimum_eac_year).desc()) + + result = await db_session.execute(query) + + # Set economic_life value inside equipment objects + equipment_list = [] + for row in result.all(): + equipment = row[0] + equipment.economic_life = row[1] + equipment_list.append(equipment) + + return equipment_list + + async def generate_all_transaction(*, db_session: DbSession, token): """Generate transaction for all equipments in the database based on equipments assetnum.""" query = Select(Equipment)