Initial commit: OCA Workflow Process packages (456 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:00 +02:00
commit d366e42934
18799 changed files with 1284507 additions and 0 deletions

View file

@ -0,0 +1,46 @@
# Purchase Advance Payment
Odoo addon: purchase_advance_payment
## Installation
```bash
pip install odoo-bringout-oca-purchase-workflow-purchase_advance_payment
```
## Dependencies
This addon depends on:
- purchase
## Manifest Information
- **Name**: Purchase Advance Payment
- **Version**: 16.0.1.2.1
- **Category**: Purchase
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/purchase-workflow](https://github.com/OCA/purchase-workflow) branch 16.0, addon `purchase_advance_payment`.
## 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
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.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,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 Purchase_advance_payment Module - purchase_advance_payment
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 purchase_advance_payment. 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:
- [purchase](../../odoo-bringout-oca-ocb-purchase)

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

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-purchase-workflow-purchase_advance_payment"
# or
uv pip install odoo-bringout-oca-purchase-workflow-purchase_advance_payment"
```

View file

@ -0,0 +1,14 @@
# Models
Detected core models and extensions in purchase_advance_payment.
```mermaid
classDiagram
class account_payment
class purchase_order
class res_config_settings
```
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: purchase_advance_payment. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon purchase_advance_payment
- License: LGPL-3

View file

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

View file

@ -0,0 +1,34 @@
# Security
Access control and security definitions in purchase_advance_payment.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../purchase_advance_payment/security/ir.model.access.csv)**
- 3 model access rules
## Record Rules
Row-level security rules defined in:
```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:
- **[ir.model.access.csv](../purchase_advance_payment/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
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 purchase_advance_payment
```

View file

@ -0,0 +1,8 @@
# Wizards
Transient models exposed as UI wizards in purchase_advance_payment.
```mermaid
classDiagram
class AccountVoucherWizardPurchase
```

View file

@ -0,0 +1,107 @@
========================
Purchase Advance Payment
========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:c35582569915d4b2de9dff1d342e7eb4ea6d78ab37a418fb6b8f493a7a210ce0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_advance_payment
:alt: OCA/purchase-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_advance_payment
: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/purchase-workflow&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
The module allows to add advance payments on purchase orders and Request
for Quotation. The advance payments are allowed even before confirmation
and before starting the billing process.
**Table of contents**
.. contents::
:local:
Usage
=====
To use this module, you need to:
* Go to a purchase order.
* Click on "Pay Purchase Advance".
* Select the Journal and specify the amount of the advanced payment.
* "Make Advance Payment".
When generating the invoice, the system displays the advanced payments, select those you want to add to the invoice.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-workflow/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/purchase-workflow/issues/new?body=module:%20purchase_advance_payment%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
~~~~~~~
* Forgeflow
Contributors
~~~~~~~~~~~~
* Mateu Griful <mateu.griful@forgeflow.com>
* Lois Rilo <lois.rilo@forgeflow.com>
* `Trobz <https://trobz.com>`_:
* Son Ho <sonhd@trobz.com>
Other credits
~~~~~~~~~~~~~
The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp
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-LoisRForgeFlow| image:: https://github.com/LoisRForgeFlow.png?size=40px
:target: https://github.com/LoisRForgeFlow
:alt: LoisRForgeFlow
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-LoisRForgeFlow|
This module is part of the `OCA/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/purchase_advance_payment>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,2 @@
from . import models
from . import wizard

View file

@ -0,0 +1,23 @@
# Copyright (C) 2021 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
{
"name": "Purchase Advance Payment",
"version": "16.0.1.2.1",
"author": "Forgeflow, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/purchase-workflow",
"category": "Purchase",
"maintainers": ["LoisRForgeFlow"],
"license": "AGPL-3",
"summary": "Allow to add advance payments on purchase orders",
"depends": ["purchase"],
"data": [
"data/ir_config_parameter.xml",
"wizard/purchase_advance_payment_wizard_view.xml",
"views/res_config_settings_views.xml",
"views/purchase_view.xml",
"security/ir.model.access.csv",
"views/account_payment_views.xml",
],
"installable": True,
}

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo noupdate="1">
<record id="auto_post_advance_payments" model="ir.config_parameter" forcecreate="0">
<field name="key">purchase_advance_payment.auto_post_advance_payments</field>
<field name="value">True</field>
</record>
</odoo>

View file

@ -0,0 +1,258 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
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: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
msgid "Account Voucher Wizard Purchase"
msgstr "Account Voucher Wizard Purchase"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr "Avansno plaćanje"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr "Status avansnog plaćanja"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr "Advance Payments"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr "Amount Residual"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr "Ukupni iznos"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr "Iznos avansa"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr "Iznos u valuti naloga"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr "Amount of advance is greater than residual amount on purchase"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr "Iznos avansa mora biti pozitivan."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr "Auto Post Purchase Advance Payments"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr "Available Payment Method Line"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr "Otkaži"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr "Iznos u valuti"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr "Valuta"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr "Datum"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr "ID"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid ""
"If enabled, advance payments created from POs are automatically posted."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr "Vrsta naloga"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr "Dnevnik valute"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr "Napravi avansno plaćanje"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr "Nije plaćeno"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr "Not Reconciled"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr "Not Sent"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr "Nalog"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr "Dospjeli iznos ponude"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr "Plaćeno"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr "Djelimično plaćeno"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr "Pay purchase advanced"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr "Metoda plaćanja"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr "Payment Sent?"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr "Payment advances"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr "Payment move lines"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr "Plaćanja"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Procurement purchase grouping settings"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr "Nabavke"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr "Nalog za nabavu"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr "Purchase Payment"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr "Ref."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr "Dospjeli iznos"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr "Vendor Advance Payments"

View file

@ -0,0 +1,266 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-04-18 08:37+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.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 4.17\n"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
msgid "Account Voucher Wizard Purchase"
msgstr "Asistente de compra de vales de cuenta"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr "Pago por Adelantado"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr "Estado del pago anticipado"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr "Importe residual"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr "Importe total"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr "Importe anticipado"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr "Importe en la moneda del pedido"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr "El importe anticipado es mayor que el importe pendiente del pedido"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr "El importe del anticipo debe ser positivo."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr "Cancelar"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr "Creado el"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr "Importe en divisa"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr "Moneda"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr "Fecha"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr "ID"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid "If enabled, advance payments created from POs are automatically posted."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr "Diario"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr "Moneda del diario"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr "última modificación el"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr "última modificación por"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr "Realizar anticipo"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr "No pagado"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr "Pedido"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr "Importe pendiente del pedido"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr "Pagado"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr "Pagado parcialmente"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr "Pagar anticipo de compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr "Método de pago"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr "Anticipos"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr "Líneas de asiento de pago"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr "Pagos"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr "Compra"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr "Pedido de compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr "Pago de la Compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr "Ref."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr "Importe pendiente"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr ""
#~ msgid "Operation"
#~ msgstr "Operación"
#~ msgid "Order Currency"
#~ msgstr "Moneda del pedido"

View file

@ -0,0 +1,267 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-05-27 09:26+0000\n"
"Last-Translator: MDgrap <michael.duc@grap.coop>\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: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
#, fuzzy
msgid "Account Voucher Wizard Purchase"
msgstr "Assistant de justificatif comptable d'achat"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr "Acompte"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr "Statut de l'acompte"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr "Montant résiduel"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr "Montant total"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr "Montant avancé"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr "Montant en devise de la commande"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr "Le montant de l'acompte est supérieur au montant résiduel de l'achat"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr "Le montant de l'acompte doit être positif."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr "Annuler"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr "Créé le"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr "Montant en devise"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr "Devise"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr "Nom d'affichage"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid "If enabled, advance payments created from POs are automatically posted."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr "Devise du journal"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr "Faire un paiement d'acompte"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr "Non payé"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr "Commande"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr "Montant dû de la commande"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr "Payé"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr "Partiellement réglé"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr "Payer un acompte d'achat"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr "Mode de paiement"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr "Paiements d'acomptes"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr "Lignes de paiements"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr "Paiements"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr "Achat"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr "Bon de commande"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr "Paiement d'achat"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr "Montant résiduel"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr ""
#~ msgid "Operation"
#~ msgstr "Opération"
#~ msgid "Order Currency"
#~ msgstr "Devise de la commande"

View file

@ -0,0 +1,268 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-07-30 14:25+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.4\n"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
msgid "Account Voucher Wizard Purchase"
msgstr "Conto buono procedura guidata acquisto"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr "Pagamento anticipato"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr "Stato pagamento anticipato"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr "Anticipo pagamenti"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr "Importo residuo"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr "Importo totale"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr "Importo anticipato"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr "Importo nella valuta dell'ordine"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr "L'importo dell'anticipo è superiore all'importo residuo in vendita"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr "L'importo dell'anticipo deve essere positivo."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr "Inserimento automatico anticipo pagamento acquisto"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr "Riga metodo di pagamento disponibile"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr "Annulla"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr "Creato il"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr "Importo valuta"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr "Valuta"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr "Data"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr "ID"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid "If enabled, advance payments created from POs are automatically posted."
msgstr ""
"Se abilitata, gli anticipi pagamenti creati dai POS sono inseriti "
"automaticamente."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr "Registro"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr "Valuta registro"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr "Effettua il pagamento anticipato"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr "Non pagato"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr "Non riconciliata"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr "Non inviato"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr "Ordine"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr "Importo dovuto dell'ordine"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr "Pagato"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr "Pagato parzialmente"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr "Paga anticipo acquisto"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr "Metodo di pagamento"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr "Pagamento inviato?"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr "Pagamenti anticipati"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr "Righe movimento pagamento"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr "Pagamenti"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Impostazioni raggruppamento approvvigionamento acquisti"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr "Acquisto"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr "Ordine di acquisto"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr "Pagamento acquisto"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr "Rif."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr "Importo residuo"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr "Anticipo pagamenti fornitore"
#~ msgid "Operation"
#~ msgstr "Operazione"
#~ msgid "Order Currency"
#~ msgstr "Valuta ordine"

View file

@ -0,0 +1,263 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-08-21 12:20+0000\n"
"Last-Translator: Peter Romão <peterromao@yahoo.co.uk>\n"
"Language-Team: none\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
msgid "Account Voucher Wizard Purchase"
msgstr "Assistente de Compra com Vale na Conta"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr "Adiantamento"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr "Estado do Adiantamento"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr "Adiantamentos"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr "Valor Residual"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr "Valor Total"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr "Valor adiantado"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr "Valor na Moeda da Encomenda"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr "Valor do adiantamento é supeior ao valor residual da compra"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr "O valor do adiantamento deve ser positivo."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr "Lançar Automaticamente Adiantamentos de Compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr "Linha de Método de Pagamento Disponível"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr "Cancelar"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr "Criado em"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr "Valor Moeda"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr "Moeda"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr "Data"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr "Nome"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr "ID"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid ""
"If enabled, advance payments created from POs are automatically posted."
msgstr ""
"Caso esteja ativo, os adiantamentos criados a partir de encomendas serão "
"automaticamente lançados."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr "Diário"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr "Moeda do Diário"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr "Última Modificação por"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr "Última Atualização em"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr "Fazer adiantamento"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr "Não Pago"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr "Não Reconciliado"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr "Não Enviado"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr "Encomenda"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr "Valor em Dívida da Encomenda"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr "Pago"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr "Pago Parcialmente"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr "Adiantamento de compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr "Método de Pagamento"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr "Pagamento Enviado?"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr "Adiantamentos"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr "Linhas de movimentos de adiantamento"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr "Pagamentos"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Configurações de agrupamento de compras no aprovisionamento"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr "Compra"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr "Encomenda"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr "Pagamento de Compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr "Ref.ª"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr "Valor Residual"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr "Adiantamentos de Fornecedor"

View file

@ -0,0 +1,269 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-08-07 01:58+0000\n"
"Last-Translator: Rodrigo Sottomaior Macedo "
"<sottomaiormacedotec@sottomaiormacedo.tech>\n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
msgid "Account Voucher Wizard Purchase"
msgstr "Compra do assistente de voucher de conta"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr "Pagamento Antecipado"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr "Situação Pagamento Antecipado"
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr "Pagamentos antecipados"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr "Valor Residual"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr "Valor Total"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr "Valor Antecipado"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr "Valor na Moeda do Pedido"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr "O valor do adiantamento é maior que o valor residual na compra"
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr "O valor do adiantamento deve ser positivo."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr "Pagamentos antecipados de pós-compra automáticos"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr "Linha de método de pagamento disponível"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr "Cancelar"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr "Criado em"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr "Valor moeda"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr "Moeda"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr "Data"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr "Nome Exibição"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr "ID"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid "If enabled, advance payments created from POs are automatically posted."
msgstr ""
"Se ativado, os adiantamentos criados a partir de pedidos de compra serão "
"lançados automaticamente."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr "Diário"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr "Moeda Díario"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr "Última Atualização por"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr "Última Atualização em"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr "Faça o Pagamento Antecipado"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr "Não Pago"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr "Não reconciliado"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr "Não enviado"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr "Pedido"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr "Valor Devido do Pedido"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr "Pago"
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr "Parcialmente Pago"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr "Pagar Compra Antecipadamente"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr "Forma de Pagamento"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr "Pagamento enviado?"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr "Adiantamentos de pagamento"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr "Linhas Movimento Pagamento"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr "Pagamentos"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Configurações de agrupamento de compras de compras"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr "Compra"
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr "Pedido Compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr "Pagamento de compra"
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr "Ref."
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr "Valor Residual"
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr "Pagamentos antecipados do fornecedor"
#~ msgid "Operation"
#~ msgstr "Operação"
#~ msgid "Order Currency"
#~ msgstr "Moeda Pedido"

View file

@ -0,0 +1,258 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_advance_payment
#
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: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_voucher_wizard_purchase
msgid "Account Voucher Wizard Purchase"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_view_account_voucher_wizard
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Advance Payment"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__advance_payment_status
msgid "Advance Payment Status"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.actions.act_window,name:purchase_advance_payment.action_account_advance_payments_payable
#: model:ir.ui.menu,name:purchase_advance_payment.menu_account_advance_payments_payable
msgid "Advance Payments"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_kpis_tree
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_view_tree
msgid "Amount Residual"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_total
msgid "Amount Total"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__amount_advance
msgid "Amount advanced"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Amount in Order Currency"
msgstr ""
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance is greater than residual amount on purchase"
msgstr ""
#. module: purchase_advance_payment
#. odoo-python
#: code:addons/purchase_advance_payment/wizard/purchase_advance_payment_wizard.py:0
#, python-format
msgid "Amount of advance must be positive."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_res_config_settings__auto_post_purchase_advance_payments
msgid "Auto Post Purchase Advance Payments"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__available_payment_method_line_ids
msgid "Available Payment Method Line"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Cancel"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_uid
msgid "Created by"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__create_date
msgid "Created on"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_amount
msgid "Curr. amount"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__currency_id
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Currency"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__date
msgid "Date"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__display_name
msgid "Display Name"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__id
msgid "ID"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.res_config_settings_view_form_purchase
msgid ""
"If enabled, advance payments created from POs are automatically posted."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_id
msgid "Journal"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__journal_currency_id
msgid "Journal Currency"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase____last_update
msgid "Last Modified on"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_uid
msgid "Last Updated by"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__write_date
msgid "Last Updated on"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Make advance payment"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__not_paid
msgid "Not Paid"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Reconciled"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Not Sent"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__order_id
msgid "Order"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_voucher_wizard
msgid "Order Due Amount"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__paid
msgid "Paid"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields.selection,name:purchase_advance_payment.selection__purchase_order__advance_payment_status__partial
msgid "Partially Paid"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Pay purchase advanced"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_method_line_id
msgid "Payment Method"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_supplier_payment_tree
msgid "Payment Sent?"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.purchase_order_form
msgid "Payment advances"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__payment_line_ids
msgid "Payment move lines"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_account_payment
msgid "Payments"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_payment__purchase_id
msgid "Purchase"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model,name:purchase_advance_payment.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__account_payment_ids
msgid "Purchase Payment"
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_account_voucher_wizard_purchase__payment_ref
msgid "Ref."
msgstr ""
#. module: purchase_advance_payment
#: model:ir.model.fields,field_description:purchase_advance_payment.field_purchase_order__amount_residual
msgid "Residual amount"
msgstr ""
#. module: purchase_advance_payment
#: model_terms:ir.ui.view,arch_db:purchase_advance_payment.view_account_payment_search
msgid "Vendor Advance Payments"
msgstr ""

View file

@ -0,0 +1,3 @@
from . import payment
from . import purchase_order
from . import res_config_settings

View file

@ -0,0 +1,16 @@
# Copyright (C) 2021 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
from odoo import fields, models
class AccountPayment(models.Model):
_inherit = "account.payment"
purchase_id = fields.Many2one(
"purchase.order",
"Purchase",
readonly=True,
states={"draft": [("readonly", False)]},
)

View file

@ -0,0 +1,99 @@
# Copyright (C) 2021 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
from odoo import api, fields, models
from odoo.tools import float_compare
class PurchaseOrder(models.Model):
_inherit = "purchase.order"
account_payment_ids = fields.One2many(
"account.payment", "purchase_id", string="Pay purchase advanced", readonly=True
)
amount_residual = fields.Float(
"Residual amount",
readonly=True,
compute="_compute_purchase_advance_payment",
store=True,
)
payment_line_ids = fields.Many2many(
"account.move.line",
string="Payment move lines",
compute="_compute_purchase_advance_payment",
store=True,
)
advance_payment_status = fields.Selection(
selection=[
("not_paid", "Not Paid"),
("paid", "Paid"),
("partial", "Partially Paid"),
],
store=True,
readonly=True,
copy=False,
tracking=True,
compute="_compute_purchase_advance_payment",
)
@api.depends(
"currency_id",
"company_id",
"amount_total",
"account_payment_ids",
"account_payment_ids.state",
"account_payment_ids.move_id",
"account_payment_ids.move_id.line_ids",
"account_payment_ids.move_id.line_ids.date",
"account_payment_ids.move_id.line_ids.debit",
"account_payment_ids.move_id.line_ids.credit",
"account_payment_ids.move_id.line_ids.currency_id",
"account_payment_ids.move_id.line_ids.amount_currency",
"order_line.invoice_lines.move_id",
"order_line.invoice_lines.move_id.amount_total",
"order_line.invoice_lines.move_id.amount_residual",
)
def _compute_purchase_advance_payment(self):
for order in self:
mls = order.account_payment_ids.mapped("move_id.line_ids").filtered(
lambda x: x.account_id.account_type == "liability_payable"
and x.parent_state == "posted"
)
advance_amount = 0.0
for line in mls:
line_currency = line.currency_id or line.company_id.currency_id
# Exclude reconciled pre-payments amount because once reconciled
# the pre-payment will reduce bill residual amount like any
# other payment.
line_amount = (
line.amount_residual_currency
if line.currency_id
else line.amount_residual
)
if line_currency != order.currency_id:
advance_amount += line.currency_id._convert(
line_amount,
order.currency_id,
order.company_id,
line.date or fields.Date.today(),
)
else:
advance_amount += line_amount
# Consider payments in related invoices.
invoice_paid_amount = 0.0
for inv in order.invoice_ids:
invoice_paid_amount += inv.amount_total - inv.amount_residual
amount_residual = order.amount_total - advance_amount - invoice_paid_amount
payment_state = "not_paid"
if mls or not order.currency_id.is_zero(invoice_paid_amount):
has_due_amount = float_compare(
amount_residual, 0.0, precision_rounding=order.currency_id.rounding
)
if has_due_amount <= 0:
payment_state = "paid"
elif has_due_amount > 0:
payment_state = "partial"
order.payment_line_ids = mls
order.amount_residual = amount_residual
order.advance_payment_status = payment_state

View file

@ -0,0 +1,12 @@
# Copyright 2024 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
auto_post_purchase_advance_payments = fields.Boolean(
config_parameter="purchase_advance_payment.auto_post_advance_payments",
)

View file

@ -0,0 +1,5 @@
* Mateu Griful <mateu.griful@forgeflow.com>
* Lois Rilo <lois.rilo@forgeflow.com>
* `Trobz <https://trobz.com>`_:
* Son Ho <sonhd@trobz.com>

View file

@ -0,0 +1 @@
The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp

View file

@ -0,0 +1,3 @@
The module allows to add advance payments on purchase orders and Request
for Quotation. The advance payments are allowed even before confirmation
and before starting the billing process.

View file

@ -0,0 +1,8 @@
To use this module, you need to:
* Go to a purchase order.
* Click on "Pay Purchase Advance".
* Select the Journal and specify the amount of the advanced payment.
* "Make Advance Payment".
When generating the invoice, the system displays the advanced payments, select those you want to add to the invoice.

View file

@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_payment_purchase_advance,account.payment purchase_advance,account.model_account_payment,purchase.group_purchase_user,1,1,1,0
access_account_payment_method_purchase_advance,account.payment.method purchase_advance,account.model_account_payment_method,purchase.group_purchase_user,1,0,0,0
access_account_voucher_wizard_purchase_advance,access_account_voucher_wizard_purchase_advance,model_account_voucher_wizard_purchase,purchase.group_purchase_user,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_account_payment_purchase_advance account.payment purchase_advance account.model_account_payment purchase.group_purchase_user 1 1 1 0
3 access_account_payment_method_purchase_advance account.payment.method purchase_advance account.model_account_payment_method purchase.group_purchase_user 1 0 0 0
4 access_account_voucher_wizard_purchase_advance access_account_voucher_wizard_purchase_advance model_account_voucher_wizard_purchase purchase.group_purchase_user 1 1 1 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,454 @@
<!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>Purchase Advance Payment</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="purchase-advance-payment">
<h1 class="title">Purchase Advance Payment</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:c35582569915d4b2de9dff1d342e7eb4ea6d78ab37a418fb6b8f493a7a210ce0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_advance_payment"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_advance_payment"><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/purchase-workflow&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>The module allows to add advance payments on purchase orders and Request
for Quotation. The advance payments are allowed even before confirmation
and before starting the billing process.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-6">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>To use this module, you need to:</p>
<ul class="simple">
<li>Go to a purchase order.</li>
<li>Click on “Pay Purchase Advance”.</li>
<li>Select the Journal and specify the amount of the advanced payment.</li>
<li>“Make Advance Payment”.</li>
</ul>
<p>When generating the invoice, the system displays the advanced payments, select those you want to add to the invoice.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/purchase-workflow/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/purchase-workflow/issues/new?body=module:%20purchase_advance_payment%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Forgeflow</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul>
<li><p class="first">Mateu Griful &lt;<a class="reference external" href="mailto:mateu.griful&#64;forgeflow.com">mateu.griful&#64;forgeflow.com</a>&gt;</p>
</li>
<li><p class="first">Lois Rilo &lt;<a class="reference external" href="mailto:lois.rilo&#64;forgeflow.com">lois.rilo&#64;forgeflow.com</a>&gt;</p>
</li>
<li><p class="first"><a class="reference external" href="https://trobz.com">Trobz</a>:</p>
<blockquote>
<ul class="simple">
<li>Son Ho &lt;<a class="reference external" href="mailto:sonhd&#64;trobz.com">sonhd&#64;trobz.com</a>&gt;</li>
</ul>
</blockquote>
</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-6">Other credits</a></h2>
<p>The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp</p>
</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/LoisRForgeFlow"><img alt="LoisRForgeFlow" src="https://github.com/LoisRForgeFlow.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_advance_payment">OCA/purchase-workflow</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 @@
from . import test_purchase_advance_payment

View file

@ -0,0 +1,561 @@
# Copyright (C) 2021 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
from odoo import fields
from odoo.exceptions import ValidationError
from odoo.tests import common
class TestPurchaseAdvancePayment(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
# Partners
cls.res_partner_1 = cls.env["res.partner"].create({"name": "Wood Corner"})
cls.res_partner_address_1 = cls.env["res.partner"].create(
{"name": "Willie Burke", "parent_id": cls.res_partner_1.id}
)
cls.res_partner_2 = cls.env["res.partner"].create({"name": "Partner 12"})
# Products
cls.product_1 = cls.env["product.product"].create(
{"name": "Desk Combination", "type": "consu", "purchase_method": "purchase"}
)
cls.product_2 = cls.env["product.product"].create(
{"name": "Conference Chair", "type": "consu", "purchase_method": "purchase"}
)
cls.product_3 = cls.env["product.product"].create(
{
"name": "Repair Services",
"type": "service",
"purchase_method": "purchase",
}
)
cls.tax = cls.env["account.tax"].create(
{
"name": "Tax 20",
"type_tax_use": "purchase",
"amount": 20,
}
)
# purchase Order
cls.purchase_order_1 = cls.env["purchase.order"].create(
{"partner_id": cls.res_partner_1.id}
)
cls.purchase_order_2 = cls.env["purchase.order"].create(
{"partner_id": cls.res_partner_2.id}
)
cls.order_line_2_1 = cls.env["purchase.order.line"].create(
{
"order_id": cls.purchase_order_2.id,
"product_id": cls.product_1.id,
"product_uom": cls.product_1.uom_id.id,
"product_qty": 10.0,
"price_unit": 100.0,
"taxes_id": cls.tax,
}
)
cls.order_line_1 = cls.env["purchase.order.line"].create(
{
"order_id": cls.purchase_order_1.id,
"product_id": cls.product_1.id,
"product_uom": cls.product_1.uom_id.id,
"product_qty": 10.0,
"price_unit": 100.0,
"taxes_id": cls.tax,
}
)
cls.order_line_2 = cls.env["purchase.order.line"].create(
{
"order_id": cls.purchase_order_1.id,
"product_id": cls.product_2.id,
"product_uom": cls.product_2.uom_id.id,
"product_qty": 25.0,
"price_unit": 40.0,
"taxes_id": cls.tax,
}
)
cls.order_line_3 = cls.env["purchase.order.line"].create(
{
"order_id": cls.purchase_order_1.id,
"product_id": cls.product_3.id,
"product_uom": cls.product_3.uom_id.id,
"product_qty": 20.0,
"price_unit": 50.0,
"taxes_id": cls.tax,
}
)
cls.active_euro = False
cls.currency_euro = (
cls.env["res.currency"]
.with_context(active_test=False)
.search([("name", "=", "EUR")])
)
# active euro currency if inactive for test
if not cls.currency_euro.active:
cls.currency_euro.active = True
cls.active_euro = True
cls.currency_usd = cls.env["res.currency"].search([("name", "=", "USD")])
cls.currency_rate = cls.env["res.currency.rate"].create(
{
"rate": 1.20,
"currency_id": cls.currency_usd.id,
}
)
cls.journal_eur_bank = cls.env["account.journal"].create(
{
"name": "Journal Euro Bank",
"type": "bank",
"code": "111",
"currency_id": cls.currency_euro.id,
}
)
cls.journal_usd_bank = cls.env["account.journal"].create(
{
"name": "Journal USD Bank",
"type": "bank",
"code": "222",
"currency_id": cls.currency_usd.id,
}
)
cls.journal_eur_cash = cls.env["account.journal"].create(
{
"name": "Journal Euro Cash",
"type": "cash",
"code": "333",
"currency_id": cls.currency_euro.id,
}
)
cls.journal_usd_cash = cls.env["account.journal"].create(
{
"name": "Journal USD Cash",
"type": "cash",
"code": "444",
"currency_id": cls.currency_usd.id,
}
)
def test_00_with_context_payment(self):
context_payment_2 = {
"active_ids": [self.purchase_order_2.id],
"active_id": self.purchase_order_2.id,
}
advance_payment_with_context = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment_2)
.create(
{
"journal_id": self.journal_eur_bank.id,
"amount_advance": 10,
}
)
)
self.assertEqual(advance_payment_with_context.order_id, self.purchase_order_2)
advance_payment_without_context = self.env[
"account.voucher.wizard.purchase"
].create(
{
"journal_id": self.journal_eur_bank.id,
"amount_advance": 20,
"order_id": self.purchase_order_1.id,
}
)
self.assertEqual(
advance_payment_without_context.order_id, self.purchase_order_1
)
def test_01_purchase_advance_payment(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
context_payment = {
"active_ids": [self.purchase_order_1.id],
"active_id": self.purchase_order_1.id,
}
# Create Advance Payment 1 - EUR - bank
advance_payment_1 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_eur_bank.id,
"amount_advance": 100,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_1.make_advance_payment()
self.assertEqual(self.purchase_order_1.amount_residual, 3480)
# Create Advance Payment 2 - USD - cash
advance_payment_2 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_cash.id,
"amount_advance": 200,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_2.make_advance_payment()
self.assertEqual(self.purchase_order_1.amount_residual, 3280)
# Confirm Purchase Order
self.purchase_order_1.button_confirm()
# Create Advance Payment 3 - EUR - cash
advance_payment_3 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_eur_cash.id,
"amount_advance": 250,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_3.make_advance_payment()
self.assertEqual(self.purchase_order_1.amount_residual, 2980)
# Create Advance Payment 4 - USD - bank
advance_payment_4 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_bank.id,
"amount_advance": 400,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_4.make_advance_payment()
self.assertEqual(self.purchase_order_1.amount_residual, 2580)
def test_02_residual_amount_with_bill(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
self.assertEqual(
self.purchase_order_1.amount_residual,
self.purchase_order_1.amount_total,
)
# Create Advance Payment 1 - EUR - bank
context_payment = {
"active_ids": [self.purchase_order_1.id],
"active_id": self.purchase_order_1.id,
}
# Create Advance Payment 2 - USD - cash
advance_payment_2 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_cash.id,
"amount_advance": 200,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_2.make_advance_payment()
pre_payment = self.purchase_order_1.account_payment_ids
self.assertEqual(len(pre_payment), 1)
self.assertEqual(self.purchase_order_1.amount_residual, 3400)
# generate bill, pay bill, check amount residual.
self.purchase_order_1.button_confirm()
self.assertEqual(self.purchase_order_1.invoice_status, "to invoice")
self.purchase_order_1.action_create_invoice()
self.assertEqual(self.purchase_order_1.invoice_status, "invoiced")
self.assertEqual(self.purchase_order_1.amount_residual, 3400)
invoice = self.purchase_order_1.invoice_ids
invoice.invoice_date = fields.Date.today()
invoice.action_post()
active_ids = invoice.ids
self.env["account.payment.register"].with_context(
active_model="account.move", active_ids=active_ids
).create(
{
"amount": 1200.0,
"group_payment": True,
"payment_difference_handling": "open",
}
)._create_payments()
self.assertEqual(self.purchase_order_1.amount_residual, 2200)
# Reconciling the pre-payment should not affect amount_residual in PO.
(
liquidity_lines,
counterpart_lines,
writeoff_lines,
) = pre_payment._seek_for_lines()
(
counterpart_lines
+ invoice.line_ids.filtered(
lambda line: line.account_type == "liability_payable"
)
).reconcile()
self.purchase_order_1.env.invalidate_all()
self.assertEqual(self.purchase_order_1.amount_residual, 2200)
def test_03_residual_amount_big_pre_payment(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
self.assertEqual(
self.purchase_order_1.amount_residual,
self.purchase_order_1.amount_total,
)
# Create Advance Payment 1 - EUR - bank
context_payment = {
"active_ids": [self.purchase_order_1.id],
"active_id": self.purchase_order_1.id,
}
# Create Advance Payment 2 - USD - cash
advance_payment_2 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_cash.id,
"amount_advance": 2000,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_2.make_advance_payment()
pre_payment = self.purchase_order_1.account_payment_ids
self.assertEqual(len(pre_payment), 1)
self.assertEqual(self.purchase_order_1.amount_residual, 1600)
# generate a partial bill, reconcile with pre payment, check amount residual.
self.purchase_order_1.button_confirm()
self.assertEqual(self.purchase_order_1.invoice_status, "to invoice")
# Adjust billing method to then do a partial bill with a total amount
# smaller than the pre-payment.
self.product_1.purchase_method = "receive"
self.order_line_1.qty_received = 10.0
self.assertEqual(self.order_line_1.qty_to_invoice, 10.0)
self.product_2.purchase_method = "receive"
self.order_line_2.qty_received = 0.0
self.assertEqual(self.order_line_2.qty_to_invoice, 0.0)
self.product_3.purchase_method = "receive"
self.order_line_3.qty_received = 0.0
self.assertEqual(self.order_line_3.qty_to_invoice, 0.0)
self.purchase_order_1.action_create_invoice()
self.assertEqual(self.purchase_order_1.invoice_status, "invoiced")
self.assertEqual(self.purchase_order_1.amount_residual, 1600)
invoice = self.purchase_order_1.invoice_ids
invoice.invoice_date = fields.Date.today()
invoice.action_post()
self.assertEqual(invoice.amount_residual, 1200)
active_ids = invoice.ids
self.env["account.payment.register"].with_context(
active_model="account.move", active_ids=active_ids
).create(
{
"amount": 300.0,
"group_payment": True,
"payment_difference_handling": "open",
}
)._create_payments()
self.assertEqual(invoice.amount_residual, 900)
self.assertEqual(self.purchase_order_1.amount_residual, 1300)
# Partially reconciling the pre-payment should not affect amount_residual in PO.
(
liquidity_lines,
counterpart_lines,
writeoff_lines,
) = pre_payment._seek_for_lines()
(
counterpart_lines
+ invoice.line_ids.filtered(
lambda line: line.account_type == "liability_payable"
)
).reconcile()
self.purchase_order_1.env.invalidate_all()
self.assertEqual(self.purchase_order_1.amount_residual, 1300)
def test_04_residual_amount_with_no_amount_left(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
context_payment = {
"active_ids": [self.purchase_order_1.id],
"active_id": self.purchase_order_1.id,
}
# Create Advance Payment with the same residual amount
advance_payment = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_cash.id,
"amount_advance": 3600,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment.make_advance_payment()
self.assertEqual(self.purchase_order_1.amount_residual, 0)
self.assertEqual(self.purchase_order_1.advance_payment_status, "paid")
def test_05_check_residual_amount_warning(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
self.assertEqual(
self.purchase_order_1.amount_residual,
self.purchase_order_1.amount_total,
"Amounts should match",
)
context_payment = {
"active_ids": [self.purchase_order_1.id],
"active_id": self.purchase_order_1.id,
}
# Check residual > advance payment and the comparison takes
# into account the currency. 3001*1.2 > 3600
mes = "Amount of advance is greater than residual amount on purchase"
with self.assertRaisesRegex(ValidationError, mes):
advance_payment_0 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_eur_bank.id,
"amount_advance": 3001,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_0.make_advance_payment()
# Check positive advance payment
mes2 = "Amount of advance must be positive."
with self.assertRaisesRegex(ValidationError, mes2):
self.env["account.voucher.wizard.purchase"].create(
{
"journal_id": self.journal_eur_bank.id,
"amount_advance": -300,
"order_id": self.purchase_order_2.id,
}
)
def test_06_skip_payment_post(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
context_payment = {
"active_ids": [self.purchase_order_1.id],
"active_id": self.purchase_order_1.id,
}
# Create Advance Payment 1
advance_payment_1 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_eur_bank.id,
"amount_advance": 100,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_1.make_advance_payment()
payment_1 = self.purchase_order_1.account_payment_ids
self.assertTrue(payment_1)
self.assertEqual(payment_1.state, "posted")
# Change setting and create a second payment:
self.env["ir.config_parameter"].sudo().set_param(
"purchase_advance_payment.auto_post_advance_payments", False
)
advance_payment_2 = (
self.env["account.voucher.wizard.purchase"]
.with_context(**context_payment)
.create(
{
"journal_id": self.journal_usd_cash.id,
"amount_advance": 200,
"order_id": self.purchase_order_1.id,
}
)
)
advance_payment_2.make_advance_payment()
payment_2 = self.purchase_order_1.account_payment_ids - payment_1
self.assertEqual(len(payment_2), 1)
self.assertEqual(payment_2.state, "draft")
def test_07_advance_payment_status_with_bill(self):
self.assertEqual(
self.purchase_order_1.amount_residual,
3600,
)
self.assertEqual(
self.purchase_order_1.amount_residual,
self.purchase_order_1.amount_total,
)
self.assertEqual(self.purchase_order_1.advance_payment_status, "not_paid")
# Create Bill
self.purchase_order_1.button_confirm()
self.assertEqual(self.purchase_order_1.invoice_status, "to invoice")
self.purchase_order_1.action_create_invoice()
self.assertEqual(self.purchase_order_1.invoice_status, "invoiced")
self.assertEqual(self.purchase_order_1.amount_residual, 3600)
invoice = self.purchase_order_1.invoice_ids
invoice.invoice_date = fields.Date.today()
invoice.action_post()
self.assertEqual(self.purchase_order_1.advance_payment_status, "not_paid")
# Create Payment 1
active_ids = invoice.ids
self.env["account.payment.register"].with_context(
active_model="account.move", active_ids=active_ids
).create(
{
"amount": 200.0,
"group_payment": True,
"payment_difference_handling": "open",
}
)._create_payments()
self.assertEqual(self.purchase_order_1.amount_residual, 3400)
self.assertEqual(self.purchase_order_1.advance_payment_status, "partial")
# Create Payment 2
self.env["account.payment.register"].with_context(
active_model="account.move", active_ids=active_ids
).create(
{
"amount": 3400.0,
"group_payment": True,
"payment_difference_handling": "open",
}
)._create_payments()
self.assertEqual(self.purchase_order_1.amount_residual, 0)
self.assertEqual(self.purchase_order_1.advance_payment_status, "paid")

View file

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_account_payment_search" model="ir.ui.view">
<field name="name">account.payment.search</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_search" />
<field name="arch" type="xml">
<filter name="transfers_filter" position="after">
<separator />
<filter
string="Vendor Advance Payments"
name="vendor_adv_payment_filter"
domain="[('purchase_id', '!=', False)]"
/>
<separator />
</filter>
<filter name="state_sent" position="after">
<filter
string="Not Sent"
name="state_not_sent"
domain="[('is_move_sent', '=', False)]"
/>
</filter>
<filter name="reconciled" position="after">
<filter
string="Not Reconciled"
name="reconciled"
domain="[('is_reconciled', '=', False)]"
/>
</filter>
</field>
</record>
<record id="view_account_supplier_payment_tree" model="ir.ui.view">
<field name="name">account.payment.search</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_supplier_payment_tree" />
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field
name="is_move_sent"
string="Payment Sent?"
invisible="not context.get('search_default_vendor_adv_payment_filter')"
/>
</field>
</field>
</record>
<record id="action_account_advance_payments_payable" model="ir.actions.act_window">
<field name="name">Advance Payments</field>
<field name="res_model">account.payment</field>
<field name="view_mode">tree,kanban,form,graph</field>
<field name="context">{
'default_payment_type': 'outbound',
'default_partner_type': 'supplier',
'search_default_vendor_adv_payment_filter': 1,
'default_move_journal_types': ('bank', 'cash'),
}</field>
<field name="view_id" ref="view_account_supplier_payment_tree" />
</record>
<menuitem
id="menu_account_advance_payments_payable"
action="action_account_advance_payments_payable"
parent="account.menu_finance_payables"
sequence="22"
/>
</odoo>

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="purchase_order_form" model="ir.ui.view">
<field name="name">purchase.order.form</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form" />
<field name="arch" type="xml">
<button name="button_draft" position="after">
<button
name="%(action_view_account_voucher_wizard)d"
string="Pay purchase advanced"
type="action"
groups="account.group_account_invoice"
attrs="{'invisible': ['|',('state', 'in', ['done','cancel']),('amount_residual', '=', 0)]}"
/>
</button>
<notebook position="inside">
<page string="Payment advances" groups="account.group_account_invoice">
<field
name="account_payment_ids"
nolabel="1"
colspan="4"
context="{'form_view_ref': 'account.view_account_payment_form','tree_view_ref': 'account.view_account_payment_tree'}"
/>
</page>
</notebook>
<field name="tax_totals" position="after">
<div class="oe_subtotal_footer_separator oe_inline o_td_label">
<label for="amount_residual" />
</div>
<field
name="amount_residual"
nolabel="1"
class="oe_subtotal_footer_separator"
widget="monetary"
options="{'currency_field': 'currency_id'}"
/>
</field>
</field>
</record>
<record id="purchase_order_view_tree" model="ir.ui.view">
<field name="name">purchase.order.view.tree</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_view_tree" />
<field name="arch" type="xml">
<field name="invoice_status" position="before">
<field
name="advance_payment_status"
decoration-success="advance_payment_status == 'paid'"
decoration-info="advance_payment_status == 'partial'"
decoration-warning="advance_payment_status == 'not_paid'"
widget="badge"
optional="hide"
/>
</field>
<field name="amount_total" position="after">
<field
name="amount_residual"
sum="Amount Residual"
widget="monetary"
decoration-bf="1"
optional="hide"
/>
</field>
</field>
</record>
<record id="purchase_order_kpis_tree" model="ir.ui.view">
<field name="name">purchase.order.inherit.purchase.order.tree</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_kpis_tree" />
<field name="arch" type="xml">
<field name="invoice_status" position="before">
<field
name="advance_payment_status"
decoration-success="advance_payment_status == 'paid'"
decoration-info="advance_payment_status == 'partial'"
decoration-warning="advance_payment_status == 'not_paid'"
widget="badge"
optional="hide"
/>
</field>
<field name="amount_total" position="after">
<field
name="amount_residual"
sum="Amount Residual"
widget="monetary"
decoration-bf="1"
optional="hide"
/>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_config_settings_view_form_purchase" model="ir.ui.view">
<field
name="name"
>res.config.settings.view.form.inherit.purchase - purchase_advance_payment</field>
<field name="model">res.config.settings</field>
<field
name="inherit_id"
ref="purchase.res_config_settings_view_form_purchase"
/>
<field name="arch" type="xml">
<xpath expr="//div[@name='invoicing_settings_container']" position="inside">
<div
class="col-12 col-lg-6 o_setting_box"
id="purchase_advance_payment_auto_post_advance_payments"
title="If enabled, advance payments created from POs are automatically posted."
>
<div class="o_setting_left_pane">
<field name="auto_post_purchase_advance_payments" />
</div>
<div class="o_setting_right_pane">
<label for="auto_post_purchase_advance_payments" />
<div class="text-muted">
If enabled, advance payments created from POs are automatically posted.
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1 @@
from . import purchase_advance_payment_wizard

View file

@ -0,0 +1,180 @@
# Copyright (C) 2021 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
from odoo import _, api, exceptions, fields, models
class AccountVoucherWizardPurchase(models.TransientModel):
_name = "account.voucher.wizard.purchase"
_description = "Account Voucher Wizard Purchase"
order_id = fields.Many2one("purchase.order", required=True)
journal_id = fields.Many2one(
"account.journal",
"Journal",
required=True,
domain=[("type", "in", ("bank", "cash"))],
)
journal_currency_id = fields.Many2one(
"res.currency",
"Journal Currency",
store=True,
readonly=False,
compute="_compute_get_journal_currency",
)
currency_id = fields.Many2one("res.currency", "Currency", readonly=True)
amount_total = fields.Monetary(readonly=True)
amount_advance = fields.Monetary(
"Amount advanced", required=True, currency_field="journal_currency_id"
)
date = fields.Date(required=True, default=fields.Date.context_today)
currency_amount = fields.Monetary(
"Curr. amount",
readonly=True,
currency_field="currency_id",
compute="_compute_currency_amount",
store=True,
)
payment_ref = fields.Char("Ref.")
payment_method_line_id = fields.Many2one(
comodel_name="account.payment.method.line",
string="Payment Method",
readonly=False,
store=True,
compute="_compute_payment_method_line_id",
domain="[('id', 'in', available_payment_method_line_ids)]",
)
available_payment_method_line_ids = fields.Many2many(
comodel_name="account.payment.method.line",
compute="_compute_available_payment_method_line_ids",
)
@api.depends("journal_id")
def _compute_get_journal_currency(self):
for wzd in self:
wzd.journal_currency_id = (
wzd.journal_id.currency_id.id or self.env.user.company_id.currency_id.id
)
@api.depends("journal_id")
def _compute_payment_method_line_id(self):
for wizard in self:
if wizard.journal_id:
available_payment_method_lines = (
wizard.journal_id._get_available_payment_method_lines("outbound")
)
else:
available_payment_method_lines = False
# Select the first available one by default.
if available_payment_method_lines:
wizard.payment_method_line_id = available_payment_method_lines[
0
]._origin
else:
wizard.payment_method_line_id = False
@api.depends("journal_id")
def _compute_available_payment_method_line_ids(self):
for wizard in self:
if wizard.journal_id:
wizard.available_payment_method_line_ids = (
wizard.journal_id._get_available_payment_method_lines("outbound")
)
else:
wizard.available_payment_method_line_ids = False
@api.constrains("amount_advance")
def check_amount(self):
if self.journal_currency_id.compare_amounts(self.amount_advance, 0.0) <= 0:
raise exceptions.ValidationError(_("Amount of advance must be positive."))
if self.env.context.get("active_id", False):
if (
self.currency_id.compare_amounts(
self.currency_amount, self.order_id.amount_residual
)
> 0
):
raise exceptions.ValidationError(
_("Amount of advance is greater than residual amount on purchase")
)
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
purchase_ids = self.env.context.get("active_ids", [])
if not purchase_ids:
return res
purchase_id = fields.first(purchase_ids)
purchase = self.env["purchase.order"].browse(purchase_id)
if "amount_total" in fields_list:
res.update(
{
"order_id": purchase.id,
"amount_total": purchase.amount_residual,
"currency_id": purchase.currency_id.id,
}
)
res["journal_id"] = (
self.env["account.journal"]
.search(
[
("type", "in", ("bank", "cash")),
("company_id", "=", purchase.company_id.id),
("outbound_payment_method_line_ids", "!=", False),
],
limit=1,
)
.id
)
return res
@api.depends("journal_id", "date", "amount_advance", "journal_currency_id")
def _compute_currency_amount(self):
if self.journal_currency_id != self.currency_id:
amount_advance = self.journal_currency_id._convert(
self.amount_advance,
self.currency_id,
self.order_id.company_id,
self.date or fields.Date.today(),
)
else:
amount_advance = self.amount_advance
self.currency_amount = amount_advance
def _prepare_payment_vals(self, purchase):
partner_id = purchase.partner_id.commercial_partner_id.id
return {
"purchase_id": purchase.id,
"date": self.date,
"amount": self.amount_advance,
"payment_type": "outbound",
"partner_type": "supplier",
"ref": self.payment_ref or purchase.name,
"journal_id": self.journal_id.id,
"currency_id": self.journal_currency_id.id,
"partner_id": partner_id,
"payment_method_line_id": self.payment_method_line_id.id,
}
def make_advance_payment(self):
"""Create customer paylines and validates the payment"""
self.ensure_one()
payment_obj = self.env["account.payment"]
purchase_obj = self.env["purchase.order"]
purchase_ids = self.env.context.get("active_ids", [])
if purchase_ids:
purchase_id = fields.first(purchase_ids)
purchase = purchase_obj.browse(purchase_id)
payment_vals = self._prepare_payment_vals(purchase)
payment = payment_obj.create(payment_vals)
if bool(
self.env["ir.config_parameter"]
.sudo()
.get_param("purchase_advance_payment.auto_post_advance_payments")
):
payment.action_post()
return {
"type": "ir.actions.act_window_close",
}

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_account_voucher_wizard" model="ir.ui.view">
<field name="name">Advance Payment</field>
<field name="model">account.voucher.wizard.purchase</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Advance Payment">
<group>
<group>
<field name="order_id" invisible="1" />
<field
name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
options="{'no_open': True, 'no_create': True}"
required="1"
/>
<field
name="payment_method_line_id"
required="1"
options="{'no_create': True, 'no_open': True}"
/>
<field name="available_payment_method_line_ids" invisible="1" />
<field name="amount_total" string="Order Due Amount" />
<field name="currency_id" invisible="1" />
</group>
<group>
<label for="amount_advance" />
<div name="amount_div" class="o_row">
<field name="amount_advance" />
<field
name="journal_currency_id"
string="Currency"
required="1"
options="{'no_create': True, 'no_open': True}"
groups="base.group_multi_currency"
/>
</div>
<field
name="currency_amount"
string="Amount in Order Currency"
/>
<field name="date" />
<field name="payment_ref" />
</group>
</group>
<footer>
<button
name="make_advance_payment"
string="Make advance payment"
type="object"
class="btn-primary"
/>
<button special="cancel" string="Cancel" class="btn-default" />
</footer>
</form>
</field>
</record>
<record id="action_view_account_voucher_wizard" model="ir.actions.act_window">
<field name="name">Advance Payment</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.voucher.wizard.purchase</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-purchase-workflow-purchase_advance_payment"
version = "16.0.0"
description = "Purchase Advance Payment - Allow to add advance payments on purchase orders"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-purchase>=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 = ["purchase_advance_payment"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]