From 7fb38ceb8b58c5e4c97eb773428d776a04854c85 Mon Sep 17 00:00:00 2001 From: "admin.suherdy" Date: Fri, 7 Nov 2025 17:08:24 +0700 Subject: [PATCH] fix the journal entry for opening cash --- __pycache__/__init__.cpython-310.pyc | Bin 0 -> 226 bytes models/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 238 bytes .../__pycache__/pos_session.cpython-310.pyc | Bin 0 -> 4910 bytes models/pos_session.py | 43 ++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 __pycache__/__init__.cpython-310.pyc create mode 100644 models/__pycache__/__init__.cpython-310.pyc create mode 100644 models/__pycache__/pos_session.cpython-310.pyc diff --git a/__pycache__/__init__.cpython-310.pyc b/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f113cb3a6225381c1ad928ab6ccb1aba5834122 GIT binary patch literal 226 zcmYjLK?=e!5KO9w2!$T}L@y13;6L!RW9diCTNJh}1Yz|Jtc z%rcngD@J&2=XRYmnSW$tYMM|G0R!GL$1j{S$j+>sy*aH*J}n%AX~VJ1Cf29Sll60w zAAN43L1#o58`DFqqSAP+o$8dYG*%YGDGm*KO+N$z;$|oG7zT6-0DTZ02B}qOBzDGI hf0qg#ba%!NLQ3oHAZ69XX}PBwV`~nnRY)}o_63mNJDdOj literal 0 HcmV?d00001 diff --git a/models/__pycache__/__init__.cpython-310.pyc b/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc8c53ec359c7695b4e279d8410aae187c3d1029 GIT binary patch literal 238 zcmYjLF%H5o3``0G0##z=30)eozygRDAS5=HD8vyBYT~MHhdzlfb!FlUOgK!ObfwCJ-QN5#&`$0og?qlec8MkmI63(&UId##51vqD{f4 zXs5h>^a-lM;1uM$4pjHJ>BYpBxL nxai|u8+hyUy(oU literal 0 HcmV?d00001 diff --git a/models/__pycache__/pos_session.cpython-310.pyc b/models/__pycache__/pos_session.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4587dc9694d9076ea4b4aee265418a5ed90de64 GIT binary patch literal 4910 zcma)ATaP2f74ELSxb3;_>1E&>9}hJ;Ia2*W13iWC#n>2cL~Y})SL zsy545UMbOTLKKOYJVrc>ANdD)jPf(;H4hQuF;4-4@}27Lu{~%Z9#wT!_32Zm&iT%z zCS6%+Sor-*_0bm-$7p!Z*e0k;}LEV-MZ-8sFwS53TmPq1xqppt@kVT;h-O zC-`OlRJBw&*?RqhOmuR= z!?!ar>7#l{Zo;I+ zI~K*fUAJR%+q0VqTOSWWaG_OiS;>o#;^aRlaJzL zVfRi+cz9x@Ai;XyEXH_y{*d8oy`v*RrxZGjI_V%A) zC=V+t{l!CG$We+_C@K#tZIp~#O-~Z4WPncB%5Al$a_Cr+8|bYC8LAER=E8D$`i_k+ zsvo(DgZ3(#x{hvQy=J|8;l4ew`&Jfk`#!_S&Q>sTCeDQISQ9&9cNw>CTc5Clf8i7J zYdUfj1G$DyZ!hdSQwfafDv=!NT6shroXLuF87qEb$!+lXJlj7`2V!51j)mkWt&_Nu z9=l%_$kXCjgm#}S!rbwj$YuF8Y*>?XserDzgt#32>f^tc*J{mpMo9J@ufpuz6EvT2& zya(m7KI=Pjcfw9xjJ@n4xADh5W>ed??$&7i+zQ1c=RjTnzb2b0z3BrHqfAJ>9d~kg zZA2Oz#CX)a$}Q^|Apg=DAE0?cI~TT0eu3GEHjT&NByv-**8>u3hOf5jk&dO4Ka2Wls5itug}{bRyz-|4$@6Hjjl z1>bjz74;;Zes<2S?{L;4l_eOCIv(#3r8H``9D1 zfuhcRe8Z*=jJU*WFj;UgKD_nz?IIqPm<(r_d=Xxs8^F?uVLA{d34+>DDyx71!>N~_ zQr8WSGsTz{qZ^D2EXKe2mW@nQ2X$C^AB{`@qv6bB%?pZaB~&oiK1nZl)1wd+12-#` ziy0~8Wf)?HOI>@rh>v%g4PA?pwA%$nJuVJMUG3mR@)FTMe)bW4u33-ECup!ox+oMA zagoQpL`4H+qPQ!XzJa8?LZ4oxj&Lcr=(EP`2n9ANrWkU30pM(v*}m<5?gm6bf2(%z#d^)P$9r>NKF53^9x!Y|@HKFy9VgbQHMIz&eY?+8 zgX#^89f}Wq_tcx%6c47h+`-(ZpqyPI8o7>-n>F1KLp74fKtnO7MGC=^TtnA-DjEx! z8fzd}7!O{ptW~7s^Xl1+x&UHDbCjfU9u<^#z*13=FMQg!*P)QW9$%X~{v$vBn%`1J zBW0-HqBCCl47}8aUov$K-UgLOJWm919sW~9h)**qfFIg2jjndvs1j+%Q7lvX21yvd9*a=f+4))5QWW1iLi%EohBkV z2?ufBITp$!^HOu6(Omd+p*pzDbyL|;onYQzrP*pO&6(}{(1S6Xe3nK}Q`e;K8R~Ya z^UzfuVO)>0*<8s{dW80iU3CNYFXb`5p;xPXP!gPZu8~QGw8@#L$RA+(E}A0eq%gh= zb8i|SahdUxFIWxpe~+JeF))yNrzm77DNIp_bM^Sd#&_Xu zRFI>{agQACW5j6GWxUq4dGHaV)WPe!7Pag;Zvdb+3i+k?n0x^vKYI>q-Z02(m<0&@ z%TxP-O^}_q+f*zyu)c)WFtcThR?wDBA+-v4;(gRG{j%w4jUc;npjTkOGEt*8`jiT{ zq82aps2i0%d;D|zWqsjm`W-h4OTVZ_gQl$;akq>74$~+}+)TRAekVzl;PQu9X|73% zOgcE~B`5*}*Nzyzua_b!x}&a4M_B>Lr|9z+iPQma`4WwM)Mpt!xw2SD`Cqe#mF$(HH<2xI@{KLpGq1$sqUn8kMd6TJc=2sU&~&?vo`T3KCgXTGldS-qQQaQ zAWg;HuaqC8sqS8_~ zTW3tPN1G_UTEV7pp`zlh=~@+0&+a>N13T)Al`k3_mH~FHs<6r&TKHIC!nxjglu+`Q zU?|_9jyBQ$D1)rRT&~P!&7jETE*(Msf@n5M;2PN@gIv8-8$HS7PbaYE*n8 ze@&Z))Xnn1JDC0vOYXui3ngD4ut0}(~K z5k);ntim)Jk%TZ^;{wGdQVHGV%vA&> z<}gQy%B5`4n#r=1*yJth=xBPSyvKAzl2msYbNY}-=pJJ-FWofEzmo!#ip8<%$o`kE zUmSgLjM*2B07~*V)`H8+_4W0Jy}4sJQ6)@;FugB$SJ#1zpPNcq9@6#{ jShV*R{m02LnDc-$GwI+)p~9OK*%bv0WNX%7k2(JXXa7w@ literal 0 HcmV?d00001 diff --git a/models/pos_session.py b/models/pos_session.py index 409bb07..2e8e9f6 100644 --- a/models/pos_session.py +++ b/models/pos_session.py @@ -1,6 +1,10 @@ # -*- coding: utf-8 -*- +import logging + from odoo import api, fields, models +_logger = logging.getLogger(__name__) + class PosSession(models.Model): _inherit = "pos.session" @@ -48,11 +52,25 @@ class PosSession(models.Model): return res def set_cashbox_pos(self, cashbox_value: int, notes: str): + _logger.debug( + "POS cash opening adjustment: set_cashbox_pos called for session_ids=%s, cashbox_value=%s, notes=%s", + self.ids, + cashbox_value, + notes, + ) for session in self: expected = session.opening_cash_expected if session.config_id.cash_control else 0.0 if not session.config_id.cash_control: expected = session.cash_register_balance_start or 0.0 difference = cashbox_value - (expected or 0.0) + _logger.debug( + "POS cash opening adjustment: session=%s expected=%s counted=%s difference=%s cash_control=%s", + session.id, + expected, + cashbox_value, + difference, + session.config_id.cash_control, + ) session.write({ "state": "opened", "opening_notes": notes, @@ -63,6 +81,31 @@ class PosSession(models.Model): session._post_cash_details_message("Opening", difference, notes) return True + def _get_opening_float_amount(self): + self.ensure_one() + if not self.config_id.cash_control: + return 0.0 + opening_amount = self.opening_cash_counted + if self.currency_id.is_zero(opening_amount or 0.0): + opening_amount = self.opening_cash_expected + return opening_amount or 0.0 + + def _post_statement_difference(self, amount, is_opening): + for session in self: + session_amount = amount + if not is_opening and session.config_id.cash_control: + opening_float = session._get_opening_float_amount() + if opening_float and session.currency_id.is_zero(session_amount + opening_float): + _logger.debug( + "POS cash opening adjustment: skipping difference posting for session %s " + "because it solely matches the opening float (amount=%s, opening_float=%s).", + session.id, + session_amount, + opening_float, + ) + continue + super(PosSession, session)._post_statement_difference(session_amount, is_opening) + @api.depends("payment_method_ids", "order_ids", "cash_register_balance_start", "cash_real_transaction", "statement_line_ids") def _compute_cash_balance(self): for session in self: