[tryton-debian-vcs] tryton-modules-project-invoice branch debian updated. debian/3.6.1-1-2-ge7f50b1
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Wed Nov 11 11:26:26 UTC 2015
The following commit has been merged in the debian branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-project-invoice.git;a=commitdiff;h=debian/3.6.1-1-2-ge7f50b1
commit e7f50b157ce8c8ed009968d8192ed4885f633b7b
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Wed Nov 11 12:11:14 2015 +0100
Merging upstream version 3.8.0.
diff --git a/CHANGELOG b/CHANGELOG
index 61b8263..3f5cb01 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
-Version 3.6.1 - 2015-07-13
+Version 3.8.0 - 2015-11-02
* Bug fixes (see mercurial logs for details)
+* Add progress invoice method
Version 3.6.0 - 2015-04-20
* Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index e070cc5..7977984 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond_project_invoice
-Version: 3.6.1
+Version: 3.8.0
Summary: Tryton module to invoice projects
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/3.6/
+Download-URL: http://downloads.tryton.org/3.8/
Description: trytond_project_invoice
=======================
@@ -60,6 +60,9 @@ Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
+Classifier: Natural Language :: Hungarian
+Classifier: Natural Language :: Italian
+Classifier: Natural Language :: Portuguese (Brazilian)
Classifier: Natural Language :: Russian
Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
diff --git a/__init__.py b/__init__.py
index 67b38a4..267e299 100644
--- a/__init__.py
+++ b/__init__.py
@@ -4,12 +4,15 @@
from trytond.pool import Pool
from .work import *
from .timesheet import *
+from .invoice import *
def register():
Pool.register(
Work,
+ WorkInvoicedProgress,
TimesheetLine,
+ InvoiceLine,
module='project_invoice', type_='model')
Pool.register(
OpenInvoice,
diff --git a/doc/index.rst b/doc/index.rst
index 46bc9c5..ea65210 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -7,5 +7,7 @@ The methods are:
- Manual: Tryton doesn't create any invoice.
- On Effort: The invoices are created based on the *Effort* hours for all
children works in state *Done*.
+- On Progress: The invoices are create proportionally to the *Progress* of the
+ *Effort* hours of each children work.
- On Timesheet: The invoices are created based on the timesheets encoded on all
children works.
diff --git a/invoice.py b/invoice.py
new file mode 100644
index 0000000..19986c8
--- /dev/null
+++ b/invoice.py
@@ -0,0 +1,29 @@
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
+from trytond.pool import PoolMeta, Pool
+from trytond.transaction import Transaction
+from trytond.tools import grouped_slice
+
+__all__ = ['InvoiceLine']
+
+
+class InvoiceLine:
+ __metaclass__ = PoolMeta
+ __name__ = 'account.invoice.line'
+
+ @classmethod
+ def delete(cls, lines):
+ pool = Pool()
+ WorkInvoicedProgress = pool.get('project.work.invoiced_progress')
+
+ # Delete progress using root to skip access rule
+ progress = []
+ for sub_ids in grouped_slice([l.id for l in lines]):
+ progress += WorkInvoicedProgress.search([
+ ('invoice_line', 'in', sub_ids),
+ ])
+ if progress:
+ with Transaction().set_user(0):
+ WorkInvoicedProgress.delete(progress)
+
+ super(InvoiceLine, cls).delete(lines)
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
new file mode 100644
index 0000000..5f320d4
--- /dev/null
+++ b/locale/bg_BG.po
@@ -0,0 +1,159 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:project.work:"
+msgid "There is no list price on work \"%s\"."
+msgstr ""
+
+msgctxt "error:project.work:"
+msgid "There is no party on work \"%s\"."
+msgstr ""
+
+msgctxt "error:project.work:"
+msgid "There is no product on work \"%s\"."
+msgstr ""
+
+msgctxt "error:timesheet.line:"
+msgid "You can not delete invoiced line."
+msgstr ""
+
+msgctxt "error:timesheet.line:"
+msgid "You can not modify invoiced line."
+msgstr ""
+
+msgctxt "field:project.work,duration_to_invoice:"
+msgid "Duration to Invoice"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:project.work,invoice_line:"
+msgid "Invoice Line"
+msgstr "Ред от фактура"
+
+#, fuzzy
+msgctxt "field:project.work,invoice_method:"
+msgid "Invoice Method"
+msgstr "Начин на фактуриране"
+
+msgctxt "field:project.work,invoiced_amount:"
+msgid "Invoiced Amount"
+msgstr ""
+
+msgctxt "field:project.work,invoiced_duration:"
+msgid "Invoiced Duration"
+msgstr ""
+
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:project.work,project_invoice_method:"
+msgid "Invoice Method"
+msgstr "Начин на фактуриране"
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:timesheet.line,invoice_line:"
+msgid "Invoice Line"
+msgstr "Ред от фактура"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
+msgid "Timesheet Lines"
+msgstr "Редове от график"
+
+#, fuzzy
+msgctxt "model:ir.action,name:open_invoice"
+msgid "Invoices"
+msgstr "Фактури"
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "model:res.group,name:group_project_invoice"
+msgid "Project Invoice"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:project.work,invoice_method:"
+msgid "Manual"
+msgstr "Ръчно"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Effort"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Timesheet"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "Manual"
+msgstr "Ръчно"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Effort"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Timesheet"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
+
+msgctxt "view:project.work:"
+msgid "Invoice"
+msgstr ""
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index a098c75..9b2bf65 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr "Temps facturat"
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Progrés facturat"
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Mètode de facturació"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Data creació"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Usuari creació"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Temps"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Línia de factura"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Treball"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Data modificació"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Usuari modificació"
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Línia de factura"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Factures"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Progrés de treballs facturats"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facturació de projectes"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Per l'esforç estimat"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Segons el progrés"
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Per les hores realitzades"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Per l'esforç estimat"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Segons el progrés"
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Per les hores realitzades"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Progrés del treball facturat"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Progressos del treball facturat"
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Factura"
diff --git a/locale/es_CO.po b/locale/cs_CZ.po
similarity index 52%
copy from locale/es_CO.po
copy to locale/cs_CZ.po
index 54959c2..846a933 100644
--- a/locale/es_CO.po
+++ b/locale/cs_CZ.po
@@ -4,88 +4,148 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hay lista de precios en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hay tercero en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "No hay producto en la tarea \"%s\"."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
-msgstr "No puede eliminar líneas facturadas."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not modify invoiced line."
-msgstr "No puede modificar una línea facurada."
+msgstr ""
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Duración de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Valor Facturado"
+msgstr ""
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
-msgstr "Lineas de Registro de Tiempo"
+msgstr ""
msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
-msgstr "Facturas"
+msgstr ""
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
-msgstr "Facturación de Proyecto"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 4283736..a6d7d44 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -12,7 +12,7 @@ msgstr "Fehlende Partei für Aufgabe \"%s\"."
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "Fehlender Artikel für Aufgabe \"%s\"."
+msgstr "Fehlende Variante für Aufgabe \"%s\"."
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
@@ -24,7 +24,7 @@ msgstr "Eine abgerechnete Zeile kann nicht geändert werden."
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Fakturierbarer Zeitraum"
+msgstr "Fakturierbare Zeit"
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
@@ -40,12 +40,52 @@ msgstr "Abgerechneter Betrag"
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
-msgstr "Fakturierter Zeitraum"
+msgstr "Fakturierte Zeit"
+
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Fakturierter Forstschritt"
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Methode Rechnungsstellung"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Zeitaufwand"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Rechnungsposition"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Tätigkeit"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Letzte Änderung durch"
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Rechnungsposition"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Rechnungsausgang"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Nach Forstschritt fakturierte Aufgabe"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Projekt Fakturierung"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Nach veranschlagtem Aufwand"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Nach Fortschritt"
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Nach erfasstem Aufwand"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Nach veranschlagtem Aufwand"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Nach Fortschritt"
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Nach erfasstem Aufwand"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Nach Forstschritt fakturierte Aufgabe"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Nach Forstschritt fakturierte Aufgaben"
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Rechnung erstellen"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index ada2fb7..98ab661 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr "Duración facturada"
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Progreso facturado"
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Método de facturación"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Esfuerzo"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Línea de factura"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Actividad"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Línea de factura"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Facturas"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Progreso facturado de actividad"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facturación de proyectos"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Por el esfuerzo estimado"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Según progreso"
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Por las horas realizadas"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Por el esfuerzo estimado"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Según progreso"
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Por las horas realizadas"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Progreso facturado de actividad"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Progresos facturados de actividad"
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Factura"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 54959c2..b13dc79 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Método de Facturación"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Línea de Factura"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Facturas"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facturación de Proyecto"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Por Esfuerzo"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Por Registro de Tiempo"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Por Esfuerzo"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Por Registro de Tiempo"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Factura"
diff --git a/locale/es_EC.po b/locale/es_EC.po
index 045b42f..98c3108 100644
--- a/locale/es_EC.po
+++ b/locale/es_EC.po
@@ -4,7 +4,7 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hay ninguna lista de precios en el trabajo \"%s\"."
+msgstr "No hay ningún precio en el trabajo \"%s\"."
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
@@ -32,23 +32,63 @@ msgstr "Línea de factura"
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr "Método de facturación"
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Valor Facturado"
+msgstr "Importe facturado"
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
-msgstr "Duración Facturada"
+msgstr "Duración facturada"
+
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Progreso facturado"
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr "Método de facturación"
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Fecha de creación"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Creado por usuario"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Esfuerzo"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Línea de factura"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Trabajo"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Fecha de modificación"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Modificado por usuario"
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr "Línea de factura"
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Facturas"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Progreso facturado de trabajo"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facturación de Proyectos"
@@ -68,11 +112,15 @@ msgstr "Manual"
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo Estimado"
+msgstr "Por el esfuerzo estimado"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Según el progreso"
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Por Trabajo Realizado"
+msgstr "Por las horas realizadas"
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
@@ -80,11 +128,23 @@ msgstr "Manual"
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo Estimado"
+msgstr "Por esfuerzo estimado"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Según el progreso"
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Por Trabajo Realizado"
+msgstr "Por las horas realizadas"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Progreso facturado de trabajo"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Progresos facturados de trabajo"
msgctxt "view:project.work:"
msgid "Invoice"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index a38f78d..0d26893 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr "Tiempo facturado"
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Progreso facturado"
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Método de facturación"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Tiempo"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Línea de factura"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Trabajo"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Línea de factura"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Facturas"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Progreso de trabajos facturados"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facturación de proyectos"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Por el esfuerzo estimado"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Según el progreso"
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Por las horas realizadas"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Por el esfuerzo estimado"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Según el progreso"
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Por las horas realizadas"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Progreso del trabajo facturado"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Progresos del trabajo facturado"
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Factura"
diff --git a/locale/es_ES.po b/locale/es_MX.po
similarity index 62%
copy from locale/es_ES.po
copy to locale/es_MX.po
index a38f78d..95c828b 100644
--- a/locale/es_ES.po
+++ b/locale/es_MX.po
@@ -8,7 +8,7 @@ msgstr "No hay ningún precio en el trabajo \"%s\"."
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hay ningún tercero en el trabajo \"%s\"."
+msgstr "No hay ningún entidad en el trabajo \"%s\"."
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr "Tiempo facturado"
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Método de facturación"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Línea de factura"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Facturas"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facturación de proyectos"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Por el esfuerzo estimado"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Por las horas realizadas"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Por el esfuerzo estimado"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Por las horas realizadas"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
+
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index f84995f..33905db 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr "Durée facturée"
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Progression facturée"
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Méthode de facturation"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Effort"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Ligne de facture"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Travail"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Ligne de facture"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Factures"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Progression facturée de travail"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Facture projet"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Sur l'effort"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Sur progrès"
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Sur feuille de présence"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Sur l'effort"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Sur progrès"
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Sur feuille de présence"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Progression facturée de travail"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Progressions facturées de travail"
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Facture"
diff --git a/locale/es_CO.po b/locale/hu_HU.po
similarity index 52%
copy from locale/es_CO.po
copy to locale/hu_HU.po
index 54959c2..846a933 100644
--- a/locale/es_CO.po
+++ b/locale/hu_HU.po
@@ -4,88 +4,148 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hay lista de precios en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hay tercero en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "No hay producto en la tarea \"%s\"."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
-msgstr "No puede eliminar líneas facturadas."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not modify invoiced line."
-msgstr "No puede modificar una línea facurada."
+msgstr ""
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Duración de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Valor Facturado"
+msgstr ""
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
-msgstr "Lineas de Registro de Tiempo"
+msgstr ""
msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
-msgstr "Facturas"
+msgstr ""
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
-msgstr "Facturación de Proyecto"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/es_CO.po b/locale/it_IT.po
similarity index 52%
copy from locale/es_CO.po
copy to locale/it_IT.po
index 54959c2..846a933 100644
--- a/locale/es_CO.po
+++ b/locale/it_IT.po
@@ -4,88 +4,148 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hay lista de precios en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hay tercero en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "No hay producto en la tarea \"%s\"."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
-msgstr "No puede eliminar líneas facturadas."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not modify invoiced line."
-msgstr "No puede modificar una línea facurada."
+msgstr ""
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Duración de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Valor Facturado"
+msgstr ""
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
-msgstr "Lineas de Registro de Tiempo"
+msgstr ""
msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
-msgstr "Facturas"
+msgstr ""
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
-msgstr "Facturación de Proyecto"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/es_CO.po b/locale/ja_JP.po
similarity index 52%
copy from locale/es_CO.po
copy to locale/ja_JP.po
index 54959c2..846a933 100644
--- a/locale/es_CO.po
+++ b/locale/ja_JP.po
@@ -4,88 +4,148 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hay lista de precios en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hay tercero en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "No hay producto en la tarea \"%s\"."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
-msgstr "No puede eliminar líneas facturadas."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not modify invoiced line."
-msgstr "No puede modificar una línea facurada."
+msgstr ""
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Duración de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Valor Facturado"
+msgstr ""
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
-msgstr "Lineas de Registro de Tiempo"
+msgstr ""
msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
-msgstr "Facturas"
+msgstr ""
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
-msgstr "Facturación de Proyecto"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/es_CO.po b/locale/lt_LT.po
similarity index 52%
copy from locale/es_CO.po
copy to locale/lt_LT.po
index 54959c2..846a933 100644
--- a/locale/es_CO.po
+++ b/locale/lt_LT.po
@@ -4,88 +4,148 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hay lista de precios en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hay tercero en la tarea \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "No hay producto en la tarea \"%s\"."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
-msgstr "No puede eliminar líneas facturadas."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not modify invoiced line."
-msgstr "No puede modificar una línea facurada."
+msgstr ""
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Duración de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Valor Facturado"
+msgstr ""
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Método de Facturación"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línea de Factura"
+msgstr ""
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
-msgstr "Lineas de Registro de Tiempo"
+msgstr ""
msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
-msgstr "Facturas"
+msgstr ""
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
-msgstr "Facturación de Proyecto"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Por Esfuerzo"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Por Registro de Tiempo"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/ca_ES.po b/locale/nl_NL.po
similarity index 50%
copy from locale/ca_ES.po
copy to locale/nl_NL.po
index a098c75..05db6aa 100644
--- a/locale/ca_ES.po
+++ b/locale/nl_NL.po
@@ -4,88 +4,156 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "No hi ha cap preu al treball \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "No hi ha cap tercer al treball \"%s\"."
+msgstr ""
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "No hi ha cap producte al treball \"%s\"."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
-msgstr "No podeu eliminar una línia facturada."
+msgstr ""
msgctxt "error:timesheet.line:"
msgid "You can not modify invoiced line."
-msgstr "No podeu modificar una línia facturada."
+msgstr ""
msgctxt "field:project.work,duration_to_invoice:"
msgid "Duration to Invoice"
-msgstr "Temps a facturar"
+msgstr ""
+#, fuzzy
msgctxt "field:project.work,invoice_line:"
msgid "Invoice Line"
-msgstr "Línia de factura"
+msgstr "Factuurregel"
+#, fuzzy
msgctxt "field:project.work,invoice_method:"
msgid "Invoice Method"
-msgstr "Mètode de facturació"
+msgstr "Factuur afhandeling"
msgctxt "field:project.work,invoiced_amount:"
msgid "Invoiced Amount"
-msgstr "Import facturat"
+msgstr ""
msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
-msgstr "Temps facturat"
+msgstr ""
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
+#, fuzzy
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
-msgstr "Mètode de facturació"
+msgstr "Factuur afhandeling"
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
+
+#, fuzzy
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
-msgstr "Línia de factura"
+msgstr "Factuurregel"
+#, fuzzy
msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
msgid "Timesheet Lines"
-msgstr "Línies del full de treball"
+msgstr "Tijdregistratieregels"
+#, fuzzy
msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
-msgstr "Factures"
+msgstr "Verkoopfacturen"
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
-msgstr "Facturació de projectes"
+msgstr ""
+#, fuzzy
msgctxt "selection:project.work,invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr "Handmatig"
msgctxt "selection:project.work,invoice_method:"
msgid "On Effort"
-msgstr "Per l'esforç estimat"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
-msgstr "Per les hores realitzades"
+msgstr ""
+#, fuzzy
msgctxt "selection:project.work,project_invoice_method:"
msgid "Manual"
-msgstr "Manual"
+msgstr "Handmatig"
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Effort"
-msgstr "Per l'esforç estimat"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
-msgstr "Per les hores realitzades"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
msgctxt "view:project.work:"
msgid "Invoice"
-msgstr "Factura"
+msgstr ""
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
new file mode 100644
index 0000000..d72a593
--- /dev/null
+++ b/locale/pt_BR.po
@@ -0,0 +1,151 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:project.work:"
+msgid "There is no list price on work \"%s\"."
+msgstr "Não há preço para a tarefa \"%s\"."
+
+msgctxt "error:project.work:"
+msgid "There is no party on work \"%s\"."
+msgstr "Não há pessoa na tarefa \"%s\"."
+
+msgctxt "error:project.work:"
+msgid "There is no product on work \"%s\"."
+msgstr "Não há produto na tarefa \"%s\"."
+
+msgctxt "error:timesheet.line:"
+msgid "You can not delete invoiced line."
+msgstr "Você não pode apagar uma linha já faturada."
+
+msgctxt "error:timesheet.line:"
+msgid "You can not modify invoiced line."
+msgstr "Você não pode modificar uma linha já faturada."
+
+msgctxt "field:project.work,duration_to_invoice:"
+msgid "Duration to Invoice"
+msgstr "Tempo a Faturar"
+
+msgctxt "field:project.work,invoice_line:"
+msgid "Invoice Line"
+msgstr "Linha da Fatura"
+
+msgctxt "field:project.work,invoice_method:"
+msgid "Invoice Method"
+msgstr "Método de Fatura"
+
+msgctxt "field:project.work,invoiced_amount:"
+msgid "Invoiced Amount"
+msgstr "Montante de Fatura"
+
+msgctxt "field:project.work,invoiced_duration:"
+msgid "Invoiced Duration"
+msgstr "Tempo Faturado"
+
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Progresso Faturado"
+
+msgctxt "field:project.work,project_invoice_method:"
+msgid "Invoice Method"
+msgstr "Método de Faturamento"
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Data de criação"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Criado por"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Esforço"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Linha de Fatura"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Nome"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Tarefa"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Data de edição"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Editado por"
+
+msgctxt "field:timesheet.line,invoice_line:"
+msgid "Invoice Line"
+msgstr "Linha de Fatura"
+
+msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
+msgid "Timesheet Lines"
+msgstr "Linhas de Horário de Trabalho"
+
+msgctxt "model:ir.action,name:open_invoice"
+msgid "Invoices"
+msgstr "Faturas"
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Progresso Faturado de Tarefas"
+
+msgctxt "model:res.group,name:group_project_invoice"
+msgid "Project Invoice"
+msgstr "Faturar Projeto"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "Manual"
+msgstr "Manual"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Effort"
+msgstr "Por esforço estimado"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Em Progesso"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Timesheet"
+msgstr "Pelas Horas Utilizadas"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "Manual"
+msgstr "Manual"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Effort"
+msgstr "Por Esforço"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Sobre o Progresso"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Timesheet"
+msgstr "Sobre o Horário de Trabalho"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Progresso Faturado do Trabalho"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Progresso Faturado do Trabalho"
+
+msgctxt "view:project.work:"
+msgid "Invoice"
+msgstr "Fatura"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
new file mode 100644
index 0000000..72a7716
--- /dev/null
+++ b/locale/ru_RU.po
@@ -0,0 +1,159 @@
+#
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "error:project.work:"
+msgid "There is no list price on work \"%s\"."
+msgstr ""
+
+msgctxt "error:project.work:"
+msgid "There is no party on work \"%s\"."
+msgstr ""
+
+msgctxt "error:project.work:"
+msgid "There is no product on work \"%s\"."
+msgstr ""
+
+msgctxt "error:timesheet.line:"
+msgid "You can not delete invoiced line."
+msgstr ""
+
+msgctxt "error:timesheet.line:"
+msgid "You can not modify invoiced line."
+msgstr ""
+
+msgctxt "field:project.work,duration_to_invoice:"
+msgid "Duration to Invoice"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:project.work,invoice_line:"
+msgid "Invoice Line"
+msgstr "Строка инвойса"
+
+#, fuzzy
+msgctxt "field:project.work,invoice_method:"
+msgid "Invoice Method"
+msgstr "Метод инвойса"
+
+msgctxt "field:project.work,invoiced_amount:"
+msgid "Invoiced Amount"
+msgstr ""
+
+msgctxt "field:project.work,invoiced_duration:"
+msgid "Invoiced Duration"
+msgstr ""
+
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:project.work,project_invoice_method:"
+msgid "Invoice Method"
+msgstr "Метод инвойса"
+
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:timesheet.line,invoice_line:"
+msgid "Invoice Line"
+msgstr "Строка инвойса"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_timesheet_line_form_invoice"
+msgid "Timesheet Lines"
+msgstr "Строки табеля"
+
+#, fuzzy
+msgctxt "model:ir.action,name:open_invoice"
+msgid "Invoices"
+msgstr "Инвойсы"
+
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "model:res.group,name:group_project_invoice"
+msgid "Project Invoice"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:project.work,invoice_method:"
+msgid "Manual"
+msgstr "Ручной"
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Effort"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,invoice_method:"
+msgid "On Timesheet"
+msgstr ""
+
+#, fuzzy
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "Manual"
+msgstr "Ручной"
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Effort"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr ""
+
+msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Timesheet"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr ""
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr ""
+
+msgctxt "view:project.work:"
+msgid "Invoice"
+msgstr ""
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index ffb5092..7eee1bd 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -4,15 +4,15 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "error:project.work:"
msgid "There is no list price on work \"%s\"."
-msgstr "Pri dejavnosti \"%s\" ni cenika."
+msgstr "Pri nalogi \"%s\" ni cenika."
msgctxt "error:project.work:"
msgid "There is no party on work \"%s\"."
-msgstr "Pri dejavnosti \"%s\" ni partnerja."
+msgstr "Pri nalogi \"%s\" ni partnerja."
msgctxt "error:project.work:"
msgid "There is no product on work \"%s\"."
-msgstr "Pri dejavnosti \"%s\" ni izdelka."
+msgstr "Pri nalogi \"%s\" ni izdelka."
msgctxt "error:timesheet.line:"
msgid "You can not delete invoiced line."
@@ -42,10 +42,50 @@ msgctxt "field:project.work,invoiced_duration:"
msgid "Invoiced Duration"
msgstr "Zaračunan porabljen čas"
+msgctxt "field:project.work,invoiced_progress:"
+msgid "Invoiced Progress"
+msgstr "Zaračunano opravljeno delo"
+
msgctxt "field:project.work,project_invoice_method:"
msgid "Invoice Method"
msgstr "Način obračuna"
+msgctxt "field:project.work.invoiced_progress,create_date:"
+msgid "Create Date"
+msgstr "Izdelano"
+
+msgctxt "field:project.work.invoiced_progress,create_uid:"
+msgid "Create User"
+msgstr "Izdelal"
+
+msgctxt "field:project.work.invoiced_progress,effort_duration:"
+msgid "Effort"
+msgstr "Porabljen čas"
+
+msgctxt "field:project.work.invoiced_progress,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:project.work.invoiced_progress,invoice_line:"
+msgid "Invoice Line"
+msgstr "Postavka računa"
+
+msgctxt "field:project.work.invoiced_progress,rec_name:"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "field:project.work.invoiced_progress,work:"
+msgid "Work"
+msgstr "Naloga"
+
+msgctxt "field:project.work.invoiced_progress,write_date:"
+msgid "Write Date"
+msgstr "Zapisano"
+
+msgctxt "field:project.work.invoiced_progress,write_uid:"
+msgid "Write User"
+msgstr "Zapisal"
+
msgctxt "field:timesheet.line,invoice_line:"
msgid "Invoice Line"
msgstr "Postavka računa"
@@ -58,6 +98,10 @@ msgctxt "model:ir.action,name:open_invoice"
msgid "Invoices"
msgstr "Računi"
+msgctxt "model:project.work.invoiced_progress,name:"
+msgid "Work Invoiced Progress"
+msgstr "Zaračunano opravljeno delo"
+
msgctxt "model:res.group,name:group_project_invoice"
msgid "Project Invoice"
msgstr "Projekt - obračun"
@@ -71,6 +115,10 @@ msgid "On Effort"
msgstr "Po oceni dela"
msgctxt "selection:project.work,invoice_method:"
+msgid "On Progress"
+msgstr "Po napredku"
+
+msgctxt "selection:project.work,invoice_method:"
msgid "On Timesheet"
msgstr "Po dejanskem delu"
@@ -83,9 +131,21 @@ msgid "On Effort"
msgstr "Po oceni dela"
msgctxt "selection:project.work,project_invoice_method:"
+msgid "On Progress"
+msgstr "Po napredku"
+
+msgctxt "selection:project.work,project_invoice_method:"
msgid "On Timesheet"
msgstr "Po dejanskem delu"
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progress"
+msgstr "Zaračunano opravljeno delo"
+
+msgctxt "view:project.work.invoiced_progress:"
+msgid "Work Invoiced Progresses"
+msgstr "Zaračunana opravljena dela"
+
msgctxt "view:project.work:"
msgid "Invoice"
msgstr "Račun"
diff --git a/setup.py b/setup.py
index bcd7b2b..f0e34c0 100644
--- a/setup.py
+++ b/setup.py
@@ -87,6 +87,9 @@ setup(name=name,
'Natural Language :: English',
'Natural Language :: French',
'Natural Language :: German',
+ 'Natural Language :: Hungarian',
+ 'Natural Language :: Italian',
+ 'Natural Language :: Portuguese (Brazilian)',
'Natural Language :: Russian',
'Natural Language :: Slovenian',
'Natural Language :: Spanish',
diff --git a/tests/scenario_project_invoice_effort.rst b/tests/scenario_project_invoice_effort.rst
index 46ccbcf..4dd1d22 100644
--- a/tests/scenario_project_invoice_effort.rst
+++ b/tests/scenario_project_invoice_effort.rst
@@ -23,12 +23,12 @@ Create database::
Install project_invoice::
- >>> Module = Model.get('ir.module.module')
+ >>> Module = Model.get('ir.module')
>>> module, = Module.find([
... ('name', '=', 'project_invoice'),
... ])
>>> module.click('install')
- >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+ >>> Wizard('ir.module.install_upgrade').execute('upgrade')
Create company::
@@ -116,6 +116,7 @@ Create a Project::
>>> ProjectWork = Model.get('project.work')
>>> TimesheetWork = Model.get('timesheet.work')
>>> project = ProjectWork()
+ >>> project.name = 'Test effort'
>>> work = TimesheetWork()
>>> work.name = 'Test effort'
>>> work.save()
@@ -126,6 +127,7 @@ Create a Project::
>>> project.product = product
>>> project.effort_duration = datetime.timedelta(hours=1)
>>> task = ProjectWork()
+ >>> task.name = 'Task 1'
>>> work = TimesheetWork()
>>> work.name = 'Task 1'
>>> work.save()
diff --git a/tests/scenario_project_invoice_effort.rst b/tests/scenario_project_invoice_progress.rst
similarity index 87%
copy from tests/scenario_project_invoice_effort.rst
copy to tests/scenario_project_invoice_progress.rst
index 46ccbcf..30c1c92 100644
--- a/tests/scenario_project_invoice_effort.rst
+++ b/tests/scenario_project_invoice_progress.rst
@@ -1,6 +1,6 @@
-===============================
-Project Invoice Effort Scenario
-===============================
+=================================
+Project Invoice Progress Scenario
+=================================
Imports::
@@ -23,12 +23,12 @@ Create database::
Install project_invoice::
- >>> Module = Model.get('ir.module.module')
+ >>> Module = Model.get('ir.module')
>>> module, = Module.find([
... ('name', '=', 'project_invoice'),
... ])
>>> module.click('install')
- >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+ >>> Wizard('ir.module.install_upgrade').execute('upgrade')
Create company::
@@ -116,16 +116,18 @@ Create a Project::
>>> ProjectWork = Model.get('project.work')
>>> TimesheetWork = Model.get('timesheet.work')
>>> project = ProjectWork()
+ >>> project.name = 'Test effort'
>>> work = TimesheetWork()
>>> work.name = 'Test effort'
>>> work.save()
>>> project.work = work
>>> project.type = 'project'
>>> project.party = customer
- >>> project.project_invoice_method = 'effort'
+ >>> project.project_invoice_method = 'progress'
>>> project.product = product
>>> project.effort_duration = datetime.timedelta(hours=1)
>>> task = ProjectWork()
+ >>> task.name = 'Task 1'
>>> work = TimesheetWork()
>>> work.name = 'Task 1'
>>> work.save()
@@ -145,11 +147,11 @@ Check project duration::
>>> project.duration_to_invoice
datetime.timedelta(0)
>>> project.invoiced_amount
- Decimal('0')
+ Decimal('0.00')
-Do 1 task::
+Do 50% of task::
- >>> task.state = 'done'
+ >>> task.progress = 0.5
>>> task.save()
Check project duration::
@@ -158,44 +160,46 @@ Check project duration::
>>> project.invoiced_duration
datetime.timedelta(0)
>>> project.duration_to_invoice
- datetime.timedelta(0, 18000)
+ datetime.timedelta(0, 9000)
>>> project.invoiced_amount
- Decimal('0')
+ Decimal('0.00')
Invoice project::
>>> config.user = project_invoice_user.id
>>> project.click('invoice')
>>> project.invoiced_duration
- datetime.timedelta(0, 18000)
+ datetime.timedelta(0, 9000)
>>> project.duration_to_invoice
datetime.timedelta(0)
>>> project.invoiced_amount
- Decimal('100.00')
+ Decimal('50.00')
-Do project::
+Do 75% of task and 100% of project::
>>> config.user = project_user.id
- >>> project.state = 'done'
+ >>> task.progress = 0.75
+ >>> task.save()
+ >>> project.progress = 1.
>>> project.save()
Check project duration::
>>> project.reload()
>>> project.invoiced_duration
- datetime.timedelta(0, 18000)
+ datetime.timedelta(0, 9000)
>>> project.duration_to_invoice
- datetime.timedelta(0, 3600)
+ datetime.timedelta(0, 8100)
>>> project.invoiced_amount
- Decimal('100.00')
+ Decimal('50.00')
Invoice again project::
>>> config.user = project_invoice_user.id
>>> project.click('invoice')
>>> project.invoiced_duration
- datetime.timedelta(0, 21600)
+ datetime.timedelta(0, 17100)
>>> project.duration_to_invoice
datetime.timedelta(0)
>>> project.invoiced_amount
- Decimal('120.00')
+ Decimal('95.00')
diff --git a/tests/scenario_project_invoice_timesheet.rst b/tests/scenario_project_invoice_timesheet.rst
index 351963f..2a51769 100644
--- a/tests/scenario_project_invoice_timesheet.rst
+++ b/tests/scenario_project_invoice_timesheet.rst
@@ -23,12 +23,12 @@ Create database::
Install project_invoice::
- >>> Module = Model.get('ir.module.module')
+ >>> Module = Model.get('ir.module')
>>> module, = Module.find([
... ('name', '=', 'project_invoice'),
... ])
>>> module.click('install')
- >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+ >>> Wizard('ir.module.install_upgrade').execute('upgrade')
Create company::
@@ -116,6 +116,7 @@ Create a Project::
>>> ProjectWork = Model.get('project.work')
>>> TimesheetWork = Model.get('timesheet.work')
>>> project = ProjectWork()
+ >>> project.name = 'Test timesheet'
>>> work = TimesheetWork()
>>> work.name = 'Test timesheet'
>>> work.save()
@@ -125,6 +126,7 @@ Create a Project::
>>> project.project_invoice_method = 'timesheet'
>>> project.product = product
>>> task = ProjectWork()
+ >>> task.name = 'Task 1'
>>> work = TimesheetWork()
>>> work.name = 'Task 1'
>>> work.save()
@@ -157,7 +159,7 @@ Check project duration::
>>> project.duration_to_invoice
datetime.timedelta(0, 18000)
>>> project.invoiced_amount
- Decimal('0')
+ Decimal('0.00')
Invoice project::
@@ -168,7 +170,7 @@ Invoice project::
>>> project.duration_to_invoice
datetime.timedelta(0)
>>> project.invoiced_amount
- Decimal('100.000000000000')
+ Decimal('100.00')
Create more timesheets::
@@ -188,7 +190,7 @@ Check project duration::
>>> project.duration_to_invoice
datetime.timedelta(0, 14400)
>>> project.invoiced_amount
- Decimal('100.000000000000')
+ Decimal('100.00')
Invoice again project::
@@ -199,4 +201,4 @@ Invoice again project::
>>> project.duration_to_invoice
datetime.timedelta(0)
>>> project.invoiced_amount
- Decimal('180.000000000000')
+ Decimal('180.00')
diff --git a/tests/test_project_invoice.py b/tests/test_project_invoice.py
index 7f7f2a6..9b259c9 100644
--- a/tests/test_project_invoice.py
+++ b/tests/test_project_invoice.py
@@ -24,4 +24,8 @@ def suite():
'scenario_project_invoice_effort.rst',
setUp=doctest_setup, tearDown=doctest_teardown, encoding='utf-8',
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
+ suite.addTests(doctest.DocFileSuite(
+ 'scenario_project_invoice_progress.rst',
+ setUp=doctest_setup, tearDown=doctest_teardown, encoding='utf-8',
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
return suite
diff --git a/tryton.cfg b/tryton.cfg
index 1f87746..6849549 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=3.6.1
+version=3.8.0
depends:
ir
project
diff --git a/trytond_project_invoice.egg-info/PKG-INFO b/trytond_project_invoice.egg-info/PKG-INFO
index d531a83..8e77718 100644
--- a/trytond_project_invoice.egg-info/PKG-INFO
+++ b/trytond_project_invoice.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond-project-invoice
-Version: 3.6.1
+Version: 3.8.0
Summary: Tryton module to invoice projects
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/3.6/
+Download-URL: http://downloads.tryton.org/3.8/
Description: trytond_project_invoice
=======================
@@ -60,6 +60,9 @@ Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
+Classifier: Natural Language :: Hungarian
+Classifier: Natural Language :: Italian
+Classifier: Natural Language :: Portuguese (Brazilian)
Classifier: Natural Language :: Russian
Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
diff --git a/trytond_project_invoice.egg-info/SOURCES.txt b/trytond_project_invoice.egg-info/SOURCES.txt
index 16b0b82..644c204 100644
--- a/trytond_project_invoice.egg-info/SOURCES.txt
+++ b/trytond_project_invoice.egg-info/SOURCES.txt
@@ -10,35 +10,60 @@ timesheet.xml
tryton.cfg
work.xml
./__init__.py
+./invoice.py
./project.xml
./timesheet.py
./timesheet.xml
./tryton.cfg
./work.py
./work.xml
+./locale/bg_BG.po
./locale/ca_ES.po
+./locale/cs_CZ.po
./locale/de_DE.po
./locale/es_AR.po
./locale/es_CO.po
./locale/es_EC.po
./locale/es_ES.po
+./locale/es_MX.po
./locale/fr_FR.po
+./locale/hu_HU.po
+./locale/it_IT.po
+./locale/ja_JP.po
+./locale/lt_LT.po
+./locale/nl_NL.po
+./locale/pt_BR.po
+./locale/ru_RU.po
./locale/sl_SI.po
./tests/__init__.py
./tests/scenario_project_invoice_effort.rst
+./tests/scenario_project_invoice_progress.rst
./tests/scenario_project_invoice_timesheet.rst
./tests/test_project_invoice.py
./view/work_form.xml
+./view/work_invoiced_progress_form.xml
+./view/work_invoiced_progress_list.xml
doc/index.rst
+locale/bg_BG.po
locale/ca_ES.po
+locale/cs_CZ.po
locale/de_DE.po
locale/es_AR.po
locale/es_CO.po
locale/es_EC.po
locale/es_ES.po
+locale/es_MX.po
locale/fr_FR.po
+locale/hu_HU.po
+locale/it_IT.po
+locale/ja_JP.po
+locale/lt_LT.po
+locale/nl_NL.po
+locale/pt_BR.po
+locale/ru_RU.po
locale/sl_SI.po
tests/scenario_project_invoice_effort.rst
+tests/scenario_project_invoice_progress.rst
tests/scenario_project_invoice_timesheet.rst
trytond_project_invoice.egg-info/PKG-INFO
trytond_project_invoice.egg-info/SOURCES.txt
@@ -47,4 +72,6 @@ trytond_project_invoice.egg-info/entry_points.txt
trytond_project_invoice.egg-info/not-zip-safe
trytond_project_invoice.egg-info/requires.txt
trytond_project_invoice.egg-info/top_level.txt
-view/work_form.xml
\ No newline at end of file
+view/work_form.xml
+view/work_invoiced_progress_form.xml
+view/work_invoiced_progress_list.xml
\ No newline at end of file
diff --git a/trytond_project_invoice.egg-info/requires.txt b/trytond_project_invoice.egg-info/requires.txt
index ef1f62c..3ef8868 100644
--- a/trytond_project_invoice.egg-info/requires.txt
+++ b/trytond_project_invoice.egg-info/requires.txt
@@ -1,8 +1,8 @@
python-sql >= 0.4
-trytond_project >= 3.6, < 3.7
-trytond_project_revenue >= 3.6, < 3.7
-trytond_timesheet >= 3.6, < 3.7
-trytond_account >= 3.6, < 3.7
-trytond_account_invoice >= 3.6, < 3.7
-trytond_product >= 3.6, < 3.7
-trytond >= 3.6, < 3.7
\ No newline at end of file
+trytond_project >= 3.8, < 3.9
+trytond_project_revenue >= 3.8, < 3.9
+trytond_timesheet >= 3.8, < 3.9
+trytond_account >= 3.8, < 3.9
+trytond_account_invoice >= 3.8, < 3.9
+trytond_product >= 3.8, < 3.9
+trytond >= 3.8, < 3.9
\ No newline at end of file
diff --git a/view/work_form.xml b/view/work_form.xml
index 58a479f..5617fe0 100644
--- a/view/work_form.xml
+++ b/view/work_form.xml
@@ -22,4 +22,9 @@ this repository contains the full copyright notices and license terms. -->
position="inside">
<button string="Invoice" name="invoice"/>
</xpath>
+ <xpath expr="/form/notebook" position="inside">
+ <page name="invoiced_progress">
+ <field name="invoiced_progress" colspan="4"/>
+ </page>
+ </xpath>
</data>
diff --git a/view/work_invoiced_progress_form.xml b/view/work_invoiced_progress_form.xml
new file mode 100644
index 0000000..d4a7851
--- /dev/null
+++ b/view/work_invoiced_progress_form.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form string="Work Invoiced Progress">
+ <label name="work"/>
+ <field name="work"/>
+ <newline/>
+ <label name="effort_duration"/>
+ <field name="effort_duration"/>
+ <label name="invoice_line"/>
+ <field name="invoice_line"/>
+</form>
diff --git a/view/work_invoiced_progress_list.xml b/view/work_invoiced_progress_list.xml
new file mode 100644
index 0000000..9c0d567
--- /dev/null
+++ b/view/work_invoiced_progress_list.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Work Invoiced Progresses">
+ <field name="work"/>
+ <field name="effort_duration"/>
+ <field name="invoice_line"/>
+</tree>
diff --git a/work.py b/work.py
index b6684ab..2ce85f7 100644
--- a/work.py
+++ b/work.py
@@ -3,13 +3,14 @@
from __future__ import division
from itertools import groupby
+from collections import defaultdict
from decimal import Decimal
import datetime
from sql import Null
from sql.aggregate import Sum
-from trytond.model import ModelView, fields
+from trytond.model import ModelSQL, ModelView, fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval, Bool, PYSONEncoder
from trytond.pool import Pool
@@ -18,12 +19,13 @@ from trytond.wizard import Wizard, StateAction
from trytond.tools import reduce_ids, grouped_slice
-__all__ = ['Work', 'OpenInvoice']
+__all__ = ['Work', 'WorkInvoicedProgress', 'OpenInvoice']
__metaclass__ = PoolMeta
INVOICE_METHODS = [
('manual', 'Manual'),
('effort', 'On Effort'),
+ ('progress', 'On Progress'),
('timesheet', 'On Timesheet'),
]
@@ -45,22 +47,24 @@ class Work:
states={
'invisible': Eval('invoice_method') == 'manual',
},
- depends=['invoice_method']), 'get_invoice_values')
+ depends=['invoice_method']), 'get_total')
duration_to_invoice = fields.Function(fields.TimeDelta(
'Duration to Invoice', 'company_work_time',
states={
'invisible': Eval('invoice_method') == 'manual',
},
- depends=['invoice_method']), 'get_invoice_values')
+ depends=['invoice_method']), 'get_total')
invoiced_amount = fields.Function(fields.Numeric('Invoiced Amount',
digits=(16, Eval('currency_digits', 2)),
states={
'invisible': Eval('invoice_method') == 'manual',
},
depends=['currency_digits', 'invoice_method']),
- 'get_invoice_values')
+ 'get_total')
invoice_line = fields.Many2One('account.invoice.line', 'Invoice Line',
readonly=True)
+ invoiced_progress = fields.One2Many('project.work.invoiced_progress',
+ 'work', 'Invoiced Progress', readonly=True)
@classmethod
def __setup__(cls):
@@ -99,12 +103,6 @@ class Work:
else:
return 'manual'
- @property
- def effort_hours(self):
- if not self.effort_duration:
- return 0
- return self.effort_duration.total_seconds() / 60 / 60
-
@staticmethod
def default_invoiced_duration():
return datetime.timedelta()
@@ -116,7 +114,16 @@ class Work:
@staticmethod
def _get_invoiced_duration_effort(works):
return dict((w.id, w.effort_duration) for w in works
- if w.invoice_line)
+ if w.invoice_line and w.effort_duration)
+
+ @staticmethod
+ def _get_invoiced_duration_progress(works):
+ durations = {}
+ for work in works:
+ durations[work.id] = sum((p.effort_duration
+ for p in work.invoiced_progress if p.effort_duration),
+ datetime.timedelta())
+ return durations
@classmethod
def _get_invoiced_duration_timesheet(cls, works):
@@ -135,6 +142,24 @@ class Work:
return dict((w.id, w.effort_duration) for w in works
if w.state == 'done' and not w.invoice_line)
+ @staticmethod
+ def _get_duration_to_invoice_progress(works):
+ durations = {}
+ for work in works:
+ if work.progress is None or work.effort_duration is None:
+ continue
+ effort_to_invoice = datetime.timedelta(
+ hours=work.effort_hours * work.progress)
+ effort_invoiced = sum(
+ (p.effort_duration
+ for p in work.invoiced_progress),
+ datetime.timedelta())
+ if effort_to_invoice > effort_invoiced:
+ durations[work.id] = effort_to_invoice - effort_invoiced
+ else:
+ durations[work.id] = datetime.timedelta()
+ return durations
+
@classmethod
def _get_duration_to_invoice_timesheet(cls, works):
return cls._get_duration_timesheet(works, False)
@@ -151,6 +176,7 @@ class Work:
def _get_invoiced_amount_effort(works):
pool = Pool()
InvoiceLine = pool.get('account.invoice.line')
+ Currency = pool.get('currency.currency')
invoice_lines = InvoiceLine.browse([
w.invoice_line.id for w in works
@@ -159,33 +185,118 @@ class Work:
id2invoice_lines = dict((l.id, l) for l in invoice_lines)
amounts = {}
for work in works:
+ currency = work.company.currency
if work.invoice_line:
invoice_line = id2invoice_lines[work.invoice_line.id]
- amounts[work.id] = invoice_line.amount
+ invoice_currency = (invoice_line.invoice.currency
+ if invoice_line.invoice else invoice_line.currency)
+ amounts[work.id] = Currency.compute(invoice_currency,
+ Decimal(str(work.effort_hours)) * invoice_line.unit_price,
+ currency)
else:
amounts[work.id] = Decimal(0)
return amounts
- @staticmethod
- def _get_invoiced_amount_timesheet(works):
+ @classmethod
+ def _get_invoiced_amount_progress(cls, works):
pool = Pool()
+ Progress = pool.get('project.work.invoiced_progress')
InvoiceLine = pool.get('account.invoice.line')
+ Company = pool.get('company.company')
+ Currency = pool.get('currency.currency')
- invoice_lines = InvoiceLine.browse([
- t.invoice_line.id for w in works
- for t in w.work.timesheet_lines
- if t.invoice_line])
+ cursor = Transaction().cursor
+ table = cls.__table__()
+ progress = Progress.__table__()
+ invoice_line = InvoiceLine.__table__()
+ company = Company.__table__()
+
+ amounts = defaultdict(Decimal)
+ work2currency = {}
+ work_ids = [w.id for w in works]
+ for sub_ids in grouped_slice(work_ids):
+ where = reduce_ids(table.id, sub_ids)
+ cursor.execute(*table.join(progress,
+ condition=progress.work == table.id
+ ).join(invoice_line,
+ condition=progress.invoice_line == invoice_line.id
+ ).select(table.id,
+ Sum(progress.effort_duration * invoice_line.unit_price),
+ where=where,
+ group_by=table.id))
+ for work_id, amount in cursor.fetchall():
+ if isinstance(amount, datetime.timedelta):
+ amount = amount.total_seconds()
+ # Amount computed in second instead of hours
+ if amount is not None:
+ amount /= 60 * 60
+ else:
+ amount = 0
+ amounts[work_id] = amount
+
+ cursor.execute(*table.join(company,
+ condition=table.company == company.id
+ ).select(table.id, company.currency,
+ where=where))
+ work2currency.update(cursor.fetchall())
+
+ currencies = Currency.browse(set(work2currency.itervalues()))
+ id2currency = {c.id: c for c in currencies}
+
+ for work in works:
+ currency = id2currency[work2currency[work.id]]
+ amounts[work.id] = currency.round(Decimal(amounts[work.id]))
+ return amounts
+
+ @classmethod
+ def _get_invoiced_amount_timesheet(cls, works):
+ pool = Pool()
+ TimesheetWork = pool.get('timesheet.work')
+ TimesheetLine = pool.get('timesheet.line')
+ InvoiceLine = pool.get('account.invoice.line')
+ Company = pool.get('company.company')
+ Currency = pool.get('currency.currency')
+
+ cursor = Transaction().cursor
+ table = cls.__table__()
+ timesheet_work = TimesheetWork.__table__()
+ timesheet_line = TimesheetLine.__table__()
+ invoice_line = InvoiceLine.__table__()
+ company = Company.__table__()
- id2invoice_lines = dict((l.id, l) for l in invoice_lines)
amounts = {}
+ work2currency = {}
+ work_ids = [w.id for w in works]
+ for sub_ids in grouped_slice(work_ids):
+ where = reduce_ids(table.id, sub_ids)
+ cursor.execute(*table.join(timesheet_work,
+ condition=table.work == timesheet_work.id
+ ).join(timesheet_line,
+ condition=timesheet_line.work == timesheet_work.id
+ ).join(invoice_line,
+ condition=timesheet_line.invoice_line == invoice_line.id
+ ).select(table.id,
+ Sum(timesheet_line.duration * invoice_line.unit_price),
+ where=where,
+ group_by=table.id))
+ amounts.update(cursor.fetchall())
+
+ cursor.execute(*table.join(company,
+ condition=table.company == company.id
+ ).select(table.id, company.currency,
+ where=where))
+ work2currency.update(cursor.fetchall())
+
+ currencies = Currency.browse(set(work2currency.itervalues()))
+ id2currency = {c.id: c for c in currencies}
+
for work in works:
- amounts[work.id] = Decimal(0)
- for timesheet_line in work.work.timesheet_lines:
- if not timesheet_line.invoice_line:
- continue
- invoice_line = id2invoice_lines[timesheet_line.invoice_line.id]
- amounts[work.id] += (invoice_line.unit_price
- * Decimal(str(timesheet_line.hours)))
+ currency = id2currency[work2currency[work.id]]
+ amount = amounts.get(work.id, 0)
+ if isinstance(amount, datetime.timedelta):
+ amount = amount.total_seconds()
+ amount = amount / 60 / 60
+ amounts[work.id] = currency.round(Decimal(str(amount)))
return amounts
@staticmethod
@@ -208,28 +319,37 @@ class Work:
where=red_sql & where,
group_by=line.work))
for twork_id, duration in cursor.fetchall():
- # SQLite uses float for SUM
- if not isinstance(duration, datetime.timedelta):
- duration = datetime.timedelta(seconds=duration)
- durations[twork2work[twork_id]] = duration
+ if duration:
+ # SQLite uses float for SUM
+ if not isinstance(duration, datetime.timedelta):
+ duration = datetime.timedelta(seconds=duration)
+ durations[twork2work[twork_id]] = duration
return durations
@classmethod
- def get_invoice_values(cls, works, name):
- works += cls.search([
- ('parent', 'child_of', [w.id for w in works]),
- ])
-
- values = {}
- method2works = {}
+ def _get_invoice_values(cls, works, name):
+ default = getattr(cls, 'default_%s' % name)
+ durations = dict.fromkeys((w.id for w in works), default())
+ method2works = defaultdict(list)
for work in works:
- method2works.setdefault(work.invoice_method, []).append(work)
+ method2works[work.invoice_method].append(work)
for method, m_works in method2works.iteritems():
method = getattr(cls, '_get_%s_%s' % (name, method))
- values.update(method(m_works))
+ # Re-browse for cache alignment
+ durations.update(method(cls.browse(m_works)))
+ return durations
- default = getattr(cls, 'default_%s' % name)()
- return cls.sum_tree(works, lambda w: values.get(w.id) or default)
+ @classmethod
+ def _get_invoiced_duration(cls, works):
+ return cls._get_invoice_values(works, 'invoiced_duration')
+
+ @classmethod
+ def _get_duration_to_invoice(cls, works):
+ return cls._get_invoice_values(works, 'duration_to_invoice')
+
+ @classmethod
+ def _get_invoiced_amount(cls, works):
+ return cls._get_invoice_values(works, 'invoiced_amount')
@classmethod
@ModelView.button
@@ -257,6 +377,7 @@ class Work:
origin = line['origin']
origins.setdefault(origin.__class__, []).append(origin)
for klass, records in origins.iteritems():
+ klass.save(records) # Store first new origins
klass.write(records, {
'invoice_line': invoice_line.id,
})
@@ -288,7 +409,7 @@ class Work:
currency=self.company.currency,
account=self.party.account_receivable,
payment_term=self.party.customer_payment_term,
- description=self.work.name,
+ description=self.name,
)
def _group_lines_to_invoice_key(self, line):
@@ -352,7 +473,38 @@ class Work:
'quantity': self.effort_hours,
'unit_price': self.list_price,
'origin': self,
- 'description': self.work.name,
+ 'description': self.name,
+ }]
+ return []
+
+ def _get_lines_to_invoice_progress(self):
+ pool = Pool()
+ InvoicedProgress = pool.get('project.work.invoiced_progress')
+ ModelData = pool.get('ir.model.data')
+ Uom = pool.get('product.uom')
+
+ hour = Uom(ModelData.get_id('product', 'uom_hour'))
+
+ if self.progress is None or self.effort_duration is None:
+ return []
+
+ invoiced_progress = sum(x.effort_hours for x in self.invoiced_progress)
+ quantity = self.effort_hours * self.progress - invoiced_progress
+ quantity = Uom.compute_qty(hour, quantity, self.product.default_uom)
+ if quantity > 0:
+ if not self.product:
+ self.raise_user_error('missing_product', (self.rec_name,))
+ elif self.list_price is None:
+ self.raise_user_error('missing_list_price', (self.rec_name,))
+ invoiced_progress = InvoicedProgress(work=self,
+ effort_duration=datetime.timedelta(hours=quantity))
+ return [{
+ 'product': self.product,
+ 'quantity': quantity,
+ 'unit_price': self.list_price,
+ 'origin': invoiced_progress,
+ 'description': self.name,
+ 'description': self.name,
}]
return []
@@ -367,7 +519,7 @@ class Work:
'quantity': l.hours,
'unit_price': self.list_price,
'origin': l,
- 'description': self.work.name,
+ 'description': self.name,
} for l in self.work.timesheet_lines
if not l.invoice_line]
return []
@@ -390,6 +542,22 @@ class Work:
return lines
+class WorkInvoicedProgress(ModelView, ModelSQL):
+ 'Work Invoiced Progress'
+ __name__ = 'project.work.invoiced_progress'
+ work = fields.Many2One('project.work', 'Work', ondelete='RESTRICT',
+ select=True)
+ effort_duration = fields.TimeDelta('Effort', 'company_work_time')
+ invoice_line = fields.Many2One('account.invoice.line', 'Invoice Line',
+ ondelete='CASCADE')
+
+ @property
+ def effort_hours(self):
+ if not self.effort_duration:
+ return 0
+ return self.effort_duration.total_seconds() / 60 / 60
+
+
class OpenInvoice(Wizard):
'Open Invoice'
__name__ = 'project.open_invoice'
@@ -406,10 +574,14 @@ class OpenInvoice(Wizard):
for work in works:
if work.invoice_line and work.invoice_line.invoice:
invoice_ids.add(work.invoice_line.invoice.id)
- for timesheet_line in work.work.timesheet_lines:
- if (timesheet_line.invoice_line
- and timesheet_line.invoice_line.invoice):
- invoice_ids.add(timesheet_line.invoice_line.invoice.id)
+ if work.work:
+ for timesheet_line in work.work.timesheet_lines:
+ if (timesheet_line.invoice_line
+ and timesheet_line.invoice_line.invoice):
+ invoice_ids.add(timesheet_line.invoice_line.invoice.id)
+ if work.invoiced_progress:
+ for progress in work.invoiced_progress:
+ invoice_ids.add(progress.invoice_line.invoice.id)
encoder = PYSONEncoder()
action['pyson_domain'] = encoder.encode(
[('id', 'in', list(invoice_ids))])
diff --git a/work.xml b/work.xml
index de9de41..5afdb53 100644
--- a/work.xml
+++ b/work.xml
@@ -19,6 +19,25 @@ this repository contains the full copyright notices and license terms. -->
<field name="group" ref="group_project_invoice"/>
</record>
+ <record model="ir.ui.view" id="work_invoiced_progress_view_form">
+ <field name="model">project.work.invoiced_progress</field>
+ <field name="type">form</field>
+ <field name="name">work_invoiced_progress_form</field>
+ </record>
+ <record model="ir.ui.view" id="work_invoiced_progress_view_list">
+ <field name="model">project.work.invoiced_progress</field>
+ <field name="type">tree</field>
+ <field name="name">work_invoiced_progress_list</field>
+ </record>
+ <record model="ir.model.access" id="access_work_invoiced_progress">
+ <field name="model"
+ search="[('model', '=', 'project.work.invoiced_progress')]"/>
+ <field name="perm_read" eval="True"/>
+ <field name="perm_write" eval="False"/>
+ <field name="perm_create" eval="False"/>
+ <field name="perm_delete" eval="False"/>
+ </record>
+
<record model="ir.action.wizard" id="open_invoice">
<field name="name">Invoices</field>
<field name="wiz_name">project.open_invoice</field>
--
tryton-modules-project-invoice
More information about the tryton-debian-vcs
mailing list