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,45 @@
# Enqueue account invoice validation
Odoo addon: account_invoice_validation_queued
## Installation
```bash
pip install odoo-bringout-oca-account-invoicing-account_invoice_validation_queued
```
## Dependencies
This addon depends on:
- account
- queue_job
## Manifest Information
- **Name**: Enqueue account invoice validation
- **Version**: 16.0.1.0.0
- **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_validation_queued`.
## 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,118 @@
==================================
Enqueue account invoice validation
==================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d898d3938a0da84815ac6281234dee41724a5ff59a8ed47bcbc360e65ea5211f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |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--invoicing-lightgray.png?logo=github
:target: https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_validation_queued
: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_validation_queued
: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 allows to enqueue in several jobs the account validation process
to be executed in paralell on background, which is normally done serially and
on foreground.
Each invoice creates a job for performing the validation.
**Table of contents**
.. contents::
:local:
Configuration
=============
#. Jobs are enqueued in the channel ``root.account_invoice_validation_queued``,
so you must adjust your
`Odoo configuration <https://github.com/OCA/queue/tree/16.0/queue_job#configuration>`_
according this.
#. If you want to see queued jobs, you need "Job Queue / Job Queue Manager"
permission in your user.
#. Configure your invoice/refund sequences as "Standard" instead of "No gap",
or you'll have concurrent updates problems.
Usage
=====
#. Go to *Invoicing > Customers > Invoices* or
*Invoicing > Vendors > Bills*.
#. Mark at least one check on the left part of one draft invoice in the
list view.
#. Click on *Action > Post entries*.
#. On the dialog popup that appears, click on "Enqueue Validation".
#. Once enqueued, and having the "Job Queue Manager" permission, you can go to
the invoice, and see the tab "Validation Jobs". A list with all the jobs
related to that invoice can be found there.
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_validation_queued%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
~~~~~~~
* Tecnativa
Contributors
~~~~~~~~~~~~
* `Tecnativa <https://www.tecnativa.com>`__:
* Pedro M. Baeza
* Manuel Calero
* Saran Lim. <saranl@ecosoft.co.th>
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-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
:target: https://github.com/pedrobaeza
:alt: pedrobaeza
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-pedrobaeza|
This module is part of the `OCA/account-invoicing <https://github.com/OCA/account-invoicing/tree/16.0/account_invoice_validation_queued>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,22 @@
# Copyright 2019-2020 Tecnativa - Pedro M. Baeza
# Copyright 2020 Tecnativa - Manuel Calero
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Enqueue account invoice validation",
"version": "16.0.1.0.0",
"category": "Accounting",
"license": "AGPL-3",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/account-invoicing",
"depends": ["account", "queue_job"],
"data": [
"data/queue_job.xml",
"views/queue_job_views.xml",
"views/account_invoice_views.xml",
"wizards/validate_account_move_view.xml",
],
"installable": True,
"development_status": "Production/Stable",
"maintainers": ["pedrobaeza"],
}

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Queue Job Channel -->
<record id="invoice_open_job" model="queue.job.channel">
<field name="name">Invoice Open Job</field>
<field name="parent_id" ref="queue_job.channel_root" />
</record>
<!-- Queue Job Function -->
<record id="job_function_generate_invoice_open_job" model="queue.job.function">
<field name="model_id" ref="account.model_account_move" />
<field name="method">action_invoice_open_job</field>
<field name="channel_id" ref="invoice_open_job" />
</record>
</odoo>

View file

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_validation_queued
#
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_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Cancel"
msgstr ""
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.validate_account_move_view
msgid "Enqueue Validation"
msgstr ""
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Requeue"
msgstr ""
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_validate_account_move
msgid "Validate Account Move"
msgstr ""
#. module: account_invoice_validation_queued
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_bank_statement_line__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_move__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_payment__validation_job_ids
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_move_form
msgid "Validation Jobs"
msgstr ""

View file

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_validation_queued
#
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_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Cancel"
msgstr "Otkaži"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.validate_account_move_view
msgid "Enqueue Validation"
msgstr "Stavi u red za validaciju"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_account_move
msgid "Journal Entry"
msgstr "Žurnal"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Requeue"
msgstr "Ponovo stavi u red"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_validate_account_move
msgid "Validate Account Move"
msgstr "Odobri knjiženje"
#. module: account_invoice_validation_queued
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_bank_statement_line__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_move__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_payment__validation_job_ids
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_move_form
msgid "Validation Jobs"
msgstr "Poslovi validacije"

View file

@ -0,0 +1,54 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_validation_queued
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\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"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Cancel"
msgstr ""
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.validate_account_move_view
msgid "Enqueue Validation"
msgstr ""
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Requeue"
msgstr ""
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_validate_account_move
msgid "Validate Account Move"
msgstr ""
#. module: account_invoice_validation_queued
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_bank_statement_line__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_move__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_payment__validation_job_ids
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_move_form
msgid "Validation Jobs"
msgstr ""
#. module: account_invoice_validation_queued
#: code:addons/account_invoice_validation_queued/wizards/validate_account_move.py:0
#, python-format
msgid "You can't enqueue invoices with different dates."
msgstr ""

View file

@ -0,0 +1,79 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_validation_queued
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-08-29 23:11+0000\n"
"PO-Revision-Date: 2023-10-09 07:44+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Cancel"
msgstr "Cancelar"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.validate_account_move_view
msgid "Enqueue Validation"
msgstr "Encolar validación"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_account_move
msgid "Journal Entry"
msgstr "Entrada diaria"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Requeue"
msgstr "Volver a poner en cola"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_validate_account_move
msgid "Validate Account Move"
msgstr "Validar movimientos contables"
#. module: account_invoice_validation_queued
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_bank_statement_line__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_move__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_payment__validation_job_ids
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_move_form
msgid "Validation Jobs"
msgstr "Trabajos de validación"
#. module: account_invoice_validation_queued
#: code:addons/account_invoice_validation_queued/wizards/validate_account_move.py:0
#, python-format
msgid "You can't enqueue invoices with different dates."
msgstr "No puede encolar facturas de diferentes fechas."
#~ msgid "Journal Entries"
#~ msgstr "Asientos contables"
#~ msgid "Confirm the selected invoices"
#~ msgstr "Confirmar las facturas seleccionadas"
#~ msgid "Invoice"
#~ msgstr "Factura"
#~ msgid ""
#~ "There's already an enqueued job for validating the invoice #%s. Please "
#~ "wait until it's finished or remove it from the selection."
#~ msgstr ""
#~ "Ya hay un trabajo encolado para validar la factura #%s. Por favor espere "
#~ "hasta que haya finalizado o elimine la factura de la selección."
#~ msgid "Queue Job"
#~ msgstr "Trabajo en cola"
#~ msgid "Quotation"
#~ msgstr "Presupuesto"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_validation_queued
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-05-12 10:23+0000\n"
"Last-Translator: \"Benjamin Willig (ACSONE)\" <benjamin.willig@acsone.eu>\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 5.10.4\n"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Cancel"
msgstr "Annuler"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.validate_account_move_view
msgid "Enqueue Validation"
msgstr "Valider en tâche de fond"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_account_move
msgid "Journal Entry"
msgstr "Ecriture comptable"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Requeue"
msgstr "Relancer"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_validate_account_move
msgid "Validate Account Move"
msgstr "Valider le mouvement"
#. module: account_invoice_validation_queued
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_bank_statement_line__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_move__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_payment__validation_job_ids
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_move_form
msgid "Validation Jobs"
msgstr "Tâches de validation"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_validation_queued
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-03-05 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_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Cancel"
msgstr "Annulla"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.validate_account_move_view
msgid "Enqueue Validation"
msgstr "Metti in coda la validazione"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: account_invoice_validation_queued
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_queue_job_account_invoice_validation
msgid "Requeue"
msgstr "Rimetti in coda"
#. module: account_invoice_validation_queued
#: model:ir.model,name:account_invoice_validation_queued.model_validate_account_move
msgid "Validate Account Move"
msgstr "Valida movimento contabile"
#. module: account_invoice_validation_queued
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_bank_statement_line__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_move__validation_job_ids
#: model:ir.model.fields,field_description:account_invoice_validation_queued.field_account_payment__validation_job_ids
#: model_terms:ir.ui.view,arch_db:account_invoice_validation_queued.view_move_form
msgid "Validation Jobs"
msgstr "Code validazioni"

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,24 @@
# Copyright 2019-2020 Tecnativa - Pedro M. Baeza
# Copyright 2020 Tecnativa - Manuel Calero
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountMove(models.Model):
_inherit = "account.move"
validation_job_ids = fields.Many2many(
comodel_name="queue.job",
column1="invoice_id",
column2="job_id",
string="Validation Jobs",
relation="account_move_validation_job_rel",
copy=False,
)
def action_invoice_open_job(self):
self.ensure_one()
if self.state != "draft":
return
return self._post()

View file

@ -0,0 +1,8 @@
#. Jobs are enqueued in the channel ``root.account_invoice_validation_queued``,
so you must adjust your
`Odoo configuration <https://github.com/OCA/queue/tree/16.0/queue_job#configuration>`_
according this.
#. If you want to see queued jobs, you need "Job Queue / Job Queue Manager"
permission in your user.
#. Configure your invoice/refund sequences as "Standard" instead of "No gap",
or you'll have concurrent updates problems.

View file

@ -0,0 +1,6 @@
* `Tecnativa <https://www.tecnativa.com>`__:
* Pedro M. Baeza
* Manuel Calero
* Saran Lim. <saranl@ecosoft.co.th>

View file

@ -0,0 +1,5 @@
This module allows to enqueue in several jobs the account validation process
to be executed in paralell on background, which is normally done serially and
on foreground.
Each invoice creates a job for performing the validation.

View file

@ -0,0 +1,9 @@
#. Go to *Invoicing > Customers > Invoices* or
*Invoicing > Vendors > Bills*.
#. Mark at least one check on the left part of one draft invoice in the
list view.
#. Click on *Action > Post entries*.
#. On the dialog popup that appears, click on "Enqueue Validation".
#. Once enqueued, and having the "Job Queue Manager" permission, you can go to
the invoice, and see the tab "Validation Jobs". A list with all the jobs
related to that invoice can be found there.

View file

@ -0,0 +1,462 @@
<!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>Enqueue account invoice validation</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="enqueue-account-invoice-validation">
<h1 class="title">Enqueue account invoice validation</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d898d3938a0da84815ac6281234dee41724a5ff59a8ed47bcbc360e65ea5211f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.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-invoicing/tree/16.0/account_invoice_validation_queued"><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_validation_queued"><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 allows to enqueue in several jobs the account validation process
to be executed in paralell on background, which is normally done serially and
on foreground.</p>
<p>Each invoice creates a job for performing the validation.</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">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<ol class="arabic simple">
<li>Jobs are enqueued in the channel <tt class="docutils literal">root.account_invoice_validation_queued</tt>,
so you must adjust your
<a class="reference external" href="https://github.com/OCA/queue/tree/16.0/queue_job#configuration">Odoo configuration</a>
according this.</li>
<li>If you want to see queued jobs, you need “Job Queue / Job Queue Manager”
permission in your user.</li>
<li>Configure your invoice/refund sequences as “Standard” instead of “No gap”,
or youll have concurrent updates problems.</li>
</ol>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<ol class="arabic simple">
<li>Go to <em>Invoicing &gt; Customers &gt; Invoices</em> or
<em>Invoicing &gt; Vendors &gt; Bills</em>.</li>
<li>Mark at least one check on the left part of one draft invoice in the
list view.</li>
<li>Click on <em>Action &gt; Post entries</em>.</li>
<li>On the dialog popup that appears, click on “Enqueue Validation”.</li>
<li>Once enqueued, and having the “Job Queue Manager” permission, you can go to
the invoice, and see the tab “Validation Jobs”. A list with all the jobs
related to that invoice can be found there.</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<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_validation_queued%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-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Pedro M. Baeza</li>
<li>Manuel Calero</li>
</ul>
</li>
<li>Saran Lim. &lt;<a class="reference external" href="mailto:saranl&#64;ecosoft.co.th">saranl&#64;ecosoft.co.th</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">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/pedrobaeza"><img alt="pedrobaeza" src="https://github.com/pedrobaeza.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_validation_queued">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>
</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_validation_queued

View file

@ -0,0 +1,54 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import Command
from odoo.tests import TransactionCase
class TestAccountInvoiceValidationQueued(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.wizard_obj = cls.env["validate.account.move"]
cls.queue_obj = cls.env["queue.job"]
cls.partner = cls.env["res.partner"].create({"name": "Test partner"})
cls.account = cls.env["account.account"].create(
{
"name": "Test account",
"code": "TEST.AIVQ",
"account_type": "equity",
}
)
cls.invoice = cls.env["account.move"].create(
{
"partner_id": cls.partner.id,
"move_type": "out_invoice",
"invoice_line_ids": [
Command.create(
{
"name": "Test product",
"account_id": cls.account.id,
"price_unit": 20.0,
"quantity": 1.0,
}
)
],
}
)
def test_queue_validation(self):
wizard = self.wizard_obj.with_context(
active_ids=self.invoice.ids,
).create({})
prev_jobs = self.queue_obj.search([])
wizard.enqueue_invoice_confirm()
current_jobs = self.queue_obj.search([])
jobs = current_jobs - prev_jobs
self.assertEqual(len(jobs), 1)
self.assertTrue(self.invoice.validation_job_ids)
def test_validation(self):
# Execute method directly for checking if validation is done
self.invoice.action_invoice_open_job()
self.assertEqual(self.invoice.state, "posted")

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Tecnativa - Pedro M. Baeza
Copyright 2020 Tecnativa - Manuel Calero
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_move_form" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml">
<notebook position="inside">
<page
name="page_validation_jobs"
string="Validation Jobs"
attrs="{'invisible': [('validation_job_ids', '=', [])]}"
groups="queue_job.group_queue_job_manager"
>
<field
name="validation_job_ids"
options="{'reload_on_button': true}"
nolabel="1"
readonly="1"
context="{'tree_view_ref': 'account_invoice_validation_queued.view_queue_job_account_invoice_validation'}"
/>
</page>
</notebook>
</field>
</record>
</odoo>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2019 Tecnativa - Pedro M. Baeza
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_queue_job_account_invoice_validation" model="ir.ui.view">
<field name="model">queue.job</field>
<field name="priority" eval="9999" />
<field name="arch" type="xml">
<tree>
<field name="date_created" />
<field name="date_done" />
<field name="state" />
<button
type="object"
name="requeue"
string="Requeue"
class="oe_highlight"
attrs="{'invisible': [('state', '!=', 'failed')]}"
/>
<button
type="object"
name="unlink"
string="Cancel"
class="oe_highlight_cancel"
icon="fa-times-circle"
attrs="{'invisible': [('state', 'not in', ['pending','enqueued'])]}"
/>
</tree>
</field>
</record>
</odoo>

View file

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

View file

@ -0,0 +1,25 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
# Copyright 2020 Tecnativa - Manuel Calero
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models
from odoo.addons.queue_job.job import identity_exact
class ValidateAccountMove(models.TransientModel):
_inherit = "validate.account.move"
def enqueue_invoice_confirm(self):
queue_obj = self.env["queue.job"]
active_ids = self.env.context.get("active_ids", [])
moves = self.env["account.move"].browse(active_ids)
move_to_post = moves.filtered(lambda m: m.state == "draft").sorted(
lambda m: (m.date, m.ref or "", m.id)
)
for move in move_to_post:
new_delay = move.with_delay(
identity_key=identity_exact,
).action_invoice_open_job()
job = queue_obj.search([("uuid", "=", new_delay.uuid)])
move.sudo().validation_job_ids = [(4, job.id)]

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Tecnativa - Pedro M. Baeza
Copyright 2020 Tecnativa - Manuel Calero
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="validate_account_move_view" model="ir.ui.view">
<field name="model">validate.account.move</field>
<field name="inherit_id" ref="account.validate_account_move_view" />
<field name="arch" type="xml">
<button name="validate_move" position="before">
<button
name="enqueue_invoice_confirm"
string="Enqueue Validation"
type="object"
class="btn btn-primary"
/>
</button>
</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_validation_queued Module - account_invoice_validation_queued
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_validation_queued. 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,6 @@
# Dependencies
This addon depends on:
- [account](../../odoo-bringout-oca-ocb-account)
- [queue_job](../../odoo-bringout-oca-queue-queue_job)

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_validation_queued or install in UI.

View file

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

View file

@ -0,0 +1,12 @@
# Models
Detected core models and extensions in account_invoice_validation_queued.
```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_validation_queued. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_invoice_validation_queued
- License: LGPL-3

View file

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

View file

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

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_validation_queued
```

View file

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

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-account-invoicing-account_invoice_validation_queued"
version = "16.0.0"
description = "Enqueue account invoice validation - Odoo addon"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-account>=16.0.0",
"odoo-bringout-oca-account-invoicing-queue_job>=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_validation_queued"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]