From cfdf586fcd3c399d25bb898b36c07daf7973c820 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Tue, 12 May 2026 09:13:00 +0700 Subject: [PATCH] refactor: implement morning shift bypass logic for draft order validation in pos.session --- .../__pycache__/pos_session.cpython-312.pyc | Bin 2841 -> 3167 bytes models/pos_session.py | 28 +++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/models/__pycache__/pos_session.cpython-312.pyc b/models/__pycache__/pos_session.cpython-312.pyc index d233cf2ccca9f34525c42d0d2bb7c7ca88719024..8a29b9ac4b44b32b408e47288bcea8132d2e54fd 100644 GIT binary patch delta 1579 zcmZ`(O>7%Q6rR~1d;Jqzjq~R;O*SM-;s8!)6e^G#g;Z3bf(n!tBwtn=?>JeR04@BcaUgErCO^>^uUQzON*$uz?-#A(n43-H*em&dGqG` z-kZ<6e(8z)(AE}2@O@a5av%8jBHz7!9%dh*eMC?iTPQ7AI4xV!HcBfyD2pw5TT82+ zrhw+NRN}XMM9Vf-{oCPmUIl&^X2;Z88KD|APw{A^sxPU&g3{auS%H_;Sh< z2AI-K$KSH%G(PB$P2=kjNPL^v2{kl?a^aSCG&;VPo{R8V>ExLct@+VdIf^D#q+I*a zN=vIqT$egVEU65KmBG3xSLCN%fd44Px8w~ap_X4gw@flCx}DY6iO!ZwYk5mw+*mak z(=BRd9lb;?LiH^GdMJ8zrZ#gsH2HIA z@=jOpeqpch#l^#}DgKsk{5H+cSc2$I~ zH!YhOP*-^h_bRl#g86{Ilds^=xdl|gP;FBArFq*T$H4`p*C^ajcb19XyloTQCKIcK z+9fN=zm=!)8UCBxJAq3~EY#le+DK~&L~ zgI|wc8@=()!FZ~Qs8|3NRJH~Ox$VdH86NwL_JD`0W$nB}D6tYUjR}KH33CI6k;y~3 z7zPsv>3Y@6i4MY~eCk*_TmOyQ2|nxv5Ra)KE4r4IDeVeIV9@Y#B_eJAMU{QnfqK|Dbb&~ThW#OHD3ZHhOr^KVnvfU8|7lNNU# zKSOhk^3Svy!*)j5!dHvv`M~^*jdoTp)>` z;qL~@KCe1L{C;2}LE4+q|T5IqJt?^7*;{ZJ4=M861rR0M5$;^|O-fc^m|RV*Un%;vUHaoBy|XP$TG zop+yi=7;^8xv|ejM^k{0P580@+xqkEv+Q0iY+76 zR*>c>5vQ(Xs)0l+IOm{ z@%VoRz7mYYR5Pk6o(+5#G&4hn-h%n%<~>6qMwcLwAh4zDaKJ1{K{k#x_r_@GgJg`G zxfl(7oTYhS$i=Ap%y1LAD>o$?QkTn*n%nY-iE<;5ByCJAbuUBkBdyzTp@jcZO|`q)O;tT#~og6TSD z&_HIrgE8^~GjQ98lU_u22*QU*#D%_x?xuE$c^)}FMuVlk=eP?UjBK;*W6$*#EYfhD zz(SsFiF~F%NVn*day|OEd^Z(6r#?RU5CFV*X_l!`eI>|LUUq;4h-xLGe{@Zr%lwf% z-m10F+qDznG5T7fNPklI%#86U5$*4RPt`BepQUfSG~chx_rPr-4U^~2KD{6i0JA60 zmd4qh1r%5W5#suuHQ0b99k&%A{uA^sX-a1@@?K_&5P(TRNFS3+%e<)0BA*|yBIPXC zu{__3D&9>}(wIU}%VC*+vMeFeSV72=Ex%rCS$4ou1Jv+4n2lIgy~SH)Sw!4~sC_*= z${{wn35zfIt#xUT?p3`dZ~`<=V{EneF1ye(~td;!_`~Te%bTIi-^Q(YW_# zeec@EzJ7R1KXM~^1ncjApHQU&Kb`{{~O(@Jud(N diff --git a/models/pos_session.py b/models/pos_session.py index 872b937..ce6f70d 100644 --- a/models/pos_session.py +++ b/models/pos_session.py @@ -6,21 +6,29 @@ from datetime import datetime class PosSession(models.Model): _inherit = 'pos.session' - def _check_if_no_draft_orders(self): - """ - Bypass standard Odoo draft order check if the current time in the user's timezone - is before the configured morning_shift_end_time on the pos.config. - """ - draft_orders = self.get_session_orders().filtered(lambda order: order.state == 'draft') - if draft_orders and self.config_id.morning_shift_end_time: - user_tz = pytz.timezone(self.env.user.tz or 'UTC') + def _is_morning_shift_bypass(self): + """Check if we should bypass draft order validation based on shift time.""" + self.ensure_one() + if self.config_id.morning_shift_end_time: + user_tz = pytz.timezone('Asia/Jakarta') local_dt = datetime.now(pytz.utc).astimezone(user_tz) local_hour = local_dt.hour + (local_dt.minute / 60.0) if local_hour < self.config_id.morning_shift_end_time: - # It's the morning shift, we bypass the check return True - + return False + + def get_session_orders(self): + """Hide draft orders during the morning shift bypass period.""" + res = super().get_session_orders() + if self._is_morning_shift_bypass(): + return res.filtered(lambda o: o.state != 'draft') + return res + + def _check_if_no_draft_orders(self): + """Bypass check if it's morning shift.""" + if self._is_morning_shift_bypass(): + return True return super()._check_if_no_draft_orders() def _set_opening_control_data(self, cashbox_value: int, notes: str):