mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-18 07:32:04 +02:00
Move 28 account modules from oca-technical to existing oca-financial submodule
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
1a59b03e83
commit
233861d40c
1303 changed files with 0 additions and 176970 deletions
|
|
@ -1,44 +0,0 @@
|
||||||
# Account Cut-off Accrual Order Base
|
|
||||||
|
|
||||||
Odoo addon: account_cutoff_accrual_order_base
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base
|
|
||||||
```
|
|
||||||
|
|
||||||
## Dependencies
|
|
||||||
|
|
||||||
This addon depends on:
|
|
||||||
- account_cutoff_base
|
|
||||||
|
|
||||||
## Manifest Information
|
|
||||||
|
|
||||||
- **Name**: Account Cut-off Accrual Order Base
|
|
||||||
- **Version**: 16.0.1.1.0
|
|
||||||
- **Category**: Accounting & Finance
|
|
||||||
- **License**: AGPL-3
|
|
||||||
- **Installable**: True
|
|
||||||
|
|
||||||
## Source
|
|
||||||
|
|
||||||
Based on [OCA/account-closing](https://github.com/OCA/account-closing) branch 16.0, addon `account_cutoff_accrual_order_base`.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This package maintains the original AGPL-3 license from the upstream Odoo project.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
- Overview: doc/OVERVIEW.md
|
|
||||||
- Architecture: doc/ARCHITECTURE.md
|
|
||||||
- Models: doc/MODELS.md
|
|
||||||
- Controllers: doc/CONTROLLERS.md
|
|
||||||
- Wizards: doc/WIZARDS.md
|
|
||||||
- Install: doc/INSTALL.md
|
|
||||||
- Usage: doc/USAGE.md
|
|
||||||
- Configuration: doc/CONFIGURATION.md
|
|
||||||
- Dependencies: doc/DEPENDENCIES.md
|
|
||||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
|
||||||
- FAQ: doc/FAQ.md
|
|
||||||
|
|
@ -1,121 +0,0 @@
|
||||||
==================================
|
|
||||||
Account Cut-off Accrual Order Base
|
|
||||||
==================================
|
|
||||||
|
|
||||||
..
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! source digest: sha256:32932cbcf82dafa4ab85129328cb8347b3e3260836bc2495421e1c7462909d0d
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
.. |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_accrual_order_base
|
|
||||||
: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_accrual_order_base
|
|
||||||
:alt: Translate me on Weblate
|
|
||||||
.. |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|
|
|
||||||
|
|
||||||
This module extends the functionality of account_cutoff_base
|
|
||||||
to allow the computation of expense and revenue cutoffs on orders.
|
|
||||||
|
|
||||||
The accrual is computed by comparing on the order, the quantity
|
|
||||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
|
||||||
invoices have occurred after the cutoff date, those quantities can be affected
|
|
||||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
|
||||||
processing few lines.
|
|
||||||
|
|
||||||
You can configure to disable the generation of cutoff entries on orders.
|
|
||||||
For instance, if you know you will never receive the missing invoiced goods,
|
|
||||||
you can disable cutoff entries on a purchase order.
|
|
||||||
|
|
||||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
|
||||||
created, you are still able to create or modify invoices before the accounting
|
|
||||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
|
||||||
situation.
|
|
||||||
|
|
||||||
Once the cutoff accounting entries are generated you cannot create or modify
|
|
||||||
invoices before the accounting cutoff date.
|
|
||||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
|
||||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
|
||||||
|
|
||||||
Warning: This module is replacing account_cutoff_picking and is incompatible with it.
|
|
||||||
|
|
||||||
**Table of contents**
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
=============
|
|
||||||
|
|
||||||
To configure this module, you need to:
|
|
||||||
|
|
||||||
#. Go to the accounting settings to select the journals and accounts used for
|
|
||||||
the cutoff.
|
|
||||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
|
||||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
|
||||||
each type of taxes an accrued tax account.
|
|
||||||
|
|
||||||
Bug Tracker
|
|
||||||
===========
|
|
||||||
|
|
||||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-closing/issues>`_.
|
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
||||||
`feedback <https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
|
||||||
|
|
||||||
Do not contact contributors directly about support or help with technical issues.
|
|
||||||
|
|
||||||
Credits
|
|
||||||
=======
|
|
||||||
|
|
||||||
Authors
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
* BCIM
|
|
||||||
* Akretion
|
|
||||||
|
|
||||||
Contributors
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
* Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
|
||||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
|
|
||||||
|
|
||||||
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-jbaudoux| image:: https://github.com/jbaudoux.png?size=40px
|
|
||||||
:target: https://github.com/jbaudoux
|
|
||||||
:alt: jbaudoux
|
|
||||||
|
|
||||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
|
||||||
|
|
||||||
|maintainer-jbaudoux|
|
|
||||||
|
|
||||||
This module is part of the `OCA/account-closing <https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base>`_ project on GitHub.
|
|
||||||
|
|
||||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
||||||
|
|
||||||
from . import models
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "Account Cut-off Accrual Order Base",
|
|
||||||
"version": "16.0.1.1.0",
|
|
||||||
"category": "Accounting & Finance",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"summary": "Accrued Order Base",
|
|
||||||
"author": "BCIM, Akretion, Odoo Community Association (OCA)",
|
|
||||||
"maintainers": ["jbaudoux"],
|
|
||||||
"website": "https://github.com/OCA/account-closing",
|
|
||||||
"depends": ["account_cutoff_base"],
|
|
||||||
"data": [
|
|
||||||
"views/account_cutoff_view.xml",
|
|
||||||
"views/account_cutoff_line_view.xml",
|
|
||||||
],
|
|
||||||
"installable": True,
|
|
||||||
"application": False,
|
|
||||||
}
|
|
||||||
|
|
@ -1,141 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_base
|
|
||||||
#
|
|
||||||
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_accrual_order_base
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
|
||||||
msgid "<span> on </span>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
|
||||||
msgid "Cutoff Accrual Order Line Mixin"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
|
||||||
"product category."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
|
||||||
msgid "Invoice Lines"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
|
||||||
msgid "Invoiced Quantity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
|
||||||
msgid "Product"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
|
||||||
msgid "Quantity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
|
||||||
msgid "Received Quantity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Wrong cutoff type %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that generates an entry in a closed cut-off (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that modifies a closed cutoff (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
|
||||||
" - New invoiced quantity: {new_inv_qty}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
@ -1,141 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_base
|
|
||||||
#
|
|
||||||
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_accrual_order_base
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
|
||||||
msgid "<span> on </span>"
|
|
||||||
msgstr "<span> na </span>"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Računovodstveno presjecanje"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr "Linija računovodstvenog presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount"
|
|
||||||
msgstr "Iznos"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
|
||||||
msgstr "Iznos koji se koristi kao osnova za izračunavanje iznosa presjecanja."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount"
|
|
||||||
msgstr "Iznos presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
|
||||||
msgstr "Iznos presjecanja bez poreza u valuti kompanije."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
|
||||||
msgid "Cutoff Accrual Order Line Mixin"
|
|
||||||
msgstr "Miješavanje akruelne linije narudžbe presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr "Ne generiši zapise presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
|
||||||
msgstr "Greška: Nedostaje '%(label)s' na porezu '%(name)s'."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
|
||||||
"product category."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
|
||||||
msgid "Invoice Lines"
|
|
||||||
msgstr "Stavke fakture"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
|
||||||
msgid "Invoiced Quantity"
|
|
||||||
msgstr "Fakturisana količina"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Žurnal"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr "Model linije narudžbe"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
|
||||||
msgid "Product"
|
|
||||||
msgstr "Artikal"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
|
||||||
msgid "Quantity"
|
|
||||||
msgstr "Količina"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
|
||||||
msgid "Received Quantity"
|
|
||||||
msgstr "Primljena količina"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Wrong cutoff type %s"
|
|
||||||
msgstr "Pogrešan tip presjecanja %s"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that generates an entry in a closed cut-off (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that modifies a closed cutoff (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
|
||||||
" - New invoiced quantity: {new_inv_qty}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
@ -1,175 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_base
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 16.0+e\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2023-10-26 11:53+0000\n"
|
|
||||||
"PO-Revision-Date: 2023-10-26 11:53+0000\n"
|
|
||||||
"Last-Translator: \n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: \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_order_base
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
|
||||||
msgid "<span> on </span>"
|
|
||||||
msgstr "<span> sur </span>"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr "Ligne de provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount"
|
|
||||||
msgstr "Montant"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
|
||||||
msgstr ""
|
|
||||||
"Montant qui est utilisé comme base pour calculer le montant de la provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount"
|
|
||||||
msgstr "Montant de la provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
|
||||||
msgstr "Montant de provision hors taxes dans la devise de la société."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
|
||||||
msgid "Cutoff Accrual Order Line Mixin"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
|
||||||
#, fuzzy
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr "Ne pas générer d'écriture de provision pour les commande verrouillées"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
|
||||||
msgstr "Errur: '%(label)s' manquant sur la taxe '%(name)s'."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
|
||||||
"product category."
|
|
||||||
msgstr ""
|
|
||||||
"Erreur: {map_type} compte manquant sur le produit '{product}' ou sur la "
|
|
||||||
"catégorie de product liée."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
|
||||||
msgid "Invoice Lines"
|
|
||||||
msgstr "Lignes de facture"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
|
||||||
msgid "Invoiced Quantity"
|
|
||||||
msgstr "Quantité facturée"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Pièce comptable"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
|
||||||
msgid "Product"
|
|
||||||
msgstr "Produit"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
|
||||||
msgid "Quantity"
|
|
||||||
msgstr "Quantité"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
|
||||||
msgid "Received Quantity"
|
|
||||||
msgstr "Quantité reçue"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Wrong cutoff type %s"
|
|
||||||
msgstr "Mauvais type de cutoff %s"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that generates an "
|
|
||||||
"entry in a closed cut-off (i.e. for which an accounting entry has already "
|
|
||||||
"been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
msgstr ""
|
|
||||||
"Vous ne pouvez pas valider une facture à une date comptable qui génère une "
|
|
||||||
"ligne dans une provision fermée (càd pour laquelle l'écriture comptable de "
|
|
||||||
"provision a déjà été créée).\n"
|
|
||||||
" - Provision: {cutoff}\n"
|
|
||||||
" - Produit: {product}\n"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that modifies a closed "
|
|
||||||
"cutoff (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
|
||||||
" - New invoiced quantity: {new_inv_qty}"
|
|
||||||
msgstr ""
|
|
||||||
"Vous ne pouvez pas valider une facture à une date comptable qui modifie une "
|
|
||||||
"provision fermée (càd pour laquelle l'écriture comptable de provision a déjà "
|
|
||||||
"été créée).\n"
|
|
||||||
" - Provision: {cutoff}\n"
|
|
||||||
" - Produit: {product}\n"
|
|
||||||
" - Précédente quantité facturée: {prev_inv_qty}\n"
|
|
||||||
" - Nouvelle quantité facturée: {new_inv_qty}"
|
|
||||||
|
|
||||||
#~ msgid "Companies"
|
|
||||||
#~ msgstr "Sociétés"
|
|
||||||
|
|
||||||
#~ msgid "Config Settings"
|
|
||||||
#~ msgstr "Paramètres de configuration"
|
|
||||||
|
|
||||||
#~ msgid "Cutoff Exclude Locked Orders"
|
|
||||||
#~ msgstr "Provision Exclure les commandes verrouillées"
|
|
||||||
|
|
||||||
#~ msgid "Exclude Locked Orders"
|
|
||||||
#~ msgstr "Exclure les commandes verrouillées"
|
|
||||||
|
|
@ -1,158 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_base
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 16.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"PO-Revision-Date: 2024-10-21 12:06+0000\n"
|
|
||||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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 5.6.2\n"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_form
|
|
||||||
msgid "<span> on </span>"
|
|
||||||
msgstr "<span> su </span>"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Scritture di fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr "Riga scritture fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount"
|
|
||||||
msgstr "Valore"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__amount
|
|
||||||
msgid "Amount that is used as base to compute the Cut-off Amount."
|
|
||||||
msgstr "Valore utilizzato come base per calcolare il valore di fine periodo."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount"
|
|
||||||
msgstr "Valore fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_base.field_account_cutoff_line__cutoff_amount
|
|
||||||
msgid "Cut-off Amount without taxes in the Company Currency."
|
|
||||||
msgstr "Valore fine periodo senza imposte nella valuta dell'azienda."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_order_line_cutoff_accrual_mixin
|
|
||||||
msgid "Cutoff Accrual Order Line Mixin"
|
|
||||||
msgstr "Mixin riga ordine rateo di fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_order_line_cutoff_accrual_mixin__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr "Non generare registrazioni di fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Error: Missing '%(label)s' on tax '%(name)s'."
|
|
||||||
msgstr "Errore: manca '%(label)s' nell'imposta '%(name)s'."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/account_cutoff.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"Error: Missing {map_type} account on product '{product}' or on related "
|
|
||||||
"product category."
|
|
||||||
msgstr ""
|
|
||||||
"Errore: manca {map_type} conto nel prodotto '{product}' o nella categoria "
|
|
||||||
"prodotto relativa."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoice_line_ids
|
|
||||||
#: model_terms:ir.ui.view,arch_db:account_cutoff_accrual_order_base.account_cutoff_line_form
|
|
||||||
msgid "Invoice Lines"
|
|
||||||
msgstr "Righe fattura"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__invoiced_qty
|
|
||||||
msgid "Invoiced Quantity"
|
|
||||||
msgstr "Quantità fatturata"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_base.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Registrazione contabile"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff__order_line_model
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr "Modello riga ordine"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__product_id
|
|
||||||
msgid "Product"
|
|
||||||
msgstr "Prodotto"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__quantity
|
|
||||||
msgid "Quantity"
|
|
||||||
msgstr "Quantità"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_base.field_account_cutoff_line__received_qty
|
|
||||||
msgid "Received Quantity"
|
|
||||||
msgstr "Quantità ricevuta"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Wrong cutoff type %s"
|
|
||||||
msgstr "Tipo registrazione fine periodo %s errato"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that generates an entry in a closed cut-off (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
msgstr ""
|
|
||||||
"Non è possibile convalidare una fattura per una data contabile che genera "
|
|
||||||
"una registrazione in una registrazione di fine periodo chiusa (ad esempio "
|
|
||||||
"per il quale è già stata creata una registrazione contabile).\n"
|
|
||||||
"- Registrazione di fine periodo: {cutoff}\n"
|
|
||||||
"- Prodotto: {product}\n"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_base
|
|
||||||
#. odoo-python
|
|
||||||
#: code:addons/account_cutoff_accrual_order_base/models/order_line_mixin.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You cannot validate an invoice for an accounting date that modifies a closed cutoff (i.e. for which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
|
||||||
" - New invoiced quantity: {new_inv_qty}"
|
|
||||||
msgstr ""
|
|
||||||
"Non è possibile convalidare una fattura per una data contabile che modifica "
|
|
||||||
"una registrazione di fine periodo chiusa (ad esempio per il quale è già "
|
|
||||||
"stata creata una registrazione contabile).\n"
|
|
||||||
"- Registrazione di fine periodo: {cutoff}\n"
|
|
||||||
"- Prodotto: {product}\n"
|
|
||||||
"- Quantità fatturata precedente: {prev_inv_qty}\n"
|
|
||||||
"- Nuova quantità fatturata: {new_inv_qty}"
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
||||||
|
|
||||||
from . import account_cutoff
|
|
||||||
from . import account_cutoff_line
|
|
||||||
from . import order_line_mixin
|
|
||||||
from . import account_move
|
|
||||||
|
|
@ -1,108 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import datetime, time, timedelta
|
|
||||||
|
|
||||||
import pytz
|
|
||||||
from dateutil.relativedelta import relativedelta
|
|
||||||
|
|
||||||
from odoo import _, api, fields, models
|
|
||||||
from odoo.exceptions import UserError
|
|
||||||
from odoo.tools import split_every
|
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class AccountCutoff(models.Model):
|
|
||||||
_inherit = "account.cutoff"
|
|
||||||
|
|
||||||
order_line_model = fields.Selection(
|
|
||||||
selection=[],
|
|
||||||
readonly=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
def _nextday_start_dt(self):
|
|
||||||
"""Convert the cutoff date into datetime as start of next day."""
|
|
||||||
next_day = self.cutoff_date + timedelta(days=1)
|
|
||||||
tz = self.env.company.partner_id.tz or "UTC"
|
|
||||||
start_next_day = datetime.combine(
|
|
||||||
next_day, time(0, 0, 0, 0, tzinfo=pytz.timezone(tz))
|
|
||||||
)
|
|
||||||
return start_next_day.replace(tzinfo=None)
|
|
||||||
|
|
||||||
def _get_product_account(self, product, fpos):
|
|
||||||
if self.cutoff_type in "accrued_revenue":
|
|
||||||
map_type = "income"
|
|
||||||
elif self.cutoff_type in "accrued_expense":
|
|
||||||
map_type = "expense"
|
|
||||||
else:
|
|
||||||
return
|
|
||||||
account = product.product_tmpl_id.get_product_accounts(fpos)[map_type]
|
|
||||||
if not account:
|
|
||||||
raise UserError(
|
|
||||||
_(
|
|
||||||
"Error: Missing {map_type} account on product '{product}' or on"
|
|
||||||
" related product category.",
|
|
||||||
).format(
|
|
||||||
map_type=map_type,
|
|
||||||
product=product.name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return account
|
|
||||||
|
|
||||||
def get_lines(self):
|
|
||||||
self.ensure_one()
|
|
||||||
# If the computation of the cutoff is done at the cutoff date, then we
|
|
||||||
# only need to retrieve lines where there is a qty to invoice (i.e.
|
|
||||||
# delivered qty != invoiced qty).
|
|
||||||
# For any line where a move or an invoice has been done after the
|
|
||||||
# cutoff date, we need to recompute the quantities.
|
|
||||||
res = super().get_lines()
|
|
||||||
if not self.order_line_model:
|
|
||||||
return res
|
|
||||||
|
|
||||||
model = self.env[self.order_line_model]
|
|
||||||
_logger.debug("Get model lines")
|
|
||||||
line_ids = set(model.browse(model._get_cutoff_accrual_lines_query(self)).ids)
|
|
||||||
_logger.debug("Get model lines invoiced after")
|
|
||||||
line_ids |= set(model._get_cutoff_accrual_lines_invoiced_after(self).ids)
|
|
||||||
_logger.debug("Get model lines delivered after")
|
|
||||||
line_ids |= set(model._get_cutoff_accrual_lines_delivered_after(self).ids)
|
|
||||||
|
|
||||||
_logger.debug("Prepare cutoff lines per chunks")
|
|
||||||
# A good chunk size is per 1000. If bigger, it is not faster but memory
|
|
||||||
# usage increases. If too low, then it takes more cpu time.
|
|
||||||
for chunk in split_every(models.INSERT_BATCH_SIZE * 10, tuple(line_ids)):
|
|
||||||
lines = model.browse(chunk)
|
|
||||||
values = []
|
|
||||||
for line in lines:
|
|
||||||
data = line._prepare_cutoff_accrual_line(self)
|
|
||||||
if not data:
|
|
||||||
continue
|
|
||||||
values.append(data)
|
|
||||||
self.env["account.cutoff.line"].create(values)
|
|
||||||
# free memory usage
|
|
||||||
self.env.invalidate_all()
|
|
||||||
_logger.debug("Prepare cutoff lines - next chunk")
|
|
||||||
return res
|
|
||||||
|
|
||||||
@api.model
|
|
||||||
def _cron_cutoff(self, cutoff_type, model):
|
|
||||||
# Cron is expected to run at begin of new period. We need the last day
|
|
||||||
# of previous month. Support some time difference and compute last day
|
|
||||||
# of previous period.
|
|
||||||
last_day = datetime.today()
|
|
||||||
if last_day.day > 20:
|
|
||||||
last_day += relativedelta(months=1)
|
|
||||||
last_day = last_day.replace(day=1)
|
|
||||||
last_day -= relativedelta(days=1)
|
|
||||||
cutoff = self.with_context(default_cutoff_type=cutoff_type).create(
|
|
||||||
{
|
|
||||||
"cutoff_date": last_day,
|
|
||||||
"cutoff_type": cutoff_type,
|
|
||||||
"order_line_model": model,
|
|
||||||
"auto_reverse": True,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
cutoff.get_lines()
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# Copyright 2013 Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
from odoo import api, fields, models
|
|
||||||
|
|
||||||
|
|
||||||
class AccountCutoffLine(models.Model):
|
|
||||||
_inherit = "account.cutoff.line"
|
|
||||||
|
|
||||||
order_line_model = fields.Selection(related="parent_id.order_line_model")
|
|
||||||
|
|
||||||
product_id = fields.Many2one(
|
|
||||||
comodel_name="product.product", string="Product", readonly=True
|
|
||||||
)
|
|
||||||
received_qty = fields.Float("Received Quantity", readonly=True)
|
|
||||||
invoiced_qty = fields.Float("Invoiced Quantity", readonly=True)
|
|
||||||
invoice_line_ids = fields.One2many(
|
|
||||||
"account.move.line",
|
|
||||||
compute="_compute_invoice_lines",
|
|
||||||
string="Invoice Lines",
|
|
||||||
)
|
|
||||||
quantity = fields.Float(compute="_compute_quantity", store=True)
|
|
||||||
amount = fields.Monetary(compute="_compute_amount", store=True)
|
|
||||||
cutoff_amount = fields.Monetary(compute="_compute_cutoff_amount", store=True)
|
|
||||||
|
|
||||||
def _get_order_line(self):
|
|
||||||
self.ensure_one()
|
|
||||||
return
|
|
||||||
|
|
||||||
def _compute_invoice_lines(self):
|
|
||||||
return
|
|
||||||
|
|
||||||
@api.depends("invoiced_qty", "received_qty")
|
|
||||||
def _compute_quantity(self):
|
|
||||||
for rec in self:
|
|
||||||
if not rec.parent_id.order_line_model:
|
|
||||||
continue
|
|
||||||
rec.quantity = rec.received_qty - rec.invoiced_qty
|
|
||||||
|
|
||||||
@api.depends("price_unit", "quantity")
|
|
||||||
def _compute_amount(self):
|
|
||||||
for rec in self:
|
|
||||||
if not rec.parent_id.order_line_model:
|
|
||||||
continue
|
|
||||||
if rec.parent_id.cutoff_type == "accrued_revenue":
|
|
||||||
amount = rec.quantity * rec.price_unit
|
|
||||||
elif rec.parent_id.cutoff_type == "accrued_expense":
|
|
||||||
amount = -rec.quantity * rec.price_unit
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
rec.amount = rec.company_currency_id.round(amount)
|
|
||||||
|
|
||||||
@api.depends("amount")
|
|
||||||
def _compute_cutoff_amount(self):
|
|
||||||
for rec in self:
|
|
||||||
if not rec.parent_id.order_line_model:
|
|
||||||
continue
|
|
||||||
if rec.parent_id.state == "done":
|
|
||||||
continue
|
|
||||||
if rec.company_currency_id != rec.currency_id:
|
|
||||||
currency_at_date = rec.currency_id.with_context(
|
|
||||||
date=rec.parent_id.cutoff_date
|
|
||||||
)
|
|
||||||
rec.cutoff_amount = currency_at_date.compute(
|
|
||||||
rec.amount, rec.company_currency_id
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
rec.cutoff_amount = rec.amount
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from odoo import models
|
|
||||||
|
|
||||||
|
|
||||||
class AccountMove(models.Model):
|
|
||||||
_inherit = "account.move"
|
|
||||||
|
|
||||||
def _post(self, soft=True):
|
|
||||||
res = super()._post(soft=soft)
|
|
||||||
self._update_cutoff_accrual_order()
|
|
||||||
return res
|
|
||||||
|
|
||||||
def unlink(self):
|
|
||||||
# In case the invoice was posted, we need to check any affected cutoff
|
|
||||||
self._update_cutoff_accrual_order()
|
|
||||||
return super().unlink()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_order_lines(self):
|
|
||||||
"""Return a list of order lines to process"""
|
|
||||||
self.ensure_one()
|
|
||||||
return []
|
|
||||||
|
|
||||||
def _update_cutoff_accrual_order(self):
|
|
||||||
for move in self:
|
|
||||||
if not move.is_invoice():
|
|
||||||
continue
|
|
||||||
for model_order_lines in move.sudo()._get_cutoff_accrual_order_lines():
|
|
||||||
for order_line in model_order_lines:
|
|
||||||
# In case invoice lines have been created and posted in one
|
|
||||||
# transaction, we need to clear the cache of invoice lines
|
|
||||||
# on the cutoff lines
|
|
||||||
order_line.account_cutoff_line_ids.invalidate_recordset(
|
|
||||||
["invoice_line_ids"]
|
|
||||||
)
|
|
||||||
order_line._update_cutoff_accrual(move.date)
|
|
||||||
|
|
@ -1,273 +0,0 @@
|
||||||
# Copyright 2013 Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from odoo import Command, _, api, fields, models
|
|
||||||
from odoo.exceptions import UserError
|
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class OrderLineCutoffAccrualMixin(models.AbstractModel):
|
|
||||||
_name = "order.line.cutoff.accrual.mixin"
|
|
||||||
_description = "Cutoff Accrual Order Line Mixin"
|
|
||||||
|
|
||||||
is_cutoff_accrual_excluded = fields.Boolean(
|
|
||||||
string="Do not generate cut-off entries",
|
|
||||||
readonly=True,
|
|
||||||
inverse=lambda r: r._inverse_is_cutoff_accrual_excluded(),
|
|
||||||
)
|
|
||||||
|
|
||||||
def _inverse_is_cutoff_accrual_excluded(self):
|
|
||||||
for rec in self:
|
|
||||||
rec.sudo()._update_cutoff_accrual()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_partner(self):
|
|
||||||
self.ensure_one()
|
|
||||||
return self.order_id.partner_id
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_fiscal_position(self):
|
|
||||||
self.ensure_one()
|
|
||||||
return self.order_id.fiscal_position_id
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_product(self):
|
|
||||||
self.ensure_one()
|
|
||||||
return self.product_id
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_product_qty(self):
|
|
||||||
return self.product_qty
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_price_unit(self):
|
|
||||||
self.ensure_one()
|
|
||||||
product_qty = self._get_cutoff_accrual_product_qty()
|
|
||||||
if product_qty:
|
|
||||||
return self.price_subtotal / product_qty
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_invoice_lines(self):
|
|
||||||
self.ensure_one()
|
|
||||||
return self.invoice_lines
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_invoiced_quantity(self, cutoff):
|
|
||||||
self.ensure_one()
|
|
||||||
cutoff_nextday = cutoff._nextday_start_dt()
|
|
||||||
invoiced_qty = sum(
|
|
||||||
line.quantity
|
|
||||||
* (-1 if line.move_id.move_type in ("in_refund", "out_refund") else 1)
|
|
||||||
for line in self._get_cutoff_accrual_invoice_lines()
|
|
||||||
if (
|
|
||||||
line.move_id.state == "posted"
|
|
||||||
and line.move_id.date <= cutoff.cutoff_date
|
|
||||||
)
|
|
||||||
or (
|
|
||||||
line.move_id.state == "draft"
|
|
||||||
and line.move_id.move_type == "in_refund"
|
|
||||||
and line.move_id.create_date < cutoff_nextday
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return invoiced_qty
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_lines_invoiced_after(self, cutoff):
|
|
||||||
"""Return order lines"""
|
|
||||||
return NotImplemented()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_line_delivered_after(self, cutoff):
|
|
||||||
"""Return order lines"""
|
|
||||||
return self.browse()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_delivered_service_quantity(self, cutoff):
|
|
||||||
return NotImplemented()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_delivered_stock_quantity(self, cutoff):
|
|
||||||
return NotImplemented()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_delivered_quantity(self, cutoff):
|
|
||||||
self.ensure_one()
|
|
||||||
if self.product_id.detailed_type == "service":
|
|
||||||
return self._get_cutoff_accrual_delivered_service_quantity(cutoff)
|
|
||||||
return self._get_cutoff_accrual_delivered_stock_quantity(cutoff)
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_lines_delivered_after(self, cutoff):
|
|
||||||
return self.browse()
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_delivered_min_date(self):
|
|
||||||
"""Return first delivery date"""
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_taxes(self, cutoff, quantity):
|
|
||||||
self.ensure_one()
|
|
||||||
if cutoff.cutoff_type == "accrued_revenue":
|
|
||||||
tax_account_field_name = "account_accrued_revenue_id"
|
|
||||||
tax_account_field_label = "Accrued Revenue Tax Account"
|
|
||||||
sign = 1
|
|
||||||
elif cutoff.cutoff_type == "accrued_expense":
|
|
||||||
tax_account_field_name = "account_accrued_expense_id"
|
|
||||||
tax_account_field_label = "Accrued Expense Tax Account"
|
|
||||||
sign = -1
|
|
||||||
else:
|
|
||||||
return
|
|
||||||
tax_line_ids = [Command.clear()]
|
|
||||||
base_line = self._convert_to_tax_base_line_dict()
|
|
||||||
base_line["quantity"] = quantity
|
|
||||||
tax_info = self.env["account.tax"]._compute_taxes([base_line])
|
|
||||||
for tax_line in tax_info["tax_lines_to_add"]:
|
|
||||||
amount = tax_line["tax_amount"] * sign
|
|
||||||
if cutoff.company_currency_id != self.currency_id:
|
|
||||||
currency_at_date = self.currency_id.with_context(
|
|
||||||
date=self.parent_id.cutoff_date
|
|
||||||
)
|
|
||||||
tax_cutoff_amount = currency_at_date.compute(
|
|
||||||
amount, cutoff.company_currency_id
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
tax_cutoff_amount = amount
|
|
||||||
tax = self.env["account.tax"].browse(tax_line["tax_id"])
|
|
||||||
tax_cutoff_account_id = tax[tax_account_field_name]
|
|
||||||
if not tax_cutoff_account_id:
|
|
||||||
raise UserError(
|
|
||||||
_(
|
|
||||||
"Error: Missing '%(label)s' on tax '%(name)s'.",
|
|
||||||
label=tax_account_field_label,
|
|
||||||
name=tax.display_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
tax_line_ids.append(
|
|
||||||
Command.create(
|
|
||||||
{
|
|
||||||
"tax_id": tax_line["tax_id"],
|
|
||||||
"base": tax_line["base_amount"],
|
|
||||||
"amount": amount,
|
|
||||||
"cutoff_account_id": tax_cutoff_account_id.id,
|
|
||||||
"cutoff_amount": tax_cutoff_amount,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return tax_line_ids
|
|
||||||
|
|
||||||
@api.model
|
|
||||||
def _get_cutoff_accrual_lines_domain(self, cutoff):
|
|
||||||
domain = []
|
|
||||||
domain.append(("is_cutoff_accrual_excluded", "!=", True))
|
|
||||||
return domain
|
|
||||||
|
|
||||||
@api.model
|
|
||||||
def _get_cutoff_accrual_lines_query(self, cutoff):
|
|
||||||
domain = self._get_cutoff_accrual_lines_domain(cutoff)
|
|
||||||
self._flush_search(domain)
|
|
||||||
query = self._where_calc(domain)
|
|
||||||
self._apply_ir_rules(query, "read")
|
|
||||||
return query
|
|
||||||
|
|
||||||
def _prepare_cutoff_accrual_line(self, cutoff):
|
|
||||||
"""
|
|
||||||
Calculate accrual using order line
|
|
||||||
"""
|
|
||||||
self.ensure_one()
|
|
||||||
if cutoff.cutoff_type not in ("accrued_expense", "accrued_revenue"):
|
|
||||||
return UserError(_("Wrong cutoff type %s") % cutoff.cutoff_type)
|
|
||||||
price_unit = self._get_cutoff_accrual_price_unit()
|
|
||||||
if not price_unit:
|
|
||||||
return {}
|
|
||||||
fpos = self._get_cutoff_accrual_fiscal_position()
|
|
||||||
account = cutoff._get_product_account(self.product_id, fpos)
|
|
||||||
cutoff_account_id = cutoff._get_mapping_dict().get(account.id, account.id)
|
|
||||||
res = {
|
|
||||||
"parent_id": cutoff.id,
|
|
||||||
"partner_id": self._get_cutoff_accrual_partner().id,
|
|
||||||
"name": self.name,
|
|
||||||
"account_id": account.id,
|
|
||||||
"cutoff_account_id": cutoff_account_id,
|
|
||||||
"analytic_distribution": self.analytic_distribution,
|
|
||||||
"currency_id": self.currency_id.id,
|
|
||||||
"product_id": self._get_cutoff_accrual_product().id,
|
|
||||||
"price_unit": price_unit,
|
|
||||||
}
|
|
||||||
delivered_qty = self._get_cutoff_accrual_delivered_quantity(cutoff)
|
|
||||||
invoiced_qty = self._get_cutoff_accrual_invoiced_quantity(cutoff)
|
|
||||||
if delivered_qty == invoiced_qty:
|
|
||||||
return {}
|
|
||||||
res["received_qty"] = delivered_qty
|
|
||||||
res["invoiced_qty"] = invoiced_qty
|
|
||||||
quantity = delivered_qty - invoiced_qty
|
|
||||||
if self.env.company.accrual_taxes:
|
|
||||||
res["tax_line_ids"] = self._get_cutoff_accrual_taxes(cutoff, quantity)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def _update_cutoff_accrual(self, date=False):
|
|
||||||
self.ensure_one()
|
|
||||||
if self.is_cutoff_accrual_excluded:
|
|
||||||
self.account_cutoff_line_ids.filtered(
|
|
||||||
lambda line: line.parent_id.state != "done"
|
|
||||||
).unlink()
|
|
||||||
return
|
|
||||||
for cutoff_line in self.account_cutoff_line_ids:
|
|
||||||
cutoff = cutoff_line.parent_id
|
|
||||||
invoiced_qty = (
|
|
||||||
cutoff_line._get_order_line()._get_cutoff_accrual_invoiced_quantity(
|
|
||||||
cutoff
|
|
||||||
)
|
|
||||||
)
|
|
||||||
if cutoff.state == "done" and invoiced_qty != cutoff_line.invoiced_qty:
|
|
||||||
raise UserError(
|
|
||||||
_(
|
|
||||||
"You cannot validate an invoice for an accounting date "
|
|
||||||
"that modifies a closed cutoff (i.e. for which an "
|
|
||||||
"accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
" - Previous invoiced quantity: {prev_inv_qty}\n"
|
|
||||||
" - New invoiced quantity: {new_inv_qty}"
|
|
||||||
).format(
|
|
||||||
cutoff=cutoff.display_name,
|
|
||||||
product=cutoff_line.product_id.display_name,
|
|
||||||
prev_inv_qty=cutoff_line.invoiced_qty,
|
|
||||||
new_inv_qty=invoiced_qty,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
cutoff_line.invoiced_qty = invoiced_qty
|
|
||||||
# search missing cutoff entries - start at first reception
|
|
||||||
domain = [
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
"not in",
|
|
||||||
self.account_cutoff_line_ids.parent_id.ids,
|
|
||||||
),
|
|
||||||
("cutoff_type", "in", ("accrued_expense", "accrued_revenue")),
|
|
||||||
("order_line_model", "=", self._name),
|
|
||||||
("company_id", "=", self.company_id.id),
|
|
||||||
]
|
|
||||||
if date:
|
|
||||||
# When invoice is updated
|
|
||||||
delivery_min_date = self._get_cutoff_accrual_delivered_min_date()
|
|
||||||
if delivery_min_date:
|
|
||||||
date = min(delivery_min_date, date)
|
|
||||||
else:
|
|
||||||
date = date
|
|
||||||
domain.append(("cutoff_date", ">=", date))
|
|
||||||
else:
|
|
||||||
# When is_cutoff_accrual_excluded is removed
|
|
||||||
domain.append(("state", "!=", "done"))
|
|
||||||
cutoffs = self.env["account.cutoff"].sudo().search(domain)
|
|
||||||
values = []
|
|
||||||
for cutoff in cutoffs:
|
|
||||||
data = self._prepare_cutoff_accrual_line(cutoff)
|
|
||||||
if not data:
|
|
||||||
continue
|
|
||||||
if cutoff.state == "done":
|
|
||||||
raise UserError(
|
|
||||||
_(
|
|
||||||
"You cannot validate an invoice for an accounting date "
|
|
||||||
"that generates an entry in a closed cut-off (i.e. for "
|
|
||||||
"which an accounting entry has already been created).\n"
|
|
||||||
" - Cut-off: {cutoff}\n"
|
|
||||||
" - Product: {product}\n"
|
|
||||||
).format(
|
|
||||||
cutoff=cutoff.display_name,
|
|
||||||
product=self.product_id.display_name,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
values.append(data)
|
|
||||||
if values:
|
|
||||||
self.env["account.cutoff.line"].sudo().create(values)
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
To configure this module, you need to:
|
|
||||||
|
|
||||||
#. Go to the accounting settings to select the journals and accounts used for
|
|
||||||
the cutoff.
|
|
||||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
|
||||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
|
||||||
each type of taxes an accrued tax account.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
* Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
|
||||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
This module extends the functionality of account_cutoff_base
|
|
||||||
to allow the computation of expense and revenue cutoffs on orders.
|
|
||||||
|
|
||||||
The accrual is computed by comparing on the order, the quantity
|
|
||||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
|
||||||
invoices have occurred after the cutoff date, those quantities can be affected
|
|
||||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
|
||||||
processing few lines.
|
|
||||||
|
|
||||||
You can configure to disable the generation of cutoff entries on orders.
|
|
||||||
For instance, if you know you will never receive the missing invoiced goods,
|
|
||||||
you can disable cutoff entries on a purchase order.
|
|
||||||
|
|
||||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
|
||||||
created, you are still able to create or modify invoices before the accounting
|
|
||||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
|
||||||
situation.
|
|
||||||
|
|
||||||
Once the cutoff accounting entries are generated you cannot create or modify
|
|
||||||
invoices before the accounting cutoff date.
|
|
||||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
|
||||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
|
||||||
|
|
||||||
Warning: This module is replacing account_cutoff_picking and is incompatible with it.
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
|
|
@ -1,458 +0,0 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
|
||||||
<title>Account Cut-off Accrual Order Base</title>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger (goodger@python.org)
|
|
||||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
Despite the name, some widely supported CSS2 features are used.
|
|
||||||
|
|
||||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
.subscript {
|
|
||||||
vertical-align: sub;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
.superscript {
|
|
||||||
vertical-align: super;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title, .code .error {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin: 0 0 0.5em 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
|
||||||
clear: left ;
|
|
||||||
float: left ;
|
|
||||||
margin-right: 1em }
|
|
||||||
|
|
||||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
|
||||||
clear: right ;
|
|
||||||
float: right ;
|
|
||||||
margin-left: 1em }
|
|
||||||
|
|
||||||
img.align-center, .figure.align-center, object.align-center {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.align-center {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-left {
|
|
||||||
text-align: left }
|
|
||||||
|
|
||||||
.align-center {
|
|
||||||
clear: both ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
.align-right {
|
|
||||||
text-align: right }
|
|
||||||
|
|
||||||
/* reset inner alignment in figures */
|
|
||||||
div.align-right {
|
|
||||||
text-align: inherit }
|
|
||||||
|
|
||||||
/* div.align-center * { */
|
|
||||||
/* text-align: left } */
|
|
||||||
|
|
||||||
.align-top {
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
.align-middle {
|
|
||||||
vertical-align: middle }
|
|
||||||
|
|
||||||
.align-bottom {
|
|
||||||
vertical-align: bottom }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font: inherit }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
pre.code .ln { color: gray; } /* line numbers */
|
|
||||||
pre.code, code { background-color: #eeeeee }
|
|
||||||
pre.code .comment, code .comment { color: #5C6576 }
|
|
||||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
|
||||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
|
||||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
|
||||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
|
||||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic, pre.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
/* "booktabs" style (no vertical lines) */
|
|
||||||
table.docutils.booktabs {
|
|
||||||
border: 0px;
|
|
||||||
border-top: 2px solid;
|
|
||||||
border-bottom: 2px solid;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
table.docutils.booktabs * {
|
|
||||||
border: 0px;
|
|
||||||
}
|
|
||||||
table.docutils.booktabs th {
|
|
||||||
border-bottom: thin solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document" id="account-cut-off-accrual-order-base">
|
|
||||||
<h1 class="title">Account Cut-off Accrual Order Base</h1>
|
|
||||||
|
|
||||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! source digest: sha256:32932cbcf82dafa4ab85129328cb8347b3e3260836bc2495421e1c7462909d0d
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
||||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base"><img alt="OCA/account-closing" src="https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_order_base"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
||||||
<p>This module extends the functionality of account_cutoff_base
|
|
||||||
to allow the computation of expense and revenue cutoffs on orders.</p>
|
|
||||||
<p>The accrual is computed by comparing on the order, the quantity
|
|
||||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
|
||||||
invoices have occurred after the cutoff date, those quantities can be affected
|
|
||||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
|
||||||
processing few lines.</p>
|
|
||||||
<p>You can configure to disable the generation of cutoff entries on orders.
|
|
||||||
For instance, if you know you will never receive the missing invoiced goods,
|
|
||||||
you can disable cutoff entries on a purchase order.</p>
|
|
||||||
<p>Once the cutoff lines have been generated but the accounting entries are not yet
|
|
||||||
created, you are still able to create or modify invoices before the accounting
|
|
||||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
|
||||||
situation.</p>
|
|
||||||
<p>Once the cutoff accounting entries are generated you cannot create or modify
|
|
||||||
invoices before the accounting cutoff date.
|
|
||||||
Nevertheless, you can still reset to draft a supplier invoice but you won’t be
|
|
||||||
able to modify any amount. You are then supposed to re-validate the invoice.</p>
|
|
||||||
<p>Warning: This module is replacing account_cutoff_picking and is incompatible with it.</p>
|
|
||||||
<p><strong>Table of contents</strong></p>
|
|
||||||
<div class="contents local topic" id="contents">
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
|
||||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
|
|
||||||
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
|
|
||||||
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
|
|
||||||
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
|
|
||||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="configuration">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
|
||||||
<p>To configure this module, you need to:</p>
|
|
||||||
<ol class="arabic simple">
|
|
||||||
<li>Go to the accounting settings to select the journals and accounts used for
|
|
||||||
the cutoff.</li>
|
|
||||||
<li>Analytic accounting needs to be enable in Accounting - Settings.</li>
|
|
||||||
<li>If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
|
||||||
each type of taxes an accrued tax account.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="bug-tracker">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
|
||||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-closing/issues">GitHub Issues</a>.
|
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
||||||
<a class="reference external" href="https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
|
||||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="credits">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
|
|
||||||
<div class="section" id="authors">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>BCIM</li>
|
|
||||||
<li>Akretion</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="contributors">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Alexis de Lattre (Akretion) <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
|
||||||
<li>Jacques-Etienne Baudoux (BCIM) <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
|
||||||
<li>Thierry Ducrest <<a class="reference external" href="mailto:thierry.ducrest@camptocamp.com">thierry.ducrest@camptocamp.com</a>></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="maintainers">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
|
||||||
<p>This module is maintained by the OCA.</p>
|
|
||||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
|
||||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
|
||||||
</a>
|
|
||||||
<p>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.</p>
|
|
||||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
|
||||||
<p><a class="reference external image-reference" href="https://github.com/jbaudoux"><img alt="jbaudoux" src="https://github.com/jbaudoux.png?size=40px" /></a></p>
|
|
||||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_base">OCA/account-closing</a> project on GitHub.</p>
|
|
||||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
||||||
|
|
||||||
from odoo.tests.common import TransactionCase
|
|
||||||
|
|
||||||
|
|
||||||
class TestAccountCutoffAccrualOrderCommon(TransactionCase):
|
|
||||||
@classmethod
|
|
||||||
def setUpClass(cls):
|
|
||||||
super().setUpClass()
|
|
||||||
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
|
|
||||||
cls.company = cls.env.ref("base.main_company")
|
|
||||||
cls.cutoff_journal = cls.env["account.journal"].create(
|
|
||||||
{
|
|
||||||
"code": "cop0",
|
|
||||||
"company_id": cls.company.id,
|
|
||||||
"name": "Cutoff Journal Picking",
|
|
||||||
"type": "general",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
cls.cutoff_account = cls.env["account.account"].create(
|
|
||||||
{
|
|
||||||
"name": "Cutoff account",
|
|
||||||
"code": "ACC480000",
|
|
||||||
"company_id": cls.company.id,
|
|
||||||
"account_type": "liability_current",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
cls.company.write(
|
|
||||||
{
|
|
||||||
"default_accrued_revenue_account_id": cls.cutoff_account.id,
|
|
||||||
"default_accrued_expense_account_id": cls.cutoff_account.id,
|
|
||||||
"default_cutoff_journal_id": cls.cutoff_journal.id,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
cls.partner = cls.env.ref("base.res_partner_1")
|
|
||||||
cls.products = cls.env.ref("product.product_delivery_01") | cls.env.ref(
|
|
||||||
"product.product_delivery_02"
|
|
||||||
)
|
|
||||||
cls.products |= cls.env.ref("product.expense_product")
|
|
||||||
# analytic account
|
|
||||||
cls.default_plan = cls.env["account.analytic.plan"].create(
|
|
||||||
{"name": "Default", "company_id": False}
|
|
||||||
)
|
|
||||||
cls.analytic_account = cls.env["account.analytic.account"].create(
|
|
||||||
{
|
|
||||||
"name": "analytic_account",
|
|
||||||
"plan_id": cls.default_plan.id,
|
|
||||||
"company_id": False,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
def _refund_invoice(self, invoice, post=True):
|
|
||||||
credit_note_wizard = (
|
|
||||||
self.env["account.move.reversal"]
|
|
||||||
.with_context(
|
|
||||||
**{
|
|
||||||
"active_ids": invoice.ids,
|
|
||||||
"active_id": invoice.id,
|
|
||||||
"active_model": "account.move",
|
|
||||||
"tz": self.env.company.partner_id.tz or "UTC",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.create(
|
|
||||||
{
|
|
||||||
"refund_method": "refund",
|
|
||||||
"reason": "refund",
|
|
||||||
"journal_id": invoice.journal_id.id,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
invoice_refund = self.env["account.move"].browse(
|
|
||||||
credit_note_wizard.reverse_moves()["res_id"]
|
|
||||||
)
|
|
||||||
invoice_refund.ref = invoice_refund.id
|
|
||||||
if post:
|
|
||||||
invoice_refund.action_post()
|
|
||||||
return invoice_refund
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!--
|
|
||||||
Copyright 2013 Alexis de Lattre (Akretion) <alexis.delattre@akretion.com>
|
|
||||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
-->
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<!-- Form view for lines -->
|
|
||||||
<record id="account_cutoff_line_form" model="ir.ui.view">
|
|
||||||
<field name="model">account.cutoff.line</field>
|
|
||||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_line_form" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="name" position="before">
|
|
||||||
<field name="order_line_model" invisible="1" />
|
|
||||||
<field
|
|
||||||
name="product_id"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
|
||||||
/>
|
|
||||||
</field>
|
|
||||||
<field name="quantity" position="before">
|
|
||||||
<field
|
|
||||||
name="received_qty"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
|
||||||
/>
|
|
||||||
<field
|
|
||||||
name="invoiced_qty"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
|
||||||
/>
|
|
||||||
</field>
|
|
||||||
<group name="tax" position="before">
|
|
||||||
<group
|
|
||||||
name="invoicelines"
|
|
||||||
string="Invoice Lines"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
|
||||||
>
|
|
||||||
<field name="invoice_line_ids" nolabel="1" colspan="2">
|
|
||||||
<tree>
|
|
||||||
<field name="move_id" />
|
|
||||||
<field name="quantity" />
|
|
||||||
<field name="date" />
|
|
||||||
<field name="parent_state" />
|
|
||||||
</tree>
|
|
||||||
</field>
|
|
||||||
</group>
|
|
||||||
</group>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Tree view for lines -->
|
|
||||||
<record id="account_cutoff_line_tree" model="ir.ui.view">
|
|
||||||
<field name="model">account.cutoff.line</field>
|
|
||||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_line_tree" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="parent_id" position="after">
|
|
||||||
<!--field
|
|
||||||
name="order_id"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}" />
|
|
||||||
/-->
|
|
||||||
</field>
|
|
||||||
<field name="quantity" position="after">
|
|
||||||
<field name="order_line_model" invisible="1" />
|
|
||||||
<field
|
|
||||||
name="received_qty"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
|
||||||
/>
|
|
||||||
<field
|
|
||||||
name="invoiced_qty"
|
|
||||||
attrs="{'invisible': [('order_line_model', '=', False)]}"
|
|
||||||
/>
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!--
|
|
||||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
-->
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="account_cutoff_form" model="ir.ui.view">
|
|
||||||
<field name="model">account.cutoff</field>
|
|
||||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_form" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="cutoff_type" position="after">
|
|
||||||
<span> on </span><field name="order_line_model" />
|
|
||||||
</field>
|
|
||||||
<field name="source_move_state" position="attributes">
|
|
||||||
<attribute
|
|
||||||
name="attrs"
|
|
||||||
>{'invisible': [('order_line_model', '!=', False)]}</attribute>
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
# Architecture
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
|
||||||
V --> C[Controllers]
|
|
||||||
V --> W[Wizards – Transient Models]
|
|
||||||
C --> M[Models and ORM]
|
|
||||||
W --> M
|
|
||||||
M --> R[Reports]
|
|
||||||
DX[Data XML] --> M
|
|
||||||
S[Security – ACLs and Groups] -. enforces .-> M
|
|
||||||
|
|
||||||
subgraph Account_cutoff_accrual_order_base Module - account_cutoff_accrual_order_base
|
|
||||||
direction LR
|
|
||||||
M:::layer
|
|
||||||
W:::layer
|
|
||||||
C:::layer
|
|
||||||
V:::layer
|
|
||||||
R:::layer
|
|
||||||
S:::layer
|
|
||||||
DX:::layer
|
|
||||||
end
|
|
||||||
|
|
||||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes
|
|
||||||
- Views include tree/form/kanban templates and report templates.
|
|
||||||
- Controllers provide website/portal routes when present.
|
|
||||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
|
||||||
- Data XML loads data/demo records; Security defines groups and access.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Configuration
|
|
||||||
|
|
||||||
Refer to Odoo settings for account_cutoff_accrual_order_base. Configure related models, access rights, and options as needed.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Controllers
|
|
||||||
|
|
||||||
This module does not define custom HTTP controllers.
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# Dependencies
|
|
||||||
|
|
||||||
This addon depends on:
|
|
||||||
|
|
||||||
- [account_cutoff_base](https://github.com/bringout/oca-technical)
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# FAQ
|
|
||||||
|
|
||||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
|
||||||
- Q: How to enable? A: Start server with --addon account_cutoff_accrual_order_base or install in UI.
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Install
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base"
|
|
||||||
# or
|
|
||||||
uv pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base"
|
|
||||||
```
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# Models
|
|
||||||
|
|
||||||
Detected core models and extensions in account_cutoff_accrual_order_base.
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
classDiagram
|
|
||||||
class order_line_cutoff_accrual_mixin
|
|
||||||
class account_cutoff
|
|
||||||
class account_cutoff_line
|
|
||||||
class account_move
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes
|
|
||||||
- Classes show model technical names; fields omitted for brevity.
|
|
||||||
- Items listed under _inherit are extensions of existing models.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Overview
|
|
||||||
|
|
||||||
Packaged Odoo addon: account_cutoff_accrual_order_base. Provides features documented in upstream Odoo 16 under this addon.
|
|
||||||
|
|
||||||
- Source: OCA/OCB 16.0, addon account_cutoff_accrual_order_base
|
|
||||||
- License: LGPL-3
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Reports
|
|
||||||
|
|
||||||
This module does not define custom reports.
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Security
|
|
||||||
|
|
||||||
This module does not define custom security rules or access controls beyond Odoo defaults.
|
|
||||||
|
|
||||||
Default Odoo security applies:
|
|
||||||
- Base user access through standard groups
|
|
||||||
- Model access inherited from dependencies
|
|
||||||
- No custom row-level security rules
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# Troubleshooting
|
|
||||||
|
|
||||||
- Ensure Python and Odoo environment matches repo guidance.
|
|
||||||
- Check database connectivity and logs if startup fails.
|
|
||||||
- Validate that dependent addons listed in DEPENDENCIES.md are installed.
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Usage
|
|
||||||
|
|
||||||
Start Odoo including this addon (from repo root):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_cutoff_accrual_order_base
|
|
||||||
```
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Wizards
|
|
||||||
|
|
||||||
This module does not include UI wizards.
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
[project]
|
|
||||||
name = "odoo-bringout-oca-account-closing-account_cutoff_accrual_order_base"
|
|
||||||
version = "16.0.0"
|
|
||||||
description = "Account Cut-off Accrual Order Base - Accrued Order Base"
|
|
||||||
authors = [
|
|
||||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
|
||||||
]
|
|
||||||
dependencies = [
|
|
||||||
"odoo-bringout-oca-account-closing-account_cutoff_base>=16.0.0",
|
|
||||||
"requests>=2.25.1"
|
|
||||||
]
|
|
||||||
readme = "README.md"
|
|
||||||
requires-python = ">= 3.11"
|
|
||||||
classifiers = [
|
|
||||||
"Development Status :: 5 - Production/Stable",
|
|
||||||
"Intended Audience :: Developers",
|
|
||||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
||||||
"Programming Language :: Python :: 3",
|
|
||||||
"Programming Language :: Python :: 3.11",
|
|
||||||
"Programming Language :: Python :: 3.12",
|
|
||||||
"Topic :: Office/Business",
|
|
||||||
]
|
|
||||||
|
|
||||||
[project.urls]
|
|
||||||
homepage = "https://github.com/bringout/0"
|
|
||||||
repository = "https://github.com/bringout/0"
|
|
||||||
|
|
||||||
[build-system]
|
|
||||||
requires = ["hatchling"]
|
|
||||||
build-backend = "hatchling.build"
|
|
||||||
|
|
||||||
[tool.hatch.metadata]
|
|
||||||
allow-direct-references = true
|
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
|
||||||
packages = ["account_cutoff_accrual_order_base"]
|
|
||||||
|
|
||||||
[tool.rye]
|
|
||||||
managed = true
|
|
||||||
dev-dependencies = [
|
|
||||||
"pytest>=8.4.1",
|
|
||||||
]
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
# Account Cut-off Accrual Order Stock Base
|
|
||||||
|
|
||||||
Odoo addon: account_cutoff_accrual_order_stock_base
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base
|
|
||||||
```
|
|
||||||
|
|
||||||
## Dependencies
|
|
||||||
|
|
||||||
This addon depends on:
|
|
||||||
- account_cutoff_base
|
|
||||||
- stock
|
|
||||||
|
|
||||||
## Manifest Information
|
|
||||||
|
|
||||||
- **Name**: Account Cut-off Accrual Order Stock Base
|
|
||||||
- **Version**: 16.0.1.0.0
|
|
||||||
- **Category**: Accounting & Finance
|
|
||||||
- **License**: AGPL-3
|
|
||||||
- **Installable**: True
|
|
||||||
|
|
||||||
## Source
|
|
||||||
|
|
||||||
Based on [OCA/account-closing](https://github.com/OCA/account-closing) branch 16.0, addon `account_cutoff_accrual_order_stock_base`.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This package maintains the original AGPL-3 license from the upstream Odoo project.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
- Overview: doc/OVERVIEW.md
|
|
||||||
- Architecture: doc/ARCHITECTURE.md
|
|
||||||
- Models: doc/MODELS.md
|
|
||||||
- Controllers: doc/CONTROLLERS.md
|
|
||||||
- Wizards: doc/WIZARDS.md
|
|
||||||
- Install: doc/INSTALL.md
|
|
||||||
- Usage: doc/USAGE.md
|
|
||||||
- Configuration: doc/CONFIGURATION.md
|
|
||||||
- Dependencies: doc/DEPENDENCIES.md
|
|
||||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
|
||||||
- FAQ: doc/FAQ.md
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
========================================
|
|
||||||
Account Cut-off Accrual Order Stock Base
|
|
||||||
========================================
|
|
||||||
|
|
||||||
..
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! source digest: sha256:791c43ae54bd1847ebd5e0f75ad43368499c624e2ec8f67b58ac0e33b1a4a60c
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
.. |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_accrual_order_stock_base
|
|
||||||
: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_accrual_order_stock_base
|
|
||||||
:alt: Translate me on Weblate
|
|
||||||
.. |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|
|
|
||||||
|
|
||||||
This module extends the functionality of account_cutoff_base
|
|
||||||
to define prepaid accounts for prepaid goods in the scope of accrued revenue
|
|
||||||
and expense.
|
|
||||||
|
|
||||||
**Table of contents**
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
Bug Tracker
|
|
||||||
===========
|
|
||||||
|
|
||||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-closing/issues>`_.
|
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
||||||
`feedback <https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_stock_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
|
||||||
|
|
||||||
Do not contact contributors directly about support or help with technical issues.
|
|
||||||
|
|
||||||
Credits
|
|
||||||
=======
|
|
||||||
|
|
||||||
Authors
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
* BCIM
|
|
||||||
|
|
||||||
Contributors
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
|
|
||||||
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-jbaudoux| image:: https://github.com/jbaudoux.png?size=40px
|
|
||||||
:target: https://github.com/jbaudoux
|
|
||||||
:alt: jbaudoux
|
|
||||||
|
|
||||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
|
||||||
|
|
||||||
|maintainer-jbaudoux|
|
|
||||||
|
|
||||||
This module is part of the `OCA/account-closing <https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base>`_ project on GitHub.
|
|
||||||
|
|
||||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
||||||
|
|
||||||
from . import models
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "Account Cut-off Accrual Order Stock Base",
|
|
||||||
"version": "16.0.1.0.0",
|
|
||||||
"category": "Accounting & Finance",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"summary": "Accrued Order Stock Base",
|
|
||||||
"author": "BCIM, Odoo Community Association (OCA)",
|
|
||||||
"maintainers": ["jbaudoux"],
|
|
||||||
"website": "https://github.com/OCA/account-closing",
|
|
||||||
"depends": ["account_cutoff_base", "stock"],
|
|
||||||
"data": [
|
|
||||||
"views/account_cutoff_view.xml",
|
|
||||||
],
|
|
||||||
"installable": True,
|
|
||||||
"application": False,
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_stock_base
|
|
||||||
#
|
|
||||||
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_accrual_order_stock_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid ""
|
|
||||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
|
||||||
"and not yet received."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid "Cut-off Prepaid Stock Account"
|
|
||||||
msgstr ""
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_stock_base
|
|
||||||
#
|
|
||||||
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_accrual_order_stock_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Računovodstveno presjecanje"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid ""
|
|
||||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
|
||||||
"and not yet received."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid "Cut-off Prepaid Stock Account"
|
|
||||||
msgstr "Račun za prepaid zalihe presjecanja"
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_stock_base
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 16.0+e\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2023-10-26 12:01+0000\n"
|
|
||||||
"PO-Revision-Date: 2023-10-26 12:01+0000\n"
|
|
||||||
"Last-Translator: \n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: \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_order_stock_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid ""
|
|
||||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
|
||||||
"and not yet received."
|
|
||||||
msgstr ""
|
|
||||||
"Compte pour les provisions sur charges de type marchandise constatées "
|
|
||||||
"d'avance. Par exemple, les marchandises facturées et pas encore reçues."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid "Cut-off Prepaid Stock Account"
|
|
||||||
msgstr "Compte de provision pour marchandise prépayée"
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_order_stock_base
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 16.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"PO-Revision-Date: 2024-10-21 12:06+0000\n"
|
|
||||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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 5.6.2\n"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_order_stock_base.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Scritture di fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,help:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid ""
|
|
||||||
"Account for accrual of prepaid stock expenses. For instance, goods invoiced "
|
|
||||||
"and not yet received."
|
|
||||||
msgstr ""
|
|
||||||
"Conto ratei costi giacenze prepagati. Esempio, merce fatturata non ancora "
|
|
||||||
"ricevuta."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_order_stock_base
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_order_stock_base.field_account_cutoff__cutoff_account_prepaid_stock_id
|
|
||||||
msgid "Cut-off Prepaid Stock Account"
|
|
||||||
msgstr "Conto scritture di chiusura giacenze prepagate"
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
||||||
|
|
||||||
from . import account_cutoff
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
from odoo import Command, api, fields, models
|
|
||||||
from odoo.tools import float_is_zero
|
|
||||||
|
|
||||||
|
|
||||||
class AccountCutoff(models.Model):
|
|
||||||
_inherit = "account.cutoff"
|
|
||||||
|
|
||||||
cutoff_account_prepaid_stock_id = fields.Many2one(
|
|
||||||
comodel_name="account.account",
|
|
||||||
string="Cut-off Prepaid Stock Account",
|
|
||||||
domain="[('deprecated', '=', False)]",
|
|
||||||
states={"done": [("readonly", True)]},
|
|
||||||
check_company=True,
|
|
||||||
tracking=True,
|
|
||||||
default=lambda self: self._default_cutoff_account_prepaid_stock_id(),
|
|
||||||
help="Account for accrual of prepaid stock expenses. "
|
|
||||||
"For instance, goods invoiced and not yet received.",
|
|
||||||
)
|
|
||||||
|
|
||||||
@api.model
|
|
||||||
def _default_cutoff_account_prepaid_stock_id(self):
|
|
||||||
cutoff_type = self.env.context.get("default_cutoff_type")
|
|
||||||
company = self.env.company
|
|
||||||
if cutoff_type == "accrued_expense":
|
|
||||||
account_id = company.default_prepaid_expense_account_id.id or False
|
|
||||||
elif cutoff_type == "accrued_revenue":
|
|
||||||
account_id = company.default_prepaid_revenue_account_id.id or False
|
|
||||||
else:
|
|
||||||
account_id = False
|
|
||||||
return account_id
|
|
||||||
|
|
||||||
def _prepare_counterpart_moves(
|
|
||||||
self, to_provision, amount_total_pos, amount_total_neg
|
|
||||||
):
|
|
||||||
if not self.cutoff_account_prepaid_stock_id:
|
|
||||||
return super()._prepare_counterpart_moves(
|
|
||||||
to_provision, amount_total_pos, amount_total_neg
|
|
||||||
)
|
|
||||||
if self.cutoff_type == "accrued_revenue":
|
|
||||||
prepaid_amount = amount_total_neg
|
|
||||||
amount = amount_total_pos
|
|
||||||
elif self.cutoff_type == "accrued_expense":
|
|
||||||
prepaid_amount = amount_total_pos
|
|
||||||
amount = amount_total_neg
|
|
||||||
else:
|
|
||||||
prepaid_amount = 0
|
|
||||||
amount = 0
|
|
||||||
company_currency = self.company_id.currency_id
|
|
||||||
cur_rprec = company_currency.rounding
|
|
||||||
movelines_to_create = super()._prepare_counterpart_moves(
|
|
||||||
to_provision, 0, amount
|
|
||||||
)
|
|
||||||
if not float_is_zero(prepaid_amount, precision_rounding=cur_rprec):
|
|
||||||
movelines_to_create.append(
|
|
||||||
Command.create(
|
|
||||||
{
|
|
||||||
"account_id": self.cutoff_account_prepaid_stock_id.id,
|
|
||||||
"debit": prepaid_amount,
|
|
||||||
"credit": 0,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return movelines_to_create
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
This module extends the functionality of account_cutoff_base
|
|
||||||
to define prepaid accounts for prepaid goods in the scope of accrued revenue
|
|
||||||
and expense.
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
|
|
@ -1,425 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
|
||||||
<title>Account Cut-off Accrual Order Stock Base</title>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger (goodger@python.org)
|
|
||||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
.subscript {
|
|
||||||
vertical-align: sub;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
.superscript {
|
|
||||||
vertical-align: super;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title, .code .error {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin: 0 0 0.5em 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
|
||||||
clear: left ;
|
|
||||||
float: left ;
|
|
||||||
margin-right: 1em }
|
|
||||||
|
|
||||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
|
||||||
clear: right ;
|
|
||||||
float: right ;
|
|
||||||
margin-left: 1em }
|
|
||||||
|
|
||||||
img.align-center, .figure.align-center, object.align-center {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.align-center {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-left {
|
|
||||||
text-align: left }
|
|
||||||
|
|
||||||
.align-center {
|
|
||||||
clear: both ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
.align-right {
|
|
||||||
text-align: right }
|
|
||||||
|
|
||||||
/* reset inner alignment in figures */
|
|
||||||
div.align-right {
|
|
||||||
text-align: inherit }
|
|
||||||
|
|
||||||
/* div.align-center * { */
|
|
||||||
/* text-align: left } */
|
|
||||||
|
|
||||||
.align-top {
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
.align-middle {
|
|
||||||
vertical-align: middle }
|
|
||||||
|
|
||||||
.align-bottom {
|
|
||||||
vertical-align: bottom }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font: inherit }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
pre.code .ln { color: grey; } /* line numbers */
|
|
||||||
pre.code, code { background-color: #eeeeee }
|
|
||||||
pre.code .comment, code .comment { color: #5C6576 }
|
|
||||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
|
||||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
|
||||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
|
||||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
|
||||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
/* "booktabs" style (no vertical lines) */
|
|
||||||
table.docutils.booktabs {
|
|
||||||
border: 0px;
|
|
||||||
border-top: 2px solid;
|
|
||||||
border-bottom: 2px solid;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
table.docutils.booktabs * {
|
|
||||||
border: 0px;
|
|
||||||
}
|
|
||||||
table.docutils.booktabs th {
|
|
||||||
border-bottom: thin solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document" id="account-cut-off-accrual-order-stock-base">
|
|
||||||
<h1 class="title">Account Cut-off Accrual Order Stock Base</h1>
|
|
||||||
|
|
||||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! source digest: sha256:791c43ae54bd1847ebd5e0f75ad43368499c624e2ec8f67b58ac0e33b1a4a60c
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
||||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base"><img alt="OCA/account-closing" src="https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_order_stock_base"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
||||||
<p>This module extends the functionality of account_cutoff_base
|
|
||||||
to define prepaid accounts for prepaid goods in the scope of accrued revenue
|
|
||||||
and expense.</p>
|
|
||||||
<p><strong>Table of contents</strong></p>
|
|
||||||
<div class="contents local topic" id="contents">
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
|
|
||||||
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
|
|
||||||
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
|
|
||||||
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
|
|
||||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="bug-tracker">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
|
|
||||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-closing/issues">GitHub Issues</a>.
|
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
||||||
<a class="reference external" href="https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_order_stock_base%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
|
||||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="credits">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
|
|
||||||
<div class="section" id="authors">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>BCIM</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="contributors">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Jacques-Etienne Baudoux (BCIM) <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="maintainers">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
|
|
||||||
<p>This module is maintained by the OCA.</p>
|
|
||||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
|
||||||
<p>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.</p>
|
|
||||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
|
||||||
<p><a class="reference external image-reference" href="https://github.com/jbaudoux"><img alt="jbaudoux" src="https://github.com/jbaudoux.png?size=40px" /></a></p>
|
|
||||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_order_stock_base">OCA/account-closing</a> project on GitHub.</p>
|
|
||||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!--
|
|
||||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
-->
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="account_cutoff_form" model="ir.ui.view">
|
|
||||||
<field name="model">account.cutoff</field>
|
|
||||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_form" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="cutoff_account_id" position="after">
|
|
||||||
<field
|
|
||||||
name="cutoff_account_prepaid_stock_id"
|
|
||||||
required="1"
|
|
||||||
options="{'no_create': True}"
|
|
||||||
/>
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
# Architecture
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
|
||||||
V --> C[Controllers]
|
|
||||||
V --> W[Wizards – Transient Models]
|
|
||||||
C --> M[Models and ORM]
|
|
||||||
W --> M
|
|
||||||
M --> R[Reports]
|
|
||||||
DX[Data XML] --> M
|
|
||||||
S[Security – ACLs and Groups] -. enforces .-> M
|
|
||||||
|
|
||||||
subgraph Account_cutoff_accrual_order_stock_base Module - account_cutoff_accrual_order_stock_base
|
|
||||||
direction LR
|
|
||||||
M:::layer
|
|
||||||
W:::layer
|
|
||||||
C:::layer
|
|
||||||
V:::layer
|
|
||||||
R:::layer
|
|
||||||
S:::layer
|
|
||||||
DX:::layer
|
|
||||||
end
|
|
||||||
|
|
||||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes
|
|
||||||
- Views include tree/form/kanban templates and report templates.
|
|
||||||
- Controllers provide website/portal routes when present.
|
|
||||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
|
||||||
- Data XML loads data/demo records; Security defines groups and access.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Configuration
|
|
||||||
|
|
||||||
Refer to Odoo settings for account_cutoff_accrual_order_stock_base. Configure related models, access rights, and options as needed.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Controllers
|
|
||||||
|
|
||||||
This module does not define custom HTTP controllers.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Dependencies
|
|
||||||
|
|
||||||
This addon depends on:
|
|
||||||
|
|
||||||
- [account_cutoff_base](https://github.com/bringout/oca-technical)
|
|
||||||
- [stock](https://github.com/bringout/oca-ocb-warehouse/tree/0ee5ffef60413a71dceb350918ad3fb572ec1875/odoo-bringout-oca-ocb-stock)
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# FAQ
|
|
||||||
|
|
||||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
|
||||||
- Q: How to enable? A: Start server with --addon account_cutoff_accrual_order_stock_base or install in UI.
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Install
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base"
|
|
||||||
# or
|
|
||||||
uv pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base"
|
|
||||||
```
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
# Models
|
|
||||||
|
|
||||||
Detected core models and extensions in account_cutoff_accrual_order_stock_base.
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
classDiagram
|
|
||||||
class account_cutoff
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes
|
|
||||||
- Classes show model technical names; fields omitted for brevity.
|
|
||||||
- Items listed under _inherit are extensions of existing models.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Overview
|
|
||||||
|
|
||||||
Packaged Odoo addon: account_cutoff_accrual_order_stock_base. Provides features documented in upstream Odoo 16 under this addon.
|
|
||||||
|
|
||||||
- Source: OCA/OCB 16.0, addon account_cutoff_accrual_order_stock_base
|
|
||||||
- License: LGPL-3
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Reports
|
|
||||||
|
|
||||||
This module does not define custom reports.
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Security
|
|
||||||
|
|
||||||
This module does not define custom security rules or access controls beyond Odoo defaults.
|
|
||||||
|
|
||||||
Default Odoo security applies:
|
|
||||||
- Base user access through standard groups
|
|
||||||
- Model access inherited from dependencies
|
|
||||||
- No custom row-level security rules
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# Troubleshooting
|
|
||||||
|
|
||||||
- Ensure Python and Odoo environment matches repo guidance.
|
|
||||||
- Check database connectivity and logs if startup fails.
|
|
||||||
- Validate that dependent addons listed in DEPENDENCIES.md are installed.
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Usage
|
|
||||||
|
|
||||||
Start Odoo including this addon (from repo root):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_cutoff_accrual_order_stock_base
|
|
||||||
```
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Wizards
|
|
||||||
|
|
||||||
This module does not include UI wizards.
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
[project]
|
|
||||||
name = "odoo-bringout-oca-account-closing-account_cutoff_accrual_order_stock_base"
|
|
||||||
version = "16.0.0"
|
|
||||||
description = "Account Cut-off Accrual Order Stock Base - Accrued Order Stock Base"
|
|
||||||
authors = [
|
|
||||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
|
||||||
]
|
|
||||||
dependencies = [
|
|
||||||
"odoo-bringout-oca-account-closing-account_cutoff_base>=16.0.0",
|
|
||||||
"odoo-bringout-oca-ocb-stock>=16.0.0",
|
|
||||||
"requests>=2.25.1"
|
|
||||||
]
|
|
||||||
readme = "README.md"
|
|
||||||
requires-python = ">= 3.11"
|
|
||||||
classifiers = [
|
|
||||||
"Development Status :: 5 - Production/Stable",
|
|
||||||
"Intended Audience :: Developers",
|
|
||||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
||||||
"Programming Language :: Python :: 3",
|
|
||||||
"Programming Language :: Python :: 3.11",
|
|
||||||
"Programming Language :: Python :: 3.12",
|
|
||||||
"Topic :: Office/Business",
|
|
||||||
]
|
|
||||||
|
|
||||||
[project.urls]
|
|
||||||
homepage = "https://github.com/bringout/0"
|
|
||||||
repository = "https://github.com/bringout/0"
|
|
||||||
|
|
||||||
[build-system]
|
|
||||||
requires = ["hatchling"]
|
|
||||||
build-backend = "hatchling.build"
|
|
||||||
|
|
||||||
[tool.hatch.metadata]
|
|
||||||
allow-direct-references = true
|
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
|
||||||
packages = ["account_cutoff_accrual_order_stock_base"]
|
|
||||||
|
|
||||||
[tool.rye]
|
|
||||||
managed = true
|
|
||||||
dev-dependencies = [
|
|
||||||
"pytest>=8.4.1",
|
|
||||||
]
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
# Account Cut-off Accrual Purchase
|
|
||||||
|
|
||||||
Odoo addon: account_cutoff_accrual_purchase
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase
|
|
||||||
```
|
|
||||||
|
|
||||||
## Dependencies
|
|
||||||
|
|
||||||
This addon depends on:
|
|
||||||
- account_cutoff_accrual_order_base
|
|
||||||
- purchase
|
|
||||||
- purchase_force_invoiced
|
|
||||||
|
|
||||||
## Manifest Information
|
|
||||||
|
|
||||||
- **Name**: Account Cut-off Accrual Purchase
|
|
||||||
- **Version**: 16.0.1.0.0
|
|
||||||
- **Category**: Accounting & Finance
|
|
||||||
- **License**: AGPL-3
|
|
||||||
- **Installable**: True
|
|
||||||
|
|
||||||
## Source
|
|
||||||
|
|
||||||
Based on [OCA/account-closing](https://github.com/OCA/account-closing) branch 16.0, addon `account_cutoff_accrual_purchase`.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This package maintains the original AGPL-3 license from the upstream Odoo project.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
- Overview: doc/OVERVIEW.md
|
|
||||||
- Architecture: doc/ARCHITECTURE.md
|
|
||||||
- Models: doc/MODELS.md
|
|
||||||
- Controllers: doc/CONTROLLERS.md
|
|
||||||
- Wizards: doc/WIZARDS.md
|
|
||||||
- Install: doc/INSTALL.md
|
|
||||||
- Usage: doc/USAGE.md
|
|
||||||
- Configuration: doc/CONFIGURATION.md
|
|
||||||
- Dependencies: doc/DEPENDENCIES.md
|
|
||||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
|
||||||
- FAQ: doc/FAQ.md
|
|
||||||
|
|
@ -1,153 +0,0 @@
|
||||||
================================
|
|
||||||
Account Cut-off Accrual Purchase
|
|
||||||
================================
|
|
||||||
|
|
||||||
..
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! source digest: sha256:a0536b91a6e1c6035a5c0a21557f7bf3d7c392b59c460a6ab9ed1e40d9f6180c
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
.. |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_accrual_purchase
|
|
||||||
: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_accrual_purchase
|
|
||||||
:alt: Translate me on Weblate
|
|
||||||
.. |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|
|
|
||||||
|
|
||||||
This module extends the functionality of account_cutoff_accrual_order_base
|
|
||||||
to allow the computation of expense cutoffs on purchase orders.
|
|
||||||
|
|
||||||
The accrual is computed by comparing on the order, the quantity
|
|
||||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
|
||||||
invoices have occurred after the cutoff date, those quantities can be affected
|
|
||||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
|
||||||
processing few lines.
|
|
||||||
|
|
||||||
For PO, you can make the difference between:
|
|
||||||
* invoice to receive (received qty > invoiced qty)
|
|
||||||
* goods to receive (prepayment) (received qty < invoiced qty)
|
|
||||||
|
|
||||||
If you expect a refund, you can make it in draft. In standard, this update
|
|
||||||
the PO and the quantity will not be accrued as goods to receive. You can accrue
|
|
||||||
the draft credit note as "credit notes to receive".
|
|
||||||
|
|
||||||
Orders forced in status invoiced won't have cutoff entries.
|
|
||||||
For instance, if you know you will never receive the missing invoiced goods,
|
|
||||||
you can force it as invoiced.
|
|
||||||
|
|
||||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
|
||||||
created, you are still able to create or modify invoices before the accounting
|
|
||||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
|
||||||
situation.
|
|
||||||
|
|
||||||
Once the cutoff accounting entries are generated you cannot create or modify
|
|
||||||
invoices before the accounting cutoff date.
|
|
||||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
|
||||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
|
||||||
|
|
||||||
**Table of contents**
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
=============
|
|
||||||
|
|
||||||
To configure this module, you need to:
|
|
||||||
|
|
||||||
#. Go to the accounting settings to select the journals and accounts used for
|
|
||||||
the cutoff.
|
|
||||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
|
||||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
|
||||||
each type of taxes an accrued tax account.
|
|
||||||
|
|
||||||
Usage
|
|
||||||
=====
|
|
||||||
|
|
||||||
To use this module, you need to:
|
|
||||||
|
|
||||||
#. Go to Accounting - Cut-offs to configure and generate the cutoffs
|
|
||||||
|
|
||||||
Examples
|
|
||||||
========
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
|
||||||
This will not make an cutoff entry
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
|
||||||
This will make an cutoff entry with invoice to receive: 10
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 0, quantity invoiced: 10
|
|
||||||
This will make an cutoff entry with goods to receive: 10
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
|
||||||
This will make an cutoff entry with invoice to receive: 10
|
|
||||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
|
||||||
The cutoff entry is updated in the existing cut-off
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
|
||||||
This will not make an cutoff entry
|
|
||||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
|
||||||
An cutoff entry is added in the existing cut-off
|
|
||||||
|
|
||||||
Bug Tracker
|
|
||||||
===========
|
|
||||||
|
|
||||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-closing/issues>`_.
|
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
||||||
`feedback <https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_purchase%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
|
||||||
|
|
||||||
Do not contact contributors directly about support or help with technical issues.
|
|
||||||
|
|
||||||
Credits
|
|
||||||
=======
|
|
||||||
|
|
||||||
Authors
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
* BCIM
|
|
||||||
|
|
||||||
Contributors
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
|
|
||||||
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-jbaudoux| image:: https://github.com/jbaudoux.png?size=40px
|
|
||||||
:target: https://github.com/jbaudoux
|
|
||||||
:alt: jbaudoux
|
|
||||||
|
|
||||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
|
||||||
|
|
||||||
|maintainer-jbaudoux|
|
|
||||||
|
|
||||||
This module is part of the `OCA/account-closing <https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase>`_ project on GitHub.
|
|
||||||
|
|
||||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
||||||
|
|
||||||
from . import models
|
|
||||||
from .hooks import post_init_hook
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "Account Cut-off Accrual Purchase",
|
|
||||||
"version": "16.0.1.0.0",
|
|
||||||
"category": "Accounting & Finance",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"summary": "Accrued Expense on Purchase Order",
|
|
||||||
"author": "BCIM, Odoo Community Association (OCA)",
|
|
||||||
"maintainers": ["jbaudoux"],
|
|
||||||
"website": "https://github.com/OCA/account-closing",
|
|
||||||
"depends": [
|
|
||||||
"account_cutoff_accrual_order_base",
|
|
||||||
"purchase",
|
|
||||||
"purchase_force_invoiced",
|
|
||||||
],
|
|
||||||
"data": [
|
|
||||||
"views/account_cutoff.xml",
|
|
||||||
"views/account_cutoff_line.xml",
|
|
||||||
"data/ir_cron.xml",
|
|
||||||
],
|
|
||||||
"post_init_hook": "post_init_hook",
|
|
||||||
"installable": True,
|
|
||||||
"application": True,
|
|
||||||
}
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<odoo noupdate="1">
|
|
||||||
|
|
||||||
<record forcecreate="True" id="ir_cron_cutoff" model="ir.cron">
|
|
||||||
<field name="name">Make cutoff at end of period - purchase order lines</field>
|
|
||||||
<field eval="True" name="active" />
|
|
||||||
<field name="model_id" ref="account_cutoff_base.model_account_cutoff" />
|
|
||||||
<field name="state">code</field>
|
|
||||||
<field
|
|
||||||
name="code"
|
|
||||||
>model._cron_cutoff("accrued_expense", "purchase.order.line")</field>
|
|
||||||
<field name="user_id" ref="base.user_root" />
|
|
||||||
<field name="interval_number">1</field>
|
|
||||||
<field name="interval_type">months</field>
|
|
||||||
<field name="numbercall">-1</field>
|
|
||||||
<field eval="False" name="doall" />
|
|
||||||
<field name="nextcall" eval="(DateTime.now()).strftime('%Y-%m-01 00:00:00')" />
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
# Copyright 2023 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
|
|
||||||
def post_init_hook(cr, registry):
|
|
||||||
cr.execute(
|
|
||||||
"""
|
|
||||||
UPDATE purchase_order_line
|
|
||||||
SET is_cutoff_accrual_excluded = TRUE
|
|
||||||
WHERE order_id IN
|
|
||||||
( SELECT id FROM purchase_order WHERE force_invoiced )
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
@ -1,90 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_purchase
|
|
||||||
#
|
|
||||||
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_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
|
||||||
msgid "Account Cutoff Lines"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
|
||||||
msgid "Accrued Expense on Purchase Orders"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid "Click to start preparing a new expense accrual."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
|
||||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
|
||||||
msgid "Make cutoff at end of period - purchase order lines"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
|
||||||
msgid "Order Reference"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
|
||||||
msgid "Purchase Order"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
|
||||||
msgid "Purchase Order Line"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
|
||||||
msgid "Purchase Orders"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid ""
|
|
||||||
"This view can be used by accountants in order to collect information about "
|
|
||||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
|
||||||
"journal entry in one click."
|
|
||||||
msgstr ""
|
|
||||||
|
|
@ -1,90 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_purchase
|
|
||||||
#
|
|
||||||
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_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Računovodstveno presjecanje"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr "Linija računovodstvenog presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
|
||||||
msgid "Account Cutoff Lines"
|
|
||||||
msgstr "Linije računovodstvenog presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
|
||||||
msgid "Accrued Expense on Purchase Orders"
|
|
||||||
msgstr "Akruelni trošak na narudžbama nabavke"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid "Click to start preparing a new expense accrual."
|
|
||||||
msgstr "Kliknite da počnete pripremu novog akruala troška."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr "Ne generiši zapise presjecanja"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Žurnal"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
|
||||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
|
||||||
msgid "Make cutoff at end of period - purchase order lines"
|
|
||||||
msgstr "Napravi presjecanje na kraju perioda - linije narudžbi nabavke"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr "Model linije narudžbe"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
|
||||||
msgid "Order Reference"
|
|
||||||
msgstr "Referenca narudžbe"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
|
||||||
msgid "Purchase Order"
|
|
||||||
msgstr "Nalog za nabavu"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
|
||||||
msgid "Purchase Order Line"
|
|
||||||
msgstr "Stavka naloga za nabavu"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
|
||||||
msgid "Purchase Orders"
|
|
||||||
msgstr "Nalozi u nabavi"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid ""
|
|
||||||
"This view can be used by accountants in order to collect information about "
|
|
||||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
|
||||||
"journal entry in one click."
|
|
||||||
msgstr ""
|
|
||||||
|
|
@ -1,94 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_purchase
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 16.0+e\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2023-10-26 11:44+0000\n"
|
|
||||||
"PO-Revision-Date: 2023-10-26 11:44+0000\n"
|
|
||||||
"Last-Translator: \n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: \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_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr "Ligne de provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
|
||||||
msgid "Account Cutoff Lines"
|
|
||||||
msgstr "Lignes de provision"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
|
||||||
msgid "Accrued Expense on Purchase Orders"
|
|
||||||
msgstr "Provisions sur Achats"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid "Click to start preparing a new expense accrual."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Pièce comptable"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
|
||||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
|
||||||
msgid "Make cutoff at end of period - purchase order lines"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
|
||||||
msgid "Order Reference"
|
|
||||||
msgstr "Commande"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
|
||||||
#, fuzzy
|
|
||||||
msgid "Purchase Order"
|
|
||||||
msgstr "Achats"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
|
||||||
msgid "Purchase Order Line"
|
|
||||||
msgstr "Ligne de commande d'achat"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
|
||||||
msgid "Purchase Orders"
|
|
||||||
msgstr "Achats"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid ""
|
|
||||||
"This view can be used by accountants in order to collect information about "
|
|
||||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
|
||||||
"journal entry in one click."
|
|
||||||
msgstr ""
|
|
||||||
|
|
@ -1,96 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_cutoff_accrual_purchase
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 16.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"PO-Revision-Date: 2024-10-21 12:06+0000\n"
|
|
||||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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 5.6.2\n"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff
|
|
||||||
msgid "Account Cut-off"
|
|
||||||
msgstr "Scritture di fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_cutoff_line
|
|
||||||
msgid "Account Cut-off Line"
|
|
||||||
msgstr "Riga scritture fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__account_cutoff_line_ids
|
|
||||||
msgid "Account Cutoff Lines"
|
|
||||||
msgstr "Righe scritture fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.act_window,name:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
#: model:ir.ui.menu,name:account_cutoff_accrual_purchase.account_accrual_menu
|
|
||||||
msgid "Accrued Expense on Purchase Orders"
|
|
||||||
msgstr "Rateo passivo degli ordini di acquisto"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid "Click to start preparing a new expense accrual."
|
|
||||||
msgstr "Fare clic per iniziare a preparare un nuovo rateo passivo."
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_purchase_order_line__is_cutoff_accrual_excluded
|
|
||||||
msgid "Do not generate cut-off entries"
|
|
||||||
msgstr "Non generare registrazioni di fine periodo"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Registrazione contabile"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.actions.server,name:account_cutoff_accrual_purchase.ir_cron_cutoff_ir_actions_server
|
|
||||||
#: model:ir.cron,cron_name:account_cutoff_accrual_purchase.ir_cron_cutoff
|
|
||||||
msgid "Make cutoff at end of period - purchase order lines"
|
|
||||||
msgstr "Crea registrazioni alla fine del periodo - righe ordine di acquisto"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff__order_line_model
|
|
||||||
msgid "Order Line Model"
|
|
||||||
msgstr "Modello riga ordine"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_order_id
|
|
||||||
msgid "Order Reference"
|
|
||||||
msgstr "Riferimento ordine"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order
|
|
||||||
msgid "Purchase Order"
|
|
||||||
msgstr "Ordine di acquisto"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model,name:account_cutoff_accrual_purchase.model_purchase_order_line
|
|
||||||
#: model:ir.model.fields,field_description:account_cutoff_accrual_purchase.field_account_cutoff_line__purchase_line_id
|
|
||||||
msgid "Purchase Order Line"
|
|
||||||
msgstr "Riga ordine di acquisto"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model:ir.model.fields.selection,name:account_cutoff_accrual_purchase.selection__account_cutoff__order_line_model__purchase_order_line
|
|
||||||
msgid "Purchase Orders"
|
|
||||||
msgstr "Ordini di acquisto"
|
|
||||||
|
|
||||||
#. module: account_cutoff_accrual_purchase
|
|
||||||
#: model_terms:ir.actions.act_window,help:account_cutoff_accrual_purchase.account_accrual_action
|
|
||||||
msgid ""
|
|
||||||
"This view can be used by accountants in order to collect information about "
|
|
||||||
"accrued expenses. It then allows to generate the corresponding cut-off "
|
|
||||||
"journal entry in one click."
|
|
||||||
msgstr ""
|
|
||||||
"Questa vista può essere usata dai contabili per raccogliere informazioni sui "
|
|
||||||
"ratei passivi. Permette di generare la relativa registrazione di "
|
|
||||||
"ripartizione con un clic."
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from . import account_cutoff
|
|
||||||
from . import account_cutoff_line
|
|
||||||
from . import purchase_order
|
|
||||||
from . import purchase_order_line
|
|
||||||
from . import account_move
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
from odoo import fields, models
|
|
||||||
|
|
||||||
|
|
||||||
class AccountCutoff(models.Model):
|
|
||||||
_inherit = "account.cutoff"
|
|
||||||
|
|
||||||
order_line_model = fields.Selection(
|
|
||||||
selection_add=[("purchase.order.line", "Purchase Orders")]
|
|
||||||
)
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
||||||
|
|
||||||
from odoo import api, fields, models
|
|
||||||
|
|
||||||
|
|
||||||
class AccountCutoffLine(models.Model):
|
|
||||||
_inherit = "account.cutoff.line"
|
|
||||||
|
|
||||||
purchase_line_id = fields.Many2one(
|
|
||||||
comodel_name="purchase.order.line", string="Purchase Order Line", readonly=True
|
|
||||||
)
|
|
||||||
purchase_order_id = fields.Many2one(related="purchase_line_id.order_id")
|
|
||||||
|
|
||||||
def _get_order_line(self):
|
|
||||||
if self.purchase_line_id:
|
|
||||||
return self.purchase_line_id
|
|
||||||
return super()._get_order_line()
|
|
||||||
|
|
||||||
@api.depends("purchase_line_id")
|
|
||||||
def _compute_invoice_lines(self):
|
|
||||||
for rec in self:
|
|
||||||
if rec.purchase_line_id:
|
|
||||||
rec.invoice_line_ids = rec.purchase_line_id.invoice_lines
|
|
||||||
super()._compute_invoice_lines()
|
|
||||||
return
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from odoo import models
|
|
||||||
|
|
||||||
|
|
||||||
class AccountMove(models.Model):
|
|
||||||
_inherit = "account.move"
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_order_lines(self):
|
|
||||||
"""Return a list of order lines to process"""
|
|
||||||
res = super()._get_cutoff_accrual_order_lines()
|
|
||||||
if self.move_type in ("in_invoice", "in_refund"):
|
|
||||||
res.append(self.invoice_line_ids.purchase_line_id)
|
|
||||||
return res
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
# Copyright 2023 Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from odoo import models
|
|
||||||
|
|
||||||
|
|
||||||
class PurchaseOrder(models.Model):
|
|
||||||
_inherit = "purchase.order"
|
|
||||||
|
|
||||||
def write(self, vals):
|
|
||||||
res = super().write(vals)
|
|
||||||
if "force_invoiced" in vals:
|
|
||||||
self.order_line.is_cutoff_accrual_excluded = vals["force_invoiced"]
|
|
||||||
return res
|
|
||||||
|
|
@ -1,102 +0,0 @@
|
||||||
# Copyright 2018 Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from odoo import api, fields, models
|
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class PurchaseOrderLine(models.Model):
|
|
||||||
_name = "purchase.order.line"
|
|
||||||
_inherit = ["purchase.order.line", "order.line.cutoff.accrual.mixin"]
|
|
||||||
|
|
||||||
account_cutoff_line_ids = fields.One2many(
|
|
||||||
"account.cutoff.line",
|
|
||||||
"purchase_line_id",
|
|
||||||
string="Account Cutoff Lines",
|
|
||||||
readonly=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
is_cutoff_accrual_excluded = fields.Boolean(
|
|
||||||
compute="_compute_is_cutoff_accrual_excluded",
|
|
||||||
store=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
@api.depends("order_id.force_invoiced")
|
|
||||||
def _compute_is_cutoff_accrual_excluded(self):
|
|
||||||
for rec in self:
|
|
||||||
rec.is_cutoff_accrual_excluded = rec.order_id.force_invoiced
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_lines_domain(self, cutoff):
|
|
||||||
domain = super()._get_cutoff_accrual_lines_domain(cutoff)
|
|
||||||
domain.append(("order_id.state", "in", ("purchase", "done")))
|
|
||||||
domain.append(("order_id.invoice_status", "!=", "invoiced"))
|
|
||||||
return domain
|
|
||||||
|
|
||||||
@api.model
|
|
||||||
def _get_cutoff_accrual_lines_query(self, cutoff):
|
|
||||||
query = super()._get_cutoff_accrual_lines_query(cutoff)
|
|
||||||
self.flush_model(["display_type", "qty_received", "qty_invoiced"])
|
|
||||||
query.add_where(
|
|
||||||
f'"{self._table}".display_type IS NULL AND '
|
|
||||||
f'"{self._table}".qty_received != "{self._table}".qty_invoiced'
|
|
||||||
)
|
|
||||||
return query
|
|
||||||
|
|
||||||
def _prepare_cutoff_accrual_line(self, cutoff):
|
|
||||||
res = super()._prepare_cutoff_accrual_line(cutoff)
|
|
||||||
if not res:
|
|
||||||
return
|
|
||||||
res["purchase_line_id"] = self.id
|
|
||||||
return res
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_lines_invoiced_after(self, cutoff):
|
|
||||||
cutoff_nextday = cutoff._nextday_start_dt()
|
|
||||||
# Take all invoices impacting the cutoff
|
|
||||||
# FIXME: what about ("move_id.payment_state", "=", "invoicing_legacy")
|
|
||||||
domain = [
|
|
||||||
("purchase_line_id.is_cutoff_accrual_excluded", "!=", True),
|
|
||||||
("move_id.move_type", "in", ("in_invoice", "in_refund")),
|
|
||||||
("purchase_line_id", "!=", False),
|
|
||||||
"|",
|
|
||||||
("move_id.state", "=", "draft"),
|
|
||||||
"&",
|
|
||||||
("move_id.state", "=", "posted"),
|
|
||||||
("move_id.date", ">=", cutoff_nextday),
|
|
||||||
]
|
|
||||||
invoice_line_after = self.env["account.move.line"].search(domain, order="id")
|
|
||||||
_logger.debug(
|
|
||||||
"Purchase Invoice Lines done after cutoff: %s" % len(invoice_line_after)
|
|
||||||
)
|
|
||||||
if not invoice_line_after:
|
|
||||||
return self.env["purchase.order.line"]
|
|
||||||
# In SQL to reduce memory usage as we could process large dataset
|
|
||||||
self.env.cr.execute(
|
|
||||||
"""
|
|
||||||
SELECT order_id
|
|
||||||
FROM purchase_order_line
|
|
||||||
WHERE id in (
|
|
||||||
SELECT purchase_line_id
|
|
||||||
FROM account_move_line
|
|
||||||
WHERE id in %s
|
|
||||||
)
|
|
||||||
""",
|
|
||||||
(tuple(invoice_line_after.ids),),
|
|
||||||
)
|
|
||||||
purchase_ids = [x[0] for x in self.env.cr.fetchall()]
|
|
||||||
lines = self.env["purchase.order.line"].search(
|
|
||||||
[("order_id", "in", purchase_ids)], order="id"
|
|
||||||
)
|
|
||||||
return lines
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_delivered_service_quantity(self, cutoff):
|
|
||||||
# By default, no cutoff on purchase. Set received as invoiced.
|
|
||||||
self.ensure_one()
|
|
||||||
return self._get_cutoff_accrual_invoiced_quantity(cutoff)
|
|
||||||
|
|
||||||
def _get_cutoff_accrual_delivered_stock_quantity(self, cutoff):
|
|
||||||
# By default, no cutoff on purchase. Set received as invoiced.
|
|
||||||
self.ensure_one()
|
|
||||||
return self._get_cutoff_accrual_invoiced_quantity(cutoff)
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
To configure this module, you need to:
|
|
||||||
|
|
||||||
#. Go to the accounting settings to select the journals and accounts used for
|
|
||||||
the cutoff.
|
|
||||||
#. Analytic accounting needs to be enable in Accounting - Settings.
|
|
||||||
#. If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
|
||||||
each type of taxes an accrued tax account.
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
* Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
This module extends the functionality of account_cutoff_accrual_order_base
|
|
||||||
to allow the computation of expense cutoffs on purchase orders.
|
|
||||||
|
|
||||||
The accrual is computed by comparing on the order, the quantity
|
|
||||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
|
||||||
invoices have occurred after the cutoff date, those quantities can be affected
|
|
||||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
|
||||||
processing few lines.
|
|
||||||
|
|
||||||
For PO, you can make the difference between:
|
|
||||||
* invoice to receive (received qty > invoiced qty)
|
|
||||||
* goods to receive (prepayment) (received qty < invoiced qty)
|
|
||||||
|
|
||||||
If you expect a refund, you can make it in draft. In standard, this update
|
|
||||||
the PO and the quantity will not be accrued as goods to receive. You can accrue
|
|
||||||
the draft credit note as "credit notes to receive".
|
|
||||||
|
|
||||||
Orders forced in status invoiced won't have cutoff entries.
|
|
||||||
For instance, if you know you will never receive the missing invoiced goods,
|
|
||||||
you can force it as invoiced.
|
|
||||||
|
|
||||||
Once the cutoff lines have been generated but the accounting entries are not yet
|
|
||||||
created, you are still able to create or modify invoices before the accounting
|
|
||||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
|
||||||
situation.
|
|
||||||
|
|
||||||
Once the cutoff accounting entries are generated you cannot create or modify
|
|
||||||
invoices before the accounting cutoff date.
|
|
||||||
Nevertheless, you can still reset to draft a supplier invoice but you won't be
|
|
||||||
able to modify any amount. You are then supposed to re-validate the invoice.
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
To use this module, you need to:
|
|
||||||
|
|
||||||
#. Go to Accounting - Cut-offs to configure and generate the cutoffs
|
|
||||||
|
|
||||||
Examples
|
|
||||||
========
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
|
||||||
This will not make an cutoff entry
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
|
||||||
This will make an cutoff entry with invoice to receive: 10
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 0, quantity invoiced: 10
|
|
||||||
This will make an cutoff entry with goods to receive: 10
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 10, quantity invoiced: 0
|
|
||||||
This will make an cutoff entry with invoice to receive: 10
|
|
||||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
|
||||||
The cutoff entry is updated in the existing cut-off
|
|
||||||
|
|
||||||
* Purchase Order with quantity received: 0, quantity invoiced: 0
|
|
||||||
This will not make an cutoff entry
|
|
||||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
|
||||||
An cutoff entry is added in the existing cut-off
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
|
|
@ -1,486 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
|
||||||
<title>Account Cut-off Accrual Purchase</title>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger (goodger@python.org)
|
|
||||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
.subscript {
|
|
||||||
vertical-align: sub;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
.superscript {
|
|
||||||
vertical-align: super;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title, .code .error {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin: 0 0 0.5em 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
|
||||||
clear: left ;
|
|
||||||
float: left ;
|
|
||||||
margin-right: 1em }
|
|
||||||
|
|
||||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
|
||||||
clear: right ;
|
|
||||||
float: right ;
|
|
||||||
margin-left: 1em }
|
|
||||||
|
|
||||||
img.align-center, .figure.align-center, object.align-center {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.align-center {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-left {
|
|
||||||
text-align: left }
|
|
||||||
|
|
||||||
.align-center {
|
|
||||||
clear: both ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
.align-right {
|
|
||||||
text-align: right }
|
|
||||||
|
|
||||||
/* reset inner alignment in figures */
|
|
||||||
div.align-right {
|
|
||||||
text-align: inherit }
|
|
||||||
|
|
||||||
/* div.align-center * { */
|
|
||||||
/* text-align: left } */
|
|
||||||
|
|
||||||
.align-top {
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
.align-middle {
|
|
||||||
vertical-align: middle }
|
|
||||||
|
|
||||||
.align-bottom {
|
|
||||||
vertical-align: bottom }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font: inherit }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
pre.code .ln { color: grey; } /* line numbers */
|
|
||||||
pre.code, code { background-color: #eeeeee }
|
|
||||||
pre.code .comment, code .comment { color: #5C6576 }
|
|
||||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
|
||||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
|
||||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
|
||||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
|
||||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
/* "booktabs" style (no vertical lines) */
|
|
||||||
table.docutils.booktabs {
|
|
||||||
border: 0px;
|
|
||||||
border-top: 2px solid;
|
|
||||||
border-bottom: 2px solid;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
table.docutils.booktabs * {
|
|
||||||
border: 0px;
|
|
||||||
}
|
|
||||||
table.docutils.booktabs th {
|
|
||||||
border-bottom: thin solid;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document" id="account-cut-off-accrual-purchase">
|
|
||||||
<h1 class="title">Account Cut-off Accrual Purchase</h1>
|
|
||||||
|
|
||||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
|
||||||
!! changes will be overwritten. !!
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
!! source digest: sha256:a0536b91a6e1c6035a5c0a21557f7bf3d7c392b59c460a6ab9ed1e40d9f6180c
|
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
||||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase"><img alt="OCA/account-closing" src="https://img.shields.io/badge/github-OCA%2Faccount--closing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-closing-16-0/account-closing-16-0-account_cutoff_accrual_purchase"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-closing&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
||||||
<p>This module extends the functionality of account_cutoff_accrual_order_base
|
|
||||||
to allow the computation of expense cutoffs on purchase orders.</p>
|
|
||||||
<p>The accrual is computed by comparing on the order, the quantity
|
|
||||||
delivered/received and the quantity invoiced. In case, some deliveries or
|
|
||||||
invoices have occurred after the cutoff date, those quantities can be affected
|
|
||||||
and are recomputed. This allows to quickly generate a cutoff snapshot by
|
|
||||||
processing few lines.</p>
|
|
||||||
<p>For PO, you can make the difference between:
|
|
||||||
* invoice to receive (received qty > invoiced qty)
|
|
||||||
* goods to receive (prepayment) (received qty < invoiced qty)</p>
|
|
||||||
<p>If you expect a refund, you can make it in draft. In standard, this update
|
|
||||||
the PO and the quantity will not be accrued as goods to receive. You can accrue
|
|
||||||
the draft credit note as “credit notes to receive”.</p>
|
|
||||||
<p>Orders forced in status invoiced won’t have cutoff entries.
|
|
||||||
For instance, if you know you will never receive the missing invoiced goods,
|
|
||||||
you can force it as invoiced.</p>
|
|
||||||
<p>Once the cutoff lines have been generated but the accounting entries are not yet
|
|
||||||
created, you are still able to create or modify invoices before the accounting
|
|
||||||
butoff date. The cutoff lines will be adapted automatically to reflect the new
|
|
||||||
situation.</p>
|
|
||||||
<p>Once the cutoff accounting entries are generated you cannot create or modify
|
|
||||||
invoices before the accounting cutoff date.
|
|
||||||
Nevertheless, you can still reset to draft a supplier invoice but you won’t be
|
|
||||||
able to modify any amount. You are then supposed to re-validate the invoice.</p>
|
|
||||||
<p><strong>Table of contents</strong></p>
|
|
||||||
<div class="contents local topic" id="contents">
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
|
||||||
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
|
||||||
<li><a class="reference internal" href="#examples" id="toc-entry-3">Examples</a></li>
|
|
||||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
|
|
||||||
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
|
|
||||||
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
|
|
||||||
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
|
|
||||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="configuration">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
|
||||||
<p>To configure this module, you need to:</p>
|
|
||||||
<ol class="arabic simple">
|
|
||||||
<li>Go to the accounting settings to select the journals and accounts used for
|
|
||||||
the cutoff.</li>
|
|
||||||
<li>Analytic accounting needs to be enable in Accounting - Settings.</li>
|
|
||||||
<li>If you want to also accrue the taxes, you need in Accounting - Taxes, for
|
|
||||||
each type of taxes an accrued tax account.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="usage">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
|
|
||||||
<p>To use this module, you need to:</p>
|
|
||||||
<ol class="arabic simple">
|
|
||||||
<li>Go to Accounting - Cut-offs to configure and generate the cutoffs</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="examples">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-3">Examples</a></h1>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Purchase Order with quantity received: 0, quantity invoiced: 0
|
|
||||||
This will not make an cutoff entry</li>
|
|
||||||
<li>Purchase Order with quantity received: 10, quantity invoiced: 0
|
|
||||||
This will make an cutoff entry with invoice to receive: 10</li>
|
|
||||||
<li>Purchase Order with quantity received: 0, quantity invoiced: 10
|
|
||||||
This will make an cutoff entry with goods to receive: 10</li>
|
|
||||||
<li>Purchase Order with quantity received: 10, quantity invoiced: 0
|
|
||||||
This will make an cutoff entry with invoice to receive: 10
|
|
||||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
|
||||||
The cutoff entry is updated in the existing cut-off</li>
|
|
||||||
<li>Purchase Order with quantity received: 0, quantity invoiced: 0
|
|
||||||
This will not make an cutoff entry
|
|
||||||
Invoice is encoded after the cut-off date but dated before the cut-off date
|
|
||||||
An cutoff entry is added in the existing cut-off</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="bug-tracker">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
|
|
||||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-closing/issues">GitHub Issues</a>.
|
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
|
||||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
||||||
<a class="reference external" href="https://github.com/OCA/account-closing/issues/new?body=module:%20account_cutoff_accrual_purchase%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
|
||||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="credits">
|
|
||||||
<h1><a class="toc-backref" href="#toc-entry-5">Credits</a></h1>
|
|
||||||
<div class="section" id="authors">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>BCIM</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="contributors">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Jacques-Etienne Baudoux (BCIM) <<a class="reference external" href="mailto:je@bcim.be">je@bcim.be</a>></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="maintainers">
|
|
||||||
<h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
|
|
||||||
<p>This module is maintained by the OCA.</p>
|
|
||||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
|
||||||
<p>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.</p>
|
|
||||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
|
||||||
<p><a class="reference external image-reference" href="https://github.com/jbaudoux"><img alt="jbaudoux" src="https://github.com/jbaudoux.png?size=40px" /></a></p>
|
|
||||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-closing/tree/16.0/account_cutoff_accrual_purchase">OCA/account-closing</a> project on GitHub.</p>
|
|
||||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!--
|
|
||||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
-->
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="account_accrual_action" model="ir.actions.act_window">
|
|
||||||
<field name="name">Accrued Expense on Purchase Orders</field>
|
|
||||||
<field name="res_model">account.cutoff</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
|
||||||
<field name="domain">[('order_line_model', '=', 'purchase.order.line')]</field>
|
|
||||||
<field
|
|
||||||
name="context"
|
|
||||||
>{'default_order_line_model': 'purchase.order.line', 'default_cutoff_type': 'accrued_expense'}</field>
|
|
||||||
<field name="help" type="html">
|
|
||||||
<p class="oe_view_nocontent_create">
|
|
||||||
Click to start preparing a new expense accrual.
|
|
||||||
</p><p>
|
|
||||||
This view can be used by accountants in order to collect information about accrued expenses. It then allows to generate the corresponding cut-off journal entry in one click.
|
|
||||||
</p>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem
|
|
||||||
id="account_accrual_menu"
|
|
||||||
parent="account_cutoff_base.cutoff_menu"
|
|
||||||
action="account_accrual_action"
|
|
||||||
sequence="5"
|
|
||||||
/>
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!--
|
|
||||||
Copyright 2018 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
|
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
-->
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="account_cutoff_line_form" model="ir.ui.view">
|
|
||||||
<field name="model">account.cutoff.line</field>
|
|
||||||
<field name="inherit_id" ref="account_cutoff_base.account_cutoff_line_form" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="parent_id" position="after">
|
|
||||||
<field name="purchase_line_id" invisible="1" />
|
|
||||||
<field
|
|
||||||
name="purchase_order_id"
|
|
||||||
attrs="{'invisible': [('purchase_line_id', '=', False)]}"
|
|
||||||
/>
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
# Architecture
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
U[Users] -->|HTTP| V[Views and QWeb Templates]
|
|
||||||
V --> C[Controllers]
|
|
||||||
V --> W[Wizards – Transient Models]
|
|
||||||
C --> M[Models and ORM]
|
|
||||||
W --> M
|
|
||||||
M --> R[Reports]
|
|
||||||
DX[Data XML] --> M
|
|
||||||
S[Security – ACLs and Groups] -. enforces .-> M
|
|
||||||
|
|
||||||
subgraph Account_cutoff_accrual_purchase Module - account_cutoff_accrual_purchase
|
|
||||||
direction LR
|
|
||||||
M:::layer
|
|
||||||
W:::layer
|
|
||||||
C:::layer
|
|
||||||
V:::layer
|
|
||||||
R:::layer
|
|
||||||
S:::layer
|
|
||||||
DX:::layer
|
|
||||||
end
|
|
||||||
|
|
||||||
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes
|
|
||||||
- Views include tree/form/kanban templates and report templates.
|
|
||||||
- Controllers provide website/portal routes when present.
|
|
||||||
- Wizards are UI flows implemented with `models.TransientModel`.
|
|
||||||
- Data XML loads data/demo records; Security defines groups and access.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Configuration
|
|
||||||
|
|
||||||
Refer to Odoo settings for account_cutoff_accrual_purchase. Configure related models, access rights, and options as needed.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Controllers
|
|
||||||
|
|
||||||
This module does not define custom HTTP controllers.
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Dependencies
|
|
||||||
|
|
||||||
This addon depends on:
|
|
||||||
|
|
||||||
- [account_cutoff_accrual_order_base](https://github.com/bringout/oca-technical)
|
|
||||||
- [purchase](https://github.com/bringout/oca-ocb-core/tree/b3e6fb998e53b9eb1bc9669d992017616c2bd7b3/odoo-bringout-oca-ocb-purchase)
|
|
||||||
- [purchase_force_invoiced](https://github.com/bringout/oca-workflow-process)
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# FAQ
|
|
||||||
|
|
||||||
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
|
|
||||||
- Q: How to enable? A: Start server with --addon account_cutoff_accrual_purchase or install in UI.
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Install
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase"
|
|
||||||
# or
|
|
||||||
uv pip install odoo-bringout-oca-account-closing-account_cutoff_accrual_purchase"
|
|
||||||
```
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
# Models
|
|
||||||
|
|
||||||
Detected core models and extensions in account_cutoff_accrual_purchase.
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
classDiagram
|
|
||||||
class purchase_order_line
|
|
||||||
class account_cutoff
|
|
||||||
class account_cutoff_line
|
|
||||||
class account_move
|
|
||||||
class purchase_order
|
|
||||||
```
|
|
||||||
|
|
||||||
Notes
|
|
||||||
- Classes show model technical names; fields omitted for brevity.
|
|
||||||
- Items listed under _inherit are extensions of existing models.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Overview
|
|
||||||
|
|
||||||
Packaged Odoo addon: account_cutoff_accrual_purchase. Provides features documented in upstream Odoo 16 under this addon.
|
|
||||||
|
|
||||||
- Source: OCA/OCB 16.0, addon account_cutoff_accrual_purchase
|
|
||||||
- License: LGPL-3
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Reports
|
|
||||||
|
|
||||||
This module does not define custom reports.
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Security
|
|
||||||
|
|
||||||
This module does not define custom security rules or access controls beyond Odoo defaults.
|
|
||||||
|
|
||||||
Default Odoo security applies:
|
|
||||||
- Base user access through standard groups
|
|
||||||
- Model access inherited from dependencies
|
|
||||||
- No custom row-level security rules
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# Troubleshooting
|
|
||||||
|
|
||||||
- Ensure Python and Odoo environment matches repo guidance.
|
|
||||||
- Check database connectivity and logs if startup fails.
|
|
||||||
- Validate that dependent addons listed in DEPENDENCIES.md are installed.
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue