From 34e9e45c89ff92039dc66d6d457e488b215ae48e Mon Sep 17 00:00:00 2001 From: Juan Ignacio Carreras Date: Fri, 13 Sep 2024 13:18:57 -0300 Subject: [PATCH 1/5] [IMP]stock_batch_picking_voucher:new module --- stock_batch_picking_voucher/README.rst | 65 +++++++++++ stock_batch_picking_voucher/__init__.py | 7 ++ stock_batch_picking_voucher/__manifest__.py | 50 +++++++++ .../controllers/__init__.py | 1 + .../controllers/main.py | 41 +++++++ .../models/__init__.py | 2 + .../models/stock_batch_picking.py | 44 ++++++++ .../models/stock_picking_voucher.py | 42 +++++++ .../report/batch_picking_preprinted.odt | Bin 0 -> 22047 bytes .../report/batch_picking_preprinted_data.xml | 16 +++ .../security/ir.model.access.csv | 5 + .../views/stock_batch_picking_views.xml | 45 ++++++++ .../views/stock_picking_views.xml | 22 ++++ .../wizards/__init__.py | 1 + .../stock_print_batch_stock_voucher.py | 105 ++++++++++++++++++ .../stock_print_batch_stock_voucher_views.xml | 48 ++++++++ 16 files changed, 494 insertions(+) create mode 100644 stock_batch_picking_voucher/README.rst create mode 100644 stock_batch_picking_voucher/__init__.py create mode 100644 stock_batch_picking_voucher/__manifest__.py create mode 100644 stock_batch_picking_voucher/controllers/__init__.py create mode 100644 stock_batch_picking_voucher/controllers/main.py create mode 100644 stock_batch_picking_voucher/models/__init__.py create mode 100644 stock_batch_picking_voucher/models/stock_batch_picking.py create mode 100644 stock_batch_picking_voucher/models/stock_picking_voucher.py create mode 100644 stock_batch_picking_voucher/report/batch_picking_preprinted.odt create mode 100644 stock_batch_picking_voucher/report/batch_picking_preprinted_data.xml create mode 100644 stock_batch_picking_voucher/security/ir.model.access.csv create mode 100644 stock_batch_picking_voucher/views/stock_batch_picking_views.xml create mode 100644 stock_batch_picking_voucher/views/stock_picking_views.xml create mode 100644 stock_batch_picking_voucher/wizards/__init__.py create mode 100644 stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py create mode 100644 stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml diff --git a/stock_batch_picking_voucher/README.rst b/stock_batch_picking_voucher/README.rst new file mode 100644 index 000000000..44be64e94 --- /dev/null +++ b/stock_batch_picking_voucher/README.rst @@ -0,0 +1,65 @@ +.. |company| replace:: ADHOC SA + +.. |company_logo| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-logo.png + :alt: ADHOC SA + :target: https://www.adhoc.com.ar + +.. |icon| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-icon.png + +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +==================================== +Pre-printed report in batch pickings +==================================== + +This module add the following features: +#. Add aeroo report to print Pre-printed from batch pickings + +Installation +============ + +To install this module, you need to: + +#. Only need to install the module + +Configuration +============= + +To configure this module, you need to: + +#. Nothing to configure + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: http://runbot.adhoc.com.ar/ + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* |company| |icon| + +Contributors +------------ + +Maintainer +---------- + +|company_logo| + +This module is maintained by the |company|. + +To contribute to this module, please visit https://www.adhoc.com.ar. diff --git a/stock_batch_picking_voucher/__init__.py b/stock_batch_picking_voucher/__init__.py new file mode 100644 index 000000000..0c0cc42f4 --- /dev/null +++ b/stock_batch_picking_voucher/__init__.py @@ -0,0 +1,7 @@ +############################################################################## +# For copyright and license notices, see __manifest__.py file in module root +# directory +############################################################################## +from . import models +from . import wizards +from . import controllers diff --git a/stock_batch_picking_voucher/__manifest__.py b/stock_batch_picking_voucher/__manifest__.py new file mode 100644 index 000000000..d197bcea6 --- /dev/null +++ b/stock_batch_picking_voucher/__manifest__.py @@ -0,0 +1,50 @@ +############################################################################## +# +# Copyright (C) 2015 ADHOC SA (http://www.adhoc.com.ar) +# All Rights Reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + 'name': 'Preprinted report in batch pickings', + 'version': "17.0.1.0.0", + 'category': 'Warehouse Management', + 'sequence': 14, + 'summary': '', + 'author': 'ADHOC SA', + 'website': 'www.adhoc.com.ar', + 'license': 'AGPL-3', + 'images': [ + ], + 'depends': [ + 'stock_batch_picking_ux', + 'report_aeroo', + 'l10n_latam_base', + 'delivery_ux' + ], + 'data': [ + 'security/ir.model.access.csv', + 'wizards/stock_print_batch_stock_voucher_views.xml', + 'report/batch_picking_preprinted_data.xml', + 'views/stock_batch_picking_views.xml', + 'views/stock_picking_views.xml', + + ], + 'demo': [ + ], + 'installable': True, + 'auto_install': True, + 'application': False, +} diff --git a/stock_batch_picking_voucher/controllers/__init__.py b/stock_batch_picking_voucher/controllers/__init__.py new file mode 100644 index 000000000..12a7e529b --- /dev/null +++ b/stock_batch_picking_voucher/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/stock_batch_picking_voucher/controllers/main.py b/stock_batch_picking_voucher/controllers/main.py new file mode 100644 index 000000000..aac99c918 --- /dev/null +++ b/stock_batch_picking_voucher/controllers/main.py @@ -0,0 +1,41 @@ +import io +import json +import urllib.parse + +from odoo.http import route, request +from odoo.addons.web.controllers import report +from PyPDF2 import PdfFileReader + + +class ReportController(report.ReportController): + + @route() + def report_download(self, data, context=None): + """This function is used by 'qwebactionmanager.js' in order to trigger + the download of a py3o/controller report. + :param data: a javascript array JSON.stringified containg report + internal url ([0]) and type [1] + :returns: Response with a filetoken cookie and an attachment header + """ + response = super().report_download(data, context) + #NTH detect if the binary is a PDF, no matter ifn it was generated by a QWeb or Aeroo + requestcontent = json.loads(data) + url, type = requestcontent[0], requestcontent[1] + if type != 'aeroo': + return response + json_string = json.loads(data)[0] + context_part = json_string.split('context=')[1] + decoded_context = urllib.parse.unquote(context_part) + context_dict = json.loads(decoded_context) + batch_id = context_dict.get('active_id') + batch = context_dict.get('batch') + book_id = request.env['stock.picking.batch'].browse(batch_id).book_id + if batch: + if batch_id: + pdf_response = response.response[0] + reader = PdfFileReader(io.BytesIO(pdf_response)) + number_pages = reader.getNumPages() + if not request.env['stock.picking.batch'].browse(batch_id).voucher_ids: + request.env['stock.picking.batch'].browse(batch_id).assign_numbers(number_pages, book_id) + + return response \ No newline at end of file diff --git a/stock_batch_picking_voucher/models/__init__.py b/stock_batch_picking_voucher/models/__init__.py new file mode 100644 index 000000000..b2a13b2ba --- /dev/null +++ b/stock_batch_picking_voucher/models/__init__.py @@ -0,0 +1,2 @@ +from . import stock_picking_voucher +from . import stock_batch_picking \ No newline at end of file diff --git a/stock_batch_picking_voucher/models/stock_batch_picking.py b/stock_batch_picking_voucher/models/stock_batch_picking.py new file mode 100644 index 000000000..82d04c5a2 --- /dev/null +++ b/stock_batch_picking_voucher/models/stock_batch_picking.py @@ -0,0 +1,44 @@ +############################################################################## +# For copyright and license notices, see __manifest__.py file in module root +# directory +############################################################################## +from odoo import fields, api, models, _ + +class StockPickingBatch(models.Model): + _inherit = 'stock.picking.batch' + + voucher_ids = fields.One2many( + 'stock.picking.voucher', + 'batch_id', + 'Remitos', + copy=False, + ) + + book_id = fields.Many2one( + 'stock.book', + 'Talonario', + copy=False, + ondelete='restrict', + check_company=True + ) + + def assign_numbers(self, estimated_number_of_pages, book): + self.ensure_one() + list_of_vouchers = [] + for page in range(estimated_number_of_pages): + list_of_vouchers.append({ + 'name': book.sequence_id.next_by_id(), + 'book_id': book.id, + 'batch_id' : self.id, + }) + self.env['stock.picking.voucher'].create(list_of_vouchers) + self.message_post(body=_( + 'Números de remitos asignados: %s') % (self.vouchers)) + self.write({'book_id': book.id}) + return { + 'type': 'ir.actions.act_window', + 'res_model': 'stock.picking.batch', + 'view_mode': 'form', + 'res_id': self.id, + 'target': 'current', + } \ No newline at end of file diff --git a/stock_batch_picking_voucher/models/stock_picking_voucher.py b/stock_batch_picking_voucher/models/stock_picking_voucher.py new file mode 100644 index 000000000..6922d0cac --- /dev/null +++ b/stock_batch_picking_voucher/models/stock_picking_voucher.py @@ -0,0 +1,42 @@ +############################################################################## +# For copyright and license notices, see __manifest__.py file in module root +# directory +############################################################################## +from odoo import fields, models, api, _ +from odoo.exceptions import ValidationError + + +class StockPickingVoucher(models.Model): + _inherit = 'stock.picking.voucher' + + batch_id = fields.Many2one( + 'stock.picking.batch', + 'Batch', + ondelete='cascade', + index=True, + ) + + picking_id = fields.Many2one( + 'stock.picking', + 'Picking', + ondelete='cascade', + required=False, + index=True, + ) + + @api.constrains('picking_id', 'batch_id') + def _check_picking_id_required(self): + for record in self: + if not record.batch_id and not record.picking_id: + raise ValidationError("Al crear un voucher debe estar ligado a una trasnferencia o lote de transferencias") + + @api.model + def create(self, vals): + if 'batch_id' in vals and vals['batch_id']: + vals['picking_id'] = False + return super(StockPickingVoucher, self).create(vals) + + def write(self, vals): + if 'batch_id' in vals and vals['batch_id']: + vals['picking_id'] = False + return super(StockPickingVoucher, self).write(vals) \ No newline at end of file diff --git a/stock_batch_picking_voucher/report/batch_picking_preprinted.odt b/stock_batch_picking_voucher/report/batch_picking_preprinted.odt new file mode 100644 index 0000000000000000000000000000000000000000..31d219ce12f8dcb2317061717da6767704b75aad GIT binary patch literal 22047 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 literal 0 HcmV?d00001 diff --git a/stock_batch_picking_voucher/report/batch_picking_preprinted_data.xml b/stock_batch_picking_voucher/report/batch_picking_preprinted_data.xml new file mode 100644 index 000000000..94fd2a0d5 --- /dev/null +++ b/stock_batch_picking_voucher/report/batch_picking_preprinted_data.xml @@ -0,0 +1,16 @@ + + + + Preprinted Voucher + stock.picking.batch + batch_picking_preprinted + aeroo + oo-odt + stock_batch_picking_voucher/report/batch_picking_preprinted.odt + + file + + report + + + diff --git a/stock_batch_picking_voucher/security/ir.model.access.csv b/stock_batch_picking_voucher/security/ir.model.access.csv new file mode 100644 index 000000000..aa0d6a2eb --- /dev/null +++ b/stock_batch_picking_voucher/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +stock_batch_picking_voucher.access_stock_print_batch_stock_voucher,access_stock_print_batch_stock_voucher,stock_batch_picking_voucher.model_stock_print_batch_stock_voucher,base.group_user,1,1,1,0 +stock_batch_picking_voucher.access_stock_voucher,access_stock_voucher,model_stock_picking_voucher,base.group_user,1,1,1,0 + + diff --git a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml new file mode 100644 index 000000000..1a5e0ea53 --- /dev/null +++ b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml @@ -0,0 +1,45 @@ + + + + stock.picking.batch.form + stock.picking.batch + + 99 + + + + + + + + + + + stock.picking.tree.inherited + stock.picking + + 99 + + + + + + + + + stock.picking.tree.inherited2 + stock.picking + + 99 + + + + + + + + + + diff --git a/stock_batch_picking_voucher/views/stock_picking_views.xml b/stock_batch_picking_voucher/views/stock_picking_views.xml new file mode 100644 index 000000000..e33bc6ef2 --- /dev/null +++ b/stock_batch_picking_voucher/views/stock_picking_views.xml @@ -0,0 +1,22 @@ + + + stock.picking.form.exception + stock.picking + 99 + + + + + + + + batch_id + + + batch_id + + + + \ No newline at end of file diff --git a/stock_batch_picking_voucher/wizards/__init__.py b/stock_batch_picking_voucher/wizards/__init__.py new file mode 100644 index 000000000..4329a8de7 --- /dev/null +++ b/stock_batch_picking_voucher/wizards/__init__.py @@ -0,0 +1 @@ +from . import stock_print_batch_stock_voucher diff --git a/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py b/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py new file mode 100644 index 000000000..25e3ef58c --- /dev/null +++ b/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py @@ -0,0 +1,105 @@ +############################################################################## +# For copyright and license notices, see __manifest__.py file in module root +# directory +############################################################################## +from odoo import fields, api, models, _ + + +class StockPrintStockVoucher(models.TransientModel): + _name = 'stock.print_batch_stock_voucher' + _description = "Print batch Stock Voucher" + + + @api.model + def _get_pickings(self): + # if we came, for eg, from a sale order, active_id would be the + # self._context.get('active_id')) + picking_ids = self.env[self._context.get('active_model')].browse(int(self._context.get('active_id'))).picking_ids + return picking_ids + + @api.model + def _get_book(self): + picking = self._get_pickings() + return picking.book_id or self.env['stock.book'].search([('company_id', '=', picking.company_id.id)], limit=1) + + picking_ids = fields.Many2many( + 'stock.picking', + default= lambda self: self._get_pickings(), + required=True, + ) + + printed = fields.Boolean( + ) + with_vouchers = fields.Boolean( + compute='_compute_with_vouchers', + ) + book_id = fields.Many2one( + 'stock.book', + 'Book', + default=lambda self: self._get_book(), + ) + next_voucher_number = fields.Integer( + 'Next Voucher Number', + related='book_id.sequence_id.number_next_actual', + ) + estimated_number_of_pages = fields.Integer( + 'Number of Pages', + ) + lines_per_voucher = fields.Integer( + 'Lines Per Voucher', + related='book_id.lines_per_voucher', + ) + + @api.depends('picking_ids', 'picking_ids.voucher_ids') + def _compute_with_vouchers(self): + for rec in self: + rec.with_vouchers = bool(self.picking_ids[:1].batch_id.voucher_ids) + + @api.onchange('picking_ids') + def set_book_domain(self): + picking = self._get_pickings() + if not picking: + return {} + else: + return {'domain': {'book_id': [('company_id', '=', picking.company_id.id)]}} + + @api.onchange('book_id', 'picking_ids') + def get_estimated_number_of_pages(self): + lines_per_voucher = self.lines_per_voucher + if lines_per_voucher == 0: + self.estimated_number_of_pages = 1 + return + + operations = len(self.picking_ids.move_line_ids) + estimated_number_of_pages = int( + -(-float(operations) // float(lines_per_voucher))) + self.estimated_number_of_pages = estimated_number_of_pages + + def do_print_voucher(self): + self.printed = True + if self.book_id: + self.picking_ids[:1].batch_id.book_id = self.book_id.id + return self.do_print_batch_vouchers(self.picking_ids[:1].batch_id) + + def do_print_and_assign(self): + # We override the method to avoid assignation + if self.book_id.lines_per_voucher != 0: + return { + 'actions': [ + {'type': 'ir.actions.act_window_close'}, + self.with_context(batch=True).do_print_voucher(), + ], + 'type': 'ir.actions.act_multi' + } + self.picking_ids[:1].batch_id.assign_numbers(1,self.book_id) + return self.do_print_batch_vouchers(self.picking_ids[:1].batch_id) + + def do_print_batch_vouchers(self, batch): + '''This function prints the voucher''' + return self.env.ref('stock_batch_picking_voucher.batch_picking_preprinted').report_action(batch) + + def do_clean(self): + batch = self.picking_ids[:1].batch_id + batch.voucher_ids.unlink() + batch.book_id = False + batch.message_post(body=_('The assigned voucher were deleted')) diff --git a/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml b/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml new file mode 100644 index 000000000..16130e238 --- /dev/null +++ b/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml @@ -0,0 +1,48 @@ + + + + print_stock_picking.form + stock.print_batch_stock_voucher + +
+
+

THE VOUCHER IT'S PRINTED AND ASSIGNED.

+
+ + + + + + + + + + + +
+ +
+
+
+
+ + + Print Stock batch Remits + stock.print_batch_stock_voucher + form + + new + + +
From 1c117e3e66f9204f48b1e7af2c735283de1d7ef1 Mon Sep 17 00:00:00 2001 From: Juan Ignacio Carreras Date: Wed, 11 Sep 2024 15:43:44 -0300 Subject: [PATCH 2/5] [FIX]stock_batch_picking_ux: fixes --- stock_batch_picking_ux/__manifest__.py | 1 - .../migrations/13.0.1.2.0/mig_data.xml | 8 -------- .../migrations/13.0.1.2.0/post-migration.py | 7 ------- .../models/stock_batch_picking.py | 5 ++--- stock_batch_picking_ux/models/stock_picking.py | 12 ++++++------ .../report/batch_picking_list.ods | Bin 13752 -> 0 bytes .../report/batch_picking_list_data.xml | 17 ----------------- .../views/stock_batch_picking_views.xml | 12 ++---------- 8 files changed, 10 insertions(+), 52 deletions(-) delete mode 100644 stock_batch_picking_ux/migrations/13.0.1.2.0/mig_data.xml delete mode 100644 stock_batch_picking_ux/migrations/13.0.1.2.0/post-migration.py delete mode 100755 stock_batch_picking_ux/report/batch_picking_list.ods delete mode 100644 stock_batch_picking_ux/report/batch_picking_list_data.xml diff --git a/stock_batch_picking_ux/__manifest__.py b/stock_batch_picking_ux/__manifest__.py index a6e71d74c..e0d808ed3 100644 --- a/stock_batch_picking_ux/__manifest__.py +++ b/stock_batch_picking_ux/__manifest__.py @@ -37,7 +37,6 @@ 'views/stock_batch_picking_views.xml', 'views/stock_move_line_views.xml', 'views/stock_picking_views.xml', - 'report/batch_picking_list_data.xml', ], 'demo': [ ], diff --git a/stock_batch_picking_ux/migrations/13.0.1.2.0/mig_data.xml b/stock_batch_picking_ux/migrations/13.0.1.2.0/mig_data.xml deleted file mode 100644 index 7807866dd..000000000 --- a/stock_batch_picking_ux/migrations/13.0.1.2.0/mig_data.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - stock.picking.batch - - stock_batch_picking_ux/report/batch_picking_list.ods - - diff --git a/stock_batch_picking_ux/migrations/13.0.1.2.0/post-migration.py b/stock_batch_picking_ux/migrations/13.0.1.2.0/post-migration.py deleted file mode 100644 index 5a673a2f9..000000000 --- a/stock_batch_picking_ux/migrations/13.0.1.2.0/post-migration.py +++ /dev/null @@ -1,7 +0,0 @@ -from openupgradelib import openupgrade - - -@openupgrade.migrate() -def migrate(env, version): - openupgrade.load_data( - env.cr, 'stock_batch_picking_ux', 'migrations/13.0.1.2.0/mig_data.xml') diff --git a/stock_batch_picking_ux/models/stock_batch_picking.py b/stock_batch_picking_ux/models/stock_batch_picking.py index 8cf593ab5..58ac7e147 100644 --- a/stock_batch_picking_ux/models/stock_batch_picking.py +++ b/stock_batch_picking_ux/models/stock_batch_picking.py @@ -116,7 +116,7 @@ def action_done(self): for rec in self: # al agregar la restriccion de que al menos una tenga que tener # cantidad entonces nunca se manda el force_qty al picking - if all(operation.qty_done == 0 + if all(operation.quantity == 0 for operation in rec.move_line_ids): raise UserError(_( 'Debe definir Cantidad Realizada en al menos una ' @@ -134,14 +134,13 @@ def action_done(self): # que no se van a recibir ya que todavia no se limpiaron # y ademas, por lo de arriba, no se fuerza la cantidad # si son todos cero, se terminan sacando - if all(operation.qty_done == 0 + if all(operation.quantity == 0 for operation in picking.move_line_ids): continue rec.env['stock.picking.voucher'].create({ 'picking_id': picking.id, 'name': rec.voucher_number, }) - return super(StockPickingBatch, self.with_context(do_not_assign_numbers=True)).action_done() def action_view_stock_picking(self): diff --git a/stock_batch_picking_ux/models/stock_picking.py b/stock_batch_picking_ux/models/stock_picking.py index 5314daf30..9e234ee35 100644 --- a/stock_batch_picking_ux/models/stock_picking.py +++ b/stock_batch_picking_ux/models/stock_picking.py @@ -14,10 +14,10 @@ def force_transfer(self, force_qty=True): """ Do the picking transfer (by calling do_transfer) If *force_qty* is True, force the transfer for all product_qty - when qty_done is 0. + when quantity is 0. - Otherwise, process only pack operation with qty_done. - If a picking has no qty_done filled, we released it from his batch + Otherwise, process only pack operation with quantity. + If a picking has no quantity filled, we released it from his batch """ for pick in self: if pick.state != 'assigned': @@ -32,11 +32,11 @@ def force_transfer(self, force_qty=True): if force_qty: for pack in pick.move_line_ids: - pack.qty_done = pack.quantity + pack.quantity = pack.quantity else: if all( float_is_zero( - pack.qty_done, + pack.quantity, precision_rounding=pack.product_uom_id.rounding) for pack in pick.move_line_ids): # No qties to process, release out of the batch @@ -44,7 +44,7 @@ def force_transfer(self, force_qty=True): continue else: for pack in pick.move_line_ids: - if not pack.qty_done: + if not pack.quantity: pack.unlink() pick._action_done() diff --git a/stock_batch_picking_ux/report/batch_picking_list.ods b/stock_batch_picking_ux/report/batch_picking_list.ods deleted file mode 100755 index 11e95ea5c9fd0938d0040d359eb7c20c68acdc34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13752 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 B1*`x7 diff --git a/stock_batch_picking_ux/report/batch_picking_list_data.xml b/stock_batch_picking_ux/report/batch_picking_list_data.xml deleted file mode 100644 index b6fb0254e..000000000 --- a/stock_batch_picking_ux/report/batch_picking_list_data.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Batch Picking List - stock.picking.batch - batch_picking_list - aeroo - oo-ods - stock_batch_picking_ux/report/batch_picking_list.ods - - file - - report - - - diff --git a/stock_batch_picking_ux/views/stock_batch_picking_views.xml b/stock_batch_picking_ux/views/stock_batch_picking_views.xml index b8525c7fb..888ded66d 100644 --- a/stock_batch_picking_ux/views/stock_batch_picking_views.xml +++ b/stock_batch_picking_ux/views/stock_batch_picking_views.xml @@ -42,25 +42,17 @@ - - - From c5db90e1a458b91f772347108a7de0835b3cbe10 Mon Sep 17 00:00:00 2001 From: Juan Ignacio Carreras Date: Mon, 23 Sep 2024 09:18:36 -0300 Subject: [PATCH 3/5] [FIX]stock_voucher:multicompany rule --- .../controllers/main.py | 2 +- .../models/__init__.py | 2 +- .../models/stock_batch_picking.py | 15 ++++++--------- .../models/stock_picking_voucher.py | 2 +- .../report/batch_picking_preprinted.odt | Bin 22047 -> 27935 bytes .../views/stock_batch_picking_views.xml | 12 ++++++++++-- .../views/stock_picking_views.xml | 2 +- .../security/stock_voucher_security.xml | 4 ++-- 8 files changed, 22 insertions(+), 17 deletions(-) diff --git a/stock_batch_picking_voucher/controllers/main.py b/stock_batch_picking_voucher/controllers/main.py index aac99c918..db9be1c2d 100644 --- a/stock_batch_picking_voucher/controllers/main.py +++ b/stock_batch_picking_voucher/controllers/main.py @@ -38,4 +38,4 @@ def report_download(self, data, context=None): if not request.env['stock.picking.batch'].browse(batch_id).voucher_ids: request.env['stock.picking.batch'].browse(batch_id).assign_numbers(number_pages, book_id) - return response \ No newline at end of file + return response diff --git a/stock_batch_picking_voucher/models/__init__.py b/stock_batch_picking_voucher/models/__init__.py index b2a13b2ba..959ceba9d 100644 --- a/stock_batch_picking_voucher/models/__init__.py +++ b/stock_batch_picking_voucher/models/__init__.py @@ -1,2 +1,2 @@ from . import stock_picking_voucher -from . import stock_batch_picking \ No newline at end of file +from . import stock_batch_picking diff --git a/stock_batch_picking_voucher/models/stock_batch_picking.py b/stock_batch_picking_voucher/models/stock_batch_picking.py index 82d04c5a2..9a7d6a81d 100644 --- a/stock_batch_picking_voucher/models/stock_batch_picking.py +++ b/stock_batch_picking_voucher/models/stock_batch_picking.py @@ -22,6 +22,10 @@ class StockPickingBatch(models.Model): check_company=True ) + next_number = fields.Integer( + related='book_id.next_number', + ) + def assign_numbers(self, estimated_number_of_pages, book): self.ensure_one() list_of_vouchers = [] @@ -31,14 +35,7 @@ def assign_numbers(self, estimated_number_of_pages, book): 'book_id': book.id, 'batch_id' : self.id, }) - self.env['stock.picking.voucher'].create(list_of_vouchers) + self.env['stock.picking.voucher'].sudo().create(list_of_vouchers) self.message_post(body=_( - 'Números de remitos asignados: %s') % (self.vouchers)) + 'Números de remitos asignados: %s') % (self.voucher_ids.mapped("display_name"))) self.write({'book_id': book.id}) - return { - 'type': 'ir.actions.act_window', - 'res_model': 'stock.picking.batch', - 'view_mode': 'form', - 'res_id': self.id, - 'target': 'current', - } \ No newline at end of file diff --git a/stock_batch_picking_voucher/models/stock_picking_voucher.py b/stock_batch_picking_voucher/models/stock_picking_voucher.py index 6922d0cac..2cf87d0b4 100644 --- a/stock_batch_picking_voucher/models/stock_picking_voucher.py +++ b/stock_batch_picking_voucher/models/stock_picking_voucher.py @@ -39,4 +39,4 @@ def create(self, vals): def write(self, vals): if 'batch_id' in vals and vals['batch_id']: vals['picking_id'] = False - return super(StockPickingVoucher, self).write(vals) \ No newline at end of file + return super(StockPickingVoucher, self).write(vals) diff --git a/stock_batch_picking_voucher/report/batch_picking_preprinted.odt b/stock_batch_picking_voucher/report/batch_picking_preprinted.odt index 31d219ce12f8dcb2317061717da6767704b75aad..d49e1ccf285412de0b0434e4295f87ae50c56a02 100644 GIT binary patch delta 25985 zcmb@tWmF%*vnCvZCb$Hb0KqM|ySux)LvUwscXxMpm*DR19^i+&!{#sd-o5+Y-A`|S zsjjYbTF&%T)ztG$b_H1WDj2++Bsc`xr%y1SKF!&&#==X0|3kzO#=|Roh5g?xF^vDP z#9M(8#-}R4{dW^#JOLQWf0~uS(EiR=?&n;69dVCe>HTb{qsfqFs4r)uXG<)4)6^L960) zQr;sbUO?rA%p4*FF>%_;aR1ObDVAhxRx(-QU;{>{9dR>h_>*Z6mRsn9v$vsLKjiqu zVh0WF#+j}j{pn}ztwunW&)dBtvLT9KhwqP#oe0BGtZ;^;d``2fAK6Uw{%rpAzy@-! z__#SPa#D=b;1Q`PBg?9}u>i0q*XYew{)i5&$KEm$>n@&L#Lw_fYgWDzQ*EHZ#p8HW zMmUyMo*ztN$o|>BThg~r5Mq+Zd)ygWzVG-*wYkS>YWsZO=+fN)7qT0SSXqh|K^DJs zGkBAXu^P}dLWP*r8R+MM5*rW%}Es1Q4w|pXCqEL4NPhOXhM?z;eB+MPEHaUCZ_H@ zVgc;$r2_x->0eh21_tIIS1i6Ak{U3l&G^C1C(xG!fe`b@YHK{=lP%XG?iy-ux9$jE zn!PxM|HGG*aHFx=V%fUZ*Xy(re~h0hd0mtVyoq0-bBH4f@wLC)O^EG{t4OXT6z6`9Ht7ev|pDM zcz01oWJ*#E>>4pVF|oe~m?%-}YH6XpZ4BgxJl=mF%ZeQ5^;DwFL^JK)%DV4v!dv!C z^47b#xR7$tYSCHNr++&cd(tu?2%hEdZDLQ+H8EC&#I`>W?%kiT2z0u5d!BT0@3P># zrKh1jZ!wo}K?BL}JUblk-qryvl*S$-G?;CTd6G~2JR{4IOJ8|7sIoH;QN5wz>YNv^7B(b4Fz6Q{0amM%9aHO@F{4&_VH(dVVMV_#s@v2WW zD_Cmi8tA&9cH%YOE%Tr78FgOHu8dsS^a9^Wy-*rYe;G2-VvsiWqcN(A zCX%?bS3Qt)20eB(|JG@g6cj?3c&<&Bb;k9YyXWKI|89fXhNO42^=Y>17Yg`r6)5Bn zq8)*bc6!{c9AWOLn9v-6mr&XIh)=<~k>!8!3{AddJB46^!O%B23kaZcKnztGP8T)A zfsLOYxcI6gQ6Ktsj$F(beS3}ck2Ghkh6=iff{9z|eC_(K1xL~mwI5U>5Ng^!FLcYr zka8SpnV~omiHv$NtKYwbCY{6Y{PhpNa^=j^rI!EA)9moLKg5| zEghC$L9-r$(q}})%5T+3xqjy178yE}L}^mCQc(|9IJ0U)$%015Ov;Kn1+mD-k6G(^ zzNE-i(TM5{pKg2saR;-vGfbKZR0zxDiiB6CG77x5fII}Cm=^7u>R&jqj%neg%$V{m)?#R`l1s$Al9}$2S!yV zCtAAf)7@YjRdubvpWz}>Dr9v=-VJIrr}GdrsXo0~@Z`YZ;b?Pe+?pUBx%a$_7u{HQ z6F8c?$nPNlauNd&2ZL8_t~L|kQUwtb$UQ|`-#Scwfw^ZlenhVe;&~2hM4%K>KYkHk z7~ctK{+v~SvxQm-5215{VdAyc)>1g+xAXhY8(|#R$))v?fAoQwr`VUsknhPb>}m{w z9XsL>WidFrclwQE&7Imwy& zC=m~+)e$CS6x~H=xp~wC;z5XAjp3hIiRBbO*EwDDK2yPi??T`;S2vJql%UVVeK)?u z&ElebBgH!?Y1~lq_4Vkb7_~Zjy4!24+KmmXQq%Xt%8f$)>MBLEKVD7Uga3ox;qyGix+8Gi z4wbhjQCn&%9mZo1>^eL6v#P#*7fpLDIsB>3H1_#tjd0O6DP*A*Pg3mze4m@=!S#=z zx9YFZ0vqGe$v>-M7gM27v-Ic~Cfd*SQ-u0LfLoan7A_}(8w!?pnmK!T3|P% zurWJp4aFtpeoU+3#*Lf&o|x-mYICLR#MOtLhTJZsT|%yy`*i?4tVOc$n?>W;RbnN2 z8Lfg%=Zy##Sd+Eoeb~?PTfB()SUF$S6F|Ou79?~D4yWMzoW9DW+LuEDbvgK_w}1dr zJL5966e&dD1NEdKCsG zm{)e?r=GpZ`$la_#zgT&ecy?-wyK#R#7pO|J#1sm$>FZAujD-Tzcl~ULFhGsqbXgi zBHL$XL6!WJr%?FJV{SijB|pZ&O0|a??!i%hG=+_>`kpSgep?-R^6@u%Lc?5n{rF7- z{pr&K{eMK$egN5>S#-P*F3{&~va*Qm|1nanVz= zFtM?62r=*~a0*Cq3M=zbQ}NUO6k(+iW@nP)Viw>PlosGr5#`jAR>W7A^8Qc_YvlZv9U zYLhYw)3R%PnyUia8`JX2Qi~d6yBdp=f(z0UYqP?0vhzxE(;9N4nu=39n$m&d;^Kme zrmEW9>YA$Zy4Hq@qMGWO`r5+!+RCPuijLZX_PX+pw*0R4in_n8vAwaqzM-X~wXwdf zt)Z>8&8Pc!X4UWPn%Qld znbhg2l-cF9#ht?Op`wxLGGJz+WMQ#wV7O&yv1x9!X=S-=eYbIAr*iwaZTGO_=(?vW zqqin&u(_naqiLqAvcIQtq_1qGuYKls)#70D@=W{oMEmx1_wexW!1!Fx{8<0;h$XT{L1?30x-9}GQYOEIRkiEkVbi8^)>+ruI=oR$)AAU* zQqDNLb4j5RTcn@nXWZ{yo0U;Rd|13ug6IAgSD0dZ)}S6E{{A88Ov9-^{Iti8dMVmomH0L6{zcqmavVrybeQZo9CMkB9=`;K zXcK-0`~GR(2OFXUj2T7_+=37O^S`wmD6oHPa{iz0HiF#u&w93A&*Q5%-`6g98oaOm z9DOw9eYg{dNh5+>pel*GJ0IUgvmd<~AKMXmxmd3!0eT;cw2J39-tLcuHNXbj{bdRO zES|F+fcG=oN*@ajxfk~j=PH-^rSPE1NG-?w?$+St8A3kDX5oKrxTLU&nHkp6_9pmJVy9pQnaIcdd`x;4Y!#;6@GX zq`Z!xVdd4%I^ZVGr&cw%p?=itpCTptIxTnQJzt?Wm~c=Mim#%6Z@lR|FO61sPMfMm zkt$vie?wCN9qG2rgczK$c{Ln#nsY7ZND307N#AeDP)gg?w3j0SZn!_rh5AQ4OIbJS z?8r%)oq~mfu_n6%#Id7+~g1xA8?dlJS^a?nwxj)@^VzXXB|W7fu| zJ;fM3(G1q#*@F!)p=~c=MO~kSUP(>nIm7bJc;LH3qjwMU_u99`n)w9*DvNT@Y5|o~ zv=SGD65}iZUXTVr@m1LDDO6)#&KZ(fSqQJ6@t{YNUfkI1M~H}9dJI{}ePJeL{H8NB zgP#kVxwtfCOqa2Rne^L#i9a$;w5karh5eNy*V%cVGE(STiGBKD(-8=FRltU{DLja*u& zgedOy@gOM~Q55AWg696)d0R12GdwkoTvwE5LbSVNqvv|XM>WCSWnGX)f}#iH9mZ4! z2lFGWWC#P+!y)3=Pbm62TO9NS&rk`~pt7NAlR&UeXALvC)K{K+5!=Ki-jmKu z<`|&i1Rv5vadRo^Ix1xVjP*QL6l;-!s9aP%=nCk3C;!-&{k;n#LWT0;)y(U>9*rX= zPp~I@v=y5QBQk?m*Qe1*k758Z=Xku55CZHb{(&+a&;tH6t=|G`N;myh=e21p>hw$t)3TX=Czzj7V${Z6!k!uJsOQNyC>Q*J3qIiLg_5YjbHXn^EkB zE7AZ;6sCy97(HGqR{TXwF&+y_`9lTsq`bj%WC?R|RrWb0!KYTG);Psl57W<}42BzX z%K7!!lf)+@`zVVN?mOD9`WgsxULd)I6SRm-FSM(X%laqer-7ODKpMO&nV;E;0MKz@ z&>!QP`Agc-vBf*`m_%P|tCeP^e}{J);>0j8K!yB#B}C%Z-R5lo={OM8srqA=_T za{yUfh_qIBAhS^X`a>~P9iUc#TY`^-aIAZTH(`@Y1w(L2QZBz{0+-W!1}1UJ!&G_egka@G07q>G;9@IcJkH}kr5#yxc>@_6wK z7m1rZ8x>WIhqu)?aRvT)Z$rk_AE5pn`ARk!O@3+T83O(x29|Y#0yM6^U&wYo?_FA4 z*ckMcJ^$JPstAXNHwt7hL-+QGLT5+sz7&=R{`C(m2`G0?yU_#mZ%2_SDazcI0d1;_ zkylw+0E{Y4y&mrK>H zGWzAnW$^hm%JOyQA+z|Nsu@+R24@#nAhL96dDd3%mJ~dy_^xvmyWLmc{ciQI8)_TX zF|4^`mnLm4mB}xTbaM9(ojHlRf_`i`v7yuPH%$*^sa1b#_cJ7Hz%q^_!WIB!+x{W1Ex=-z|Td(M-};w|T{U z#UCf{9=y(P$#aF586il!GxaI{D$m8pbL*q}{#2S#B5aR=Fj1`SVoX-HW|Qq%RMF{; zEhC)utX?A>sHrH7P~S~omA=Uf*1XB7jS#TF*@X{`AX+w>p^)hg=L*g0WnVXWwn>Pr z%xl7zl3B3?WYij<3dSMaUO`J~_i{U?@`Zpu~#_1uY!~CZ-!c7QqoR5UG@WVePP|@1WD^w}Xl^D(Wla zt}Os!zuD3rnE7c{elx$dq;kr0rFoAh6X)a*4Ozm;H)OIjB$hm3IeKeEiTf^HG63Y! zJLj5A#Dbhcai3Fu^e>;aG|nU{M!J{$blK{`l>~he*(M1gByDn!h8`}d!qcKCB z7Iub0oPeF7%j4m!tY0*QKO9eXi4EEAe^r=h$khjnM{=6Hp(EhY2dOR%ypkkw;-V^! zq>I4jbbHr45XFkJQ49Y)vZYcOBgB2^(!F(%+d z77Ud#$YQ#LGEBDNoWIzKGd~T|A?$H~`Yv zg%`0d7b&k^GMAw5E(?E*n!3mtb*bWMC;~53Gc9MWN|!a?g9Kt%+;AgtzKHX9N^BF2A1_$Zg=j?;els}^TaEio7*E=or?b~c*o{VtLn$`;VKT_`!+XmFTa5Rfu8pcA5|-X5gQzv8Fo#Ka4Ej(g(PCvdYIsvcD^J<05vc-@x2Azg3SkdT>W!65tMY}-3lA12jlik}nRX$o($1_F)4drUw{ldQ zMUg}`>p}``*ErTKuD#_6yp(h!fBDkdq~)Ck>PKG?B{4@`VHDTk_vg!?E{8;@%F-a+ zbfOVx2IxBbg;KY=h(En(OqV7~Z7YF;*v)CIt1?Ntq7zM)QO!Vr7|;NZ*pM&^alk3vh{|{x(~C*UJ+? z89-#%Z)4c+p3AKzX%-6FNzN=dCx2EW|It)I{2a2WTs!z{!a{2Uhjdu`&M9_SM5v{2 z538Y^%%m|^H@z%g+{J{b^fbD7Wh^15JKqD25 zgTH9T^H$o)n@A9qsT zN0m<%0fTJE`|YaRCVZt5aVepSY5;8mq7?D3FWlwW!nvEVxsrUo>@)fi{rs(0zE*gM z7w{Rz7P>2l57~G8;-%=!5VcG*E~3yr`(g)x{Mn2H(pxs`S^$Lk_hLu0T~lz(iTFYg;Ti7kv;g!DfFqy7wfLNoa_kA$GZ{^K`V!%Y3dlX5lR=z*M!2g~0t z&9Y3a3Qny1H-yDwCXe<@4aL^EL(i=Pdd~KY_pV6Tr#(~y?Fx*gLr?0W@y#}9Ei&^3 z1qAJc5l#Vz`UeUKT!{yX7^4sg{sFn36pMM30GUn~LdF5nkr>>36YQ_`zg@Bp2J|nWs+Ni_^zcTT-ss3(lHk zx_57UTdP_C~_fENO z*`9(7;#f^M+svDr$*8Vkmz2kYz@V;TaQNtBY;|t1g)C3v!!6!HIXqF^%<5Az^z;IL zqOp-O22C<*fb4NZfE-E+8Dm!a> zMT$sTo^g9Y1!Q1nKm%`dl#mesV@=7QT zJ?7x01tI?+@*rDZnVDdVU1iLUu9lo?Xpr}0e$-%zE()G7dD`5Umk=HOJ4qa!K^IQH zY2_eGov^nYfo@;GiJu!4=QwJmaZo0N=n0zNc}ds(m*Xjr_Q1V`w^~267^86&D@?AO zDg_9++X$|j)cFl8UkAr>y+YkE;>BD@($!UWyqpUpw1X4cU-cNWZ1^LZgKH73if{>s zN-B0{-9`b>BK`p)c8R}=ZEv)6od?(yqR&4`Px@XWetm?N@1n)Yx^?d>T;O>oFs?tj zyW5IjI=XxJIu7l@^Bz*^+tOFGVbG%IaCuh;Uf$kt^``rG3kQ)->{ zqOn2WQ_qyBXvnDT+^c0lPrxNa56xt7k?%d!@y-XZ53A(h_){|-A}0*@0Xui+PTxiL z{<;9VG>k}MgZf#FcK6)hrYiO7kq08y0OcDFSoR6i(b7OqPemITBejxXWSBD1*X#vG7^or`W+D{Yl1>7PQ&IkQLOaLKiS*% zFNaKdS5WP=n+PRjff|0(fpEMQSVJ!7M=Gf;eTm4P52&?8GMKHL3>{2%+PgUY^6%Ot zX=3|pIg)C|L}jsz&)@jCv7qgV+9z-q@tuKdq$Z1Kc+rNCep@9}?$7{pJbsb5LrOzd zvZ}fMSc31jQ1Xqrrji3`Eh+ulUQYBHP;#=MrpMAmJeGDYS|dSXnf{hXR`dDgH$>;1 zX}#*9tu%`c=S}OMM=$P?ogyDE!$Kz zyVgh^JKYtIDMH;9IDrxppJx=13u&@Wt6dz{unCk!BVSGJwk3=)JUU0TiMy^DQqZ==$%8-Jk zqWzezt{+X4rz1uIgKRVcF+W?W;LGG#8irEPfu4v@oi6~H3V;Oe9Ca)kbBsJGo_qzE zNn*IMQ~Vt0XuTO*TDEg*razZ{m&B(0GTKY1i{MmyO*yX#{)0iHMyl1*4b((H>%l{E z+xU`5D5-orMiAZ>*Ar1=(b#sBRk81*J~bXUjx2WgO8J&mQwf`;+v2)Ijn(M7VzrWS z2(F`+ljW?-4R|lmgYwktR(z+(O(3U6DW#%TH6MF3_>McnFM#_mpq**xpThPE)DGr-0%560Z>kHLVc1xthbJG1w!HkLaWPD zohd8&I6`Kq=YxmnK}Lna!$zgYbi=d8^Gq+6T7Fm9V*0eS5^djwDa538@m1u$ zlT!~)0)~dZj;&H@WeD;+F`^N8!{5sPPG;d&LM`>}-o$KKMOe%%h2e*kUw#Rdjcw38 z-~8S?;)~&3i>wO9?n`c4OU)-)P;WEr!rU1zsl|8Cdrz>-Tj$!g-`yR}%LK=Cs`^(D z?d7)NdxeVSuwUmP2lie{p5ibt(6pTVQ?XRMfKonHumjn|?3dzWXs;F38;o_JbYTGX zNw(jsGelMMj#aXlw(Ij_nKY}#LeG3<%x;=pm}Z>I<&XMUnrtJee~dylOP6WJOJDxD zi4Bxt@W*KcwSOGOCV1E%(~!*FamJ8>rk4ynxnAkE7`M1f$e!#wo6H3_V(h;Q^B@6> z+#-c8-6WQ>?6j&$xpZSLq*Pz+#y5Q2<7{bdw|J#X4&XP6Egsazrd4xEv=g*eBFVGA z=Bvne=>{gY^pq9DH6}j~(-$de*L+thsG}%FDC;n)z}2ovAh=9KE7fuV2Z?9(-#&rb z--}%shg6CA-kj8nVV!cMNMp6L3hIFB%1!wAA94((b8%n%$Wo!_%e%{!n`P_4uhe4Z z!n$>swyhZ*DiWE~wFOm}j07iTr$0q<@bYKk!8j4se}i|_VoH}!hi`0^EB2_E;550b zQ6a;whfmEcnPAsD$ENTU6UC*%^8g0mJU8HZ zt@>X2edK1JaKsRnTRwWdYe#3wn4%)2Td_vF^94<^93V0oe>jy38(_sJ*MlE7C3LJd zbSyTYZb)+uRj@}*;tm}f=PQiql^It^+LLN-s@<0}KAC4_bmiWo$+p9NEBy1V?f$IM zEv?R>5^bSKP6JJlVcwf#ZY2qzu&uyDay4##*A0-js#5lKNCwoX2B6|Xc_zxO$IfgN zzpr#zcH-B+l`XNMlXRy%2$2f-M|Ztj@<`DtIVz0OmR+{z$h0ec54d-VKEPFAo^Lu( zOZv00``oCtNtk?i@mhCUP01wU2K|HO+d$e}B5%A$H#v?}Y-S;Zo0l6<6=cH{6OFAX zLr~m?%~<%tD3_J*yP8_8!B6<^kKHz8e^Xk`@U1n1x%g!r`b!!gSR>h>qF{my4`ma7oDWyPWp2BH0y~o zu{Bi>(6rcS*Xlj4)!GJNs-UG%KbB^x(mAa!4FINXs>c?S$?X&7rY=Qp4v6sL92wSi zEDN*F4kodw0_Nl!X&|fdDP}4z6jQ;V`ne2>Ef=jjzk#xjgA4USE{Tj6&Bkl5#$pE= za0XS)O+vR;OTItiYfEo52u5qDfsykavW(4>fQIx$Ur93U8aBYv{KIRLZ_q{LtbwDw zLWay)2j8|B-mUFdNQQRF*a+|Cg1K>R`ibMNYP_9wy4A<^_6k}q+xogpmE^;; zz}8h?Pm2TD3U&a8J(KwC^-CK^dI7&p`AgneJ13Ik5|1d;%HnSGJfFC zLnV&sX<(a(OZHoyu{ODB!&ITxKhkMHe{EKc`__%Y7ab% ze#dk`>w+|9;plkxii?zQjMl(o*HlU6T!cnd-S8H*l@bt0s2fsdS4>0~|Fo&$bj6e_ z)4uMP>&cmjOOU4(wYmg6s5P3Ju*VP`T%jm2w4idvyqWRYb%cUJe|}q-)2Ys)g(kAw zJd1;qqV*E*`N0^oiD@BJsw9ypL4PHGZTa=19~flaSaJBq(M~2{bw2Jzd@(K|AC$U|F_nELb3k@ZU0mIFPQe9 zO9B5xZT}}^_WyxC|KC91=O}?QOD2HZU^&QCg=#v@ejbCt%2ZkA&W`D_s8ad>Th1#% zA;gpNCbcuE9+K&2y2Ly%Hd;y_CLq?vx>Ye=Je_=j-s-6y#sy8Hd*SJJ*$N|5Q37_Sm4>ZJHrq-|wZMtdGMO^eT#F zxYj{^Ej>iSSRQ1IHy7bi*%;${*` zIMa1^WR=8ETHNpO&|1=qVV;A`LU%Z9Bu6F3QCTr8Zq&2d>G9~YcjuV_N9bdPV=Utg{M7E*lW@SP5B zpIC3SXO~Yuorn)SaFT>J!jYwhvpb+^-e1iiRLbQ_n3R+s%_H?sQ&>!!T7^;?f>y!< zb($2{O`ifZt>W`xa!z}ja!$blBk~Ed!cSdvCR+o6~CJviDzIng<%6gcK2a5=ypbqoqs;)BGLqL#i z>fPJ?gZX4=*3B&({{-RA+cJrulk>(#9pjo};TT|$5WcWdF)H^gBN~khGRoHHb8MLQ(<2yQ8mTsgWS!=(NE5Ap<<1@Le7 z#D9ND{}MbR_`PNVJ@K0n-LyjP*kXq!qFNtyZ`?XuC$}NJC+l2$LgQVve6HK`Cf#;d zN`lzKb;rM;INHLZIr5@2H5*ku^ydWu>}+*E)TYt5b#QTAkCG7)ATv5eV^VRce_g8X z8o8YF;=KW$anI2u>*p%d$}H*Y`itI1l2+=F4N?}p@P7L_KE+w;CZE;gK* znvV?E+t}~%R_pqtL=s5TTC!}BqkcPnD#d*LQ-uBe7jNscW2Qj;Q zBi-cz{y&76oVDQ9KCr4|zPFw0>1)X`_LVhVQ8RK#!fb~9QBD~hO&HlkSxC?sti!pe zFhFQbtR&{5v(tnjNaJSA=IrZ6m)uXL-p-4j4xeihI$HG> zr-6I2xGe1WpFWPWB^U?PW?ibn)|&n9&496$=F`w8e5Y9=S=B!OKE!Uk-&_V+d&^DN z^BL>HN6FP>wyQV0O@U?9N^mON=JOtTw3E$N@Fb65_Wjwh$nv1jp-nxRhrq;g|FRYSdxQgub+vQjD4r8Ofv_wV zvZ^HMHgEY5XK(Xl-g~-bI?y?fwR4y{OTd#gzy(#T08(ZOw##XR9!274KPOp4&_{@U z7F>)?hHiKqf{i46!qk=XZ`Y;UoXr~!>@VtBb_}iu_jMVsB>MbP-yMYojS>G((h>kF zO%h@t$?SpL6QzQQmsv4=<*iJVQg>21od_}da%mUj8Q!C|$s ztv;N;k7Yh^)%IO2>)yEt)~Ts|x)`8k+Wr&$qU}@*OV~7aaJzj#iva>Tz6de}gpcM9 z?hP9Xg0D~HzSpdiJ)nzo-m8o3hgFz2gQ`tv(mlwZbRGn=*IjOikvu*NR`S+O=-_W> z-0dbmSP4wMU2=9e+OKhMWJ3qpNV((X_NY^NMpLI7z8EZiO=$Qz|0?!Cmkp@nCc4Nz z>}|Lxbv~D?OKtY<=ad9{T(m#gHFAUX;62Rn=KX2AfOV%an+t??RoD_Ib|{n|k%zg0 z9{!Sk;w^-JwA^KPzQRts@3H@gyQIfA+40Q<6BPTRH9{4~n3cKUaWS#vabIy6!DW;# zJ>kUjnhwdyaxk9yG4H~q&Z3FA|qJSVu!lOs36^wh^#Q)iU$c zm>$rXY^axf@bH>pbsp;7aG6d|ic|xBH$6KpMXSC8;v}`;-?B45x8!NtfaM~n(%K#Vq78cfbuhBMeSe5&OM_5lJ^aX3gNXfS8v66!+za>*8k^6jzihkz zV6gr7JNhr}|H8!kcP{iVZ(t+yL109~Eh*EkVo4Lc!ia=)k@X5QH&%sYEJwlDKk7ZdiZCWnI@LH{n&kb<&Qz{ z0iM%2Z-I|x{IE7T7kSq93<;kC2`(bUsm#Ne`6<9-IX&Owv?a*86H^k^j;lAx=Z95Lo9*y? zanxp>DWMN6B)sz=Y|dz@UJ*Uc9W$|0@SL63ejnjLN@-g0MiJnC`kz*Jfy zU+x^G@T62p*M@#MKUYc2eV4r@NskO1%$3Bk?ykG9TYQSNTVcWuidK@G}@!AG9 zZBM#jbNoy$5QiBTNliFs@Ept5V0|GMYpPKN7Q8Zl*Ij&`YC!3oEW&1JG^-0ZY%G@a zQ54LS2b${^ucf%W3`tF${H88( ze{Aanji5wF_%lpLR}YPwkj6|qJCq0b`O@UHUR|r`VYQ!Ifolbl#odf27KRj$AlXU3&Odw_W@;CRZeJ=h|1zn8u4Ar5J)VV2h*8=FbR`W2ICN zEm&lL2Y7ZD?AFgSs5!WRfMY_!pZ8s#AkDubeeNQ2rl0)+o}TL|Tt9|4-xSyhP+_7U zReH7PZ<;`F5!XUdlH)GP{LTw?X*Ko8y1>-v4_V`YqpR zv1epoxXfT1ad`F5HKAF_U7OOYH-%qxRq%uL@cj<*_U#PW5bX~QI0guUZp;@tQ7Y)v zl3ZE)bw4M2QGzS;+m+3HE+%q#gS6bZPiv~lCpF9|tmmE&3F?UhspoU&I6n+3h#Jm2#(bG-l^QnT`Gd;X9(s;Mco2jz@I>Q zYBluON807*GdiZQ?ZH4n1HgVYX}77yn$F+>CrbYr9lvu1fz4wZbIg$E#D{QwoSD7ZHQL5QBjOOEt*~q;F6Ds>kvjC9v*& zzW*UFW6vhu3_8C45|G0`z02O8?-d2(&kchSP`zCH`lLXuAoz8=JvPyjemF*-5s&SN z6_eBI#So(jLM#B@md7NRSiUoqKut3Xo8E62kI`ZS>sUU&=z(B}9u+lAcL-ZZiy(QF zeA@HDby9fg~8>m0ZWA5Z#el|XX znnp-4$A=0PAw~#s`#JtvgA%}Php@PXM zXx_uF_%Bas?wyT#q#GJ6^qhZxM*+{Ai_MRQjT9f&L2czz%llRPZ2a=VDZ&@Wsovr5 zJpx=xy)M9{7p{5%M_;fwDQkyDa<q`J5}L2M)i`1{kd= z3$tAk2E?s;K4C4s<}p#D+UTzenJzZHr&QBJ81%Ea{HD+?EEfpkw*Q^&-wL)xi&EA< zwb*nRdy3pY6^Dx|1+My;n;YmgWY|}OHLNA>~)3+81N4_9SAvqE$y?iSEc07Ict7G}L_X zRJtGTU7mA*GSOE>iU7c`e>F%SV>@3``Cp)q~(C|i!;en`6!zjfRrb^@tL87i9jugD)`nDWK{2YqN#_^%lJPj#B_K!q~7zSzF z0V&@|l1S(ZSma3?7OxXkyAbo*Xc?m@b49fWq~BtGN6W!d{(^BDwP0}6N-*fjYG#Py z(UT46PT=*t-!spNP|0Swa$qJ(V@31aFGYYZooLTB!aooqJg{f^7_bHc4Bq)PduTbK z7qwVEiibk@J~6=th(FMWCFH-iLnB>YdmMWNz0T~3wR!5TT5J4XF8WRIW!v!02@N4` zl~hBpo&YCy0@`h(h|jO_ykFkHU`x$~HE^Q35iKHj6Cf9|Qd_YUCDiZcO&*zK0 zU>NlK&8GTKDwCemRkfeVrjT4AnhH`m@SP6&I^%&)jduFAYUsZRZN%+-S#BpG8&hCG zPImlRArf7dCYmT(FgWgqf1e<1xaA(;*D>xgVI>&`+wgZ0>hRW@4i?(+n~l$NF}ppU zNX0djCOx24wHmc=SKn>K>Hj&MIJJ6B=+XeRG1268CgWP%w&3z~5aI}F5_{5_elqnT z>)`#-#028XfeNgOs zZ{>?o*ByO-l1@NQY_#4ocdl3j|K`uYkzZ}xNfo80<;ocsBl$AZ;!=>kYdI4&Ohddi zB6&(CrnOs|9l0q+8#%IqsJ%gXQrM-6Ic}uYYF!wVV$3se*$o*5Ml(}x-wxV`4cn3_ z)iHO=DsrCom1!q`#Ja9)0u=MdeW!4Khdn|`sOG6m26sQ*HrPq8h14bBf4a@Flh#~n z)8gn|H#tbnk60A3{1zG=DzI8p z`%25vO7Fl2e}kTrotmyMeeFy`u&fXAzW9{pP+zfV# zP)s``@(=F0l3fiRRe;uSzxN8IMDyb7Rk9=h>U90oxggFgBB$~F2_terB+IQBlGAT; z{kk;KG=7=XFP3ny=D6oPH?rR&`2`djRP_x^PJb(q^;P5M%0;!r~dqpByxG?GppzI@Jh}gyI zxY5ttIZ86Te^N!kr+urK^E+4;D}CU8b4Edw+j>P*T=wQ?OzO%7YqFT79!ieRb|L=QUJ9;9=%hK@Bx%TxDw^KD^hmqtwj-e8Jx?vd}fX6 z1d#TCU8>En#YlXo z{2yY9H;%-&)V0n59Q0e`OyX2aIKqjIff^;O7Nx5Jg3XTfkp4dpUzhb)OJq!fWeCbp zgG|fwaEMlqg-XrH99sBMP7U@|6+oB|!v&JSu7<+sfNCPf|LW=+qbuvSZG)=VwoysN zwr$(CtsPfv+p5^MQ?YGTw1WzFl2_+D@4b7@U4O=0W8%kbZOt}U@1yn3qJx?3U;2qD zIgb-NlrQ(%CrEnb^+6!~rB(yT?09>(j(Mj&^@iu;7G?lBGk2_oGw#dsqRPo{Ngs>xpI( z^)fv(6Da_{QS^IL%aIU}GP|&f)Re_xrhEG3P6>ZLRHO^>5Jv`cbm-w-kIyn|W|*0+UJyx4z+IRmM+sT7A@2fkTyS`!8GhT`RB4eISDKZZ)@jtw z{G}S>Xrf|~bHHq--7sf>BHF9=illAq=dMnpph?hD8y>B5u|)L}L!$X>LmG*f_-kH7 zD(3{fzo`1J=!Jf~1{>=0Y*rg1wa=WwuwJ^=>C}kjmrHF<^iFQ6%m;1G*|O}WpL5f8 z7~W8Ts~p6-+>oUo`7QU{9{!K!8J8u*WJ2* zBv5O2XC>e52u&PJRqFy+Qz2Ve!uZDS)o(RAU&Lm#+J2RpaHaQW?s^(%J%ozEai!u#R`@p8#%#_w>r zI+#mn>fg2(lUEWBk_{F_mM|-q849`sqij3Y7LA!czLI}xkiB%^cyH5coy2yk2&?Nv zUpQd5pU(9?o-aYYa-Ma_wJcU#v0xdAmMI)f(Fw^9e~;5<(7+0(3**ZlhNwz$4rs^& zR2EH+^qnTVVH3W))eiz|Ob{z+8nMpX^aH7Ok`bw9nH9j)e%`6g2ps=_k3o2J{i= z<^kMKPK)J|*znY6(*m#pqQ!M635@q8Zgq$vXdiLlH{`UEBkM=M^*oE1Gld!Tiv~J~GIFM^hS0DK8afzoe%&WTQVn z(aRBRGVjeku&LmMf*IEv3^nD1zo17_k6f5QNiAZ<&g((X2ArKDTpz<;7!kw2kLrR? zxh3A%S$d_~MPFF-O}MT$HDNCR@|U01!vZ!L+#YL|uj_=6^S95M@XgiRv$x@1R(i{} zXY}9)Hb%Ba*Gg`;-@LQmi8x3MS|#i8^(*hBFd>GR2QF9ZXE_IaG}R})w|aiEUFk415|;>M>&>C}=_@j+qF*`%Pq!i5=6PLj^fbExklQjv7E#pf zJL;;23)Is3b+OAGS;L}(zNN{g7?3oGZtZU+e4=;aBOQ92c{Dkc1y_dTvel-#xtD8x9{5p~j=9|!ZOazg>vW3qfj-#H z1Q85R{t&o%mz0s|WbTNBPc}3clXrN8o{z!((d^GIwNQG^?`N*_0H!a_j7!~qrc>eH zTLt`AAbfT#mHb2vg)3&dunYQ31d)HdR`WYKRZz)iFU0&H^G~DLn6fKF^Ko#|KZ#0; z&e9BUJL2#SQj1lSG559sW-IeHcBSqguHUfsOdB|{Aq?Fu7m^(s)}m}ZTm}00O)chC zu9h;Nugf{rVcx?@1N0>a?QLZBj;giQey1Gx!H?_JS!%TR5WURbUazv=*!E2CpeieV zWY2SSPZx{6{!t{o{-gIj2qZBa=L?%ADU9TEq!#d18!7axP>x+_XJmA&b77T zloP42zUaBNFMictpq|L)D^`hBB%fSmeD-qL=#x<%XlbKBMwpaOc&+3rR`9>m_$P>8lX3!kUJe`_$)dx%_wkw+}|a}HmbePhkA z;!LKZRLauXIbhk*e#~f-|1JJdjY$KrwP8=DP#I(I=ev zp?x>v{0G+13tfOvIaG;h&_0f0%>AZcg*&!}ad%@v_zv#sAycF)EG*h-?23+<%ZB9Z6rjo=mR;TA%I z(mOFAA_${fFmSOy7{iXYz7`4wm$EiLh@;%<0q*J%=j_-*M$A%si;B+ENp06Ff?-`M z%;chvx|@D6+{V0;HqlW-qFqSyM6gBpkE<{f>xV-ug*n8Pc^9rw9{QBC>D)2CfpJQC ziQx$;2LHt$$Xz5i(D^7Hq?Ncj3yf2ig-0`0#jGPn>Zxc(7y*xSSzkzxc2VCmA$A96 z0WfD$`3>7&=p!}1+5q7Ssq0|Wy$rmj-v;q_uy@J~oi0_Gn^W?bIHr@%C3eqxZdWye zpS=2eae~K_^CEn?V?dv1bgvX)H3Owg&@fA&UH40yIOl?f1>~})u@MF`6li=aJKmBJ+!6^;8!RJ`1tdq=4tWy_^s^*@CN*SYHbsdK9DSmYx6-G z6Ln&pCDE-0Zw72P47r4q)H9i-gCD{Zb&ydlCAeJ=BU9iR^KA5bf->=AqQ4G1c-dd< z&gr-DzArK|SWIzovHJO|yvBt_JEhD_J8jlieNu6{cMNGIEXyw!>C*uIgIf}_n87G{+eX#zkBTnmh zxG^Pxq0?9CXb!WuB8sA)+$e3#{cJJzFjgbFdmK9%6qI2XeUN3BWddwx!xaJ#d_}>L zY~4-rFzb@%(BSJ_$261@|klsKIGYHzrO~GG3?#NI3epCiPI<;43$Q;`IHIpxrO9eyH-3p zuz6KY;Prm<5c}|Z7W#Pi1U$2%{0>TrF&sq36kSnHQ5VOPtWMDY%C)V5?g1RF=7!z{ zZfmGPSEFJRD%dHXfe81Lk#SE?msV&t~NRv%6WxukuHCh_XM^@g42eOGP-Ca=W zj`U|&dKEaJINV?F^{o!CK^`!#5UMM=w_&g#g~_LDm<|r0k|e_qKy}d22`Y!Ra<(4q zo4|VU5cq}Qf;V(?0V+W@_NUd&Dw2bE+;JvCCtqEPQba32vg|5m$7DLksrrXF!#z0E z_3;@a0np{$WX$=~6xPr^1H0Pcfme_Xo(sSJk&#>)bp+{5ucLz0?W1kt?9cpzU3v(D zpM=gy(?WySk`e(P;CW{qpJ{AEvw4J}v`{TOK)(zHThAL5mOti*RWub%yMuP!*Ff+8 z@bRQcFl-2H@R%6eP&Xu6OA))65hL0dax^+bB&q6?zld{NafXtv)gz`Mi@!b1g{n;7 z2t{FfB`=+rza#h@^F0!VwzX5?_qvaNYO~J?C3Bt#A#+)6@4ovdu z^3F^pV$06aHpNqSgp`vF)M8Pssn>q#n#?xR^nT*5=zb$mtMx~s)r2#&PaHf|vexR1 zXIk(O2H}4JCm+J2B!l2+^vCXIA$!}M^x$ol!fDC!Zw-8{LEhn#QR*lP)o7nejjOWm zq)RxA3?~=^0O_4Q;n~BEY(ekAt%t@$02M(ugj?jH;M*y~{;&gjo3Q7cS=}nX9T(+h z2f;4)3c5_1Kbk|_NyqopNidC(?U?BYK>DiVFCQT3L^t*Pl1desv|&4Y^DkKjaLlA# zstufjWzmvs^5`Jh#hGRf8{L|W=1wi+{1%jBX@e>NM|Q4-w1!NX_IpJrd8DeVRPDol z^@qef%@?IY`4veNyj)ZIIu_sF-*9S0IO*%T?6!2ysjyABT(7$ZfS2R@o4TFu&#Oa5 zL#@}X7+M1d0~T^>(XDHO&+2uoV3hb)_I>SlV4<``^F$oaP8rsLz#;n6$%0;H8pQ$# z*LD=}I{Qi3(?G8RD}U+O8ELJ}{0{hrG`mk) ziQLzHJv{;M#y`|bL>x-<$rSVtk?HIAeEQ1T=JkAh&PaTDwKBIS)7COXq$5zio)-VX zD_lzNh*`GL`u+^Oe4DZ1Xd<)?{X|meG^l`<^j=2VX!I>IcX^Yc6K$b9vezq|B!Ke?bF)hWyVqVaNB;l95eR2Q$ zmV&<9f?Ac##hzOOk7jdajW4l1kbb77gAcN9*aX(Q!S`gK(r8nrIjk}7MRQb!7PNs$ zR>TaQ1?|u2(53B>%-JfQG!1t*#4kBqZ$z(wtqeJwAQ0SULUs*2BLHAl;=fQ}k@ zoI#g>DN7I%U|xg3nE?_1LtiKYmt>ye~0+V5qb z4*8=u`1^~#JWSlw%42NM$PynuPp<)ZwZ6tmqjh48;aPJ!-XVMCfQ)a1m03k_bB>Eq zV(@$Fnyp!rh$8YrLgEbohxmBd-PFn`1G{#TbKip!may3ca`E z1n_t?h6YVK_fGN9PFEzd*0*u7EC*}i-81^(*T3v~5D`Dqs4T6Y;%`3PJ`5d>6?%io znf|~a4Ny;Tg={9~#h!H>*J80Zqkm>7Du>i72}o`&bHVkk57E*BjPyvM1^20=Wd+cs zpgK$%JLX2x`emeRJ@8@WgdUL;A3ikf1g;*YT|92&NyT4AZmIL^@m`Op1)iyMrw}P^*0JOS<1mE1 z*TueL92cj8GR3q|1tjK?X;B-@%Ohx379)~V=3fD+o~0zogfx4v z`Z<(pAuVvg8bJTa(XH14hszY?$W+O-r*%IcVV~b7jtbOtqIKEHUt%7=iO;(W6 zd9o@XuOvC76MhB#(87BZptLXu+hH%VE7=Zo5=W)==0?-ZAnapX{IPe-ykLdDxx~tT zxa!(3${$ZFT}oIy0ITXM?pz!)9tUeUi!C}!E9C+}t&&;@kvR*>Z923He4mC+L(
XgrhPfp&o8i9~NCIZcl$vT-9d3I7h5FJ7Z6b#ajqO1dz5-LIOwxlLJ7Pxh z!+1_5MI>a?X{WT4gQxQv5bkoHrF)jMadPpnhau;jx$-e+V$D!1>K)SlPy`sVDP&ez zoF*AGJzpT5VD&3@cpT+9mL!#24)c^uD+v*`(ib^HO;X?2Z--by_t7$4rc{s@?=SyJ zFe%h94bL~Zc1tT>TmW8gKihXX7gREKSfrRsL+7)SnGQeRO`~Jv1c5sfmKA6>u~!XY zriRE*lI{HBrMk-?%ue#T1wCx&Tf zLDW%89VPiNPrX!hwh$1w$)p{YcaRA13{@d@qdDuALUP@r5b=ejGgvve)RF^N`Q|65 z^Un8+AIvf;dydjFO9D#N?8{dK`dBhQ7N-_=xqAYK*rJGFufph_%}IG9O-Xe;(_Rxi zTZxIZnD>(sGf(KOaEh*?W3{B~Uj&S-vXJcEWs^tlMXo8U=5UbX*%HV%uCs)I{mj(4 zX^o88u~1-H!*~~7pGHDFbaBrx*;vEd`9j+ItmhJ~yGLO_2a@ApyKHwrUkE-P>~ zPxYJDJHM^RH>s@78Qv_6Q-@1(?mH>iHuy{BMl296&%VI(LT8#Xn8cqZ-Tcs=(ZVsT znPZ2a!phLiqp}{%$F!t#WCzh80SsOghDaSoaU#MSXJ*CkO1zrbF7J&1Y|awH8Cp{M z_o&Ntqbt|)DlYv@!t>qVf)QWFcj=)ZhXrPJc29@#srUHt(y5K=pr;s_@FayX!drep zEs6$UHe9oiK=SzTE%D@+ZP%SZK<;Vl)WJ~-| z-m2q+Oo}~|gZ>_R>^-=Eg(}1bC5&k+r>2A@%baT>QX!SXcCRSo=M7k3il_$N`j&1+ znvt^EkV(Gm(MvpeYE}82BF!?BBBeQB+gZ3GGSN}onf+rTd^pRxV?ZD`dfW2-@zjF| zSdU;|0!I{F1@-jp4M)m`b~Xc%ey1~<3%>ZmY61pT9s`Q;JwqwLfKdm-JGC9HuEJj_ zKui^7Qv;RfD1seVfxFJF-#`SjWqor>M<>&Gn>;P`ZM&<+pg76KWQZ`DEnPy*ZoYja z)v0op+|)E9_8Os=^|=#g>okgOzofzIqbBvI!NgfG;DNJ+=}Q1+H-3~<+SJ=d0vo8I znRjW-k4BkA9t;y;l?~@X*LIggK+(Az8|<>kHStb`&BNosc##yXGH9?Q&)~8+H~UVN zZu`~y+^>*+IHiUkg23>Vu#(d)UF<@EwW$RVUEAO%=*y;KSm+ATdMr~h7+&W>*;!&B zTPx;z*U*JF1cT0 zjVYu@KCpjtAjy`%sLx{YAN7U;oAyi?kxdqIt2!w%}g zNyO5RXNF5W3Faclv|f&@G852`czqG*gA;Buoxq3_^&S1igDr(SC6o&-5}8yJds|jG z>CSM+#Ib%XvDn^?||<{$81sgY!EAT}==O z{P#2ARh5i3SRFhOI<2+PQ4qq%l9ZZbIE7UA)1ul12--(C1ZH%d|y#33C zdweIZpVv)Q{28YDQZoSA%TDM!8*+%38zud5p}5V8%LPaW&8mX~hcGoH%XEi_z#(tn z#T68y0DMSq@Y{Kir4xf(YjKYB-EK8*m|7-QS>|Je!Ip4=`v)(JKZ0_NJ*FD(E-fZN z##BA=({0L%Lc$u%{yQT(ylw?Qq}n#?oU;2CJkwwDVWx@jdnNQ6^{0DQ-ssQUt<~;} z5U$P#kov!lUVnIVl=22&hDVYPVS*t(J1nQ#Uzt=L!g?fBO$TJRbFrce3o}?Aob_HT zCJB<93S#fEU?XD{gYbBgqzxeR=~4h%@lr$2ZjIzQB3oM;R4=MyZl6zk{w?ilX3Bx% zx1EzgQ&$2WEQ9O-yK*9%540uPnye(*S0VFE4vKM7Pok#1b}CWDwO_ZB8mvpd?C#6V zzp*73Dlv!#$%or+u8r2Y%25NTA zue;4Hf69)kn4yKX?S%5*jSPs3FQ73vMCuNe9ewK5v|q@(2%kdiT@=;*;2ttMq!ba= z|0>$A(?z9qYBPbmZ^?78mK6cAhmn}sBBl)rQ+!vzFPvshfIWKj@>`pVPJC>9f3h<}{$51%cFK{JO2G774 zAtNhK7GyN!5ONu=(M3Zti@jpYI&8CkS&-U<*gie>b2bB~cNTwq1K$N?q=EXAz%bv!#c5nk<`;DNOV%D#?0E3K~4 zn-{xFB!~7n8LVFPG#G#|R@xBujd-QN8pR0V!{6!-Oi*saPO1*iKjE+@7`Xb8NCYjKk=|v@rIrAK4))s4BMwX%YH+#CZWB zc_(;r7NDEH`90qL$XQ%c%|@V6}P+A$ywXn^;4cg%r#}aKwgExzQLFqkB_$><+IA?unIAu z9#xGsr1oS#v{eCI%eC3mOWR-qX!w35o$~3G`ypfgQFN^D1urlJi&ju?al05IVknf_ z%BRtkiqC=u8l9pF_NY>JWK35DZ{-g6e04BM-+;M)u2ipjBkla(?gLwjKCwLH)IM~$ zjEwo4bo#m1-l`u0F1u-p_weRqEQ(Y0RIeL_=$~*^rV5oPJ}l1BOU%1WrM7oqY+Sc> zx*UAAvjS8&IQFybM`g3j2`Zk`<3Ppyy}3N?k=u9qAOE03J6_sW1E^qNgmC{09crRb z3i`KEM}_jgO+a>(MgKAG*ipt$7F7B6Pg_V8KRHZ=_W$Rn|09pC`tQ7us`x+s5vnTx z#BEi{e?*dv({QR87IZ<`;=yz`!v7XV%{qwq^32`nRuE|4RNJJ6D1; delta 20025 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

*x{!q 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

(Aq^&wAxy?6`QJ9 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 diff --git a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml index 1a5e0ea53..10381f049 100644 --- a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml +++ b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml @@ -11,7 +11,15 @@ - + + + + + + + + + @@ -20,7 +28,7 @@ stock.picking.tree.inherited stock.picking - 99 + 99 diff --git a/stock_batch_picking_voucher/views/stock_picking_views.xml b/stock_batch_picking_voucher/views/stock_picking_views.xml index e33bc6ef2..bcde9bbc2 100644 --- a/stock_batch_picking_voucher/views/stock_picking_views.xml +++ b/stock_batch_picking_voucher/views/stock_picking_views.xml @@ -19,4 +19,4 @@ - \ No newline at end of file + diff --git a/stock_voucher/security/stock_voucher_security.xml b/stock_voucher/security/stock_voucher_security.xml index da0602773..cb51c2bfc 100644 --- a/stock_voucher/security/stock_voucher_security.xml +++ b/stock_voucher/security/stock_voucher_security.xml @@ -1,5 +1,5 @@ - + Stock Book Multi-Company @@ -9,6 +9,6 @@ Stock Picking Voucher Multi-Company - [('company_id','in',company_ids)] + [(1, '=', 1)] From eb6ef9b8a8b3ad2f232b1d9dabed6e868cd88e1a Mon Sep 17 00:00:00 2001 From: Juan Ignacio Carreras Date: Mon, 23 Sep 2024 16:45:45 -0300 Subject: [PATCH 4/5] [FIX]stock_batch_picking_voucher:last changes --- stock_batch_picking_voucher/__init__.py | 1 - stock_batch_picking_voucher/__manifest__.py | 7 +- .../controllers/main.py | 2 +- .../models/stock_batch_picking.py | 65 +++++++++++ .../models/stock_picking_voucher.py | 11 -- .../report/batch_picking_preprinted.odt | Bin 27935 -> 27780 bytes .../security/ir.model.access.csv | 5 - .../views/stock_batch_picking_views.xml | 8 +- .../views/stock_picking_views.xml | 17 ++- .../wizards/__init__.py | 1 - .../stock_print_batch_stock_voucher.py | 105 ------------------ .../stock_print_batch_stock_voucher_views.xml | 48 -------- 12 files changed, 89 insertions(+), 181 deletions(-) delete mode 100644 stock_batch_picking_voucher/security/ir.model.access.csv delete mode 100644 stock_batch_picking_voucher/wizards/__init__.py delete mode 100644 stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py delete mode 100644 stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml diff --git a/stock_batch_picking_voucher/__init__.py b/stock_batch_picking_voucher/__init__.py index 0c0cc42f4..bc704a047 100644 --- a/stock_batch_picking_voucher/__init__.py +++ b/stock_batch_picking_voucher/__init__.py @@ -3,5 +3,4 @@ # directory ############################################################################## from . import models -from . import wizards from . import controllers diff --git a/stock_batch_picking_voucher/__manifest__.py b/stock_batch_picking_voucher/__manifest__.py index d197bcea6..24dbbfe06 100644 --- a/stock_batch_picking_voucher/__manifest__.py +++ b/stock_batch_picking_voucher/__manifest__.py @@ -32,11 +32,10 @@ 'stock_batch_picking_ux', 'report_aeroo', 'l10n_latam_base', - 'delivery_ux' + 'delivery_ux', + 'stock_voucher', ], 'data': [ - 'security/ir.model.access.csv', - 'wizards/stock_print_batch_stock_voucher_views.xml', 'report/batch_picking_preprinted_data.xml', 'views/stock_batch_picking_views.xml', 'views/stock_picking_views.xml', @@ -45,6 +44,6 @@ 'demo': [ ], 'installable': True, - 'auto_install': True, + 'auto_install': False, 'application': False, } diff --git a/stock_batch_picking_voucher/controllers/main.py b/stock_batch_picking_voucher/controllers/main.py index db9be1c2d..f9a85fc7b 100644 --- a/stock_batch_picking_voucher/controllers/main.py +++ b/stock_batch_picking_voucher/controllers/main.py @@ -30,7 +30,7 @@ def report_download(self, data, context=None): batch_id = context_dict.get('active_id') batch = context_dict.get('batch') book_id = request.env['stock.picking.batch'].browse(batch_id).book_id - if batch: + if batch and 'batch_picking_preprinted' in data: if batch_id: pdf_response = response.response[0] reader = PdfFileReader(io.BytesIO(pdf_response)) diff --git a/stock_batch_picking_voucher/models/stock_batch_picking.py b/stock_batch_picking_voucher/models/stock_batch_picking.py index 9a7d6a81d..bc4642eab 100644 --- a/stock_batch_picking_voucher/models/stock_batch_picking.py +++ b/stock_batch_picking_voucher/models/stock_batch_picking.py @@ -3,6 +3,7 @@ # directory ############################################################################## from odoo import fields, api, models, _ +from odoo.exceptions import UserError class StockPickingBatch(models.Model): _inherit = 'stock.picking.batch' @@ -39,3 +40,67 @@ def assign_numbers(self, estimated_number_of_pages, book): self.message_post(body=_( 'Números de remitos asignados: %s') % (self.voucher_ids.mapped("display_name"))) self.write({'book_id': book.id}) + + ############# Cambios post wizard, posible abstract ############# + + printed = fields.Boolean( + ) + + with_vouchers = fields.Boolean( + compute='_compute_with_vouchers', + ) + + book_id = fields.Many2one( + 'stock.book', + 'Book', + default=lambda self: self._get_book(), + ) + + next_voucher_number = fields.Integer( + 'Next Voucher Number', + related='book_id.sequence_id.number_next_actual', + ) + + estimated_number_of_pages = fields.Integer( + 'Number of Pages', + ) + + lines_per_voucher = fields.Integer( + 'Lines Per Voucher', + related='book_id.lines_per_voucher', + ) + + @api.model + def _get_book(self): + return self.book_id or self.env['stock.book'].search([('company_id', '=', self.picking_ids[:1].company_id.id)], limit=1) + + @api.depends('picking_ids', 'picking_ids.voucher_ids') + def _compute_with_vouchers(self): + for rec in self: + rec.with_vouchers = bool(self.voucher_ids) + + # def do_print_voucher(self): + # self.printed = True + # # if self.book_id: + # # self.book_id = self.book_id.id + # return self.do_print_batch_vouchers() + + def do_print_and_assign(self): + # We override the method to avoid assignation + if not self.book_id: + raise UserError("Primero debe setear un talonario") + if self.book_id.lines_per_voucher != 0: + self.printed = True + return self.with_context(batch=True).do_print_batch_vouchers() + self.assign_numbers(1,self.book_id) + return self.do_print_batch_vouchers() + + def do_print_batch_vouchers(self): + '''This function prints the voucher''' + # self.env.ref('stock_batch_picking_voucher.batch_picking_preprinted').report_action(self) + return self.env.ref('stock_batch_picking_voucher.batch_picking_preprinted').report_action(self) + + def do_clean(self): + self.voucher_ids.unlink() + # self.book_id = False + self.message_post(body=_('The assigned voucher were deleted')) diff --git a/stock_batch_picking_voucher/models/stock_picking_voucher.py b/stock_batch_picking_voucher/models/stock_picking_voucher.py index 2cf87d0b4..c0cd3204f 100644 --- a/stock_batch_picking_voucher/models/stock_picking_voucher.py +++ b/stock_batch_picking_voucher/models/stock_picking_voucher.py @@ -29,14 +29,3 @@ def _check_picking_id_required(self): for record in self: if not record.batch_id and not record.picking_id: raise ValidationError("Al crear un voucher debe estar ligado a una trasnferencia o lote de transferencias") - - @api.model - def create(self, vals): - if 'batch_id' in vals and vals['batch_id']: - vals['picking_id'] = False - return super(StockPickingVoucher, self).create(vals) - - def write(self, vals): - if 'batch_id' in vals and vals['batch_id']: - vals['picking_id'] = False - return super(StockPickingVoucher, self).write(vals) diff --git a/stock_batch_picking_voucher/report/batch_picking_preprinted.odt b/stock_batch_picking_voucher/report/batch_picking_preprinted.odt index d49e1ccf285412de0b0434e4295f87ae50c56a02..e1cb79576acfac47b25530163d2839a365064fc2 100644 GIT binary patch delta 25305 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 QZJDfTM-7!}^^d{-0xK@}1^@s6 diff --git a/stock_batch_picking_voucher/security/ir.model.access.csv b/stock_batch_picking_voucher/security/ir.model.access.csv deleted file mode 100644 index aa0d6a2eb..000000000 --- a/stock_batch_picking_voucher/security/ir.model.access.csv +++ /dev/null @@ -1,5 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -stock_batch_picking_voucher.access_stock_print_batch_stock_voucher,access_stock_print_batch_stock_voucher,stock_batch_picking_voucher.model_stock_print_batch_stock_voucher,base.group_user,1,1,1,0 -stock_batch_picking_voucher.access_stock_voucher,access_stock_voucher,model_stock_picking_voucher,base.group_user,1,1,1,0 - - diff --git a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml index 10381f049..ef0910632 100644 --- a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml +++ b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml @@ -6,11 +6,13 @@ 99 - - + diff --git a/stock_batch_picking_voucher/views/stock_picking_views.xml b/stock_batch_picking_voucher/views/stock_picking_views.xml index bcde9bbc2..cbf60e872 100644 --- a/stock_batch_picking_voucher/views/stock_picking_views.xml +++ b/stock_batch_picking_voucher/views/stock_picking_views.xml @@ -12,11 +12,24 @@ - batch_id + - batch_id + + + + + stock.picking.tree.inherit + stock.picking + + + + + + diff --git a/stock_batch_picking_voucher/wizards/__init__.py b/stock_batch_picking_voucher/wizards/__init__.py deleted file mode 100644 index 4329a8de7..000000000 --- a/stock_batch_picking_voucher/wizards/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import stock_print_batch_stock_voucher diff --git a/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py b/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py deleted file mode 100644 index 25e3ef58c..000000000 --- a/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher.py +++ /dev/null @@ -1,105 +0,0 @@ -############################################################################## -# For copyright and license notices, see __manifest__.py file in module root -# directory -############################################################################## -from odoo import fields, api, models, _ - - -class StockPrintStockVoucher(models.TransientModel): - _name = 'stock.print_batch_stock_voucher' - _description = "Print batch Stock Voucher" - - - @api.model - def _get_pickings(self): - # if we came, for eg, from a sale order, active_id would be the - # self._context.get('active_id')) - picking_ids = self.env[self._context.get('active_model')].browse(int(self._context.get('active_id'))).picking_ids - return picking_ids - - @api.model - def _get_book(self): - picking = self._get_pickings() - return picking.book_id or self.env['stock.book'].search([('company_id', '=', picking.company_id.id)], limit=1) - - picking_ids = fields.Many2many( - 'stock.picking', - default= lambda self: self._get_pickings(), - required=True, - ) - - printed = fields.Boolean( - ) - with_vouchers = fields.Boolean( - compute='_compute_with_vouchers', - ) - book_id = fields.Many2one( - 'stock.book', - 'Book', - default=lambda self: self._get_book(), - ) - next_voucher_number = fields.Integer( - 'Next Voucher Number', - related='book_id.sequence_id.number_next_actual', - ) - estimated_number_of_pages = fields.Integer( - 'Number of Pages', - ) - lines_per_voucher = fields.Integer( - 'Lines Per Voucher', - related='book_id.lines_per_voucher', - ) - - @api.depends('picking_ids', 'picking_ids.voucher_ids') - def _compute_with_vouchers(self): - for rec in self: - rec.with_vouchers = bool(self.picking_ids[:1].batch_id.voucher_ids) - - @api.onchange('picking_ids') - def set_book_domain(self): - picking = self._get_pickings() - if not picking: - return {} - else: - return {'domain': {'book_id': [('company_id', '=', picking.company_id.id)]}} - - @api.onchange('book_id', 'picking_ids') - def get_estimated_number_of_pages(self): - lines_per_voucher = self.lines_per_voucher - if lines_per_voucher == 0: - self.estimated_number_of_pages = 1 - return - - operations = len(self.picking_ids.move_line_ids) - estimated_number_of_pages = int( - -(-float(operations) // float(lines_per_voucher))) - self.estimated_number_of_pages = estimated_number_of_pages - - def do_print_voucher(self): - self.printed = True - if self.book_id: - self.picking_ids[:1].batch_id.book_id = self.book_id.id - return self.do_print_batch_vouchers(self.picking_ids[:1].batch_id) - - def do_print_and_assign(self): - # We override the method to avoid assignation - if self.book_id.lines_per_voucher != 0: - return { - 'actions': [ - {'type': 'ir.actions.act_window_close'}, - self.with_context(batch=True).do_print_voucher(), - ], - 'type': 'ir.actions.act_multi' - } - self.picking_ids[:1].batch_id.assign_numbers(1,self.book_id) - return self.do_print_batch_vouchers(self.picking_ids[:1].batch_id) - - def do_print_batch_vouchers(self, batch): - '''This function prints the voucher''' - return self.env.ref('stock_batch_picking_voucher.batch_picking_preprinted').report_action(batch) - - def do_clean(self): - batch = self.picking_ids[:1].batch_id - batch.voucher_ids.unlink() - batch.book_id = False - batch.message_post(body=_('The assigned voucher were deleted')) diff --git a/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml b/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml deleted file mode 100644 index 16130e238..000000000 --- a/stock_batch_picking_voucher/wizards/stock_print_batch_stock_voucher_views.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - print_stock_picking.form - stock.print_batch_stock_voucher - -

-
-

THE VOUCHER IT'S PRINTED AND ASSIGNED.

-
- - - - - - - - - - - -
- -
- - - - - - Print Stock batch Remits - stock.print_batch_stock_voucher - form - - new - - - From d8ee0f3e0acacebd04713c38dfcf940240050568 Mon Sep 17 00:00:00 2001 From: Juan Ignacio Carreras Date: Fri, 22 Nov 2024 15:57:18 -0300 Subject: [PATCH 5/5] [FIX]stock_voucher_ux:dependencies --- stock_batch_picking_voucher/models/__init__.py | 2 +- ..._batch_picking.py => stock_picking_batch.py} | 17 +++-------------- .../views/stock_batch_picking_views.xml | 4 ++-- stock_voucher_ux/views/stock_picking_views.xml | 12 ++++++++---- 4 files changed, 14 insertions(+), 21 deletions(-) rename stock_batch_picking_voucher/models/{stock_batch_picking.py => stock_picking_batch.py} (89%) diff --git a/stock_batch_picking_voucher/models/__init__.py b/stock_batch_picking_voucher/models/__init__.py index 959ceba9d..f9dc4d14c 100644 --- a/stock_batch_picking_voucher/models/__init__.py +++ b/stock_batch_picking_voucher/models/__init__.py @@ -1,2 +1,2 @@ from . import stock_picking_voucher -from . import stock_batch_picking +from . import stock_picking_batch diff --git a/stock_batch_picking_voucher/models/stock_batch_picking.py b/stock_batch_picking_voucher/models/stock_picking_batch.py similarity index 89% rename from stock_batch_picking_voucher/models/stock_batch_picking.py rename to stock_batch_picking_voucher/models/stock_picking_batch.py index bc4642eab..62f385dc0 100644 --- a/stock_batch_picking_voucher/models/stock_batch_picking.py +++ b/stock_batch_picking_voucher/models/stock_picking_batch.py @@ -64,12 +64,7 @@ def assign_numbers(self, estimated_number_of_pages, book): estimated_number_of_pages = fields.Integer( 'Number of Pages', ) - - lines_per_voucher = fields.Integer( - 'Lines Per Voucher', - related='book_id.lines_per_voucher', - ) - + @api.model def _get_book(self): return self.book_id or self.env['stock.book'].search([('company_id', '=', self.picking_ids[:1].company_id.id)], limit=1) @@ -78,18 +73,12 @@ def _get_book(self): def _compute_with_vouchers(self): for rec in self: rec.with_vouchers = bool(self.voucher_ids) - - # def do_print_voucher(self): - # self.printed = True - # # if self.book_id: - # # self.book_id = self.book_id.id - # return self.do_print_batch_vouchers() - + def do_print_and_assign(self): # We override the method to avoid assignation if not self.book_id: raise UserError("Primero debe setear un talonario") - if self.book_id.lines_per_voucher != 0: + if not self.book_id.autoprinted: self.printed = True return self.with_context(batch=True).do_print_batch_vouchers() self.assign_numbers(1,self.book_id) diff --git a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml index ef0910632..96f6aaba3 100644 --- a/stock_batch_picking_voucher/views/stock_batch_picking_views.xml +++ b/stock_batch_picking_voucher/views/stock_batch_picking_views.xml @@ -7,8 +7,8 @@ 99 diff --git a/stock_voucher_ux/views/stock_picking_views.xml b/stock_voucher_ux/views/stock_picking_views.xml index 768e0c79c..f08af8926 100644 --- a/stock_voucher_ux/views/stock_picking_views.xml +++ b/stock_voucher_ux/views/stock_picking_views.xml @@ -7,12 +7,16 @@ - -