From 8987b4c9937136f5db587d2bc442b92efdbddb29 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 10 Aug 2022 00:01:53 +0200 Subject: [PATCH] [ADD] module account_statement_import_file_reconciliation_widget account_statement_import_file_reconciliation_widget is a glue auto-install module between account_statement_import (will be renamed account_statement_import_file in v16) and account_reconciliation_widget. --- .../wizard/account_statement_import.py | 47 +++++++----------- .../wizard/account_statement_import_view.xml | 6 +-- .../views/account_bank_statement_line.xml | 10 ---- .../README.rst | 1 + .../__init__.py | 1 + .../__manifest__.py | 19 +++++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 9 ++++ .../readme/INSTALL.rst | 1 + .../bank_statement_import_start_reconcile.png | Bin 0 -> 33511 bytes .../wizards/__init__.py | 1 + .../wizards/account_statement_import.py | 26 ++++++++++ .../wizards/account_statement_import_view.xml | 27 ++++++++++ ...tatement_import_file_reconciliation_widget | 1 + .../setup.py | 6 +++ 15 files changed, 114 insertions(+), 42 deletions(-) create mode 100644 account_statement_import_file_reconciliation_widget/README.rst create mode 100644 account_statement_import_file_reconciliation_widget/__init__.py create mode 100644 account_statement_import_file_reconciliation_widget/__manifest__.py create mode 100644 account_statement_import_file_reconciliation_widget/readme/CONTRIBUTORS.rst create mode 100644 account_statement_import_file_reconciliation_widget/readme/DESCRIPTION.rst create mode 100644 account_statement_import_file_reconciliation_widget/readme/INSTALL.rst create mode 100644 account_statement_import_file_reconciliation_widget/static/description/bank_statement_import_start_reconcile.png create mode 100644 account_statement_import_file_reconciliation_widget/wizards/__init__.py create mode 100644 account_statement_import_file_reconciliation_widget/wizards/account_statement_import.py create mode 100644 account_statement_import_file_reconciliation_widget/wizards/account_statement_import_view.xml create mode 120000 setup/account_statement_import_file_reconciliation_widget/odoo/addons/account_statement_import_file_reconciliation_widget create mode 100644 setup/account_statement_import_file_reconciliation_widget/setup.py diff --git a/account_statement_import/wizard/account_statement_import.py b/account_statement_import/wizard/account_statement_import.py index 604b91ca..d33d5a17 100644 --- a/account_statement_import/wizard/account_statement_import.py +++ b/account_statement_import/wizard/account_statement_import.py @@ -24,9 +24,7 @@ class AccountStatementImport(models.TransientModel): ) statement_filename = fields.Char() - def import_file_button(self): - """Process the file chosen in the wizard, create bank statement(s) - and return an action.""" + def _import_file(self): self.ensure_one() result = { "statement_ids": [], @@ -44,34 +42,25 @@ class AccountStatementImport(models.TransientModel): ) ) self.env["ir.attachment"].create(self._prepare_create_attachment(result)) - if self.env.context.get("return_regular_interface_action"): - action = ( - self.env.ref("account.action_bank_statement_tree").sudo().read([])[0] + return result + + def import_file_button(self): + """Process the file chosen in the wizard, create bank statement(s) + and return an action.""" + result = self._import_file() + action = self.env["ir.actions.actions"]._for_xml_id( + "account.action_bank_statement_tree" + ) + if len(result["statement_ids"]) == 1: + action.update( + { + "view_mode": "form,tree", + "views": False, + "res_id": result["statement_ids"][0], + } ) - if len(result["statement_ids"]) == 1: - action.update( - { - "view_mode": "form,tree", - "views": False, - "res_id": result["statement_ids"][0], - } - ) - else: - action["domain"] = [("id", "in", result["statement_ids"])] else: - # dispatch to reconciliation interface - lines = self.env["account.bank.statement.line"].search( - [("statement_id", "in", result["statement_ids"])] - ) - action = { - "type": "ir.actions.client", - "tag": "bank_statement_reconciliation_view", - "context": { - "statement_line_ids": lines.ids, - "company_ids": self.env.user.company_ids.ids, - "notifications": result["notifications"], - }, - } + action["domain"] = [("id", "in", result["statement_ids"])] return action def _prepare_create_attachment(self, result): diff --git a/account_statement_import/wizard/account_statement_import_view.xml b/account_statement_import/wizard/account_statement_import_view.xml index a5cdcb25..e1a273fd 100644 --- a/account_statement_import/wizard/account_statement_import_view.xml +++ b/account_statement_import/wizard/account_statement_import_view.xml @@ -21,11 +21,11 @@ diff --git a/account_statement_import_base/views/account_bank_statement_line.xml b/account_statement_import_base/views/account_bank_statement_line.xml index f2067d07..090816e9 100644 --- a/account_statement_import_base/views/account_bank_statement_line.xml +++ b/account_statement_import_base/views/account_bank_statement_line.xml @@ -21,16 +21,6 @@ 1 - - - 1 - 1 diff --git a/account_statement_import_file_reconciliation_widget/README.rst b/account_statement_import_file_reconciliation_widget/README.rst new file mode 100644 index 00000000..2627cab2 --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/README.rst @@ -0,0 +1 @@ +Will be auto-generated from the readme subdir diff --git a/account_statement_import_file_reconciliation_widget/__init__.py b/account_statement_import_file_reconciliation_widget/__init__.py new file mode 100644 index 00000000..5cb1c491 --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/__init__.py @@ -0,0 +1 @@ +from . import wizards diff --git a/account_statement_import_file_reconciliation_widget/__manifest__.py b/account_statement_import_file_reconciliation_widget/__manifest__.py new file mode 100644 index 00000000..e236c0cf --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2022 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# Licence AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0). + +{ + "name": "Import Statement Files and Go Direct to Reconciliation", + "category": "Accounting", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "depends": ["account_statement_import", "account_reconciliation_widget"], + "author": "Akretion, Odoo Community Association (OCA)", + "maintainers": ["alexis-via"], + "website": "https://github.com/OCA/bank-statement-import", + "data": [ + "wizards/account_statement_import_view.xml", + ], + "installable": True, + "auto_install": True, +} diff --git a/account_statement_import_file_reconciliation_widget/readme/CONTRIBUTORS.rst b/account_statement_import_file_reconciliation_widget/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..ff65d68c --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Alexis de Lattre diff --git a/account_statement_import_file_reconciliation_widget/readme/DESCRIPTION.rst b/account_statement_import_file_reconciliation_widget/readme/DESCRIPTION.rst new file mode 100644 index 00000000..47a81a79 --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/readme/DESCRIPTION.rst @@ -0,0 +1,9 @@ +This module is a glue module between 2 modules: + +* **account_statement_import** from `OCA/bank-statement-import `_ +* **account_reconciliation_widget** from `OCA/account-reconcile `_ + +This module adds a button **Import and Start to Reconcile** on the bank statement file import wizard. When you click on this button, Odoo will import the bank statement file and jump directly to the special reconciliation interface. + +.. figure:: ../static/description/bank_statement_import_start_reconcile.png + :alt: Bank statement import wizard screenshot diff --git a/account_statement_import_file_reconciliation_widget/readme/INSTALL.rst b/account_statement_import_file_reconciliation_widget/readme/INSTALL.rst new file mode 100644 index 00000000..f9b5bb0d --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/readme/INSTALL.rst @@ -0,0 +1 @@ +This module will be installed automatically by Odoo if the modules **account_statement_import** and **account_reconciliation_widget** are installed. diff --git a/account_statement_import_file_reconciliation_widget/static/description/bank_statement_import_start_reconcile.png b/account_statement_import_file_reconciliation_widget/static/description/bank_statement_import_start_reconcile.png new file mode 100644 index 0000000000000000000000000000000000000000..292d12e6ebe56468067fa6e88e10fc6d02470a74 GIT binary patch literal 33511 zcmd3NWl&ws^CqqVf(Hl?2=0Dy2=4Cg?(P~OxVyW%d+?wacejhX>yr2V{kL|j_S4pG z?M~IL+cT$UPR&eD_tQOnLgi#ckq~eZz`($e#KnXZz`!7(z`(%u;9x#lpuxLBKK`H_ z1;mx$K8hEd(XWp>j+3yOlcKGOldHaiF_@{1t+g?&qoISbv5ljdtFYjCLtGLv97WJGWzOErrebWxe`xSujg+fF$ zF3}2{Pi*t;?an^FCrl!r00LXhz+?JOu6u4E2WaWRD~mI%tc*$kj_BuSfnUVp*Sf0w z|Il!k8?itCC4Ui1p+Wq84o4KmAP)Br@spyLgy?U}&(C>q@&E4_XE2}ek|=!e7&C&B zr6^>^ad_UXj~2Ou(|AfFJRcf>Moq_aD}1ULES#{bUJ|IwC+<%!rQzMDJC$Li9*p0E zX*c7PM3SpyUD=)CLg7)gpQU|IyS$;n>@VgOy$VB`i+dK{NH=?a$PP>}=BEOw%H_er1}VCiOP*0YFY)frw0dNhFGR>+8FDE1 zMNMxB5nI#K1p2oizluS6h9q(Sq0CZ3S&qU09o>9c-On0M9BhZ+97x6OTsJo2LJTwf z<|AttNBLJehsZfO(?}(gCi6v6ARr+f`A|?$Oy|m!Z;lsGbagibvQ^OnLUQbp^Gxyw zq4r?R#?5dOhRX@7$>pVYwg;%ydIPe@f^hfEqB6yLAXhbYM7F_ij zJ#g>myF#PkxSt^**U#tOhHUAnT&{G1uqcD$HdRuKA1_1?Rzz+79JL60_Fvou4;OK`$vHGZy zYN`Bab7)5uLXyEv8M()@S<8*YDE(%jDL|WVVwseB(cyrmR(y#fN++R0DOp9kZMrDH z(+13Pl_zpt(IqC5x^l=%Hsq)Jn3lumX5Nj-`{khsH4J|akXV$@N;XJ!J)`*b8=#L< zTxe=@|IEX3@My1dln0&al$$R}oyRh{5_$;-NKp-KF))1U9BvmVdc@(Vg`+1yYOJI*!pnws`767cy$)oqvV?(GSSiNToyvj+4SYV>*_a9J(-?@m`3 z(;bOpsFcevIC1=j7zFgVdDHD-Z;i^qOyY>|>zy<{4F%q6wb(({Bjk`jJ;3;+=>2|O zX*S=C186nc-BtrrzTk-#A;b)~LMC&#+5tpirHxM<{SUwlZ*a+?-a`8TW6edG1^tdT zK!jeDll?`_c(>}-bNtR_Du9dE_`|qoYwog~q;kzYrQjaZVMe=Kq?K|{p&PVB@^xP> zSbR6_;ndf)&UAKZna+A!p&HLUvN$DZ?aO&5^MhD)zp~PkcN>g&fX+aIraJoYC1|mo zI0HSoE|qah9m1yEij5o;r7x)^aOR3ee`>f?oGef7-4l*^j=EH;p7HF=q-!ntJMXfn zCnnnMR%aN@k1fW5D2hULrk3PoydXFB=NwAD#N%fHiDcrI7JAI%T^t9dR{1&yQV9Ai zA~I#++S?+fR{nrBR_HEXT@V(8E{;P-!H#y*~|3OK#3wLchcNsO9 zI%Bmy{e~;h>lv(U9&WG@toTnSd8{wfTc0j_mdEu-o!Bq-UftNCMOU|PJ0h-m4cbI9 z6o0i2d4NiJp=PrUjdoi?y(!Ru1$U{=Sn>?m*V}tAncD}M`5a3QRo0U<4eXR^*2vP@ z;K)|T`##Jzh)%F2`-;7uFKy0VzfJDLmll!c<;PPT$x@OIXlb$2D9g`6W6D&+_VpQZ;@@9;~1M;uNEN_!K0qD)c7u1ryXtUwJkmy7FJ zd{^(PORGPcJG!~StW)yU)`pMsP*Pp7lzq8Ga(nUa^r2Y z6y~g|3Opu#CM9PntM;y%pvRWbB6~1~nodCns!%;!hnq7KV=b+)&)Wja#vN`jw03h-4i^@#qK`bPR89o#_;8nkQeuBK8$Pm6N__ zTQ$$Ia+O|s>a=Fx@ZSk836Q1{v)4;K^A}c1EEtv?KV3a$dr@02+N<@BNk6yyQE zDAw1`sr50jhDS&t#uSIE)si-xQ|KIT20_f0>Fw^G9iGfMO|C$G14y;iHD!+gbf# z5ox{!^8NCPIUXJLiaq7ZV=P68(&stY$bpjabBxUDm~^1df9nvKAJ+cbF_q*}<$m=3 z&3gQ+>P6kEZDJwid@x}BSh|FkpCT*y{_1YqY%IwLEuMDsvF18}Aj`uTWd&%GPsOHm z^g>)I(Vh#2ne7>C+Kg|q?*1LM{qFM&Ed{U*`!8_imY&GwleMxs(as*|?_X`2Y+)d9 z7szpQ+qP$3oIk9Xna0!#ci%veYixVQs37{rg0ZpcCoHOWE60s38lyM-ZOej6#E>O< z+;5wIZ&}$f4!mM-_EUa_4Im_fY};UmF`k@A?xa+y`|i6Wj8ozB)c~l|A&|PBH#S_; zSAQ9WtJT8|c?Mf`cNBcD#-3X6v`nO_V&zZWt>mw$Rw;op@XX3H-u9Elot&t;+4DE2&DD~t%V8=p`2u(95Vam#p5kJ4AIR;(F&v1grC)6J0$twp>J&{WydfS z@FS*z^e^(y;si}(8V<*is?l)NMuddG0&G@)e;7r(ErF-I(`SD19>Yarv0>9RA)>qs zE)-=9%kzc+k#t4l+xh4#4lJe7OnUEWebeWMHj&0VodnC7c$MS3nv1y5(dT>gnd+~F z3NBZVTr*4dYXOpvY)<$$#LAJ~dycn7to%rHySyE41L1P=5$*8y5 z*PX`}gTgM>9KvzJJ-jWvm4cn}V8WmP-yj$#DqZmQpQ;aMC8(0q#@n}Y!yMU;q&&N~ zsZuEpbP(+ZL#mjx4U`F!JFC$OKNyAh@T z`aQBa<*La zxs07OZBVwe?|aJ*xuZ+blpC7TG!EVnKSYDwaKb>TVDZ#KrObrQJ5{MDGMWtp2JIW^ z%VYp6*h_NCwAgr!h?WVniBjBMm7#1NjxwH52vPM+VFMO}gU2}LaTN=SWKaG2XEKx~ zJCSe0ox7cd`C}MWUz6jgAYSoKBZ9!v}ho>P^ij zbAIH;gS!!BYu;iL^;NwbvPy0zjw4LE^iPx@7)dw22}9eahs{*H|SkPzY-9d8n3io@VL0A{NcQizba5NKPWMP?(Ee zg<^WKzN$tQ2WZCMKfbL6uUcOG4uc=6V_~ z=+tKOFYktcB1H36+tapv2es{7GhJR=g!j=v+hiiSNw;}Z{^+B{+)eF#WaASVM>b7h zYvB$~8-|<}rOFt-^dJ&Vl2Mg5K%g`v(xoxsU^06Cn9snu!yj?fv^IB%opbegt|<)h zR>vdo4mG=uPC|CNv~i5H@viE)2E}3skA9vM#0uZ^0PU7bL?HP@S9E*Y6V(j5^wF=9 z-4XT6#v&c~dH5g&cnKHm zc~UArS%;8X$z#UlVdO;QgtHnNh@Rv~X#vR`{5lS5T`1DSUJM54*nAuI`_OEc811T) z)pHhv>^NXq{cEtS4~@R*@~^mZ%QN7f3t&{U-oZWSyjz8nn)FF^NN4>+%!5}7?HUPm z`vI9UA)VzPo9t}xrvRs8rI)^&$NDU<1z`NUoR;EzC!%s51{T}Y3K5@$l7dq+qcgB{ z-2;r!_lb_y%fY6atOlJh;!JeMp{s?xWmB^V3qM$D?;3CnqOns^T6jlqy4Jh#pA2j-VB$!RIFZrvT1g>*cd z*a|!GYp0fW&Iko6kpsWn4;VeEI{O&aKM<;_M;GDqe1a~X#7<>#X4l3|=vx@T%FLwZ z?a6I8;R^%u;Y;wy4#Rxt12}swVP!&>=mgQ7CIBW%+VE}^uWTQa%wJvcVMQ!tH{tyM zQXlTs1~L49Na02F`VzGrg)|RZ4K#x(g}j13Uv2zjOvYmW(EmRN;{JE0{eLs6xb~eZ-iIsx z*=NK?aKfDWU$LWb{b~}W)_;N8jb;vmfwCN#JurEMqKJfOFS)T3*}9birhRbyawQJS zeNOYhm)Mg8|C(C60cJ+IBjLo-E}jExn$>lf-88zAvaG-s<#AQS}qp;)6<_%dcnc(`LC(ml@m`Kgtj&suIf7 zp?%v$q9g}%7UlDM+pBT9K20gTt*dk_3pac zqsL(9XvMEthq~70(hu}#Z958l*a!W1S6}-O@n7#KSs6cnJ7t{f;*2i~VPcqS_^^cY z(wN@argLCalpLYO)e$E=%4UD? zqRixcmQb-AVe^_jjAVvDp8f!7sorHnK1A1V&m$dO=Geam_;tmaeq{wxQM&W;6D=`8 zYc;04Ryo;qvZ88vP;7FM%sRiMVf8*cF;pIoSREL_#9Q<{LQ9TkVlW7d58*4M3Yy9@ zBu`7SAJ)#SDzef$k<@iuggcO!IS(IZ2~!_@!CYZSP5h~|6QJA5uzYtiTCdEFP*bK& zy0_^Xk@0|?EKL%3$d}ZU9?W+~2FU3CcglW0t^YE2%L19?s#GV#QtknX^Y^Ih+ zADjdIX&f7Lz0cK+9?yj+OlsWsC2K=Z@HV%b;lurxd8V*SpRD&*(B)k-Y*EIUG57Il z{a$}H;Rq`wPQG+8MAbyVEqK%T$?lTqTMI&D_Mz0u@__x=48sf{viKbvmI0!zj-KI> zRh8}KfqJFSR(?a#OJVh2Ou zLd0@MJXAev!n~-X)r?ov`KrWm^AK}`zpHerlu{cGj79+52M$<&$-p$1EPXYca{ zEzyift)>mXoG(&N+hhS4!}5K{_ZQDzZ}6^B*G9QCAXyR<0{Iv$t~d=oH7f@slqa)$ z+@cM+obBF}lzxJDZ09Obj1;O&`;(0qwLuk5k{A6p04$b?XRzUN~5oY6GpfE*4sWx zOcO5?X4N@X79)?|YYyo^cLA%Oa(Ez1b^c2?3eMwG#fnphk{T_WDTr|}b(s;re^ zTSXc4rFzUKXG!)nhw{A8*buenHA=c78Doj)>DKOtqe#IQCL3I8dXxRf*A|hRB}<{~ zwISW(<*U1th0=5HXf~DKpyz%@ZT;s3!$$|nugz(VS>>^mT9MoX6Sv2QZ#|+nh|bOh>{|xyRnSk4s>+@B51iNJJl5F1)~z3Q~+o@V%MhHC0$D+mjhbZgSC6zD$4vLd&T{e24?roNAV~MyS$YfBGWh;}u(2TJdDG z8j~ayG&)TPIR;%_$&aJ51~g-#%8;PwEMk1kRfti=t^%$miHXPA21S}DD{%7Lc|)XP zwU<7R4`r%%tejL+L~B0PLe^u`mho&FVYu_+EVM?w!8la2Q;lA*(k9PcK-061Y*vAq zWD#NfdcGpo0W?%%mSOTeqW>zR{9|fs!Qczw4Nb@^-+IRvmDdZr;+e|ZyHbI8j~XB?#Cn3hF4N1GN-~E_$8&!kB2kD9K(Kj1C?6noVN$V*R*AFVrNJpI{i7eA1#3hHB`(PAM&QJC=iEi@nD2VQC(IjVtJ8t5f&9JZ@CtE53%#1*|wV zlt0Q{hZqa|Q8<5ldGql_WsbB_K$cNPbz|A)8YUt?#EeXJ77wd{H$XW*{{%iI4&(61 zDK5PXk9yVWMwgkOV%kGH=6`OmK;ufPAfHb__gjW;2EEn>!e3A4m}u(_^w*B@CMo3q5(c;^AF$KtiMnzBX+!vxvU$R0&9{u00JotoX%} zleekR$VZ55?xzY~r6|og5esKH@j4$g>3BkZ12=}FC^vI=xtAWlm|)fu=N99=MP?D) zws{KjE8eNJhmFjK^?CE*=>BFQk-PGQC$}CeA}NdDdT?FvcqZ zEwV$mQeQ6dL#CB)Op~vNwvazn?_Br+?+MRreXO)D?i>fV(@br$BB=*nUN5~TtDeXD zXx^`BJTNC8Cieq@Uo=KJK<8rTO*90oaY0*4C8e;B-g6vjNEH{mZ?PC3I*K5c{APm_ zdPt+wy|uQxF@W<0w{yhL8#c9$7E_tk;q5?tI_r9Xwfi@}H0WSG-l&uVZxboctowTm4_T z0G0k^R3iECm~u17^`I19kfSuCMi)~ILv=M0H%9?$8Y&7Ia3#C$rPuTyH;0HMn$)>vWDz2mma6VqdE936-MTV0a5=Ym zI>(%DHky6Th$X>J)Ahjf5t)uj> zSA$xbtocvNh}_y|4K{b_4-0^;<}$p{?s!65EB)T33mje-d8}^Dxf0!+GQPg88TAGmr{`I`fkxiU6_Q#%8BfmsY>5(1%CaOwt9C50e3xjd5qy32ZYb>PnZQXs}WC9{@$`E76jCQ&8zrlsrmG1`gJzp z2WqKln6}wtIhW->D$%al@#H7X1rcNhsL?c5g)C+n@6Oc+lO$t>ghkQullj|z(Ds}4 zWjZC4qIx{{Dhz~9F7MSY)e;7l8AODV%zxTj3n;pd3CU3Zeg_3|O+UTq?)B(3&$7cUlj^vbz_$;y_})p*OeE*j(!#ll zT0yzkz9-eg0EXqQGEw8(RrhCv=Qn}sg6A0feCzf;+yOXi{HNn1?a^EB7w$vJc`dQ; zfO$m>t2GI^>3u53g-^``92Oc>fQ2fmiK>=$oR3QiH+QPfm%!w#(Jw>$wq#d*NnegB zV0Wve;Tk^U#0wE6Q)&PP(=SR=cIFvfy*0_4sdQ?D>6gE8b~6Xu5P~ijrl^fHl=y{N zNzmP$m}5l&*F#p=63sZhu+?lIs-hb@$Qu2=o0msj{oO02(THi9`P^sze$7Pb8tAG% z7oVtn(XTKrMlQH__j5CA&dost@~kKi*tQTB;T6SZ!fpTk>t6)6b8&zM5sAbpJ+Z9> z7SCvkJFvFmj%!OBpzO4`S`Jed+Q7m?#n$Z2$3>f&j>lo~HPgQByn6!f6}am2{Q6Pa!)jR`CI6@ww`HSw_i&T+0H&#bfL$qI#&wMynu;jM+NdfzwD zch_iZUIII1TP;aMnR%(64>`UJbQ1@CV!;+SXakKnVHFNA*lY>Dk?#02`MqM zBNS^TZKdRhi~ZqgqYzEOn2AY)7qMe62n(|C#Ec%u^E+R|#rVX)-BylPQR&?kQRt*@ZTHqLBK z5vVBI=eVz(uZOLK@cu0QKL3QS)C)t(i>J(LcXnW2mlhQ3s$TGRgF2xG=`4)Lujhxw z6kUJb;*2O_4WH$1$<8yPVH=;;+i02UioLfZ%1B#~%0JFN5NijiuWTdjrm84wPt)tQ zaDP>(vvc7eK2MA4taNZmC&>Az9;kv?3%@{ULl#!610 zcUM76q7H^(HM&q391>6lBtG76N13HjP_&IQEh)&<8W}MhY!4uo<|n0U)2!}``@O+8 zz9$#Q8pG6IcNhZwb&N)c!nl>y8(xV?amIFz%bZYhL3_7{YhQW#eqyH>U$p|n;Ajm5 zj;&`|bv8%+oG%ZK&x=cqO-y%7nNb{GGn)GXEGpD&xoSa!u!b*Fy5c{c_saq%3KWBt zrH&qh>e%kG(WsfHMnxDmgRtGUK7Qt7RCJo%dG;5%2Jul1r6&oV4Uw6rJfg5t?pUyV zV(BeIIF494kQD1m)u=|Dbl->G*M+pQU@d;B54R*gO&7}&K6Nm}Z6L-=VWlL+v0B7j zdw?g-LgFpDzs^G{*H6^y8Tmfl9SUZ5(KG37lpQjq7bESd+2Opj^alMAI^LFsPR~JhvW|Iw z+nYzbuvrdAE|<9wO+cOd(x)0(W+ENUKpd0A!rwhqXeF~+?t%5lcoVKOd|#f3`Y$$Qa`V(GV*K#T=D-H=oSKFlQ5VN*qL#3fA3WM2}7a9c-VumlFcT6{{$()%9P`W8Lxqe$AH3_QwCeLSJ*L<>qiqOx{m~2uwGFq=sO7JyXPs68He6fD&&;xWoWjb*ce&bmD6LUC?oj{m> zXxv(hhEZ6!SE(*9OJg{={c=SHdFRi9!x@~5#B+u}OC6y+NKY- z5T-<_{wqhuKF_B34oW>=d@iH65K?og?wW$JD2~Neffq2zqRTsRX&H3TuFSHyvf?i+ zYtTkj){&2dzvqTRzXLIeuJ?(L~<2TZr*mf(A)lyx$qH05e?bPNxp1U;a zSDx4>H4iV$WKO4Zr3sHts#4F7M9|V_`cI9elYxM?gmHDlyfm@UMc_vHo8Hn@qZOCS z(o-Ek6JiB9SGO{KM@l1rN_8w#q>zlzbS`75f-gDfiQgImBiTWTs#HlDEAEGR1_Lp~sZriU7l~Xd}@qjY3%L+!ncO>&)Lpul(tl&;x?qF!c zR`PNTBoItNM;q!7&z#7EdmR;H^VLMv(LSLTC_Kq;y!ZFH^aTu76f>{dFmsn8#eQj- zzlSS*uU7I3t+=!Fyw%kitVJU7L{kIK9H~FdE%zFM{X%|#;^TzZgS2*(jSg_1N0bB4 zKCvLe3d0kd`&Cl0R76mt(N+TU{Q1?eyr=w({wX zL>=pNG+Ouja0eERYjWRn4iPskG#n9HnXCaybdBu!%&goWF^XCJLZZVH`H%hjyw|E{ z`(w(G69c1ixf;xEcNYGm`%@>Jv2in&KKiWXGA=vgX`C4MoE^M7ct`J@!Q&w^=svt* z$7H5qsy0%|;P{L{{ITJKfDQ5XFnR``3Tj8}N)Z2pGYtVLrDiQzrRQCa&m9`w2?F_Y zMV`r5(>dK_vzhKOo~EP@P--c&5dzY7a=pj1JRO;lUp?X8aYL?VwP|S*Xq}2qzk}^k zumeP6vNHvz&@cc;ry9$7>N!)mY-~cXCTNt0V1d@IYD1d)gWL_xm zYB-&ZO6!XI^w;ilVkpzj8YK-4{m=Ip(OdfW+DCsAmOq%>#AIJZ0{&7Tw;r(M|NV9| zg#_x~MhyM;p0F-2v)7UZL$CoRWjQN&D)}1Hy8r5Oze_`f^>5|n*k~l?pHV*x{}27+ zKL0a1ocvGmzdp_fuMjHP|LR5mrx?$sG9^fv9bhG~s|`S*VpXOA`J(V6bLN84>!&4~ zW!!Cf1k{PMi*{9Jl5+DKp|Dkrq+uH(9pnCkx|in7+xLGuXh=?8vP$`^N$JeKZA4f` z-=jN)M~KU7Nw|C~NkF-imFxUx9{u^Ze?;KM>@8DYx^b*pbi$CUeSR<25?*L5SlF3i z5&Ezv&pe4LPwym+Pr1JvzDzr&5SlXXQ?SvkONlHpkaf>NMUztYMIHH*%Yt* zaL~U35XY1Elb@871M}_3*P9@SnoK zQ-wF2e?L^N%Ves8YN~Uj3!mKFBF>FzrkHhe|lr{%Q}tM(X-za{baxP zy8?470sjt_7jfO-jsu+`n9fs!(PW*$!raEr>(Oezn(KF=5%m4$QN!6Q+L{Gs{W^bQ zgJXGWy&hx;Q1{0J(Wz%d(V^RD2znbMIRgjl%u@}v+jjw!6#_1PdyRX)0kQA-WkJ|%Q ztIx`G<2$24T)#$~zU2&FfATJ8#>~L5^j=_cUB|r((Ipx;h&HuzUcMs~y0@VF3B>LF zvv;Y+KJcrm{gCZc6DDEK(Y{Y>zk>63Q2C*mmZV&(F(1r*Sx_>}Y=gAamkUf(Yrd`G z9%aHkEtbEh6Ylbh`A`%-*WH$Ee$W1({k-k^=pht-7H`*s8~g5!5_J@mQrV9}Fi{Mp zIN2&wK`#b;4b}bu+!oF4`&xsL*kx@z^n%uroGgfVp{Q5PCv`G3&c%d| z26sG#FRoa>GPAFKASG%QiZAWN{gHKR8Bz~^dVOVr_$6NtQ84Zbrji=RkGok zfskytlgk|2X4Qg`OMk99$&Qc-$2W^?IQD+R#PGcE%vW(sCA%I$=(T1E59psy17>+a zGQwc&pV{=F){fh9keq=rfN(ZC$>CLqacL-Qv`Qp+;T?Vi)UDM%% z0}fT~8L!YyK3`KZJ~I348irI1$(Xn^5)2{_)+-q?o%w}*t>zN7>VOli zB+n8~9{CFT1ay;q z28?RW?3`66;XvJ)A|)kyyZyLZ?l3M^Jf&fAn2LAZYImd)10Y(K{`Pe0b&BAT{LsCM zZsWFQh)3bL7CUxqyPleA5lk-KiG7cUb|GOk$wMlqWjCu~KB#iR$3C%;;w}sfJ?cQ{$S=ZPl@aJpEX7#Wm zU9+$Dj-*&=`tfIsuNfJWZV5!Y`%S`O=o2zI8V)LOmJk|DMzh~=J=2FJ+QtgwJ=MG4 z;6kwyJ%J9>ax^6*QK|r@>tj+Y9s=>Wp77;0nCbkg=m?m9>@@cP!K0FGq#)zS&&DDt zHOn@A;=_I>6DjR}V0~Z7tA2ez7BoP%d8H0>U>F?*57NAJX%opz>(Z{B2V<_)b6Wz! z{E*CwsZM^CyXExr06vNWGqZ3r-!<1^9Dxa%NVzOd4%C_4%*g5iy z$l?vY0TpXw(lP>$|HxF<4N!{o|FY>vfdzO-JblKFzh?+KgSdYhy%|G^W`w`OfFjihi0O6=W^T(yH- zJ|+^I3P!jZ8(>}yyF#0(herE@BOVh3e7>RrdSou|yao=YIHg)EwTX&9<%s&*=u6VZ zws?w%CwNGLyfsnc_f(_m=r|=*;eI&U^F5>6K<`=f`rK*H$`yH)LYNA$6^<&V*&*Z0 zcC%)RNP{+k-`$^|I}3KiA05^UPB(hDZZwS#Wly*4Bz~YnKo{5TQR;IHtOu4hk1z_? zzVmb68B@z`$42g@gm&7&3)(rhvCsy#TTfI8K9#Eucei;Uk9{3X*F7as{`jDXN;*=- z`*5QSDmaA#ZC4xmp9#xWilUoP@irVi)1(gqL47DYhl@opJvw(KhpO!L*3iCL_qner zMQ&6GO#_fMogJajzDjw%DR`kF$yYl?$0Z5Fo&vwrdlGP(Iwr}WNF5Nvv9fwwFDcTn z6u&{rv5;85WKhyUx;527!h0q&_%;XO+BW1SsQ8NjXSSo^$FgsbZmdOOaEFtGuQ^Vq z0;1F0a#tlt&+K_(GCvE>CQf7Ao695*Qm0;x3u&QoDO4wXUqGSJpJ+2WdZ}iT35#+# z<&rn?tnLQ#`stp2GEzmGG%+;>nyTN>b=qChCnCZb{kCww==b)i+{Biw*1_}%(7KSG`tPZUKZreL+Euz0 zCX=BXo+dqh^qgR;D#V-ObVpU|!lI8l77w9{qVSXKOLl*rZXQ$TNNfg~8rstcw`W;% z)RXKrSp;=4#4RW9U+?tmGPXb~)Q&Ugoakb!24z6^q$xOggK!j*fQHM2IP5S9`ETWh z?xl&&vE`1^Fp-`p#kyGaPES}0_M{9q>g&F(0M^Vi?2;AvTpjNYlZmZ0lSD?`bO5{BxMs5BsNI+N7TYx`3Z{GIt5p8;+<4>6GlRKIKRS0=`@e z(0&DYbKlS2jb9 z4NpGLzh7H+d&U&$$`otD!}I(HzstREAsS;kMO9siX#NLP2u^p>y+wCEBS)91t+K!I zXij?)!Ha*J<%jEZ{fr8QcNf+>;Bczr`D4%Hwv4ZRp~^{E2o>?0aN+&Br(cW!nt;dJ z+V%7I1Tc6gs2}&Q+|j`A!)Hqz^^R=U6RD|~s2>I3LQwokc_=8q;p@zPXlGmGjWn#W zF&zy7!D7Q&;jfSK2d5nj(*G~@>qVW#SWM`n^hZ*D{->pd5gOv}FsOhc{%^z|WqS|< z?k|VXY6`@^o$wUDeg4Z~Z-@Z(mxI_w%Afx)$N$4Yny$6|5W@pcBAFj;Mr>&|I+7s= zV0iVN#mqKB%Bxyaih8j5ojF_??)-;R5>6_v7Ml9oADo1~vCMZ98Q9IkXh2Ps$ z%3{h^atv|u;<5#dtqfjx5q9%A6kL}ZLF#hzMFs=8Wq{xE(_rU1Ub7p{BK4l$pAl_F zyyHXGH6&ksyZR7czf(o>rWn0GF`;yJNAACSgphmwwDSs;0KF%t>+1e2U#IPOorvtm z-_X$-_PRa@j9Agn-O1l^uS&khQ5snSE%L--i#*%EUqgmY+l7B@s<0Lq&nluYJXe=* zDykvd*3yf?(}oXb?Hd`#@No*@m3ha~a^b&n0kX2Xe-hDik0;*p09}88L%!cNU;i;C zcX6S8tA)~VG@s9ht-3hk^Z^C>%dR!u&_wp#TVai24f(;I=NN8Y!m?gOg-z2kfQ>9& zo{F(GyT`1QBSD%@zLl4I_Q|+G;t~1uwHUtjb@2I+IC60dpT~p^rM8BDVReBP8478s ze-72pVG_MENIGlJYT+E}im$raqggrK6=)weFXxIG4b0jN-{88k%C3peO8=1EAOZi) zm~Cf6ckdH6;%eViY+DP5hMDD3uH>8Z;YDl_hNnn+^P4+4w5VYyvLg84OW60DbTTp+ zR-Oo+3e?J#hKhZpPo}>iQB>YJKOS;Xkrg3+8a@0v@U3B|l6&zIrPB`cCDeL7m`&d| zvnu(}!GGYY*cog5rO@lW9HmpYTJsdz*W~nF$(e9a*cHj7r;m`yWlUk2cQq6YL5T6(5i^@%>Iov`M z(hv-LeAo6CxyvLd_Nn5<3c(VkB^{yXtZJzIcqvT)_AsZGUnt7DkTkWhvuiUnBsfZN!C0qkaZoiuDTBi z&t4W79F1jGD|+;4KfFBQbX$%0T|^g%-)pwq6Y~6Of@J5Y+1KPHd`2w4+to)h=YIwd z#Boq2{t+CWU`q(Vip09ecSKj9`PkzPo-6Ww=^=nV}GQZTOkFLZ{M8W>Z%451bLS^QX2M@H#6{_5Wwuo>fdzmV5|iElIcj{I%`k7 z)5p}-u4fNj$``$!nWimhB{lmr8iL6OP1u!4y#ToWP6(z zktDe*te4Zo%L-U45wST>)49HCsN(u{tdUms7IN-}3e37`8@pWU#kw&c!mUsKYwdc-n>% zOD!If10Ck|F+ql+b)-iU1U^3ODB8-=W4i16K|mD+Gl+y*>s~mWC$i9kQ9`{3$9qR% zDW;8X?hN_kuxNtCTK{T3b(#NG-B$<26$Ec$L4pMc4!cPR?(PsEf#3mxI|PT|zPJYq z&Y~fBaCdiD+?@c6FV5m{o2%blU0u~(-TiS_cl*!0SNrBwPrsR-?ytX@DLc&G8f}o_ zs5Rrf5cdf?aZ_)T-cV?Y_uWn)=erYs5;|#h0{w=M!t*JfVph2fi!R9Rj!xbcy9hc~QkH&Gr``Sss}1Wd*0zBEJSrCWKx zGmRyl+qb(-6^0z?18u#O)6BkxVC~ANaf7FfB=|9oH(b0`G&;O1NU{?IbVf1pZ`Q=g6Dl? z$acCvcw`e_=5*4DQa@B|h}-=-*wDcA@*vl4L4+g4J=;6wMLFKe)69j4r#F36K9KX_ ziaZZ!*d@c9cE#L4lr@oPZGoLBdtbqc9rt*=lN>B!?)yMz4-&~-(P(gX&pxFH7QsDXp?sz^Vm%0bg5;5kB{%T;O?83w8)}UH%BV8o^g@8Y{t9L3Cs}-tkMg6-UU0@y247r$)}zN67_o#8#ZtCrLh_iB6Kti+Zf=>t z#AdPU#%EinT48u~$f(rus5a?VQhLus;;ft7beVMsem=EKUeqRJ^4BP#~OvA}Bq+OS2XH4DL7L(K_1JLdr2Kt&SZ@*dd*hHsTU^*y_aOb;jMTVwN4;e(|Ec(%o?hhlJhAx5tX^0!WC2-l(vhrMuI5tl`0RgJ7Qij{{5Wr zC;KxZjTi5>Ysx3+_$LY6kp0;A#Pd>Q(Lml}>Z!QkxI_nHr<$7aF|-G5*VnC(#8~=n z)>bE#H#vry=JxxL6IVrJhR$}4*APjd@XE&w*XPLr!Gy);w%{VR%y8jzX$rLZ!;jn} z&kOarWG2j^FaG!eJDVQA&f5WX+^hqxddx~$Tf+ecEn2Mt38@D9g7Fv}n3ykvqg=T3 z84$6{;ER(JV$2MyygcF9{a|puRi1hC#(U~_@?TiHZJ~LEUjew{F*f3i`)nen-B=t* zENG!|dRL<+&gM0=BM(RuFkMk#V%$JgmHPZIto``2Vj%|(rWK5QI@ zt;>2D(aP4`Y$jBITcAhzBPVrAGo)&mTNYguj2D7hg-tYq-4z>)Nz!XntcfhRqEP17@$e^01 zQN@}VzxwE#-zExww7gXeq{*{9vQ7;Eu5_@D-?ww6$D=FxQ4hAr=JPo#Iy@0rz}Vcw zD(GbRnA%Eidx#x1gl z+c+qk8W}l3lY43I$mR*v0QrbirW_DOunpmgpBQu#~j4E7fb+1ZUcm?qE&K>O1 za^h-mu;l*+A9Z)kQRK8Ylv}hX!TCM+)uCsjB&zJ4F-qjUh}`@K)ShJwd+zKN5b2E2 zxl(*~b@Xd%BB0~tEA{N#ML|+~AUh;b*;wdq4#5YtDkOAnqNa; zEPMNF)h~O$muRI5SD$kFM?@eZ$+1s~O;DJJ!=CyjOI`I{oC@f{OmnTd=7kvVAlh7W z=H9C()W{UzFPTolx%=8Juryx`_?P|7#vy8xpl4%|Ypw6F(-12Pa6QdOIbij0W}da4 z&qaa30#aRP`%*{2d{xXPLa_e($V+U;n~xc*tZtt^ejJPIm>;#J364DW`;jg@PcOpp zv#6kr96n>DlVvT|OduCq;!PCK1IBM(m7a9W^)l}=rvnLuY!CYCO+zQjMFbWbY#E1S zglOr&7rT{l=sZ?N0|w$*cebX`=D=Kc76^(4=n3ul&Jybd>BL|TIK6jFfqe<5^@oN^ zJ8>qX1^Pa?TutZJ#YmE4u-JqiNf7NUcVas|%-i!3|DWl=_@J-?c_F%eH3rnt4&I zma7=^ncK~09uy8-VNNTxZ%7xx7?r&emtB3 zv@DNM3yrWknj($}TDA7gur{`gr~A*WmJ*q2p?{2;@tebko&lqN;-Qo+11865{e$a2 ztc3EI>sWufZFgzBJN#(+Xa^8yv+VB_2#Uh30dqKF^_6p|UVl@g0I2p%k^ZcC-_@Sv6K+<{Fouzw!Rrt0Bf{1qRvXYq&V@yE3l`* zSKW<*7S?K&gYpRY_%b)IY@FEW!QWkO7_RQPi(u@a)4#eOaoVCh4%y5VwLV9r1Qhlm ziCB8x67zU$+8B8D^j-N76|1)=kZ<)@zun+N*W@k5H!6{dL{lcQTaM0^k?ebMB4@m| zz-Wup7XCJczwZzcui=7Ul#t!;+i&wW1relBJr$TxUX{0|Gw+D^CC1WCKu2@lXE-4@ zMWbg5y}F#{2U%U`jU*`kS$N+W=BA1FYiv5f^HGr<-H;-7_lXw7?Zr746FbqMG}3JPCb&wSTo)}Jmx*eZd1I6fvp#4Wu_&^8h6|&+ zi`4eN@sGKFN*`#a=id9H$V5>eTS|VOR{o)WAw89CSpE2HC*$X zsgT|iS%uqU)-y;TRFjT()2|`(;0=0vSs3Rg7O?%s8l_^Kt(&Bx%HSph3sS%OQ5-5gzU#>G?)n@!d&aB5bE7%#MBqR@Lr`}Eu(j8HEt=fnn!^k9B&6Hg%7LW2GAkn7 z-M`1Fc6$Vk5O{oNxnPXRzUIbQH5>EMd!p9ahH7j6=aIs%EMf=hZzHW>2!cygmcm<> zs_eG}dwva(oQt^+)?U17I@=GR;lq+sTd4_uPWtsLjQe8Pf{|KXk^@ zX6_|^xmtSyMB8uP{slx)@kd`vM-A)~eUco^ ziyH`u-i$6?1AH3js(UtXF#7ay`(&77G~v4ijk;s$R<1G4g5L;(!JfB}8pFpw<~#Nl zUEMs^uE$CbImTw(*Zfb;^Sd|Vd}(3J&jIX>PPP_DG$%%4r)&-Ub7Y;`D%FA4$4~55 z^S-^zDf53W$&KR0pIrfWZMgP0C*CeHYy<>x*s181AK8#X+kWCEtU+Na9aX%d=|{EE z59f>grC57P6}{p&b`ABRdcIOrCB6o3dm|0o5J5(E=C@{Zu`En-zhri|+Kon&x=XFV zm+d))-Tnw1(#*2)%eLgkY`k#j`glri$5v99`1^IJvWp2nfXtV&%(`A;OqLAIoq9N0 zmU|(79t=-g@ZF)JynQI&O-+U=<{ld6T|4TQ3&HK^3a2@~$2Ig+amAh$&fr z_TAmTCevEbzRD}usrK`u;M2v?D0yBK$P3R1w%V!jdlo|qlx!UwVtvE20AyDlztAX% zpHju6f{34=T<8}JL(i_@LhNP;RR5NlLt*-%N6Ou1&bH5_INF#22azOD;0C5JCxtH= zqhZ`-&T}|u$yzaDIAbHRg>zA}DSs`SxX{7-*NGOjwWT&(NSG0IhH!d-g*B)_jc7a0J2n|BmSz%_i&|32k+aSlR6kb&N-1C3Qh&s!ZxBn6g|FhhKFn&O1 z*PXJE^Jrwk;PXh?m2-U6205UujhtWXnO57c=^TN8hlf)gvLLcybQ#O3qG!S{mpg|1 z?2jZW+aJC@B`Z*w;gtg1#^j0INviz}(O)PL;RpxBaRz%Hnh+si49zE#fX-g1i*c3C z`1A;=>Q|FjYn3#P#>l&cHSe9+z@9A6>pm+NfB8&KJR;cvCvtn)p1>+wnv->&;AcB` z6MiH;fz~BX(B{Ajp?g-jH$pKTP0j#Jy+!OBw;6AUc1xUs#d}3|FaL700kM7-tpRpZ zgTG;)Y=&IW2@*VL=U2}-R!v&{RY_WxLeC_|r`Qjr`q}0CphQyLwBr{O>IM)mdjYli zLaEQ#UTbH5IEOkI%>Lk>Ijah;okFnf2t$8~2DXqM{IwK%eSb%D7HCMr7kK@0eauiv zCnxi#m*~FxVU6B26N>yT&eO?`cdDjIHwLW9>lnM$=ZeI@%ayh5NjPMg!W$V64)Ugs zeWV(oIcfit^5GNuEwf|weMwl;VNlX`^Tx(tSYyvEUT)Tb^g1t?7qZ4_U$zbP{N*_+aoOW1jJHG8U;8Jxe~-jzO{Z|Zq%*NlcDAe(;1 zoW1t)=1ocuDJS9nR)1omgqtPYHUQ`Z8>g31N-C zJKY%Myb%SF4rwavF8XrbcT}DQP zqdakz5*0>b-FzHszgD3e_YGH?pFvlMN)`4vEvGE9M?F~S>$bYCuIi~-@$+hy{Cn`fNq?R zkI4g(Ypn@n_IotBVFOKik9)Kp-uFfg{qw9`8-j@PME!g*X1Q0$_M1gh$M%mlwpnc$VkkaT6s*bkng_!RbpszK zI;f8HI}#tlk84ZSm1JcJXlXwsdes+r`YhDg9OkGoqEHaL-r5jNX(9yZ^yNMY@S!D8^`Cv{_7s3YF*4g)D2-%ui*F!6akccI*`Q zXWH@lmNjd}wXXyz{?2n8^%vOQZjy-UO^2r+Hz(^Hlnxs9{pH}8?DnTz+Nis?$O2tj z5E^(y3KOA*A8=iBA74nyGPKnCpb`!@JgSI(e4*2 zJzl)pyeHMYd;jj8Q-E-xpLXO+Yz`C~g0F&ZWKY4tH^$#kQ@3}hdgC4llvi#hvBn!3 z*neG4Oyn8YWpEsPuhY;6X&SSI1ix}wsil_xB7oe_bdIf0l^&w-1N(y0hk|h16T*#& zgVo0X$@#VPR+U+$?R#F|O@65o*~f;@tf0h>@L}VPrO(N+*nlp5tdk2urQ!=TpWp; zKS7T)7`RWLqN4Q$Wce~MpfH6LZa#i7=@+KKU2WjCRAF<5+nZwRbP)sVOZUVWD;VkJQB)vOP&2%Hi_mC!#x$c8=NapnY!=kMX${nWHM=i7vDyHpK6U;x{kMm|QWVX(f&hbk=VBMlNI6 z6doUakG2{aSz`CgAVwSccPske1<{B%;8nE{!l zYTnsZhB;EaDU98G)VQbF3Ut5Y14>y+4bX%a40HMoX!t&Cb2|x(k1Dd7>^Ur(){1e& zkNd9qLSh)-kw!@wZyb-SSHU0$o$_gnpR{;gtj|Y0 z^laSXK8|~fKLi=^0lGNGySG=8m^C;5PQq;yWj-oNX)nr2TF(|3*nY(Yz`l*#&vSb0 z!W6uY--+V zQg*nCS25qI{w`eaAN4-A_*)`+CNO$F)5?NykB(*TuOk|X6N09*3Jk}vA)Xf|&2yOw z-yv#If)(!QIJR!Wuc2xivp>a9nSCjQHh%wj-gkL1nOMVDf!VTJesc5AOpYLU8!KNH ze-pUuJN;E4IzI#n`mFiHuZA|xOm;WC^rW<@*n-yvQ~q3@k#y`F%giV1KPXLyt0?gl>Z6+Ip9NY zw3bgGX33L0?-+Xteiy0jUj!}Wshwwq4)MVM9+f0B-%f_zKN|9BC7w7E+I@FykR*ff z{VSlQD{m`x+BioaY8)8|ir-E{2CT38d%hRu)n0-~G5isZt;iAlzx6Z&-iU~xgqdbb z1`KBR@?1CyzzF~V3I7gu47{D}YdnvC&Me*z(Z-3lL}Ia%Cqm*pFAKBbFR-Nmq;KX0 zn=T}%V>OOi1jX^hC9?<)LJ`e8ptEZQWq25W(+TY76~RJ+irw`F`Rb<>7{D(Of zVfQiyITSC(PelKDqX=+Xq6G&L%p*dT|3CRP|23TYKg;wnmzPr#UjG+}Agtd-FNfl^ z$a=_s+)1g0{v#RvKgmP-7s&}^vYA5`I){l{7@3_jqNRR(#`W-6uv}(~@qHw$(kU6g zZkEnx;tjAex*2_?BE0DddmX3tr*Tf^$;(9l$MgQ*WYJJVh{;s&hO7{j z5uSnF&sd1OPmy$x+58{%GkE@}$i!Xb7R+ars}%oO3JDKynP%epr|SP{z{PB+;I>ps zfa6uo%{j7j+I2*wx10Zp-gp747#4fAA;A^-bo9cV*KkGWE#)r z@A9gd3RqCX-@H>JJYfy{t%g4GZ9!&$*#-Wa;qk7g%Xh<1gH|)Y#BlI|?`Uja=RxEA z3MiAc9`+sGfp^ltbT!44g!onwx3VS3Wz+t)(D><%pHPrao0qe4%~!EoOYHk-Omxvj ztdnB3TWeTIdr73k=LUd?ha=;9TXpc2*=~yny^sy;UcsP68zYN+dox{Avl80aFh#hO zYK+ge{a{W8T{QH!b39y^8@Z;_LJk3Mw z(`=c951Fx}o^UPi=;QNE_RYC|I=Q&{TT{G8{-+Xk$huvQ@kz|e4C@B_tfl+$XuIT5U1a zu>obVKA8(_%LzZsSdlY^=hhsIIC5^!6R;n*;J&@b6arOH+1xO+1QxOC=G7uyaU3uvCJ_#%V4@Ry4R+jI!nq)3)svd#`oJ z)FZ}#2(-ghh?LP`kL$6g)Q#EvR?reDG$7!1V8oK7+Nwu_tv!!V5yh>F=Xwtrw?e0P zK>Krcid;Rmp0+pm=@AHO!;S+Z;^(IU$P|JH(BI>NB}%o`GP%1shbDT5lF+Wx**AVk zcj|(gX=Osu|H8#x0x`jy1Y)8k4;DOJlpD=GYkltSyqkf$sHDaXXAB)KP|rq5_?U#B zy8Ns&6&CmH$lN9j@{d{dD1u59(7%{0krzNF!SJ-&XSp?_#&%Bu+~O%cqet)iIf_zz z@-ks%{dRI^_rPVtem{a_TifV~B+5;4VX8v)*n*yLe!&;`-BPL*xAFL;fn|H(eE&)Q z_KhSZ-#Z;T2iXS8gJ4e+=fwCXZ}tx5Rme^dTc_NnBIZd2Z;H(6tZ)ov%o zJNW4fUPTE;XBD5WpA;=8--N%B=k(UJH{KdrBkmy*2Rh`XeDTs7$hW*#@-?JV3b1-x z?*|NZz37o7yKdD=zs(*qH~(?<+DxqGuClKI8lii*Y1f$_Yam-=XnuAZD9Q3x<+8n& zvFz}E%QQI-T$>^|&0oWKk0azfhQd{?M;6B?f~Ohc&H-bS&6BTrg~Dp~4W?wi7By-+ zC?Zlg_~w_fND916CKnT5&r{G=zdnu}y9Vz?v05#@jX;X{67v0t4Wr#^yjv9@wJ+pI zw*w3;q)%{Vs9KQBZL<8JrZaodSJE239W9*7$sI967*q*pYi#h;=}XLEQX0wCVDY&d zn0_}#>aG3up6}Rbr*t(hYhq)pK?>GnB+87kxj)@YDQ`vKtyyY%E=g~PUiVu~)P7KW zu$i10TwnESKIiU2r`O02ySy}?kD=l$* zyVCUxy?}kRpjYH>v1VtPiUQa6<0Dc~d8d>ePf zx?5(cuyuTmU`V2TTHHi$q?vqVEDo9nU-<7V*4U8rmk!8tLZhAzpWk5PDU(-ws8raz z^AY|?uy3K-C?1s5VQ2JI|4vWLwFz3KL8j(s{4lJlP|8CwlfA5yQnN9wO}uM=R(P-P zv*&9>Zm%E*1&v;E)$E*2|3+lKJcTo*V%rKWZs?r$)mLQ=vOfJmMS;=X>K1aEAAL=> zlc!%toNJ=Te23efaHxZBY820VCHN%RK#uRCv^jz`@|pSiUEX&aHlQ23COx_llKI(p zU+Vi8>!a%m(#7m`MBWao6T15ZhuUY|eDI(t zZ(0WT@K7@FMbd>=NC&){Ad8{*K@Yw5koh^{=Hk4xv#(8H>W*v>ov^gbXaF% z#5{f=)1h~Jw5%DUJd&)pEF8MJ!H5}W8k${ z!y63|kvC2{FU_ZuaoV|dCT7YG$dRjXD5jD>%2RN67(n>Br#RBIFrQgN{ug@MdCA>B5${ILm&%g zG>%5X&7a7P7K+z9nCIPb-}{YvwcmPCA5wGb`N+=53dfl%F;T|9<$L=_RkvEDLY7qo zURZtmLA~K^Y47E6cUc?CkWOnn`#^<>W2pG*_hY$^J3h!Ji(5YV$9ddx54%Vp=OloP z1bEQvrCBR8Zgeoiwb*ijwCgOXG+9t*>&%;{pZ=3cY=os3{!Ge_+YwXX#(|xTi2bu` zrq(iz$DhJd!q%mL&!Y++rYy`%J`0WiBNiouWv7)l13y`7A0Aui`L|ft%HWjQK9;Pn znb4oBUXiRze*Hax&n+sBA7U%1aM_*vlrU~<{j+R!)_3nnOR+7Ddb{Sp%&84cI0-=z zZDJWodwTiy^}#z^BKUW6s}ild;9HX~nEu9&mC#*U1$|9N8Ke7h6A|E%!fs3sOJ;Gcp5Bb#hv~G*$GTd)Kf|KghsYuJM&X1 zu8)PXE*0FuEM4b*nAIL_ZpRc5#K$VX-oUyUqOi+eW4SsxLBC$ySfZj6o z_9g(WneMys?vHruLS^!&fEk;O?Nfn{*`CP30^EHP7ytFbyf5DZ+l*xtz{bc(idBQMFk&UVXZbqTo)ddViE|~IEG$tg_;xGurA9V6)(x~`6CbM zre2O1I4Qod6O|{V+1D7s!2X0*`&~i4f~Npf8{_&334GM>;%v}=X{M&|r@`udxWv~1 zIvz%4lOs(^S*8+?$5l@^0NF}79;bI|9H@)6A*?i00oezytT<#eft1_TuFtjA zSrZxV?LC4wCvh}gV~A-q7B5;(Q{(9iFD?tr4}zGJ-NO5h`@ ztg39zna=;sS@wCU_ny8=WE{<#;SAUA8;c@s$&YgivB}H5qmg!S$Jyglx0GvKBy%Ia zPm44+zZJV|%geoVGC5Xxq2jf!Ui96#+U4{jp)L;=wr&;SL`!)*Y`2umffJycBL_Ej zm<$eqM4?i>xdF0)A_j-cLbQu`?VG%+dAuEwmgrg$B0StTjl(E=kDW9));q|(MBW!V zJFTs;KAvFIqC;=ruYcJ1f{Ceenj5tDfc z_`b7>-i1~0B-EwLSrSu9R*rsBsEs~~w#w67N-A)$Ve-~1i-@R~Fz@5eWF$Wl8kP7R zI7*pXNnVLSZq8_VL{fJYAFIf~15x3EYTOI@R*5BzjW|T8s6nR-Mk3W}S}oU>$fFOh z`Ht+gecm8J0&#qS;*l>9-P-C)Bs#A3Bm-xbId!_zSqyGec4g)a)6UD8Mu^21;6U{& zb$T-S1Cn|wktJ46{DLY$-ngu)04DfwSaqk2cgrKAbRjC3|ztkFHZIKcn`rvJ# zSg5v=3a3A^Rzx&*ps3A)hRY?{i;`r-$`sT>RLMUj?|Q<#9NQD$!|16g0b#om`DSr? z0GY3O7}8ExIr|{S_3WNFa_w>_IXV4r1=|4fXg>L222NZS8Hz;Nx#X{K;n=79jplD~ zgZR&x3_-YJZ)cpSjZ~nA3*eERvJe-8p2<)v3*MDJ9;)gjS0A0(@jAsQd4s8SBZW%?iKFFCJLy?j261eL7vf zWMoR{92oG88jK>RjB~=)|It-VV{^wZusc(D6cq4m*FH8YGe1op?ZIT^FW(qsI*>2e z320VWsA*Hp*W>)E-9E)|Lc$u&bsSszR9%BlKjMyv3f)PS-V|ALW{-&6Cg=6hz6R7l zvt=cG89lr=%ofhzf!%>qro!q_+SiGajSbXW6FAG~-SN|F^%JL9`4^oeF7lY&1M0(F zr6ScC^xtXsS(r+87SOW{+!z=Hxws4+U*esg4|6^$>xZ5{=(&{-neC>*AhjN^R@-s; zaTSb=?s?j^v^@IF#1ifVl3%dfGrvw&^?)=bseZBC{0j>p{sUV{D%XaTtQSygf3;l@ z!Bn;!Q=E6%_;Cpa)iqNYiYu4aQ8@29M=N`@o0d?gj|Rr3cy{003uPt>Bikr0Vff2B zs(8*)JNKXh?SraO^9Pj1IrI}#Q0Wix$g^(lC~jt9-Q0Gu&-szx*me6__YPtme7{!x zT!0EKs#~ij`mK0>QI%}(32cbPRc5D5+);B_c}VVlP(3~Gymuf@%YU5(C+Q@SOyk`; zZ+D!*uKJR!`B~Zv3p&8>S(C9D|0mY&taeL+@pgdk+xfYiQj>l)IJ-YobhL@*Enx?- zHv=~>C&xWUB^;B9F!b$Hd*n*&j4 z&GDikfMDr9)rMr^3d9km6z#rA1$+Q!o|jG+94JJXB0GX4M_I&&7%!cj85q}l2fY!g z&a?ch$Z0mCcbjmwUmqOMTSd=A3oNWQwhoaIb14Kd{<`MJQG?{X1C~Y3&Vu8omj)FH{e{DJ^qd&8FcrX8f$?2F7 zdKziHrxd$QGMr{gT2hxDK36QY1!~hFLGdQrdkJ4UWGP2y`Yn;Al9KSOiTfx3)5g4OD1&ZV2 z#ITj}iin(5ffEyj82ga3vTgus0UKMp$obGj4WX(1<0n%r`$5%1!=hnEf|E`C-P4$5H9G;FxVeM?ONwZCss{^H@%IKacP6*rL$9dM(86YWLx1Sb+1c0Kmhf z=Pax&^o6}45E9tBg|7MI^LkTC^+f1LFHhsMyyS+hKuTa=%J4IXwCoL)sjltm2sHBVMGok|UOf#}cPQmEXDq zRU83N(L);s{FN7eQ~2Q$A_42PkiPkjN$mHO!71Ot)&B4Vv&kv{xa2*@h^*|`KoO;E zkX$BCc5w28spUIdQRQFd{c3AeEqt|XZHrp?n{@mb@1@jgwvK~(Q zVerM$#!$iYn-~;_=%xwXj$CbVf62B2p^S?%h4h)oHf2WdqEJgyQ*;Q>k$MKgHWJ#{ z2ORUM-}DhHM3Owoh_m3@Z>FQGB-k@DF2r{OB(2s&V{U$-@YxTS@I44lRm;)@OJBic z4!bL-Jw7NOH~n_&TP3WC%G39}nX&mWvSgNb#N6+)Q%V2AWO=4AMl?Osd+a%7P5YfU z=da96S0Wj%=SKcX7QOM<=>}7~DX`mLHaKkIleV6H`SIeEqYdo)q{4QX8^zgg084F70d19)z^3nf7{T-^3ko?$-`1EfS$ffeI&Q_Kf=oWO0&bW~yvuLC-e4^?n=%R&448Gq zk77x|?N^S-aW>FU(X6KcQ=%j(sn?!s6@H5r*A4g`Cr5~5w}fA={@J4_F23kae9f!c zqnAr8FjjC7+AeO~EGKs*JIW*4ZXBlvre(6fP}4GL1e{+!n9bOhsA_10x5rTx+D9|a z4*ixE6n?*6wZ&^O$r92`wdC0>Ye3GWI7G&)lYsI#v#^lOxBmBW&o^A5N0SH$`tU?u zWuDtnp7*oe-#>&Rh%?! zkwNlahM|$w5ZneIzgO5`vD4a}%%LiT3`yuTvwVOxEeaj-K-HU$Lb$K$W+Q7s9&s-z z?9u>4IX4lCLhbj}LNgZ~f1Mv&aun_OaTdHO(!Sb5zRsAceRZx^ukRevY2;Cm=)svq zyRoT7fZ?o3oVv`e4+^PSy49Z#M?ui9Uc>_8dRPI+>Gh9oS68#c%-Mx?ocOY?pO}jF zZ{O8aNy1mOmm2w$V5V|kzicJ@Sr)01-u-cq$!xaZ1v?oOC2`X#OzS5Nm&4__pbYl$ z>%&O5`XYtrU6ocboCfk)eiDU#sRgx~zQ0#^hkm?-r)V3p+^>mN&xcuVjWDK}+zirN z{sF~MO#{4xHC|9Q$Gd+%vG`W9O8M(gB<=yukt6MxYyD}Gm&us1o#K7;Lr1%`^8nx8 z_C4^AgXC{M$VCz-m#i|~(PYK*seE+t^B|_*7q$G^OD6{K8o3~{uvamxOD$hy9xeWrp+&v ztOvwq7UbJVLHYF# ztiP+MTgAD3OWFfPz6V=3eJQTK!7O`(lTmvghF9O&Ixl9f;>)hxQ9w1(nSIsbQLd?{ z=8h;}%f70xk)EVRvCqB-U+uJux!|Nl+e+{Se*HfchclH$uRbX^7n$;24X>lg-LWO7Gd8o-7#d7HLb@ zc2mYPxOeh!{W~F>nN66Zp59|-W2f;+DFzQvs&O6fj|V-j9-*gI#bT`b(dLFHp@H}k zF>Ahn#wNe@#;c-hrz)|#0fsWUs5$F28$CF=%;>b{ce+dA-L7`tXP_Tv%1?x zuv_yEqm^S~7W}FxC-0-M`(o`~vF?~?)89KKV(9FUsCRY73-#ueL#IeK;^Qit-RdTt z_}UMgG;P*RswEjwL_%Iq&n@VlHrDEE6o0Uyah+UT*CPw$ahne^-)L&X?4nBjnxgza z`kXWnT{`p|Cf$xVxb`kGn$CQD@u^@hKZT#cO4{93LC#ZUz06nbq^<5#7_S6(HNj^j zBotZMj}l+IoD*vIud<6z-79S7DgD0grR(x^RFG2gsh9X&{)s9(**o#`QUs=%^0L0u zUVk2=6XlYNe;~f!wDB?<&@lU!xBsC;aVv0#35ro+?Q=;+9%NsKhqR&|YUO)YBjwi& z%?+>|vD*_%J<1;_w_ZLOFWy{JN_~MIlKs3n1bBA4w)r}b=cZeF7IuBOn&I7qOLv#s z@Pvv)wsd^Ri-v^wwUePBBMKwq>wO9owb4SQJxvRRCNLWsj#8EoOn#ZUXUn+x6%ta= zf)54e`{~0tn?aUVw9t2I0MZC*B>%1$Mkz#f{}2Mqe{aL4K|G3tL?Zp>U%?Xf;a{Oe z7VxjAtVG5^>+cjL_FtY@U&@tsWWK~ks%%EaLZgvhcpn2mIVQN!!G%Xrd>X$y7Dw{W zvHO4`aT&NV4w^Np#cC98wi*5EjtdW^=o`IT_d`OGTK31m&M%Obi+55=DJdBdeWi@` zOL>*1WfD8EV%|u(NM)t;`4Iz&qn5nDiYxX%i@@MUj)J)O?*!xc4;7&O`>(Sb^Pgh= gms<3HqvDa@56a}-0c|4He=U&xr1Y^|(kSph0YHr}uK)l5 literal 0 HcmV?d00001 diff --git a/account_statement_import_file_reconciliation_widget/wizards/__init__.py b/account_statement_import_file_reconciliation_widget/wizards/__init__.py new file mode 100644 index 00000000..ae69bca2 --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/wizards/__init__.py @@ -0,0 +1 @@ +from . import account_statement_import diff --git a/account_statement_import_file_reconciliation_widget/wizards/account_statement_import.py b/account_statement_import_file_reconciliation_widget/wizards/account_statement_import.py new file mode 100644 index 00000000..415a9b96 --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/wizards/account_statement_import.py @@ -0,0 +1,26 @@ +# Copyright 2022 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# Licence AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0). + +from odoo import models + + +class AccountStatementImport(models.TransientModel): + _inherit = "account.statement.import" + + def import_file_and_reconcile_button(self): + """Process the file chosen in the wizard, create bank statement(s) + and jump directly to the reconcilition widget""" + result = self._import_file() + statements = self.env["account.bank.statement"].browse(result["statement_ids"]) + statements.button_post() + action = { + "type": "ir.actions.client", + "tag": "bank_statement_reconciliation_view", + "context": { + "statement_line_ids": statements.line_ids.ids, + "company_ids": statements.company_id.ids, + "notifications": result["notifications"], + }, + } + return action diff --git a/account_statement_import_file_reconciliation_widget/wizards/account_statement_import_view.xml b/account_statement_import_file_reconciliation_widget/wizards/account_statement_import_view.xml new file mode 100644 index 00000000..477cdb71 --- /dev/null +++ b/account_statement_import_file_reconciliation_widget/wizards/account_statement_import_view.xml @@ -0,0 +1,27 @@ + + + + + + account.statement.import + + + + + + + diff --git a/setup/account_statement_import_file_reconciliation_widget/odoo/addons/account_statement_import_file_reconciliation_widget b/setup/account_statement_import_file_reconciliation_widget/odoo/addons/account_statement_import_file_reconciliation_widget new file mode 120000 index 00000000..c288a19a --- /dev/null +++ b/setup/account_statement_import_file_reconciliation_widget/odoo/addons/account_statement_import_file_reconciliation_widget @@ -0,0 +1 @@ +../../../../account_statement_import_file_reconciliation_widget \ No newline at end of file diff --git a/setup/account_statement_import_file_reconciliation_widget/setup.py b/setup/account_statement_import_file_reconciliation_widget/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/account_statement_import_file_reconciliation_widget/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)