mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-18 03:52:00 +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