From 208ac87281bbefe9549573a71de62ba04854a34e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 4 Jul 2023 17:50:50 +0200 Subject: [PATCH] Add support for scanning code --- sao/CHANGELOG | 1 + sao/images/tryton-barcode-scanner.svg | 1 + sao/images/tryton-sound-off.svg | 1 + sao/images/tryton-sound-on.svg | 1 + sao/package.json | 1 + sao/sounds/LICENSE | 395 ++++++++++++++++++ sao/sounds/danger.wav | Bin 0 -> 25190 bytes sao/sounds/success.wav | Bin 0 -> 47812 bytes sao/src/common.js | 6 + sao/src/model.js | 11 + sao/src/sao.less | 16 + sao/src/view/form.js | 30 ++ sao/src/window.js | 133 ++++++ tryton/CHANGELOG | 1 + tryton/MANIFEST.in | 1 + tryton/doc/usage.rst | 3 + tryton/setup.py | 2 + tryton/tryton/common/__init__.py | 3 +- tryton/tryton/common/common.py | 10 +- tryton/tryton/config.py | 5 + .../pixmaps/tryton/tryton-barcode-scanner.svg | 1 + .../data/pixmaps/tryton/tryton-sound-off.svg | 1 + .../data/pixmaps/tryton/tryton-sound-on.svg | 1 + tryton/tryton/data/sounds/LICENSE | 395 ++++++++++++++++++ tryton/tryton/data/sounds/danger.wav | Bin 0 -> 25190 bytes tryton/tryton/data/sounds/success.wav | Bin 0 -> 47812 bytes tryton/tryton/gui/main.py | 2 + tryton/tryton/gui/window/code_scanner.py | 102 +++++ .../gui/window/view_form/model/record.py | 10 + .../tryton/gui/window/view_form/view/form.py | 30 +- trytond/CHANGELOG | 1 + trytond/doc/ref/models.rst | 9 + trytond/doc/topics/views/index.rst | 9 + trytond/trytond/ir/ui/form.rnc | 3 + trytond/trytond/ir/ui/form.rng | 28 ++ trytond/trytond/ir/ui/menu.py | 3 + trytond/trytond/model/modelview.py | 45 +- 37 files changed, 1244 insertions(+), 17 deletions(-) create mode 100644 sao/images/tryton-barcode-scanner.svg create mode 100644 sao/images/tryton-sound-off.svg create mode 100644 sao/images/tryton-sound-on.svg create mode 100644 sao/sounds/LICENSE create mode 100644 sao/sounds/danger.wav create mode 100644 sao/sounds/success.wav create mode 100644 tryton/tryton/data/pixmaps/tryton/tryton-barcode-scanner.svg create mode 100644 tryton/tryton/data/pixmaps/tryton/tryton-sound-off.svg create mode 100644 tryton/tryton/data/pixmaps/tryton/tryton-sound-on.svg create mode 100644 tryton/tryton/data/sounds/LICENSE create mode 100644 tryton/tryton/data/sounds/danger.wav create mode 100644 tryton/tryton/data/sounds/success.wav create mode 100644 tryton/tryton/gui/window/code_scanner.py diff --git a/sao/CHANGELOG b/sao/CHANGELOG index 9fe6f7f161..63413702f0 100644 --- a/sao/CHANGELOG +++ b/sao/CHANGELOG @@ -1,3 +1,4 @@ +* Support scanning code * Reset search offset when domain has changed * Add a canonicalize function for domains * Add menu to copy selected record from tree view to clipboard diff --git a/sao/images/tryton-barcode-scanner.svg b/sao/images/tryton-barcode-scanner.svg new file mode 100644 index 0000000000..702d149206 --- /dev/null +++ b/sao/images/tryton-barcode-scanner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sao/images/tryton-sound-off.svg b/sao/images/tryton-sound-off.svg new file mode 100644 index 0000000000..2dfad44003 --- /dev/null +++ b/sao/images/tryton-sound-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sao/images/tryton-sound-on.svg b/sao/images/tryton-sound-on.svg new file mode 100644 index 0000000000..b10ebb4579 --- /dev/null +++ b/sao/images/tryton-sound-on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sao/package.json b/sao/package.json index 66dc2ccea6..286788f372 100644 --- a/sao/package.json +++ b/sao/package.json @@ -25,6 +25,7 @@ "bower.json", "dist", "images", + "sounds", "index.html", "locale", "package.json", diff --git a/sao/sounds/LICENSE b/sao/sounds/LICENSE new file mode 100644 index 0000000000..521adbb24e --- /dev/null +++ b/sao/sounds/LICENSE @@ -0,0 +1,395 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/sao/sounds/danger.wav b/sao/sounds/danger.wav new file mode 100644 index 0000000000000000000000000000000000000000..472f39107190844ac725defe4aa9fd6fefa4d9dc GIT binary patch literal 25190 zcmW)o1yCDn7lwBuxCM7;3oTWu)ZN=#cX#(vcXzpUyLESWffgtZAqfx&frJQg*{tio z^UqF_8TgXyB(v{#&ilM46GsjkHg_QaOdB|L=+ZTtl0yIh0QqCc3jjDa9RvhG2(Wm; zrUkwDH7M)D?q@voF*<>MKy{{`lI_UnL@z>)@54vqUHRKV+==fX(n*R`Qs3#lObUCL z{f}M3>X>Fs8`__$B<|pcu{&rmT7=k;1!zBPH||STQeT;aTq?L-uuB*uiWS`x-Vn3~ zr*gxYV5$&5haQ3z&}p~9C3kIfKZUl#FVQZwaVRhl{0%(dyx4YhE3yl|5yfEG zGtuMc3G@v2eDKVMyCRd&&)5#)FePWY1KR~FL|SpNSE%<#ua{y!krAB3y`clhr`Ts? zB7DJf-LnpEk3PUpQm@zpV1w|ac)iyFudm`DQ8vi3e)M=kkJ9jeo*d{XB!%vJWbj;6 zfEN?Hs95G8`-(dWM1hmRfglXb2QG2D*>21eN=OdI51|nJ!2^2wdgj3k&|t!cHnHo$ zNy7P}BchYSdmzJNl$dyjCLu@RI#`DEz_RcJvOU#6CD75df;vUbrS?#Es+5MAPTY7P z0Bi$(0J6B%Y%o(!)sn->4&*U%5p|j7m@Qm3@By4AI4amAh!tD|1HiR_o7>2>;MD9_ z_7VSmJYZk3Icyz^vH@Hom&&!`T65`K7j76gkz2v-;!bf_xog~I?jW~@8^d+vBpktN z*&_A@dz78TMzC4T45pr*OB<=f)Nrad^$&G~DxsRuJLtc(57U-u!vrug`YJt*PNiY$ zH-Gj6DJ{8_)DTk%3!a6`@vcNEv5Dl!In-dPh|DHB;GI#GXN$X+^O${;ZJJGB-{4s3 z`Ua&S=djnrZt5Z3h5?uXG)ZJWU*gje|m@!i;a}SHyw#_ley##KD?ID^` zC`C}I)EQzf_60V$TR0!t9$EUEx0$Azs!fRbtyODZ<_hr~K|W&Rh*o3-nTL->wNR1c zyrtUsSC^wzXk41$MpQSEi8$DFx5+)%hn278W)Y3W`n_J}6k2 zpYXRn*O@apCoyMKPIk`1Ts(Jq-oiXISCU)tXWj3lY)RJQU!8wV`BnOBd6ppi-)v`g z>hHF{ne4CG)3bxJ^RixKJ<9r&RgtC70<$IA{j#@aH)QYpJ@8M<9RJ+H+#Y#T^1|{i zSSjW zxT23@x@>VdTD-rYB=1e`qr58x`%3S~ht%e2wi@49I@pKWG0RRP-0(vAqavilRv<6< zS^Tr2XYCDrAD5jv>17Fe5;imZpk%-QGNBh~b$&1utM17T7hT9H|C#xf`_$qy`&E^- zrJ%n&yP=hRI62?zeXuROE+SiU!*@Sd0AH~_H7wSJ8kSkMKo{xf-kn2Tu|1PlB>Tl@ zh28UcOB-Eo!}+?7m4Br#%fD9qsA^q*x2YByz>NtQ69cFG>R|5X>Z$8>poh8h>^4~9 z6$vO5!>rz*Jo9skoNTi_DlW9CvdqJ8|I47?lFQ$m7 zSXj5*G#yD6Gz4Ca`k3I8d?ay0Olas1-xI)iyu15^bym}V`ZS%QalP)3UTMrW-?Yz% zqVaR=Px11=_7O+pKQ=FDc`dDN+O^c4&6;BU!@~Tw08_E;&VlAALkr!1x?jc&+jGw{ zx|=vTa9!A#s1MOEqZWjZ3V!TE10lp5_g%|O!v*a>4F~H(8=7ke>&KdMZN1#{kr-k! z?Z+j8Cj>Kv7lrMFC|Jn-q<`RT;Ze>FmH^}F#^D-M!(Htf!$#{(h$fx_lf+ZJ8@)(j z4{kVd2@0^yG4^Xbu34j9rY|x*v_EvugTEuskTUqVrx)~(n|3X6--S-Yb?8815_O!` z(&_X)@+tlb6(X^)2z~@Z$bIY-v4iT*+-EOwcJ3#a#?4?iFb`>nT12_XtK?`hnzR!d zqKRlmZXqFZJ4I8A=x4mreWuUTqiGTSncBpwSaT|dYRNxtran^v^k&*dFJ-EjWVRzK zWDhXE=v!1*@;q)r7a`N&dXL+40N#uoMSo${xRf|Uil~nKvn}KWvOlRM&Jdl5QhY4_ z153d6ph7esF(Vt$jo5WuLA)g!$qX_FKaE;Faqhv6@77o5?WXOfqvku->5g^o9q@Fl zj?hu_nYQdKR>er^&Qv0C8?E%1T&a$HYoMi*SFPPQ7dX@RTati%cjWs$a59bs{X4UrA${YuTHDFqllN+RA{BM zr5Vym(p%D6{@5zLRo<)Yd`Vf+h{DMQEeakMd?-vT-cjxw=!;48=IvE$N@~nsS5m zm8@2QR8=U$Ywy%ftBtIYR7({%Wiu*vRRqYbmCtInsy}In#s=Ly-5af={)#F^=}}O! zE3#AtReehBtCv~6yF!qIST?3Y9PUILXn3pks#eJc%X}&&s@=NI_J^1a%<%shniiE2 z9U4i8XndD~{cxS*ry*HAs&Yx$tAgRV=YB{3PReOfFicud8`snpegypXzZBjlc7A+n z?7lFupOl>nKeUgvwzm^d3o2V=37Q?37)Hr1ycb04~3Uf)=z?p1e4 zZP4mWD)$unns?(( zNcx((sC8@`SF4idj@WcbORw)_g)`TXsqSB`l`l}7RvH>m^LONjU{wf|aJ`MNTgyJ$ z{v!uG?%S`2f5(HV17eE&x3ZP)eMYwKXXU<%T#g-V_GLGTFg#a z(M%EdApBjxKjIXwANd7c1XIusXfG7viG>}=eS9?C2n_J*9q=J^RLqm4@u}Ne!);Hr zOK&Sl8`Huk;Y-Acz@g%!j0P1$qn$a9^R8X+6jBWa`*jHI6yr%~pG+j}PnZ=`7B)0+ zu-6c-30HbryQ=J^Hnq*)k>D~ysptj5MYjUHgvZ5~y_0-f_#N|`%gjt}V(@*=Q>?+2ljNx^%0HaVx*{p~{?uUv0E z$59#n4_QUNB)jsJ{5m3sI7wDfOBkG83@iexzzg7i0K!^n8R<`O7>ecLv&aSXCUzAN zCKxZ2h%!W_LPAgr-Us$_JJ=_TfH_O|rDJG6I*p!0Kc@YdBTN8$jIT5^_}Vg^v$1=5 zJ>1T~^d{Pe{y|-)9#WN5C;BBlf?=3X?0l|@b8#QID6Tn+(*IHkM#wwKpH0Nsp^ z#fIQxiLRuEoJO6YE>XLwaa1g?njguNAYc9Al2 zHQ9%lh2ija2yzzL!)-p+2FpcjgngW|$^96fjC~?rQf-(pb{QMahB1e!okS#d0RHQ4 z?UdU>tYa;EEDx=x?S3u|1R*H?o8p+cTqC!S-z)CXYe)>6hp3>(F2bR<@3d#zpE=sQ z(xIF1G|Y=UPOo6MaND_U>_U1KaSrM2*4r4)n&}sF#`hB{A+Bx;ZRXvrD zDr@9wnOgQp{#{XDd9~_Um4B5*v0d&XGfJCDOUvcu!P4>4L()uXvUFAXxH4BsX0fCw zsPJaN`-0Jh1B-?f4=oXu9xHuc`nq&gX=LfMlKv%%;`O{@zAai()V-*8(W9cx#d#%b z%jQU@$l55rSLRpstCm-7uiPbXTY;8+C|y@NtjtF`Ms`+lp~_l)OgTY0t@RPN|=4oZ%dWPXff=oBam|E(*x@X%t+gmU)7#=EiQSK*g2P z@PaQn*R#{JZe-Q|IaQb{Z`-igR*T;hqW)tfYr@QuUjZ)B8LB7L&bqJZdQ+KI51pmd zq9K9SutCvlVzxys3eEH@0y5EgHl?ng8de5W->Ej%+BCst5~^fapXBh*iKEl3>1Von zWi08cOE;w*Pih^$&D%))wiRoxRQ)VlQ26I>U_Mhgw0vxpSv|0mpI8Nj=KDEnkPAt;Fb0^y{T*~BY3D_ z5YNa&iX@wpxAB+gHTVm(*WJrq;U3``imb$T6Y11iI)cey@@N}XOl~Cx<883HXg%^6 zd5$z9ebA5SAgl_@#69?WUWZvCh}03g2^-!G-+>jQ8R%bR6EX!^h&(_f=woye7K5wt z$HX|Yl0?bBWE>elyv7pH!!QH=aQ|`*aJ6?ma-DT&L0)hVBpkhjR-(n|AM_o6Z$jH+ zO&u-tyB&P5+3veya?*!n&{BjqHF=SM>ehfs`H1tKiq(BAz_!z|)HT=L%6-~dZJT1AWSFb1 zR>!EG*4(P$YID?sw14#_O{dL2&9_VojeB(aH6PTARk<}rrBZpa=0&Yl<*6H{R@CLH zdelBtuBv`jwY#dKYGJjH@`UoY@|+S-dRG@$E>nQ=(h5X+M0#23SCLh*N7hCDUJfcc zDtap>D;6j&D&8toih9LY#YzPwzbem^TjbS>IaNKC-D_j(zN;JScQq_)xKlrz_Zk{% zt}A1ddz5%hdfokcK>MTdtZtKTf1_4I)d#Ehs;<{Qsx4Rbu0N!0W4LXqu#C3$vV3e> zrjOGm*0U#R+#QHT&P#iwH<;d19i%Mil~z9eg_QmY0x3^N4VjYtlA z#mg8lMshstco-9s6mU_jV!k0+_Ap~beKX~JS$%0i(d5Ffg)2)86~fxF`VKBDwZf}D zsAKrr$Y&A$p-Tfci<`4FX7K!iS|Yc}HiCRVTj<6ZYeHpG`y_eX`G~=R&xA!pGxto( zV?!sMsZnD1Zr}=KC1F&jlJP_QI__*}SJ?CZV3XR|NsOZrarWxVsn zF9d4#JUJazLAzZyovU1*pt)!$)gL$^?(26Zuzzq)P@8}tA5Kuf^dNpAyFC9w1rY7= zL08}^(n=??``CW$Jx0is(n97ZBW1mSFi-(D7hvE*a5FHG>%cZ+GU>teb$UNj%8mj4 zf&!sh*jv<7R3c0i_7n60`}3+0A_C-=&oK!aU)RZ;YPtVw3sm(7+sHf|vs|MIGXu&q%5RwVo=chS9g_ z-}E`Ul)6fK6C<(r$Ts+kXOrh0@An=@IP^2VjZC1oGKbjq+!1aAhqCc(6TOjA5gqaK zXe?6gp`nY=4`{om5Y9xm<44JJ^fK1W*?_4a28e+D>^HiIwBjk)Eo3eH$Mcz2=|0FU zbSj=fX3!Dr2ksLf08asZxS0$>j=}FDX`V!PjdQV6>zv{q>$!;hz*Z95Nt$;sj*+zl zh66Z;x{*d$;rR>wa+_R}U1_dSt}@qVcUPzpTI_k~x#k(}qFb$~iZov0q6UaH=w-mG4%9;P0rexROQzoP-vW;L$S zn+!F^j3$pU*7#T7Rd-CAq8Z-MzQIpZtPRs2G+s45G=DPxF$FZG7*^<-Hy+S_(SB}x zqVLc|n(x@QIKrHB94l>`%+rjEb?Mrkn$4Q{Mv=j0I%%H(?M6=!wIt5(a}MaUeUB+$ z7p)=HkJZKoN*`f+4WDObiud@x4$hY}NgTo90l&P)0^^7@DBe0%PpHQzzsl!IUzB|; zE0qRUo>%$ldpbybq_9OmdMFqn5C1DE3wZ8@a*ad}L566*&t$W!;_KSznk?&}S$H7*4`ZOl;%dljjn>zxM2f|w zI}392cIRElM~gSep4T4McXaxYb4A{PpToLEPmgUD+doPwS>tyFoQSV;&Tl%XiBg@f zK2?>dL{#qFi>z*`Z)DLb@ zG^Uvw-2>=X-omgW35_k!b(qw3arf@sfv&AO^l7P&-xIpmJCnA$NmF9u6Lr37OWmu6 zRfa_SN^}{}C+$kANC4uRMV$=Y8`#??TsWK^MjpZjqa|n$!b!ga^FS|pae_<`f_X7 z2Ic{;Qp?zN+*cr8Fi+TBbX{~-)Kaut_)VY&Bf*(KF}IrQ$z|{)XFvCy1A!61S)dAt z0LOsa!AsyB@I1H{Y!BA)${7KC;+F9oD2$8a`g2z}3Gf1#0HWYlfl-ho>>y-$rc?!z zfFF>?W%BBJmpRS6W)NmBTfl4Ud9H%PI3d7tEXVNAO$Vj{TY!VWG9VFn#S^AmY-iTS z)G{d3hy9oJumidE+(J&k^<@VzBD#ibB!&`Vq9^f7Bj_y*7mgQ1gIl=|jFnnUwj!qEf%rH)jb~Fhb(-IW zUURWPDq!R?xh8fb|4jrlo9P;=AN7Q6LH;GK6VC{QSk1rkAqt{0=zr)=G)8@*c2TRS z6O@tKLw94G%qn&pt7O*EyU7-~0ttjQ&~~U4`swL}z-TT$kK9ewP+O=aWCQ#d(KdD|_)>U6yw9tzSFPxj;3@Z)?oZCaXJYfP3phs3 zWtRy)dfoCX3KWOLNt#JIg{%mo{iA#v#g_%WIbYg|w?JQbKD$r2Cb^osLp^~gK-RDl z(Kz4AKs;o6X!ForA?`rhPwbN^z9Xy_EEcATjo!Wd&jgK@bPo#*&kH*gIydBg;10je z-XWry-~f(dZZJ{&Rk9zPDEjKX*FQ73d)ST0)iGD&(D>;I$K&tEW<>>u%Y$3_5As?A z*75H44D>zR9{vEwphIv2S;AZaV8I>!8t*Fh75NHQa5L!Ugac{rQM*n$Gn}OJp1VD~ z0BcQ+;x-9ad%ySV6qpmVKX_{JjG%o1v3`BL2Z`o_U)UXdS95`AL+l~Wk|XGoYzHtz zgnH%p_6SH1`Zu^`h)+mb@b|z%|24jKUP+=|U{7u?Gl{QHg6IsUoShG5iu!oZ_g4gb z@(B^Q7kYuOxnt}?<^uhcvXKMGheQkF555JTk1xgV<6`0xF^G(yY&UVrZEBO`OCxVHZ&mTFQ5O>(Fu7RXl|xsVe3n*9SZ&I4TSmMTss5j|%+2&Rhzk zBOl>Q(B<$aXrEis&WEegP)x$c^7{0TV zct(4EdzQc>ktJv~c8z#NQOtbcp5TCp7MFWPct7^KD7Ff}g6Z4=T1_0rt|9&S-ujN` zC_EXJ~_?YKAbOcgEuRSh!Gn$Gw5!b11 z%yl-4y9UIAQ@{bBnb)CxJSmT1&Qe;UCB7J~gYS4)XryNsd=ec(^rmCDE8rU8D$!oi z8sSc`ko`?n@~Hzqp2eGB6EXo);~mHWlz~d5Bk6MLC^d&VK#`P&_G5=~3wR}M2|fXy za+6q`{z(;*!}wIh6*7~0O-HfkI2n)!&JdgwtQCX`&VvlF0?_gGUo=&*_j$* z{lZLSD(NY-hF6^tR1az*b&Qfzt>`^;2_3+b`1Xv5XYv2?E1J_zDw`+veW@C9E?G&8 zCG_}jp2ZI&s))U$A2o{_M13Ql5<$2>`pz@b9q(LeUu&Cbi?aXgIOozq6Od0>6>*XJ z#ItyuCuu4&lqf;_z`Nafj#aj+mPKZdshfG6CEfPWamjrJo{8Nddh#S5p#rJZL}%<6 z{EnygyKKiS>E<=2IedREu~b@p9oJmFJns<&wuH}(c#{wCX!Itu$MKKln(>D2iMCur zY1%f%>obi`Q@r(&?TG!nowhYtH(O+;*rthwRk}^u#SIJ9yHsFpU`>InMo(1`oTrLSI z6HBRzBl3fa%L<)*p{$3rv~*7Kg2E7<#W&?&D_B=(FJuZ27M?B`n=kxZlG~UwI;T0$ z;-xvubG`GH@P|HEnEUb1^xwYOf~?uUy8fE+tLE4Gtl;cR*?4ve&*JgyciB_2#o4)8 z&v+L9ElZkZ$^x<@vioQ6%{FGA_&w%NkDQoXMQ-1`iFtu}$8)Ki^EoSWKIbgRU66P0 zuO=TTEG`T#dS94d&?ocL+&| z_!%)$Lil8{k#Mkekzs*uia~3M^Gswm_|%1F#w|_mpL`|GH>}cIMJ2fU7#LNd;_(_2qG&^NF}?1$7T=_4}YdR6tx=&`!<)7H_6w?c3b^!(75RevoRk(>J~ z_2=WPLwU{0l9YBWY*`Iyv4{LVJQ=ashv=Wz^esP2bkR^;gOz_P7?_9V9WA;mYp)(^9)u!-he65FTtZ;- zutYZcfTYgH#T8>Yt{&F-rXBiNU3KFD-mMokv1Y6N8*~i!;Rbjifv+RP2>~tGmUq*F z(`KhuC$Ea#7`ob5%KbnAXQRoWkJSCt1vNdh^?`kvT=B!ezhOJ0K1Uyn3J=!>HTT&9 z?8P;%u9hIf9Br3|{q^k{#%Yi0ubLw4N8AsP>BMom3)dICC0HQ5EQ}Xcfw#Er^cGy| z!5uM{BEz)CP8y^^sx35_tj#<-$zbrbc)oY8*BfCSTaKqdH>}=9pT?t_f3>gliDuNU zaUX*J@LuI7IMb5?4dGdQChtYQhrO}Y#2V@FNoXJ zROSbJlczxMxnyoIyNtO=Tc~N2ojgtcLrO>oQAgN`7UVvXBo9(TdIkNO&ZWQ7C+HD0 zN4=pkd3{TvqN!GVGHDz2lM3aP&_l0h>X;U6I!iO#_-_9M6;5u)^U-n0NLb}TJs02u z$bGaFv*BvuI_XPw;$NYW{FmqKYT_u-mdL{g;~%gfY#T}<`G^DAhaSe>;W{FlRFbX9 z8~m>L&0};$InG!wnAe&1nVy;RtQQ>j+^^u17(j~YOr{Gvoh{|-q)-aQ*P;(R?_Ie4 zo)t59HP0|Fwv4cqIUx4}M1}j(yI48b5xBy2WxLTY2|3#2iF7L+o$Nz+7QfAQ#lG5E z;C=$X!A_9?Q^Ee`vbhs%FS-(c0w=jF)_JCu#<>RE@TqBtrKf$6E77wALD7Af0Lw)j z9;y4K^SJ$(^?{jax@){+@H5!;{}_fEe>QC~kG8(GO|d7~F>AQR*VM_#>gD=JhOte1 z%%82>?0X!u9d6qw%M{~9ZC>44<^4*VVqjIznsjxfwyi$N_}pkQxOK2*ocd}_^Qvd^ zEwY)i>GFETdY+PxQKl)UR0mcaQ3&LJE9BB?Jd2+$y(g`gDx~YBN6M4SHkQ0C>Qp$o zpe0Y1N(#FdpD)QTeO%VAe0F)8@=s;qWwUs;*uVIB(UzjMMGuO)6vvj#D;1QR zq!t;XxLft3I!?L2I=rfm(o>rU$Ia2PsQ1a zF7mW0sOGKOstMIK>PGQC!Tb8TDt+}|g+X>#Hcc^6iK`Fl2Uug=Bar{F*Vsekn)`wE zpuUs(Zq+B*RN2hR%c>;3$vzjqAt>=r3Y!|$Ho7$8Y{+=u65t9pz|qWbs;)@kDV<&* z%H8%m_4llt+XZInH5Jn&LAHXM0wN;z#4e04kFkf2@bzUsd*<4QS$EpEdj3$E;_Jak z^u6R6so^cFn}^143O(b!mWJFSvv1=Sb?>^*>M@O*&Bve^X0eYWtWVOF*84lR?TPfM z?_1NmZTI~2)2Tr*W08 za=gPw*R#f7_M&t|$;;9k6-mlsO+Tv%%@x3bo~X#=u$G5f2e*0AYFhJgv0FoCig6;` znQDOQ%vA;QGYV9BSo7I(9epC4E2&Fd-u8C41AV*)qz_ooH@EwO^lvFsqU-(6FameJ zVP)Oa%4rqVQmuS_ZGo=A(L_G-8ZK!UyFZz1F*qfr*@C#3@KynpqHGo?4xxi#2eb(~ z3?+HGz>#Pjeu3@-KJt1J&?f9#Oic2<)UU0*+Z}7iwUM^cH@^_yE&>hsB=TXlp?U5O z&T>bAO9o5Hm4bVIpF*$4q$l=GZb%xEAdXoORveHoE@2Pir#v3#Px~L6-InV3#}(^Y zh?Wy=nb|-$;XCmM?+o7#ekc4U`_1xw?j0|_3oc_y@aC|W%VkUEIqeeLQ|BMJJJm;k z`*;V<2}uoE99ZfzO1PTI!CX*Z=OBByeYr#9GI~CtFg}~CAs>=$$@|25J|TIFbW{77 zaBdrr$vdSdz=ME-&86RwcD_erFcrRwJVsw)&j4-s{wI=W@mWH%AQwChtmT%mw-}7i z>Gq-{=wLpDIfs5iNAlfz1bd#v+5Ws2(4I4}TUmnH$e8Fgw1ECZU85dQDykR#k)Fc% zvVYjsTrKC|UUA-B2wP8Y<#Vk6@x&mLC-DOG5IP5&iZ3Mkk}h&Ob&luwTX_~APBoG5 z$-{gFj1b2N9G{1O#!|2>^ct#1&+&cVJ>mpePR=1)5S_4ccobCVd}61pjKyeqZ0%v+ z?u>z|;DcB#QNri35_xx5%(C=iY9e7n$H6!FMA91@VHs&TWy!LBwRdwxds?Dx2sahS zZs4?hO+Ap^MGqtYV%?Be&{0>tLuTJ@FR^Di#<-?I#qcq#EBS^#%&S5*#orocb z!*$*E+tl4S*}xgRO*)I8BhdZA^8_)V!}zm4f|Po4+~1tJcB^%WrO0%$>5|cEcx5Ox z%rXvbT4H)+&bF+w9`=Y8Hno0^wm@gnf7CD51!&XjeN+L;U6sG(RWhUOqgTSZk?DrU;D zigIa!G@s8FNqF5nDBUQHkj^geQC3wlvzRCp7G5j(RxrD8e9`pcNhKkrr%OMTJ}q5Q z>R)R;j4!U!7Amy>f<}lGc~q zF5Oi+y{xlzgY28)Wfh=2t{kcyP<^fPqr9ME63^o2Nz-L1l?Rn_)&6=zLsP?p`T=!A zYf`EP%3D_SmujTXn|9r)_E=kB=)p%-?pDMoobv__pz!$_OxQOJg53qy~W5m z>u?pY*!#8ru)ux+i+$D!e5q<^n`J@ctJWg8RVgwk@hFV zFwvTTGm?#A&m_YFCW{)$`)-+Kc2i+fhAq?6h2AMH4jdDn8NDc`XOvYU_l*X=A>XYN zblSQfN^x~|bzjv=?K|@a&viD(w=sN0k|Awc$DFQUMu)E3)2F7DB~A%D?nUGER$mQK zIjk(X@Y&za`Gbo-m&>Zw)&Deo@`19Q%AMNzwiEa| zai7qsi4W7_I&SPbuN&66puJDaN%8F@r05l%WAko|tr;g1mmMy_OZ75kEumlUl2Qio z@Su6&Fkb`qh!jh-zMnxk(aj@tY_v=?b!#GxBbt0nEzC8R4ErKiCftWO$7YBse3OE! z!%jqrW8JY}?9QmoVf}()efohxWSFPcHq<0FY%+9hdSiLv^hLdx5uy^mZNb?RqeKzh zCt!oO4Af8#WV5TrI^KjDl=^agw&75d-CSWKoiUzB^d~N$5c(`D-7TKQuWOuYFqj`Y9Y_it0Ro~+qEZ3QGQ>7G#recCscE$#!H{lTZ#rUq z>Nx1W;<*F=f(OBeJrD$VZhJKFakM-BlK4or;PaaS zbz&^FlTKthF<J7PsXp6^UlhJDA5%L1DAOm<#J_0jf+i-x`L=+MN(vMGNZX_D< zR(u-iH_yy}@N|4UvK)De#Gvodg;)!I?%_4>I4env{7D9q2!06@pi5vYbl3gK)zj6< z_1<;gEr*if5lAxnAF4ph(4XjMG#`b~w%8PGF4h(+L=(_C$UgW9pDNhLJ9!m){-YF$8`L zb$6NUKdfFB&QxYvY1UZkZPT1SP$9eodrFL>#?sqp9d(y9@OAK6xF;0j>g*`9h49B$ z8)5(9G`d&ALD*g54b?!0GehaKWHUSrx$AD}Fj;n(7B+2bDm8)DGxk{5ILPQxz+uQo zSi|$8(R|)B)6s&@FNv(_mNjOp>6Yn^$zWP*j0a!-V+%G18sfA!)mZKInwK@rRbc&Itn@m(WdNa=w3Utj>elHNH|A+7>!G@3s*60k za;nzX=V(_M!5hQ3MIMNFDGpTKwI&h(W@(fs&}%$)#x}>BqaOGWKL_ z>f+O3e#^>ux#Y8W60y?$qA{RWFP|a3P(HrmVddPqg?gtg7oJ9LVyujodW_9+x*w*LdNMHy}GyTa>O~nc(UJvU?!Z7*_IgBJSzokxhr)@i+_`D#G1nI1SR+sgWmL8Y#36-=Yu{I zeb{fpi@uA4Z-?KBcEzrZYm9joIV*HRV7kvlp@SVvEyg#Yn~<@*Kd(jy;2hCF*%_E~ zf+fOZ;+EcreGd4F{2LCTM5!+VF_*h>sU7ttY1A!A}=fEJ*dXCh9X zvn=AdQY;(FtfGhT3C;_QnOz2`!6>0#I7rk_un93sUWmKsGrqO<7Ze7bZGX~x@OSCJL)3(r>17f&X96G_A>@hfBx z`V@1H?a8zFHJq9CWy|U5)Gs0w---fAp2rPcfPO>&dK%!X=zsWg@;!Z&r8ydy3|avj zx12pkza{_Rf!IN04xHur>KO!2M82b&@Hyl}x))o(A3@8?nUlo_Y!v+w9(^*tVV}m-LPV$kEhY;Yg=MkWEiL$*0_^TmoGHFG`F@- zb65Kgdy7KZCqezr~lG8QQJ|ow_$d}r3Qf} zQ}ax7N)xG>+AxVv9rdc4qn< z&VC2VLf;Z~q>{kU>(EqtE7LBWzQLgWsBW)WYItNDjkIB9VwJxxxK>gn`4arwf3lZ? zljBd__bnRTS+%Enqr9v1dRbW+C*4*lsr#r$9q$QJct2ooXjsIj@a>XS0o}X~at8?v zu7#$2`C+?03 z32W!yU(lRb>5`jT=(aU5&d42F;PSS$=Y>UTf%MKl<1jXxSUF#1Q>grK`VBZXJk z7L)~7@GQO#+mFxYd1@JTpXma87n;4Z1MW(aBjFe<-ji6Jw47Jk+*n0qx6qWpI`1q2 z!UT{DuwJMQT|@L^`~(BN#{@KmoDcVo!lP27Zid%|3<${d287|9oEl4<#y;}N#vlyB zTJXJPH2srV&4q%G1uaDf#b3PcdUx{~=VS2Jd-W3630%CNX~mx*?K}?m1gJlJ0Q*ZV z0>t7@zL^1;LAQdg2Dp6^L`HTUnS>?sDH{chA@8s=#C%FkYnciBG>s4Ym}l`<_%51a z#eff=kMAewCddK3z(}ASw}`Fc)k(%|VGnasAVaW0I8by`bdsNE-6VV@P=F$E0+7Qk z=K64*xG6k~&*22TQl1CufM{?6xC^`j-UiQsE5Np(4A=w&0&loQ|DU}~;s$W{xG3N| zFbibCLp+ObC2S+a1-k|LpdCPXmvlbQ;;%9nnO6+QEMVnqKkgD&&9itB&*B-L#)ko& zfLXv+p2aT&qWL+WBCQyG~0Lsk>L2_ODeOxzDBIH$S1FykZEC93xGXy3bhFF?2f`pj6&+NZN+#UtA6;eSm&sZc9YvBEq zqx}A{ocf1+g(K*EBn95?nc;cuSqu+Anxk6Y^Eil&$8z{-gbv6SnDQt+zVHfI5BKA9 zxvi0}a4fvVqk9IV4+`~`IhLb0V zVZ=Nlk2p$hrVi12n4aueb`|@Jxld1^C<4MW@r(EhqJ}J@W4SY+T=-CY$Sd9JlW49W zleVZbb**Fp|Wrfa?o?z zy~8!r)!W_QGZLLhcH}Ze_k5FrVkJvM{X%Did=D)0tMDEpJ|?UZY!glv$N6mc&kf3y zObiPO{~ER^v}?%fz(IbPSG}+U*n+e3EWQnUntKkO5@Ftd{XYe74XcQ}9`iBICt+N| z=J?IAhocI@4hGBoY~mR3Jl%kIL2tw9@L#wWx)zV2XeJ+s7Jd+I6sL%7LM_;ZYf0fNUoSor&>B3?PM~j- z2YD8Mig-+}^VM5gd&GZ*|AHJl zk$z9i#`YlX;G>?Gp8w$8sE8n_C{7DD7kv}&^4jcmf?v59yv#nL5d12d3vc$kg-${` zsK6scE~5i+AM!IbmU+*XaZi9Ga0b`|H1O%8_1sk6*V|0}CcN?CXbyaa?{_D8Zo%)- z9mE=XH1`8MBHSX{D4Ht#2fWT6rJnJ`1cOh&5DcQLF$5n%j;G92DjmqDE%#CLcpmRX zL%c%G;x+(rU~}*~aFOfHYWPINPd*XRk-W!W)p>MR_A%E4RDcTw#|5hdeuAU_pV3$H z*{D!X#eU#t;{W4${A)hR)WEa&5MCowxHkM`d`GT3H8 zES=0VtzXn$swY)WPUUOBp@bIyiPz!72m@akhVco5KGaL{4B^JK$Z=1Sn{SZsO+?hVv7i)8M`CBF9AAT1%{XxoLq3GPSi3)-H}h*D~HsK=|KF=t`2r zUc3>R38g#yEz^vfb*Ht(8XxV5#=-iV#sqVB>u=j}`&qlyR%o4O`D7xEoed*(E2|yT(?HeYDRToa%q-f_N5xt#+>JRb6`hv4(}3jv8hC zj5?i?QcSLxS+=*tx8!L_dRbd(wCs-j7~hqb$_L0orPoUP|F5L;fNCOp-~Y@c5JK-A z!2*a~6zsk0+FccUTf45SuKLwob=R(IcWrCK-q+p*q)2Ze1PFwLkluS{GVTBV_J8h4 zm}D+9lW@-5d*9FVJd_VE^)0zmY%hLLvZvHuikI#v{a;CDv9ai5p|D^g_~L&oXeiiT z7+kcWXkn4GP*rd*f6zBit}$nEPWPO3In6nLRY|&pb!o*>5ZI#}#xflopOCnq9;x+FxidI9{;1;7h^Q!ktBLzmvuO zrA?*$vS+1FOF9*=D5@?f$S=z06mI|ivUFADqnh-(=R%8+FGK{Usy*dFCC9)QZ!JnK zoln6TXrkTHY;qfA5ntud!4rywFCQ_*5J3QSh9I%MsPV zGkiGAGW#iAqH=ZnW#tO}S9=80mwzbC8h0WoG$}rAZYb*=Ku$NGRIG1aDcn?31eL}c z4GW}^+Wig=ni5FGZcl0N{Wx>P;G)600h+#!t{DmUf-H!~THWptg;o?79M9?TmB{t_ zUQt!scu9UxFSn)PZ$Uw(a?CWIXty>Vt(`>PSJByWm8oiDglmDL=tjdMTd z?h1Yxb3AcQ$G(Z#F#|(H-bv&q(@FW*24m%h;?D)*{2PVAr3-2T#iy0MZLgU_zR3}E z!s{->yLRq+u*>a)9^u{j3AD>HO=%J<1UZ$m^81x<1m)ttltXNLkf}kJ6Lxkx(?4~{ z%;EZB(+6+tmz8FWuL}%C)YjLE;HJgZ3rl(yrG6*NrqsD5sk&5m6=y}zOIX>tN9yyg z`qaeaZAsdg=8*3`$!wbIkmB6cDA0^7hj%L(GVMK`m9sbqYg z{ko}K`=>Hlo*?7Mc=ArFRffBE-195?&1*gHmiIc&ugpsPo;5@NRN2zDUzXEmRP5G{ zGR52OII5iIo%bE{>|wS6R@QRBDzS+j>Fx`}QSv?|qP(dko)!28SA)aX5#lIubayG- zHAF7Cjjm!I{YQa<*$ieLeT0&dGst$&U!F0ZP>+_70*mkFIpV>_EnYvwaH8!}7@(>M%u8yJ$I`%JgC!^k(`pi~|Ib1%9ba=Lpa?GWKl8 z-_G|gxtqa_Fq;e{`;!SUnjV80Q8V!ykw$#NhvE<1T=!;|4fKp==Xuv9cM0w$iakQO zqTlcVuA}x37MXFA{uk{A%`r`>)~YWxH3FReFP^vjH>ruw^^Lh!NC3OdGKH{ZI|@q4p8CTrcb<%S%(daVW6(qlTBp zb7q&d)uD8M@^pn7N-6kOH!>XRB0k3gYeK zA8MQRXN`wVQ%#kIK%JLrWZR~eevNzU3E^tdo~9j=AKT_BGE|RMmCBO#*RoK_>?U*l zvAPX{)q+iRjPQskzhOpWV&kX=XZ>2CUhuNEq-GYd_$4)WYZNt=HLGj3RC`s;thiVf zQ#!V!Ye_+gqI7!slZuAQH&y+r7gTqtepcmOHM8=c3a0#*a$ofyBvWDo!jSZgq0AZlu=bHD`_Ug!5T98yfrh(IxDb5xT5sMm&M864_ z3dYyos$E>SPSj6qm&8C-Lf)R)zNqcD){f2h8m84oDf z=CQ&Pm2`1Q!P0M;-)B z?5n6$?@7TYV?sI}Pj)Bo@3brKYe=#8zvO7^@0#nd3Lennki3!ebp!1Zx+nirIF&fM zTR^{qgA#@bhFu?$li96zUYCy1NtUbn80Ly1TBysY4=*<0dRVX6Ka)JkhP2ckzxEJ!JD9q^Q*8XT@YVjQ z+~ZWZ>!3BtEHNS0ZqBJBfo1p&4MSsp>M%X&OQK)GgJ^f?G;rR}VUqAs_B?a8@vDI_ zj5Y1D%&=#>_?~t2DP%RL$xFza!XNB=!gqr2B>q00o|}b6)4Oqjz0h20@YQ>CCk;+> zcjpW86SjgsF>rG*FSujCW*-fP(CghdZ9(Rq#xBOArU+}CL+*+sHh9FITcCRW2N+O2 z@FXAV2HlH2h3rKe&^_oTTHMZchz)2S8{^YvqGP-WN@8a)3Wnbx;0jh03_gzPvE!%w9DAzl6 z2Hh9^BI8~2Bpc89uN(Df$=OidUCofRoSHzU5c#e|$2x1R>8L@i8>{ZUHD%S}>d2af;EUf3uO?M@uKHLprd(c1lw2&yFIiu@vTS|%ii(8F zQ~h};sA&R@kM z&NzL!{7B1@MpmS3xYVp~o2&cTv4}nHdpjZ_>G!nUKDPd3hPhu@@0`@I4!c8ddGT?c zew1{1eSM{*k$5lp zFyqVf{7vPlB1>DTkw^6Byz=W3dMx6Ph&iFX{2iR@p8FQH>YJpszOY(Yo?hlx9$eL{ zE=;^l9%}f(bpQ$T^$lgC3gW^N%yFFPnIY$WCNih(tF=R9ryD;A=2j1_z9Qf>^^x~7 zt|jJsM~5XPj!E0s=T84A8E?{O^xTkqEpBdb7jB)K*3WA@*Ql=*RvxNIuga?1-~3KF z!FrfF_bFGaDP5Rluj@FS!yV}N zJg6z8I^=ec*)N>85#2_fbVgY&=;Jj_%4(QHG$@~_<8;2p-j-SR@h%PCl?mFL>z?uV237h=7q*+YQqhap<=J#M9Q zilfGM+WN?nVac@QS>9Q7woJ!DXPWCSu=q;X7hv(FE|;sfd!BodJJtQ!72%rd+~T-y zH~z=si)@?iS&s3}2Jp_zbW-+CHi!A0@q@mXuAkPZ`9Zs0*Uzx;KlKpD<$?^lW1eu* z26NUb9Cy_?cG@B=AB?y38ZDuz(d^UGIv?X9^B^1UIOi@U){%3m9pEcC?)id0a4mC0 z*{tSh(+8MiMjJ{E5hkfQ5VAxDyQ_#&(hP|zeW-OFvs>&~ZZ#NR>XvHetB;N6d7^!& zU83Qrg4+{h^CX>`FEuqasv7@oY7j@Z_(?`dKDL~0=7={pPHVU-IwX>ceg}Q#mBz1) zM;c`fa?zFg453i)uvS*HA2OLzYK67e1QY7=>U@Ri!V$pYHww=Qzkn}Z0`B+)LQ~!G zy5H+Cp?Cci(f-CgK-^6dy7jPhuJqT|Fv-H^$4z^{7oXiYLVU2r(>ke5E58i+N;Bj) zW$#)AEi;=>iF3q3EstB7wr5IjEu|X*y4x{oNBccliKM96Cf?s%Ai2Z;?p zfv=QE#x*>tU0k^nQl(6#Xl1Kldb3Q~Y~4)f^2&mqhwqD=8!<2Bh~Fk|Z+f!(7}SZs zIsYPOL&}IXtWWHM4zfg5hxoYT;f&uTY#$zKxuET>LaxQB3TQrIAk2;yzeAKW6#XU!Yw3XyNsk>Vi*OTH<-sSD4S{UKPb-k zd=d0BFP=H?SgZGGM_QhXZr5$8%c)-pxh7W4NZV4X$oqY8e9X+m?wv1odEI$z(!|*Q zq5FM!4B}AhR<<`vu8K3npIegU!*oA7ve~_UOk{RPSvPKaUFPY5yaC_SBYGU{d@N>p z;3LfF;u}KSSF{Xhd?XSybZj}-KEQYycX3n!mWX3<7ds3~+?nt?W>5G}fn$A&u`vvn zLiilqJbworfh3kNrKoN8mHw z67)H_-QCA2bzE^V#6>2NOY;kZ+~I=gz_=xGZ)4U*dWX9FMLY(3#Q2ay@GRFR=X9sk zX>zT=V_@zVz{Da!m=Wseqj*<*&hWi`P5i$6ue>#0y|5_^K~y?-+QwM2&G#*x?YOIu zB#=?w-+i?K(}E5MKJ{C}8;3>H&+shgB>NGlkPdOocje>V$S(9?W;d|-{WJ+IJ{nZ& zG}8m=k1Ej=Oo2{8CnLRBjN#Es!CUw*^@!%Odl3Rn<(N2QxjnfbIVdL%i$UX&Om-g= z3@pA5+?8p}R!H}ZWw*26*>E6C2a)UGjQ6I20s9j)MtkAkcvZ|XYL3Ec0H5I~pFZ-I3^rE_Qv z{s;1yCFGJQfW?>D?$|w!FQ6V1dTObMOfayw zS*R4LXD2aRspFmpxY4!IIURcE*=IRcJH@VZ_&(20YCa=ns}Kr2S6r4)U-#(Tlbk}E z#_|b#@&1-G)?4;ACyHNznJ@||QrkRV2@&4xt^+^Z7sm_x4cjeixn-)QlV!1`)pEf) z$>yJ7G_8?glqyGU&wl_8aD6eVQginbJN|eq4?zE~|9f zpNvN=n`}401#!*PTVJC#D&EM~v}t5L+k)le+K($PE8|og)ep)@#Wnfxws_fZ;ETT@ z^^xrX7Jo<12&$vBmWj=`#k0kW#D(IYniE>8T806O|5@?_uy}uHDUwO>dXHp> zWT|9~WWMB;WOwU*>6kW`{IMcLWd;^6RhgCN6(0GtHdfkCI$SzL7A;?`Xi}AHK4|Y~ zPisn5ZHmlxy6w-l(l)Eyqd2KvqO%!pm;%kcOg;u*ty;-zr)1q_*JT^!2bBl315IWd z;uaFEo)^R?*DxDpC|CDyet+ecy+w#TnB z{6xaCWKH*%eGc?%?zf@u&K{$Z`^MLYWO@JOIc>VvZWh~w?`kt@ee3)ixROi-sb6kq z@fFla`Ut3(D62$=%X7q7-SrAb@ui|WMSdl@6+7x2%}(Vr3-s`c3EUR`FnU|8I_6HK zGI%_H1`^~RV_KwoB;6+-(Qr?+ukmS1g?yy0$kt3oc)0_fM?8wVnK-fI<0NB3Ow8%f z%f469!+3*vv8GP`gLGi)CF!yDVNg>jqsQ?NhpRgHb=})r-~ZeIOXj?O-FkW@ABaOj za4)OpyhW*A)HYP|sX4D@wrsg-rm5IngeLiQ3S*-?#cSf{$B|LX!^{CAe9YK%#^R~P zi`{43a`zd0GY~@)Sx9e1+?+8!K><|A%E-*v#DsuEN#cyeg9!&>k4LtIl=<)Ft;O!s zwZtf3M}F>y#8G-Jc9nO}zjsJ^c*iI@3XA$F{A{q!uOsgrCS*Mcv;nLfl^Wwppu>=0)%_ZIgMH-!5W=PD3;92t*%VwZz2 zKAl~_{>hd>g2-&-3L-@kz%%+gdIc!=S#%|uik2gr5FYXnoa$X6l`a;z&pkE;`G%}V zeSjocuw+hmjt%<-`;0ar8gOT3F)~mHoTp!chJH08VMehxA=8cm*8l%~@li-RvIM;L z2jDpjxdKN##-uW8@WmrQwX+$DnFfS=39Df`K@wdv`N~sF41ip_iG+Z7?GL8J(6AUc=GVw3?%Krz|+w&w#4g+Ua zPsn|G0XeCgp*rCqFHkdSFJ>F_3-gT5pn7^L-KU%)dnvGZjZF&*-GOcz|J!p8eDPUi zKhGJw-Zj}73~W6Mv{u_3)1CcXI@d~I@e`n)VRLo@eHU(Tum?GQaTpz=fW>!mzHkIP z*4Rb1xxnIaYpiXPtr66;4fY9+^Nv!7+Cc-0@9CW4+~vIP{Q93Sz8rM6M(1Ei;o9b& zgO4COfsU6?dIN<^_Ut9Z_&D4NEPg1i#%qas&qFc;M&v+h8#rbILH#g=SWF0E961i3 z?KC}-xxg%AUcmS{h*SZ`{~5oD?;$)MGc}%lj}n~EUVnMVdSBwEVWZjAl!fSlPjdgy zU5BqGr3{BNffwhO7C1Dxdq{8y6_gP8kKbdTpS?O@Wz0qL1YQ7YzJ1p1mL-Wt>j23bS`uO{Mg5HJkqw-@K;zARqCCrPT96Kp$e^~#Z zJ-(N{z9CboJ9x0`l%ubs$*~Z$aTCe@j1?KmDdleWit?)ByhBk|Pd>#DIltTPSk{{- zm^)hR)(Z}a`!m_Z`f)Y97{46>I$-gmgAxM=`oH6gyc;*X`l zuSejQ;4h(3;o0Hy!>5K_4Otr`^-uDh$-BVy!4#1D7D3;qny8m_2&+Ia&SbB3ygB?Q zzFYk+`(^ko^&QJM@~(SN^BT%s&1nYD_9|#wv0GRj){S$4(~T?Re)hWS{Wou`PcMEk zKf!mRZ>nzte-i(+&nsSz_gAlCZY!q?++TjgmSS(P$s8V60A)kfpIV$oVgmV3YJW0J=%n}qY6|5S0O{2(OR?)EeDlV zJ-n+#wa}X3RW5vA_s~0_m%0s#sTb%cxb6ygyhZ;(cfj4d4+^dUNGTx@KeQv$~te)|D5r|aQcOhj2ki&Q}?Ls}6Jr1y`7{(r-M395(wW;kyFdKcY^ z&IOl$0AvZsAUmZEF(ZMX)0%_shH>H>T$2orpNC#UH=_MP=T(6`K@P*b`xx>V@&;KX z4gMBcFq&k6&TH_0$8o|jDv%u5e-}9q8nBbdS>z&e19^nJLOw$K0zaQ4w~=cwbH58) zwQ!ZeaJAjgP#EDpAbXI}@P8Rppz`|8w!`c_4VjPZhk5>E_>EJ@a%3D5i*P`zs)W5} z*dKsIB1uRhJaZ5;__|8id}zgN6C`4pp;=iiYzf#RU|7$f&isIV#J**7*>bj?mBJn! z9LWs%*iKNDk)SAp0R+Z0H#|tz9|=c#BEw+(T!L&s)*~B1W%eU72^om=gRyQHG7DkZ F{|B~-GC%+T literal 0 HcmV?d00001 diff --git a/sao/sounds/success.wav b/sao/sounds/success.wav new file mode 100644 index 0000000000000000000000000000000000000000..889bc42e2adbd46fdc17727e4366a4a24a1f5ecb GIT binary patch literal 47812 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 z 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 O_5bJf@85pY|NlSgfYR>( literal 0 HcmV?d00001 diff --git a/sao/src/common.js b/sao/src/common.js index 0d7160c294..57006fac17 100644 --- a/sao/src/common.js +++ b/sao/src/common.js @@ -4344,4 +4344,10 @@ return window.URL.createObjectURL(blob); }; + Sao.common.play_sound = function(sound='success') { + var snd = new Audio('sounds/' + sound + '.wav'); + snd.volume = localStorage.getItem('sao_sound_volume') || 0.5; + snd.play(); + }; + }()); diff --git a/sao/src/model.js b/sao/src/model.js index fa5f8fa64a..53987d96d9 100644 --- a/sao/src/model.js +++ b/sao/src/model.js @@ -1227,6 +1227,17 @@ } this.autocompletion[fieldname] = result; }, + on_scan_code: function(code, depends) { + depends = this.expr_eval(depends); + var values = this._get_on_change_args(depends); + return this.model.execute( + 'on_scan_code', [values, code], this.get_context(), + true, false).then((changes) => { + this.set_on_change(changes); + this.set_modified(); + return !jQuery.isEmptyObject(changes); + }); + }, reset: function(value) { this.cancel(); this.set(value, true); diff --git a/sao/src/sao.less b/sao/src/sao.less index ef66fdc91c..d6bde9992f 100644 --- a/sao/src/sao.less +++ b/sao/src/sao.less @@ -269,6 +269,8 @@ html.accesskey { } .tab-form, .tab-board { + padding-bottom: 20px; + nav.toolbar { position: -webkit-sticky; position: sticky; @@ -1062,6 +1064,20 @@ input.column-boolean { } } +.btn-code-scanner { + bottom: 0; + margin: 20px; + position: fixed; + right: 0; + text-align: right; + z-index: 1030; +} + +.modal .btn-code-scanner { + margin: 5px; + position: sticky; +} + .infobar { line-height: @line-height-computed; position: fixed; diff --git a/sao/src/view/form.js b/sao/src/view/form.js index 6cdad76199..abeb01e2b1 100644 --- a/sao/src/view/form.js +++ b/sao/src/view/form.js @@ -290,6 +290,22 @@ function eval_pyson(value){ if (this.attributes.creatable) { this.creatable = Boolean(parseInt(this.attributes.creatable, 10)); } + if (this.attributes.scan_code) { + this.scan_code_btn = new Sao.common.Button({ + 'string': Sao.i18n.gettext("Scan"), + 'icon': 'tryton-barcode-scanner', + 'states': this.attributes.scan_code_states, + }, null, 'lg', 'btn-primary'); + this.scan_code_btn.el.click(() => { + new Sao.Window.CodeScanner( + this.on_scan_code.bind(this), + this.attributes.scan_code == 'loop'); + }); + this.el.append(jQuery('
', { + 'class': 'btn-code-scanner', + }).append(this.scan_code_btn.el)); + this.state_widgets.push(this.scan_code_btn); + } }, get_fields: function() { return Object.keys(this.widgets); @@ -309,6 +325,9 @@ function eval_pyson(value){ var field; var depends; var promesses = []; + if (this.scan_code_btn) { + this.scan_code_btn.el.toggle(Boolean(record)); + } if (record) { // Force to set fields in record // Get first the lazy one from the view to reduce number of requests @@ -392,6 +411,17 @@ function eval_pyson(value){ button.el.prop('disabled', true); // state will be reset at display this.screen.button(button.attributes); }, + on_scan_code: function(code) { + var record = this.record; + if (record) { + return record.on_scan_code( + code, this.attributes.scan_code_depends || []).done(() => { + this.el.parents('form').submit(); + }); + } else { + return jQuery.when(); + } + }, get selected_records() { if (this.record) { return [this.record]; diff --git a/sao/src/window.js b/sao/src/window.js index 642fbf7671..d7e1d81dbd 100644 --- a/sao/src/window.js +++ b/sao/src/window.js @@ -2577,4 +2577,137 @@ }, }); + Sao.Window.CodeScanner = Sao.class_(Object, { + init: function(callback, loop=false) { + this.callback = callback; + this.loop = loop; + this.submitting = false; + this.dialog = new Sao.Dialog( + Sao.i18n.gettext("Code Scanner"), 'code-scanner', 'md'); + this.el = this.dialog.modal; + this.input = jQuery('', { + 'type': 'text', + 'class': 'form-control input-sm mousetrap', + 'aria-label': Sao.i18n.gettext("Code"), + 'placeholder': Sao.i18n.gettext("Code"), + }).appendTo(jQuery('
', { + 'class': 'col-sm-12', + }).appendTo(this.dialog.body)); + + var sound_btn = jQuery('