From 00eb8c0540c6f243c3a4ab995f422b5492f2555c Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 15 Feb 2023 23:49:29 +0100 Subject: [PATCH 01/22] [16.0][MIG] account_cutoff_picking (ex account_cutoff_accrual_picking) Rename the module from ```account_cutoff_accrual_picking``` to ```account_cutoff_picking```, because it now supports both accruals and prepaid expenses/revenues --- account_cutoff_picking/README.rst | 110 ++++ account_cutoff_picking/__init__.py | 2 + account_cutoff_picking/__manifest__.py | 23 + .../i18n/account_cutoff_accrual_picking.pot | 149 ++++++ .../i18n/account_cutoff_picking.pot | 155 ++++++ account_cutoff_picking/i18n/de.po | 182 +++++++ account_cutoff_picking/i18n/fr_BE.po | 157 ++++++ account_cutoff_picking/i18n/fr_FR.po | 165 ++++++ account_cutoff_picking/i18n/it.po | 188 +++++++ .../images/accrued_expense_done.jpg | Bin 0 -> 68628 bytes .../images/accrued_expense_draft.jpg | Bin 0 -> 70829 bytes .../images/accrued_expense_journal_entry.jpg | Bin 0 -> 52323 bytes .../migrations/16.0.1.0.0/pre-migration.py | 23 + account_cutoff_picking/models/__init__.py | 2 + .../models/account_cutoff.py | 492 ++++++++++++++++++ account_cutoff_picking/models/res_company.py | 27 + account_cutoff_picking/readme/CONFIGURE.rst | 1 + .../readme/CONTRIBUTORS.rst | 1 + account_cutoff_picking/readme/DESCRIPTION.rst | 25 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 449 ++++++++++++++++ .../static/src/img/icon.png | Bin 0 -> 5975 bytes .../views/account_cutoff.xml | 21 + .../views/res_config_settings.xml | 27 + account_cutoff_picking/wizards/__init__.py | 1 + .../wizards/res_config_settings.py | 16 + 26 files changed, 2216 insertions(+) create mode 100644 account_cutoff_picking/README.rst create mode 100644 account_cutoff_picking/__init__.py create mode 100644 account_cutoff_picking/__manifest__.py create mode 100644 account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot create mode 100644 account_cutoff_picking/i18n/account_cutoff_picking.pot create mode 100644 account_cutoff_picking/i18n/de.po create mode 100644 account_cutoff_picking/i18n/fr_BE.po create mode 100644 account_cutoff_picking/i18n/fr_FR.po create mode 100644 account_cutoff_picking/i18n/it.po create mode 100644 account_cutoff_picking/images/accrued_expense_done.jpg create mode 100644 account_cutoff_picking/images/accrued_expense_draft.jpg create mode 100644 account_cutoff_picking/images/accrued_expense_journal_entry.jpg create mode 100644 account_cutoff_picking/migrations/16.0.1.0.0/pre-migration.py create mode 100644 account_cutoff_picking/models/__init__.py create mode 100644 account_cutoff_picking/models/account_cutoff.py create mode 100644 account_cutoff_picking/models/res_company.py create mode 100644 account_cutoff_picking/readme/CONFIGURE.rst create mode 100644 account_cutoff_picking/readme/CONTRIBUTORS.rst create mode 100644 account_cutoff_picking/readme/DESCRIPTION.rst create mode 100644 account_cutoff_picking/static/description/icon.png create mode 100644 account_cutoff_picking/static/description/index.html create mode 100644 account_cutoff_picking/static/src/img/icon.png create mode 100644 account_cutoff_picking/views/account_cutoff.xml create mode 100644 account_cutoff_picking/views/res_config_settings.xml create mode 100644 account_cutoff_picking/wizards/__init__.py create mode 100644 account_cutoff_picking/wizards/res_config_settings.py diff --git a/account_cutoff_picking/README.rst b/account_cutoff_picking/README.rst new file mode 100644 index 00000000000..ceca41b2868 --- /dev/null +++ b/account_cutoff_picking/README.rst @@ -0,0 +1,110 @@ +======================= +Account Cut-off Picking +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github + :target: https://github.com/OCA/account-closing/tree/16.0/account_cutoff_picking + :alt: OCA/account-closing +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_picking + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/89/16.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module generates expense/revenue accruals and prepaid expense/revenue based on the status of orders, pickings and invoices. The module is named *account_cutoff_accrual_picking* because it initially only supported accruals ; support for prepaid expense/revenue was added later (it should be renamed in later versions). + +To understand the behavior of this module, let's take the example of an expense accrual. When you click on the button *Re-Generate Lines* of an *Expense Accrual*: + +1. Odoo will look for all incoming picking in Done state with a *Transfer Date* <= *Cut-off Date*. For performance reasons, by default, the incoming picking dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the stock moves of those pickings and see if they are linked to a purchase order line. +2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential expense accrual. +3. For each of these purchase order lines, Odoo will: + + - scan the related stock moves in *done* state and check their transfer date, + - scan the related invoices lines and check their invoice date. + +4. If, for a particular purchase order line, the quantity of products received before the cutoff-date (or on the same day) minus the quantity of products invoiced before the cut-off date (or on the same day) is positive, Odoo will generate a cut-off line. + +Now, let's take the example of a prepaid expense. When you click on the button *Re-Generate Lines* of a *Prepaid Expense*: + +1. Odoo will look for all vendor bills dated before (or equal to) *Cut-off Date*. For performance reasons, by default, the vendor bills dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line. +2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential prepaid expense. +3. For each of these purchase order lines, Odoo will: + + - scan the related stock moves in *done* state and check their transfer date, + - scan the related invoices lines and check their invoice date. + +4. If, for a particular purchase order line, the quantity of products invoiced before the cutoff-date (or on the same day) minus the quantity of products received before the cut-off date (or on the same day) is positive, Odoo will generate a cut-off line. + +This module should work well with multiple units of measure (including products purchased and invoiced in different units of measure) and in multi-currency. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +For configuration instructions, refer to the README of the module *account_cutoff_base*. + +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Akretion + +Contributors +~~~~~~~~~~~~ + +* Alexis de Lattre + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px + :target: https://github.com/alexis-via + :alt: alexis-via + +Current `maintainer `__: + +|maintainer-alexis-via| + +This module is part of the `OCA/account-closing `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_cutoff_picking/__init__.py b/account_cutoff_picking/__init__.py new file mode 100644 index 00000000000..aee8895e7a3 --- /dev/null +++ b/account_cutoff_picking/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/account_cutoff_picking/__manifest__.py b/account_cutoff_picking/__manifest__.py new file mode 100644 index 00000000000..b39a5f07fa0 --- /dev/null +++ b/account_cutoff_picking/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2013-2021 Akretion France (http://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Account Cut-off Picking", + "version": "16.0.1.0.0", + "category": "Accounting", + "license": "AGPL-3", + "summary": "Accrued and prepaid expense/revenue from pickings", + "author": "Akretion,Odoo Community Association (OCA)", + "maintainers": ["alexis-via"], + "website": "https://github.com/OCA/account-closing", + "depends": ["account_cutoff_base", "purchase_stock", "sale_stock"], + "data": ["views/res_config_settings.xml", "views/account_cutoff.xml"], + "images": [ + "images/accrued_expense_draft.jpg", + "images/accrued_expense_journal_entry.jpg", + "images/accrued_expense_done.jpg", + ], + "installable": True, + "application": True, +} diff --git a/account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot b/account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot new file mode 100644 index 00000000000..bd24f7a4238 --- /dev/null +++ b/account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_accrual_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "%s: %s" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model,name:account_cutoff_accrual_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model,name:account_cutoff_accrual_picking.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model,name:account_cutoff_accrual_picking.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff__display_name +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company__display_name +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff__id +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company__id +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff____last_update +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company____last_update +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%s' or on its related product category " +"'%s'." +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%s' or on its related product category " +"'%s'." +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company__default_cutoff_accrual_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings__dft_cutoff_accrual_picking_interval_days +msgid "Picking Analysis Interval" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %s confirmed on %s\n" +"Purchase Order Line: %s (ordered qty: %s %s)" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %s confirmed on %s\n" +"Sale Order Line: %s (ordered qty: %s %s)" +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model.constraint,message:account_cutoff_accrual_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_accrual_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "" +"The value of the field 'Picking Analysis Interval' must be strictly " +"positive." +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model:ir.model.fields,help:account_cutoff_accrual_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,help:account_cutoff_accrual_picking.field_res_company__default_cutoff_accrual_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_accrual_picking.field_res_config_settings__dft_cutoff_accrual_picking_interval_days +msgid "" +"To generate the accruals based on pickings, Odoo will analyse all the " +"pickings between the cutoff date and N days before. N is the Picking " +"Analysis Interval." +msgstr "" + +#. module: account_cutoff_accrual_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_picking.res_config_settings_view_form +msgid "days" +msgstr "" diff --git a/account_cutoff_picking/i18n/account_cutoff_picking.pot b/account_cutoff_picking/i18n/account_cutoff_picking.pot new file mode 100644 index 00000000000..f88f8c2c916 --- /dev/null +++ b/account_cutoff_picking/i18n/account_cutoff_picking.pot @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "Analysis Interval" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If" +" you increase the analysis interval, Odoo will take more time to generate " +"the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "" diff --git a/account_cutoff_picking/i18n/de.po b/account_cutoff_picking/i18n/de.po new file mode 100644 index 00000000000..2c532b58840 --- /dev/null +++ b/account_cutoff_picking/i18n/de.po @@ -0,0 +1,182 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_cutoff_accrual_picking +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-23 14:37+0000\n" +"PO-Revision-Date: 2015-02-05 23:47+0100\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "Abgrenzungskonto" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "Analysis Interval" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If " +"you increase the analysis interval, Odoo will take more time to generate the " +"cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "" + +#~ msgid "Missing '%s' on tax '%s'." +#~ msgstr "Fehlende '%s' bei Steuer '%s'." + +#~ msgid "Account Cut-off Line" +#~ msgstr "Abgrenzungsposten" + +#~ msgid "Product" +#~ msgstr "Produkt" + +#~ msgid "Stock Move" +#~ msgstr "Lagerumbuchung" + +#~ msgid "Re-Generate Lines from Picking" +#~ msgstr "Positionen aus Kommissionierung erneuern" + +#~ msgid "Picking" +#~ msgstr "Entnahme" + +#~ msgid "Date Done of the Picking" +#~ msgstr "Datum erledigter Kommissionierung" + +#~ msgid "Error:" +#~ msgstr "Fehler:" diff --git a/account_cutoff_picking/i18n/fr_BE.po b/account_cutoff_picking/i18n/fr_BE.po new file mode 100644 index 00000000000..75525bfe857 --- /dev/null +++ b/account_cutoff_picking/i18n/fr_BE.po @@ -0,0 +1,157 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_accrual_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-23 14:37+0000\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr_BE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "Analysis Interval" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If " +"you increase the analysis interval, Odoo will take more time to generate the " +"cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "" diff --git a/account_cutoff_picking/i18n/fr_FR.po b/account_cutoff_picking/i18n/fr_FR.po new file mode 100644 index 00000000000..d4370468648 --- /dev/null +++ b/account_cutoff_picking/i18n/fr_FR.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_accrual_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-23 14:37+0000\n" +"PO-Revision-Date: 2022-01-26 11:40+0000\n" +"Last-Translator: Yves Le Doeuff \n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "Analysis Interval" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If " +"you increase the analysis interval, Odoo will take more time to generate the " +"cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" diff --git a/account_cutoff_picking/i18n/it.po b/account_cutoff_picking/i18n/it.po new file mode 100644 index 00000000000..b0beef67380 --- /dev/null +++ b/account_cutoff_picking/i18n/it.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_accrual_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-23 14:37+0000\n" +"PO-Revision-Date: 2021-12-31 15:39+0000\n" +"Last-Translator: Sergio Zanchetta \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "Separazione conto" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +#, fuzzy +msgid "Analysis Interval" +msgstr "Intervallo analisi prelievi" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni di configurazione" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, fuzzy, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" +"Conto di costo mancante per il prodotto \"%(product)s\" o per la categoria " +"prodotto correlata \"%(categ)s\"." + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, fuzzy, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" +"Conto di ricavo mancante per il prodotto \"%(product)s\" o per la categoria " +"prodotto correlata \"%(categ)s\"." + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +#, fuzzy +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" +"Il valore del campo \"Intervallo analisi prelievi\" deve essere strettamente " +"positivo." + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If " +"you increase the analysis interval, Odoo will take more time to generate the " +"cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "giorni" + +#~ msgid "%s: %s" +#~ msgstr "%s: %s" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#~ msgid "" +#~ "To generate the accruals based on pickings, Odoo will analyse all the " +#~ "pickings between the cutoff date and N days before. N is the Picking " +#~ "Analysis Interval." +#~ msgstr "" +#~ "Per generare le competenze in base ai prelievi, Odoo analizza tutti " +#~ "quelli tra la data di separazione e gli N giorni precedenti. N " +#~ "corrisponde all'intervallo di analisi dei prelievi." diff --git a/account_cutoff_picking/images/accrued_expense_done.jpg b/account_cutoff_picking/images/accrued_expense_done.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f34985d5c844e50c17f248604b502d5705270c81 GIT binary patch literal 68628 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 literal 0 HcmV?d00001 diff --git a/account_cutoff_picking/images/accrued_expense_draft.jpg b/account_cutoff_picking/images/accrued_expense_draft.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a0033677cc41d859da7a67f03ec5d9f56ecc04d GIT binary patch literal 70829 zcmeFZ1z225w;EI7Q*k^h`CbMM^y=G}kZn|c4{`{-S}R;^mKtX8e6y)VZuzXI+({SeyMg<6hp5fT#<5fTxRkUydzA*CWCB6>jgfQp)$mX?-;f*wdu1AIh7OY;-S6H*XQ( z;Stb~5|PsU-@YzC0f_Lfs$Gk?c7+~rmFUVfqAQmzfJcBUfNQuR;0E!>b?wH@>$k4r z{j4>-55N(B<@)v8xA1P^9^bqMxN`N{^&3RQH%aJtzLRR0#oi*L=atsfem1}-1AUE% z!%{E^XgT{g4U#|5v2u$U!UMX*f0lK9lUZ8EC~r~0#4l%_wNTzXheQ7G*KYsT^{>cp z-ojN%5M9A>_WDh{8`rN~yMFB_bytY4;`+QMtr3$saGm&>^Xt;jb2muop_(LQ^N7rumz|H@lY;0DN4Ft3=m`08)VS*U=XA9WQ3;5(V9h@@$1wjU)IM?x7j?dPbKn z0V^(2&o?p$e2emRkjtuMUaHd39k!e*Jj5*f=aN18By1f*lrE6)Bw34;G99sg=aXB& zbL~9VilF2?jd${9a`Sl*f{j^jl~CTJnr~q{Ul09!)?jLSO=-5 zoM*`Q?1u^@@|aZ)q{GKZ6yN?sGG{1agoTGq9kw%|<2?BJCYtje`Zm;KrlkNm>wIz} z;s&OH^&N%}wEeil^FYbCGv^WjPGsUEU`nLRp+{4I3rGFLd-?-QYJyz`&KL?&DrR~4 z7WLr*5Qhnu#McY0<^8@U7gyUAu*y0N{3UUPy-dil{g3{1i}3t}EQ|`4c;iV1ACqd2QZ9J*2lF)*B1x!d!#(dXmQ-^3fLJ-xxc1i7eRR5A$~nviY-_EipV_ zEL+OOD9^#Q=TA9z@q>h#0aRw3=Rdr2=Upm zbtXz*ei^Db?&KG(lnh!#^a6jd>FiB^EY_|4PIAO-Rzlm9R{vI~C?6wIH4j{VezzZh(W_Kbne`t@K=C`U=K6K6%dXGcgudO257WVx$D%nxRxGwB~STquaa3moK zv9i+GVPpwWSl+HSxdec6n@v8TYctr?D`v7nm!wszn$hIa4~ytjiFLdpm-c<%x6!}r z8SGBhYKRSz^iHddwvdtLi0u^bQ8%U3L99A(ePr-_$awy8R@RvqA1 zBfrT63=Cx}M1i9#_k-_ooS}_%OF60?`OZId^vPSnN@f^F{k7_9N6uw&LiSJ`q_=6j zmp8~yrf3^0`4*cNSv@rGzV^HuwnRDB6LtyU*{Ho|8`8&b#dKnQ=LG#zCn)hSF8BfZ zH=q8hA(Vi`Ulr!6kv|=|boA~2zgGo_m@Mjo zdJ-A!iRj8?f;$icY^`2SGh%QWq_!5uNj|?;Emc{pl#U}d@MCb~8ei2ZMebSamUOgl zW!*^aCloJ-4HE&im4r+wy={J^;Lb+};zzI+qfW!f_K!z;)sEymZkyEx3DaI0y@mA3 zu2JQm-Z`*HGQUyo7@gqpinbuhsTS^g&RP_1F5RUZ3R$#8^1ee$CepvJ!O%nSx;yz8 zjryI*6+YEp-7{2|LJgVax-A4)>>4w>8>*}|Y#7y@v^Gdbt0qnLs63}<$;yEWh{Jm8 z`3xQ{lX$<==BeuR3J>dIG%9qL%G3G$CI79a+52huuy!n~6Bve5xugU9bDL4%tzVMx6 zl8*k={X%;HE6{r-Urc)ms;{)T(WX(=vO`3Tuta#6w6A@YsiYyycipd-Rkcn1CBNl1 ze$|u(pOP)D9F$-U`kas9t6`1fVZ@AdbXnv8KBZtV;i5nM#b1l5@hdOnE}E@r!XG^p=>s11ID zKmmRO9}(9WYet#iNj2gSxiazKVqXoSv7-ns>1dT58Lp)F6JDPOOPSR$qi|zTxmNtG z)^9zsmSoPzO*3mtllJ&az`>KjG(w zN(^wFs%$>zq1p#(4s?#d8rugA2}|-BTW>XZg*G(f{V*{^isDEjP~L zPp6+}`GFu%RFg?=foIBqFt3xzLMl)uhe%&lYb0wvJHL}X-8iI)d-pLp(yN*KMd1!L zdvWe1KrsI7(_e1MJ^zDBI{kT3T`cAj(2MqaqRo3+M&+;OE*B9SPf3(eQ3rEYsjO-# zXQ!mx9CYP8duq#j7-X{Zvx%|Vg#-KX>wnz6;@JJ4t&%BkaVxG%Kbz3qyTzzOYHQ)X z+~n?JtekM)V(~B)f~bZD5}|E*zh)oKeBv&{50EQ}w)p4Ifrp`?*xpY5RnS6FB@;Mv z5Y{Xc0UQh~WvNcsr?~f{CiWjh1N4`+@$2XR9L2T&imE{C;5B2o)Nw`0GTv%|;Ns9T zlE|7N7%(Ve^qws+S*5rwd&XULR zp-HDZc>{(%9Z8`mJCg^Wm}m7J>w8%wTDQNFQ7QY=1-;G71Sjh`dW;wXh?LKVslirx$MVw1y?~njIEAhvo7HsH&<}W2Yd-7^;{U6_pw7~K^KyB zpH;OFo+YEMSW5J`dyV#fDuzvfnwc&09x;qKtJgBQQe+g|QpCU zA&x;!uR7LDcE^*I2`+N_^J)cQVG|5pU`omuq*H06WoNzy{UEH6o*xWn&9}2-%cRd5 zlvBazb`Hw)^xq{`>?ro2cFlk3;;r41&KAQZ`YoBeW-?eia>*@iVMfk80x`hx$vv&d zM{r6g4&pBQ&?3p8u2&rYe2(%f?}}zBp{nA{=YD0XNwfeS)X2dGA-_nY5UP4ubqV0F z-l9Q*jhbG~s>ai3F6#eOWwWvteKn64(COOYu0#f=e z0a*3*odbr6_rBkwf(tFD!(V!@I8M3bLp+r}@#P+b8=gt^2O06Y3=vUo-p))gu<&gW=}`qlGb`Qhea8ZipV zk9xuWSymkjxRmIAs?+wNti0JWW zifHSoA=YjQ`*Gbot>*~!b?BSCBid!ZBJmQSOK}OPv3EH-iTP$D^+KV=MVsw;u7WLx zNI2LNnw=Lt7*JkjA`|CTLqx2+b!V8-1WdRkLt5ZWxb@Fot2Dg-pq+=C=!Q!!0o5<` zzR7cC!#Tj{uID?JNQh>bBp!ohOH8_kv7GKEnE<^^NQGcxIW)Laq#@S+W9;m4?@Dt?G5ZM!XdXe*!ZW5BuvRg^ z8$i|3(W%2ZP835)`!I$Ovs;0d9x=}2ddt&Buvv5-8)|=owQgRg>T~rH%@x^)#qA*O z$;E2Km=g2Wp4J7z$*YpGW+9Jz!<7qeu*nc3y0P-+V(*rITH=?VmiXciJ&-qXkcU%y z6zD`<0tyr^0gfGu{{T7}j6@#`fK}3z>si?xEI(T)SH<#fu%o&zzEX_el;QAyOuR^m zSBC#e>1Se!_X;k=4SU>iz4rf0Rrj@rFIJ;=@ck~d?nL;=Cz|AxQUMLT;{|_MA!8R? z!DQjZp!PWH#@Acq@iGRP$V{ek*@)T@XI@ArNPfGN5RpF^Ufma-?vhH+dyewz0EZT; zJP?)iFK8~1OITu1rNjRih*8m9w=+--k6esDX7XK_@{RGFd$ElQJ5%yIprWPH^vNV? zP;0UDW>JdbR<_TQ9C|A%L*}o~@^ov>y$>8T*8}zb?I43UOVM%ruX351cdI|Wzvp*yevltvj zbP1S#r#w<$F{i3Tq1hhcS%2%(=LrGbi(}eT<(CAqH@-#!^Y+)a6`zej_m*A@`-AgB z#32_EXFhF0lz4P}4D1iW$8Gw1>7s^A$lNSxs(Is*2r}~681gOKvxUcnl2p6E4zx0n zZ6JlZQ3kS0K!OkLdGxUHzSDth+}ge~f3liSdfW_toF` z`ys3CG0-@C3kSaNBQ5zT*Y%4arw=i$Ra}yD)!a(@pQQX9KP^wzY1G6^r}@5gU+`BDoOX@e?P~ZZf z(ZAOHwauSQ8F0aWoBG$Pzc%?_hfZ;L2%ZxWnE7mdFG}Mju>E$<0|&??W->2sI<5>% z_1t)?z>~T0)ex*um3RqtKIm8T=qX0KtFDvE2h6mQ@(?j2L7LsBQC+V zV)_>m|Gmwh>hXUrLRsst+nQ?;jxCjg8AH$NiNMU+-7ekq+B@1`<`EVz3SOTLQkA1i zZDGVqIXGE-8QWOncO{xC>)@r3WXpY-D|T=u+p4v#wc^_tyt;!S2W#ldJMWa*twuNO zXp0St%$Cg4{0{e2ebe9s_>jCIHoQAvfr-9 z#UpemeE(Z|?%4a&x&G0ExVGwns>jCBtDJv}^nZc=@5TXzIa`@k{th+lw2SEUi!bFp z!!B)?0MUg$DfGcCOyq~=cbe&2PqDB~_-2pB;-FhEP0*;$kkZ&L{@X}DrHuxx>t^m( zTI|VoMan7b5y5Q5T2(uZs%foFm8!Q%J1&v$dSYt)BR1Vq>dNj`Ny%paoup0^|IfJX zwp^7e;aw@00sEArdR&Uj#fGi-mbPYuLq(1?uN>6;QQ$Q5ewgomdd5X2>JJ-`gnu9} zG)NZAI;?B0siw9QW-Y@H><`7vVEWGe?*9SBi%ovqVRV$Ax}LHJa2lh>xlj`9dl*(VwXOs$ylR}1!*RiNdvJFmx%|25>H*J8CPV+`L2TVv=`r6&EX2m+ZC}zMzOzB{EQ!Md1 zEAu|0E3(1y;eD;<^wZC}=k7MiiTW2QqCU1Hq$IeE-qEJvp{q<%t}f`BIBwI0Dt+-* zFlLI9_a09fO>lbgQc7iQ+NK;;8pSgH&@QwpIft<`yIea_D+fA;fCzUcRP%WwtUxdz zoeq0U{ID4x0~wybjxkSHw%d5YtBF!0)cb5pW-q-_JBs57acWZ(yQ8`-Rk8!+iOBq- z@b@Gmn8UYw7Ad^aLMxPxjATVMJ{{lRLL~5}Me!s3IfET#1jP-y19nL(DbvP!62cIX zi*jBk#f(Mdk+D1?eL0)^Tk+%=L3W>0dUj!D`9tU#_pm=VFVZkj%_^HWMm^&8hCND* z(#D}XzMG6vZ_8Nrls?fY(itL8lhxV7%Yv%uR-Nh_XD}=>AQBLQ-)s7wSA`VSUBiIPgBD@UbX$8qU2&L#zSyv{6rHcSrF@ksh-ATGk zQ4?x#z4)om^W2QM?%pai{W2ODZCe?l3*K6=yW4nEbW(L-sWVweGx(k6ms6*G!9^;h z%GNmXkRcym>2mVB7^)35dPiiTgC*;USWe()L6UOkhn9s2N?nUtj4_5JoKrIV1|q?Y zk5&+qYv*iz2>aI17I&3H)r~bjhs{(SM%B0zy?o8(r*K#=3!*DoBeyU_&M+{n0?Y#^ zy(8XEmeMu`XC}+`luJ~P2ZlV1fRqInjjqwskO~+X48DK&T3y7MVYz~65E)V~fHW!` zN3y?m67&7+`!ZdD1~Yh)w|+nqqh?D?6QHgUvZ)?W*x6fj0YiF97zu}u4~!R!F1S~H zbDI{o*_=og>M>|yeu&9m|545bEdb}RBNrNgI1Z8K}C<}2x0H7R$&h2B{&;*`Xw6g!zrHo{H}q&^6pI$5urXc-2dixos1 zIX9ZLLEP?CN^0`t^RGo4dk0S_Cuj}ig>Qo7ve*+p+8mgK7C_lCS%dT1>#@Y+MMGKd zD&m7TZ5`XP4Y>CTP2cMr$qm){V)Syd5p(suB?i$>d_A0Ji9WQ$N($ThrJ~Y%8=Y zlmDa%Q#=$4NqcUfLjY#k7^gGhu&oR}AEge5)$7tFn3yY%q{8+Wu>&`T8JjA%Vu9Q2 z@Vj-YA2a!K=R{BUGzFj5ya$v*TU}5XVDfdf2#^{>O!9?%zj@3&KrDRQVx0k2xEuJcNZ=zJ7R=Rc#EU*zX zaYeWzn<`kzVnPMdO`23qtmaI#O-^Ra&4#?u+1KM}q#5bd9&;OAGnnAaqQNo*)^ryj z-%}%@-=FfMvkO&rx+~zIo-m~)!pJcpGXV)7+OUPVfRU)Kb@qhw(Rr!3{@ZLX1yt&q z9`dt2w3mr&#&d`>kaa}0ebmOg#sI*2tvj%-_%WC%|`NnZV_uCqmez_XrsSr{29g8Y=LvBGE1GSmh z8Cf56C8v~nMUphwg?&q1g#P18MSkdD^~49XA>LK-B+&Iwqy!EjFKy9 zbo$|jg*09Qq;OkdbvC;MvD-Ary!7f*K^P-$j!OsQ7P$Ows{`#2R74M?=f&7Wyn5;YUca;P9S)XM8{KVT9`IA+51{!x*@~ z&wblc@LQT+f~PDxEh_SYdx8&hJ&lSLTHfBHewVD<&KTM`I=U>OcoxUE9Q*J2;w!CLM7vm`;(q0FYXcKeh*Q=d@+C0+!i1@rDOGp z&5MC?Q~8LR6NA=@ zQ5EH1#im9s1{uasJ79(~nX*5H7iWv<6|M0;Qo-64la@P%LG@+$SoK=8ePCSJ%O{*LB0 zD4|Z1kWHEsDDPshHE=8rMLV9q=?hb+)^ROr>u-5!Fbj{#lK`ku0t_odG7GE=H70b&fK;+0dI{QpF8>lXBH^^Q| z8I5hugIBagCJH8qC8;sy(t^$}0q>nKGsHH8D)JEX!AvoNQhL-R(U*884Pgt5z`P+) zvYC7gaj}9O{@8%tyU<=fnr$`6TAdGdolT(*L%%Lp*NC1)dmc+P%%7#x9hk2ABz%Z0u+NyyW%daGeBE2PM+InE8@Gj6Y? zhw947Vq-w7aND9WY&|2OWNSM!Z{bMVwQ0VSXAAUNX~9XfGSa{3GS@M+{bzr?@NAs)qLsipD7WY}eSkl!hfdR~i)gvTO%vqR`NKM$HHoZtH9vS}jndDUL@6RN zm16FyHWxIMgFE8R%%3UpV=DO-`RXqL3zhZcRH9sUgLjQ?*@D)s6i`C<(IWS1fs-L{ z2p`i(79<#Jk&KK<%m_3Mn6{K3Qm0nFp(xv`AIo`L69z1*hDIz~c*TJt$$4kn-4BY$ zg3I|xOt%p>Cm!JHoN}|_P*CmnG_qXB(cKR@CfS2Yv22wPt+(bCC(i_(9*)%@ph{jA zVdHYvOMdTG%vEd!Mp*Z2`9t2*=839+M8Y}a3VY6PX3ZF$Q&1RG8$fOMZC_FiYr9ob zamZ1#YAB8gR0NEb^}~GT!Shi)BZ|f9PZ< z+wy(gc4iw!&ERy^(D(s1anBMwPW2J1-QC%kbtaG2g+du%>%C0z8c3ebc)VRo&($@X z9f%Plup^vMV5#EXv;$;sTO*}@PGO<+e?5Y#csZ>YvXwU_c>N!r5NYVmM%I8 zmo$b}{7xU3o}wbBZ%S>*;?iTg$?zkGnr~6UzEKlFL(jj-+DdL5YkshOsL@<`FOT3` zo`V9xkYI*bRc7TQG4+X8TfakH`#%Qc^9w&Osv9D>`SAdR^Yzzg_^>_;!;KS^8?YqL z*-OBP;U(Z}=G-}Mfur`lKwx!emizS%)E0uk5L5Mb>^I8a(6wk$*Rs#CE=twTPtIRd6Cjmnvijw?welw}Z$ z?&goN2h-4ws-QV4?+wo!(M3Cm52*5{)?QqYVFVplX2WfGYfS+H4DOWFHwy3i!7DN4 z!zZeUMCsBRI6YqJXR@LSe(izW8##@miW3bGb3OVy-8xorAcPC@R; zM(m3_0XgwJd(Vbz25PJVIf3z%rp`#B)Tj-fBGNTZgR}~xB;0N&wSK)TxUd&Bgv=X6 zJtWo_L(6~a#>R4kX;E)i({G*B2^MC#jZ6w!@E4^dsQKQlJfuZMg%I{8LBceKhTSwV z9ks`ObtOC~A4YEphW((J%uj>-Zkiduo|4$&fZ ziYn|s(RrCrGffa(=O2?EC%53hn8VX+>kN}oEQ2bAhJ{2g1QwVjW6g)>J2D$75k4(y znihr(Vpd8rL;mbrQfy0gKWYhlEN@zx1mry@5CXH}i@%AUkMA!4B<{xi%H)*MKw2vb4(B zz2uUv!d`9h)P$idLrzwRl9C$|OstI6Crjef7^^OLRg!4~t2i{PrhC5l{%v-r^ROBM z6kjnx5~|NGSi<@+!Agf=CicC4LwxVWyV$XVdwKmEH!KHy#xDVQWfP$ekdJjzAGl8d zJ3jhfWjIYWhS*94)a2yG2^2Ni!&S{H^M(po5>m%0Pi~kV_+6X`9bUb#IoIu%c(s!D zX|G>?KzZcZ!M-2$QBY)$UOB2xj3IV6_aA_MI5XPL_Iu8~95w8{H%8#Od3!gBwz6bV zisF=2}zH{Rk|!8y(t8zRm>H73yxUjj~7XQ%ESXCHvm#m_#U z3Apz65XOBu&)uaBzAz!`JT^UPyaf0>JbmrQFI8{}I2>rKq1aPc_pV)8zG<|#cWsGZ z3U>B(UMexb#aHhFx9K+vy7+3^OSpasINx{Lx^XselFsFM{5nzm?9;Id;e;REQPk4h zqx6J7vC00~g>P5^Vk_ zwm-Z0UrjLT#Z@T5>PQFpAnu{x#lV>qfI=*-!oL5E@DeZ~rTKG!yg1^y|0zxA zA1Ca;sSu9Te@lfVe=5XJVdFHj;zD+Zw!2B>Kcc}q=j}JC=re`g?~!WVf9hlApFK!v zF8$6fTGq@{wSP9bzE7ooGY+Zz?^n^(!$s=W+y0k;A5lZ&zq8`*zcaij`R~#hb2j9* zci7t1VuUA|AMumGfY}_1v99|?hTCg2t$#3nI5H}`RG^%q#w|T;zb`)fT!OQ1d@D-P zTGUXowy{DQJATl6o<$}8yOG_p?)`Ua0RMXas~h?kAAWPk|8zdQsD9gq)^ckh$CRce zty>}Df>(t|!JoZ)VtuA=g}n%adR;9#6q3C5BjI;n;J>zS8e*_|B8k#3XvT`(OBHDN z*uCQvT*>^NZPwNGD-Hcn+NT1a-u_qT=s(P3-}lgI^DW`TrcZxs!$0cDZb2z0TLhqo zDSyTP`gFRnisHuyTGw0It3y8Ait?gqRTr`Stn$g-C%6q~nf<$I3H`-R-|k~$_WFBh zv67z0{tE_`g3AsD$+N1x@5)KTDSwA>tMYO6vk6L1^SaV6@jBk>@7Cyxn@7ce0DgZe z)9`+mdibtaLPft#6eVAp=d@#=4dpEEIGJS}dT-S^(xzpjeA z`$W`mV$c#FlhjX&W)+}{Y;&jQJkkr7b0Hj{F`Z6X7+yYZm^+s#(F`zA>nez%jWs3c z_&}<@ALv`cz18QJNXR!uP3Kq8eOjLKvc|Jv&Ktn;QU-TCDDlu*_~7}T&u1*f$;ZYI zBJBllleZ{7U44t;%|U|D_mPL!p$ZGKbLQ!wJWOx9yP9g0Fg1V;Y`m)mSS;V6>l;6GwW>M#J9_5 zSv5Py0^c_y@Bo0lUg`=#W*O?45KF_v4e8zHgZ|6<%O3wNGagNQaB5&OX}Yp&Se0ASd)(7xgK z?OxWJ0I~wZ-}|&Wv%`>pwThBIDLNaBG{%Y<)ddvl1acLO0X+NtqwqzoO>{@)QPKsa zboi`$S~*=!|26XQjI$(;I9&Vj*}pP!N;Th zI<306N(4izrITne3Kiae36MTIcxmNc_}w-CjJbnZ)FT4Ar^7cjPWg>e6- z`+@4vLCGzIO&v51Q??=;lt%AU_1@~3Wvh~idJ|mzv5hL~qSruQ%O*cxn>{!W6Oi)8 z@`pRjeMSQqQ7%Sw+D6Z0HCz;zn~tU`l#_GXwWa+YS>+92FjfGH@n_OK$SX#~#t3?F zWf}KP%idNP^nH+PGe)%)Q=HGYzV{?L2{HwI?~r%sxq&;D{VjwdqdIc>+Sh*F3#9{H z|8rTQCu2VIFB4g29c-W-9Y>5H6si|bV$sC;L_vV#Or#W*X(KG^Ogd^trLSUv%IdUa z{(!Y?YIUid9B{^3F-`TD^XHZ{nv@q~pUOFS8+v7QLO=84y-1LCg`_+dLy@ zSgfOcezm&EH*kc!lTrl}xsoQB@zv*ZB<8F`0^b z7-+9al6o^iQlaUB_vjh6K|%ZR7!)fz2bh(w>}53t%JT%ir0Q@7loLDm5`7nHl}ni| zM0OEjCeblvD29AqOZmJJ)t<4+eRHDEBxhuMLzqL>N&OQ%E4sP2==%JS!XhfpmY&;_ z;z}=i;e{zS$=HAP zl2qA<7J+F5bAp9+nB7A27b)GutF$RB6Ryonk)w5Kl{sz^lI8;Xju^H?)@%kRTQsmE zWD#j{5!1(omHVNV)uXGRI`%TkU&Sd8?lxY^Zg8_8hsqLRKoghCv4)%^U7Qd~q;4~B zhqs|eP4MC58Q2xA{9$C#69rH#6Li{L5>kz@<-<95j95J|mL@l2!-SG?9Vk%f7D01^ z*`nNVz!+SMq(I0YA2>@)NtV(08GqL;`uJG8QW7<+p{<mNOzBGR?{-6CPZs zGhzPLNQcX6-%Dug~eLsd7_Swhaewd zCc41*;6lUjj(#i~`*&|<*d^eW)+OM!!raY_vpD|de$50cdq(s;n1O*0GF&f0nX}?5 zHdX8+Nij8?KHSG)3{%k(tuXNCz*wC+e#6QY8r6{&{h0FDk4ZYaL0VR_O;z zAt@U~J?ot>-n)npYlRnkg?~)ms$Hn5JMivpD3-9v>CzO3u7*+DvkJ_LOeHs22YSNw zUz)@|RR4fx9j5Zq%-39~s;n6=jOtLmk+7grZLn$b~;Ga>I9aM-DjTw!?*k4vTj8cX5cwxQE|kL`bEbXR3O=^0%v4cxu5*S#am=fdeKyEBjdU=jbM zSmpEP%4F^JR(H_3?|BsOcPEl2@`ildI&UYucmpkASMNP|drE^UvATax#O+e*O|L^o zDftqA6`vx_ujPiMAza$FCq8oT`fCj3V_16G_!_;6>S&a1WQuU@kU7~!&j(02@pEvyu1t= zOpER_CNceYNiPBRPA4zsH~5p`mjI8uM^C6Up}P6c=Z9GvC{3N97_1Nm4rk4);*)4W zQ&#!C53V`6Iocc*aHqmpQ*K~uodH`q9UMYt8z9FyOb21uy>G)&w7A7vxy!yqmpVLQ zYO+D)#gA#Yz4pZpnd@W(8<}7nJIw362^LGFUO%L`f*GM96tGGwT9Yu&G2_c)(pc-2 zP9edDmrfJIGcQ_XLI;T^k9_e z2ZQAg7V-_30HN1pHShN4FimVR;a>n(5?=jtf}1Pac^44oqo{%&Q(6zbH&WSY>dZra zj3j3Y!^_-J9}1;u2l`pAj6^=#dlj4Jb(R15O3ME`q0PTFeEgLFt&vY z_K9Vo6=+YUA2X=DqQ*QU?Bhyhv|P@6H0E6)T~MzTC>sI=Gl&`b1j7OH13Xln4e>+& z7TW*nXZimfLrK=95Fr-~>w6UK(<6_gR#)Nx8wv!TpTM{j6P2)Q-&NKBiunK6nDNS& zV$YLnsarS!66npM=Z=4i|Bb{LWcUXD9!&yn5;otEK@GsVIPPTcCv0eI$;Arz18XK< zVDvH-mN6hXIkOx_h;P)eI{%Q5-pjy{N}Yw8UU|@d4U6Vobq==ET1E*cM%k?6pOtIm|Im)|J0_oNK0I}F3u*+}c&i?;$9+Tce!RB)f-Z($8t_!lS4S1#bPL@ zY6z$(0$8D`!hId6-gx>{EYg;qJT3gfMjGV7NIe`I!hXzLvxS%<_bududzV8U+l2;u z*B*;6sBaj{=d9ng#ZaZ~aPe*PH*3t;AZ(6#Co!P6Du%@Yz&HdSUoBbRaD=>3lzO6U z+O(v$b|pv)-tM3xxK75O8ihGWKm~T+tZiSFhmkaCgY?@KM|$qUJuZE6~6ynP;C>rP@Ets*kQ*fV!8P zA~s=xi^=c}ce7B-%g;jAVh=w(SpVi*4;g;KAU;K$+n4mNS7;zr;1|pKR>h7anX+0E ztK@<&9ukxH!{$-b{QrUN%Zlu`2ArXRLkWhOLGmpfp$pynfoe^RkO-xbe%&>$!4;O7 zmywGW6+!RB3spYq8l%}Aw92BKqga=op=~BPK2GWmDa1X|Qv0|!6`mx++!@qK6;~$MsmsvHT34*#Fj8NC zb&f<#;#f)0x(H(TV}(%e%0kj)lY4FidVOFbgXy)YnK(?vfiX)4BGwn{C9}(6$LPrv z%TBiKS{ZrzdC5*!OPtPD)EGW;hm1{J2QlbK=a*`58&s|#7^_j>d4g9%L`#%c&X;oN z5g)3(njs!qK1YD2XqF|dTIbQs)kpMlDZ4h?)N)m!NdnxvI>m{-zPXZze$Ux(W*$kw z#;U2biLf}LCfD?9s+6&wLT3Do5C({H&*8+PELo_oNP|!%xQNg1Kr9V$tCBZ{-D*7p-KxCs7IUensC=*#|N8qi7*>v}Geo5X`!VOh7P^iZRAfnsQMgW~!fLN|$p% zgA5swvbM6=Z@@}YeR>eIe=F%oVKg_V5|oY@+OL;$0UqWEex~a!EelA(i*E^!bDy$o z3_kK|N*Q~oS6ReV=L41?YFlvIuSt9my~eN9%Q}TZZmTpjD#rM*mZY?2O{5hncMm@G zZ1rfe&m%+f=NUZf3Qs7&L-PlyK<*8*Mqs$RR1hZq43ZDGSBZu`vZ%c_O1}4ve(qE5 z5Q8*QfN$U!Eg46p91}5Yj$2ZmM4oO!dk!!vz7;DEJKu%7LUvR8m98wjENQ+TWKyhQ zrkU)|lNYOf2g+1Q*CO16zqJ4asm!!lK=^PWd&yIuaV-{NQxnH}%E}@g`nm|9l{@!~ zQg7W45uPOcNgm&Gg=_#QFSj4lTNfko5;$N@ZRt5clePX(xo9(TQQ!taOKZ37VU73808Os^@!DCpj*r zWN_Ga_`Y5rZ6o^1SwI&pI`q~6(`4w}U<~$QQt@l?*!3-K=YwL$Y-Sv05<2DGHAE=E z1}gWGz;X&+rd`};O&kVD)YIB49d&3PlGrP7yx;`XqB84ZY>-aD;RrMCPXUK5O)V0^}d|vuWPPonO$lX$hLBt!G{=CQ^eCPfd%X0J@ zDLEX8x3kaY9Q7wU&vRX-w;!)}q}<}a6Cs&dAxx6hJzhW|$c27Et1))?;3!5TvQ;I? z3(457=e(;wc^!QdA(ndRiTj+}JE)!X*fj(-6v@M)1qm0qZP1G+m<9=f(AT00z4}_c z;DmuAtSmb0`O=U=Yx8J?7}=J$&x3-qs65f~_a1<+qSK_=A}s6syU);@Qy!@7>+Gw@ znHJx!&qhC5My25FKTc_JKwR7t+w>4KZS+$J<;Z*Vhwwq@66GIH{J3I`&y zzT99`f-1ZfQP;R>k74z!0#|{{I+bJ+bOeeR?H+Ht(j5@0xBG%yeStO5`@8zi)twYF zaj{VR-aAnH0=@9?!>uW9=rFsq3*Z_~iP$P>JLN6`L3tJoa74~rnwv)dk*n$~O zM3w-e1I=mAiE-I8(C^_W;J4)HZ(D1>78VX0o5$CG?yxzZ&dzNf{C7#zKQpSwy5i?o z`VMhXmm51S_qyVR%idi}5L$cT>(s@L+f~yg==c)8?}Yt+HXEl)BgIrq9g}&*IB!)e zLLTChX!vSqERvG4YUz;jIWO-F$k@Wd?Cq{)X6V~_Xa>Lfi8Q2CeEG{XeJRIOH=h_~ zV(KTmPb_@=->#uBGn}jZ0qr}6TOEP^TjZUNokSEm;~ou z5Vo_ms=`7?gE-p4op)ZhH0%?;;)feo_Z^WMHI@*E>q~sC5G6;>+pE=l<1s`r6ePH_ znDe$(37Oh%Wo|7;Vzv-Nhpeb71N($;uPq>qjxF_)uU)S28M!9KxISw4zjvpVOIx7s zjv(=rY!n7ct(lKIo+5$C8`0UiPd9P>euKQ} zVX@yfkMJ9cj)IGW{`2Ll2-WD^j)G#BB~>LZh+O+K#+KN-KCD1=^R6oc2h^RB*byOS zIbM_j6e-LI@Zk@5Rn&46;!fa;H+q`+&bfuo2Qou5x|@ z90zJyt7MJVtQwPr4{a_aqp~zII)NX?A@rS)w$nmU*a?V3zhBEJUu#(no^7)vS+z&s zPKqQ}2Qz>z9cCqT>)XPwqlegi^iJI0L=i+Mf!C>;zfbUU25=Io+tZ5bG7nhdcA)0gTM@&g2nJ$nc0 z1o1Z`81J2AcDrP12zMof5OG&0pvnFhnplWdYg9x!EomP8Z(ViDe7jhhK>O`&oVQ zDmEYHw#Bb0$K59VF&4wgF3TaYLU$u7)=A;QqtsBn?_I8+%pfXM9POO4LRg9r&`HJKb+s$Pe;7Hld;<2Y9r{3R9fL=`9pGOU^EUnl>{Z2*n_-1%J% zWiiOq?#maJ%4L9icgMyqm#+DF;-c7Fgq)=r`*Xrh)g;Z`s$JXu&oR}!xm>2F_?=+2W$d55&f0?6ky& zAStO-4`-iyeFmjzDdM;1>C)BX&k8`I_$U^?g-1;1Z+co-=vLN`Jp4-T)cU|C?d~cO z2D(<%gGuJiTg@&Un&)ML+VX06()cBK9X+4o;{Soj{jyQM{vE9%#QeTlt!yDgFv{YM zjE;Onr(S%NPkpn@6~krMVjoMBU@Q;AnP^`bxq+T^mnx-oyZD@ zX9ab|y|Jv;$t|{02t^u*r%pMRN#z;6D&-^5dk~9__gIkJtbH;nsU?EnP=V1)4ioGo z-*pOMENg81BD%P?o?Mx04C^SJ|G1vwYy*cti$^HNF-%}n2R6>u=HTI1YodnG7*g}} z!FYYGoGkHS&OkX?JWFNad95A(EbX{5dQF&^BYjtU!!m;eqlj{^h8xH@kz5I)28K^^ z_9B73b_@cJPM%}+59=9huePNPsknM7TCmmmmb0O9qZj!sa;oV*e9SqELm@0|AVLLE zaoM^Vg(ksPHph{JYaING7HrpnycOuyDpgK)2c1qJ1ekVbw*81kC-A-KGqh;4V!Rk5Kp!SbfHW&fm#oN*MfN91P9w z5K1-J)9Jm3!rIVRopF2D3r@EMO~C1H5jci&rU2 zXV}p3Ls?E1xBm2rX1e z0@4)-B?$qN(3@L?KtdCw2nf0bq=QKakkBCnLX{Gls9U9Xl7Lc`UKOQ?V%d{3=bpaq zZ`RD5nYHe^{F9KtTFEzg-}m!8pYrgkv%NvfhW?ig}Y+o;LQV=n#P zZfQXEv3Xb=uhg4T)LQy$3d=cNl>P46BJcz;v5{)gYxYv`gR$kIgL(^l?a7{AHrJrV z)+t<2uI{aF-#~e^`D4DdYd|vs(RmRWPZlEMiWT^ zhF9Bz)vhGelAuoZPfLSC^z?i;&b_bUD|#q z;XOC3b&3l%0RN+{^B+||{{~S03A?oX+WP!8;^DtSlYdea{fA%fSN;n?(GecLe&gFTUG;{o0ancY1GSyoa}G#D9b?5C6IsQHWaqeHOn{VJ%LQ%R9DTtW~1h*nW?k zKJ60m*gWf(aB3N3nOgB`^yxaJbWGMNFhj@cMdp<9Y5YBM&-Qg>a!7o`K(d&xnY%?A zCwog~WW%yBGmiF+K==gOzqnXFs=!q6eO=B1?nu}9k<_}36Z|{fxsEjx_jOTPC$1*H zeg3`(voyq>{XX(Fu&th6@ndql2%{x1JqjZNd_p%erX zqBTaQ)`L}gufy(K`n=mjiQVvj!){C%(xg?N#&c6288RLufb_Hn90b_qFK}3M*s!<% zJrjVHQ^MYM`J1OpYI$-kRoDJ=+n$=+AOhmO8+_do3uT&l`cpZU+CeB+52#ySXFIyY zE$?i+Q?mIOQR2@F$YK-Wb)vZZbnr}wwg?Vz_mO!*PhW>?*md73RQX=!lz%Ne24#%z zJw=u{OSIyeVnfyW%q-UqlBl*uafoa>RWs+>yyjfdaXSdPKge(OgZ7?RRN2+Nfye0uC3@)Q6sb zQlKGMtVFp`*m6GgKt-IS;wN=N#0)3tGg~Cah>gU z_wLTK44^<$yfjmNC}-|mQExBZ3UB^G$)3>Ozxw?-VYT2RzlItMsAHa8-lN!2Z$oE% z;q0u4R;pk#a;#nC*mQ+3XVLRjlMkT=ch^ zf)FCu#`zByvAN|7qjR4`8o-WU7KW~Y%@b(%?v!P0g)2)$xyF~@Mz7$#No%7_UMYRM zclA?2PA;C>k5ZD4GL)nNkf{-E2KA*A9{5BWz2_V#o>9@(2mhn~3$RH722ONH9@M?b zGJCOdTk@}n0LwgCNK7FsEtkBUoyYe)QK^dH8?g2CN3vm2htma-RLfg_q}aG?!lxjl z_>jrYX8@I7(S*drspdYwkkUNn%tit1!}iT%Or5x}*KwMyXvSsp9GYWz7y2=aoIe2r zsk~+OylvqU(WlRUt-C1_Z<4U&6=G-Z$^NGGE98^??WCY{;A!~x7PETGxnV*ynX%sCVTKrf| zAouNq#FGZjiQaHQQ&h!LVd$Gl%V(uvAP}fk^fKR~hlgiNPmgUGjQ!KH?Jg0k6M+0D z5Z?IDAiUI3YjPFlkdVM78&7M!&(+`m5Gwtm-YoA^_CY-F==xQMI)Oxtw4K6tn*LO zbQsJfZh8l!1FWhRz{^|F!HO;y9p!?wt1fWXk zV-JG`pTJC*M~R<&TngD;76>h++}|Kvba-}YW;iyiqx$CKfTiyHp6hPsm4qhoO0^x2 z_B4I!-^EFsa&j}896sVSXbP9z99o1a`@7v49rbB=mt$YHE-wX~^u?A|a0A?9fu+RX zw-{!@Ir!bYzNzGgsUMG-Jn?S^t_{Doo1Tnq7C@R|-cABVV2Ufm>JUk7i7FLuAvv5H zoXBWU6j=Hri`EYj8&m+u$o0U{P?LIx==Jc%{8>I<4CoC{ zE+CL9^hB^kFi3{nHk>e(_01t{g!U`+xki7)a`2T@*sABOOSZJDaN(oKyR!JaoEJ)X%`Em8~HhpvXx;mJde!*#_*fM)L`~Z(qf)aZmXlwH+D@gR!Z==zh1UqUZg}A^U|#;e zqlgnvY!LpkTgLk>Yv5+?cfIBRzJ76&)uSkY97R+2ORmdW(3rX{#@JQ+ta$88scAhT zK#AY^VKh9LRX}bg*+rj8Z6#|5aUJAT=g#k)MMt3?C9U~8Ab>76#8Y^k?J6HN%ba6W zwvCOgJ;889_ucYiJa?&lc)KZac>&m>LtaYX+ZK}5HwzP| zGJ)J+GXTsPZ0YRt#58a=iB^jIgv>O{TylB&2f=`Mbw-G|6oAs#Kc~4PEHBUB`^N|g zj*jUTu$1%g!0En^dbM>-EF5(OELr68co%$sOi^#(CaDQ@Ewr+3i9m20-*-^4JHT$V zEM%LH&AIOXP;mL&sc*A56kl=yn7O(+wj_p!S-vV|K#OP775c@=En9Pb`@heHs020F zgm`E(d^+!p30o5p01Pg$*imGWKOY({G4MsdGiX*O@xzNh#mK7E={`z>Vp@{Upd~=s zQ?5kz0%7I5*UNam*9%rS#VFoq2DQ94?4Y}6AU{;KNZx}q0fBmDe|Se#|f4WoS6&}DJ|9;V))#)^>@Ho~NqIjpj*N+xHr2I|RVCQe1-=8HOy=X9x zw?()r6v#FZ8k@L&blO0bSFl2Di!^mysI)TIMP?A63BOftF+lZ_?&@;^=*rY>4^`Luwo4n z|52t^89I5(C^g!o*VJx1A!(c$@2QKdk$G2Pv#2U_EiXdXqf6Ce*S>y>#{Y zroQG&(}U2DLjmpw1`eE>zBu7P93B`{`dqYp>-l3{upQhff$Z1w0U9}wJgZHrvROE1 z?w*Oq3Uc%0ttKqK`d6rV=lw0l5!p!`cR#rC&z?CCKGR8(NGy+BG; zV*Z&&5gbA!FMbDtVOzQv${toyN)}-$cgF0E+>6jQeY|QJd3CDam98sxH82yJ12;s- zI_Ho&MZ47nR*$CxNH2yj{jAa5D&U(wMo;$-yHLP#@_+g(id#1PHI^ zu65=>PXhN`SwjY8R}k2}dpV0GhWVY5dWqV%8=FLLzj*sR4l*eBqmJsCL_z|2qoDJ} zGv1S0KF@sMESf^CznqynSPHcJrm`}(laoMk%pX;_eIid;z0(JtsAN?ZapqgVv=BE+ zO%FqX?8~%9P0&j2E!s8{X6pVXuS#HjQ8~^gm|K;t8ju=qd9DyQwWz+M= ziJW`7oV&&M4y7{W2Y`1)6Mj@gM6QFJ5<7`^-S$N9sKE|SDw$IzwtC%_)WzMhkL>(- zael8F%S4nmStdb8+s+sdzMvrzMCS_YbxL9k=u@*$c`sj0N?sfOP%5gWpd&t!|!q) zrc%_T{ED%*UUUc(V+k(Hm_msse21`2>IY`SuYXMhzgPe%@u%3I+N=p{R)>{64$}`l zK`MK#;z`x8UDSn_D;~2eI7CsvK@(M8WTyH%WOeMI$Z4I=67K1Zg;0Z?y3;RK*>jdl zvV_T)Ii0_G%w)__#IlG2Y&V5V(eUdCmOmIKpX#R>6<>_ z_)(emu07)&(T#YuP9ky-d%qSxHkKN`*LraBMD9I*PHNYvZFWY|v$~2A*T(@uVK!6M zvfTu~CBHtU&jyFsgqtA$`dC4QZ`WjC(sPFs@!k_o^qAt6^@%%7U`yx8 zCD5MR3ygcuU7_+63Va*+jlAh$FLk_md~$72+rF$nlwv_;3$1PT&>8a}&y_^EiE@q^ z`Qu%ct{ignbhBpk3;N5gjDCIZ(z}(p`X5ekQPSj>UTSB>eVx*;6kS)NK(p@ngp^T4?hUG{L^SgEn6;E2YGabSLftYex>IfV%kA+Uwz8rD&yyrIF zhAW1X_1_pyk2jixn0qJU4H=yRzLP=lqzw?D?%na&c}n7 z$rmvZhw}!JP<+q_?Q5cbEq>KR9Cu_@fVY?L{pqlkck3Owphpb)}E1GqKX5%VLE+7nOR@b9oBqm>|amHo*)>+A>oeG6D->f&QCc z8S;RZQJtBOIoL*mRt_Z`)*7JlqtjyRq|n7Z^QSrC{+b)ZO}lZBc`-xC_^9iivwDL+Ghj3X- zrB3U_Fl0&<4OIcX*I0NNLcM8nyD1iGI&0q=@{q+tV?`tx6f2Slj?R8Y*@5QcWLX5r zNC@kVhM9vjDDIw7uQ&hYNV3KMXQ|(*z5haX|9kI<_R1mo|J(rPc7y+i<>#Lm?|&w_ z|BJiipKUk48;m5pn|Yxkd?@VUA+NVsxTeM~2q}^YMqg zZJGrosQm1Ypd*24xWe}`l=-Uj=G^>_O`;4zI3b~#Hz_P8PuNQP*V$OMzJbodbuX9e zgR0+)F4!-#!ak&!Rvi&geT6}>ZQzfyRluNA`Y<``UbAaLc19|R9%kfzf%lQ0E+voZ zcy^US+HefeqPpylp5Q@$5KM0De(kfPzo!CPMjkR>Fw9Fu*RhE#&diOaXkjUOg(?s~ zx!fQFj1Dh4ey?zB4MGq-fa+wu`klrhLv1!}G-VNRnB20DDNglhJ&d57%&-@`Bk1M+ z@uSDO8{aO{v|%AJScH5{j@)QmbERhHsUEr*+1Fv;%*Duq0)N7ad&sOWL;s`4ux?VpKC+7$uNa8>P@g*3>}v zS_YH+MYl|bK(xO-N4RJ*5@D)Ya@V>JdP`Wg+FzVf#X>kb!evB1z(MoH(qOS0XHGp& zPW(`NqeELl+^VSN$(y?AF2vO2-C@J<$b?@a%;w3r>e0)2C9OI_V{h6M)UyP1zE*CF zIr0NFpQkMnXT$VgbB@xyx^uTku6J`v?h4DlvV2HntLT@pys2IRWqql+%4=xLB-Uj|Y-Kclm z11v(4Qh}wE*A&@`D#03y>*#%VdYUf?)MXVqaCQwc8PaHZbmC%P0_R%7?45egQjf_n zr9i?~PgV4nVxFO}p>4`=us^!1@D0tZLf*yaZs6+oJnaRZxa z%??$hR?2x|)im(h>9}qp?rnk^6Dc(E{ zZZMDw>n}KvRn$`q0`6fQvksR?`}jXUKkesyJ4{CG6i&ZmjUcL&=r;SO>F}d2svEo< zv!t@P0G!Bp{GN;9beJCQkwK!2zutnjOGXS#K%h#*ql(gf8Fwruqn`wq&>3W)2}QH%aObv1 zb|pwF?N41UNP;?c?BYnMcfwe!vz40efu9er!tb;4W8M(#o-i6r#NBbi0^|=V`jzr? zrJ0=+(tEj#yr)WTQ$tHn+2q!{D}!`f;NV~7#>SS_O*FqLjK4q~N`Xas&MF2q{gZaK z^8*wU&$~lp4u`1>gq$`mrhw_e<*+~$t-fiFO%SbY^V@=>z1(3ClO?f~trdUiOE$G9 z0*uKQbf&yS>1Z~sLqCSa-GiS7;@p(XX!VBW%_7c^za7rP=zQ<#@s1K0rxL9MGrCWe zcM6k|;r`$xlm5OC53G;lymP?y>=ubDu?kE>Gc=$5{?5DVTU3*8?l?_soNIlj*)Da5WwLT+9uK+^wL~Jir zSR%`dgOg(4WX_LXcF&*`o$MeHn?)o^;P)?nTK?<#&hx*?0soJ2!4dr$1r0t!0f+-x zYxJVu^deYVaTbsE^)Ppo8Xp$V8>qcq$4|(dD>@{n2pvr%7kk0+#+Kt!pfMw*Kt-fU znYec#eb9jf_0RA5jG}E(oW`X^c6K-F70EiW_>z$siWOEIkCVh4pPWW1r~UYiiF6ok{dLU~_Vl2zH`c{XN=#S#-X2?=`u!oE1GD(rE#u|F2e$mjH8|EXRdY) zearEiai~~FQETslcm1V?9Y%;gI1Bt>6uPLcSu4A%%ZQJ|kj$U&o?zc z2!>w(LOzPvh{dj#S{6>P?VM-Bol##^N}GBeXhb|}b^}FuANA|-zkQSb?GpcQ@}0U; z4&1%*q@}lax3R=eA7A(G<-k43c++I$@jn@o95A7J31)BZ49Zx{D%h^~TuxWgw0j>+ z;O7r`|8nJw=<;9<#GPz3D_cz&4suI*m5GI zg|8n#*+cy-aH;M2*PN1?tdXY%WZf~p81S1^6Py}5X89dT9*0Uw{%WR(hhq=*s%`Z}YZ1xSp1 zcpZ1_ywsa?F#zt>8OW$qV_7-T#9i$U=RMY4<8PjiOAcjsHQhhT8t_!$@$u2}wV-I=*%%GaR%|fQ8aI|?9))X3M zP&CE_O>n1uU{`#nP z1T}^Mc}-HaRXyhLR^s*cgp)PwSpuL9zUcMht@P!)Az$etFI1#OuYsIZznuAAbjL64|ZTL4yT%zHK?LQ&7)d+5b6A1WXqG*4>|&Om-Evt z36|-Gr478WnQyBJlTN`uVAAz3>XJ2*Lhn-cJ~S0G6NW^;gqt9o)+6Yp(K%%y5bVNp z2KS$&)TvR8pg<&EdS=Pd!>enbd(y>^MPfGY3HL2FF#-6p(Ms!Emo#qp?5u{X2z+|x zsymLgd*2;ZrEe#f%O2%xNHi?%*36UVCi-jUUXqzda2*>0_jA59%_(u5bY}p5u!k$K zkaO2_gC)m0oP{fvmK3V&z_WHz%H4MPm%nZ2ZB8aqza8wP4i7suzdl~bP-I%#y3kpQ zSMk-QWV2iK-V~!ch=7g%fiiZfc2%nK^OOYWr{t=6KlFmYM@umzI2R45*sQ#pWVvnS z_+;+{B%h0EZr(+rGB>)IT1-Q4PJ^Q()+_A?S55Zq$y$Z=D$_y5kinJR6oWkc)TKd} z{EnNrgWw50Ri>UT(m?*pUq4d{?C3vi(`F%y+gc_zY!069vV{fP#%!Ir;Eu?!y)=GR zQz%TI;gYqOWq){~J2jrNPt?h)l=v{i)5C3p|T{|DKn=v!s8lSc}@GV&81cwTh%Yg%0NQR;m;ZKN8 zQ_pm9r#GWN#o$#|BfD*>;lCQcrv{UM`zgFq0;Bmo2qKGAL~ZC7k;c(Y``x7AM)?vJ zF3IWCG9`fo@RYyncPvOolyZT5yV;rznH0nEX%gY*iE#54{tJi2tD;=@!@S0%<)jBf zZ|1H?@$mHD__w|HAKd$2#>n>%-oyXLPyH`*ave$HCRcjx{mnCS=i#$M<~*u@p?OX} z6?%Ah^Vk)h|5p!Odrp=9==A4vp0-+m9M)fQ7vYESyQq4K6>sPpcj&?CoA zJFg{{@f34X-(T!;xtHA?wo_?V5FkIO^nEs<-TToa?yF~1;dN9b8J2XLvSPiqoX69e zgS`61NmDgY4;Msg%i}h_1YW~_y8;2S1qq%1sY@Bl*%)%icgom<>-Z_Z48e%S&eB5# zX+Nww{V|B%tn-#qcAz$k8Z&>rW1jLD6rNF5QJ@k)FJz~6qOQ&fuwv>{23QX7e(}~7 z6wkAKpjGJVY~CCE_J06*j=kf(aVYfg6CT%xG@c9p-47uDi+A~Y;St8Af9{~2ILWg* zsm~5|z4TRFuW2GH@4+=mE$66?>793%QtnrTtJTiD{UmY!|F2{g#oAv5+$nB`uXQV4 zetmHB*YWEZA3rtvax*W}4vIT%I+7!oIahk23I0kx@g^(uir5w5I;BQRhz)B2Y0M(? zgV7l>gNnDzlI-A3a;DKglCKo<%tu!qN*ciH)-LE^5aF3mQH!w-8DY$%i3@_eX|5=S zHx;WFF5KJ6$50dGQ6!?PB4_ zmrA#HNNxMGs@#p@m??wP=&H^~32DWr^lu5OP#pu==z)};geN3}qtSov(L;pA(S|mY zGK&b$)0*QRWLa}mAe>k%EAuxG?#%GxqZV*T$7*9=oZ(fUl-{To6j$)<2Xq}4%G%_j zw1=FGwlORNQ=sfWO*hUdVOrdtI2S*dzymVTJma>O_ zTlpfL@+;QMJpq67BuJ~nFpCNiLuDo!mS7`B zgTn(0Z3&91iIYe?Ny@`pqaeG%BN5oTrNn=6_M2#_%^w;r&QD5jJp2wp&1)a(DVINW z9DzQ+knHw1kKA%7fGb^g4m79Y6L+$A&AW901;^8^zL|_N*OMU!t{!>B@1phbfVT1R z=|BxyqS+^aSlx%+lMzXkC5?~CiS&)&^;EeqL`3i^{8lDRZZ1>NwjSIo>n_#Rl~*kx zfUx+E^aB7^g&#ki4o+g*-p2`l1za3d8+d8N^BMn@ zP>pH3kK__##YYn$D=Qi?Lm6a&u_k0a!0BU}IXq#Y*}sLgmZVwg^GdZS?vTJdg4jG} zk+#5_M7Q>EGxo+LqfZVi!%R)>caP49lzHBB{UuA;un1+R*sktPG7aM4(F|K6s^}@y zUkj(JkGBct=gI$0SzY3W`5^Kb14 zE-PNQ1YK4-ukd~}aiZhajmPjE`KhN!FsAN;vPAr%Q2wy1jQ;wO81s4?J@vV~o9En5%*5gt|wKQuiZLa=9*0x2M*>e)>qu z|9Si!3oWT;L-wTBneJAmvAwk1yV%kxfK28hfwBeKJ?pAg3HeQ5I|ePM!xt!mgN)L~ zd9}X=PfOdT*NmThdD!3eArH@4*xtn_ZV8+$5psW|d#@~0N%q}Pmxo!RLwfkT_!&!I zCqEsekwPuY=|flrf(8$dNqBH6r*Wu!jP^B+VLw$1JPQqi1cj6#Jj^xSu4fZ9oVcZ{Z5jR{xOA{HuSLMIf4h52bC z&_^m=W`9NAIX=`=mZheVvoWetGNd@yWzJRUMcd0*n$+iZ;WUEHOXs3|M}OXM?X&V3*zhgfeL^>ya2$PBy+NI%Hdue_ne$&ReA)*}^`eO?kCz6Q1dIqOOc18_tCy|ES3LjEKyQ+%Qo(37=KiVxQ#wR%Y))H^*+8>X2sCAtfk={O4$9P9+I{eR`EVMFY{S?7 zwpr25T^^hGf#1KuBkIc|M6I3r@cgE?`Mf`x$6dU~ywR0Ug`I9& zvqF@QS(TUvL4#|LIK2z3{tB2zz(mO@&6#s}K_T^j!Tu+{z-4Hh5@~5AN+4<&85hQ z!C<|G4Nio1w*-{|4gyaJFZEt z;uK@NsgGla3`k z3o48FoFdb_1)A1>7|aw}Sh<>sZPzO{q~z2#-sfst5@>I4U%L+SodTgsl?+ayd+K06 zQhK_w!(|mJ8Wn7#@SZ*;&-(~l(YD|j-K1<=D z=4yo=BKH2t8m(1Z2jMo1u#@vI=}V6^Aj`a#P*cxWTw`X>wFWkahZb`p+*?VITUf*6+1RW_B6`?H-g!En1ZIloAw;Clvc9 z6?%HA)3yPCrm*|o`eTXc1Mt&I)qGEQ7skJ`#3J7x<{+VFI*6=T2 z491)lT6!iOd^<}*LZX980e}WR5j$$ke5)Va_);$BPWz?uZ4-y*;DAL4|29TyHLO5Q zywPuZ7+=-HfmY;D+S+LkE{CsP60?lc_LXyl|PeNX^c4A(C>f_Cc#GIAu z_6oD4YhJ(FSMH9Tcr&Egj|g88nDT}(d{FO*CLII6jv91IzAWvp_NETX@g{;wjRWa5 zp#W6oJa@p1LER8%z>)H}s>7lK&Zk`yoL^jClV?^9RzwTnCx{}s3C*H34iupl;Sagp zv(m>Ao&gO?rWVPw@iqsTYB}F=SWMD$iu}p`?_JMCT~d<9)$<7SWq8>zHokO&(+7B= zYW#E&GVdB>?Rc|Jn>z-A9wHj4LE zRAmHaZ%E%`&FEWDDmo&YOiOet|16+kRuBA8PHtzOU!yB=1E)k!FKLZPegPD2vr8$MC0z@0+R+hZk;Kq=tVaFXbw2& ze5v>KSaw2A0=0AHU%hfM+$8Pk=>2bz`bNNioPqj(Hv{Q}u>J4h4eoTh?Q^G;5vdg( zmNDjID&_<$Ip-WRoWKOp1OJorScD`k{Zeq=G_t#P?7`;mmj`G0viet8S6wS&YgVB^5n5#)4+KbiA zOVz3~zo<5q6zVlma{YdK-RD}PFw7cKM~9RnZv?ccy=C8Ui{BU;1~eiD7h5@*N3 z*Y6Gb*FN|S*&+JVqd!^i^OFKzo2Ix1bo|!o3V>;4*MNIX-=%e>3?9vSKdbI`RDnDh z6%{1+D(_Hz83{w&loy32Y7>_6&J~ljL)$DOjBucJYB%jMW6Z{vg^FgCf4YPp0T}m4+o#|F&QQpC*-*`IhG{Wxp#L_v*DknUJ zGfbj>6Q`s9yrkG^;7g75X7P37h6K^1N6FX{m_l-Rz_dqXjUMXY%=Z1aH(7g=r9vyV zd{^f|?Y(>LrffQ~ZXWkSY1X9U!5`KdXIy{NCSs6nIWZF*#;Oe{wMxa5sawY~YjoEJnLy^1ftPbA{;Y9h zTJ*j6;<5pDP}X&;u?QEW;;@lrCkF^3F3_P+yWZC`&%(*y0xm~XT%y@5_ST>khi%^4 zlwHE7lSe1hLlY)ZvmI4i!J=-57_Tp)0oO{8(8w=d0Qh7c>umQANPPO z+|HI6)4K`M=-D)HV?OcZ>FqNET&G!`@b99$@d$$wEB2lfiKVDh&p-u%1*}RIQi4^N zq5a26j=}?jGM*1YzpVcyt6JuFzg5NU)Q26I6`8?6Z3H_t1iwR9oc7L7*$f@Ysi!Bs z)s-1Y>D3l>Nl#4)?ilS_>{_$JQL4IrXTR8tfqFK@b!tvelxOBd2SnAFxj%mnn0|+ZWS)pvXB`*;~$18@gmxGXaC7-Ga>H1j!>s!(iDi>XEuqmkqHBTgiNa-D}68;!k4Yaul$9VxfkR} z;rDx~arC#3w08!%TE?!GpFnX*=x%*zR(%hJ|G9)=3pW&YVHzVAHl@B>-iVpcvX!Vu z$qR|Y?#+0GikXa&YmzIQ$8#Nu2E=-Jq&}-{o!&~>moO63E?8|v8aOxbgBjY5*B5Kbeo|QjYyr)*wq4GEa)Z3|0OY&nx$AA{L zB$p45H@HoHskx7-3<1Yo+&X$y7QI`!yT(uJ^4B*-10V-BrkSVM6H_Y7Id=?->Uacg zluabn=H#t5Bw&n<5WFo&$C37wef5HJo^ii3UY^skCPPskgqlC!41N0D{}{TY!o!BX z7G)IDOB5v_@^dG#g2#Kq&noQ85UUcA6jyu6)N$y{12kJp+t3kaeO^G@n8SY!oq=shKFw2VZN6izFtLrwIPFm~6$#N;% zaHLmc#I@|NaI(`e9gB-QGQN4-U?;PbT%oGzjxoQE&}q_asMMsgW&48QS~ruDkW+Te z0_!Gd!b1DpW%Sgn^_AS=gv7hxmU9D+I5RLF4OTY=l-_*|dLGyOXkBJC;&nW#VuW6_ z59#-rDW=2{i%-F$6XFs?(w zjIVPlJc1iwx9ESUI_kt{HgT*N+|n21NKGI_zWaFVdrL-_n%~n&vGv zv*}?VSqHHjBpI-DmcDl5fE*uj`x5FCOx95#2h>)hIKOs~wd?8oiWQL$*}eM8e!STx z{o=&@HS~n&??9}hC{TVm-yrAQ{r~#8r2XT|cZcc)uEpD}ujp#(`OAVBNU}(SC0lsB zaTj?bkstV60#58VlQ0kT7|n;lsjT@@Wl;TW`g}%f$a0U$>c1 zX20!7`l{Qp(u0b!{G*Bb0WE zhAT}F5z#v;Z{G2oK-g7wrwkmF=0N6NOY2LboI; zF5L#TYzr1ivU;N?FmX3Jx{{^AyVn65Tox_TL~x|_Xsm~f{&MPZe{sg;@CaGN)bfk#|I7X`6wY>Z*qXxOQer(e}?iX~g5yO5pnDixp{gq1;=Pzgl-k$K7{abG5B zrM;`|?b{}=`)`MGNRi_mLElX+2zKkb0_**CCW!?axa*>w5+*B`4bHewtN}atAc`c|K!+wV$uv zSux46!WZ%HUKd{O9iK7XMqAXF-n9OWF6&~jv&)T~-b(B)Pi9O$!QT8_p3uJ`wIWo_ zFLEOGnCy9Z?c-U7X#*!RePn4=UvagZkHcK6mxXYN(UH}jgU?GAS+2q zr6l&dR>@uPOugN1K3w(KEqBs2KW@UcsAox$E7 zLuKBXmRr&+(K}_un7*V2VVRq-{l3oYKLz}B4`pf%9MPQv=~1H3X&g0A(Usa~d@5?9 z8gffA+9uSbeRvvj1B@Sb8t58pfMjPSeRH6Vtqb9g%I)qM-O@01lQ8yIld6WmYoNR!zrfZeMn#Y@6Mjaetoi*scq(3A68t2R zOejpqAkA>}?f;_TKJSu7SI{o>BCzY~$Lg~hIgwSxxK1FFKksMG6wAeQ@vt0OPLYQv ziHGORaO^%laa8!?u0w5aIl|E7mWmV{A|C%|)ux#{Oq5bk{HC`Qr;mcip;_DI9*f#T z7+Pa+tlq*&%^71${wkI!nTkeSe}~ood6e52coyG^{{b1?;tenvrjO~^3J}oAiUt+V z=kpr69^V3%=n^FQJ$&@nKX|QOLP0tM4~)OysQ%5z!$(RRT!I`GNY=z+<*OQ^q@R1FJK95f&P4ql_oD-mI zKCso&lk`*hc5w+!_;^i|0~>Rb_G&CJ|5kBIb6r{!0#9>Wrg`~R2ek%#(C;~3HO#e> zx~UuFx*TL->T~7v4N;6em2(yy{Wwc$?+g&<)jC=T zge}1S#Vtu)l@P8>@;XNThRv;R;+SE6IjjHX;8 z))&3?976${s>}?kIT2eTtzL;4qiinSTurQke%zxz2pB2UbJsWyeeSZgn{M&8jN{S! z$2><2{p5{0Uj}i6SwMuEQGmzoQQ4n91Fdo^7WZsMD%ZO7Ohmn2-D@djnEcHX<8IV( z(_*BA~|P&&#j8z5v?4A}NR*i32e$qN9$N z#ZErAt~gF>kFC&Nq$hfqLNmmwJpW2L_@p>dX#cjXq_~y7Cv4<6O6=rEO1;(+K+pGW z%sPX=gL`j6s$`J99s7Za1)gv78uvd%CtdCo72qa^itI>A*u^jaFYRb>_FiH=eT+dm z>wAyhvYa6(GoR|YCM&b=942|#$t^9ajjThjxb!;zA3i zGbGzILPC$1)X5|#QVveu);sxEP}Ya#qo;(r*H{$i#3$?laX5PCy3zvy5R<%i!RdFF zDzn%JlC3DyN9OCIw!TX>bx!)7{Q01h^-E)Yb}V^W+8Q?)QmP?r61=XDqoALV?1qn( zNvm|>H24MjXLC|7emQtUc7@UOj4!;JUS$=b-v6;^nTGVeG~tfy*8jff={K(A{FT>f zQEaG0C#Hw3^H|){h}JC~AvP6gI-T5tV-C~-z#Gy^pX-vZFNxfa{_!mk>u2G(VZrs7 ze~x@pj;IDUpO#VK`Zm51zFgu&1S{&RYJhTwUd#L+?7eqbQ~SE_i(ODqLQz0eNCJc^ zNdT!%ke1L)sG&K9P!gI{1q7W6Na$%m=t2SsReBLbrB^8dq^fifPy|J>%$vE^T>I>~ z*FDd(_C5RF=j`X6@dtTE7$al+@+*1ATfQIno;rsCWC!?Jc>(N7X;+StA>;h%_uv2m2Xv5L!5YR{q1In@XYW8%uP**bR)udO$iNp^%PX<8&bwDE&8JC-h1+&XRk9tz|XjXVyt zmVqw3%tzlCl|3ziZ&;0%(yFgZz7%s|D%9h5t^hpZ3_$Kop2HQZ4wcaa+e!D;+zT3^ z&U@oJ)>>&3TkrPxo`!DlUG72JMCB16l9gxj;$H9H9SY&p)%-zb`MbYK_g{j#$*$z) zsn2mFp!lK#Uk;sn&rwb13h4ZybZX$Mf&aos{M$)U{+z^p=L?x1;}*IW$J(mk7cc)k zFW}hmt>UGxPbBaQ%XwpC?91M*=-;`5D(-O|Nn5|ZMg4F>iQPIY_lE0$+kV>viKC?f5|yT9MXpI1>~Z*cwNN`Kx5*Pr+K=Mh|g-shi<;QI4E|7--; z|Ep&oOG7%Dn64+XR&bmE6EptqbkC| z2MgPrq=HP71dsP1VO~%u5}kS3kgO!T)X>$0dHMJ5__x=6cWJlF!WD$Xrxgc&CQn?U zrhmkGO9pgN*DSO;(IyoM3PZ|9~cKbwEq|%2hl%I*haH!egt+U6W220 zHGZ?aQBKy7GU7RmWr)<$M8FWUEFdC{8ZhIUwtvO(CrKBMTb~LRmHjxAX5-*xWecFI zKSs$eXBj7g9OA{7*3SR<`zIgx`sWv9YD1gs8&F;GQ%k;mI^P!e=~H*+(V(NfIcDZ2 zkFz+I*Rm0ffv=R0MDLhO;<_(gj0OBL5x{yj%6Iw=U8XYQ;^4m*L3iP zX7z^V3r>1Xx%iz!O22dY%$@nFa`WArgEoI%jMty^$e)v=?&WotjfXez4gMXA@Si53 z{b!>9TplGFd2eiH=mvS#>lM{PfNZO)zmlRLNW`52CQS1YCn3hu5M5F*RpKS0f_smU z@wJ?aOPyzfj8H5&e`J3K8iAcBR&ySoz(kQm-RBjGt{@^28BF4(nE4m1Jp`&QbmMf`(G{- zlao(dty(|yz}d0uCA;JLZ(ZyO^&c7UrWm7zqm)8qE9s-Fz(zkIVogk5VShj+kAbSS zO<({@T?yg?B?lX$t!7CDP{YGEnr@wo0%`-A5e2!0^pMZtWtkHcTWkS#rVFy}UuRCI zNEb*pSrVq*E3j*vILLd3q-vPVk4KGl6}Ql_J#S*v65mfJ#8n zne{>4PMV2^w{JqN%p4Hz)IlQIiDz1nF!n3Wm9EKPmLao&U;eC^n4(N zKtx=AWX?g|Q#en%$!^>*#cE~WR?P^8v`t{;9j=4271zcm3kqfVK&&dplgdP4WogfK zf>c2r9%)Q~z+f=R*>6WA??|9#+|Xwqq9b9vjGmWZI^b6#3sFtSgB=rP8!uA59QRHr zaB5{0ePmfCt9@x^5nd)xM@ye3Y8_oB5r<5aZca!Rcp@T~l~Of^`YVy>B6$Ev>DMa6NiN_tnYKb!%>UhL=CTnC|=(AX*_3 zJsO~pkL+mf-{2?`o-+$HPLn8)KkvofyWp#Ag^mh}s3ssDiH+raC)sw1WmovOZ_&!y zLR9opn*yuHxW9~yN{l^f&c>+MAPG_)aj|^@l8qvMay+(o#Mq)TkKYQZ%U`wf$RLkg z*UR#c0+BP1gd`f$g=TjuXZ?&Zn*)0vT3da&wP{asc{kxdg3V(a4XxJcu^(b5peANO z5AnmbKout}Uha_*7Le2t?kCrG!XCY3A+sbJh?=qNPFC?La+UCY?McBHK1r3GCq0$+ zipzMK#Wu+Vh+SHv${xPFDZwP+lRBp^=c@ZMp1 z8fuI#){LFc8~wzcjEuh2PfO_=EW;s6+zWv6m_5tQhl`Q?N-0p9-lVBsf~N;`7(sYnm#Lht}S=h*DRr|ehP#4I_5tC zOghNb1HeM%&f6*UHPI3Hg3p-yRib@ZiD=No5MF9L)zN^UCimKX(zmt>_T!O<*yqkW z%F-vQvqVM9iy!@xjKZ*8k&#)$Po(5;rPL3R-Wl2|mA5gb#gUErUjPgjM<>b2*tXFq; z{ppRO)u}}7)tj$~B0=2(ugN0jm#gm{qxnlwY4ne%%WrcGZ^5_c92WaWTH?zX9_Y2M zjFcUfeapm7U3Cdu`Xm{l!-IO=1AM1EVa6O?_a8J+4Z@TX=Y5TW6+ubuAx)-zzY%|6 zwdU&SvhXIGjEpwaYiphp@{QuDGdFYm72y>s$5lkNsNy|R`I_gYn{ju}c4f_owyzCY za$ED1RAqW*+RKym1i}>{Ham#-XtYOXM>uc0{zTPNfBvURAKZNlgTumV^SGeJvj(>K z_yd5Mcqvq)1alRyBf|2PPs!Crn3cP=ck$zUG4K3VQ=vS!45v3QDI|W`_}H@3)mz)( z*AV|g(n$lZCYlWX=+5FDW5fur_i#rXE$BFmhe`sq+hNgp?=pjId73KD33+sSocpj^ z2b;`*PWnV%?OyQOKREDZb2lkaM^M2jX7Ely*qX+=qDAv3z~c@TLVV1U0S@~LIr6s7 z9h+wM!rXwfNIR1&4+gV+ipMwk9*=1Y9V*J!)qh@PPJW_zc&!1Uvej5H`t(J`zH;$- zy4CJ9v!L39X$8_*Y&Y@u+i(gs7ey3!l8}`PclzU#ejaMI@HFPnjx=-df$S7tQ7_yN zUr)-)K~HNFn3>(NeaqXN((LGL>%sF&WkJ&~Cx_-9la_*~pg|#dYo;|1)4q1wk@08} z^*a3~Ot0R5_E~U&^)qdSGuMjYoeSNeh1?9Vm_DS7kl#YV%@n+L)t*t*A)7_2Rx>?<3J1KP6kI=jvy6$GHL}fCWL?8Y^{vOm zCO%h@b-a}+9f;9j)REMyUH+EEgShoPrG z1|k6dCbzfb=H8w)2)wJbn&mq%^E+4FOAGwb^&P3_0ht<^s=`NiLmgl!F!nZ+GBQqn zD&4dv=O+;WwHGt%DX_*1Seq6MyCQIO$!z4!@j;vlc5Sw<4+sX;OW#K>M<#k!#U1-( zW%!QonSoCJH|04g&;X9kiro@L=u<;6AK)}52`5MGe|S#ZyMLFcmuGW5bX-6dsCt8k z@|-3-cC;P=G6g}s& zC%o&enz^gwrseCMKkv>>w@;Oen|s@2JUCBNi54X)@?H%@JHTmnY-6X=kSp-+y_A=g z3@_6)J9v;f*MxZli%9XUIOwkg2|wW)R71gV+w5#?RThk^dA%{I4EuPb&J2xzZ|>(a z@@w6+`!2RN34c9}kd_+n!Vs;JH*T-|G$3g@o|(`;@knC_)tkq$HW@3YsgJ5*Hn*VY zTO|L#^-G~EV%?ZZYl@R)Az5tFw*c3MZ&7^^4BQwlPYljLZ6l(*7R&Jj-Gg>zJw02uy=SSGNjLUsckmWk{7}BqUUs^$7syoVUS& zFKpaOAjKo4ctJIYw=vqmEh?|BFWBT+resT1U+{ZBv(4t470$oZ^%R>qtqp88nF>#P z&n2W*4w!u0hJGCOwkohOAe>!rMUK-(9(%3^94OEFW(ky;bv``rjQ%X#xrURe0+g*x z&bqGri(eaenMYSIa{}l z3OoeGvP)T({Fy2&UZUvu9c~B^+LW-N@8qsqgku&AL3SyZeG3KMUx8_MWA_ni`x~;K zI*x|qn?VHx22ZNGOIa0(wa;qjQl`*Iy_CCI?Jp(2HuEjm%*&Zv24^YVwJe1s;d*^= zG449nFr=iuPnFut&F=o`${Y}VzO)=`K$z+Js8}Ai*f8XVUcV`2OdD1Oh#3qO;CxAm z2zwF^{>Whj|GHuGDf?28bpX{(m(`WtAY>~&I(TED#$tsbFcZ)c3!v z7URO^=(Gcy*WzFw(wS0vtkmhMn2|Q-PU@ssyh;Q4BS~MMRQFTL|q<`+rK?V;}sZ$SgMj960q*Oed< z-`VE+?Rp`BtD|ewsnYb}jG|{L3w)i)W})45q~1wthJAZN!pq-gl1DV;L_3z;2+L(lj5+v0l{c-vsv14c?Z=KBf}aq;A{Vdt8>nKS2}qtS#n8vkq4q++i zW#Z`q<>s6Qm6U8Go;fdt)pzLc_Q;%g?5qMipKKfH<={-^t%3V?N+l5RsLe~zrnpxS z!^r!ZXRAxmg}<=otrrQ6g$XLOB1^xzs&1@kHy92+V&!!fS-Kmzn;Eai zknZu-=Sfwe~JNY!k^thyc0E;G0oW8EDb+TiG<7xmk@Y}i8ZqbMi(!kU8so76d2+9knK®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 D;~^C? literal 0 HcmV?d00001 diff --git a/account_cutoff_picking/images/accrued_expense_journal_entry.jpg b/account_cutoff_picking/images/accrued_expense_journal_entry.jpg new file mode 100644 index 0000000000000000000000000000000000000000..baddc64314c7cf811dea52123e56aec1040a2b47 GIT binary patch literal 52323 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%0AWFU|2j;(woH-%uKM>B$}L%kTjAp_RBN>>&Y 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 +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + if not openupgrade.column_exists( + env.cr, "res_company", "default_cutoff_picking_interval_days" + ): + openupgrade.rename_fields( + env, + [ + ( + "res.company", + "res_company", + "default_cutoff_accrual_picking_interval_days", + "default_cutoff_picking_interval_days", + ), + ], + ) diff --git a/account_cutoff_picking/models/__init__.py b/account_cutoff_picking/models/__init__.py new file mode 100644 index 00000000000..260a2b786ec --- /dev/null +++ b/account_cutoff_picking/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_company +from . import account_cutoff diff --git a/account_cutoff_picking/models/account_cutoff.py b/account_cutoff_picking/models/account_cutoff.py new file mode 100644 index 00000000000..b9a1e20617a --- /dev/null +++ b/account_cutoff_picking/models/account_cutoff.py @@ -0,0 +1,492 @@ +# Copyright 2013-2021 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import datetime + +import pytz +from dateutil.relativedelta import relativedelta + +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.tools import float_compare, float_is_zero +from odoo.tools.misc import format_date, format_datetime, formatLang + + +class AccountCutoff(models.Model): + _inherit = "account.cutoff" + + picking_interval_days = fields.Integer( + string="Analysis Interval", + default=lambda self: self._default_picking_interval_days(), + states={"done": [("readonly", True)]}, + tracking=True, + help="To generate the cutoffs based on picking " + "dates vs invoice dates, Odoo will analyse all the pickings/invoices from " + "N days before the cutoff date up to the cutoff date. " + "N is the Analysis Interval. If you increase the analysis interval, " + "Odoo will take more time to generate the cutoff lines.", + ) + + _sql_constraints = [ + ( + "picking_interval_days_positive", + "CHECK(picking_interval_days > 0)", + "The value of the field 'Analysis Interval' must be strictly positive.", + ) + ] + + @api.model + def _default_picking_interval_days(self): + return self.env.company.default_cutoff_picking_interval_days + + def picking_prepare_cutoff_line(self, vdict, account_mapping): + dpo = self.env["decimal.precision"] + qty_prec = dpo.precision_get("Product Unit of Measure") + if self.cutoff_type in ("accrued_expense", "accrued_revenue"): + qty = vdict["precut_delivered_qty"] - vdict["precut_invoiced_qty"] + qty_label = _("Pre-cutoff delivered quantity minus invoiced quantity:") + elif self.cutoff_type in ("prepaid_expense", "prepaid_revenue"): + qty = vdict["precut_invoiced_qty"] - vdict["precut_delivered_qty"] + qty_label = _("Pre-cutoff invoiced quantity minus delivered quantity:") + + if float_compare(qty, 0, precision_digits=qty_prec) <= 0: + return False + + company_currency = self.company_currency_id + currency = vdict["currency"] + sign = self.cutoff_type in ("accrued_expense", "prepaid_revenue") and -1 or 1 + amount = qty * vdict["price_unit"] * sign + amount_company_currency = vdict["currency"]._convert( + amount, company_currency, self.company_id, self.cutoff_date + ) + + # Use account mapping + account_id = vdict["account_id"] + if account_id in account_mapping: + cutoff_account_id = account_mapping[account_id] + else: + cutoff_account_id = account_id + uom_name = vdict["product"].uom_id.name + notes = vdict["notes"] + precut_delivered_qty_fl = formatLang( + self.env, vdict.get("precut_delivered_qty", 0), dp="Product Unit of Measure" + ) + notes += ( + "\n" + + _("Pre-cutoff delivered quantity:") + + " %s %s" + % ( + precut_delivered_qty_fl, + uom_name, + ) + ) + if vdict.get("precut_delivered_logs"): + notes += ( + "\n" + + _("Pre-cutoff delivered quantity details:") + + "\n%s" % "\n".join(vdict["precut_delivered_logs"]) + ) + precut_invoiced_qty_fl = formatLang( + self.env, vdict.get("precut_invoiced_qty", 0), dp="Product Unit of Measure" + ) + notes += ( + "\n" + + _("Pre-cutoff invoiced quantity:") + + " %s %s" % (precut_invoiced_qty_fl, uom_name) + ) + if vdict.get("precut_invoiced_logs"): + notes += ( + "\n" + + _("Pre-cutoff invoiced quantity details:") + + "\n%s" % "\n".join(vdict["precut_invoiced_logs"]) + ) + qty_fl = formatLang(self.env, qty, dp="Product Unit of Measure") + notes += "\n%s %s %s" % (qty_label, qty_fl, uom_name) + + vals = { + "parent_id": self.id, + "partner_id": vdict["partner"].id, + "name": vdict["name"], + "account_id": account_id, + "cutoff_account_id": cutoff_account_id, + "analytic_distribution": vdict["analytic_distribution"], + "currency_id": vdict["currency"].id, + "quantity": qty, + "price_unit": vdict["price_unit"], + "amount": amount, + "cutoff_amount": amount_company_currency, + "price_origin": vdict.get("price_origin"), + "notes": notes, + } + + if ( + self.cutoff_type in ("accrued_expense", "accrued_revenue") + and vdict["taxes"] + and self.company_id.accrual_taxes + ): + # vdict["price_unit"] is a price without tax, + # so I set handle_price_include=False + tax_compute_all_res = vdict["taxes"].compute_all( + vdict["price_unit"], + currency=currency, + quantity=qty * sign, + product=vdict["product"], + partner=vdict["partner"], + handle_price_include=False, + ) + vals["tax_line_ids"] = self._prepare_tax_lines( + tax_compute_all_res, self.company_currency_id + ) + return vals + + def order_line_update_oline_dict( + self, order_line, order_type, oline_dict, cutoff_datetime + ): + assert order_line not in oline_dict + order = order_line.order_id # same on PO and SO + oline_dict[order_line] = { + "precut_delivered_qty": 0.0, # in product_uom + "precut_delivered_logs": [], + "precut_invoiced_qty": 0.0, # in product_uom + "precut_invoiced_logs": [], + "name": ": ".join([order.name, order_line.name]), + "product": order_line.product_id, + "partner": order.partner_id.commercial_partner_id, + "notes": "", + "price_unit": 0.0, + "price_origin": False, + "currency": False, + "analytic_distribution": False, + "account_id": False, + "taxes": False, + } + self.order_line_update_oline_dict_from_stock_moves( + order_line, order_type, oline_dict, cutoff_datetime + ) + self.order_line_update_oline_dict_from_invoice_lines( + order_line, order_type, oline_dict, cutoff_datetime + ) + if not oline_dict[order_line]["price_origin"]: + self.order_line_update_oline_dict_price_fallback( + order_line, order_type, oline_dict + ) + + def order_line_update_oline_dict_from_stock_moves( + self, order_line, order_type, oline_dict, cutoff_datetime + ): + wdict = oline_dict[order_line] + # These fields/methods have the same name on PO and SO + order = order_line.order_id + product = order_line.product_id + product_uom = product.uom_id + outgoing_moves, incoming_moves = order_line._get_outgoing_incoming_moves() + if order_type == "purchase": + ordered_qty = order_line.product_uom._compute_quantity( + order_line.product_qty, product_uom + ) + wdict["notes"] = _( + "Purchase order %(order)s confirmed on %(confirm_date)s\n" + "Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" + ) % { + "order": order.name, + "confirm_date": format_datetime(self.env, order.date_approve), + "order_line": order_line.name, + "qty": formatLang(self.env, ordered_qty, dp="Product Unit of Measure"), + "uom": product_uom.name, + } + elif order_type == "sale": + ordered_qty = order_line.product_uom._compute_quantity( + order_line.product_uom_qty, product_uom + ) + wdict["notes"] = _( + "Sale order %(order)s confirmed on %(confirm_date)s\n" + "Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" + ) % { + "order": order.name, + "confirm_date": format_datetime(self.env, order.date_order), + "order_line": order_line.name, + "qty": formatLang(self.env, ordered_qty, dp="Product Unit of Measure"), + "uom": product_uom.name, + } + move_logs = [] + for out_move in outgoing_moves.filtered( + lambda m: m.state == "done" and m.date <= cutoff_datetime + ): + sign = order_type == "purchase" and -1 or 1 + move_qty = out_move.product_uom._compute_quantity( + out_move.quantity_done * sign, product_uom + ) + move_logs.append((out_move, move_qty)) + for in_move in incoming_moves.filtered( + lambda m: m.state == "done" and m.date <= cutoff_datetime + ): + sign = order_type == "sale" and -1 or 1 + move_qty = in_move.product_uom._compute_quantity( + in_move.quantity_done * sign, product_uom + ) + move_logs.append((in_move, move_qty)) + move_logs_sorted = sorted(move_logs, key=lambda to_sort: to_sort[0].date) + for (move, move_qty_signed) in move_logs_sorted: + wdict["precut_delivered_qty"] += move_qty_signed + move_qty_signed_formatted = formatLang( + self.env, move_qty_signed, dp="Product Unit of Measure" + ) + wdict["precut_delivered_logs"].append( + _( + " • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s " + "from %(src_location)s to %(dest_location)s)" + ) + % { + "qty": move_qty_signed_formatted, + "uom": move.product_id.uom_id.name, + "picking": move.picking_id.name or "none", + "date": format_datetime(self.env, move.date), + "src_location": move.location_id.display_name, + "dest_location": move.location_dest_id.display_name, + } + ) + + def order_line_update_oline_dict_from_invoice_lines( + self, order_line, order_type, oline_dict, cutoff_datetime + ): + wdict = oline_dict[order_line] + dpo = self.env["decimal.precision"] + qty_prec = dpo.precision_get("Product Unit of Measure") + move_type2label = dict( + self.env["account.move"].fields_get("move_type", "selection")["move_type"][ + "selection" + ] + ) + # These fields have the same name on PO and SO + product = order_line.product_id + product_uom = product.uom_id + if self.source_move_state == "posted": + ilines = order_line.invoice_lines.filtered( + lambda x: x.parent_state == "posted" + ) + else: + ilines = order_line.invoice_lines.filtered( + lambda x: x.parent_state in ("draft", "posted") + ) + for iline in ilines: + invoice = iline.move_id + if not float_is_zero(iline.quantity, precision_digits=qty_prec): + sign = invoice.move_type in ("out_refund", "in_refund") and -1 or 1 + iline_qty_puom = iline.product_uom_id._compute_quantity( + iline.quantity * sign, product_uom + ) + if invoice.date <= self.cutoff_date: + wdict["precut_invoiced_qty"] += iline_qty_puom + iline_qty_puom_formatted = formatLang( + self.env, iline_qty_puom, dp="Product Unit of Measure" + ) + wdict["precut_invoiced_logs"].append( + " • %(qty)s %(uom)s (%(move_type)s %(move_name)s dated %(date)s)" + % { + "qty": iline_qty_puom_formatted, + "uom": iline.product_id.uom_id.name, + "move_type": move_type2label[invoice.move_type], + "move_name": invoice.name, + "date": format_date(self.env, invoice.date), + } + ) + # Most recent invoice line used for price_unit, account,... + wdict["price_unit"] = iline.price_subtotal / iline_qty_puom + wdict["price_origin"] = invoice.name + wdict["currency"] = invoice.currency_id + wdict["account_id"] = iline.account_id.id + wdict["analytic_distribution"] = iline.analytic_distribution + wdict["taxes"] = iline.tax_ids + + def order_line_update_oline_dict_price_fallback( + self, order_line, order_type, oline_dict + ): + wdict = oline_dict[order_line] + order = order_line.order_id + product = order_line.product_id + if order_type == "purchase": + oline_qty_puom = order_line.product_uom._compute_quantity( + order_line.product_qty, product.uom_id + ) + wdict["price_unit"] = order_line.price_subtotal / oline_qty_puom + wdict["price_origin"] = order.name + wdict["currency"] = order.currency_id + wdict["analytic_distribution"] = order_line.analytic_distribution + wdict["taxes"] = order_line.taxes_id + account = product._get_product_accounts()["expense"] + if not account: + raise UserError( + _( + "Missing expense account on product '%(product)s' or on its " + "related product category '%(categ)s'." + ) + % { + "product": product.display_name, + "categ": product.categ_id.display_name, + } + ) + wdict["account_id"] = order.fiscal_position_id.map_account(account).id + elif order_type == "sale": + oline_qty_puom = order_line.product_uom._compute_quantity( + order_line.product_uom_qty, product.uom_id + ) + wdict["price_unit"] = order_line.price_subtotal / oline_qty_puom + wdict["price_origin"] = order.name + wdict["currency"] = order.currency_id + wdict["analytic_distribution"] = order_line.analytic_distribution + wdict["taxes"] = order_line.tax_id + account = product._get_product_accounts()["income"] + if not account: + raise UserError( + _( + "Missing income account on product '%(product)s' or on its " + "related product category '%(categ)s'." + ) + % { + "product": product.display_name, + "categ": product.categ_id.display_name, + } + ) + wdict["account_id"] = order.fiscal_position_id.map_account(account).id + + def stock_move_update_oline_dict(self, move_line, oline_dict, cutoff_datetime): + dpo = self.env["decimal.precision"] + qty_prec = dpo.precision_get("Product Unit of Measure") + if self.cutoff_type == "accrued_expense": + if ( + move_line.purchase_line_id + and move_line.purchase_line_id not in oline_dict + and not float_is_zero( + move_line.purchase_line_id.product_qty, precision_digits=qty_prec + ) + ): + self.order_line_update_oline_dict( + move_line.purchase_line_id, "purchase", oline_dict, cutoff_datetime + ) + elif self.cutoff_type == "accrued_revenue": + if ( + move_line.sale_line_id + and move_line.sale_line_id not in oline_dict + and not float_is_zero( + move_line.sale_line_id.product_uom_qty, precision_digits=qty_prec + ) + ): + self.order_line_update_oline_dict( + move_line.sale_line_id, "sale", oline_dict, cutoff_datetime + ) + + def invoice_line_update_oline_dict(self, inv_line, oline_dict, cutoff_datetime): + dpo = self.env["decimal.precision"] + qty_prec = dpo.precision_get("Product Unit of Measure") + if self.cutoff_type == "prepaid_expense": + if ( + inv_line.purchase_line_id + and inv_line.purchase_line_id not in oline_dict + and not float_is_zero( + inv_line.purchase_line_id.product_qty, precision_digits=qty_prec + ) + ): + self.order_line_update_oline_dict( + inv_line.purchase_line_id, "purchase", oline_dict, cutoff_datetime + ) + elif self.cutoff_type == "prepaid_revenue": + for so_line in inv_line.sale_line_ids: + if so_line not in oline_dict and not float_is_zero( + so_line.product_uom_qty, precision_digits=qty_prec + ): + self.order_line_update_oline_dict( + so_line, "sale", oline_dict, cutoff_datetime + ) + + def get_lines(self): + res = super().get_lines() + aclo = self.env["account.cutoff.line"] + + account_mapping = self._get_mapping_dict() + cutoff_type = self.cutoff_type + cutoff_datetime = self._get_cutoff_datetime() + + oline_dict = {} # order line dict + # key = PO line or SO line recordset + # value = { + # 'precut_delivered_qty': 1.0, + # 'precut_invoiced_qty': 0.0, + # 'price_unit': 12.42, + # } + + # ACCRUAL : + # starting point : picking + # then, go to order line. From order line, go to stock moves and invoices lines + # => gen cutoff line if precut_delivered_qty - precut_invoiced_qty > 0 + # PREPAID : + # starting point : invoice + # then, go to order line. From order line, go to stock moves and invoices lines + # => gen cutoff line if precut_invoiced_qty - precut_delivered_qty > 0 + + # ACCURAL + if cutoff_type in ("accrued_revenue", "accrued_expense"): + pick_type_map = { + "accrued_revenue": "outgoing", + "accrued_expense": "incoming", + } + + min_date_dt = cutoff_datetime - relativedelta( + days=self.picking_interval_days + ) + + pickings = self.env["stock.picking"].search( + [ + ("picking_type_code", "=", pick_type_map[cutoff_type]), + ("state", "=", "done"), + ("date_done", "<=", cutoff_datetime), + ("date_done", ">=", min_date_dt), + ("company_id", "=", self.company_id.id), + ] + ) + + for p in pickings: + for move in p.move_ids.filtered(lambda m: m.state == "done"): + self.stock_move_update_oline_dict(move, oline_dict, cutoff_datetime) + elif cutoff_type in ("prepaid_revenue", "prepaid_expense"): + move_type_map = { + "prepaid_revenue": ("out_invoice", "out_refund"), + "prepaid_expense": ("in_invoice", "in_refund"), + } + min_date = self.cutoff_date - relativedelta(days=self.picking_interval_days) + inv_domain = [ + ("move_type", "in", move_type_map[cutoff_type]), + ("date", "<=", self.cutoff_date), + ("date", ">=", min_date), + ("company_id", "=", self.company_id.id), + ] + if self.source_move_state == "posted": + inv_domain.append(("state", "=", "posted")) + else: + inv_domain.append(("state", "in", ("draft", "posted"))) + invoices = self.env["account.move"].search(inv_domain) + for invoice in invoices: + for iline in invoice.invoice_line_ids.filtered( + lambda x: x.display_type == "product" + and x.product_id.type in ("product", "consu") + ): + self.invoice_line_update_oline_dict( + iline, oline_dict, cutoff_datetime + ) + + # from pprint import pprint + # pprint(oline_dict) + for vdict in oline_dict.values(): + vals = self.picking_prepare_cutoff_line(vdict, account_mapping) + if vals: + aclo.create(vals) + return res + + def _get_cutoff_datetime(self): + self.ensure_one() + cutoff_date = datetime.combine(self.cutoff_date, datetime.max.time()) + tz = self.env.user.tz and pytz.timezone(self.env.user.tz) or pytz.utc + cutoff_datetime_aware = tz.localize(cutoff_date) + cutoff_datetime_utc = cutoff_datetime_aware.astimezone(pytz.utc) + cutoff_datetime_utc_naive = cutoff_datetime_utc.replace(tzinfo=None) + return cutoff_datetime_utc_naive diff --git a/account_cutoff_picking/models/res_company.py b/account_cutoff_picking/models/res_company.py new file mode 100644 index 00000000000..a83c34891ef --- /dev/null +++ b/account_cutoff_picking/models/res_company.py @@ -0,0 +1,27 @@ +# Copyright 2020-2021 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + default_cutoff_picking_interval_days = fields.Integer( + string="Analysis Interval", + help="To generate the accrual/prepaid revenue/expenses based on picking " + "dates vs invoice dates, Odoo will analyse all the pickings/invoices from " + "N days before the cutoff date up to the cutoff date. " + "N is the Analysis Interval. If you increase the analysis interval, " + "Odoo will take more time to generate the cutoff lines.", + default=90, + ) + + _sql_constraints = [ + ( + "cutoff_picking_interval_days_positive", + "CHECK(default_cutoff_picking_interval_days > 0)", + "The value of the field 'Analysis Interval' must be strictly positive.", + ) + ] diff --git a/account_cutoff_picking/readme/CONFIGURE.rst b/account_cutoff_picking/readme/CONFIGURE.rst new file mode 100644 index 00000000000..0cf6a7a8a5b --- /dev/null +++ b/account_cutoff_picking/readme/CONFIGURE.rst @@ -0,0 +1 @@ +For configuration instructions, refer to the README of the module *account_cutoff_base*. diff --git a/account_cutoff_picking/readme/CONTRIBUTORS.rst b/account_cutoff_picking/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..ff65d68ce6d --- /dev/null +++ b/account_cutoff_picking/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Alexis de Lattre diff --git a/account_cutoff_picking/readme/DESCRIPTION.rst b/account_cutoff_picking/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..bf42f4dd169 --- /dev/null +++ b/account_cutoff_picking/readme/DESCRIPTION.rst @@ -0,0 +1,25 @@ +This module generates expense/revenue accruals and prepaid expense/revenue based on the status of orders, pickings and invoices. The module is named *account_cutoff_accrual_picking* because it initially only supported accruals ; support for prepaid expense/revenue was added later (it should be renamed in later versions). + +To understand the behavior of this module, let's take the example of an expense accrual. When you click on the button *Re-Generate Lines* of an *Expense Accrual*: + +1. Odoo will look for all incoming picking in Done state with a *Transfer Date* <= *Cut-off Date*. For performance reasons, by default, the incoming picking dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the stock moves of those pickings and see if they are linked to a purchase order line. +2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential expense accrual. +3. For each of these purchase order lines, Odoo will: + + - scan the related stock moves in *done* state and check their transfer date, + - scan the related invoices lines and check their invoice date. + +4. If, for a particular purchase order line, the quantity of products received before the cutoff-date (or on the same day) minus the quantity of products invoiced before the cut-off date (or on the same day) is positive, Odoo will generate a cut-off line. + +Now, let's take the example of a prepaid expense. When you click on the button *Re-Generate Lines* of a *Prepaid Expense*: + +1. Odoo will look for all vendor bills dated before (or equal to) *Cut-off Date*. For performance reasons, by default, the vendor bills dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line. +2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential prepaid expense. +3. For each of these purchase order lines, Odoo will: + + - scan the related stock moves in *done* state and check their transfer date, + - scan the related invoices lines and check their invoice date. + +4. If, for a particular purchase order line, the quantity of products invoiced before the cutoff-date (or on the same day) minus the quantity of products received before the cut-off date (or on the same day) is positive, Odoo will generate a cut-off line. + +This module should work well with multiple units of measure (including products purchased and invoiced in different units of measure) and in multi-currency. diff --git a/account_cutoff_picking/static/description/icon.png b/account_cutoff_picking/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_cutoff_picking/static/description/index.html b/account_cutoff_picking/static/description/index.html new file mode 100644 index 00000000000..33fb4a599f4 --- /dev/null +++ b/account_cutoff_picking/static/description/index.html @@ -0,0 +1,449 @@ + + + + + + +Account Cut-off Picking + + + +
+

Account Cut-off Picking

+ + +

Beta License: AGPL-3 OCA/account-closing Translate me on Weblate Try me on Runbot

+

This module generates expense/revenue accruals and prepaid expense/revenue based on the status of orders, pickings and invoices. The module is named account_cutoff_accrual_picking because it initially only supported accruals ; support for prepaid expense/revenue was added later (it should be renamed in later versions).

+

To understand the behavior of this module, let’s take the example of an expense accrual. When you click on the button Re-Generate Lines of an Expense Accrual:

+
    +
  1. Odoo will look for all incoming picking in Done state with a Transfer Date <= Cut-off Date. For performance reasons, by default, the incoming picking dated before Cut-off Date minus 90 days will not be taken into account (this limit is configurable via the field Picking Analysis). It will go to the stock moves of those pickings and see if they are linked to a purchase order line.
  2. +
  3. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential expense accrual.
  4. +
  5. For each of these purchase order lines, Odoo will:
      +
    • scan the related stock moves in done state and check their transfer date,
    • +
    • scan the related invoices lines and check their invoice date.
    • +
    +
  6. +
  7. If, for a particular purchase order line, the quantity of products received before the cutoff-date (or on the same day) minus the quantity of products invoiced before the cut-off date (or on the same day) is positive, Odoo will generate a cut-off line.
  8. +
+

Now, let’s take the example of a prepaid expense. When you click on the button Re-Generate Lines of a Prepaid Expense:

+
    +
  1. Odoo will look for all vendor bills dated before (or equal to) Cut-off Date. For performance reasons, by default, the vendor bills dated before Cut-off Date minus 90 days will not be taken into account (this limit is configurable via the field Picking Analysis). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line.
  2. +
  3. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential prepaid expense.
  4. +
  5. For each of these purchase order lines, Odoo will:
      +
    • scan the related stock moves in done state and check their transfer date,
    • +
    • scan the related invoices lines and check their invoice date.
    • +
    +
  6. +
  7. If, for a particular purchase order line, the quantity of products invoiced before the cutoff-date (or on the same day) minus the quantity of products received before the cut-off date (or on the same day) is positive, Odoo will generate a cut-off line.
  8. +
+

This module should work well with multiple units of measure (including products purchased and invoiced in different units of measure) and in multi-currency.

+

Table of contents

+ +
+

Configuration

+

For configuration instructions, refer to the README of the module account_cutoff_base.

+
+
+

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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

alexis-via

+

This module is part of the OCA/account-closing project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/account_cutoff_picking/static/src/img/icon.png b/account_cutoff_picking/static/src/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fb9eeb147527d79ea6852d8ecca69495d48384bd GIT binary patch literal 5975 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 FV1hc)w6y>L literal 0 HcmV?d00001 diff --git a/account_cutoff_picking/views/account_cutoff.xml b/account_cutoff_picking/views/account_cutoff.xml new file mode 100644 index 00000000000..0d485a839bb --- /dev/null +++ b/account_cutoff_picking/views/account_cutoff.xml @@ -0,0 +1,21 @@ + + + + + accrual.picking.account_cutoff_form + account.cutoff + + + + + + + diff --git a/account_cutoff_picking/views/res_config_settings.xml b/account_cutoff_picking/views/res_config_settings.xml new file mode 100644 index 00000000000..03ed07230ac --- /dev/null +++ b/account_cutoff_picking/views/res_config_settings.xml @@ -0,0 +1,27 @@ + + + + + accrual.picking.account.config.form + res.config.settings + + +
+
+
+
+
+
+
diff --git a/account_cutoff_picking/wizards/__init__.py b/account_cutoff_picking/wizards/__init__.py new file mode 100644 index 00000000000..0deb68c4680 --- /dev/null +++ b/account_cutoff_picking/wizards/__init__.py @@ -0,0 +1 @@ +from . import res_config_settings diff --git a/account_cutoff_picking/wizards/res_config_settings.py b/account_cutoff_picking/wizards/res_config_settings.py new file mode 100644 index 00000000000..edd95567e52 --- /dev/null +++ b/account_cutoff_picking/wizards/res_config_settings.py @@ -0,0 +1,16 @@ +# Copyright 2020-2021 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + # I can't name it default_cutoff_accrual_picking_interval_days + # because 'default_' is a special prefix + dft_cutoff_picking_interval_days = fields.Integer( + related="company_id.default_cutoff_picking_interval_days", + readonly=False, + ) From ac099c045e2e62fd85b21f7a9e5c9b42611844d8 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 20 Jun 2023 13:22:22 +0000 Subject: [PATCH 02/22] Added translation using Weblate (French) --- account_cutoff_picking/i18n/fr.po | 156 ++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 account_cutoff_picking/i18n/fr.po diff --git a/account_cutoff_picking/i18n/fr.po b/account_cutoff_picking/i18n/fr.po new file mode 100644 index 00000000000..2132017d1da --- /dev/null +++ b/account_cutoff_picking/i18n/fr.po @@ -0,0 +1,156 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "Analysis Interval" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If" +" you increase the analysis interval, Odoo will take more time to generate " +"the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "" From a0c334101f4270e8ea53a6d14f91c52f03208489 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 20 Jun 2023 15:46:30 +0200 Subject: [PATCH 03/22] cutoff modules: improve strings Remove deprecated POT files --- .../i18n/account_cutoff_accrual_picking.pot | 149 ------------------ 1 file changed, 149 deletions(-) delete mode 100644 account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot diff --git a/account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot b/account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot deleted file mode 100644 index bd24f7a4238..00000000000 --- a/account_cutoff_picking/i18n/account_cutoff_accrual_picking.pot +++ /dev/null @@ -1,149 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * account_cutoff_accrual_picking -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "%s: %s" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model,name:account_cutoff_accrual_picking.model_account_cutoff -msgid "Account Cut-off" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model,name:account_cutoff_accrual_picking.model_res_company -msgid "Companies" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model,name:account_cutoff_accrual_picking.model_res_config_settings -msgid "Config Settings" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff__display_name -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company__display_name -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings__display_name -msgid "Display Name" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff__id -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company__id -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings__id -msgid "ID" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff____last_update -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company____last_update -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings____last_update -msgid "Last Modified on" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "" -"Missing expense account on product '%s' or on its related product category " -"'%s'." -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "" -"Missing income account on product '%s' or on its related product category " -"'%s'." -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_account_cutoff__picking_interval_days -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_company__default_cutoff_accrual_picking_interval_days -#: model:ir.model.fields,field_description:account_cutoff_accrual_picking.field_res_config_settings__dft_cutoff_accrual_picking_interval_days -msgid "Picking Analysis Interval" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "Pre-cutoff delivered quantity details:" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "Pre-cutoff delivered quantity minus invoiced quantity:" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "Pre-cutoff delivered quantity:" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "Pre-cutoff invoiced quantity details:" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "Pre-cutoff invoiced quantity:" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "" -"Purchase order %s confirmed on %s\n" -"Purchase Order Line: %s (ordered qty: %s %s)" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: code:addons/account_cutoff_accrual_picking/models/account_cutoff.py:0 -#, python-format -msgid "" -"Sale order %s confirmed on %s\n" -"Sale Order Line: %s (ordered qty: %s %s)" -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model.constraint,message:account_cutoff_accrual_picking.constraint_account_cutoff_picking_interval_days_positive -#: model:ir.model.constraint,message:account_cutoff_accrual_picking.constraint_res_company_cutoff_picking_interval_days_positive -msgid "" -"The value of the field 'Picking Analysis Interval' must be strictly " -"positive." -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model:ir.model.fields,help:account_cutoff_accrual_picking.field_account_cutoff__picking_interval_days -#: model:ir.model.fields,help:account_cutoff_accrual_picking.field_res_company__default_cutoff_accrual_picking_interval_days -#: model:ir.model.fields,help:account_cutoff_accrual_picking.field_res_config_settings__dft_cutoff_accrual_picking_interval_days -msgid "" -"To generate the accruals based on pickings, Odoo will analyse all the " -"pickings between the cutoff date and N days before. N is the Picking " -"Analysis Interval." -msgstr "" - -#. module: account_cutoff_accrual_picking -#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_picking.account_cutoff_form -#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_picking.res_config_settings_view_form -msgid "days" -msgstr "" From 487f2b01926dc2866a8b8ddf35be9791e6babc53 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 20 Jun 2023 13:22:48 +0000 Subject: [PATCH 04/22] Translated using Weblate (French) Currently translated at 100.0% (19 of 19 strings) Translation: account-closing-16.0/account-closing-16.0-account_cutoff_picking Translate-URL: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_picking/fr/ --- account_cutoff_picking/__manifest__.py | 2 +- account_cutoff_picking/i18n/fr.po | 50 +++++++++++++++++++------- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/account_cutoff_picking/__manifest__.py b/account_cutoff_picking/__manifest__.py index b39a5f07fa0..a4641491f27 100644 --- a/account_cutoff_picking/__manifest__.py +++ b/account_cutoff_picking/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Account Cut-off Picking", - "version": "16.0.1.0.0", + "version": "16.0.1.1.0", "category": "Accounting", "license": "AGPL-3", "summary": "Accrued and prepaid expense/revenue from pickings", diff --git a/account_cutoff_picking/i18n/fr.po b/account_cutoff_picking/i18n/fr.po index 2132017d1da..39d416c1ac8 100644 --- a/account_cutoff_picking/i18n/fr.po +++ b/account_cutoff_picking/i18n/fr.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-06-20 15:08+0000\n" +"Last-Translator: Alexis de Lattre \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_cutoff_picking #. odoo-python @@ -22,28 +24,30 @@ msgid "" " • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " "%(src_location)s to %(dest_location)s)" msgstr "" +" • %(qty)s %(uom)s (bon de transfert %(picking)s validé le %(date)s de " +"%(src_location)s à %(dest_location)s)" #. module: account_cutoff_picking #: model:ir.model,name:account_cutoff_picking.model_account_cutoff msgid "Account Cut-off" -msgstr "" +msgstr "Provision comptable" #. module: account_cutoff_picking #: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days #: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days #: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days msgid "Analysis Interval" -msgstr "" +msgstr "Intervalle d'analyse" #. module: account_cutoff_picking #: model:ir.model,name:account_cutoff_picking.model_res_company msgid "Companies" -msgstr "" +msgstr "Sociétés" #. module: account_cutoff_picking #: model:ir.model,name:account_cutoff_picking.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Configuration" #. module: account_cutoff_picking #. odoo-python @@ -53,6 +57,8 @@ msgid "" "Missing expense account on product '%(product)s' or on its related product " "category '%(categ)s'." msgstr "" +"Compte de charge manquant sur l'article '%(product)s' ou sur sa catégorie " +"d'article associée '%(categ)s'." #. module: account_cutoff_picking #. odoo-python @@ -62,48 +68,50 @@ msgid "" "Missing income account on product '%(product)s' or on its related product " "category '%(categ)s'." msgstr "" +"Compte de revenu manquant sur l'article '%(product)s' ou sur sa catégorie " +"d'article associée '%(categ)s'." #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff delivered quantity details:" -msgstr "" +msgstr "Détails des quantités livrées jusqu'à la date de provision :" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff delivered quantity minus invoiced quantity:" -msgstr "" +msgstr "Quantités livrées moins qtés facturées jusqu'à la date de provision :" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff delivered quantity:" -msgstr "" +msgstr "Quantités livrées jusqu'à la date de provision :" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff invoiced quantity details:" -msgstr "" +msgstr "Détails des quantités facturées jusqu'à la date de provision :" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff invoiced quantity minus delivered quantity:" -msgstr "" +msgstr "Quantité facturée moins quantité livrée jusqu'à la date de provision :" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff invoiced quantity:" -msgstr "" +msgstr "Quantité facturée jusqu'à la date de provision :" #. module: account_cutoff_picking #. odoo-python @@ -113,6 +121,9 @@ msgid "" "Purchase order %(order)s confirmed on %(confirm_date)s\n" "Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" msgstr "" +"Commande fournisseur %(order)s confirmée le %(confirm_date)s\n" +"Ligne de commande fournisseur : %(order_line)s (quantité commandée : %(qty)s " +"%(uom)s)" #. module: account_cutoff_picking #. odoo-python @@ -122,12 +133,16 @@ msgid "" "Sale order %(order)s confirmed on %(confirm_date)s\n" "Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" msgstr "" +"Commande client %(order)s confirmée le %(confirm_date)s\n" +"Ligne de commande client : %(order_line)s (quantité commandée : %(qty)s " +"%(uom)s)" #. module: account_cutoff_picking #: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive #: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive msgid "The value of the field 'Analysis Interval' must be strictly positive." msgstr "" +"La valeur du champ \"Intervalle d'analyse\" doit être strictement positive." #. module: account_cutoff_picking #: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days @@ -139,6 +154,12 @@ msgid "" " you increase the analysis interval, Odoo will take more time to generate " "the cutoff lines." msgstr "" +"Pour générer les provisions de produits et charges à partir de la " +"comparaison entre les dates de livraison et les dates de facturation, Odoo " +"analysera tous les livraisons/factures depuis N jours avant la date de " +"provision jusqu'à la date de provision. N est l'intervalle d'analyse. Si " +"vous augmentez l'intervalle d'analyse, Odoo mettra plus de temps pour " +"générer les lignes de provision." #. module: account_cutoff_picking #: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days @@ -148,9 +169,14 @@ msgid "" "the cutoff date. N is the Analysis Interval. If you increase the analysis " "interval, Odoo will take more time to generate the cutoff lines." msgstr "" +"Pour générer les provisions à partir de la comparaison entre les dates de " +"livraison et les dates de facturation, Odoo analysera toutes les livraisons/" +"factures à partir de N jours avant la date de provision jusqu'à la date de " +"provision. N est l'intervalle d'analyse. Si vous augmentez l'intervalle " +"d'analyse, Odoo prendra plus de temps pour générer les lignes de provision." #. module: account_cutoff_picking #: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form #: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form msgid "days" -msgstr "" +msgstr "jours" From 0ea0bb26b21710e2b2669e8d4174c60cba8931a0 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Wed, 28 Jun 2023 18:13:28 +0000 Subject: [PATCH 05/22] Added translation using Weblate (Spanish) --- account_cutoff_picking/i18n/es.po | 156 ++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 account_cutoff_picking/i18n/es.po diff --git a/account_cutoff_picking/i18n/es.po b/account_cutoff_picking/i18n/es.po new file mode 100644 index 00000000000..52924a9ea83 --- /dev/null +++ b/account_cutoff_picking/i18n/es.po @@ -0,0 +1,156 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_cutoff_picking +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +" • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " +"%(src_location)s to %(dest_location)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_account_cutoff +msgid "Account Cut-off" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "Analysis Interval" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model,name:account_cutoff_picking.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing expense account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Missing income account on product '%(product)s' or on its related product " +"category '%(categ)s'." +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity minus invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity details:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity minus delivered quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "Pre-cutoff invoiced quantity:" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Purchase order %(order)s confirmed on %(confirm_date)s\n" +"Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#. odoo-python +#: code:addons/account_cutoff_picking/models/account_cutoff.py:0 +#, python-format +msgid "" +"Sale order %(order)s confirmed on %(confirm_date)s\n" +"Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive +#: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive +msgid "The value of the field 'Analysis Interval' must be strictly positive." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days +#: model:ir.model.fields,help:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days +msgid "" +"To generate the accrual/prepaid revenue/expenses based on picking dates vs " +"invoice dates, Odoo will analyse all the pickings/invoices from N days " +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If" +" you increase the analysis interval, Odoo will take more time to generate " +"the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days +msgid "" +"To generate the cutoffs based on picking dates vs invoice dates, Odoo will " +"analyse all the pickings/invoices from N days before the cutoff date up to " +"the cutoff date. N is the Analysis Interval. If you increase the analysis " +"interval, Odoo will take more time to generate the cutoff lines." +msgstr "" + +#. module: account_cutoff_picking +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form +#: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form +msgid "days" +msgstr "" From d47efcd211dc721c2c27577c88cbd765ea9cfe12 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Wed, 28 Jun 2023 18:18:32 +0000 Subject: [PATCH 06/22] Translated using Weblate (Spanish) Currently translated at 100.0% (19 of 19 strings) Translation: account-closing-16.0/account-closing-16.0-account_cutoff_picking Translate-URL: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_picking/es/ --- account_cutoff_picking/i18n/es.po | 47 +++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/account_cutoff_picking/i18n/es.po b/account_cutoff_picking/i18n/es.po index 52924a9ea83..bf98f0570ec 100644 --- a/account_cutoff_picking/i18n/es.po +++ b/account_cutoff_picking/i18n/es.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-06-28 19:09+0000\n" +"Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: account_cutoff_picking #. odoo-python @@ -22,28 +24,30 @@ msgid "" " • %(qty)s %(uom)s (picking %(picking)s transfered on %(date)s from " "%(src_location)s to %(dest_location)s)" msgstr "" +" • %(qty)s %(uom)s (recogiendo %(picking)s transferido el %(date)s desde " +"%(src_location)s hasta %(dest_location)s)" #. module: account_cutoff_picking #: model:ir.model,name:account_cutoff_picking.model_account_cutoff msgid "Account Cut-off" -msgstr "" +msgstr "Cuenta de cierre" #. module: account_cutoff_picking #: model:ir.model.fields,field_description:account_cutoff_picking.field_account_cutoff__picking_interval_days #: model:ir.model.fields,field_description:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days #: model:ir.model.fields,field_description:account_cutoff_picking.field_res_config_settings__dft_cutoff_picking_interval_days msgid "Analysis Interval" -msgstr "" +msgstr "intervalo de análisis" #. module: account_cutoff_picking #: model:ir.model,name:account_cutoff_picking.model_res_company msgid "Companies" -msgstr "" +msgstr "Empresas" #. module: account_cutoff_picking #: model:ir.model,name:account_cutoff_picking.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "ajustes de configuración" #. module: account_cutoff_picking #. odoo-python @@ -53,6 +57,8 @@ msgid "" "Missing expense account on product '%(product)s' or on its related product " "category '%(categ)s'." msgstr "" +"Falta la cuenta de gastos en el producto' %(product)s' o en su categoría de " +"producto relacionada '%(categ)s'." #. module: account_cutoff_picking #. odoo-python @@ -62,48 +68,50 @@ msgid "" "Missing income account on product '%(product)s' or on its related product " "category '%(categ)s'." msgstr "" +"Falta la cuenta de ingresos en el producto' %(product)s' o en su categoría " +"de producto relacionada '%(categ)s'." #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff delivered quantity details:" -msgstr "" +msgstr "Detalles de la cantidad entregada antes del cierre:" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff delivered quantity minus invoiced quantity:" -msgstr "" +msgstr "Cantidad entregada antes del cierre menos cantidad facturada:" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff delivered quantity:" -msgstr "" +msgstr "Cantidad entregada antes del cierre:" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff invoiced quantity details:" -msgstr "" +msgstr "Detalles de la cantidad facturada antes del cierre:" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff invoiced quantity minus delivered quantity:" -msgstr "" +msgstr "Cantidad facturada antes del cierre menos cantidad entregada:" #. module: account_cutoff_picking #. odoo-python #: code:addons/account_cutoff_picking/models/account_cutoff.py:0 #, python-format msgid "Pre-cutoff invoiced quantity:" -msgstr "" +msgstr "Cantidad facturada antes del cierre:" #. module: account_cutoff_picking #. odoo-python @@ -113,6 +121,8 @@ msgid "" "Purchase order %(order)s confirmed on %(confirm_date)s\n" "Purchase Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" msgstr "" +"pedido%(order)s confirmado%(confirm_date)s\n" +"lí%(order_line)snea de pedido (cantidad pedida:%(qty)s%(uom)s" #. module: account_cutoff_picking #. odoo-python @@ -122,12 +132,15 @@ msgid "" "Sale order %(order)s confirmed on %(confirm_date)s\n" "Sale Order Line: %(order_line)s (ordered qty: %(qty)s %(uom)s)" msgstr "" +"pedido de venta%(order)s confirmado el%(confirm_date)s\n" +"línea de pedido de venta: %(order_line)s (cantidad pedida%(qty)s%(uom)s)" #. module: account_cutoff_picking #: model:ir.model.constraint,message:account_cutoff_picking.constraint_account_cutoff_picking_interval_days_positive #: model:ir.model.constraint,message:account_cutoff_picking.constraint_res_company_cutoff_picking_interval_days_positive msgid "The value of the field 'Analysis Interval' must be strictly positive." msgstr "" +"El valor del campo 'Intervalo de análisis' debe ser estrictamente positivo." #. module: account_cutoff_picking #: model:ir.model.fields,help:account_cutoff_picking.field_res_company__default_cutoff_picking_interval_days @@ -139,6 +152,11 @@ msgid "" " you increase the analysis interval, Odoo will take more time to generate " "the cutoff lines." msgstr "" +"Para generar los ingresos/gastos devengados/prepagados basados en fechas de " +"recolección vs fechas de factura, Odoo analizará todas las recolecciones/" +"facturas desde N días antes de la fecha de cierre hasta la fecha de cierre. " +"N es el Intervalo de Análisis. Si incrementa el intervalo de análisis, Odoo " +"tomará mas tiempo para generar las líneas de cierre." #. module: account_cutoff_picking #: model:ir.model.fields,help:account_cutoff_picking.field_account_cutoff__picking_interval_days @@ -148,9 +166,14 @@ msgid "" "the cutoff date. N is the Analysis Interval. If you increase the analysis " "interval, Odoo will take more time to generate the cutoff lines." msgstr "" +"Para generar los cierres basados en fechas de recolección vs fechas de " +"factura, Odoo analizará todas las recolecciones/facturas desde N días antes " +"de la fecha de cierree hasta la fecha de cierre. N es el Intervalo de " +"Análisis. Si incrementa el intervalo de análisis, Odoo tomará más tiempo " +"para generar las líneas de cierre." #. module: account_cutoff_picking #: model_terms:ir.ui.view,arch_db:account_cutoff_picking.account_cutoff_form #: model_terms:ir.ui.view,arch_db:account_cutoff_picking.res_config_settings_view_form msgid "days" -msgstr "" +msgstr "días" From 319fdc9f78720378ca16036cc45436069b6293c0 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 30 Jun 2023 14:08:57 +0200 Subject: [PATCH 07/22] account_cutoff_picking: defaut interval analysis is now 30 days (was 90 days) --- account_cutoff_picking/README.rst | 19 ++++---- account_cutoff_picking/__manifest__.py | 2 +- account_cutoff_picking/i18n/es.po | 6 +-- account_cutoff_picking/i18n/fr.po | 6 +-- account_cutoff_picking/models/res_company.py | 2 +- account_cutoff_picking/readme/DESCRIPTION.rst | 4 +- .../static/description/index.html | 44 ++++++++++--------- 7 files changed, 44 insertions(+), 39 deletions(-) diff --git a/account_cutoff_picking/README.rst b/account_cutoff_picking/README.rst index ceca41b2868..e44b4095479 100644 --- a/account_cutoff_picking/README.rst +++ b/account_cutoff_picking/README.rst @@ -2,10 +2,13 @@ Account Cut-off Picking ======================= -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c4760ddc4c5bdaa231e0019fab6cb247a9d41b23e3e0fa92cbb9b10e9744044d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,17 +22,17 @@ Account Cut-off Picking .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_picking :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/89/16.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module generates expense/revenue accruals and prepaid expense/revenue based on the status of orders, pickings and invoices. The module is named *account_cutoff_accrual_picking* because it initially only supported accruals ; support for prepaid expense/revenue was added later (it should be renamed in later versions). To understand the behavior of this module, let's take the example of an expense accrual. When you click on the button *Re-Generate Lines* of an *Expense Accrual*: -1. Odoo will look for all incoming picking in Done state with a *Transfer Date* <= *Cut-off Date*. For performance reasons, by default, the incoming picking dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the stock moves of those pickings and see if they are linked to a purchase order line. +1. Odoo will look for all incoming picking in Done state with a *Transfer Date* <= *Cut-off Date*. For performance reasons, by default, the incoming picking dated before *Cut-off Date* minus 30 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the stock moves of those pickings and see if they are linked to a purchase order line. 2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential expense accrual. 3. For each of these purchase order lines, Odoo will: @@ -40,7 +43,7 @@ To understand the behavior of this module, let's take the example of an expense Now, let's take the example of a prepaid expense. When you click on the button *Re-Generate Lines* of a *Prepaid Expense*: -1. Odoo will look for all vendor bills dated before (or equal to) *Cut-off Date*. For performance reasons, by default, the vendor bills dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line. +1. Odoo will look for all vendor bills dated before (or equal to) *Cut-off Date*. For performance reasons, by default, the vendor bills dated before *Cut-off Date* minus 30 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line. 2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential prepaid expense. 3. For each of these purchase order lines, Odoo will: @@ -66,7 +69,7 @@ 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 +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/account_cutoff_picking/__manifest__.py b/account_cutoff_picking/__manifest__.py index a4641491f27..b45e15b5e0a 100644 --- a/account_cutoff_picking/__manifest__.py +++ b/account_cutoff_picking/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Account Cut-off Picking", - "version": "16.0.1.1.0", + "version": "16.0.1.2.0", "category": "Accounting", "license": "AGPL-3", "summary": "Accrued and prepaid expense/revenue from pickings", diff --git a/account_cutoff_picking/i18n/es.po b/account_cutoff_picking/i18n/es.po index bf98f0570ec..8fecbfbb313 100644 --- a/account_cutoff_picking/i18n/es.po +++ b/account_cutoff_picking/i18n/es.po @@ -148,9 +148,9 @@ msgstr "" msgid "" "To generate the accrual/prepaid revenue/expenses based on picking dates vs " "invoice dates, Odoo will analyse all the pickings/invoices from N days " -"before the cutoff date up to the cutoff date. N is the Analysis Interval. If" -" you increase the analysis interval, Odoo will take more time to generate " -"the cutoff lines." +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If " +"you increase the analysis interval, Odoo will take more time to generate the " +"cutoff lines." msgstr "" "Para generar los ingresos/gastos devengados/prepagados basados en fechas de " "recolección vs fechas de factura, Odoo analizará todas las recolecciones/" diff --git a/account_cutoff_picking/i18n/fr.po b/account_cutoff_picking/i18n/fr.po index 39d416c1ac8..10e76a4a96f 100644 --- a/account_cutoff_picking/i18n/fr.po +++ b/account_cutoff_picking/i18n/fr.po @@ -150,9 +150,9 @@ msgstr "" msgid "" "To generate the accrual/prepaid revenue/expenses based on picking dates vs " "invoice dates, Odoo will analyse all the pickings/invoices from N days " -"before the cutoff date up to the cutoff date. N is the Analysis Interval. If" -" you increase the analysis interval, Odoo will take more time to generate " -"the cutoff lines." +"before the cutoff date up to the cutoff date. N is the Analysis Interval. If " +"you increase the analysis interval, Odoo will take more time to generate the " +"cutoff lines." msgstr "" "Pour générer les provisions de produits et charges à partir de la " "comparaison entre les dates de livraison et les dates de facturation, Odoo " diff --git a/account_cutoff_picking/models/res_company.py b/account_cutoff_picking/models/res_company.py index a83c34891ef..9ce17a0a5ba 100644 --- a/account_cutoff_picking/models/res_company.py +++ b/account_cutoff_picking/models/res_company.py @@ -15,7 +15,7 @@ class ResCompany(models.Model): "N days before the cutoff date up to the cutoff date. " "N is the Analysis Interval. If you increase the analysis interval, " "Odoo will take more time to generate the cutoff lines.", - default=90, + default=30, ) _sql_constraints = [ diff --git a/account_cutoff_picking/readme/DESCRIPTION.rst b/account_cutoff_picking/readme/DESCRIPTION.rst index bf42f4dd169..740ee77d404 100644 --- a/account_cutoff_picking/readme/DESCRIPTION.rst +++ b/account_cutoff_picking/readme/DESCRIPTION.rst @@ -2,7 +2,7 @@ This module generates expense/revenue accruals and prepaid expense/revenue based To understand the behavior of this module, let's take the example of an expense accrual. When you click on the button *Re-Generate Lines* of an *Expense Accrual*: -1. Odoo will look for all incoming picking in Done state with a *Transfer Date* <= *Cut-off Date*. For performance reasons, by default, the incoming picking dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the stock moves of those pickings and see if they are linked to a purchase order line. +1. Odoo will look for all incoming picking in Done state with a *Transfer Date* <= *Cut-off Date*. For performance reasons, by default, the incoming picking dated before *Cut-off Date* minus 30 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the stock moves of those pickings and see if they are linked to a purchase order line. 2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential expense accrual. 3. For each of these purchase order lines, Odoo will: @@ -13,7 +13,7 @@ To understand the behavior of this module, let's take the example of an expense Now, let's take the example of a prepaid expense. When you click on the button *Re-Generate Lines* of a *Prepaid Expense*: -1. Odoo will look for all vendor bills dated before (or equal to) *Cut-off Date*. For performance reasons, by default, the vendor bills dated before *Cut-off Date* minus 90 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line. +1. Odoo will look for all vendor bills dated before (or equal to) *Cut-off Date*. For performance reasons, by default, the vendor bills dated before *Cut-off Date* minus 30 days will not be taken into account (this limit is configurable via the field *Picking Analysis*). It will go to the invoice lines of those vendor bills and see if they are linked to a purchase order line. 2. Once this analysis is completed, Odoo has a list of purchase order lines to analyse for potential prepaid expense. 3. For each of these purchase order lines, Odoo will: diff --git a/account_cutoff_picking/static/description/index.html b/account_cutoff_picking/static/description/index.html index 33fb4a599f4..54b0a90dde8 100644 --- a/account_cutoff_picking/static/description/index.html +++ b/account_cutoff_picking/static/description/index.html @@ -1,20 +1,20 @@ - + - + Account Cut-off Picking