Browse Source

Merge pull request #40 from StefanRijnhart/10.0-contract

10.0 contract
pull/44/head
Pedro M. Baeza 8 years ago
committed by GitHub
parent
commit
43636b6369
  1. 26
      contract/README.rst
  2. 6
      contract/__manifest__.py
  3. 24
      contract/data/contract_cron.xml
  4. 267
      contract/i18n/bg.po
  5. 56
      contract/i18n/es.po
  6. 4
      contract/i18n/fi.po
  7. 6
      contract/i18n/fr.po
  8. 267
      contract/i18n/hr.po
  9. 8
      contract/i18n/it.po
  10. 8
      contract/i18n/nl.po
  11. 8
      contract/i18n/pt_BR.po
  12. 267
      contract/i18n/ru.po
  13. 6
      contract/i18n/sl.po
  14. 4
      contract/i18n/tr.po
  15. 267
      contract/i18n/zh_CN.po
  16. 134
      contract/models/contract.py
  17. 2
      contract/models/invoice.py
  18. 4
      contract/security/ir.model.access.csv
  19. 73
      contract/tests/test_contract.py
  20. 28
      contract/views/account_invoice_view.xml
  21. 207
      contract/views/contract.xml
  22. 39
      contract_show_invoice/i18n/fr.po
  23. 39
      contract_show_invoice/i18n/it.po
  24. 13
      contract_variable_quantity/i18n/bg.po
  25. 47
      contract_variable_quantity/i18n/hr_HR.po
  26. 2
      contract_variable_quantity/tests/test_contract_variable_quantity.py

26
contract/README.rst

@ -6,8 +6,9 @@
Contracts for recurrent invoicing
=================================
This module forward-port to v9 the contracts management with recurring
invoicing functions.
This module forward-port to v10 the contracts management with recurring
invoicing functions. In upstream Odoo, this functionality was moved into the
Enterprise edition.
Configuration
=============
@ -19,18 +20,29 @@ Usage
To use this module, you need to:
#. Go to Sales -> Contracts and select or create a new contract.
#. Go to Accounting -> Contracts and select or create a new contract.
#. Check *Generate recurring invoices automatically*.
#. Fill fields and add new lines. You have the possibility to use markers in
the description field to show the start and end date of the invoiced period.
#. A cron is created with daily interval, but if you are in debug mode can
#. Fill fields for selecting the recurrency and invoice parameters:
* Journal
* Pricelist
* Period. It can be any interval of days, weeks, months, months last day or
years.
* Start date and next invoice date.
* Invoicing type: pre-paid or post-paid.
#. Add the lines to be invoiced with the product, description, quantity and
price.
#. You have the possibility to use the markers #START# or #END# in the
description field to show the start and end date of the invoiced period.
#. Choosing between pre-paid and post-paid, you modify the dates that are shown
with the markers.
#. A cron is created with daily interval, but if you are in debug mode, you can
click on *Create invoices* to force this action.
#. Click *Show recurring invoices* link to show all invoices created by the
contract.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/110/9.0
:target: https://runbot.odoo-community.org/runbot/110/10.0
Known issues / Roadmap
======================

6
contract/__manifest__.py

@ -5,13 +5,13 @@
{
'name': 'Contracts Management recurring',
'version': '9.0.1.0.0',
'version': '10.0.1.0.0',
'category': 'Contract Management',
'license': 'AGPL-3',
'author': "OpenERP SA,"
"Tecnativa,"
"Odoo Community Association (OCA)",
'website': 'http://openerp.com',
'website': 'https://github.com/oca/contract',
'depends': ['base', 'account', 'analytic'],
'data': [
'security/ir.model.access.csv',
@ -19,5 +19,5 @@
'views/contract.xml',
'views/account_invoice_view.xml',
],
'installable': False,
'installable': True,
}

24
contract/data/contract_cron.xml

@ -1,16 +1,14 @@
<?xml version="1.0" encoding='UTF-8'?>
<openerp>
<data>
<odoo>
<record model="ir.cron" id="account_analytic_cron_for_invoice">
<field name="name">Generate Recurring Invoices from Contracts</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="model" eval="'account.analytic.account'"/>
<field name="function" eval="'recurring_create_invoice'"/>
<field name="args" eval="'()'"/>
</record>
<record model="ir.cron" id="account_analytic_cron_for_invoice">
<field name="name">Generate Recurring Invoices from Contracts</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="model" eval="'account.analytic.account'"/>
<field name="function" eval="'cron_recurring_create_invoice'"/>
<field name="args" eval="'()'"/>
</record>
</data>
</openerp>
</odoo>

267
contract/i18n/bg.po

@ -0,0 +1,267 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Bulgarian (http://www.transifex.com/oca/OCA-contract-9-0/language/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#END#</strong>: End date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#START#</strong>: Start date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Account Analytic Lines"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_account
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,help:contract.action_account_analytic_overdue_all
msgid "Click to create a new contract."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_invoice_contract_id
msgid "Contract"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_config_contract
msgid "Contracts"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Create invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_uid
msgid "Created by"
msgstr "Създадено от"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_date
msgid "Created on"
msgstr "Създадено на"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_next_date
msgid "Date of Next Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_date_start
msgid "Date start"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Day(s)"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr "Описание"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
msgid "Discount (%)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:59
#, python-format
msgid "Discount should be less or equal to 100"
msgstr ""
#. 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 ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
msgid "Display Name"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
msgid "Generate recurring invoices automatically"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Group By..."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_id
msgid "ID"
msgstr "ID"
#. module: contract
#: model:ir.model,name:contract.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids
msgid "Invoice Lines"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.act_recurring_invoices
msgid "Invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_journal_id
msgid "Journal"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
msgid "Last Modified on"
msgstr "Последно обновено на"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid
msgid "Last Updated by"
msgstr "Последно обновено от"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_date
msgid "Last Updated on"
msgstr "Последно обновено на"
#. 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 ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Month(s)"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Next Invoice"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:196
#, python-format
msgid "Please define a sale journal for the company '%s'."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_pricelist_id
msgid "Pricelist"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_product_id
msgid "Product"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_quantity
msgid "Quantity"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_rule_type
msgid "Recurrency"
msgstr ""
#. module: contract
#: 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"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_interval
msgid "Repeat Every"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_interval
msgid "Repeat every (Days/Week/Month/Year)"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_rule_type
msgid "Specify Interval for automatic invoice generation."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_subtotal
msgid "Sub Total"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_unit
msgid "Unit Price"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_uom_id
msgid "Unit of Measure"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Week(s)"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Year(s)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:188
#, python-format
msgid "You must first select a Customer for Contract %s!"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_invoice_line
msgid "account.analytic.invoice.line"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "⇒ Show recurring invoices"
msgstr ""

56
contract/i18n/es.po

@ -1,21 +1,23 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract
#
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"PO-Revision-Date: 2016-09-16 21:45+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Spanish (http://www.transifex.com/oca/OCA-contract-9-0/language/es/)\n"
"POT-Creation-Date: 2016-09-25 22:56+0000\n"
"PO-Revision-Date: 2016-09-26 00:56+0100\n"
"Last-Translator: Carlos Incaser <carlos@incaser.es>\n"
"Language-Team: Spanish (http://www.transifex.com/oca/OCA-contract-9-0/"
"language/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: es\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
@ -51,7 +53,6 @@ msgstr "Contrato"
#. module: contract
#: model:ir.actions.act_window,name:contract.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_config_contract
msgid "Contracts"
msgstr "Contratos"
@ -96,7 +97,7 @@ msgid "Discount (%)"
msgstr "Descuento (%)"
#. module: contract
#: code:addons/contract/models/contract.py:59
#: code:addons/contract/models/contract.py:60
#, python-format
msgid "Discount should be less or equal to 100"
msgstr "El descuento debería ser menor o igual a 100"
@ -106,7 +107,9 @@ msgstr "El descuento debería ser menor o igual a 100"
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"
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
@ -166,24 +169,40 @@ 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)"
msgstr ""
"Leyenda (para los marcadores dentro de descripción en lineas de factura)"
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Month(s)"
msgstr "Mes(es)"
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Month(s) last day"
msgstr "Mes(es) último día"
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Next Invoice"
msgstr "Próxima factura"
#. module: contract
#: code:addons/contract/models/contract.py:196
#: code:addons/contract/models/contract.py:230
#, python-format
msgid "Please define a sale journal for the company '%s'."
msgstr "Por favor define un diario de ventas para la compañía '%s'."
#. module: contract
#: selection:account.analytic.account,recurring_invoicing_type:0
msgid "Post-paid"
msgstr "Pospago"
#. module: contract
#: selection:account.analytic.account,recurring_invoicing_type:0
msgid "Pre-paid"
msgstr "Prepago"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_pricelist_id
msgid "Pricelist"
@ -199,6 +218,11 @@ msgstr "Producto"
msgid "Quantity"
msgstr "Cantidad"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoicing_type
msgid "Invoicing type"
msgstr "Tipo de facturación"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_rule_type
msgid "Recurrency"
@ -225,6 +249,12 @@ msgstr "Repetir cada (días/semana/mes/año)"
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,help:contract.field_account_analytic_account_recurring_invoicing_type
msgid "Specify if process date is 'from' or 'to' invoicing date"
msgstr ""
"Especifica si la fecha de proceso es desde o hasta la fecha de facturación"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_subtotal
msgid "Sub Total"
@ -251,7 +281,7 @@ msgid "Year(s)"
msgstr "Año(s)"
#. module: contract
#: code:addons/contract/models/contract.py:188
#: code:addons/contract/models/contract.py:222
#, python-format
msgid "You must first select a Customer for Contract %s!"
msgstr "¡Seleccione un cliente para este contrato %s!"

4
contract/i18n/fi.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Finnish (http://www.transifex.com/oca/OCA-contract-9-0/language/fi/)\n"
@ -88,7 +88,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
msgstr "Kuvaus"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount

6
contract/i18n/fr.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: French (http://www.transifex.com/oca/OCA-contract-9-0/language/fr/)\n"
@ -88,7 +88,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
msgstr "Description"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
@ -131,7 +131,7 @@ msgstr "ID"
#. module: contract
#: model:ir.model,name:contract.model_account_invoice
msgid "Invoice"
msgstr ""
msgstr "Facture"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids

267
contract/i18n/hr.po

@ -0,0 +1,267 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Croatian (http://www.transifex.com/oca/OCA-contract-9-0/language/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: hr\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#END#</strong>: End date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#START#</strong>: Start date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Account Analytic Lines"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_account
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,help:contract.action_account_analytic_overdue_all
msgid "Click to create a new contract."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_invoice_contract_id
msgid "Contract"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_config_contract
msgid "Contracts"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Create invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_date
msgid "Created on"
msgstr "Kreirano"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_next_date
msgid "Date of Next Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_date_start
msgid "Date start"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Day(s)"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
msgid "Discount (%)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:59
#, python-format
msgid "Discount should be less or equal to 100"
msgstr ""
#. 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 ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
msgid "Display Name"
msgstr "Naziv "
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
msgid "Generate recurring invoices automatically"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Group By..."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_id
msgid "ID"
msgstr "ID"
#. module: contract
#: model:ir.model,name:contract.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids
msgid "Invoice Lines"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.act_recurring_invoices
msgid "Invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_journal_id
msgid "Journal"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
msgid "Last Modified on"
msgstr "Zadnje modificirano"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_date
msgid "Last Updated on"
msgstr "Zadnje ažuriranje"
#. 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 ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Month(s)"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Next Invoice"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:196
#, python-format
msgid "Please define a sale journal for the company '%s'."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_pricelist_id
msgid "Pricelist"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_product_id
msgid "Product"
msgstr "Proizvod"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_quantity
msgid "Quantity"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_rule_type
msgid "Recurrency"
msgstr ""
#. module: contract
#: 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"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_interval
msgid "Repeat Every"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_interval
msgid "Repeat every (Days/Week/Month/Year)"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_rule_type
msgid "Specify Interval for automatic invoice generation."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_subtotal
msgid "Sub Total"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_unit
msgid "Unit Price"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_uom_id
msgid "Unit of Measure"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Week(s)"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Year(s)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:188
#, python-format
msgid "You must first select a Customer for Contract %s!"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_invoice_line
msgid "account.analytic.invoice.line"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "⇒ Show recurring invoices"
msgstr ""

8
contract/i18n/it.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-contract-9-0/language/it/)\n"
@ -88,7 +88,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
msgstr "Descrizione"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
@ -131,7 +131,7 @@ msgstr "ID"
#. module: contract
#: model:ir.model,name:contract.model_account_invoice
msgid "Invoice"
msgstr ""
msgstr "Fattura"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids
@ -146,7 +146,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_journal_id
msgid "Journal"
msgstr ""
msgstr "Sezionale"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update

8
contract/i18n/nl.po

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-09-17 18:43+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Dutch (http://www.transifex.com/oca/OCA-contract-9-0/language/nl/)\n"
"MIME-Version: 1.0\n"
@ -111,7 +111,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
msgid "Display Name"
msgstr ""
msgstr "Te tonen naam"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
@ -151,7 +151,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
msgid "Last Modified on"
msgstr ""
msgstr "Laatst bijgewerkt op"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid

8
contract/i18n/pt_BR.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-contract-9-0/language/pt_BR/)\n"
@ -88,7 +88,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
msgstr "Descrição"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
@ -111,7 +111,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
msgid "Display Name"
msgstr ""
msgstr "Nome para Mostrar"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
@ -151,7 +151,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
msgid "Last Modified on"
msgstr ""
msgstr "Última atualização em"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid

267
contract/i18n/ru.po

@ -0,0 +1,267 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Russian (http://www.transifex.com/oca/OCA-contract-9-0/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#END#</strong>: End date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#START#</strong>: Start date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Account Analytic Lines"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_account
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,help:contract.action_account_analytic_overdue_all
msgid "Click to create a new contract."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_invoice_contract_id
msgid "Contract"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_config_contract
msgid "Contracts"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Create invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_uid
msgid "Created by"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_date
msgid "Created on"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_next_date
msgid "Date of Next Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_date_start
msgid "Date start"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Day(s)"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr "Описание"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
msgid "Discount (%)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:59
#, python-format
msgid "Discount should be less or equal to 100"
msgstr ""
#. 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 ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
msgid "Display Name"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
msgid "Generate recurring invoices automatically"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Group By..."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_id
msgid "ID"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids
msgid "Invoice Lines"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.act_recurring_invoices
msgid "Invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_journal_id
msgid "Journal"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
msgid "Last Modified on"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid
msgid "Last Updated by"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_date
msgid "Last Updated on"
msgstr ""
#. 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 ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Month(s)"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Next Invoice"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:196
#, python-format
msgid "Please define a sale journal for the company '%s'."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_pricelist_id
msgid "Pricelist"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_product_id
msgid "Product"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_quantity
msgid "Quantity"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_rule_type
msgid "Recurrency"
msgstr ""
#. module: contract
#: 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"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_interval
msgid "Repeat Every"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_interval
msgid "Repeat every (Days/Week/Month/Year)"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_rule_type
msgid "Specify Interval for automatic invoice generation."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_subtotal
msgid "Sub Total"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_unit
msgid "Unit Price"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_uom_id
msgid "Unit of Measure"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Week(s)"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Year(s)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:188
#, python-format
msgid "You must first select a Customer for Contract %s!"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_invoice_line
msgid "account.analytic.invoice.line"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "⇒ Show recurring invoices"
msgstr ""

6
contract/i18n/sl.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-contract-9-0/language/sl/)\n"
@ -78,7 +78,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_date_start
msgid "Date start"
msgstr ""
msgstr "Začetni datum"
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
@ -88,7 +88,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
msgstr "Opis"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount

4
contract/i18n/tr.po

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Turkish (http://www.transifex.com/oca/OCA-contract-9-0/language/tr/)\n"
@ -88,7 +88,7 @@ msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
msgstr "Açıklama"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount

267
contract/i18n/zh_CN.po

@ -0,0 +1,267 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-01 10:38+0000\n"
"Last-Translator: <>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-contract-9-0/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#END#</strong>: End date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "<strong>#START#</strong>: Start date of the invoiced period"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Account Analytic Lines"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_account
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,help:contract.action_account_analytic_overdue_all
msgid "Click to create a new contract."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_invoice_contract_id
msgid "Contract"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_action_account_analytic_overdue_all
#: model:ir.ui.menu,name:contract.menu_config_contract
msgid "Contracts"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "Create invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_uid
msgid "Created by"
msgstr "创建者"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_create_date
msgid "Created on"
msgstr "创建时间"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_next_date
msgid "Date of Next Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_date_start
msgid "Date start"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Day(s)"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_name
msgid "Description"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_discount
msgid "Discount (%)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:59
#, python-format
msgid "Discount should be less or equal to 100"
msgstr ""
#. 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 ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_display_name
msgid "Display Name"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoices
msgid "Generate recurring invoices automatically"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Group By..."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_id
msgid "ID"
msgstr "ID"
#. module: contract
#: model:ir.model,name:contract.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_invoice_line_ids
msgid "Invoice Lines"
msgstr ""
#. module: contract
#: model:ir.actions.act_window,name:contract.act_recurring_invoices
msgid "Invoices"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_journal_id
msgid "Journal"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line___last_update
msgid "Last Modified on"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_uid
msgid "Last Updated by"
msgstr "最后更新者"
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_write_date
msgid "Last Updated on"
msgstr "上次更新日期"
#. 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 ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Month(s)"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.view_account_analytic_account_contract_search
msgid "Next Invoice"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:196
#, python-format
msgid "Please define a sale journal for the company '%s'."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_pricelist_id
msgid "Pricelist"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_product_id
msgid "Product"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_quantity
msgid "Quantity"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_rule_type
msgid "Recurrency"
msgstr ""
#. module: contract
#: 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"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_account_recurring_interval
msgid "Repeat Every"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_interval
msgid "Repeat every (Days/Week/Month/Year)"
msgstr ""
#. module: contract
#: model:ir.model.fields,help:contract.field_account_analytic_account_recurring_rule_type
msgid "Specify Interval for automatic invoice generation."
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_subtotal
msgid "Sub Total"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_price_unit
msgid "Unit Price"
msgstr ""
#. module: contract
#: model:ir.model.fields,field_description:contract.field_account_analytic_invoice_line_uom_id
msgid "Unit of Measure"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Week(s)"
msgstr ""
#. module: contract
#: selection:account.analytic.account,recurring_rule_type:0
msgid "Year(s)"
msgstr ""
#. module: contract
#: code:addons/contract/models/contract.py:188
#, python-format
msgid "You must first select a Customer for Contract %s!"
msgstr ""
#. module: contract
#: model:ir.model,name:contract.model_account_analytic_invoice_line
msgid "account.analytic.invoice.line"
msgstr ""
#. module: contract
#: model:ir.ui.view,arch_db:contract.account_analytic_account_recurring_form_form
msgid "⇒ Show recurring invoices"
msgstr ""

134
contract/models/contract.py

@ -7,12 +7,11 @@
from dateutil.relativedelta import relativedelta
import logging
import time
from openerp import api, fields, models
from openerp.addons.decimal_precision import decimal_precision as dp
from openerp.exceptions import ValidationError
from openerp.tools.translate import _
from odoo import api, fields, models
from odoo.addons import decimal_precision as dp
from odoo.exceptions import ValidationError
from odoo.tools.translate import _
_logger = logging.getLogger(__name__)
@ -31,7 +30,7 @@ class AccountAnalyticInvoiceLine(models.Model):
price_unit = fields.Float('Unit Price', required=True)
price_subtotal = fields.Float(
compute='_compute_price_subtotal',
digits_compute=dp.get_precision('Account'),
digits=dp.get_precision('Account'),
string='Sub Total')
discount = fields.Float(
string='Discount (%)',
@ -52,11 +51,13 @@ class AccountAnalyticInvoiceLine(models.Model):
else:
line.price_subtotal = subtotal
@api.one
@api.multi
@api.constrains('discount')
def _check_discount(self):
if self.discount > 100:
raise ValidationError(_("Discount should be less or equal to 100"))
for line in self:
if line.discount > 100:
raise ValidationError(
_("Discount should be less or equal to 100"))
@api.multi
@api.onchange('product_id')
@ -109,6 +110,7 @@ class AccountAnalyticAccount(models.Model):
recurring_invoice_line_ids = fields.One2many(
comodel_name='account.analytic.invoice.line',
inverse_name='analytic_account_id',
copy=True,
string='Invoice Lines')
recurring_invoices = fields.Boolean(
string='Generate recurring invoices automatically')
@ -116,11 +118,19 @@ class AccountAnalyticAccount(models.Model):
[('daily', 'Day(s)'),
('weekly', 'Week(s)'),
('monthly', 'Month(s)'),
('monthlylastday', 'Month(s) last day'),
('yearly', 'Year(s)'),
],
default='monthly',
string='Recurrency',
help="Specify Interval for automatic invoice generation.")
recurring_invoicing_type = fields.Selection(
[('pre-paid', 'Pre-paid'),
('post-paid', 'Post-paid'),
],
default='pre-paid',
string='Invoicing type',
help="Specify if process date is 'from' or 'to' invoicing date")
recurring_interval = fields.Integer(
default=1,
string='Repeat Every',
@ -144,12 +154,35 @@ class AccountAnalyticAccount(models.Model):
if self.date_start and self.recurring_invoices:
self.recurring_next_date = self.date_start
@api.model
def get_relative_delta(self, recurring_rule_type, interval):
if recurring_rule_type == 'daily':
return relativedelta(days=interval)
elif recurring_rule_type == 'weekly':
return relativedelta(weeks=interval)
elif recurring_rule_type == 'monthly':
return relativedelta(months=interval)
elif recurring_rule_type == 'monthlylastday':
return relativedelta(months=interval, day=31)
else:
return relativedelta(years=interval)
@api.model
def _insert_markers(self, line, date_start, next_date, date_format):
line = line.replace('#START#', date_start.strftime(date_format))
date_end = next_date - relativedelta(days=1)
line = line.replace('#END#', date_end.strftime(date_format))
return line
contract = line.analytic_account_id
if contract.recurring_invoicing_type == 'pre-paid':
date_from = date_start
date_to = next_date - relativedelta(days=1)
else:
date_from = (date_start -
self.get_relative_delta(contract.recurring_rule_type,
contract.recurring_interval) +
relativedelta(days=1))
date_to = date_start
name = line.name
name = name.replace('#START#', date_from.strftime(date_format))
name = name.replace('#END#', date_to.strftime(date_format))
return name
@api.model
def _prepare_invoice_line(self, line, invoice_id):
@ -172,7 +205,7 @@ class AccountAnalyticAccount(models.Model):
[('code', '=', contract.partner_id.lang)])
date_format = lang.date_format or '%m/%d/%Y'
name = self._insert_markers(
name, self.env.context['old_date'],
line, self.env.context['old_date'],
self.env.context['next_date'], date_format)
invoice_line_vals.update({
'name': name,
@ -181,68 +214,61 @@ class AccountAnalyticAccount(models.Model):
})
return invoice_line_vals
@api.model
def _prepare_invoice(self, contract):
if not contract.partner_id:
@api.multi
def _prepare_invoice(self):
self.ensure_one()
if not self.partner_id:
raise ValidationError(
_("You must first select a Customer for Contract %s!") %
contract.name)
journal = contract.journal_id or self.env['account.journal'].search(
self.name)
journal = self.journal_id or self.env['account.journal'].search(
[('type', '=', 'sale'),
('company_id', '=', contract.company_id.id)],
('company_id', '=', self.company_id.id)],
limit=1)
if not journal:
raise ValidationError(
_("Please define a sale journal for the company '%s'.") %
(contract.company_id.name or '',))
(self.company_id.name or '',))
currency = (
contract.pricelist_id.currency_id or
contract.partner_id.property_product_pricelist.currency_id or
contract.company_id.currency_id
self.pricelist_id.currency_id or
self.partner_id.property_product_pricelist.currency_id or
self.company_id.currency_id
)
invoice = self.env['account.invoice'].new({
'reference': contract.code,
'reference': self.code,
'type': 'out_invoice',
'partner_id': contract.partner_id.address_get(
'partner_id': self.partner_id.address_get(
['invoice'])['invoice'],
'currency_id': currency.id,
'journal_id': journal.id,
'date_invoice': contract.recurring_next_date,
'origin': contract.name,
'company_id': contract.company_id.id,
'contract_id': contract.id,
'date_invoice': self.recurring_next_date,
'origin': self.name,
'company_id': self.company_id.id,
'contract_id': self.id,
'user_id': self.partner_id.user_id.id,
})
# 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)
@api.multi
def _create_invoice(self):
self.ensure_one()
invoice_vals = self._prepare_invoice()
invoice = self.env['account.invoice'].create(invoice_vals)
for line in contract.recurring_invoice_line_ids:
for line in self.recurring_invoice_line_ids:
invoice_line_vals = self._prepare_invoice_line(line, invoice.id)
self.env['account.invoice.line'].create(invoice_line_vals)
invoice.compute_taxes()
return invoice
@api.model
def recurring_create_invoice(self, automatic=False):
current_date = time.strftime('%Y-%m-%d')
contracts = self.search(
[('recurring_next_date', '<=', current_date),
('account_type', '=', 'normal'),
('recurring_invoices', '=', True)])
for contract in contracts:
@api.multi
def recurring_create_invoice(self):
for contract in self:
old_date = fields.Date.from_string(
contract.recurring_next_date or fields.Date.today())
interval = contract.recurring_interval
if contract.recurring_rule_type == 'daily':
new_date = old_date + relativedelta(days=interval)
elif contract.recurring_rule_type == 'weekly':
new_date = old_date + relativedelta(weeks=interval)
else:
new_date = old_date + relativedelta(months=interval)
new_date = old_date + self.get_relative_delta(
contract.recurring_rule_type, contract.recurring_interval)
ctx = self.env.context.copy()
ctx.update({
'old_date': old_date,
@ -251,9 +277,15 @@ class AccountAnalyticAccount(models.Model):
'force_company': contract.company_id.id,
})
# Re-read contract with correct company
contract = contract.with_context(ctx)
self.with_context(ctx)._create_invoice(contract)
contract.with_context(ctx)._create_invoice()
contract.write({
'recurring_next_date': new_date.strftime('%Y-%m-%d')
})
return True
@api.model
def cron_recurring_create_invoice(self):
contracts = self.search(
[('recurring_next_date', '<=', fields.date.today()),
('recurring_invoices', '=', True)])
return contracts.recurring_create_invoice()

2
contract/models/invoice.py

@ -2,7 +2,7 @@
# © 2016 Carlos Dauden <carlos.dauden@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import fields, models
from odoo import fields, models
class AccountInvoice(models.Model):

4
contract/security/ir.model.access.csv

@ -1,4 +1,4 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"account_analytic_invoice_line_manager","Recurring manager","model_account_analytic_invoice_line","base.group_sale_manager",1,1,1,1
"account_analytic_invoice_line_user","Recurring user","model_account_analytic_invoice_line","base.group_sale_salesman",1,0,0,0
"account_analytic_invoice_line_manager","Recurring manager","model_account_analytic_invoice_line","account.group_account_manager",1,1,1,1
"account_analytic_invoice_line_user","Recurring user","model_account_analytic_invoice_line","account.group_account_user",1,0,0,0

73
contract/tests/test_contract.py

@ -2,11 +2,8 @@
# © 2016 Carlos Dauden <carlos.dauden@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from dateutil.relativedelta import relativedelta
import datetime
from openerp.exceptions import ValidationError
from openerp.tests.common import TransactionCase
from odoo.exceptions import ValidationError
from odoo.tests.common import TransactionCase
class TestContract(TransactionCase):
@ -15,14 +12,16 @@ class TestContract(TransactionCase):
super(TestContract, self).setUp()
self.partner = self.env.ref('base.res_partner_2')
self.product = self.env.ref('product.product_product_2')
self.tax = self.env.ref('l10n_generic_coa.sale_tax_template')
self.product.taxes_id = self.tax.ids
self.product.taxes_id += self.env['account.tax'].search(
[('type_tax_use', '=', 'sale')], limit=1)
self.product.description_sale = 'Test description sale'
self.contract = self.env['account.analytic.account'].create({
'name': 'Test Contract',
'partner_id': self.partner.id,
'pricelist_id': self.partner.property_product_pricelist.id,
'recurring_invoices': True,
'date_start': '2016-02-15',
'recurring_next_date': '2016-02-29',
})
self.contract_line = self.env['account.analytic.invoice.line'].create({
'analytic_account_id': self.contract.id,
@ -33,11 +32,6 @@ class TestContract(TransactionCase):
'price_unit': 100,
'discount': 50,
})
self.current_date = datetime.date.today()
self.contract_daily = self.contract.copy()
self.contract_daily.recurring_rule_type = 'daily'
self.contract_weekly = self.contract.copy()
self.contract_weekly.recurring_rule_type = 'weekly'
def test_check_discount(self):
with self.assertRaises(ValidationError):
@ -58,35 +52,54 @@ class TestContract(TransactionCase):
self.invoice_monthly = self.env['account.invoice'].search(
[('contract_id', '=', self.contract.id)])
self.assertTrue(self.invoice_monthly)
new_date = self.current_date + relativedelta(
months=self.contract.recurring_interval)
self.assertEqual(self.contract.recurring_next_date,
new_date.strftime('%Y-%m-%d'))
self.assertEqual(self.contract.recurring_next_date, '2016-03-29')
self.inv_line = self.invoice_monthly.invoice_line_ids[0]
self.assertAlmostEqual(self.inv_line.price_subtotal, 50.0)
self.assertTrue(self.inv_line.invoice_line_tax_ids)
self.assertAlmostEqual(self.inv_line.price_subtotal, 50.0)
self.assertEqual(self.contract.partner_id.user_id,
self.invoice_monthly.user_id)
def test_contract_daily(self):
self.contract_daily.pricelist_id = False
self.contract_daily.recurring_create_invoice()
self.contract.recurring_next_date = '2016-02-29'
self.contract.recurring_rule_type = 'daily'
self.contract.pricelist_id = False
self.contract.cron_recurring_create_invoice()
invoice_daily = self.env['account.invoice'].search(
[('contract_id', '=', self.contract_daily.id)])
[('contract_id', '=', self.contract.id)])
self.assertTrue(invoice_daily)
new_date = self.current_date + relativedelta(
days=self.contract_daily.recurring_interval)
self.assertEqual(self.contract_daily.recurring_next_date,
new_date.strftime('%Y-%m-%d'))
self.assertEqual(self.contract.recurring_next_date, '2016-03-01')
def test_contract_weekly(self):
self.contract_weekly.recurring_create_invoice()
self.contract.recurring_next_date = '2016-02-29'
self.contract.recurring_rule_type = 'weekly'
self.contract.recurring_invoicing_type = 'post-paid'
self.contract.recurring_create_invoice()
invoices_weekly = self.env['account.invoice'].search(
[('contract_id', '=', self.contract.id)])
self.assertTrue(invoices_weekly)
self.assertEqual(
self.contract.recurring_next_date, '2016-03-07')
def test_contract_yearly(self):
self.contract.recurring_next_date = '2016-02-29'
self.contract.recurring_rule_type = 'yearly'
self.contract.recurring_create_invoice()
invoices_weekly = self.env['account.invoice'].search(
[('contract_id', '=', self.contract_weekly.id)])
[('contract_id', '=', self.contract.id)])
self.assertTrue(invoices_weekly)
new_date = self.current_date + relativedelta(
weeks=self.contract_weekly.recurring_interval)
self.assertEqual(self.contract_weekly.recurring_next_date,
new_date.strftime('%Y-%m-%d'))
self.assertEqual(
self.contract.recurring_next_date, '2017-02-28')
def test_contract_monthly_lastday(self):
self.contract.recurring_next_date = '2016-02-29'
self.contract.recurring_invoicing_type = 'post-paid'
self.contract.recurring_rule_type = 'monthlylastday'
self.contract.recurring_create_invoice()
invoices_monthly_lastday = self.env['account.invoice'].search(
[('contract_id', '=', self.contract.id)])
self.assertTrue(invoices_monthly_lastday)
self.assertEqual(self.contract.recurring_next_date, '2016-03-31')
def test_onchange_partner_id(self):
self.contract._onchange_partner_id()

28
contract/views/account_invoice_view.xml

@ -1,19 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<!-- Invoice search view with contract -->
<record id="view_account_invoice_filter_contract" model="ir.ui.view">
<field name="name">account.invoice.select.contract</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.view_account_invoice_filter"/>
<field name="arch" type="xml">
<field name="date" position="after">
<separator/>
<field name="contract_id"/>
</field>
<!-- Invoice search view with contract -->
<record id="view_account_invoice_filter_contract" model="ir.ui.view">
<field name="name">account.invoice.select.contract</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.view_account_invoice_filter"/>
<field name="arch" type="xml">
<field name="date" position="after">
<separator/>
<field name="contract_id"/>
</field>
</record>
</field>
</record>
</data>
</openerp>
</odoo>

207
contract/views/contract.xml

@ -1,115 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record id="act_recurring_invoices" model="ir.actions.act_window">
<field name="context">{'search_default_contract_id':
[active_id],
'default_contract_id': active_id}
</field>
<field name="name">Invoices</field>
<field name="res_model">account.invoice</field>
<field name="view_id" ref="account.invoice_tree" />
<field name="search_view_id" ref="account.view_account_invoice_filter"/>
</record>
<record id="act_recurring_invoices" model="ir.actions.act_window">
<field name="context">{'search_default_contract_id':
[active_id],
'default_contract_id': active_id}
</field>
<field name="name">Invoices</field>
<field name="res_model">account.invoice</field>
<field name="view_id" ref="account.invoice_tree" />
<field name="search_view_id" ref="account.view_account_invoice_filter"/>
</record>
<record id="account_analytic_account_recurring_form_form" model="ir.ui.view">
<field name="name">account.analytic.account.invoice.recurring.form.inherit</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field eval="40" name="priority"/>
<field name="arch" type="xml">
<notebook position="before">
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
<record id="account_analytic_account_recurring_form_form" model="ir.ui.view">
<field name="name">account.analytic.account.invoice.recurring.form.inherit</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field eval="40" name="priority"/>
<field name="arch" type="xml">
<group name="main" position="after">
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
<div>
<field name="recurring_invoices" class="oe_inline"/>
<label for="recurring_invoices" />
<button name="recurring_create_invoice" type="object"
attrs="{'invisible': [('recurring_invoices','!=',True)]}"
string="Create invoices" class="oe_link"
groups="base.group_no_one"/>
<button name="%(contract.act_recurring_invoices)d" type="action"
attrs="{'invisible': [('recurring_invoices','!=',True)]}"
string="⇒ Show recurring invoices" class="oe_link"/>
</div>
<group col="4" attrs="{'invisible': [('recurring_invoices','!=',True)]}">
<field name="journal_id"/>
<field name="pricelist_id"/>
<label for="recurring_interval"/>
<div>
<field name="recurring_invoices" class="oe_inline"/>
<label for="recurring_invoices" />
<button name="recurring_create_invoice" type="object"
attrs="{'invisible': [('recurring_invoices','!=',True)]}"
string="Create invoices" class="oe_link"
groups="base.group_no_one"/>
<button name="%(contract.act_recurring_invoices)d" type="action"
attrs="{'invisible': [('recurring_invoices','!=',True)]}"
string="⇒ Show recurring invoices" class="oe_link"/>
</div>
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
<field name="journal_id"/>
<field name="pricelist_id"/>
<label for="recurring_interval"/>
<div>
<field name="recurring_interval" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/>
<field name="recurring_rule_type" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/>
</div>
<field name="date_start"/>
<field name="recurring_next_date"/>
</group>
<label for="recurring_invoice_line_ids" attrs="{'invisible': [('recurring_invoices','=',False)]}"/>
<div attrs="{'invisible': [('recurring_invoices','=',False)]}">
<field name="recurring_invoice_line_ids">
<tree string="Account Analytic Lines" editable="bottom">
<field name="product_id"/>
<field name="name"/>
<field name="quantity"/>
<field name="uom_id"/>
<field name="price_unit"/>
<field name="discount" groups="sale.group_discount_per_so_line" />
<field name="price_subtotal"/>
</tree>
</field>
<field name="recurring_interval" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/>
<field name="recurring_rule_type" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/>
</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>
</field>
</record>
<field name="recurring_invoicing_type"/>
<field name="date_start"/>
<field name="recurring_next_date"/>
</group>
<label for="recurring_invoice_line_ids" attrs="{'invisible': [('recurring_invoices','=',False)]}"/>
<div attrs="{'invisible': [('recurring_invoices','=',False)]}">
<field name="recurring_invoice_line_ids">
<tree string="Account Analytic Lines" editable="bottom">
<field name="product_id"/>
<field name="name"/>
<field name="quantity"/>
<field name="uom_id"/>
<field name="price_unit"/>
<field name="discount" groups="sale.group_discount_per_so_line" />
<field name="price_subtotal"/>
</tree>
</field>
</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>
</group>
</field>
</record>
<!-- Inherited Analytic Account list for contracts -->
<record id="view_account_analytic_account_journal_tree" model="ir.ui.view">
<field name="name">account.analytic.account.journal.list</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_list" />
<field name="arch" type="xml">
<field name="partner_id" position="before">
<field name="journal_id" groups="account.group_account_user"/>
</field>
<!-- Inherited Analytic Account list for contracts -->
<record id="view_account_analytic_account_journal_tree" model="ir.ui.view">
<field name="name">account.analytic.account.journal.list</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_list" />
<field name="arch" type="xml">
<field name="partner_id" position="before">
<field name="journal_id" groups="account.group_account_user"/>
</field>
</record>
</field>
</record>
<!-- Analytic Account search view for contract -->
<record id="view_account_analytic_account_contract_search" model="ir.ui.view">
<field name="name">account.analytic.account.contract.search</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_search"/>
<field name="arch" type="xml">
<field name="name" position="after">
<field name="journal_id"/>
<field name="pricelist_id"/>
<filter name="recurring_invoices" string="Recurring Invoices" domain="[('recurring_invoices','=',True)]"/>
<group expand="0" string="Group By...">
<filter string="Next Invoice" domain="[]" context="{'group_by':'recurring_next_date'}"/>
</group>
</field>
<!-- Analytic Account search view for contract -->
<record id="view_account_analytic_account_contract_search" model="ir.ui.view">
<field name="name">account.analytic.account.contract.search</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_search"/>
<field name="arch" type="xml">
<field name="name" position="after">
<field name="journal_id"/>
<field name="pricelist_id"/>
<filter name="recurring_invoices" string="Recurring Invoices" domain="[('recurring_invoices','=',True)]"/>
<group expand="0" string="Group By...">
<filter string="Next Invoice" domain="[]" context="{'group_by':'recurring_next_date'}"/>
</group>
</field>
</record>
</field>
</record>
<!-- Action Sales/Sales/Contracts -->
<record id="action_account_analytic_overdue_all" model="ir.actions.act_window">
<field name="name">Contracts</field>
<field name="res_model">account.analytic.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</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="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new contract.
</p>
</field>
</record>
<menuitem action="action_account_analytic_overdue_all" id="menu_action_account_analytic_overdue_all" sequence="8" parent="base.menu_sales"/>
<!-- Action Sales/Sales/Contracts -->
<record id="action_account_analytic_overdue_all" model="ir.actions.act_window">
<field name="name">Contracts</field>
<field name="res_model">account.analytic.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</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="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new contract.
</p>
</field>
</record>
<menuitem action="action_account_analytic_overdue_all" id="menu_action_account_analytic_overdue_all" sequence="99" parent="account.menu_finance_receivables"/>
</data>
</openerp>
</odoo>

39
contract_show_invoice/i18n/fr.po

@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract_show_invoice
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-02 17:07+0000\n"
"Last-Translator: <>\n"
"Language-Team: French (http://www.transifex.com/oca/OCA-contract-9-0/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: contract_show_invoice
#: model:ir.model.fields,field_description:contract_show_invoice.field_account_invoice_analytic_account_ids
msgid "Contracts"
msgstr ""
#. module: contract_show_invoice
#: model:ir.model,name:contract_show_invoice.model_account_invoice
msgid "Invoice"
msgstr "Facture"
#. module: contract_show_invoice
#: model:ir.actions.act_window,name:contract_show_invoice.act_analytic_invoices
#: model:ir.ui.view,arch_db:contract_show_invoice.account_analytic_account_button_invoice
msgid "Invoices"
msgstr ""
#. module: contract_show_invoice
#: model:ir.ui.view,arch_db:contract_show_invoice.account_analytic_account_button_invoice
msgid "Invoices related with this contract"
msgstr ""

39
contract_show_invoice/i18n/it.po

@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contract_show_invoice
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: contract (9.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-04-02 17:07+0000\n"
"Last-Translator: <>\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-contract-9-0/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: contract_show_invoice
#: model:ir.model.fields,field_description:contract_show_invoice.field_account_invoice_analytic_account_ids
msgid "Contracts"
msgstr ""
#. module: contract_show_invoice
#: model:ir.model,name:contract_show_invoice.model_account_invoice
msgid "Invoice"
msgstr "Fattura"
#. module: contract_show_invoice
#: model:ir.actions.act_window,name:contract_show_invoice.act_analytic_invoices
#: model:ir.ui.view,arch_db:contract_show_invoice.account_analytic_account_button_invoice
msgid "Invoices"
msgstr ""
#. module: contract_show_invoice
#: model:ir.ui.view,arch_db:contract_show_invoice.account_analytic_account_button_invoice
msgid "Invoices related with this contract"
msgstr ""

13
contract_variable_quantity/i18n/bg.po

@ -4,13 +4,14 @@
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Kaloyan Naumov <kaloyan@lumnus.net>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"PO-Revision-Date: 2016-09-11 02:47+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-09-17 09:01+0000\n"
"Last-Translator: Kaloyan Naumov <kaloyan@lumnus.net>, 2016\n"
"Language-Team: Bulgarian (https://www.transifex.com/oca/teams/23907/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -71,7 +72,7 @@ msgstr ""
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_code
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "Code"
msgstr ""
msgstr "Код"
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_create_uid
@ -125,7 +126,7 @@ msgstr "ID"
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula___last_update
msgid "Last Modified on"
msgstr ""
msgstr "Последно обновено на"
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_write_uid
@ -141,7 +142,7 @@ msgstr "Последно обновено на"
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_name
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "Name"
msgstr ""
msgstr "Име"
#. module: contract_variable_quantity
#: code:addons/contract_variable_quantity/models/contract.py:66

47
contract_variable_quantity/i18n/hr_HR.po

@ -3,13 +3,14 @@
# * contract_variable_quantity
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Bole <bole@dajmi5.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-11 02:47+0000\n"
"PO-Revision-Date: 2016-09-11 02:47+0000\n"
"POT-Creation-Date: 2016-09-17 09:01+0000\n"
"PO-Revision-Date: 2016-09-17 09:01+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2016\n"
"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/hr_HR/)\n"
"MIME-Version: 1.0\n"
@ -25,37 +26,40 @@ msgid ""
" result = env['product.product'].search_count([('sale_ok', '=', True)])\n"
" </code>"
msgstr ""
"<code>\n"
" result = env['product.product'].search_count([('sale_ok', '=', True)])\n"
" </code>"
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "<i>context</i>: Current context dictionary."
msgstr ""
msgstr "<i>context</i>: Trenutni context dictionary."
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "<i>contract</i>: Contract whose line belongs to."
msgstr ""
msgstr "<i>contract</i>: Ugovor čije linije pripadaju ovdje."
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "<i>env</i>: Environment variable for getting other models."
msgstr ""
msgstr "<i>env</i>: Environment variabla za dohvaćanje drugih modela."
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "<i>invoice</i>: Invoice (header) being created."
msgstr ""
msgstr "<i>invoice</i>: Kreirani račun (zaglavlje)."
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid ""
"<i>line</i>: Contract recurring invoice line that triggers this formula."
msgstr ""
msgstr "<i>line</i>: Stavka ponavljajućeg računa koja koristi ovu formulu."
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "<i>user</i>: Current user."
msgstr ""
msgstr "<i>user</i>: trenutni korisnik."
#. module: contract_variable_quantity
#: model:ir.model,name:contract_variable_quantity.model_account_analytic_account
@ -65,7 +69,7 @@ msgstr "Konto analitike"
#. module: contract_variable_quantity
#: model:ir.actions.act_window,help:contract_variable_quantity.action_contract_quantity_formula
msgid "Click to create a new formula for variable quantities."
msgstr ""
msgstr "Kliknite za kreiranje nove formule promjenivih količina."
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_code
@ -95,27 +99,29 @@ msgid ""
"Error evaluating code.\n"
"Details: %s"
msgstr ""
"Greška pri izvršavanju koda.\n"
"Detalji: %s"
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "Example of Python code"
msgstr ""
msgstr "Primjer Python koda"
#. module: contract_variable_quantity
#: selection:account.analytic.invoice.line,qty_type:0
msgid "Fixed quantity"
msgstr ""
msgstr "Fiknsa količina"
#. module: contract_variable_quantity
#: model:ir.actions.act_window,name:contract_variable_quantity.action_contract_quantity_formula
#: model:ir.ui.menu,name:contract_variable_quantity.menu_contract_quantity_formula
msgid "Formulas (quantity)"
msgstr ""
msgstr "Formula (količine)"
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "Help with Python expressions."
msgstr ""
msgstr "Pomoć u Python izrazima"
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_contract_line_qty_formula_id
@ -147,27 +153,27 @@ msgstr "Naziv"
#: code:addons/contract_variable_quantity/models/contract.py:66
#, python-format
msgid "No valid result returned."
msgstr ""
msgstr "Nije vraćen nijedan valjani rezultat."
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_account_analytic_invoice_line_qty_formula_id
msgid "Qty. formula"
msgstr ""
msgstr "Formula količine"
#. module: contract_variable_quantity
#: model:ir.model.fields,field_description:contract_variable_quantity.field_account_analytic_invoice_line_qty_type
msgid "Qty. type"
msgstr ""
msgstr "Tip količine"
#. module: contract_variable_quantity
#: selection:account.analytic.invoice.line,qty_type:0
msgid "Variable quantity"
msgstr ""
msgstr "Promjenjiva količina"
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
msgid "You can use these variables to compute your formula:"
msgstr ""
msgstr "Za izračun količine možete koristiti ove varijable:"
#. module: contract_variable_quantity
#: model:ir.ui.view,arch_db:contract_variable_quantity.view_contract_line_qty_formula_form
@ -175,6 +181,9 @@ msgid ""
"You have to insert valid Python code block that stores at some moment a "
"float/integer value of the quantity to invoice in the variable 'result'."
msgstr ""
"Morate upisati valjani blok python koda koji se u određenom trenutku "
"izvršava i vraća cjelobrojnu/decimalnu vrijednost kao rezultat za količine u"
" stavkama računa "
#. module: contract_variable_quantity
#: model:ir.model,name:contract_variable_quantity.model_account_analytic_invoice_line
@ -184,4 +193,4 @@ msgstr "account.analytic.invoice.line"
#. module: contract_variable_quantity
#: model:ir.model,name:contract_variable_quantity.model_contract_line_qty_formula
msgid "contract.line.qty.formula"
msgstr ""
msgstr "contract.line.qty.formula"

2
contract_variable_quantity/tests/test_contract_variable_quantity.py

@ -54,7 +54,7 @@ class TestContractVariableQuantity(common.SavepointCase):
self.formula.code = "user.id"
def test_check_variable_quantity(self):
self.contract._create_invoice(self.contract)
self.contract._create_invoice()
invoice = self.env['account.invoice'].search(
[('contract_id', '=', self.contract.id)])
self.assertEqual(invoice.invoice_line_ids[0].quantity, 12)
Loading…
Cancel
Save