mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
Changes suggested by @elicoidal and @pedrobaeza. Translate.
This commit is contained in:
@@ -2,11 +2,12 @@
|
|||||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
:alt: License: AGPL-3
|
:alt: License: AGPL-3
|
||||||
|
|
||||||
========
|
=================================
|
||||||
Contract
|
Contracts for recurrent invoicing
|
||||||
========
|
=================================
|
||||||
|
|
||||||
* This module recover contracts management with recurring invoicing functions.
|
* This module forward-port to v9 the contracts management with recurring
|
||||||
|
invoicing functions.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
@@ -15,21 +16,18 @@ To use this module, you need to:
|
|||||||
|
|
||||||
#. Go to Sales -> Contracts and select or create a new contract.
|
#. Go to Sales -> Contracts and select or create a new contract.
|
||||||
#. Check *Generate recurring invoices automatically*.
|
#. Check *Generate recurring invoices automatically*.
|
||||||
#. Fill fields and add new lines.
|
#. Fill fields and add new lines. You have the possibility to use markers in
|
||||||
|
in description field to show init date and end of invoiced period.
|
||||||
#. To view discount field set *Discount on lines* in user access rights.
|
#. To view discount field set *Discount on lines* in user access rights.
|
||||||
#. A cron is created with daily interval, but if you are in debug mode can
|
#. A cron is created with daily interval, but if you are in debug mode can
|
||||||
click on *Create invoices* to force this action.
|
click on *Create invoices* to force this action.
|
||||||
|
#. Click *Show invoices* link to show all invoices created by the contract.
|
||||||
|
#. Press *Invoices* button to show all invoices related with the contract.
|
||||||
|
|
||||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||||
:alt: Try me on Runbot
|
:alt: Try me on Runbot
|
||||||
:target: https://runbot.odoo-community.org/runbot/110/9.0
|
:target: https://runbot.odoo-community.org/runbot/110/9.0
|
||||||
|
|
||||||
For further information, please visit:
|
|
||||||
|
|
||||||
* https://www.odoo.com/forum/help-1
|
|
||||||
|
|
||||||
Known issues / Roadmap
|
Known issues / Roadmap
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
# © 2004-2010 OpenERP SA (<http://openerp.com>)
|
||||||
# © 2016 Incaser Informatica S.L. - Carlos Dauden
|
# © 2016 Incaser Informatica S.L. - Carlos Dauden
|
||||||
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
||||||
|
|
||||||
@@ -7,7 +8,9 @@
|
|||||||
'version': '9.0.1.0.0',
|
'version': '9.0.1.0.0',
|
||||||
'category': 'Other',
|
'category': 'Other',
|
||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
'author': "OpenERP SA,Odoo Community Association (OCA)",
|
'author': "OpenERP SA,"
|
||||||
|
"Incaser Informatica S.L.,"
|
||||||
|
"Odoo Community Association (OCA)",
|
||||||
'website': 'http://openerp.com',
|
'website': 'http://openerp.com',
|
||||||
'depends': ['base', 'account', 'analytic'],
|
'depends': ['base', 'account', 'analytic'],
|
||||||
'data': [
|
'data': [
|
||||||
|
|||||||
@@ -1,129 +0,0 @@
|
|||||||
# Translation of OpenERP Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_analytic_analysis_recurring
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2014-02-21 11:41+0000\n"
|
|
||||||
"PO-Revision-Date: 2014-02-21 11:41+0000\n"
|
|
||||||
"Last-Translator: <>\n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: \n"
|
|
||||||
"Plural-Forms: \n"
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,price_subtotal:0
|
|
||||||
msgid "Sub Total"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.account,recurring_rule_type:0
|
|
||||||
msgid "Recurrency"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,price_unit:0
|
|
||||||
msgid "Unit Price"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: view:account.analytic.account:0
|
|
||||||
msgid ". create invoices"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: view:account.analytic.account:0
|
|
||||||
msgid "Account Analytic Lines"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.account,recurring_invoice_line_ids:0
|
|
||||||
msgid "Invoice Lines"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,uom_id:0
|
|
||||||
msgid "Unit of Measure"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
|
||||||
msgid "Day(s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: help:account.analytic.account,recurring_rule_type:0
|
|
||||||
msgid "Invoice automatically repeat at specified interval"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,product_id:0
|
|
||||||
msgid "Product"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,name:0
|
|
||||||
msgid "Description"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.account,recurring_interval:0
|
|
||||||
msgid "Repeat Every"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: view:account.analytic.account:0
|
|
||||||
msgid "Recurring Invoices"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.account,recurring_invoices:0
|
|
||||||
msgid "Generate recurring invoices automatically"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
|
||||||
msgid "Year(s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
|
||||||
msgid "Week(s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,quantity:0
|
|
||||||
msgid "Quantity"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_invoice_line
|
|
||||||
msgid "account.analytic.invoice.line"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.account,recurring_next_date:0
|
|
||||||
msgid "Date of Next Invoice"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: field:account.analytic.invoice.line,analytic_account_id:0
|
|
||||||
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_account
|
|
||||||
msgid "Analytic Account"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
|
||||||
msgid "Month(s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
|
||||||
#: help:account.analytic.account,recurring_interval:0
|
|
||||||
msgid "Repeat every (Days/Week/Month/Year)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,156 +1,302 @@
|
|||||||
# Translation of OpenERP Server.
|
# Translation of OpenERP Server.
|
||||||
# This file contains the translation of the following modules:
|
# This file contains the translation of the following modules:
|
||||||
# * account_analytic_analysis_recurring
|
# * account_analytic_analysis_recurring
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
"Project-Id-Version: Odoo 9.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-08-18 23:13+0000\n"
|
"POT-Creation-Date: 2016-03-25 23:49+0000\n"
|
||||||
"PO-Revision-Date: 2014-08-19 01:14+0100\n"
|
"PO-Revision-Date: 2016-03-26 00:49+0100\n"
|
||||||
"Last-Translator: Joaquin Gutierrez <joaquing.pedrosa@gmail.com>\n"
|
"Last-Translator: Carlos Incaser <carlos@incaser.es>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
"Language: es_ES\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: \n"
|
"X-Generator: Poedit 1.5.4\n"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: view:account.analytic.account:0
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
msgid ". create invoices"
|
msgid "<strong>#END#</strong>: End date of the invoiced period"
|
||||||
msgstr ". crear facturas"
|
msgstr "<strong>#END#</strong>: Fecha fin del periodo facturado"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: view:account.analytic.account:0
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
msgid "<strong>#START#</strong>: Start date of the invoiced period"
|
||||||
|
msgstr "<strong>#START#</strong>: Fecha inicio del periodo facturado"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
msgid "Account Analytic Lines"
|
msgid "Account Analytic Lines"
|
||||||
msgstr "Ver líneas contables analíticas"
|
msgstr "Ver líneas contables analíticas"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: code:_description:0
|
#: model:ir.model,name:contract.model_account_analytic_account
|
||||||
#: field:account.analytic.invoice.line,analytic_account_id:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_analytic_account_id
|
||||||
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_account
|
|
||||||
#, python-format
|
|
||||||
msgid "Analytic Account"
|
msgid "Analytic Account"
|
||||||
msgstr "Cuenta analítica"
|
msgstr "Cuenta analítica"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.account,recurring_next_date:0
|
#: model:ir.actions.act_window,help:contract.action_account_analytic_overdue_all
|
||||||
|
msgid "Click to create a new contract."
|
||||||
|
msgstr "Pinche para crear un contrato nuevo. "
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_invoice_contract_id
|
||||||
|
msgid "Contract"
|
||||||
|
msgstr "Contrato"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.actions.act_window,name:contract.action_account_analytic_overdue_all
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_invoice_analytic_account_ids
|
||||||
|
#: model:ir.ui.menu,name:contract.menu_action_account_analytic_overdue_all
|
||||||
|
msgid "Contracts"
|
||||||
|
msgstr "Contratos"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
msgid "Create invoices"
|
||||||
|
msgstr "Crear facturas"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_uid
|
||||||
|
msgid "Created by"
|
||||||
|
msgstr "Creado por"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_date
|
||||||
|
msgid "Created on"
|
||||||
|
msgstr "Creado en"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_next_date
|
||||||
msgid "Date of Next Invoice"
|
msgid "Date of Next Invoice"
|
||||||
msgstr "Próximo fecha de factura"
|
msgstr "Próximo fecha de factura"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_date_start
|
||||||
|
msgid "Date start"
|
||||||
|
msgstr "Fecha inicio"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
#: selection:account.analytic.account,recurring_rule_type:0
|
||||||
msgid "Day(s)"
|
msgid "Day(s)"
|
||||||
msgstr "Día(s)"
|
msgstr "Día(s)"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.invoice.line,name:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Descripción"
|
msgstr "Descripción"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:165
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
|
||||||
#, python-format
|
msgid "Discount (%)"
|
||||||
msgid "Error!"
|
msgstr "Descuento (%)"
|
||||||
msgstr "¡Error!"
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.account,recurring_invoices:0
|
#: code:addons/contract/models/contract.py:56
|
||||||
|
#, python-format
|
||||||
|
msgid "Discount should be less or equal to 100"
|
||||||
|
msgstr "El descuento debería ser menor o igual a 100"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,help:contract.field_account_analytic_invoice_line_discount
|
||||||
|
msgid ""
|
||||||
|
"Discount that is applied in generated invoices. It should be less or equal "
|
||||||
|
"to 100"
|
||||||
|
msgstr ""
|
||||||
|
"Descuento que es aplicado en las facturas generadas. Debería ser menor o "
|
||||||
|
"igual a 100"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr "Nombre mostrado"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
|
||||||
msgid "Generate recurring invoices automatically"
|
msgid "Generate recurring invoices automatically"
|
||||||
msgstr "Generar facturas recurrentes automáticamente."
|
msgstr "Generar facturas recurrentes automáticamente."
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.account,recurring_invoice_line_ids:0
|
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
|
||||||
|
msgid "Group By..."
|
||||||
|
msgstr "Agrupar por..."
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr "ID (identificación)"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model,name:contract.model_account_invoice
|
||||||
|
msgid "Invoice"
|
||||||
|
msgstr "Factura"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids
|
||||||
msgid "Invoice Lines"
|
msgid "Invoice Lines"
|
||||||
msgstr "Líneas de factura"
|
msgstr "Líneas de factura"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: help:account.analytic.account,recurring_rule_type:0
|
#: model:ir.actions.act_window,name:contract.act_analytic_invoices
|
||||||
msgid "Invoice automatically repeat at specified interval"
|
#: model:ir.actions.act_window,name:contract.act_recurring_invoices
|
||||||
msgstr "Repetir factura automáticamente en ese intervalo"
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
msgid "Invoices"
|
||||||
|
msgstr "Facturas"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
msgid "Invoices related with this contract"
|
||||||
|
msgstr "Facturas relacionadas con este contrato"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_journal_id
|
||||||
|
msgid "Journal"
|
||||||
|
msgstr "Diario"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr "Última modificación en"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid
|
||||||
|
msgid "Last Updated by"
|
||||||
|
msgstr "Última actualización de"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_date
|
||||||
|
msgid "Last Updated on"
|
||||||
|
msgstr "Última actualización en"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
msgid "Legend (for the markers inside invoice lines description)"
|
||||||
|
msgstr ""
|
||||||
|
"Leyenda (para los marcadores dentro de descripción en lineas de factura)"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
#: selection:account.analytic.account,recurring_rule_type:0
|
||||||
msgid "Month(s)"
|
msgid "Month(s)"
|
||||||
msgstr "Mes(es)"
|
msgstr "Mes(es)"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:153
|
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
|
||||||
#, python-format
|
msgid "Next Invoice"
|
||||||
msgid "No Customer Defined!"
|
msgstr "Próxima factura"
|
||||||
msgstr "¡No se ha definido un cliente!"
|
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:166
|
#: code:addons/contract/models/contract.py:194
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please define a sale journal for the company \"%s\"."
|
msgid "Please define a sale journal for the company '%s'."
|
||||||
msgstr "Defina por favor un diario de ventas para esta compañía \"%s\"."
|
msgstr "Por favor define un diario de ventas para la compañía '%s'."
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.invoice.line,product_id:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_pricelist_id
|
||||||
|
msgid "Pricelist"
|
||||||
|
msgstr "Lista de precios"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_product_id
|
||||||
msgid "Product"
|
msgid "Product"
|
||||||
msgstr "Producto"
|
msgstr "Producto"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.invoice.line,quantity:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_quantity
|
||||||
msgid "Quantity"
|
msgid "Quantity"
|
||||||
msgstr "Cantidad"
|
msgstr "Cantidad"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.account,recurring_rule_type:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_rule_type
|
||||||
msgid "Recurrency"
|
msgid "Recurrency"
|
||||||
msgstr "Recurrencia"
|
msgstr "Recurrencia"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: view:account.analytic.account:0
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
|
||||||
msgid "Recurring Invoices"
|
msgid "Recurring Invoices"
|
||||||
msgstr "Facturas recurrentes"
|
msgstr "Facturas recurrentes"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.account,recurring_interval:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_interval
|
||||||
msgid "Repeat Every"
|
msgid "Repeat Every"
|
||||||
msgstr "Repetir cada"
|
msgstr "Repetir cada"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: help:account.analytic.account,recurring_interval:0
|
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_interval
|
||||||
msgid "Repeat every (Days/Week/Month/Year)"
|
msgid "Repeat every (Days/Week/Month/Year)"
|
||||||
msgstr "Repetir cada (días/semana/mes/año)"
|
msgstr "Repetir cada (días/semana/mes/año)"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.invoice.line,price_subtotal:0
|
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_rule_type
|
||||||
|
msgid "Specify Interval for automatic invoice generation."
|
||||||
|
msgstr "Especifica el intervalo para la generación de facturas automática."
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_subtotal
|
||||||
msgid "Sub Total"
|
msgid "Sub Total"
|
||||||
msgstr "Subtotal"
|
msgstr "Subtotal"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.invoice.line,price_unit:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_unit
|
||||||
msgid "Unit Price"
|
msgid "Unit Price"
|
||||||
msgstr "Precio unidad"
|
msgstr "Precio unidad"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: field:account.analytic.invoice.line,uom_id:0
|
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_uom_id
|
||||||
msgid "Unit of Measure"
|
msgid "Unit of Measure"
|
||||||
msgstr "Unidad de medida"
|
msgstr "Unidad de medida"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
#: selection:account.analytic.account,recurring_rule_type:0
|
||||||
msgid "Week(s)"
|
msgid "Week(s)"
|
||||||
msgstr "Semana(s)"
|
msgstr "Semana(s)"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: selection:account.analytic.account,recurring_rule_type:0
|
#: selection:account.analytic.account,recurring_rule_type:0
|
||||||
msgid "Year(s)"
|
msgid "Year(s)"
|
||||||
msgstr "Año(s)"
|
msgstr "Año(s)"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:154
|
#: code:addons/contract/models/contract.py:186
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "You must first select a Customer for Contract %s!"
|
msgid "You must first select a Customer for Contract %s!"
|
||||||
msgstr "¡Seleccione un cliente para este contrato %s!"
|
msgstr "¡Seleccione un cliente para este contrato %s!"
|
||||||
|
|
||||||
#. module: account_analytic_analysis_recurring
|
#. module: contract
|
||||||
#: code:_description:0
|
#: model:ir.model,name:contract.model_account_analytic_invoice_line
|
||||||
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_invoice_line
|
|
||||||
#, python-format
|
|
||||||
msgid "account.analytic.invoice.line"
|
msgid "account.analytic.invoice.line"
|
||||||
msgstr "account.analytic.invoice.line"
|
msgstr "account.analytic.invoice.line"
|
||||||
|
|
||||||
|
#. module: contract
|
||||||
|
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
|
||||||
|
msgid "⇒ Show invoices"
|
||||||
|
msgstr "⇒ Mostrar facturas"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Recurring Invoice"
|
||||||
|
#~ msgstr "Recurring Invoice"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Use contracts to follow tasks, issues, timesheets or invoicing based on\n"
|
||||||
|
#~ " work done, expenses and/or sales orders. Odoo will "
|
||||||
|
#~ "automatically manage\n"
|
||||||
|
#~ " the alerts for the renewal of the contracts to the "
|
||||||
|
#~ "right salesperson."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Use contratos para seguir tareas, incidencias, hojas de trabajo o "
|
||||||
|
#~ "facturación basada\n"
|
||||||
|
#~ " en trabajo realizado, gastos y/o pedidos de venta. "
|
||||||
|
#~ "Odoo gestrionará automáticamente\n"
|
||||||
|
#~ " las alertas para la renovación de los contratos "
|
||||||
|
|
||||||
|
#~ msgid "Error!"
|
||||||
|
#~ msgstr "¡Error!"
|
||||||
|
|
||||||
|
#~ msgid "Invoice automatically repeat at specified interval"
|
||||||
|
#~ msgstr "Repetir factura automáticamente en ese intervalo"
|
||||||
|
|
||||||
|
#~ msgid "No Customer Defined!"
|
||||||
|
#~ msgstr "¡No se ha definido un cliente!"
|
||||||
|
|||||||
@@ -33,9 +33,8 @@ class AccountAnalyticInvoiceLine(models.Model):
|
|||||||
discount = fields.Float(
|
discount = fields.Float(
|
||||||
string='Discount (%)',
|
string='Discount (%)',
|
||||||
digits=dp.get_precision('Discount'),
|
digits=dp.get_precision('Discount'),
|
||||||
copy=True,
|
|
||||||
help='Discount that is applied in generated invoices.'
|
help='Discount that is applied in generated invoices.'
|
||||||
' It should be less or equal to 100')
|
' It should be less or equal to 100')
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
@api.depends('quantity', 'price_unit', 'discount')
|
@api.depends('quantity', 'price_unit', 'discount')
|
||||||
@@ -118,13 +117,14 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
],
|
],
|
||||||
default='monthly',
|
default='monthly',
|
||||||
string='Recurrency',
|
string='Recurrency',
|
||||||
help="Invoice automatically repeat at specified interval")
|
help="Specify Interval for automatic invoice generation.")
|
||||||
recurring_interval = fields.Integer(
|
recurring_interval = fields.Integer(
|
||||||
default=1,
|
default=1,
|
||||||
string='Repeat Every',
|
string='Repeat Every',
|
||||||
help="Repeat every (Days/Week/Month/Year)")
|
help="Repeat every (Days/Week/Month/Year)")
|
||||||
recurring_next_date = fields.Date(
|
recurring_next_date = fields.Date(
|
||||||
default=fields.Date.context_today,
|
default=fields.Date.context_today,
|
||||||
|
copy=False,
|
||||||
string='Date of Next Invoice')
|
string='Date of Next Invoice')
|
||||||
journal_id = fields.Many2one(
|
journal_id = fields.Many2one(
|
||||||
'account.journal',
|
'account.journal',
|
||||||
@@ -132,15 +132,6 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
default=_default_journal,
|
default=_default_journal,
|
||||||
domain="[('type', '=', 'sale'),('company_id', '=', company_id)]")
|
domain="[('type', '=', 'sale'),('company_id', '=', company_id)]")
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def copy(self, default=None):
|
|
||||||
default = dict(default or {})
|
|
||||||
# Reset next invoice date
|
|
||||||
default.update(
|
|
||||||
recurring_next_date=self._defaults['recurring_next_date'](self)
|
|
||||||
)
|
|
||||||
return super(AccountAnalyticAccount, self).copy(default=default)
|
|
||||||
|
|
||||||
@api.onchange('partner_id')
|
@api.onchange('partner_id')
|
||||||
def _onchange_partner_id(self):
|
def _onchange_partner_id(self):
|
||||||
self.pricelist_id = self.partner_id.property_product_pricelist.id
|
self.pricelist_id = self.partner_id.property_product_pricelist.id
|
||||||
@@ -159,13 +150,17 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _prepare_invoice_line(self, line, invoice_id):
|
def _prepare_invoice_line(self, line, invoice_id):
|
||||||
product = line.product_id
|
invoice_line = self.env['account.invoice.line'].new({
|
||||||
account_id = (product.property_account_income_id.id or
|
'invoice_id': invoice_id,
|
||||||
product.categ_id.property_account_income_categ_id.id)
|
'product_id': line.product_id.id,
|
||||||
contract = line.analytic_account_id
|
'quantity': line.quantity,
|
||||||
fpos = contract.partner_id.property_account_position_id
|
'uom_id': line.uom_id.id,
|
||||||
account_id = fpos.map_account(account_id)
|
'discount': line.discount,
|
||||||
taxes = fpos.map_tax(product.taxes_id)
|
})
|
||||||
|
# Get other invoice line values from product onchange
|
||||||
|
invoice_line._onchange_product_id()
|
||||||
|
invoice_line_vals = invoice_line._convert_to_write(invoice_line._cache)
|
||||||
|
|
||||||
name = line.name
|
name = line.name
|
||||||
if 'old_date' in self.env.context and 'next_date' in self.env.context:
|
if 'old_date' in self.env.context and 'next_date' in self.env.context:
|
||||||
lang_obj = self.env['res.lang']
|
lang_obj = self.env['res.lang']
|
||||||
@@ -176,18 +171,13 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
name = self._insert_markers(
|
name = self._insert_markers(
|
||||||
name, self.env.context['old_date'],
|
name, self.env.context['old_date'],
|
||||||
self.env.context['next_date'], date_format)
|
self.env.context['next_date'], date_format)
|
||||||
return {
|
|
||||||
|
invoice_line_vals.update({
|
||||||
'name': name,
|
'name': name,
|
||||||
'account_id': account_id,
|
|
||||||
'account_analytic_id': contract.id,
|
'account_analytic_id': contract.id,
|
||||||
'price_unit': line.price_unit,
|
'price_unit': line.price_unit,
|
||||||
'quantity': line.quantity,
|
})
|
||||||
'uom_id': line.uom_id.id,
|
return invoice_line_vals
|
||||||
'product_id': line.product_id.id,
|
|
||||||
'invoice_id': invoice_id,
|
|
||||||
'invoice_line_tax_ids': [(6, 0, taxes.ids)],
|
|
||||||
'discount': line.discount,
|
|
||||||
}
|
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _prepare_invoice(self, contract):
|
def _prepare_invoice(self, contract):
|
||||||
@@ -195,8 +185,6 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("You must first select a Customer for Contract %s!") %
|
_("You must first select a Customer for Contract %s!") %
|
||||||
contract.name)
|
contract.name)
|
||||||
partner = contract.partner_id
|
|
||||||
fpos = partner.property_account_position_id
|
|
||||||
journal = contract.journal_id or self.env['account.journal'].search(
|
journal = contract.journal_id or self.env['account.journal'].search(
|
||||||
[('type', '=', 'sale'),
|
[('type', '=', 'sale'),
|
||||||
('company_id', '=', contract.company_id.id)],
|
('company_id', '=', contract.company_id.id)],
|
||||||
@@ -205,21 +193,30 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("Please define a sale journal for the company '%s'.") %
|
_("Please define a sale journal for the company '%s'.") %
|
||||||
(contract.company_id.name or '',))
|
(contract.company_id.name or '',))
|
||||||
inv_data = {
|
currency = (
|
||||||
|
contract.pricelist_id.currency_id or
|
||||||
|
contract.partner_id.property_product_pricelist.currency_id or
|
||||||
|
contract.company_id.currency_id
|
||||||
|
)
|
||||||
|
invoice = self.env['account.invoice'].new({
|
||||||
'reference': contract.code,
|
'reference': contract.code,
|
||||||
'account_id': partner.property_account_receivable_id.id,
|
|
||||||
'type': 'out_invoice',
|
'type': 'out_invoice',
|
||||||
'partner_id': partner.id,
|
'partner_id': contract.partner_id,
|
||||||
'currency_id': partner.property_product_pricelist.currency_id.id,
|
'currency_id': currency.id,
|
||||||
'journal_id': journal.id,
|
'journal_id': journal.id,
|
||||||
'date_invoice': contract.recurring_next_date,
|
'date_invoice': contract.recurring_next_date,
|
||||||
'origin': contract.name,
|
'origin': contract.name,
|
||||||
'fiscal_position_id': fpos.id,
|
|
||||||
'payment_term_id': partner.property_payment_term_id.id,
|
|
||||||
'company_id': contract.company_id.id,
|
'company_id': contract.company_id.id,
|
||||||
'contract_id': contract.id,
|
'contract_id': contract.id,
|
||||||
}
|
})
|
||||||
invoice = self.env['account.invoice'].create(inv_data)
|
# Get other invoice values from partner onchange
|
||||||
|
invoice._onchange_partner_id()
|
||||||
|
return invoice._convert_to_write(invoice._cache)
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _create_invoice(self, contract):
|
||||||
|
invoice_vals = self._prepare_invoice(contract)
|
||||||
|
invoice = self.env['account.invoice'].create(invoice_vals)
|
||||||
for line in contract.recurring_invoice_line_ids:
|
for line in contract.recurring_invoice_line_ids:
|
||||||
invoice_line_vals = self._prepare_invoice_line(line, invoice.id)
|
invoice_line_vals = self._prepare_invoice_line(line, invoice.id)
|
||||||
self.env['account.invoice.line'].create(invoice_line_vals)
|
self.env['account.invoice.line'].create(invoice_line_vals)
|
||||||
@@ -234,16 +231,15 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
('account_type', '=', 'normal'),
|
('account_type', '=', 'normal'),
|
||||||
('recurring_invoices', '=', True)])
|
('recurring_invoices', '=', True)])
|
||||||
for contract in contracts:
|
for contract in contracts:
|
||||||
next_date = fields.Date.from_string(
|
old_date = fields.Date.from_string(
|
||||||
contract.recurring_next_date or fields.Date.today())
|
contract.recurring_next_date or fields.Date.today())
|
||||||
interval = contract.recurring_interval
|
interval = contract.recurring_interval
|
||||||
old_date = next_date
|
|
||||||
if contract.recurring_rule_type == 'daily':
|
if contract.recurring_rule_type == 'daily':
|
||||||
new_date = next_date + relativedelta(days=interval)
|
new_date = old_date + relativedelta(days=interval)
|
||||||
elif contract.recurring_rule_type == 'weekly':
|
elif contract.recurring_rule_type == 'weekly':
|
||||||
new_date = next_date + relativedelta(weeks=interval)
|
new_date = old_date + relativedelta(weeks=interval)
|
||||||
else:
|
else:
|
||||||
new_date = next_date + relativedelta(months=interval)
|
new_date = old_date + relativedelta(months=interval)
|
||||||
ctx = self.env.context.copy()
|
ctx = self.env.context.copy()
|
||||||
ctx.update({
|
ctx.update({
|
||||||
'old_date': old_date,
|
'old_date': old_date,
|
||||||
@@ -252,8 +248,8 @@ class AccountAnalyticAccount(models.Model):
|
|||||||
'force_company': contract.company_id.id,
|
'force_company': contract.company_id.id,
|
||||||
})
|
})
|
||||||
# Re-read contract with correct company
|
# Re-read contract with correct company
|
||||||
contract = self.with_context(ctx).browse(contract.id)
|
contract = contract.with_context(ctx)
|
||||||
self.with_context(ctx)._prepare_invoice(contract)
|
self.with_context(ctx)._create_invoice(contract)
|
||||||
contract.write({
|
contract.write({
|
||||||
'recurring_next_date': new_date.strftime('%Y-%m-%d')
|
'recurring_next_date': new_date.strftime('%Y-%m-%d')
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
groups="base.group_no_one"/>
|
groups="base.group_no_one"/>
|
||||||
<button name="%(contract.act_recurring_invoices)d" type="action"
|
<button name="%(contract.act_recurring_invoices)d" type="action"
|
||||||
attrs="{'invisible': [('recurring_invoices','!=',True)]}"
|
attrs="{'invisible': [('recurring_invoices','!=',True)]}"
|
||||||
string="⇒ show invoices" class="oe_link"/>
|
string="⇒ Show invoices" class="oe_link"/>
|
||||||
</div>
|
</div>
|
||||||
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
||||||
<field name="journal_id"/>
|
<field name="journal_id"/>
|
||||||
@@ -73,6 +73,11 @@
|
|||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</div>
|
</div>
|
||||||
|
<group string="Legend (for the markers inside invoice lines description)"
|
||||||
|
name="group_legend" attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
||||||
|
<p colspan="2"> <strong>#START#</strong>: Start date of the invoiced period</p>
|
||||||
|
<p colspan="2"> <strong>#END#</strong>: End date of the invoiced period</p>
|
||||||
|
</group>
|
||||||
</notebook>
|
</notebook>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
@@ -98,7 +103,7 @@
|
|||||||
<field name="name" position="after">
|
<field name="name" position="after">
|
||||||
<field name="journal_id"/>
|
<field name="journal_id"/>
|
||||||
<field name="pricelist_id"/>
|
<field name="pricelist_id"/>
|
||||||
<filter name="recurring_invoice" string="Recurring Invoice" domain="[('recurring_invoices','=',True)]"/>
|
<filter name="recurring_invoices" string="Recurring Invoices" domain="[('recurring_invoices','=',True)]"/>
|
||||||
<group expand="0" string="Group By...">
|
<group expand="0" string="Group By...">
|
||||||
<filter string="Next Invoice" domain="[]" context="{'group_by':'recurring_next_date'}"/>
|
<filter string="Next Invoice" domain="[]" context="{'group_by':'recurring_next_date'}"/>
|
||||||
</group>
|
</group>
|
||||||
@@ -112,15 +117,11 @@
|
|||||||
<field name="res_model">account.analytic.account</field>
|
<field name="res_model">account.analytic.account</field>
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field name="context">{'search_default_active':1, 'search_default_recurring_invoice':1}</field>
|
<field name="context">{'search_default_active':1, 'search_default_recurring_invoices':1}</field>
|
||||||
<field name="search_view_id" ref="analytic.view_account_analytic_account_search"/>
|
<field name="search_view_id" ref="analytic.view_account_analytic_account_search"/>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
<p class="oe_view_nocontent_create">
|
<p class="oe_view_nocontent_create">
|
||||||
Click to create a new contract.
|
Click to create a new contract.
|
||||||
</p><p>
|
|
||||||
Use contracts to follow tasks, issues, timesheets or invoicing based on
|
|
||||||
work done, expenses and/or sales orders. Odoo will automatically manage
|
|
||||||
the alerts for the renewal of the contracts to the right salesperson.
|
|
||||||
</p>
|
</p>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
Reference in New Issue
Block a user