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,47 @@
# Sales Invoice Plan
Odoo addon: sale_invoice_plan
## Installation
```bash
pip install odoo-bringout-oca-sale-workflow-sale_invoice_plan
```
## Dependencies
This addon depends on:
- account
- sale_management
## Manifest Information
- **Name**: Sales Invoice Plan
- **Version**: 16.0.1.0.0
- **Category**: Sales
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/sale-workflow](https://github.com/OCA/sale-workflow) branch 16.0, addon `sale_invoice_plan`.
## 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 Sale_invoice_plan Module - sale_invoice_plan
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 sale_invoice_plan. Configure related models, access rights, and options as needed.

View file

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

View file

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

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

View file

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

View file

@ -0,0 +1,13 @@
# Models
Detected core models and extensions in sale_invoice_plan.
```mermaid
classDiagram
class sale_invoice_plan
class sale_order
```
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: sale_invoice_plan. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon sale_invoice_plan
- 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 sale_invoice_plan.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../sale_invoice_plan/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](../sale_invoice_plan/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 sale_invoice_plan
```

View file

@ -0,0 +1,9 @@
# Wizards
Transient models exposed as UI wizards in sale_invoice_plan.
```mermaid
classDiagram
class SaleAdvancePaymentInv
class SaleCreateInvoicePlan
```

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-sale-workflow-sale_invoice_plan"
version = "16.0.0"
description = "Sales Invoice Plan - Add to sales order, ability to manage future invoice plan"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-account>=16.0.0",
"odoo-bringout-oca-sale-workflow-sale_management>=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 = ["sale_invoice_plan"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,131 @@
==================
Sales Invoice Plan
==================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e65d2ca5ee4ad4e5e68e2d61d67b087fa84c66d97eb1c690d2c08ce8b36f4b23
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |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%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/16.0/sale_invoice_plan
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_invoice_plan
: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/sale-workflow&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
By standard feature, user can gradually create partial invoices, one by one.
This module add ability to create invoices based on the predefined invoice plan,
either all at once, or one by one.
The plan support both advance invoice and installment invoices.
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents**
.. contents::
:local:
Installation
============
Just install this module, and the sales order will have new option "Use Invoice Plan"
Usage
=====
- Create new sales quotation as per normal process
- Select option "Use Invoice Plan", a new Invoice Plan tab will appear
- Click on "=> Create Invoice Plan" link to open invoice planning wizard
- Do plan for number of installment and/or advance, start date and interval
- Double check that each advance/installment has correct plan percentage
- After confirm sales order, now we have new option to "Create Invoice by Plan"
- User can create only next invoice, or create all the rest invoices at the same time
Changelog
=========
15.0.1.1.0 (2022-05-10)
~~~~~~~~~~~~~~~~~~~~~~~
* remove dependency on stock
12.0.1.0.0 (2019-03-08)
~~~~~~~~~~~~~~~~~~~~~~~
* Start of the history
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-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/sale-workflow/issues/new?body=module:%20sale_invoice_plan%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
~~~~~~~
* Ecosoft
Contributors
~~~~~~~~~~~~
* Kitti Upariphutthiphong. <kittiu@gmail.com> (http://ecosoft.co.th)
* `Trobz <https://trobz.com>`_:
* Son Ho <sonhd@trobz.com>
Other credits
~~~~~~~~~~~~~
The migration of this module from 13.0 to 14.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-kittiu| image:: https://github.com/kittiu.png?size=40px
:target: https://github.com/kittiu
:alt: kittiu
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-kittiu|
This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/16.0/sale_invoice_plan>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,4 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from . import models
from . import wizard

View file

@ -0,0 +1,23 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
{
"name": "Sales Invoice Plan",
"summary": "Add to sales order, ability to manage future invoice plan",
"version": "16.0.1.0.0",
"author": "Ecosoft,Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/sale-workflow",
"category": "Sales",
"depends": ["account", "sale_management"],
"data": [
"security/ir.model.access.csv",
"data/sale_data.xml",
"wizard/sale_create_invoice_plan_view.xml",
"wizard/sale_make_planned_invoice_view.xml",
"views/sale_view.xml",
],
"installable": True,
"development_status": "Alpha",
"maintainers": ["kittiu"],
}

View file

@ -0,0 +1,6 @@
<odoo noupdate="1">
<record id="decimal_price" model="decimal.precision" forcecreate="True">
<field name="name">Sales Invoice Plan Percent</field>
<field name="digits">6</field>
</record>
</odoo>

View file

@ -0,0 +1,451 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
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: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr "Advance"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr "Advance on 1st Faktura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr "Iznos"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
msgid "Amount Invoiced"
msgstr "Iznos Fakturad"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr "Analitički konto"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr "Are you sure to remove this invoice plan?"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr "At least one invoice plan line pending to create invoice"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr "Otkaži"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr "Create All Remaining Fakturas"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr "Create Faktura Plan"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr "Create Faktura by Plan"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr "Create Next Inovice"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr "Kupac"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr "Dan"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr "Avansno plaćanje"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr "Fillig invoice planning criteria"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr "Grupiši po"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr "ID"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr "If this line already invoiced"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr "If this line is ready to create new invoice"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr "Inovice Plan"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr "Installment"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr "Installment Datum"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr "Razdoblje"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr "Interval Type"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr "Faktura kreirana"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr "Faktura Nalog"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr "Faktura Plan"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr "Faktura Plan In Process"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr "Faktura Planning Detail"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr "Fakturiši prodajnu narudžbu"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr "Faktura plan total percentage must not exceed 100%"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr "Fakture"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr "Last Installment"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr "Last installment will create invoice use remaining amount"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr "Mjesec"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr "Next Faktura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr "No Edit"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr "No installment raises following error : %s"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr "No matched order line for invoice line"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr "Nije fakturisano"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr "Not Fakturad & Due"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr "Number Installment must greater than 1"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr "Number of Installment"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr "Procenat"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr "Plan Datum"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: %(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr "Please fill percentage for all invoice plan lines"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr "Predračuni"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr "Related Fakturas"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Avansna faktura prodaje"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
msgid "Sales Invoice Plan"
msgstr "Prodajas Faktura Plan"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr "Prodajni nalog"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Orders"
msgstr "Prodajni nalozi"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Search Sales Invoice Plan Lines"
msgstr "Search Prodajas Faktura Plan Lines"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr "Status"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
msgid "This amount will be used to calculate the percent"
msgstr "This amount biće used to calculate the percent"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr "This percent biće used to calculate new quantity"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr "This view show all available invoice plan line for reporting purposes"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr "This čarobnjak help you quickly create invoice plan."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr "Ukupan iznos"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr "Tip"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr "Use Faktura Plan"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr "Use Faktura Plan selected, but no plan created"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "View sales invoice plan lines"
msgstr "View sales invoice plan lines"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr "Čarobnjak when create invoice by plan"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr "Godina"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr "⇒ Create Faktura Plan"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr "⇒ Remove Faktura Plan"

View file

@ -0,0 +1,468 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-21 07:27+0000\n"
"PO-Revision-Date: 2023-07-25 11:09+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: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr "Avanzar"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr "Anticipo de la 1ª factura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr "Importe"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
msgid "Amount Invoiced"
msgstr "Importe Facturado"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr "Cuenta Analítica"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr "¿Estás seguro de eliminar este plan de facturas?"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr "Al menos una línea del plan de factura pendiente para crear la factura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr "Cancelar"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr "Crear todas las facturas restantes"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr "Crear plan de facturas"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr "Crear factura por plan"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr "Crear siguiente factura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr "Creado el"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr "Cliente"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr "Día"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr "Cumplimiento de criterios de planificación de facturas"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr "Agrupar por"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr "ID"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr "Si esta línea ya se facturó"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr "Si esta línea está lista para crear una nueva factura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr "Plan de factura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr "Entrega"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
"Plazo %s: ya utilizado y no se permite borrar.\n"
"Por favor, descarte los cambios."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr "Fecha de pago"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr "Intervalo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr "Tipo de intervalo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr "Factura creada"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr "Orden de factura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr "Plan de factura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr "Plan de factura en proceso"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr "Detalle de planificación de facturas"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr "Orden de venta de factura"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr "El porcentaje total del plan de facturación no debe superar el 100%"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr "Facturas"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
"Las facturas se crearán en borrador para esta entrega.\n"
" para que pueda revisarlos antes de la validación."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr "Último pago"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr "La última cuota creará el monto restante del uso de la factura"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr "Mes"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr "Próxima factura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr "Sin edición"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr "La ausencia de instalación provoca el siguiente error : %s"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr "No hay correspondencia entre la línea de pedido y la línea de factura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr "El número de cuotas debe ser mayor que 1"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr "Número de cuotas"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr "Porcentage"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr "Fecha del plan"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: "
"%(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
"Cantidad planificada: %(plan_qty)s, excede la cantidad facturable: "
"%(invoiceable_qty)s\n"
"El producto debe entregarse antes de la factura"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr "Complete el porcentaje para todas las líneas del plan de factura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr "Presupuestos"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr "Facturas relacionadas"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Factura de anticipo de ventas"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
msgid "Sales Invoice Plan"
msgstr "Plan de factura de venta"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr "Pedido de venta"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Orders"
msgstr "Pedido de ventas"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Search Sales Invoice Plan Lines"
msgstr "Buscar líneas de plan de factura de ventas"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr "Estado"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
msgid "This amount will be used to calculate the percent"
msgstr "Esta cantidad se utilizará para calcular el porcentaje"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr "Este porcentaje se utilizará para calcular la nueva cantidad"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr ""
"Esta vista muestra todas las líneas del plan de facturas disponibles para "
"fines de informes"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr "Este asistente le ayuda a crear rápidamente un plan de facturación."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr "Importe Total"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr "Tipo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr "Usar plan de facturas"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr "Usar plan de factura seleccionado, pero no creado ningún plan"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "View sales invoice plan lines"
msgstr "Ver líneas del plan de facturas de ventas"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr "Asistente al crear factura por plan"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr "Año"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr "⇒ Crear plan de facturas"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr "⇒ Eliminar plan de factura"
#~ msgid "The analytic account related to a sales order."
#~ msgstr "La cuenta analítica relacionada con una orden de venta."

View file

@ -0,0 +1,478 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-21 07:27+0000\n"
"PO-Revision-Date: 2020-02-26 12:13+0000\n"
"Last-Translator: Martronic SA <info@martronic.ch>\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 3.10\n"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr "Avance"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr "Avance sur la 1ère Facture"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
#, fuzzy
msgid "Amount Invoiced"
msgstr "Facture suivante"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr "Êtes-vous certain de vouloir supprimer ce plan de facturation?"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr ""
"Au moins une ligne du plan de facturation en attente pour créer la facture"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr "Annuler"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr "Créer toutes les factures restantes"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr "Créer le Plan de facturation"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr "Créer la facture par Plan"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr "Créer la prochaine facture"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr "Créé le"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr "Jour"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr "Compléter les critères de planification de la facturation"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr "Si cette ligne a déjà été facturée"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr "Si cette ligne est prête pour créer une nouvelle facture"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr "Plan de facturation"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr "Tranche"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr "Date de début"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr "Intervalle"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr "Type d'intervalle"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr "Facture créée"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr "Facturer la commande"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr "Plan de facturation"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr "Plan de facturation en cours"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr "Détail du plan de facturation"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr "Facturer les commandes"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr "Factures"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
"Les factures seront crées en brouillon pour cette tranche\n"
" pour que vous puissiez les contrôler avant la "
"validation."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr "Dernière tranche"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr ""
"La dernière tranche créera une facture en utilisant les montants résiduels"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr "Mois"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr "Facture suivante"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr "Le nombre de tranches doit être supérieur à 1"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr "Nombre de tranches"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr "Pourcent"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr "Date planifiée"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, fuzzy, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: "
"%(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
"La quantité planifiée: %(plan_qty)s, excède la quantité facturable: "
"%(invoiceable_qty)s\n"
"L'article devrait être livré avant d'être facturé"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr ""
"Veuillez renseigner le pourcentage pour toutes les lignes du plan de "
"facturation"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr "Factures liées"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Facture de paiement d'avance"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
#, fuzzy
msgid "Sales Invoice Plan"
msgstr "Utiliser un plan de facturation"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr "Commandes de vente"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
#, fuzzy
msgid "Sales Orders"
msgstr "Commandes de vente"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
#, fuzzy
msgid "Search Sales Invoice Plan Lines"
msgstr "Créer le Plan de facturation"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
#, fuzzy
msgid "This amount will be used to calculate the percent"
msgstr "Ce pourcentage sera utilisé pour calculer la nouvelle quantité"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr "Ce pourcentage sera utilisé pour calculer la nouvelle quantité"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr "Cet assistant vous aide à créer rapidement le plan de facturation."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr "Type"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr "Utiliser un plan de facturation"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr ""
"Utiliser un plan de facturation est sélectionné, mais aucun plan n'est créé"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
#, fuzzy
msgid "View sales invoice plan lines"
msgstr ""
"Veuillez renseigner le pourcentage pour toutes les lignes du plan de "
"facturation"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr "Assistant lors de la création d'une facture par plan"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr "Année"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr "⇒ Créer le plan de facturation"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr "⇒ Supprimer le plan de facturation"
#~ msgid "Sale Order"
#~ msgstr "Commande de vente"

View file

@ -0,0 +1,466 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-10 18:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr "Anticipo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr "Anticipo sulla prima fattura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr "Valore"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
msgid "Amount Invoiced"
msgstr "Importo fatturato"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr "Conto analitico"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr "Si è sicuri di rimuovere questo piano di fatturazione?"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr "Almeno una riga di fattura in attesa di creare la fattura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr "Annulla"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr "Creare tutte le fatture rimanenti"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr "Crea un piano di fatturazione"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr "Crea la fatturazione in base al piano"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr "Crea la prossima fattura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr "Creato il"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr "Cliente"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr "Giorno"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr "Acconto"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr "Riempire i criteri del piano di fatturazione"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr "Raggruppa per"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr "ID"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr "Se questa riga è già fatturata"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr "Se questa riga è pronta per creare una nuova fattura"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr "Piano di fatturazione"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr "Rata"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
"Rata %s: già utilizzata e non cancellabile.\n"
"Annullare le modifiche."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr "Giorno della rata"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr "Intervallo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr "Tipo intervallo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr "Fattura creata"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr "Ordine fattura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr "Piano di fatturazione"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr "Piano di fatturazione in corso"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr "Dettaglio piano di fatturazione"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr "Fattura ordine di vendita"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr "Il totale percentuale del piano fatturazione non può superare il 100%"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr "Fatture"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
"Le fatture saranno create in bozza per questa rata\n"
" in modo che si possano rivedere prima della "
"validazione."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr "Ultima rata"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr "L'ultima rata creerà la fattura usando l'ammontare residuo"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr "Mese"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr "Fattura successiva"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr "Non modifcare"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr "Nessuna rata genera il seguente errore: %s"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr "Nessuna riga ordine corrispondente per la riga fattura"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr "Non fatturato"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr "Non fatturato e scaduto"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr "Il numero di rate deve essere maggiore di 1"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr "Numero di rate"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr "Percentuale"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr "Pianifica data"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: %(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
"Pianifica quantità: %(plan_qty)s, quantità in esubero fatturabile: "
"%(invoiceable_qty)s\n"
"Il prodotto deve essere consegnato prima di essere fatturato"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr "Inserire la percentuale per tutte le righe del piano di fatturazione"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr "Preventivi"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr "Fatture correlate"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Fattura di vendita con pagamento anticipato"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
msgid "Sales Invoice Plan"
msgstr "Piano di fatturazione"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr "Ordine di vendita"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Orders"
msgstr "Ordini di vendita"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Search Sales Invoice Plan Lines"
msgstr "Ricerca righe piano di fatturazione vendite"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr "Stato"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
msgid "This amount will be used to calculate the percent"
msgstr "Questo valore verrà usato per calcolare la percentuale"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr "Questa percentuale sarà usata per calcolare una nuova quantità"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr ""
"Questa vista mostra tutte le righe disponibile per il piano di fatturazione "
"a sconto di reportistica"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr ""
"Questa procedura guidata aiuterà a creare velocemente un piano di "
"fatturazione."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr "Importo totale"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr "Tipo"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr "Utilizzare il piano di fatturazione"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr "Piano di fatturazione selezionato, ma nessun piano creato"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "View sales invoice plan lines"
msgstr "Visualizza le righe di piano di fatturazione vendite"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr "Procedura guidata per creare fatturazione in base al piano"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr "Anno"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr "⇒ Crea un piano di fatturazione"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr "⇒ Rimuovi il piano di fatturazione"

View file

@ -0,0 +1,473 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-21 07:27+0000\n"
"PO-Revision-Date: 2019-10-07 08:25+0000\n"
"Last-Translator: Cas Vissers <c.vissers@brahoo.nl>\n"
"Language-Team: none\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.8\n"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr "Vooruit"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr "Vooruitbetaling eerste factuur"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
#, fuzzy
msgid "Amount Invoiced"
msgstr "Volgende factuur"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr "Weet je zeker dat je deze facturatie planning wil verwijderen?"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr ""
"Ten minste één facturatie plannings regel in behandeling om factuur te maken"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr "Annuleer"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr "Maak alle resterende facturen"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr "Maak facturatie planning"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr "Maak factuur per plan"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr "Maak volgende factuur"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr "Aangemaakt door"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr "Aangemaakt op"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr "Dag"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr "Weergavenaam"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr "Indienen van facturatie planning criteria"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr "ID"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr "Of deze regel reeds gefactureerd is"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr "Of deze regels klaar is om een factuur te maken"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr "Facturatie planning"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr "Termijn"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr "Termijn datum"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr "Interval"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr "Interval type"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr "Factuur gemaakt"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr "Factureer order"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr "Facturatie planning"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr "Facturatie planning in behandeling"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr "Facturatie planning detail"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr "Factureer verkooporder"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr "Facturen"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
"Facturen worden in concept aangemaakt voor dit termijn\n"
" zodat deze kunnen worden gecontroleerd voor "
"validatie."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr "Laatste termijn"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr "Laatst bijgewerkt op"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr "Laatst bijgewerkt door"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr "Laatste bijgewerkt op"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr "Laatste termijn maakt factuur voor resterende hoeveelheid"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr "Maand"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr "Volgende factuur"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr "Aantal termijnen moet groter zijn dan 1"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr "Aantal termijnen"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr "Procent"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr "Plan datum"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, fuzzy, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: "
"%(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
"Plan hoeveel: %(plan_qty)s, is meer dan te factureren hoeveelheid: "
"%(invoiceable_qty)s\n"
"Product moet geleverd worden voor factuur"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr "Vul een percentage in voor alle facturatie planning regels"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr "Gerelateerde facturen"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Verkoop aanbetalingsfactuur"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
#, fuzzy
msgid "Sales Invoice Plan"
msgstr "Gebruik facturatie planning"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr "Verkooporder"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
#, fuzzy
msgid "Sales Orders"
msgstr "Verkooporder"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
#, fuzzy
msgid "Search Sales Invoice Plan Lines"
msgstr "Maak facturatie planning"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
#, fuzzy
msgid "This amount will be used to calculate the percent"
msgstr "Procent berekend de nieuwe hoeveelheid"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr "Procent berekend de nieuwe hoeveelheid"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr "Deze wizard helpt je om eenvoudig een facturatie planning te maken."
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr "Type"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr "Gebruik facturatie planning"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr ""
"Gebruik facturatie planning geselecteerd maar geen planning beschikbaar"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
#, fuzzy
msgid "View sales invoice plan lines"
msgstr "Vul een percentage in voor alle facturatie planning regels"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr "Wizard om factureren aan te maken per plan"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr "Jaar"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr "⇒ Maak facturatie planning"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr "⇒ Verwijder facturatie planning"
#~ msgid "Sale Order"
#~ msgstr "Verkooporder"

View file

@ -0,0 +1,451 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
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: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
msgid "Amount Invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: %(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
msgid "Sales Invoice Plan"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Orders"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Search Sales Invoice Plan Lines"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
msgid "This amount will be used to calculate the percent"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "View sales invoice plan lines"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr ""

View file

@ -0,0 +1,469 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_invoice_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-21 07:27+0000\n"
"PO-Revision-Date: 2019-09-01 10:10+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.8\n"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__advance
msgid "Advance"
msgstr "预付款"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__advance
msgid "Advance on 1st Invoice"
msgstr "第一张发票预付款"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__amount_invoiced
#, fuzzy
msgid "Amount Invoiced"
msgstr "下一张发票"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__analytic_account_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Analytic Account"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Are you sure to remove this invoice plan?"
msgstr "您确定要删除此发票计划吗?"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "At least one invoice plan line pending to create invoice"
msgstr "至少有一个待创建发票的发票计划行"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Cancel"
msgstr "取消"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create All Remaining Invoices"
msgstr "创建所有剩余发票"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_create_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "Create Invoice Plan"
msgstr "创建发票计划"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Create Invoice by Plan"
msgstr "按计划创建发票"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Create Next Inovice"
msgstr "创建下一个发票"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_uid
msgid "Created by"
msgstr "创建者"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__create_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__create_date
msgid "Created on"
msgstr "创建时间"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__partner_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Customer"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__day
msgid "Day"
msgstr "天"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__display_name
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__display_name
msgid "Display Name"
msgstr "显示名称"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "Down payment"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_create_invoice_plan
msgid "Fillig invoice planning criteria"
msgstr "填写发票计划标准"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Group By"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__id
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__id
msgid "ID"
msgstr "ID"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "If this line already invoiced"
msgstr "如果此行已开具发票"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "If this line is ready to create new invoice"
msgstr "如果此行已准备好创建新发票"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_ids
msgid "Inovice Plan"
msgstr "发票计划"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__installment
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_invoice_plan__invoice_type__installment
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Installment"
msgstr "分期付款"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid ""
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__installment_date
msgid "Installment Date"
msgstr "分期付款日期"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval
msgid "Interval"
msgstr "间隔"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__interval_type
msgid "Interval Type"
msgstr "间隔类型"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoiced
msgid "Invoice Created"
msgstr "发票已创建"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_view_sale_make_planned_invoice
msgid "Invoice Order"
msgstr "发票订单"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "Invoice Plan"
msgstr "发票计划"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_process
msgid "Invoice Plan In Process"
msgstr "发票计划正在处理中"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_invoice_plan
msgid "Invoice Planning Detail"
msgstr "发票计划明细"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid "Invoice Sales Order"
msgstr "发票销售订单"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Invoice plan total percentage must not exceed 100%"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_move_ids
msgid "Invoices"
msgstr "发票"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_make_planned_invoice
msgid ""
"Invoices will be created in draft for this installment\n"
" so that you can review them before validation."
msgstr ""
"将为此分期付款创建草稿发票\n"
" 这样您就可以在验证之前查看它们。"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last Installment"
msgstr "最后一期"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan____last_update
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice____last_update
msgid "Last Modified on"
msgstr "最后修改时间"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_uid
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_uid
msgid "Last Updated by"
msgstr "最后更新者"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__write_date
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_make_planned_invoice__write_date
msgid "Last Updated on"
msgstr "最后更新时间"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__last
msgid "Last installment will create invoice use remaining amount"
msgstr "最后一期创建发票将使用剩余金额"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__month
msgid "Month"
msgstr "月"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__to_invoice
msgid "Next Invoice"
msgstr "下一张发票"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__no_edit
msgid "No Edit"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/tests/test_sale_invoice_plan.py:0
#, python-format
msgid "No installment raises following error : %s"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, python-format
msgid "No matched order line for invoice line"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Not Invoiced & Due"
msgstr ""
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/wizard/sale_create_invoice_plan.py:0
#, python-format
msgid "Number Installment must greater than 1"
msgstr "分期付款必须大于1"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_create_invoice_plan__num_installment
msgid "Number of Installment"
msgstr "分期付款"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__percent
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_percent
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_tree_readonly
msgid "Percent"
msgstr "百分比"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__plan_date
msgid "Plan Date"
msgstr "计划日期"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale_invoice_plan.py:0
#, fuzzy, python-format
msgid ""
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: "
"%(invoiceable_qty)s\n"
"Product should be delivered before invoice"
msgstr ""
"计划数量:%(plan_qty)s超过可发票数量%(invoiceable_qty)s\n"
"产品应在发票前交付"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Please fill percentage for all invoice plan lines"
msgstr "请填写所有发票计划行的百分比"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Quotations"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_form
msgid "Related Invoices"
msgstr "相关发票"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "销售预付款发票"
#. module: sale_invoice_plan
#: model:ir.actions.act_window,name:sale_invoice_plan.action_sale_invoice_plan
#: model:ir.ui.menu,name:sale_invoice_plan.menu_sale_invoice_plan
#, fuzzy
msgid "Sales Invoice Plan"
msgstr "使用发票计划"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_order
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__sale_id
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Sales Order"
msgstr "销售订单"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
#, fuzzy
msgid "Sales Orders"
msgstr "销售订单"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
#, fuzzy
msgid "Search Sales Invoice Plan Lines"
msgstr "创建发票计划"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__state
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_invoice_plan_filter
msgid "Status"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__amount
#, fuzzy
msgid "This amount will be used to calculate the percent"
msgstr "该百分比将用于计算新数量"
#. module: sale_invoice_plan
#: model:ir.model.fields,help:sale_invoice_plan.field_sale_invoice_plan__percent
msgid "This percent will be used to calculate new quantity"
msgstr "该百分比将用于计算新数量"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
msgid "This view show all available invoice plan line for reporting purposes"
msgstr ""
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_sale_create_invoice_plan
msgid "This wizard help you quickly create invoice plan."
msgstr "该向导可帮助您快速创建发票计划。"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__invoice_plan_total_amount
msgid "Total Amount"
msgstr ""
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_invoice_plan__invoice_type
msgid "Type"
msgstr "类型"
#. module: sale_invoice_plan
#: model:ir.model.fields,field_description:sale_invoice_plan.field_sale_order__use_invoice_plan
msgid "Use Invoice Plan"
msgstr "使用发票计划"
#. module: sale_invoice_plan
#. odoo-python
#: code:addons/sale_invoice_plan/models/sale.py:0
#, python-format
msgid "Use Invoice Plan selected, but no plan created"
msgstr "选中“使用发票计划”,但未创建任何计划"
#. module: sale_invoice_plan
#: model_terms:ir.actions.act_window,help:sale_invoice_plan.action_sale_invoice_plan
#, fuzzy
msgid "View sales invoice plan lines"
msgstr "请填写所有发票计划行的百分比"
#. module: sale_invoice_plan
#: model:ir.model,name:sale_invoice_plan.model_sale_make_planned_invoice
msgid "Wizard when create invoice by plan"
msgstr "按计划创建发票时的向导"
#. module: sale_invoice_plan
#: model:ir.model.fields.selection,name:sale_invoice_plan.selection__sale_create_invoice_plan__interval_type__year
msgid "Year"
msgstr "年"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Create Invoice Plan"
msgstr "⇒ 创建发票计划"
#. module: sale_invoice_plan
#: model_terms:ir.ui.view,arch_db:sale_invoice_plan.view_order_form_invoice_plan
msgid "⇒ Remove Invoice Plan"
msgstr "⇒ 删除发票计划"
#~ msgid "Sale Order"
#~ msgstr "销售订单"

View file

@ -0,0 +1,4 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from . import sale
from . import sale_invoice_plan

View file

@ -0,0 +1,145 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from dateutil.relativedelta import relativedelta
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.tools.float_utils import float_round
class SaleOrder(models.Model):
_inherit = "sale.order"
invoice_plan_ids = fields.One2many(
comodel_name="sale.invoice.plan",
inverse_name="sale_id",
string="Inovice Plan",
copy=False,
)
use_invoice_plan = fields.Boolean(
default=False,
copy=False,
)
invoice_plan_process = fields.Boolean(
string="Invoice Plan In Process",
compute="_compute_invoice_plan_process",
help="At least one invoice plan line pending to create invoice",
)
invoice_plan_total_percent = fields.Float(
compute="_compute_invoice_plan_total",
string="Percent",
)
invoice_plan_total_amount = fields.Monetary(
compute="_compute_invoice_plan_total",
string="Total Amount",
)
@api.depends("invoice_plan_ids")
def _compute_invoice_plan_total(self):
for rec in self:
installments = rec.invoice_plan_ids.filtered("installment")
rec.invoice_plan_total_percent = sum(installments.mapped("percent"))
rec.invoice_plan_total_amount = sum(installments.mapped("amount"))
def _compute_invoice_plan_process(self):
for rec in self:
has_invoice_plan = rec.use_invoice_plan and rec.invoice_plan_ids
to_invoice = rec.invoice_plan_ids.filtered(lambda l: not l.invoiced)
inv_or_adv = rec.invoice_status == "to invoice" or (
rec.invoice_status == "no"
and "advance" in to_invoice.mapped("invoice_type")
)
rec.invoice_plan_process = (
rec.state == "sale" and has_invoice_plan and to_invoice and inv_or_adv
)
@api.constrains("invoice_plan_ids")
def _check_invoice_plan_total_percent(self):
for rec in self:
installments = rec.invoice_plan_ids.filtered("installment")
invoice_plan_total_percent = sum(installments.mapped("percent"))
if float_round(invoice_plan_total_percent, 0) > 100:
raise UserError(_("Invoice plan total percentage must not exceed 100%"))
@api.constrains("state")
def _check_invoice_plan(self):
for rec in self:
if rec.state != "draft":
if rec.invoice_plan_ids.filtered(lambda l: not l.percent):
raise ValidationError(
_("Please fill percentage for all invoice plan lines")
)
def action_confirm(self):
if self.filtered(lambda r: r.use_invoice_plan and not r.invoice_plan_ids):
raise UserError(_("Use Invoice Plan selected, but no plan created"))
return super().action_confirm()
def create_invoice_plan(
self, num_installment, installment_date, interval, interval_type, advance
):
self.ensure_one()
self.invoice_plan_ids.unlink()
invoice_plans = []
Decimal = self.env["decimal.precision"]
prec = Decimal.precision_get("Sales Invoice Plan Percent")
percent = float_round(1.0 / num_installment * 100, prec)
percent_last = 100 - (percent * (num_installment - 1))
# Advance
if advance:
vals = {
"installment": 0,
"plan_date": installment_date,
"invoice_type": "advance",
"percent": 0.0,
}
invoice_plans.append((0, 0, vals))
installment_date = self._next_date(
installment_date, interval, interval_type
)
# Normal
for i in range(num_installment):
this_installment = i + 1
if num_installment == this_installment:
percent = percent_last
vals = {
"installment": this_installment,
"plan_date": installment_date,
"invoice_type": "installment",
"percent": percent,
}
invoice_plans.append((0, 0, vals))
installment_date = self._next_date(
installment_date, interval, interval_type
)
self.write({"invoice_plan_ids": invoice_plans})
return True
def remove_invoice_plan(self):
self.ensure_one()
self.invoice_plan_ids.unlink()
return True
@api.model
def _next_date(self, installment_date, interval, interval_type):
installment_date = fields.Date.from_string(installment_date)
if interval_type == "month":
next_date = installment_date + relativedelta(months=+interval)
elif interval_type == "year":
next_date = installment_date + relativedelta(years=+interval)
else:
next_date = installment_date + relativedelta(days=+interval)
next_date = fields.Date.to_string(next_date)
return next_date
def _create_invoices(self, grouped=False, final=False, date=None):
moves = super()._create_invoices(grouped=grouped, final=final, date=date)
invoice_plan_id = self._context.get("invoice_plan_id")
if invoice_plan_id:
plan = self.env["sale.invoice.plan"].browse(invoice_plan_id)
for move in moves:
plan._compute_new_invoice_quantity(move)
move.invoice_date = plan.plan_date
move._compute_date()
plan.invoice_move_ids += moves
return moves

View file

@ -0,0 +1,227 @@
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.tools.float_utils import float_compare, float_round
class SaleInvoicePlan(models.Model):
_name = "sale.invoice.plan"
_description = "Invoice Planning Detail"
_order = "installment"
sale_id = fields.Many2one(
comodel_name="sale.order",
string="Sales Order",
index=True,
readonly=True,
ondelete="cascade",
)
analytic_account_id = fields.Many2one(related="sale_id.analytic_account_id")
partner_id = fields.Many2one(
comodel_name="res.partner",
string="Customer",
related="sale_id.partner_id",
store=True,
index=True,
)
state = fields.Selection(
string="Status",
related="sale_id.state",
store=True,
index=True,
)
installment = fields.Integer()
plan_date = fields.Date(required=True)
invoice_type = fields.Selection(
[("advance", "Advance"), ("installment", "Installment")],
string="Type",
required=True,
default="installment",
)
last = fields.Boolean(
string="Last Installment",
compute="_compute_last",
help="Last installment will create invoice use remaining amount",
)
percent = fields.Float(
digits="Sales Invoice Plan Percent",
help="This percent will be used to calculate new quantity",
)
amount = fields.Float(
digits="Product Price",
compute="_compute_amount",
inverse="_inverse_amount",
help="This amount will be used to calculate the percent",
)
invoice_move_ids = fields.Many2many(
"account.move",
relation="sale_invoice_plan_invoice_rel",
column1="plan_id",
column2="move_id",
string="Invoices",
readonly=True,
)
amount_invoiced = fields.Float(compute="_compute_invoiced", store=True)
to_invoice = fields.Boolean(
string="Next Invoice",
compute="_compute_to_invoice",
help="If this line is ready to create new invoice",
)
invoiced = fields.Boolean(
string="Invoice Created",
compute="_compute_invoiced",
store=True,
help="If this line already invoiced",
)
no_edit = fields.Boolean(
compute="_compute_no_edit",
)
_sql_constraint = [
(
"unique_instalment",
"UNIQUE (sale_id, installment)",
"Installment must be unique on invoice plan",
)
]
def _no_edit(self):
self.ensure_one()
return self.invoiced
def _compute_no_edit(self):
for rec in self:
rec.no_edit = rec._no_edit()
@api.depends("percent")
def _compute_amount(self):
for rec in self:
amount_untaxed = rec.sale_id._origin.amount_untaxed
# With invoice already created, no recompute
if rec.invoiced:
rec.amount = rec.amount_invoiced
rec.percent = rec.amount / amount_untaxed * 100
continue
# For last line, amount is the left over
if rec.last:
installments = rec.sale_id.invoice_plan_ids.filtered(
lambda l: l.invoice_type == "installment"
)
prev_amount = sum((installments - rec).mapped("amount"))
rec.amount = amount_untaxed - prev_amount
continue
rec.amount = rec.percent * amount_untaxed / 100
@api.onchange("amount", "percent")
def _inverse_amount(self):
for rec in self:
if rec.sale_id.amount_untaxed != 0:
if rec.last:
installments = rec.sale_id.invoice_plan_ids.filtered(
lambda l: l.invoice_type == "installment"
)
prev_percent = sum((installments - rec).mapped("percent"))
rec.percent = 100 - prev_percent
continue
rec.percent = rec.amount / rec.sale_id.amount_untaxed * 100
continue
rec.percent = 0
def _compute_to_invoice(self):
"""If any invoice is in draft/open/paid do not allow to create inv.
Only if previous to_invoice is False, it is eligible to_invoice.
"""
for rec in self:
rec.to_invoice = False
for rec in self.sorted("installment"):
if rec.state != "sale": # Not confirmed, no to_invoice
continue
if not rec.invoiced:
rec.to_invoice = True
break
def _get_amount_invoice(self, invoices):
"""Hook function"""
amount_invoiced = sum(invoices.mapped("amount_untaxed"))
deposit_product_id = (
self.env["ir.config_parameter"]
.sudo()
.get_param("sale.default_deposit_product_id")
)
if deposit_product_id:
lines = invoices.mapped("invoice_line_ids").filtered(
lambda l: l.product_id.id != int(deposit_product_id)
)
amount_invoiced = sum(lines.mapped("price_subtotal"))
return amount_invoiced
@api.depends("invoice_move_ids.state")
def _compute_invoiced(self):
for rec in self:
invoiced = rec.invoice_move_ids.filtered(
lambda l: l.state in ("draft", "posted")
)
rec.invoiced = True if invoiced else False
rec.amount_invoiced = (
sum(invoiced.mapped("amount_untaxed"))
if rec.invoice_type == "advance"
else rec._get_amount_invoice(invoiced[:1])
)
def _compute_last(self):
for rec in self:
last = max(rec.sale_id.invoice_plan_ids.mapped("installment"))
rec.last = rec.installment == last
def _compute_new_invoice_quantity(self, invoice_move):
self.ensure_one()
if self.last: # For last install, let the system do the calc.
return
percent = self.percent
move = invoice_move.with_context(check_move_validity=False)
for line in move.invoice_line_ids:
self._update_new_quantity(line, percent)
move.line_ids.filtered(
lambda x: x.display_type
not in ("product", "line_section", "line_note", "payment_term", "tax")
).unlink()
def _update_new_quantity(self, line, percent):
"""Hook function"""
if not len(line.sale_line_ids) >= 0:
raise UserError(_("No matched order line for invoice line"))
order_line = fields.first(line.sale_line_ids)
if order_line.is_downpayment: # based on 1 unit
line.write({"quantity": -percent / 100})
else:
plan_qty = self._get_plan_qty(order_line, percent)
prec = order_line.product_uom.rounding
if plan_qty:
plan_qty = float_round(plan_qty, precision_rounding=prec)
if float_compare(abs(plan_qty), abs(line.quantity), prec) == 1:
raise ValidationError(
_(
"Plan quantity: %(plan_qty)s, exceed invoiceable quantity: "
"%(invoiceable_qty)s"
"\nProduct should be delivered before invoice"
)
% {"plan_qty": plan_qty, "invoiceable_qty": line.quantity}
)
line.write({"quantity": plan_qty})
@api.model
def _get_plan_qty(self, order_line, percent):
plan_qty = order_line.product_uom_qty * (percent / 100)
return plan_qty
def unlink(self):
lines = self.filtered("no_edit")
if lines:
installments = [str(x) for x in lines.mapped("installment")]
raise UserError(
_(
"Installment %s: already used and not allowed to delete.\n"
"Please discard changes."
)
% ", ".join(installments)
)
return super().unlink()

View file

@ -0,0 +1,4 @@
* Kitti Upariphutthiphong. <kittiu@gmail.com> (http://ecosoft.co.th)
* `Trobz <https://trobz.com>`_:
* Son Ho <sonhd@trobz.com>

View file

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

View file

@ -0,0 +1,4 @@
By standard feature, user can gradually create partial invoices, one by one.
This module add ability to create invoices based on the predefined invoice plan,
either all at once, or one by one.
The plan support both advance invoice and installment invoices.

View file

@ -0,0 +1,11 @@
15.0.1.1.0 (2022-05-10)
~~~~~~~~~~~~~~~~~~~~~~~
* remove dependency on stock
12.0.1.0.0 (2019-03-08)
~~~~~~~~~~~~~~~~~~~~~~~
* Start of the history

View file

@ -0,0 +1 @@
Just install this module, and the sales order will have new option "Use Invoice Plan"

View file

@ -0,0 +1,7 @@
- Create new sales quotation as per normal process
- Select option "Use Invoice Plan", a new Invoice Plan tab will appear
- Click on "=> Create Invoice Plan" link to open invoice planning wizard
- Do plan for number of installment and/or advance, start date and interval
- Double check that each advance/installment has correct plan percentage
- After confirm sales order, now we have new option to "Create Invoice by Plan"
- User can create only next invoice, or create all the rest invoices at the same time

View file

@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sale_invoice_plan,access_sale_invoice_plan,model_sale_invoice_plan,,1,1,1,1
access_sale_create_invoice_plan,access_sale_create_invoice_plan,model_sale_create_invoice_plan,,1,1,1,1
access_sale_make_planned_invoice,access_sale_make_planned_invoice,model_sale_make_planned_invoice,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_sale_invoice_plan access_sale_invoice_plan model_sale_invoice_plan 1 1 1 1
3 access_sale_create_invoice_plan access_sale_create_invoice_plan model_sale_create_invoice_plan 1 1 1 1
4 access_sale_make_planned_invoice access_sale_make_planned_invoice model_sale_make_planned_invoice 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,485 @@
<!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>Sales Invoice Plan</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="sales-invoice-plan">
<h1 class="title">Sales Invoice Plan</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e65d2ca5ee4ad4e5e68e2d61d67b087fa84c66d97eb1c690d2c08ce8b36f4b23
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.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/sale-workflow/tree/16.0/sale_invoice_plan"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_invoice_plan"><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/sale-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>By standard feature, user can gradually create partial invoices, one by one.
This module add ability to create invoices based on the predefined invoice plan,
either all at once, or one by one.
The plan support both advance invoice and installment invoices.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#changelog" id="toc-entry-3">Changelog</a><ul>
<li><a class="reference internal" href="#section-1" id="toc-entry-4">15.0.1.1.0 (2022-05-10)</a></li>
<li><a class="reference internal" href="#section-2" id="toc-entry-5">12.0.1.0.0 (2019-03-08)</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-6">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-7">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-8">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-9">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-10">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-11">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
<p>Just install this module, and the sales order will have new option “Use Invoice Plan”</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<ul class="simple">
<li>Create new sales quotation as per normal process</li>
<li>Select option “Use Invoice Plan”, a new Invoice Plan tab will appear</li>
<li>Click on “=&gt; Create Invoice Plan” link to open invoice planning wizard</li>
<li>Do plan for number of installment and/or advance, start date and interval</li>
<li>Double check that each advance/installment has correct plan percentage</li>
<li>After confirm sales order, now we have new option to “Create Invoice by Plan”</li>
<li>User can create only next invoice, or create all the rest invoices at the same time</li>
</ul>
</div>
<div class="section" id="changelog">
<h1><a class="toc-backref" href="#toc-entry-3">Changelog</a></h1>
<div class="section" id="section-1">
<h2><a class="toc-backref" href="#toc-entry-4">15.0.1.1.0 (2022-05-10)</a></h2>
<ul class="simple">
<li>remove dependency on stock</li>
</ul>
</div>
<div class="section" id="section-2">
<h2><a class="toc-backref" href="#toc-entry-5">12.0.1.0.0 (2019-03-08)</a></h2>
<ul class="simple">
<li>Start of the history</li>
</ul>
</div>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-6">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-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/sale-workflow/issues/new?body=module:%20sale_invoice_plan%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-7">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-8">Authors</a></h2>
<ul class="simple">
<li>Ecosoft</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-9">Contributors</a></h2>
<ul>
<li><p class="first">Kitti Upariphutthiphong. &lt;<a class="reference external" href="mailto:kittiu&#64;gmail.com">kittiu&#64;gmail.com</a>&gt; (<a class="reference external" href="http://ecosoft.co.th">http://ecosoft.co.th</a>)</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-10">Other credits</a></h2>
<p>The migration of this module from 13.0 to 14.0 was financially supported by Camptocamp</p>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-11">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/kittiu"><img alt="kittiu" src="https://github.com/kittiu.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-workflow/tree/16.0/sale_invoice_plan">OCA/sale-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,3 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from . import test_sale_invoice_plan

View file

@ -0,0 +1,330 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import logging
from odoo import _, fields
from odoo.exceptions import UserError, ValidationError
from odoo.tests import Form, tagged
from odoo.addons.sale.tests import common
_logger = logging.getLogger(__name__)
@tagged("post_install", "-at_install")
class TestSaleInvoicePlan(common.TestSaleCommon):
@classmethod
def setUpClass(cls):
super(TestSaleInvoicePlan, cls).setUpClass()
context_no_mail = {
"no_reset_password": True,
"mail_create_nosubscribe": True,
"mail_create_nolog": True,
}
# Create base account to simulate a chart of account for payable account
user_type_payable = cls.company_data["default_account_payable"]
cls.account_payable = cls.env["account.account"].create(
{
"code": "NC1110",
"name": "Test Payable Account",
"account_type": user_type_payable.account_type,
"reconcile": True,
}
)
# Create base account to simulate a chart of account for receivable account
cls.account_receivable = cls.env["account.account"].create(
{
"code": "NC1111",
"name": "Test Receivable Account",
"account_type": "asset_receivable",
"reconcile": True,
}
)
Partner = cls.env["res.partner"].with_context(**context_no_mail)
cls.partner_customer_usd = Partner.create(
{
"name": "Customer from the North",
"email": "customer.usd@north.com",
"property_account_payable_id": cls.account_payable.id,
"property_account_receivable_id": cls.account_receivable.id,
}
)
cls.sale_journal0 = cls.env["account.journal"].create(
{
"name": "Sale Journal",
"type": "sale",
"code": "SJT0",
}
)
cls.setUpClassicProducts()
sale_obj = cls.env["sale.order"]
# Create an SO for Service
cls.so_service = sale_obj.with_user(
cls.company_data["default_user_salesman"]
).create(
{
"partner_id": cls.partner_customer_usd.id,
"partner_invoice_id": cls.partner_customer_usd.id,
"partner_shipping_id": cls.partner_customer_usd.id,
"use_invoice_plan": True,
"order_line": [
(
0,
0,
{
"name": cls.product_order.name,
"product_id": cls.product_order.id,
"product_uom_qty": 1,
"product_uom": cls.product_order.uom_id.id,
"price_unit": cls.product_order.list_price,
},
)
],
"pricelist_id": cls.env.ref("product.list0").id,
}
)
@classmethod
def setUpClassicProducts(cls):
# Create an expense journal
cls.account_income_product = cls.env["account.account"].create(
{
"code": "4.0.0.0.0",
"name": "Income - Test Account",
"account_type": "income",
}
)
# Create category
cls.product_category = cls.env["product.category"].create(
{
"name": "Product Category with Income account",
"property_account_income_categ_id": cls.account_income_product.id,
}
)
# Products
uom_unit = cls.env.ref("uom.product_uom_unit")
cls.product_order = cls.env["product.product"].create(
{
"name": "Zed+ Antivirus",
"standard_price": 235.0,
"list_price": 280.0,
"type": "consu",
"uom_id": uom_unit.id,
"uom_po_id": uom_unit.id,
"invoice_policy": "order",
"expense_policy": "no",
"default_code": "PROD_ORDER",
"service_type": "manual",
"taxes_id": False,
"categ_id": cls.product_category.id,
}
)
# Advance Product
deposit_account = cls.env["account.account"].search(
[("internal_group", "=", "income"), ("deprecated", "=", False)], limit=1
)
cls.product_advance = cls.env["product.product"].create(
{
"name": _("Down payment"),
"type": "service",
"invoice_policy": "order",
"property_account_income_id": deposit_account.id,
"taxes_id": False,
}
)
cls.env["ir.config_parameter"].sudo().set_param(
"sale.default_deposit_product_id", cls.product_advance.id
)
def test_00_invoice_plan(self):
# To create next invoice from SO
ctx = {
"active_id": self.so_service.id,
"active_ids": [self.so_service.id],
"all_remain_invoices": False,
}
f = Form(self.env["sale.create.invoice.plan"])
try: # UserError if no installment
plan = f.save()
except ValidationError as e:
_logger.info(_("No installment raises following error : %s"), e.args[0])
# Create Invoice Plan 3 installment
num_installment = 5
f.num_installment = num_installment
# Test 3 types of interval
for interval_type in ["month", "year", "day"]:
f.interval_type = interval_type
plan = f.save()
# SO confirmed without invoice plan being created
if not self.so_service.invoice_plan_ids:
with self.assertRaises(UserError):
self.so_service.action_confirm()
# Create Invocie Plan Installment
plan.with_context(**ctx).sale_create_invoice_plan()
self.assertEqual(
len(self.so_service.invoice_plan_ids),
num_installment,
"Wrong number of installment created",
)
# Change plan, so that the 1st installment is 1000 and 5th is 3000
self.assertEqual(len(self.so_service.invoice_plan_ids), 5)
self.so_service.invoice_plan_ids[0].amount = 280.0
self.so_service.invoice_plan_ids[4].amount = 840.0
# Confirm the SO
self.so_service.action_confirm()
# Create one invoice
make_wizard = self.env["sale.make.planned.invoice"].create({})
make_wizard.with_context(**ctx).create_invoices_by_plan()
self.assertEqual(
self.so_service.amount_total,
sum(self.so_service.invoice_ids.mapped("amount_total")),
)
invoices = self.so_service.invoice_ids
self.assertEqual(len(invoices), 1, "Only 1 invoice should be created")
def test_01_invoice_plan(self):
# To create all remaining invoice from SO
ctx = {
"active_id": self.so_service.id,
"active_ids": [self.so_service.id],
"advance_payment_method": "delivered",
"all_remain_invoices": True,
}
f = Form(self.env["sale.create.invoice.plan"])
# Create Invoice Plan 3 installment
num_installment = 3
# Test 3 types of interval
for interval_type in ["month", "year", "day"]:
f.interval_type = interval_type
f.num_installment = num_installment
plan = f.save()
plan.with_context(**ctx).sale_create_invoice_plan()
# Confirm the SO
self.so_service.action_confirm()
# Create all invoices
make_wizard = self.env["sale.make.planned.invoice"].create({})
make_wizard.with_context(**ctx).create_invoices_by_plan()
# Valid number of invoices
invoices = self.so_service.invoice_ids
self.assertEqual(
len(invoices), num_installment, "Wrong number of invoice created"
)
# Valid total quantity of invoices
quantity = sum(invoices.mapped("invoice_line_ids").mapped("quantity"))
self.assertEqual(quantity, 1, "Wrong number of total invoice quantity")
def test_02_invoice_plan_with_advance(self):
# To create all remaining invoice from SO
ctx = {
"active_id": self.so_service.id,
"active_ids": [self.so_service.id],
"all_remain_invoices": True,
}
# Create Invoice Plan 3 installment with Advance
num_installment = 3
f = Form(self.env["sale.create.invoice.plan"])
f.num_installment = num_installment
f.advance = True # Advance
plan = f.save()
plan.with_context(**ctx).sale_create_invoice_plan()
self.assertEqual(
len(self.so_service.invoice_plan_ids),
num_installment + 1,
"Wrong number of installment created",
)
# If advance percent is not filled, show error
with self.assertRaises(ValidationError):
self.so_service.action_confirm()
advance_line = self.so_service.invoice_plan_ids.filtered(
lambda l: l.invoice_type == "advance"
)
self.assertEqual(len(advance_line), 1, "No one advance line")
# Add 10% to advance
advance_line.percent = 10
# Can confirm the SO after advance is filled
self.so_service.action_confirm()
# Create all invoice plan
wizard = self.env["sale.make.planned.invoice"].create({})
wizard.with_context(**ctx).create_invoices_by_plan()
# Valid number of invoices, including advance
invoices = self.so_service.invoice_ids
self.assertEqual(
len(invoices), num_installment + 1, "Wrong number of invoice created"
)
# Valid total quantity of invoices (exclude Advance line)
quantity = sum(
invoices.mapped("invoice_line_ids")
.filtered(lambda l: l.product_id == self.product_order)
.mapped("quantity")
)
self.assertEqual(quantity, 1, "Wrong number of total invoice quantity")
def test_03_unlink_invoice_plan(self):
ctx = {"active_id": self.so_service.id, "active_ids": [self.so_service.id]}
f = Form(self.env["sale.create.invoice.plan"])
# Create Invoice Plan 3 installment
num_installment = 3
f.num_installment = num_installment
plan = f.save()
plan.with_context(**ctx).sale_create_invoice_plan()
# Remove it
self.so_service.remove_invoice_plan()
self.assertFalse(self.so_service.invoice_plan_ids)
def test_invoice_plan_so_edit(self):
"""Case when some installment already invoiced,
but then, the SO line added. Test to ensure that
the invoiced amount of the done installment is fixed"""
ctx = {
"active_id": self.so_service.id,
"active_ids": [self.so_service.id],
"all_remain_invoices": False,
}
first_order_line = fields.first(self.so_service.order_line)
first_order_line.product_uom_qty = 10
f = Form(self.env["sale.create.invoice.plan"])
# Create Invoice Plan 5 installment
num_installment = 5
f.num_installment = num_installment
plan = f.save()
plan.with_context(**ctx).sale_create_invoice_plan()
# Change plan, so that the 1st installment is 280 and 5th is 840
self.assertEqual(len(self.so_service.invoice_plan_ids), 5)
first_install = self.so_service.invoice_plan_ids[0]
first_install.amount = 280.0
self.so_service.invoice_plan_ids[4].amount = 840.0
self.so_service.action_confirm()
self.assertEqual(self.so_service.state, "sale")
sale_create = self.env["sale.make.planned.invoice"].create({})
# Create only the 1st invoice, amount should be 280, and percent is 10
sale_create.with_context(**ctx).create_invoices_by_plan()
self.assertEqual(first_install.amount, 280.0)
self.assertEqual(first_install.percent, 10)
# Add new SO line with amount = 280, check that only percent is changed
self.so_service.write(
{
"order_line": [
(
0,
0,
{
"name": "SO-Product-NEW",
"product_id": self.product_order.id,
"product_uom_qty": 1,
"product_uom": self.product_order.uom_id.id,
"price_unit": 280.0,
},
)
],
}
)
# Overall amount changed to 3080, install amount not changed, only percent changed.
self.assertEqual(self.so_service.amount_total, 3080.0)
self.so_service.invoice_plan_ids._compute_amount()
self.assertEqual(first_install.amount, 280.0)
self.assertEqual(first_install.percent, 9.090909)

View file

@ -0,0 +1,256 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="view_sale_invoice_plan_tree">
<field name="name">view.sale.invoice.plan.tree</field>
<field name="model">sale.invoice.plan</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="no_edit" invisible="1" />
<field name="analytic_account_id" />
<field
name="installment"
attrs="{'readonly': [('no_edit', '=', True)]}"
/>
<field
name="plan_date"
attrs="{'readonly': [('no_edit', '=', True)]}"
/>
<field
name="invoice_type"
attrs="{'readonly': [('no_edit', '=', True)]}"
/>
<field
name="percent"
optional="show"
attrs="{'readonly': [('no_edit', '=', True)]}"
/>
<field
name="amount"
optional="show"
attrs="{'readonly': [('no_edit', '=', True)]}"
/>
<field name="amount_invoiced" optional="hide" sum="Amount" />
<field name="to_invoice" />
<field name="invoiced" />
<field
name="invoice_move_ids"
optional="hide"
widget="many2many_tags"
/>
<field name="last" invisible="1" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_sale_invoice_plan_form">
<field name="name">view.sale.invoice.plan.form</field>
<field name="model">sale.invoice.plan</field>
<field name="arch" type="xml">
<form>
<group>
<group>
<field name="installment" />
<field name="plan_date" />
<field name="to_invoice" />
</group>
<group>
<field name="invoice_type" />
<field name="percent" />
<field name="amount" />
<field name="invoiced" />
<field name="invoice_move_ids" widget="many2many_tags" />
</group>
</group>
<separator
string="Related Invoices"
attrs="{'invisible': [('invoice_move_ids', '=', [])]}"
/>
<field name="invoice_move_ids" widget="many2many_tags" />
</form>
</field>
</record>
<record id="view_order_form_invoice_plan" model="ir.ui.view">
<field name="name">view.order.form.invoice.plan</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath expr='/form/sheet/notebook' position="before">
<div attrs="{'readonly': [('invoice_count', '>', 0)]}">
<field name="use_invoice_plan" />
<label for="use_invoice_plan" />
</div>
</xpath>
<xpath expr="//button[@name='payment_action_capture']" position="before">
<field name="invoice_plan_process" invisible="1" />
<button
name="%(action_view_sale_make_planned_invoice)d"
string="Create Invoice by Plan"
type="action"
class="btn-primary"
attrs="{'invisible': [('invoice_plan_process', '=', False)]}"
/>
</xpath>
<xpath
expr="//button[@name='%(sale.action_view_sale_advance_payment_inv)d'][1]"
position="attributes"
>
<attribute
name="attrs"
>{'invisible': ['|', ('invoice_plan_process', '=', True), ('invoice_status', '!=', 'to invoice')]}</attribute>
</xpath>
<xpath
expr="//button[@name='%(sale.action_view_sale_advance_payment_inv)d'][2]"
position="attributes"
>
<attribute
name="attrs"
>{'invisible': ['|', ('invoice_plan_process', '=', True), '|', ('invoice_status', '!=', 'no'), ('state', '!=', 'sale')]}</attribute>
</xpath>
<xpath expr="/form/sheet/notebook/page" position="after">
<page
string="Invoice Plan"
attrs="{'invisible': [('use_invoice_plan', '=', False)]}"
>
<button
name="%(action_sale_create_invoice_plan)d"
string="⇒ Create Invoice Plan"
type="action"
class="oe_link"
attrs="{'invisible': ['|', ('invoice_plan_ids', '!=', []), ('invoice_count', '>', 0)]}"
/>
<button
name="remove_invoice_plan"
string="⇒ Remove Invoice Plan"
type="object"
class="oe_link"
attrs="{'invisible': ['|', ('invoice_plan_ids', '=', []), ('invoice_count', '>', 0)]}"
confirm="Are you sure to remove this invoice plan?"
/>
<field
name="invoice_plan_ids"
context="{'tree_view_ref': 'sale_invoice_plan.view_sale_invoice_plan_tree'}"
attrs="{'invisible': [('invoice_plan_ids', '=', [])]}"
/>
<group class="oe_subtotal_footer oe_right">
<field name="invoice_plan_total_percent" />
<field name="invoice_plan_total_amount" />
</group>
</page>
</xpath>
</field>
</record>
<!-- Invoice Plan Lines -->
<record id="view_sale_invoice_plan_filter" model="ir.ui.view">
<field name="name">view.sale.invoice.plan.filter</field>
<field name="model">sale.invoice.plan</field>
<field name="arch" type="xml">
<search string="Search Sales Invoice Plan Lines">
<field name="partner_id" />
<field name="sale_id" />
<field name="analytic_account_id" />
<field name="installment" />
<separator />
<filter
string="Quotations"
name="draft"
domain="[('state', 'in', ('draft', 'sent'))]"
/>
<filter
string="Sales Orders"
name="sales"
domain="[('state', 'in', ('sale','done'))]"
/>
<filter
string="Not Invoiced"
name="not_invoiced"
domain="[('state', 'in', ('sale','done')), ('invoiced', '=', False)]"
/>
<filter
string="Not Invoiced &amp; Due"
name="over_plan_date"
domain="[
('state', 'in', ('sale','done')),
('invoiced', '=', False),
('plan_date', '&lt;=', context_today().strftime('%Y-%m-%d'))
]"
/>
<group expand="0" string="Group By">
<filter
string="Customer"
name="groupby_customer"
domain="[]"
context="{'group_by':'partner_id'}"
/>
<filter
string="Sales Order"
name="groupby_sale"
domain="[]"
context="{'group_by':'sale_id'}"
/>
<filter
string="Analytic Account"
name="groupby_analytic_account_id"
domain="[]"
context="{'group_by':'analytic_account_id'}"
/>
<filter
string="Installment"
name="groupby_install"
domain="[]"
context="{'group_by':'installment'}"
/>
<filter
string="Status"
name="groupby_state"
domain="[]"
context="{'group_by':'state'}"
/>
</group>
</search>
</field>
</record>
<record id="view_sale_invoice_plan_tree_readonly" model="ir.ui.view">
<field name="name">view.sale.invoice.plan.tree</field>
<field name="model">sale.invoice.plan</field>
<field name="arch" type="xml">
<tree edit="0" create="0" delete="0">
<field name="sale_id" />
<field name="analytic_account_id" />
<field name="installment" />
<field name="plan_date" />
<field name="invoice_type" />
<field name="percent" optional="show" sum="Percent" />
<field name="amount" optional="show" sum="Amount" />
<field name="amount_invoiced" optional="show" sum="Amount" />
<field name="to_invoice" />
<field name="invoiced" />
<field name="invoice_move_ids" widget="many2many_tags" />
</tree>
</field>
</record>
<record id="action_sale_invoice_plan" model="ir.actions.act_window">
<field name="name">Sales Invoice Plan</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sale.invoice.plan</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_sale_invoice_plan_tree_readonly" />
<field name="search_view_id" ref="view_sale_invoice_plan_filter" />
<field
name="context"
>{'search_default_sales': 1, 'search_default_groupby_sale': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
View sales invoice plan lines
</p>
<p>
This view show all available invoice plan line for reporting purposes
</p>
</field>
</record>
<menuitem
action="action_sale_invoice_plan"
id="menu_sale_invoice_plan"
parent="sale.sale_order_menu"
groups="sales_team.group_sale_salesman"
sequence="25"
/>
</odoo>

View file

@ -0,0 +1,5 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from . import sale_create_invoice_plan
from . import sale_make_planned_invoice
from . import sale_make_invoice_advance

View file

@ -0,0 +1,50 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class SaleCreateInvoicePlan(models.TransientModel):
_name = "sale.create.invoice.plan"
_description = "Fillig invoice planning criteria"
advance = fields.Boolean(
string="Advance on 1st Invoice",
default=False,
)
num_installment = fields.Integer(
string="Number of Installment",
default=0,
required=True,
)
installment_date = fields.Date(
default=fields.Date.context_today,
required=True,
)
interval = fields.Integer(
default=1,
required=True,
)
interval_type = fields.Selection(
[("day", "Day"), ("month", "Month"), ("year", "Year")],
default="month",
required=True,
)
@api.constrains("num_installment")
def _check_num_installment(self):
for rec in self:
if rec.num_installment <= 1:
raise ValidationError(_("Number Installment must greater than 1"))
def sale_create_invoice_plan(self):
sale = self.env["sale.order"].browse(self._context.get("active_id"))
self.ensure_one()
sale.create_invoice_plan(
self.num_installment,
self.installment_date,
self.interval,
self.interval_type,
self.advance,
)
return {"type": "ir.actions.act_window_close"}

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_sale_create_invoice_plan" model="ir.ui.view">
<field name="name">Create Invoice Plan</field>
<field name="model">sale.create.invoice.plan</field>
<field name="arch" type="xml">
<form string="Create Invoice Plan">
<p class="oe_grey">
This wizard help you quickly create invoice plan.
</p>
<group>
<group>
<field name="num_installment" />
<field name="installment_date" />
</group>
<group>
<field name="advance" />
<label for="interval" />
<div>
<field name="interval" class="oe_inline" />
<field name="interval_type" class="oe_inline" />
</div>
</group>
</group>
<footer>
<button
name="sale_create_invoice_plan"
string="Create Invoice Plan"
type="object"
class="btn-primary"
/>
<button string="Cancel" class="btn-default" special="cancel" />
</footer>
</form>
</field>
</record>
<record id="action_sale_create_invoice_plan" model="ir.actions.act_window">
<field name="name">Create Invoice Plan</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sale.create.invoice.plan</field>
<field name="binding_view_types">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<!-- <field name="binding_model_id" ref="sale.model_sale_order" /> -->
</record>
</odoo>

View file

@ -0,0 +1,15 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from odoo import models
class SaleAdvancePaymentInv(models.TransientModel):
_inherit = "sale.advance.payment.inv"
def _create_invoices(self, sale_orders):
invoice = super()._create_invoices(sale_orders)
invoice_plan_id = self._context.get("invoice_plan_id")
if invoice_plan_id:
plan = self.env["sale.invoice.plan"].browse(invoice_plan_id)
plan.invoice_move_ids += invoice
return invoice

View file

@ -0,0 +1,26 @@
# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from odoo import models
class SaleAdvancePaymentInv(models.TransientModel):
_name = "sale.make.planned.invoice"
_description = "Wizard when create invoice by plan"
def create_invoices_by_plan(self):
sale = self.env["sale.order"].browse(self._context.get("active_id"))
sale.ensure_one()
MakeInvoice = self.env["sale.advance.payment.inv"]
invoice_plans = (
self._context.get("all_remain_invoices")
and sale.invoice_plan_ids.filtered(lambda l: not l.invoiced)
or sale.invoice_plan_ids.filtered("to_invoice")
)
for plan in invoice_plans.sorted("installment"):
makeinv_wizard = {"advance_payment_method": "delivered"}
if plan.invoice_type == "advance":
makeinv_wizard["advance_payment_method"] = "percentage"
makeinv_wizard["amount"] = plan.percent
makeinvoice = MakeInvoice.create(makeinv_wizard)
makeinvoice.sudo().with_context(invoice_plan_id=plan.id).create_invoices()
return {"type": "ir.actions.act_window_close"}

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_sale_make_planned_invoice" model="ir.ui.view">
<field name="name">Invoice Orders</field>
<field name="model">sale.make.planned.invoice</field>
<field name="arch" type="xml">
<form string="Invoice Sales Order">
<p class="oe_grey">
Invoices will be created in draft for this installment
so that you can review them before validation.
</p>
<footer>
<button
name="create_invoices_by_plan"
string="Create Next Inovice"
type="object"
class="btn-primary"
/>
<button
name="create_invoices_by_plan"
string="Create All Remaining Invoices"
type="object"
context="{'all_remain_invoices': True}"
class="btn-primary"
/>
<button string="Cancel" class="btn-default" special="cancel" />
</footer>
</form>
</field>
</record>
<record id="action_view_sale_make_planned_invoice" model="ir.actions.act_window">
<field name="name">Invoice Order</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sale.make.planned.invoice</field>
<field name="binding_view_types">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="groups_id" eval="[(4,ref('sales_team.group_sale_salesman'))]" />
</record>
</odoo>