Initial commit: OCA Financial packages (186 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:04 +02:00
commit 3e0e8473fb
8757 changed files with 947473 additions and 0 deletions

View file

@ -0,0 +1,44 @@
# Update Invoice's Due Date
Odoo addon: account_invoice_date_due
## Installation
```bash
pip install odoo-bringout-oca-account-invoicing-account_invoice_date_due
```
## Dependencies
This addon depends on:
- account
## Manifest Information
- **Name**: Update Invoice's Due Date
- **Version**: 16.0.1.0.1
- **Category**: Accounting
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/account-invoicing](https://github.com/OCA/account-invoicing) branch 16.0, addon `account_invoice_date_due`.
## 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

View file

@ -0,0 +1,121 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
=========================
Update Invoice's Due Date
=========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:c23c317d55eae7f0854cf402ad4323dd2c054d8fc7c58132a4600bd8e9613de8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/license-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--invoicing-lightgray.png?logo=github
:target: https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_date_due
:alt: OCA/account-invoicing
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-invoicing-16-0/account-invoicing-16-0-account_invoice_date_due
: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-invoicing&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module sets the invoice's due date field as editable (Even if the invoice state is done and a Payment Term is set).
When the field is edited, the invoice's due date is updated, along with the
related invoice lines.
**Table of contents**
.. contents::
:local:
Configuration
=============
To be able to edit this field, the user needs to have access to the group
``Allow to change due date``.
Usage
=====
To edit the invoice's due date, we have several scenarios:
* A Payment Term is set. In this case, no extra field will be shown while in
draft, as the standard flow allows us to edit the Payment Term directly, or
delete it and set a due date manually.
Once the invoice is posted, a new field will be shown in the view above the
Payment Term, allowing the due date to be changed.
* No Payment Term is set, and the due date is set manually. In this case, the
due date is editable while in draft, as with the standard Odoo flow. However,
once posted, the field will remain editable.
(All the above are considering the user belongs to the security group refered in
"Configuration")
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-invoicing/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-invoicing/issues/new?body=module:%20account_invoice_date_due%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
~~~~~~~
* Vauxoo
Contributors
~~~~~~~~~~~~
* Luis González <lgonzalez@vauxoo.com>
* Luis Torres <luis_t@vauxoo.com>
* `Tecnativa <https://www.tecnativa.com>`_:
* João Marques
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-luisg123v| image:: https://github.com/luisg123v.png?size=40px
:target: https://github.com/luisg123v
:alt: luisg123v
.. |maintainer-joao-p-marques| image:: https://github.com/joao-p-marques.png?size=40px
:target: https://github.com/joao-p-marques
:alt: joao-p-marques
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-luisg123v| |maintainer-joao-p-marques|
This module is part of the `OCA/account-invoicing <https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_date_due>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models

View file

@ -0,0 +1,16 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Update Invoice's Due Date",
"version": "16.0.1.0.1",
"author": "Vauxoo,Odoo Community Association (OCA)",
"maintainers": ["luisg123v", "joao-p-marques"],
"category": "Accounting",
"website": "https://github.com/OCA/account-invoicing",
"license": "AGPL-3",
"depends": ["account"],
"demo": [],
"data": ["security/security.xml", "views/account_move_date_due.xml"],
"installable": True,
"auto_install": False,
}

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
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_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_invoice_date_due
#. odoo-python
#: code:addons/account_invoice_date_due/models/account_move.py:0
#, python-format
msgid "You are not allowed to change the due date."
msgstr ""

View file

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
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_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Dozvoli promenu datuma dospeća"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr "Datum dospijeća"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr "Uslovi plaćanja datuma dospeća"
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr "Žurnal"
#. module: account_invoice_date_due
#. odoo-python
#: code:addons/account_invoice_date_due/models/account_move.py:0
#, python-format
msgid "You are not allowed to change the due date."
msgstr "Nije vam dozvoljeno da menjate datum dospeća."

View file

@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-08-09 10:07+0000\n"
"Last-Translator: jabelchi <jabelchi@gmail.com>\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Permet canviar data de venciment"
#. module: account_invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr "Data de venciment"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr "Termini de pagament del venciment"
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr "Assentament comptable"

View file

@ -0,0 +1,81 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-06-12 13:19+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: none\n"
"Language: de\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 3.10\n"
#. module: account_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Fälligkeitsdatum in Rechnungen ändern"
#. module: account_invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entries"
msgstr ""
#~ msgid "Cancel"
#~ msgstr "Abbrechen"
#~ msgid "Change due date"
#~ msgstr "Fälligkeitsdatum ändern"
#~ msgid "Created by"
#~ msgstr "Erstellt von"
#~ msgid "Created on"
#~ msgstr "Erstellt am"
#~ msgid "Display Name"
#~ msgstr "Anzeigename"
#~ msgid "ID"
#~ msgstr "ID"
#~ msgid "Last Modified on"
#~ msgstr "Zuletzt geändert am"
#~ msgid "Last Updated by"
#~ msgstr "Zuletzt aktualisiert von"
#~ msgid "Last Updated on"
#~ msgstr "Zuletzt aktualisiert am"
#~ msgid "New Due Date"
#~ msgstr "Neues Fälligkeitsdatum"
#~ msgid "New date to be set to the invoice's due date."
#~ msgstr ""
#~ "Dies ist das Datum, das als neues Fälligkeitsdatum der Rechnung gesetzt "
#~ "werden soll."
#~ msgid "Set Due Date"
#~ msgstr "Fälligkeitsdatum ändern"
#~ msgid "Set a new due date on selected invoices."
#~ msgstr "Neues Fälligkeitsdatum bei den ausgewählten Rechnungen setzen."
#~ msgid "Wizard to set due date"
#~ msgstr "Assistent für das Ändern des Fälligkeitsdatums"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-07-02 12:03+0000\n"
"Last-Translator: Netkia <carlos.sainz@netkia.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.2\n"
#. module: account_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Permitir actualizar la fecha de vencimiento"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr "Fecha de Vencimiento"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr "Término de pago del vencimiento"
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr "Asiento Contable"
#. module: account_invoice_date_due
#. odoo-python
#: code:addons/account_invoice_date_due/models/account_move.py:0
#, python-format
msgid "You are not allowed to change the due date."
msgstr "No está autorizado para cambiar la fecha de vencimiento."

View file

@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-07-16 17:49+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Autoriser le changement de date d'échéance"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr "Date d'échéance"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr "Date d'échéance des conditions de paiement"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__id
msgid "ID"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr "Ecriture"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move____last_update
msgid "Last Modified on"
msgstr "Dernière modification"

View file

@ -0,0 +1,61 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-15 17:46+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: none\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: account_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Autoriser le changement de date d'échéance"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: account_invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr "Date d'échéance"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr "Date d'échéance des conditions de paiement"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__id
msgid "ID"
msgstr ""
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr "Ecriture"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move____last_update
msgid "Last Modified on"
msgstr "Dernière modification"
#. module: account_invoice_date_due
#. odoo-python
#: code:addons/account_invoice_date_due/models/account_move.py:0
#, python-format
msgid "You are not allowed to change the due date."
msgstr "Vous n'êtes pas autorisé à modifier la date d'échéance."

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_date_due
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-03-24 10: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.10.2\n"
#. module: account_invoice_date_due
#: model:res.groups,name:account_invoice_date_due.allow_to_change_due_date
msgid "Allow to change due date"
msgstr "Consenti modifica scadenza"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due
#: model_terms:ir.ui.view,arch_db:account_invoice_date_due.view_move_form
msgid "Due Date"
msgstr "Scadenza"
#. module: account_invoice_date_due
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_bank_statement_line__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_move__invoice_date_due_payment_term
#: model:ir.model.fields,field_description:account_invoice_date_due.field_account_payment__invoice_date_due_payment_term
msgid "Due Date Payment Term"
msgstr "Scadenza termine pagamento"
#. module: account_invoice_date_due
#: model:ir.model,name:account_invoice_date_due.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: account_invoice_date_due
#. odoo-python
#: code:addons/account_invoice_date_due/models/account_move.py:0
#, python-format
msgid "You are not allowed to change the due date."
msgstr "Non si è abilitati alla modifica della scadenza."

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import account_move

View file

@ -0,0 +1,45 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class AccountMove(models.Model):
_inherit = "account.move"
# Show invoice date due even when payment term is defined
invoice_date_due_payment_term = fields.Date(
related="invoice_date_due", string="Due Date Payment Term"
)
invoice_date_due = fields.Date(
string="Due Date",
compute="_compute_invoice_date_due",
inverse="_inverse_invoice_date_due",
)
def _inverse_invoice_date_due(self):
for invoice in self:
if invoice.state == "posted":
if not self.env.user.has_group(
"account_invoice_date_due.allow_to_change_due_date"
):
raise UserError(_("You are not allowed to change the due date."))
@api.onchange("invoice_date_due_payment_term")
def _onchange_invoice_date_due_payment_term(self):
"""Propagate from Payment term due date to original field"""
if self.invoice_date_due_payment_term:
self.invoice_date_due = self.invoice_date_due_payment_term
def write(self, vals):
res = super().write(vals)
# Propagate due date to move lines
# that correspont to the receivable/payable account
posted_moves = self.filtered(lambda x: x.state == "posted")
if "invoice_date_due" in vals and posted_moves:
payment_term_lines = posted_moves.line_ids.filtered(
lambda line: line.account_id.account_type
in ("asset_receivable", "liability_payable")
)
payment_term_lines.write({"date_maturity": vals["invoice_date_due"]})
return res

View file

@ -0,0 +1,2 @@
To be able to edit this field, the user needs to have access to the group
``Allow to change due date``.

View file

@ -0,0 +1,5 @@
* Luis González <lgonzalez@vauxoo.com>
* Luis Torres <luis_t@vauxoo.com>
* `Tecnativa <https://www.tecnativa.com>`_:
* João Marques

View file

@ -0,0 +1,4 @@
This module sets the invoice's due date field as editable (Even if the invoice state is done and a Payment Term is set).
When the field is edited, the invoice's due date is updated, along with the
related invoice lines.

View file

@ -0,0 +1,13 @@
To edit the invoice's due date, we have several scenarios:
* A Payment Term is set. In this case, no extra field will be shown while in
draft, as the standard flow allows us to edit the Payment Term directly, or
delete it and set a due date manually.
Once the invoice is posted, a new field will be shown in the view above the
Payment Term, allowing the due date to be changed.
* No Payment Term is set, and the due date is set manually. In this case, the
due date is editable while in draft, as with the standard Odoo flow. However,
once posted, the field will remain editable.
(All the above are considering the user belongs to the security group refered in
"Configuration")

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="allow_to_change_due_date" model="res.groups">
<field name="name">Allow to change due date</field>
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,461 @@
<!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>README.rst</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">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="update-invoice-s-due-date">
<h1>Update Invoices Due Date</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:c23c317d55eae7f0854cf402ad4323dd2c054d8fc7c58132a4600bd8e9613de8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_date_due"><img alt="OCA/account-invoicing" src="https://img.shields.io/badge/github-OCA%2Faccount--invoicing-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-invoicing-16-0/account-invoicing-16-0-account_invoice_date_due"><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-invoicing&amp;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 sets the invoices due date field as editable (Even if the invoice state is done and a Payment Term is set).</p>
<p>When the field is edited, the invoices due date is updated, along with the
related invoice lines.</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="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
<p>To be able to edit this field, the user needs to have access to the group
<tt class="docutils literal">Allow to change due date</tt>.</p>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-2">Usage</a></h2>
<p>To edit the invoices due date, we have several scenarios:</p>
<ul class="simple">
<li>A Payment Term is set. In this case, no extra field will be shown while in
draft, as the standard flow allows us to edit the Payment Term directly, or
delete it and set a due date manually.
Once the invoice is posted, a new field will be shown in the view above the
Payment Term, allowing the due date to be changed.</li>
<li>No Payment Term is set, and the due date is set manually. In this case, the
due date is editable while in draft, as with the standard Odoo flow. However,
once posted, the field will remain editable.</li>
</ul>
<p>(All the above are considering the user belongs to the security group refered in
“Configuration”)</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-invoicing/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-invoicing/issues/new?body=module:%20account_invoice_date_due%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">
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
<ul class="simple">
<li>Vauxoo</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
<ul class="simple">
<li>Luis González &lt;<a class="reference external" href="mailto:lgonzalez&#64;vauxoo.com">lgonzalez&#64;vauxoo.com</a>&gt;</li>
<li>Luis Torres &lt;<a class="reference external" href="mailto:luis_t&#64;vauxoo.com">luis_t&#64;vauxoo.com</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>João Marques</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
<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">maintainers</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/luisg123v"><img alt="luisg123v" src="https://github.com/luisg123v.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/joao-p-marques"><img alt="joao-p-marques" src="https://github.com/joao-p-marques.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_date_due">OCA/account-invoicing</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>
</div>
</body>
</html>

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import test_account_invoice_date_due

View file

@ -0,0 +1,196 @@
# Copyright 2021 Tecnativa - João Marques
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from datetime import datetime, timedelta
from odoo import fields
from odoo.exceptions import UserError
from odoo.tests import Form, common
class TestAccountInvoiceDateDue(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(
context=dict(
cls.env.context,
mail_create_nolog=True,
mail_create_nosubscribe=True,
mail_notrack=True,
no_reset_password=True,
tracking_disable=True,
)
)
group = cls.env.ref("account_invoice_date_due.allow_to_change_due_date")
acc_group = cls.env.ref("account.group_account_manager")
# Loose dependency on stock to avoid perm issues.
# We don't really care about such permissions in this context!
# Eg:
# odoo.exceptions.AccessError:
# You are not allowed to access 'Stock Valuation Layer' (stock.valuation.layer) records.
stock_group = (
cls.env.ref("stock.group_stock_manager", False) or cls.env["res.groups"]
)
cls.user_w_access = cls.env["res.users"].create(
{
"name": "Test User w/ access",
"login": "user_w_access",
"email": "somebody@somewhere.com",
"groups_id": [(6, 0, (group + acc_group + stock_group).ids)],
}
)
# Create new user not allowed to change invoice due date
cls.user_wo_access = cls.env["res.users"].create(
{
"name": "Test User wo/ access",
"login": "user_wo_access",
"groups_id": [(6, 0, (acc_group + stock_group).ids)],
}
)
cls.sale_journal = cls.env["account.journal"].search(
[("type", "=", "sale")], limit=1
)
move_form = Form(
cls.env["account.move"].with_context(
default_move_type="out_invoice",
default_journal_id=cls.sale_journal.id,
)
)
move_form.invoice_date = fields.Date.today()
move_form.partner_id = cls.env["res.partner"].create({"name": "test partner"})
with move_form.invoice_line_ids.new() as line_form:
line_form.name = "move test"
line_form.price_unit = 1000.0
with move_form.invoice_line_ids.new() as line_form:
line_form.name = "move test"
line_form.price_unit = -1000.0
cls.move = move_form.save()
def _compare_records(self, rec1, rec2, ignore=None):
diff_fields = []
for field in rec1:
if field in ignore:
continue
if rec1[field] != rec2[field]:
diff_fields.append(field)
return set(diff_fields)
def test_invoice_date_due_is_editable(self):
old_move_state = self.move.read()[0]
move_edit_form = Form(self.move.with_user(self.user_w_access))
ten_days_from_now = fields.Date.to_string(datetime.today() + timedelta(days=10))
move_edit_form.invoice_date_due = ten_days_from_now
self.move = move_edit_form.save()
# Read all fields as sudo to get them independently of the user.
# Other modules can add security groups in account.move fields
self.assertEqual(
self._compare_records(
old_move_state,
self.move.sudo().read()[0],
ignore={"write_uid", "message_is_follower", "needed_terms"},
),
# Assert only this field is changed
{"invoice_date_due_payment_term", "invoice_date_due"},
)
self.assertEqual(
fields.Date.to_string(self.move.invoice_date_due), ten_days_from_now
)
# Post and should remain editable
self.move.action_post()
old_move_state = self.move.read()[0]
move_edit_form = Form(self.move.with_user(self.user_w_access))
twenty_days_from_now = fields.Date.to_string(
datetime.today() + timedelta(days=20)
)
move_edit_form.invoice_date_due = twenty_days_from_now
self.move = move_edit_form.save()
self.assertEqual(
fields.Date.to_string(self.move.invoice_date_due), twenty_days_from_now
)
# Check that the change has been propagated to the corresponding invoice line
self.assertEqual(
len(
self.move.line_ids.filtered(
lambda l: fields.Date.to_string(l.date_maturity)
== twenty_days_from_now
and l.account_id.account_type
in ("asset_receivable", "liability_payable")
)
),
1,
)
self.assertEqual(
self._compare_records(
old_move_state,
self.move.sudo().read()[0],
ignore={
"write_uid",
"message_is_follower",
"message_ids",
"needed_terms",
"hide_post_button",
},
),
# Assert only this field is changed
{"invoice_date_due_payment_term", "invoice_date_due"},
)
def test_invoice_date_due_is_editable_w_payment_term(self):
move_edit_form = Form(self.move.with_user(self.user_w_access))
move_edit_form.invoice_payment_term_id = self.env.ref(
"account.account_payment_term_15days"
)
self.move = move_edit_form.save()
# Post and should remain editable even w/ payment term
twenty_days_from_now = fields.Date.to_string(
datetime.today() + timedelta(days=20)
)
self.move.action_post()
old_move_state = self.move.read()[0]
move_edit_form = Form(self.move.with_user(self.user_w_access))
move_edit_form.invoice_date_due_payment_term = twenty_days_from_now
self.move = move_edit_form.save()
# Check that the change has been propagated to the corresponding invoice line
self.assertEqual(
len(
self.move.line_ids.filtered(
lambda l: fields.Date.to_string(l.date_maturity)
== twenty_days_from_now
and l.account_id.account_type
in ("asset_receivable", "liability_payable")
)
),
1,
)
self.assertEqual(
self._compare_records(
old_move_state,
self.move.sudo().read()[0],
ignore={"write_uid", "message_is_follower", "message_ids"},
),
# Assert only this field is changed
{"invoice_date_due_payment_term", "invoice_date_due"},
)
def test_invoice_date_due_is_not_editable_for_user_wo_access(self):
move_edit_form = Form(self.move.with_user(self.user_wo_access))
ten_days_from_now = fields.Date.to_string(datetime.today() + timedelta(days=10))
move_edit_form.invoice_date_due = ten_days_from_now
self.move = move_edit_form.save()
self.assertEqual(
fields.Date.to_string(self.move.invoice_date_due), ten_days_from_now
) # Should be editable while in draft
# Post and should not be editable for this user
self.move.action_post()
move_edit_form = Form(self.move.with_user(self.user_wo_access))
twenty_days_from_now = fields.Date.to_string(
datetime.today() + timedelta(days=20)
)
move_edit_form.invoice_date_due = twenty_days_from_now
with self.assertRaisesRegex(
UserError, "You are not allowed to change the due date."
):
move_edit_form.save()

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_move_form" model="ir.ui.view">
<field name="name">account.move.form</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml">
<field name="invoice_date" position="after">
<field
name="invoice_date_due_payment_term"
string="Due Date"
groups="account_invoice_date_due.allow_to_change_due_date"
attrs="{'readonly': [('state', 'not in', ['posted', 'draft'])], 'invisible': ['|', ('state', '=', 'draft'), ('invoice_payment_term_id', '=', False)]}"
/>
</field>
<field name="invoice_date_due" position="attributes">
<attribute
name="groups"
>!account_invoice_date_due.allow_to_change_due_date</attribute>
</field>
<field name="invoice_date_due" position="after">
<field
name="invoice_date_due"
groups="account_invoice_date_due.allow_to_change_due_date"
attrs="{'readonly': [('state', 'not in', ['posted', 'draft'])], 'invisible': [('invoice_payment_term_id', '!=', False)]}"
/>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,32 @@
# 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_invoice_date_due Module - account_invoice_date_due
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.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for account_invoice_date_due. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [account](../../odoo-bringout-oca-ocb-account)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon account_invoice_date_due or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-account-invoicing-account_invoice_date_due"
# or
uv pip install odoo-bringout-oca-account-invoicing-account_invoice_date_due"
```

View file

@ -0,0 +1,12 @@
# Models
Detected core models and extensions in account_invoice_date_due.
```mermaid
classDiagram
class account_move
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: account_invoice_date_due. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_invoice_date_due
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,62 @@
# Security
Access control and security definitions in account_invoice_date_due.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[CHANGELOG.md](../CHANGELOG.md)**
- 132 model access rules
- **[doc](../doc)**
- **[docker](../docker)**
- **[input](../input)**
- **[nix](../nix)**
- **[odoo.conf](../odoo.conf)**
- 58 model access rules
- **[odoo_packages_bez_l10n.txt](../odoo_packages_bez_l10n.txt)**
- 1947 model access rules
- **[odoo_packages_bringout.txt](../odoo_packages_bringout.txt)**
- 1947 model access rules
- **[odoo_packages.txt](../odoo_packages.txt)**
- 2085 model access rules
- **[output](../output)**
- **[packages](../packages)**
- **[PACKAGES.md](../PACKAGES.md)**
- 298 model access rules
- **[README.md](../README.md)**
- 338 model access rules
- **[scripts](../scripts)**
- **[temp](../temp)**
- **[TRANSLATION_BS_SUMMARY.md](../TRANSLATION_BS_SUMMARY.md)**
- 146 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[security.xml](../account_invoice_date_due/security/security.xml)**
- 1 security groups defined
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[security.xml](../account_invoice_date_due/security/security.xml)**
- Security groups, categories, and XML-based rules
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# 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.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_invoice_date_due
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-account-invoicing-account_invoice_date_due"
version = "16.0.0"
description = "Update Invoice's Due Date - Odoo addon"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-account>=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_invoice_date_due"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]