[tryton-debian-vcs] tryton-modules-sale-opportunity branch debian updated. debian/3.4.2-1-2-gc1f8c40
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Thu Apr 23 16:06:12 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-sale-opportunity.git;a=commitdiff;h=debian/3.4.2-1-2-gc1f8c40
commit c1f8c4013b0a6a27d0077c27a765d5617a560085
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Thu Apr 23 17:00:05 2015 +0200
Merging upstream version 3.6.0.
diff --git a/CHANGELOG b/CHANGELOG
index d58035c..68df714 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,8 +1,10 @@
-Version 3.4.2 - 2015-02-21
-* Bug fixes (see mercurial logs for details)
-
-Version 3.4.1 - 2014-12-03
+Version 3.6.0 - 2015-04-20
* Bug fixes (see mercurial logs for details)
+* Add support for PyPy
+* Allow to set manually end date
+* Update of opportunity amount based on linked sales
+* Add a state 'won'
+* Allow to edit the probability after conversion
Version 3.4.0 - 2014-10-20
* Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index 3741640..52f21e3 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond_sale_opportunity
-Version: 3.4.2
+Version: 3.6.0
Summary: Tryton module with leads and opportunities
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.4/
+Download-URL: http://downloads.tryton.org/3.6/
Description: trytond_sale_opportunity
========================
@@ -64,4 +64,6 @@ Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Office/Business
diff --git a/__init__.py b/__init__.py
index 336ed57..d1fa3b0 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,9 +1,10 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 Pool
from .opportunity import *
from .configuration import *
+from .sale import *
def register():
@@ -16,6 +17,7 @@ def register():
SaleOpportunityMonthly,
SaleOpportunityEmployeeMonthly,
Configuration,
+ Sale,
module='sale_opportunity', type_='model')
Pool.register(
OpenSaleOpportunityEmployee,
diff --git a/configuration.py b/configuration.py
index fb3c7d5..37c303f 100644
--- a/configuration.py
+++ b/configuration.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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.model import fields
from trytond.pyson import Eval
from trytond.pool import PoolMeta
diff --git a/doc/index.rst b/doc/index.rst
new file mode 100644
index 0000000..e36b9fa
--- /dev/null
+++ b/doc/index.rst
@@ -0,0 +1,75 @@
+Sale Opportunity Module
+#######################
+
+The sale_opportunity module defines the lead/opportunity model.
+
+Lead/Opportunity
+****************
+
+The lead and opportunity are defined by the same record but with different state.
+Depending on the state, fields of the record become mandatory. Here is the
+extensive list of the fields, most of them are optional:
+
+- Party: The customer.
+- Address: The main address of the customer.
+- Description: The description of the lead/opportunity.
+- Reference: The internal reference of the lead/opportunity (will be generated
+ automatically at creation).
+- Amount: The estimated revenue amount.
+- Currency: Define the currency of the amount.
+- Probability: The probability of conversion.
+- Company: The company which issue the lead/opportunity.
+- Employee: The employee responsible of the lead/opportunity.
+- Start Date: When the lead started.
+- End Date: When the lead ends (automatically set on win, cancel or lost).
+- Payment Term: Define which payment term will be used for the future invoice.
+- Comment: A text field to add custom comments.
+- State: The state of the lead/opportunity. May take one of the following
+ values:
+
+ - Lead
+ - Opportunity
+ - Converted
+ - Won
+ - Cancelled
+ - Lost
+
+- Lines: A list of *Lead/Opportunity* line
+- Sales: The list of sales converted from this opportunity.
+- History: The list of changes made over time to the lead/opportunity.
+
+The first time an opportunity is converted, a sale is created base on the
+information of the opportunity and the lines.
+The amount of the opportunity is later updated with the sales amount.
+Once all the sales of an opportunity are confirmed (or cancelled with at least
+one confirmed), the opportunity is won.
+If all the sales of an opportunity are cancelled than the opportunity is lost.
+
+Lead/Opportunity Line
+*********************
+
+A lead/opportunity line define a quantity of product that are expected to be sold.
+
+Reports
+*******
+
+The sale_opportunity module defines also some reports:
+
+- Opportunities per Employee.
+- Opportunities per Month.
+- Opportunities per Employee per Month.
+
+which all show:
+
+- The number of leads/opportunities.
+- The number of converted opportunities.
+- The convertion rate.
+- The number of won opportunities.
+- The winning rate.
+- The number of lost opportunities.
+
+- The total amount of leads/opportunities.
+- The total amount of converted opportunities.
+- The convertion amount rate.
+- The total amount of won opportunities.
+- The winning amount rate.
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 4080ff5..e8d37b4 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -95,9 +95,10 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Препратка"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Продажба"
+#, fuzzy
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Управление на продажби"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -119,6 +120,11 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Адрес"
+#, fuzzy
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Сума"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Коментар"
@@ -135,6 +141,16 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Създадено от"
+#, fuzzy
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Управление на валути"
+
+#, fuzzy
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Цифри за валута"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Промяна на дата"
@@ -227,10 +243,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Име"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Ред от продажба"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Последователност"
@@ -311,6 +323,23 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Име"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Уон"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Променено на"
@@ -395,6 +424,23 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Име"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Уон"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Променено на"
@@ -467,6 +513,23 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Име"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Уон"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Променено на"
@@ -499,6 +562,16 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "В %"
+#, fuzzy
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "В %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "В %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "В %"
@@ -507,6 +580,16 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "В %"
+#, fuzzy
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "В %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "В %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "В %"
@@ -515,6 +598,21 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "В %"
+#, fuzzy
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "В %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "В %"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Управление на продажби"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Възможности по служител"
@@ -573,6 +671,12 @@ msgid "Opportunities"
msgstr ""
#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Уон"
+
+#, fuzzy
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Възможност за продажба"
@@ -654,6 +758,11 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Възможност"
+#, fuzzy
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Уон"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Отказан"
@@ -674,6 +783,11 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Възможност"
+#, fuzzy
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Уон"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Изтория"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index 3f23234..40e7642 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -94,13 +94,13 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Referència"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Venda"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Vendes"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
-msgstr "Data inici"
+msgstr "Data inicial"
msgctxt "field:sale.opportunity,state:"
msgid "State"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Adreça"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Import"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Comentari"
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Usuari creació"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimals de la moneda"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Data modificació"
@@ -180,7 +192,7 @@ msgstr "Nom"
msgctxt "field:sale.opportunity.history,start_date:"
msgid "Start Date"
-msgstr "Data inici"
+msgstr "Data inicial"
msgctxt "field:sale.opportunity.history,state:"
msgid "State"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Línia de venda"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Seqüència"
@@ -260,19 +268,19 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_employee,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Taxa d'import convertit"
+msgstr "Percentatge convertides (sobre import)"
msgctxt "field:sale.opportunity_employee,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Taxa de conversió"
+msgstr "Percentatge convertides"
msgctxt "field:sale.opportunity_employee,converted:"
msgid "Converted"
-msgstr "Convertit"
+msgstr "Convertides"
msgctxt "field:sale.opportunity_employee,converted_amount:"
msgid "Converted Amount"
-msgstr "Import convertit"
+msgstr "Import convertides"
msgctxt "field:sale.opportunity_employee,create_date:"
msgid "Create Date"
@@ -300,7 +308,7 @@ msgstr "ID"
msgctxt "field:sale.opportunity_employee,lost:"
msgid "Lost"
-msgstr "Perdut"
+msgstr "Perdudes"
msgctxt "field:sale.opportunity_employee,number:"
msgid "Number"
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Nom"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Percentatge guanyades (sobre import)"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Percentatge guanyades"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Guanyades"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Import guanyades"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Data modificació"
@@ -328,7 +352,7 @@ msgstr "ID"
msgctxt "field:sale.opportunity_employee.open.start,start_date:"
msgid "Start Date"
-msgstr "Data inici"
+msgstr "Data inicial"
msgctxt "field:sale.opportunity_employee_monthly,amount:"
msgid "Amount"
@@ -340,19 +364,19 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Taxa d'import convertit"
+msgstr "Percentatge convertides (sobre import)"
msgctxt "field:sale.opportunity_employee_monthly,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Taxa de conversió"
+msgstr "Percentatge convertides"
msgctxt "field:sale.opportunity_employee_monthly,converted:"
msgid "Converted"
-msgstr "Convertit"
+msgstr "Convertides"
msgctxt "field:sale.opportunity_employee_monthly,converted_amount:"
msgid "Converted Amount"
-msgstr "Import convertit"
+msgstr "Import convertides"
msgctxt "field:sale.opportunity_employee_monthly,create_date:"
msgid "Create Date"
@@ -380,7 +404,7 @@ msgstr "ID"
msgctxt "field:sale.opportunity_employee_monthly,lost:"
msgid "Lost"
-msgstr "Perdut"
+msgstr "Perdudes"
msgctxt "field:sale.opportunity_employee_monthly,month:"
msgid "Month"
@@ -394,6 +418,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Nom"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Percentatge guanyades (sobre import)"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Percentatge guanyades"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Guanyades"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Import guanyades"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Data modificació"
@@ -416,19 +456,19 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_monthly,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Taxa d'import convertit"
+msgstr "Percentatge convertides (sobre import)"
msgctxt "field:sale.opportunity_monthly,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Taxa de conversió"
+msgstr "Percentatge convertides"
msgctxt "field:sale.opportunity_monthly,converted:"
msgid "Converted"
-msgstr "Convertit"
+msgstr "Convertides"
msgctxt "field:sale.opportunity_monthly,converted_amount:"
msgid "Converted Amount"
-msgstr "Import convertit"
+msgstr "Import convertides"
msgctxt "field:sale.opportunity_monthly,create_date:"
msgid "Create Date"
@@ -452,7 +492,7 @@ msgstr "ID"
msgctxt "field:sale.opportunity_monthly,lost:"
msgid "Lost"
-msgstr "Perdut"
+msgstr "Perdudes"
msgctxt "field:sale.opportunity_monthly,month:"
msgid "Month"
@@ -466,6 +506,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Nom"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Percentatge guanyades (sobre import)"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Percentatge guanyades"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Guanyades"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Import guanyades"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Data modificació"
@@ -498,6 +554,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %."
@@ -506,6 +570,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %."
@@ -514,6 +586,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Vendes"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Oportunitats per empleat"
@@ -541,7 +625,7 @@ msgstr "Oportunitats per mes"
msgctxt ""
"model:ir.action.act_window.domain,name:act_opportunity_form_domain_all"
msgid "All"
-msgstr "Tot"
+msgstr "Totes"
msgctxt ""
"model:ir.action.act_window.domain,name:act_opportunity_form_domain_cancelled"
@@ -551,7 +635,7 @@ msgstr "Cancel·lat"
msgctxt ""
"model:ir.action.act_window.domain,name:act_opportunity_form_domain_converted"
msgid "Converted"
-msgstr "Convertit"
+msgstr "Convertida"
msgctxt ""
"model:ir.action.act_window.domain,name:act_opportunity_form_domain_leads"
@@ -568,6 +652,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Oportunitats"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Guanyat"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Oportunitat"
@@ -648,6 +737,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Oportunitat"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Guanyat"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Cancel·lada"
@@ -668,6 +761,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Oportunitat"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Guanyat"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Canviar temps"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Historial"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 9e9271a..d37b47e 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -94,8 +94,8 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr ""
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
msgstr ""
msgctxt "field:sale.opportunity,start_date:"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr ""
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr ""
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr ""
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr ""
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr ""
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr ""
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr ""
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr ""
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr ""
@@ -310,6 +318,23 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr ""
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Won"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr ""
@@ -394,6 +419,23 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr ""
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Won"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr ""
@@ -466,6 +508,23 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr ""
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Won"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr ""
@@ -498,6 +557,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr ""
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr ""
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr ""
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr ""
@@ -506,6 +573,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr ""
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr ""
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr ""
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr ""
@@ -514,6 +589,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr ""
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr ""
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr ""
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr ""
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr ""
@@ -568,6 +655,12 @@ msgctxt ""
msgid "Opportunities"
msgstr ""
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Won"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr ""
@@ -648,6 +741,11 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr ""
+#, fuzzy
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Won"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr ""
@@ -668,6 +766,11 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr ""
+#, fuzzy
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Won"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index f50bbdf..a6cacca 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -14,7 +14,7 @@ msgstr ""
msgctxt "field:sale.configuration,sale_opportunity_sequence:"
msgid "Opportunity Reference Sequence"
-msgstr "Nummernkreis Verkaufschance Beleg"
+msgstr "Nummernkreis Verkaufschance"
msgctxt "field:sale.opportunity,address:"
msgid "Address"
@@ -96,9 +96,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Beleg"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Verkauf"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Verkäufe"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -120,6 +120,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Adresse"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Betrag"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Kommentar"
@@ -136,6 +140,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Erstellt durch"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Währung"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Nachkommastellen Währung"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Änderungsdatum"
@@ -228,10 +240,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Name"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Verkaufsposition"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Reihenfolge"
@@ -312,6 +320,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Name"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Prozentsatz gewonnener Betrag"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Prozentsatz gewonnen"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Gewonnen"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Gewonnener Betrag"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Zuletzt geändert"
@@ -396,6 +420,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Name"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Prozentsatz gewonnener Betrag"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Prozentsatz gewonnen"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Gewonnen"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Gewonnener Betrag"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Zuletzt geändert"
@@ -468,6 +508,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Name"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Prozentsatz gewonnener Betrag"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Prozentsatz gewonnen"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Gewonnen"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Gewonnener Betrag"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Zuletzt geändert"
@@ -500,6 +556,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "In %"
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "In %"
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "In %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "In %"
@@ -508,6 +572,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "In %"
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "In %"
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "In %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "In %"
@@ -516,6 +588,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "In %"
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "In %"
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "In %"
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Verkäufe"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Verkaufschancen pro Mitarbeiter"
@@ -570,6 +654,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Verkaufschancen"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Gewonnen"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Verkaufschance"
@@ -650,6 +739,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Verkaufschance"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Gewonnen"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Annulliert"
@@ -670,6 +763,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Chance"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Gewonnen"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Änderungszeit"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Historie"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index cecc48d..293f1bc 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -44,7 +44,7 @@ msgstr "Moneda"
msgctxt "field:sale.opportunity,currency_digits:"
msgid "Currency Digits"
-msgstr "Dígitos de moneda"
+msgstr "Decimales de moneda"
msgctxt "field:sale.opportunity,description:"
msgid "Description"
@@ -76,7 +76,7 @@ msgstr "Motivo de la pérdida"
msgctxt "field:sale.opportunity,party:"
msgid "Party"
-msgstr "Entidades"
+msgstr "Entidad"
msgctxt "field:sale.opportunity,payment_term:"
msgid "Payment Term"
@@ -94,9 +94,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Venta"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Ventas"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Dirección"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Importe"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Comentario"
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Usuario creación"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de moneda"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Fecha modificación"
@@ -168,7 +180,7 @@ msgstr "Oportunidad de venta"
msgctxt "field:sale.opportunity.history,party:"
msgid "Party"
-msgstr "Entidades"
+msgstr "Entidad"
msgctxt "field:sale.opportunity.history,probability:"
msgid "Conversion Probability"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Línea de venta"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Secuencia"
@@ -240,7 +248,7 @@ msgstr "Unidad"
msgctxt "field:sale.opportunity.line,unit_digits:"
msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
msgctxt "field:sale.opportunity.line,write_date:"
msgid "Write Date"
@@ -288,7 +296,7 @@ msgstr "Moneda"
msgctxt "field:sale.opportunity_employee,currency_digits:"
msgid "Currency Digits"
-msgstr "Dígitos de moneda"
+msgstr "Decimales de moneda"
msgctxt "field:sale.opportunity_employee,employee:"
msgid "Employee"
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Tasa de importe ganado"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Tasa ganada"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Ganado"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Importe ganado"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
@@ -368,7 +392,7 @@ msgstr "Moneda"
msgctxt "field:sale.opportunity_employee_monthly,currency_digits:"
msgid "Currency Digits"
-msgstr "Dígitos de moneda"
+msgstr "Decimales de moneda"
msgctxt "field:sale.opportunity_employee_monthly,employee:"
msgid "Employee"
@@ -394,6 +418,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Tasa de importe ganado"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Tasa ganada"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Ganado"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Importe ganado"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
@@ -444,7 +484,7 @@ msgstr "Moneda"
msgctxt "field:sale.opportunity_monthly,currency_digits:"
msgid "Currency Digits"
-msgstr "Dígitos de moneda"
+msgstr "Decimales de moneda"
msgctxt "field:sale.opportunity_monthly,id:"
msgid "ID"
@@ -466,6 +506,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Tasa de importe ganado"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Tasa ganada"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Ganado"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Importe ganado"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
@@ -492,12 +548,20 @@ msgstr "Porcentaje entre 0 y 100"
msgctxt "help:sale.opportunity_employee,conversion_amount_rate:"
msgid "In %"
-msgstr "En %"
+msgstr "En %."
msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %."
@@ -506,6 +570,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %."
@@ -514,6 +586,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Ventas"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Oportunidades por empleado"
@@ -568,6 +652,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Oportunidades"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Ganado"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Oportunidad de venta"
@@ -648,6 +737,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Ganado"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Cancelado"
@@ -668,6 +761,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Ganado"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Hora modificación"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Histórico"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 18336a4..6f7d2db 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -94,9 +94,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Venta"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Ventas"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Dirección"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Valor"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Comentario"
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Creado por Usuario"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Monedas"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de Moneda"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Modificar Fecha"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Línea de Venta"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Secuencia"
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje Utilidad"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje Ganado"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Valor Ganado"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Fecha de Modificación"
@@ -394,6 +418,23 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje de Valor Ganado"
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje Ganado"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Valor Ganado"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha de Modificación"
@@ -466,6 +507,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Margen Utilidad Ganado"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentage Utilidad"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Valor Ganado"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha de Modificación"
@@ -498,6 +555,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "en %"
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "en %"
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "en %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "en %"
@@ -506,6 +571,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "en %"
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "en %"
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "en %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "en %"
@@ -514,6 +587,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "en %"
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "en %"
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "en %"
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Ventas"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Oportunidades por Empleado"
@@ -568,6 +653,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Oportunidades"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Ganada"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Oportunidad de Venta"
@@ -648,6 +738,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Ganada"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Anulada"
@@ -668,6 +762,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr ""
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Histórico"
diff --git a/locale/es_EC.po b/locale/es_EC.po
index 9fe4e28..700cb63 100644
--- a/locale/es_EC.po
+++ b/locale/es_EC.po
@@ -8,11 +8,11 @@ msgstr "La probabilidad debe estar entre 0 y 100."
msgctxt "error:sale.opportunity:"
msgid "Sale Opportunity \"%s\" must be cancelled before deletion."
-msgstr "La Oportunidad de Venta \"%s\" debe ser cancelada antes de ser eliminada."
+msgstr "Debe cancelar la Oportunidad de Venta \"%s\" antes de eliminarla."
msgctxt "field:sale.configuration,sale_opportunity_sequence:"
msgid "Opportunity Reference Sequence"
-msgstr "Secuencia de Referencia de Oportunidad"
+msgstr "Secuencia de referencia de oportunidad"
msgctxt "field:sale.opportunity,address:"
msgid "Address"
@@ -20,7 +20,7 @@ msgstr "Dirección"
msgctxt "field:sale.opportunity,amount:"
msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
msgctxt "field:sale.opportunity,comment:"
msgid "Comment"
@@ -80,7 +80,7 @@ msgstr "Tercero"
msgctxt "field:sale.opportunity,payment_term:"
msgid "Payment Term"
-msgstr "Plazo de Pago"
+msgstr "Término de Pago"
msgctxt "field:sale.opportunity,probability:"
msgid "Conversion Probability"
@@ -94,9 +94,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Venta"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Ventas"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Dirección"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Importe"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Comentario"
@@ -134,9 +138,17 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Creado por Usuario"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de Moneda"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
-msgstr "Fecha Modificación"
+msgstr "Fecha de Modificación"
msgctxt "field:sale.opportunity.history,description:"
msgid "Description"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Línea de Venta"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Secuencia"
@@ -252,7 +260,7 @@ msgstr "Modificado por Usuario"
msgctxt "field:sale.opportunity_employee,amount:"
msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
msgctxt "field:sale.opportunity_employee,company:"
msgid "Company"
@@ -260,11 +268,11 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_employee,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Porcentaje Conseguido"
+msgstr "Porcentaje Conseguido (sobre importe total)"
msgctxt "field:sale.opportunity_employee,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Porcentaje de Conversión"
+msgstr "Porcentaje Conseguido (sobre el número)"
msgctxt "field:sale.opportunity_employee,converted:"
msgid "Converted"
@@ -272,7 +280,7 @@ msgstr "Conseguidas"
msgctxt "field:sale.opportunity_employee,converted_amount:"
msgid "Converted Amount"
-msgstr "Valor Conseguido"
+msgstr "Importe Conseguido"
msgctxt "field:sale.opportunity_employee,create_date:"
msgid "Create Date"
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje Ganado (sobre importe total)"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje Ganado (sobre el número)"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Ganadas"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Importe Ganado"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Fecha de Modificación"
@@ -332,7 +356,7 @@ msgstr "Fecha Inicio"
msgctxt "field:sale.opportunity_employee_monthly,amount:"
msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
msgctxt "field:sale.opportunity_employee_monthly,company:"
msgid "Company"
@@ -344,7 +368,7 @@ msgstr "Porcentaje Conseguido"
msgctxt "field:sale.opportunity_employee_monthly,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Porcentaje de Conversión"
+msgstr "Porcentaje Conseguido (sobre el número)"
msgctxt "field:sale.opportunity_employee_monthly,converted:"
msgid "Converted"
@@ -352,7 +376,7 @@ msgstr "Conseguida"
msgctxt "field:sale.opportunity_employee_monthly,converted_amount:"
msgid "Converted Amount"
-msgstr "Valor Conseguido"
+msgstr "Importe Conseguido"
msgctxt "field:sale.opportunity_employee_monthly,create_date:"
msgid "Create Date"
@@ -394,6 +418,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje Ganado (sobre importe total)"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje Ganado (sobre el número)"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Importe Ganado"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha de Modificación"
@@ -408,7 +448,7 @@ msgstr "Año"
msgctxt "field:sale.opportunity_monthly,amount:"
msgid "Amount"
-msgstr "Valor"
+msgstr "Importe"
msgctxt "field:sale.opportunity_monthly,company:"
msgid "Company"
@@ -416,7 +456,7 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_monthly,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Porcentaje Conseguido"
+msgstr "Tasa de Importe Convertido"
msgctxt "field:sale.opportunity_monthly,conversion_rate:"
msgid "Conversion Rate"
@@ -424,11 +464,11 @@ msgstr "Porcentaje de Conversión"
msgctxt "field:sale.opportunity_monthly,converted:"
msgid "Converted"
-msgstr "Conseguida"
+msgstr "Conseguidas"
msgctxt "field:sale.opportunity_monthly,converted_amount:"
msgid "Converted Amount"
-msgstr "Valor Conseguido"
+msgstr "Importe Conseguido"
msgctxt "field:sale.opportunity_monthly,create_date:"
msgid "Create Date"
@@ -466,6 +506,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje de Importe Ganado"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje Ganado"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Importe Ganado"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha de Modificación"
@@ -484,7 +540,7 @@ msgstr "Año-Mes"
msgctxt "help:sale.opportunity,amount:"
msgid "Estimated revenue amount"
-msgstr "Ingresos estimados"
+msgstr "Importe estimado de ingresos"
msgctxt "help:sale.opportunity,probability:"
msgid "Percentage between 0 and 100"
@@ -498,6 +554,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "En %"
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "En %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %"
@@ -506,6 +570,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "En %"
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %"
@@ -514,6 +586,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "En %"
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Ventas"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Oportunidades por Empleado"
@@ -568,6 +652,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Oportunidades"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Ganada"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Oportunidad de Venta"
@@ -648,6 +737,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Ganada"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Cancelada"
@@ -668,6 +761,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Hora de Modificación"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Historial"
@@ -714,11 +815,11 @@ msgstr "Iniciativas/Oportunidades de Ventas"
msgctxt "view:sale.opportunity:"
msgid "Set as Lead"
-msgstr "Establecer como Iniciativa"
+msgstr "Convertir a Iniciativa"
msgctxt "view:sale.opportunity_employee.open.start:"
msgid "Sale Opportunities per Employee"
-msgstr "Oportunidades de Venta por Empleado"
+msgstr "Oportunidades de Ventas por Empleado"
msgctxt "view:sale.opportunity_employee:"
msgid "Opportunities per Employee"
@@ -730,7 +831,7 @@ msgstr "Oportunidades de Venta por Mes"
msgctxt "view:sale.opportunity_monthly:"
msgid "Sale Opportunities per Month"
-msgstr "Oportunidades de Ventas por Mes"
+msgstr "Oportunidades de Venta por Mes"
msgctxt "wizard_button:sale.opportunity_employee.open,start,end:"
msgid "Cancel"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 1303ede..7bb5683 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -94,9 +94,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Referencia"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Venta"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Ventas"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Dirección"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Importe"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Comentario"
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Usuario creación"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Moneda"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de la moneda"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Fecha modificación"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Nombre"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Línea de venta"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Secuencia"
@@ -260,19 +268,19 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_employee,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Porcentaje conseguido (sobre importe total)"
+msgstr "Porcentaje convertidas (sobre importe)"
msgctxt "field:sale.opportunity_employee,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Porcentaje conseguido (sobre el número)"
+msgstr "Porcentaje convertidas"
msgctxt "field:sale.opportunity_employee,converted:"
msgid "Converted"
-msgstr "Conseguidas"
+msgstr "Convertidas"
msgctxt "field:sale.opportunity_employee,converted_amount:"
msgid "Converted Amount"
-msgstr "Importe conseguido"
+msgstr "Importe convertidas"
msgctxt "field:sale.opportunity_employee,create_date:"
msgid "Create Date"
@@ -300,7 +308,7 @@ msgstr "ID"
msgctxt "field:sale.opportunity_employee,lost:"
msgid "Lost"
-msgstr "Perdida"
+msgstr "Perdidas"
msgctxt "field:sale.opportunity_employee,number:"
msgid "Number"
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje ganadas (sobre importe)"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje ganadas"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Ganadas"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Importe ganadas"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
@@ -340,19 +364,19 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Porcentaje conseguido (sobre importe total)"
+msgstr "Porcentaje convertidas (sobre importe)"
msgctxt "field:sale.opportunity_employee_monthly,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Porcentaje conseguido (sobre el número)"
+msgstr "Porcentaje convertidas"
msgctxt "field:sale.opportunity_employee_monthly,converted:"
msgid "Converted"
-msgstr "Conseguidas"
+msgstr "Convertidas"
msgctxt "field:sale.opportunity_employee_monthly,converted_amount:"
msgid "Converted Amount"
-msgstr "Importe conseguido"
+msgstr "Importe convertidas"
msgctxt "field:sale.opportunity_employee_monthly,create_date:"
msgid "Create Date"
@@ -394,6 +418,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje ganadas (sobre importe)"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje ganadas"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Ganadas"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Importe ganadas"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
@@ -416,19 +456,19 @@ msgstr "Empresa"
msgctxt "field:sale.opportunity_monthly,conversion_amount_rate:"
msgid "Conversion Amount Rate"
-msgstr "Tasa de importe convertido"
+msgstr "Porcentaje convertidas (sobre importe)"
msgctxt "field:sale.opportunity_monthly,conversion_rate:"
msgid "Conversion Rate"
-msgstr "Tasa de conversión"
+msgstr "Porcentaje convertidas"
msgctxt "field:sale.opportunity_monthly,converted:"
msgid "Converted"
-msgstr "Conseguidas"
+msgstr "Convertidas"
msgctxt "field:sale.opportunity_monthly,converted_amount:"
msgid "Converted Amount"
-msgstr "Importe conseguido"
+msgstr "Importe convertidas"
msgctxt "field:sale.opportunity_monthly,create_date:"
msgid "Create Date"
@@ -466,6 +506,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Nombre"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Porcentaje ganadas (sobre importe)"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Porcentaje ganadas"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Ganadas"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Importe ganadas"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Fecha modificación"
@@ -498,6 +554,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %."
@@ -506,6 +570,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %."
@@ -514,6 +586,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "En %."
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %."
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Ventas"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Oportunidades por empleado"
@@ -551,7 +635,7 @@ msgstr "Cancelada"
msgctxt ""
"model:ir.action.act_window.domain,name:act_opportunity_form_domain_converted"
msgid "Converted"
-msgstr "Conseguida"
+msgstr "Convertida"
msgctxt ""
"model:ir.action.act_window.domain,name:act_opportunity_form_domain_leads"
@@ -568,6 +652,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Oportunidades"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Ganada"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Oportunidades"
@@ -634,7 +723,7 @@ msgstr "Cancelada"
msgctxt "selection:sale.opportunity,state:"
msgid "Converted"
-msgstr "Conseguida"
+msgstr "Convertida"
msgctxt "selection:sale.opportunity,state:"
msgid "Lead"
@@ -648,13 +737,17 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Ganada"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Cancelada"
msgctxt "selection:sale.opportunity.history,state:"
msgid "Converted"
-msgstr "Conseguida"
+msgstr "Convertida"
msgctxt "selection:sale.opportunity.history,state:"
msgid "Lead"
@@ -668,6 +761,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Oportunidad"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Ganada"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Cambiar hora"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Historial"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index dba07ee..f86ed87 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -94,9 +94,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Référence"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Vente"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Ventes"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Adresse"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Montant"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Commentaire"
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Créé par"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Devise"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Décimales de la devise"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Date de modification"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Nom"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Ligne de vente"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Séquence"
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Nom"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Taux du montant gagné"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Taux gagnant"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Gagnée"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Montant gagné"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Date de mise à jour"
@@ -394,6 +418,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Nom"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Taux du montant gagné"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Taux de réussite"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Gagné"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Montant gagné"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Date de mise à jour"
@@ -466,6 +506,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Nom"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Taux du montant gagné"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Taux gagnant"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Gagnée"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Montant gagné"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Date de mise à jour"
@@ -498,6 +554,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "En %"
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "En %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %"
@@ -506,6 +570,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "En %"
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "En %"
@@ -514,6 +586,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "En %"
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "En %"
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Ventes"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Opportunités par employé"
@@ -568,6 +652,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Opportunités"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Gagnée"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Opportunité de vente"
@@ -648,6 +737,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Opportunité"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Gagnée"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Annulée"
@@ -668,6 +761,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Opportunité"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Gagnée"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Heure de modification"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Historique"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index b757949..674d0b2 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -109,9 +109,9 @@ msgid "Reference"
msgstr "Referentie"
#, fuzzy
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Verkoop"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Verkoopbeheer"
#, fuzzy
msgctxt "field:sale.opportunity,start_date:"
@@ -137,6 +137,11 @@ msgid "Address"
msgstr "Adres"
#, fuzzy
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Bedrag"
+
+#, fuzzy
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Opmerking"
@@ -154,6 +159,16 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr ""
+#, fuzzy
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Valuta"
+
+#, fuzzy
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Valuta decimalen"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr ""
@@ -259,11 +274,6 @@ msgid "Name"
msgstr "Naam bijlage"
#, fuzzy
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Offerteregel"
-
-#, fuzzy
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Reeks"
@@ -353,6 +363,23 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Zuid-Koreaanse won"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr ""
@@ -447,6 +474,23 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Zuid-Koreaanse won"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr ""
@@ -527,6 +571,23 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Naam bijlage"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Zuid-Koreaanse won"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr ""
@@ -563,6 +624,16 @@ msgid "In %"
msgstr "In %"
#, fuzzy
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "In %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "In %"
+
+#, fuzzy
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "In %"
@@ -573,6 +644,16 @@ msgid "In %"
msgstr "In %"
#, fuzzy
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "In %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "In %"
+
+#, fuzzy
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "In %"
@@ -582,6 +663,21 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "In %"
+#, fuzzy
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "In %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "In %"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Verkoopbeheer"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr ""
@@ -636,6 +732,12 @@ msgctxt ""
msgid "Opportunities"
msgstr ""
+#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Zuid-Koreaanse won"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr ""
@@ -717,6 +819,11 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr ""
+#, fuzzy
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Zuid-Koreaanse won"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr ""
@@ -737,6 +844,11 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr ""
+#, fuzzy
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Zuid-Koreaanse won"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr ""
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index d216595..80a96fa 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -95,9 +95,10 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Ссылка"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Продажа"
+#, fuzzy
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Продажи"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -119,6 +120,11 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Адрес"
+#, fuzzy
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Сумма"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Комментарии"
@@ -135,6 +141,16 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Создано пользователем"
+#, fuzzy
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Валюты"
+
+#, fuzzy
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Кол-во цифр валюты"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Дата изменения"
@@ -227,10 +243,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Наименование"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Строка продажи"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Нумерация"
@@ -311,6 +323,23 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Наименование"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Вона"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Дата изменения"
@@ -395,6 +424,23 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Наименование"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Вона"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Дата изменения"
@@ -467,6 +513,23 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Наименование"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr ""
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Вона"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr ""
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Дата изменения"
@@ -499,6 +562,16 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "в %"
+#, fuzzy
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "в %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "в %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "в %"
@@ -507,6 +580,16 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "в %"
+#, fuzzy
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "в %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "в %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "в %"
@@ -515,6 +598,21 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "в %"
+#, fuzzy
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "в %"
+
+#, fuzzy
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "в %"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Продажи"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Возможные продажи по сотруднику"
@@ -570,6 +668,12 @@ msgid "Opportunities"
msgstr "Возможные продажи"
#, fuzzy
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Вона"
+
+#, fuzzy
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Продажа Возможной"
@@ -651,6 +755,11 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Возможная продажа"
+#, fuzzy
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Вона"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Отмененно"
@@ -671,6 +780,11 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Возможная продажа"
+#, fuzzy
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Вона"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "История"
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index 9d85765..e4920b1 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -94,9 +94,9 @@ msgctxt "field:sale.opportunity,reference:"
msgid "Reference"
msgstr "Sklic"
-msgctxt "field:sale.opportunity,sale:"
-msgid "Sale"
-msgstr "Prodajni nalog"
+msgctxt "field:sale.opportunity,sales:"
+msgid "Sales"
+msgstr "Prodajni nalogi"
msgctxt "field:sale.opportunity,start_date:"
msgid "Start Date"
@@ -118,6 +118,10 @@ msgctxt "field:sale.opportunity.history,address:"
msgid "Address"
msgstr "Naslov"
+msgctxt "field:sale.opportunity.history,amount:"
+msgid "Amount"
+msgstr "Znesek"
+
msgctxt "field:sale.opportunity.history,comment:"
msgid "Comment"
msgstr "Opomba"
@@ -134,6 +138,14 @@ msgctxt "field:sale.opportunity.history,create_uid:"
msgid "Create User"
msgstr "Izdelal"
+msgctxt "field:sale.opportunity.history,currency:"
+msgid "Currency"
+msgstr "Valuta"
+
+msgctxt "field:sale.opportunity.history,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimalke"
+
msgctxt "field:sale.opportunity.history,date:"
msgid "Change Date"
msgstr "Spremenjeno"
@@ -226,10 +238,6 @@ msgctxt "field:sale.opportunity.line,rec_name:"
msgid "Name"
msgstr "Ime"
-msgctxt "field:sale.opportunity.line,sale_line:"
-msgid "Sale Line"
-msgstr "Prodajna postavka"
-
msgctxt "field:sale.opportunity.line,sequence:"
msgid "Sequence"
msgstr "Zap.št."
@@ -310,6 +318,22 @@ msgctxt "field:sale.opportunity_employee,rec_name:"
msgid "Name"
msgstr "Ime"
+msgctxt "field:sale.opportunity_employee,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Delež dobljenega zneska"
+
+msgctxt "field:sale.opportunity_employee,winning_rate:"
+msgid "Winning Rate"
+msgstr "Dobljeni delež"
+
+msgctxt "field:sale.opportunity_employee,won:"
+msgid "Won"
+msgstr "Dobljeno"
+
+msgctxt "field:sale.opportunity_employee,won_amount:"
+msgid "Won Amount"
+msgstr "Dobljeni znesek"
+
msgctxt "field:sale.opportunity_employee,write_date:"
msgid "Write Date"
msgstr "Zapisano"
@@ -394,6 +418,22 @@ msgctxt "field:sale.opportunity_employee_monthly,rec_name:"
msgid "Name"
msgstr "Ime"
+msgctxt "field:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Delež dobljenega zneska"
+
+msgctxt "field:sale.opportunity_employee_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Dobljeni delež"
+
+msgctxt "field:sale.opportunity_employee_monthly,won:"
+msgid "Won"
+msgstr "Dobljeno"
+
+msgctxt "field:sale.opportunity_employee_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Dobljeni znesek"
+
msgctxt "field:sale.opportunity_employee_monthly,write_date:"
msgid "Write Date"
msgstr "Zapisano"
@@ -466,6 +506,22 @@ msgctxt "field:sale.opportunity_monthly,rec_name:"
msgid "Name"
msgstr "Ime"
+msgctxt "field:sale.opportunity_monthly,winning_amount_rate:"
+msgid "Winning Amount Rate"
+msgstr "Delež dobljenega zneska"
+
+msgctxt "field:sale.opportunity_monthly,winning_rate:"
+msgid "Winning Rate"
+msgstr "Dobljeni delež"
+
+msgctxt "field:sale.opportunity_monthly,won:"
+msgid "Won"
+msgstr "Dobljeno"
+
+msgctxt "field:sale.opportunity_monthly,won_amount:"
+msgid "Won Amount"
+msgstr "Dobljeni znesek"
+
msgctxt "field:sale.opportunity_monthly,write_date:"
msgid "Write Date"
msgstr "Zapisano"
@@ -498,6 +554,14 @@ msgctxt "help:sale.opportunity_employee,conversion_rate:"
msgid "In %"
msgstr "V %"
+msgctxt "help:sale.opportunity_employee,winning_amount_rate:"
+msgid "In %"
+msgstr "V %"
+
+msgctxt "help:sale.opportunity_employee,winning_rate:"
+msgid "In %"
+msgstr "V %"
+
msgctxt "help:sale.opportunity_employee_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "V %"
@@ -506,6 +570,14 @@ msgctxt "help:sale.opportunity_employee_monthly,conversion_rate:"
msgid "In %"
msgstr "V %"
+msgctxt "help:sale.opportunity_employee_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "V %"
+
+msgctxt "help:sale.opportunity_employee_monthly,winning_rate:"
+msgid "In %"
+msgstr "V %"
+
msgctxt "help:sale.opportunity_monthly,conversion_amount_rate:"
msgid "In %"
msgstr "V %"
@@ -514,6 +586,18 @@ msgctxt "help:sale.opportunity_monthly,conversion_rate:"
msgid "In %"
msgstr "V %"
+msgctxt "help:sale.opportunity_monthly,winning_amount_rate:"
+msgid "In %"
+msgstr "V %"
+
+msgctxt "help:sale.opportunity_monthly,winning_rate:"
+msgid "In %"
+msgstr "V %"
+
+msgctxt "model:ir.action,name:act_open_sale_form"
+msgid "Sales"
+msgstr "Prodajni nalogi"
+
msgctxt "model:ir.action,name:act_opportunity_employee_form"
msgid "Opportunities per Employee"
msgstr "Priložnosti na zaposlenca"
@@ -568,6 +652,11 @@ msgctxt ""
msgid "Opportunities"
msgstr "Priložnosti"
+msgctxt ""
+"model:ir.action.act_window.domain,name:act_opportunity_form_domain_won"
+msgid "Won"
+msgstr "Dobljeno"
+
msgctxt "model:ir.sequence,name:sequence_sale_opportunity"
msgid "Sale Opportunity"
msgstr "Prodajna priložnost"
@@ -648,6 +737,10 @@ msgctxt "selection:sale.opportunity,state:"
msgid "Opportunity"
msgstr "Priložnost"
+msgctxt "selection:sale.opportunity,state:"
+msgid "Won"
+msgstr "Dobljeno"
+
msgctxt "selection:sale.opportunity.history,state:"
msgid "Cancelled"
msgstr "Preklicano"
@@ -668,6 +761,14 @@ msgctxt "selection:sale.opportunity.history,state:"
msgid "Opportunity"
msgstr "Priložnost"
+msgctxt "selection:sale.opportunity.history,state:"
+msgid "Won"
+msgstr "Dobljeno"
+
+msgctxt "view:sale.opportunity.history:"
+msgid "Change Time"
+msgstr "Spremenjeno"
+
msgctxt "view:sale.opportunity.history:"
msgid "History"
msgstr "Zgodovina"
diff --git a/opportunity.py b/opportunity.py
index 02419e7..4a2e911 100644
--- a/opportunity.py
+++ b/opportunity.py
@@ -1,9 +1,10 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
"Sales extension for managing leads and opportunities"
import datetime
import time
-from sql import Column, Literal
+
+from sql import Column, Literal, Null
from sql.aggregate import Min, Max, Count, Sum
from sql.conditionals import Coalesce, Case
from sql.functions import Extract
@@ -24,6 +25,7 @@ STATES = [
('lead', 'Lead'),
('opportunity', 'Opportunity'),
('converted', 'Converted'),
+ ('won', 'Won'),
('cancelled', 'Cancelled'),
('lost', 'Lost'),
]
@@ -32,7 +34,7 @@ _STATES_START = {
}
_DEPENDS_START = ['state']
_STATES_STOP = {
- 'readonly': In(Eval('state'), ['converted', 'lost', 'cancelled']),
+ 'readonly': In(Eval('state'), ['converted', 'won', 'lost', 'cancelled']),
}
_DEPENDS_STOP = ['state']
@@ -67,7 +69,6 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
help='Estimated revenue amount')
payment_term = fields.Many2One('account.invoice.payment_term',
'Payment Term', states={
- 'required': Eval('state') == 'converted',
'readonly': In(Eval('state'),
['converted', 'lost', 'cancelled']),
},
@@ -77,10 +78,8 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
domain=[('company', '=', Eval('company'))])
start_date = fields.Date('Start Date', required=True, select=True,
states=_STATES_START, depends=_DEPENDS_START)
- end_date = fields.Date('End Date', select=True, readonly=True, states={
- 'invisible': Not(In(Eval('state'),
- ['converted', 'cancelled', 'lost'])),
- }, depends=['state'])
+ end_date = fields.Date('End Date', select=True,
+ states=_STATES_STOP, depends=_DEPENDS_STOP)
description = fields.Char('Description', required=True,
states=_STATES_STOP, depends=_DEPENDS_STOP)
comment = fields.Text('Comment', states=_STATES_STOP,
@@ -90,23 +89,26 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
state = fields.Selection(STATES, 'State', required=True, select=True,
sort=False, readonly=True)
probability = fields.Integer('Conversion Probability', required=True,
- states={
- 'readonly': Not(In(Eval('state'), ['opportunity', 'lead'])),
- }, depends=['state'], help="Percentage between 0 and 100")
+ states={
+ 'readonly': ~Eval('state').in_(
+ ['opportunity', 'lead', 'converted']),
+ },
+ depends=['state'], help="Percentage between 0 and 100")
history = fields.One2Many('sale.opportunity.history', 'opportunity',
'History', readonly=True)
lost_reason = fields.Text('Reason for loss', states={
'invisible': Eval('state') != 'lost',
}, depends=['state'])
- sale = fields.Many2One('sale.sale', 'Sale', readonly=True, states={
- 'invisible': Eval('state') != 'converted',
- }, depends=['state'])
+ sales = fields.One2Many('sale.sale', 'origin', 'Sales')
@classmethod
def __register__(cls, module_name):
+ pool = Pool()
+ Sale = pool.get('sale.sale')
cursor = Transaction().cursor
TableHandler = backend.get('TableHandler')
sql_table = cls.__table__()
+ sale = Sale.__table__()
reference_exists = True
if TableHandler.table_exist(cursor, cls._table):
@@ -122,9 +124,21 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
cursor.execute(*sql_table.update(
columns=[sql_table.reference],
values=[sql_table.id],
- where=sql_table.reference == None))
+ where=sql_table.reference == Null))
table.not_null_action('reference', action='add')
+ # Migration from 3.4: replace sale by origin
+ if table.column_exist('sale'):
+ cursor.execute(*sql_table.select(
+ sql_table.id, sql_table.sale,
+ where=sql_table.sale != Null))
+ for id_, sale_id in cursor.fetchall():
+ cursor.execute(*sale.update(
+ columns=[sale.origin],
+ values=['%s,%s' % (Sale.__name__, sale_id)],
+ where=sale.id == sale_id))
+ table.drop_column('sale', exception=True)
+
@classmethod
def __setup__(cls):
super(SaleOpportunity, cls).__setup__()
@@ -142,10 +156,15 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
('lead', 'opportunity'),
('lead', 'lost'),
('lead', 'cancelled'),
+ ('lead', 'converted'),
('opportunity', 'converted'),
('opportunity', 'lead'),
('opportunity', 'lost'),
('opportunity', 'cancelled'),
+ ('converted', 'won'),
+ ('converted', 'lost'),
+ ('won', 'converted'),
+ ('lost', 'converted'),
('lost', 'lead'),
('cancelled', 'lead'),
))
@@ -211,10 +230,11 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
Sequence = pool.get('ir.sequence')
Config = pool.get('sale.configuration')
- sequence = Config(1).sale_opportunity_sequence
vlist = [x.copy() for x in vlist]
for vals in vlist:
- vals['reference'] = Sequence.get_id(sequence.id)
+ if not vals.get('reference'):
+ sequence = Config(1).sale_opportunity_sequence
+ vals['reference'] = Sequence.get_id(sequence.id)
return super(SaleOpportunity, cls).create(vlist)
@classmethod
@@ -224,7 +244,7 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
default = default.copy()
default.setdefault('reference', None)
default.setdefault('history', None)
- default.setdefault('sale', None)
+ default.setdefault('sales', None)
return super(SaleOpportunity, cls).copy(opportunities, default=default)
def get_currency(self, name):
@@ -235,44 +255,16 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
@fields.depends('company')
def on_change_company(self):
- res = {}
if self.company:
- res['currency'] = self.company.currency.id
- res['currency.rec_name'] = self.company.currency.rec_name
- res['currency_digits'] = self.company.currency.digits
- return res
+ self.currency = self.company.currency
+ self.currency_digits = self.company.currency.digits
@fields.depends('party')
def on_change_party(self):
- PaymentTerm = Pool().get('account.invoice.payment_term')
-
- res = {
- 'payment_term': None,
- }
- if self.party:
- if self.party.customer_payment_term:
- res['payment_term'] = self.party.customer_payment_term.id
- res['payment_term.rec_name'] = \
- self.party.customer_payment_term.rec_name
- if not res['payment_term']:
- res['payment_term'] = self.default_payment_term()
- if res['payment_term']:
- res['payment_term.rec_name'] = PaymentTerm(
- res['payment_term']).rec_name
- return res
-
- def _get_sale_line_opportunity_line(self, sale):
- '''
- Return sale lines for each opportunity line
- '''
- res = {}
- for line in self.lines:
- if line.sale_line:
- continue
- sale_line = line.get_sale_line(sale)
- if sale_line:
- res[line.id] = sale_line
- return res
+ if self.party and self.party.customer_payment_term:
+ self.payment_term = self.party.customer_payment_term
+ else:
+ self.payment_term = self.default_payment_term()
def _get_sale_opportunity(self):
'''
@@ -289,31 +281,19 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
currency=self.company.currency,
comment=self.comment,
sale_date=None,
+ origin=self,
+ warehouse=Sale.default_warehouse(),
)
def create_sale(self):
'''
Create a sale for the opportunity and return the sale
'''
- Line = Pool().get('sale.opportunity.line')
-
- if self.sale:
- return
-
sale = self._get_sale_opportunity()
- sale_lines = self._get_sale_line_opportunity_line(sale)
- sale.save()
-
- for line_id, sale_line in sale_lines.iteritems():
- sale_line.sale = sale
- sale_line.save()
- Line.write([Line(line_id)], {
- 'sale_line': sale_line.id,
- })
-
- self.write([self], {
- 'sale': sale.id,
- })
+ sale_lines = []
+ for line in self.lines:
+ sale_lines.append(line.get_sale_line(sale))
+ sale.lines = sale_lines
return sale
@classmethod
@@ -341,19 +321,33 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
@ModelView.button
@Workflow.transition('converted')
def convert(cls, opportunities):
- Date = Pool().get('ir.date')
- cls.write(opportunities, {
+ pool = Pool()
+ Sale = pool.get('sale.sale')
+ sales = [o.create_sale() for o in opportunities if not o.sales]
+ Sale.save(sales)
+
+ @property
+ def is_forecast(self):
+ pool = Pool()
+ Date = pool.get('ir.date')
+ today = Date.today()
+ return self.end_date or datetime.date.max > today
+
+ @classmethod
+ @Workflow.transition('won')
+ def won(cls, opportunities):
+ pool = Pool()
+ Date = pool.get('ir.date')
+ cls.write(filter(lambda o: o.is_forecast, opportunities), {
'end_date': Date.today(),
})
- for opportunity in opportunities:
- opportunity.create_sale()
@classmethod
@ModelView.button
@Workflow.transition('lost')
def lost(cls, opportunities):
Date = Pool().get('ir.date')
- cls.write(opportunities, {
+ cls.write(filter(lambda o: o.is_forecast, opportunities), {
'end_date': Date.today(),
})
@@ -362,10 +356,69 @@ class SaleOpportunity(Workflow, ModelSQL, ModelView):
@Workflow.transition('cancelled')
def cancel(cls, opportunities):
Date = Pool().get('ir.date')
- cls.write(opportunities, {
+ cls.write(filter(lambda o: o.is_forecast, opportunities), {
'end_date': Date.today(),
})
+ @staticmethod
+ def _sale_won_states():
+ return ['confirmed', 'processing', 'done']
+
+ @staticmethod
+ def _sale_lost_states():
+ return ['cancel']
+
+ def is_won(self):
+ sale_won_states = self._sale_won_states()
+ sale_lost_states = self._sale_lost_states()
+ end_states = sale_won_states + sale_lost_states
+ return (self.sales
+ and all(s.state in end_states for s in self.sales)
+ and any(s.state in sale_won_states for s in self.sales))
+
+ def is_lost(self):
+ sale_lost_states = self._sale_lost_states()
+ return (self.sales
+ and all(s.state in sale_lost_states for s in self.sales))
+
+ @property
+ def sale_amount(self):
+ pool = Pool()
+ Currency = pool.get('currency.currency')
+
+ if not self.sales:
+ return
+
+ sale_lost_states = self._sale_lost_states()
+ amount = 0
+ for sale in self.sales:
+ if sale.state not in sale_lost_states:
+ amount += Currency.compute(sale.currency, sale.untaxed_amount,
+ self.currency)
+ return amount
+
+ @classmethod
+ def process(cls, opportunities):
+ won = []
+ lost = []
+ converted = []
+ for opportunity in opportunities:
+ opportunity.amount = opportunity.sale_amount
+ if opportunity.is_won():
+ won.append(opportunity)
+ elif opportunity.is_lost():
+ lost.append(opportunity)
+ elif (opportunity.state != 'converted'
+ and opportunity.sales):
+ converted.append(opportunity)
+ cls.save(opportunities)
+ if won:
+ cls.won(won)
+ if lost:
+ cls.lost(lost)
+ if converted:
+ cls.convert(converted)
+
class SaleOpportunityLine(ModelSQL, ModelView):
'Sale Opportunity Line'
@@ -381,11 +434,6 @@ class SaleOpportunityLine(ModelSQL, ModelView):
unit = fields.Many2One('product.uom', 'Unit', required=True)
unit_digits = fields.Function(fields.Integer('Unit Digits'),
'on_change_with_unit_digits')
- sale_line = fields.Many2One('sale.line', 'Sale Line', readonly=True,
- states={
- 'invisible': (Eval('_parent_opportunity', {}).get('state')
- != 'converted'),
- })
@classmethod
def __setup__(cls):
@@ -406,7 +454,7 @@ class SaleOpportunityLine(ModelSQL, ModelView):
@staticmethod
def order_sequence(tables):
table, _ = tables[None]
- return [table.sequence == None, table.sequence]
+ return [table.sequence == Null, table.sequence]
@fields.depends('unit')
def on_change_with_unit_digits(self, name=None):
@@ -417,16 +465,13 @@ class SaleOpportunityLine(ModelSQL, ModelView):
@fields.depends('product', 'unit')
def on_change_product(self):
if not self.product:
- return {}
- res = {}
+ return
category = self.product.sale_uom.category
if (not self.unit
or self.unit not in category.uoms):
- res['unit'] = self.product.sale_uom.id
- res['unit.rec_name'] = self.product.sale_uom.rec_name
- res['unit_digits'] = self.product.sale_uom.digits
- return res
+ self.unit = self.product.sale_uom
+ self.unit_digits = self.product.sale_uom.digits
def get_sale_line(self, sale):
'''
@@ -441,8 +486,7 @@ class SaleOpportunityLine(ModelSQL, ModelView):
sale=sale,
description=None,
)
- for k, v in sale_line.on_change_product().iteritems():
- setattr(sale_line, k, v)
+ sale_line.on_change_product()
return sale_line
@@ -468,6 +512,12 @@ class SaleOpportunityHistory(ModelSQL, ModelView):
comment = fields.Text('Comment')
lines = fields.Function(fields.One2Many('sale.opportunity.line', None,
'Lines', datetime_field='date'), 'get_lines')
+ amount = fields.Numeric('Amount', digits=(16, Eval('currency_digits', 2)),
+ depends=['currency_digits'])
+ currency = fields.Function(fields.Many2One('currency.currency',
+ 'Currency'), 'get_currency')
+ currency_digits = fields.Function(fields.Integer('Currency Digits'),
+ 'get_currency_digits')
state = fields.Selection(STATES, 'State')
probability = fields.Integer('Conversion Probability')
lost_reason = fields.Text('Reason for loss', states={
@@ -479,6 +529,12 @@ class SaleOpportunityHistory(ModelSQL, ModelView):
super(SaleOpportunityHistory, cls).__setup__()
cls._order.insert(0, ('date', 'DESC'))
+ def get_currency(self, name):
+ return self.company.currency.id
+
+ def get_currency_digits(self, name):
+ return self.company.currency.digits
+
@classmethod
def table_query(cls):
Opportunity = Pool().get('sale.opportunity')
@@ -531,14 +587,14 @@ class SaleOpportunityHistory(ModelSQL, ModelView):
return res
-class SaleOpportunityEmployee(ModelSQL, ModelView):
- 'Sale Opportunity per Employee'
- __name__ = 'sale.opportunity_employee'
- employee = fields.Many2One('company.employee', 'Employee')
+class SaleOpportunityReportMixin:
number = fields.Integer('Number')
converted = fields.Integer('Converted')
conversion_rate = fields.Function(fields.Float('Conversion Rate',
help='In %'), 'get_conversion_rate')
+ won = fields.Integer('Won')
+ winning_rate = fields.Function(fields.Float('Winning Rate', help='In %'),
+ 'get_winning_rate')
lost = fields.Integer('Lost')
company = fields.Many2One('company.company', 'Company')
currency = fields.Function(fields.Many2One('currency.currency',
@@ -552,63 +608,103 @@ class SaleOpportunityEmployee(ModelSQL, ModelView):
depends=['currency_digits'])
conversion_amount_rate = fields.Function(fields.Float(
'Conversion Amount Rate', help='In %'), 'get_conversion_amount_rate')
+ won_amount = fields.Numeric('Won Amount',
+ digits=(16, Eval('currency_digits', 2)),
+ depends=['currency_digits'])
+ winning_amount_rate = fields.Function(fields.Float(
+ 'Winning Amount Rate', help='In %'), 'get_winning_amount_rate')
@staticmethod
def _converted_state():
- return ['converted']
+ return ['converted', 'won']
+
+ @staticmethod
+ def _won_state():
+ return ['won']
@staticmethod
def _lost_state():
return ['lost']
+ def get_conversion_rate(self, name):
+ if self.number:
+ return float(self.converted) / self.number * 100.0
+ else:
+ return 0.0
+
+ def get_winning_rate(self, name):
+ if self.number:
+ return float(self.won) / self.number * 100.0
+ else:
+ return 0.0
+
+ def get_currency(self, name):
+ return self.company.currency.id
+
+ def get_currency_digits(self, name):
+ return self.company.currency.digits
+
+ def get_conversion_amount_rate(self, name):
+ if self.amount:
+ return float(self.converted_amount) / float(self.amount) * 100.0
+ else:
+ return 0.0
+
+ def get_winning_amount_rate(self, name):
+ if self.amount:
+ return float(self.won_amount) / float(self.amount) * 100.0
+ else:
+ return 0.0
+
@classmethod
def table_query(cls):
Opportunity = Pool().get('sale.opportunity')
opportunity = Opportunity.__table__()
- where = Literal(True)
- if Transaction().context.get('start_date'):
- where &= (opportunity.start_date >=
- Transaction().context['start_date'])
- if Transaction().context.get('end_date'):
- where &= (opportunity.start_date <=
- Transaction().context['end_date'])
return opportunity.select(
- opportunity.employee.as_('id'),
Max(opportunity.create_uid).as_('create_uid'),
Max(opportunity.create_date).as_('create_date'),
Max(opportunity.write_uid).as_('write_uid'),
Max(opportunity.write_date).as_('write_date'),
- opportunity.employee,
opportunity.company,
Count(Literal(1)).as_('number'),
Sum(Case((opportunity.state.in_(cls._converted_state()),
Literal(1)), else_=Literal(0))).as_('converted'),
+ Sum(Case((opportunity.state.in_(cls._won_state()),
+ Literal(1)), else_=Literal(0))).as_('won'),
Sum(Case((opportunity.state.in_(cls._lost_state()),
Literal(1)), else_=Literal(0))).as_('lost'),
Sum(opportunity.amount).as_('amount'),
Sum(Case((opportunity.state.in_(cls._converted_state()),
opportunity.amount),
else_=Literal(0))).as_('converted_amount'),
- where=where,
- group_by=(opportunity.employee, opportunity.company))
-
- def get_conversion_rate(self, name):
- if self.number:
- return float(self.converted) / self.number * 100.0
- else:
- return 0.0
+ Sum(Case((opportunity.state.in_(cls._won_state()),
+ opportunity.amount),
+ else_=Literal(0))).as_('won_amount'))
- def get_currency(self, name):
- return self.company.currency.id
- def get_currency_digits(self, name):
- return self.company.currency.digits
+class SaleOpportunityEmployee(SaleOpportunityReportMixin, ModelSQL, ModelView):
+ 'Sale Opportunity per Employee'
+ __name__ = 'sale.opportunity_employee'
+ employee = fields.Many2One('company.employee', 'Employee')
- def get_conversion_amount_rate(self, name):
- if self.amount:
- return float(self.converted_amount) / float(self.amount) * 100.0
- else:
- return 0.0
+ @classmethod
+ def table_query(cls):
+ query = super(SaleOpportunityEmployee, cls).table_query()
+ opportunity, = query.from_
+ query.columns += (
+ opportunity.employee.as_('id'),
+ opportunity.employee,
+ )
+ where = Literal(True)
+ if Transaction().context.get('start_date'):
+ where &= (opportunity.start_date >=
+ Transaction().context['start_date'])
+ if Transaction().context.get('end_date'):
+ where &= (opportunity.start_date <=
+ Transaction().context['end_date'])
+ query.where = where
+ query.group_by = (opportunity.employee, opportunity.company)
+ return query
class OpenSaleOpportunityEmployeeStart(ModelView):
@@ -636,30 +732,13 @@ class OpenSaleOpportunityEmployee(Wizard):
return action, {}
-class SaleOpportunityMonthly(ModelSQL, ModelView):
+class SaleOpportunityMonthly(SaleOpportunityReportMixin, ModelSQL, ModelView):
'Sale Opportunity per Month'
__name__ = 'sale.opportunity_monthly'
year = fields.Char('Year')
month = fields.Integer('Month')
year_month = fields.Function(fields.Char('Year-Month'),
'get_year_month')
- number = fields.Integer('Number')
- converted = fields.Integer('Converted')
- conversion_rate = fields.Function(fields.Float('Conversion Rate',
- help='In %'), 'get_conversion_rate')
- lost = fields.Integer('Lost')
- company = fields.Many2One('company.company', 'Company')
- currency = fields.Function(fields.Many2One('currency.currency',
- 'Currency'), 'get_currency')
- currency_digits = fields.Function(fields.Integer('Currency Digits'),
- 'get_currency_digits')
- amount = fields.Numeric('Amount', digits=(16, Eval('currency_digits', 2)),
- depends=['currency_digits'])
- converted_amount = fields.Numeric('Converted Amount',
- digits=(16, Eval('currency_digits', 2)),
- depends=['currency_digits'])
- conversion_amount_rate = fields.Function(fields.Float(
- 'Conversion Amount Rate', help='In %'), 'get_conversion_amount_rate')
@classmethod
def __setup__(cls):
@@ -667,90 +746,35 @@ class SaleOpportunityMonthly(ModelSQL, ModelView):
cls._order.insert(0, ('year', 'DESC'))
cls._order.insert(1, ('month', 'DESC'))
- @staticmethod
- def _converted_state():
- return ['converted']
-
- @staticmethod
- def _lost_state():
- return ['lost']
+ def get_year_month(self, name):
+ return '%s-%s' % (self.year, int(self.month))
@classmethod
def table_query(cls):
- Opportunity = Pool().get('sale.opportunity')
- opportunity = Opportunity.__table__()
+ query = super(SaleOpportunityMonthly, cls).table_query()
+ opportunity, = query.from_
type_id = cls.id.sql_type().base
type_year = cls.year.sql_type().base
year_column = Extract('YEAR', opportunity.start_date
).cast(type_year).as_('year')
month_column = Extract('MONTH', opportunity.start_date).as_('month')
- return opportunity.select(
+ query.columns += (
Max(Extract('MONTH', opportunity.start_date)
+ Extract('YEAR', opportunity.start_date) * 100
).cast(type_id).as_('id'),
- Max(opportunity.create_uid).as_('create_uid'),
- Max(opportunity.create_date).as_('create_date'),
- Max(opportunity.write_uid).as_('write_uid'),
- Max(opportunity.write_date).as_('write_date'),
year_column,
- month_column,
- opportunity.company,
- Count(Literal(1)).as_('number'),
- Sum(Case((opportunity.state.in_(cls._converted_state()),
- Literal(1)), else_=Literal(0))).as_('converted'),
- Sum(Case((opportunity.state.in_(cls._lost_state()),
- Literal(1)), else_=Literal(0))).as_('lost'),
- Sum(opportunity.amount).as_('amount'),
- Sum(Case((opportunity.state.in_(cls._converted_state()),
- opportunity.amount),
- else_=Literal(0))).as_('converted_amount'),
- group_by=(year_column, month_column, opportunity.company))
-
- def get_conversion_rate(self, name):
- if self.number:
- return float(self.converted) / self.number * 100.0
- else:
- return 0.0
-
- def get_year_month(self, name):
- return '%s-%s' % (self.year, int(self.month))
-
- def get_currency(self, name):
- return self.company.currency.id
-
- def get_currency_digits(self, name):
- return self.company.currency.digits
-
- def get_conversion_amount_rate(self, name):
- if self.amount:
- return float(self.converted_amount) / float(self.amount) * 100.0
- else:
- return 0.0
+ month_column)
+ query.group_by = (year_column, month_column, opportunity.company)
+ return query
-class SaleOpportunityEmployeeMonthly(ModelSQL, ModelView):
+class SaleOpportunityEmployeeMonthly(
+ SaleOpportunityReportMixin, ModelSQL, ModelView):
'Sale Opportunity per Employee per Month'
__name__ = 'sale.opportunity_employee_monthly'
year = fields.Char('Year')
month = fields.Integer('Month')
employee = fields.Many2One('company.employee', 'Employee')
- number = fields.Integer('Number')
- converted = fields.Integer('Converted')
- conversion_rate = fields.Function(fields.Float('Conversion Rate',
- help='In %'), 'get_conversion_rate')
- lost = fields.Integer('Lost')
- company = fields.Many2One('company.company', 'Company')
- currency = fields.Function(fields.Many2One('currency.currency',
- 'Currency'), 'get_currency')
- currency_digits = fields.Function(fields.Integer('Currency Digits'),
- 'get_currency_digits')
- amount = fields.Numeric('Amount', digits=(16, Eval('currency_digits', 2)),
- depends=['currency_digits'])
- converted_amount = fields.Numeric('Converted Amount',
- digits=(16, Eval('currency_digits', 2)),
- depends=['currency_digits'])
- conversion_amount_rate = fields.Function(fields.Float(
- 'Conversion Amount Rate', help='In %'), 'get_conversion_amount_rate')
@classmethod
def __setup__(cls):
@@ -759,62 +783,24 @@ class SaleOpportunityEmployeeMonthly(ModelSQL, ModelView):
cls._order.insert(1, ('month', 'DESC'))
cls._order.insert(2, ('employee', 'ASC'))
- @staticmethod
- def _converted_state():
- return ['converted']
-
- @staticmethod
- def _lost_state():
- return ['lost']
-
@classmethod
def table_query(cls):
- Opportunity = Pool().get('sale.opportunity')
- opportunity = Opportunity.__table__()
+ query = super(SaleOpportunityEmployeeMonthly, cls).table_query()
+ opportunity, = query.from_
type_id = cls.id.sql_type().base
type_year = cls.year.sql_type().base
year_column = Extract('YEAR', opportunity.start_date
).cast(type_year).as_('year')
month_column = Extract('MONTH', opportunity.start_date).as_('month')
- return opportunity.select(
+ query.columns += (
Max(Extract('MONTH', opportunity.start_date)
+ Extract('YEAR', opportunity.start_date) * 100
+ opportunity.employee * 1000000
).cast(type_id).as_('id'),
- Max(opportunity.create_uid).as_('create_uid'),
- Max(opportunity.create_date).as_('create_date'),
- Max(opportunity.write_uid).as_('write_uid'),
- Max(opportunity.write_date).as_('write_date'),
year_column,
month_column,
opportunity.employee,
- opportunity.company,
- Count(Literal(1)).as_('number'),
- Sum(Case((opportunity.state.in_(cls._converted_state()),
- Literal(1)), else_=Literal(0))).as_('converted'),
- Sum(Case((opportunity.state.in_(cls._lost_state()),
- Literal(1)), else_=Literal(0))).as_('lost'),
- Sum(opportunity.amount).as_('amount'),
- Sum(Case((opportunity.state.in_(cls._converted_state()),
- opportunity.amount),
- else_=Literal(0))).as_('converted_amount'),
- group_by=(year_column, month_column, opportunity.employee,
- opportunity.company))
-
- def get_conversion_rate(self, name):
- if self.number:
- return float(self.converted) / self.number * 100.0
- else:
- return 0.0
-
- def get_currency(self, name):
- return self.company.currency.id
-
- def get_currency_digits(self, name):
- return self.company.currency.digits
-
- def get_conversion_amount_rate(self, name):
- if self.amount:
- return float(self.converted_amount) / float(self.amount) * 100.0
- else:
- return 0.0
+ )
+ query.group_by = (year_column, month_column,
+ opportunity.employee, opportunity.company)
+ return query
diff --git a/opportunity.xml b/opportunity.xml
index 4b1dea0..54c9400 100644
--- a/opportunity.xml
+++ b/opportunity.xml
@@ -64,35 +64,46 @@ this repository contains the full copyright notices and license terms. -->
id="act_opportunity_form_domain_leads">
<field name="name">Leads</field>
<field name="sequence" eval="10"/>
- <field name="domain">[("state", "=", "lead")]</field>
+ <field name="domain" eval="[('state', '=', 'lead')]" pyson="1"/>
<field name="act_window" ref="act_opportunity_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_opportunity_form_domain_opportunities">
<field name="name">Opportunities</field>
<field name="sequence" eval="20"/>
- <field name="domain">[("state", "=", "opportunity")]</field>
+ <field name="domain"
+ eval="[('state', '=', 'opportunity')]" pyson="1"/>
<field name="act_window" ref="act_opportunity_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_opportunity_form_domain_converted">
<field name="name">Converted</field>
<field name="sequence" eval="30"/>
- <field name="domain">[("state", "=", "converted")]</field>
+ <field name="domain"
+ eval="[('state', '=', 'converted')]" pyson="1"/>
+ <field name="act_window" ref="act_opportunity_form"/>
+ </record>
+ <record model="ir.action.act_window.domain"
+ id="act_opportunity_form_domain_won">
+ <field name="name">Won</field>
+ <field name="sequence" eval="40"/>
+ <field name="domain" eval="[('state', '=', 'won')]" pyson="1"/>
<field name="act_window" ref="act_opportunity_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_opportunity_form_domain_cancelled">
<field name="name">Cancelled</field>
- <field name="sequence" eval="40"/>
- <field name="domain">[("state", "=", "cancelled")]</field>
+ <field name="sequence" eval="50"/>
+ <field name="domain"
+ eval="[('state', '=', 'cancelled')]" pyson="1"/>
<field name="act_window" ref="act_opportunity_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_opportunity_form_domain_lost">
<field name="name">Lost</field>
- <field name="sequence" eval="50"/>
- <field name="domain">[("state", "=", "lost")]</field>
+ <field name="sequence" eval="60"/>
+ <field name="domain"
+ eval="[('state', '=', 'lost')]" pyson="1"/>
<field name="act_window" ref="act_opportunity_form"/>
</record>
<record model="ir.action.act_window.domain"
@@ -184,10 +195,25 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_group_opportunity1">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_opportunity"/>
</record>
+ <record model="ir.action.act_window" id="act_open_sale_form">
+ <field name="name">Sales</field>
+ <field name="res_model">sale.sale</field>
+ <field name="domain"
+ eval="[('origin.id', 'in', Eval('active_ids'), 'sale.opportunity')]"
+ pyson="1"/>
+ </record>
+ <record model="ir.action.keyword" id="act_open_sale_keyword1">
+ <field name="keyword">form_relate</field>
+ <field name="model">sale.opportunity,-1</field>
+ <field name="action" ref="act_open_sale_form"/>
+ </record>
+
<record model="ir.ui.view" id="opportunity_line_view_form">
<field name="model">sale.opportunity.line</field>
<field name="type">form</field>
@@ -263,7 +289,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_group_opportunity_history1">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_opportunity_history"/>
</record>
@@ -313,7 +341,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_group_opportunity_employee1">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_opportunity_employee"/>
</record>
@@ -379,7 +409,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_group_opportunity_monthly1">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_opportunity_monthly"/>
</record>
@@ -409,7 +441,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_group_opportunity_employee_monthly1">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_opportunity_employee_monthly"/>
</record>
diff --git a/party.xml b/party.xml
index 7a5a2af..7d1633a 100644
--- a/party.xml
+++ b/party.xml
@@ -6,10 +6,11 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_opportunity_form2">
<field name="name">Sales Leads/Opportunities</field>
<field name="res_model">sale.opportunity</field>
- <field name="domain">[('party', '=', Eval('active_ids'))]</field>
+ <field name="domain"
+ eval="[('party', 'in', Eval('active_ids'))]" pyson="1"/>
</record>
<record model="ir.action.keyword"
- id="act_open_sale_keyword1">
+ id="act_open_sale_opportunity_keyword1">
<field name="keyword">form_relate</field>
<field name="model">party.party,-1</field>
<field name="action" ref="act_opportunity_form2"/>
diff --git a/sale.py b/sale.py
new file mode 100644
index 0000000..23f30f4
--- /dev/null
+++ b/sale.py
@@ -0,0 +1,61 @@
+# 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 functools import wraps
+
+from trytond.pool import PoolMeta, Pool
+from trytond.transaction import Transaction
+
+__all__ = ['Sale']
+__metaclass__ = PoolMeta
+
+
+def process_opportunity(func):
+ @wraps(func)
+ def wrapper(cls, sales):
+ pool = Pool()
+ Opportunity = pool.get('sale.opportunity')
+ with Transaction().set_context(_check_access=False):
+ opportunities = [s.origin for s in cls.browse(sales)
+ if isinstance(s.origin, Opportunity)]
+ func(cls, sales)
+ with Transaction().set_context(_check_access=False):
+ Opportunity.process(opportunities)
+ return wrapper
+
+
+class Sale:
+ __name__ = 'sale.sale'
+
+ @classmethod
+ def _get_origin(cls):
+ return super(Sale, cls)._get_origin() + ['sale.opportunity']
+
+ @classmethod
+ @process_opportunity
+ def delete(cls, sales):
+ super(Sale, cls).delete(sales)
+
+ @classmethod
+ @process_opportunity
+ def cancel(cls, sales):
+ super(Sale, cls).cancel(sales)
+
+ @classmethod
+ @process_opportunity
+ def quote(cls, sales):
+ super(Sale, cls).quote(sales)
+
+ @classmethod
+ @process_opportunity
+ def confirm(cls, sales):
+ super(Sale, cls).confirm(sales)
+
+ @classmethod
+ @process_opportunity
+ def proceed(cls, sales):
+ super(Sale, cls).proceed(sales)
+
+ @classmethod
+ @process_opportunity
+ def do(cls, sales):
+ super(Sale, cls).do(sales)
diff --git a/setup.py b/setup.py
index 8f5f9b9..bf4466c 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 setuptools import setup
import re
@@ -41,12 +41,18 @@ if minor_version % 2:
'hg+http://hg.tryton.org/modules/%s#egg=%s-%s' % (
name[8:], name, version))
-requires = ['python-sql']
+requires = ['python-sql >= 0.4']
for dep in info.get('depends', []):
if not re.match(r'(ir|res|webdav)(\W|$)', dep):
requires.append(get_require_version('trytond_%s' % dep))
requires.append(get_require_version('trytond'))
+tests_require = [get_require_version('proteus')]
+dependency_links = []
+if minor_version % 2:
+ # Add development index for testing with proteus
+ dependency_links.append('https://trydevpi.tryton.org/')
+
setup(name=name,
version=version,
description='Tryton module with leads and opportunities',
@@ -63,7 +69,7 @@ setup(name=name,
],
package_data={
'trytond.modules.sale_opportunity': (info.get('xml', [])
- + ['tryton.cfg', 'view/*.xml', 'locale/*.po']),
+ + ['tryton.cfg', 'view/*.xml', 'locale/*.po', 'tests/*.rst']),
},
classifiers=[
'Development Status :: 5 - Production/Stable',
@@ -85,10 +91,13 @@ setup(name=name,
'Natural Language :: Spanish',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: Implementation :: CPython',
+ 'Programming Language :: Python :: Implementation :: PyPy',
'Topic :: Office/Business',
],
license='GPL-3',
install_requires=requires,
+ dependency_links=dependency_links,
zip_safe=False,
entry_points="""
[trytond.modules]
@@ -96,4 +105,5 @@ setup(name=name,
""",
test_suite='tests',
test_loader='trytond.test_loader:Loader',
+ tests_require=tests_require,
)
diff --git a/tests/__init__.py b/tests/__init__.py
index 224624d..cf67b15 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 .test_sale_opportunity import suite
diff --git a/tests/scenario_sale_opportunity.rst b/tests/scenario_sale_opportunity.rst
new file mode 100644
index 0000000..d79a075
--- /dev/null
+++ b/tests/scenario_sale_opportunity.rst
@@ -0,0 +1,217 @@
+=========================
+Sale Opportunity Scenario
+=========================
+
+Imports::
+
+ >>> from decimal import Decimal
+ >>> from proteus import config, Model, Wizard
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
+ >>> from trytond.modules.account.tests.tools import create_chart, \
+ ... get_accounts
+ >>> from.trytond.modules.account_invoice.tests.tools import \
+ ... create_payment_term
+
+Create database::
+
+ >>> config = config.set_trytond()
+ >>> config.pool.test = True
+
+Install sale_opportunity::
+
+ >>> Module = Model.get('ir.module.module')
+ >>> sale_opportunity_module, = Module.find([('name', '=', 'sale_opportunity')])
+ >>> sale_opportunity_module.click('install')
+ >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+
+Create company::
+
+ >>> _ = create_company()
+ >>> company = get_company()
+
+Reload the context::
+
+ >>> User = Model.get('res.user')
+ >>> Group = Model.get('res.group')
+ >>> config._context = User.get_preferences(True, config.context)
+
+Create chart of accounts::
+
+ >>> _ = create_chart(company)
+ >>> accounts = get_accounts(company)
+ >>> revenue = accounts['revenue']
+
+Create sale opportunity user::
+
+ >>> sale_opportunity_user = User()
+ >>> sale_opportunity_user.name = 'Sale Opportunity'
+ >>> sale_opportunity_user.login = 'sale_opportunity'
+ >>> sale_opportunity_user.main_company = company
+ >>> sale_opportunity_group, = Group.find(
+ ... [('name', '=', 'Sale Opportunity')])
+ >>> sale_opportunity_user.groups.append(sale_opportunity_group)
+
+ >>> Employee = Model.get('company.employee')
+ >>> Party = Model.get('party.party')
+ >>> employee_party = Party(name='Employee')
+ >>> employee_party.save()
+ >>> employee = Employee(party=employee_party)
+ >>> employee.save()
+ >>> sale_opportunity_user.employees.append(employee)
+ >>> sale_opportunity_user.employee = employee
+
+ >>> sale_opportunity_user.save()
+
+Create sale user::
+
+ >>> sale_user = User()
+ >>> sale_user.name = 'Sale'
+ >>> sale_user.login = 'sale'
+ >>> sale_user.main_company = company
+ >>> sale_group, = Group.find([('name', '=', 'Sales')])
+ >>> sale_user.groups.append(sale_group)
+ >>> sale_user.save()
+
+Create party::
+
+ >>> Party = Model.get('party.party')
+ >>> customer = Party(name='Customer')
+ >>> customer.save()
+
+Create product::
+
+ >>> ProductUom = Model.get('product.uom')
+ >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+ >>> ProductTemplate = Model.get('product.template')
+ >>> Product = Model.get('product.product')
+ >>> product = Product()
+ >>> template = ProductTemplate()
+ >>> template.name = 'product'
+ >>> template.default_uom = unit
+ >>> template.type = 'goods'
+ >>> template.salable = True
+ >>> template.list_price = Decimal('10')
+ >>> template.cost_price = Decimal('5')
+ >>> template.cost_price_method = 'fixed'
+ >>> template.account_revenue = revenue
+ >>> template.save()
+ >>> product.template = template
+ >>> product.save()
+
+Create payment term::
+
+ >>> payment_term = create_payment_term()
+ >>> payment_term.save()
+
+Create an lead::
+
+ >>> config.user = sale_opportunity_user.id
+ >>> Opportunity = Model.get('sale.opportunity')
+ >>> opportunity = Opportunity()
+ >>> opportunity.description = 'Opportunity'
+ >>> opportunity.save()
+ >>> opportunity.state
+ u'lead'
+
+Convert to opportunity::
+
+ >>> opportunity.party = customer
+ >>> opportunity.address, = customer.addresses
+ >>> opportunity.payment_term = payment_term
+ >>> opportunity.amount = Decimal(100)
+ >>> opportunity.click('opportunity')
+ >>> opportunity.state
+ u'opportunity'
+
+Add a line::
+
+ >>> line = opportunity.lines.new()
+ >>> line.product = product
+ >>> line.quantity = 10
+ >>> opportunity.save()
+
+Convert to sale::
+
+ >>> opportunity.click('convert')
+ >>> opportunity.state
+ u'converted'
+
+Find the sale::
+
+ >>> config.user = sale_user.id
+ >>> Sale = Model.get('sale.sale')
+ >>> sale, = Sale.find(
+ ... [('origin', '=', 'sale.opportunity,%s' % opportunity.id)])
+ >>> line, = sale.lines
+ >>> line.product == product
+ True
+ >>> line.quantity
+ 10.0
+
+Quote different quantity::
+
+ >>> line.quantity = 9
+ >>> sale.click('quote')
+
+Check opportunity amount updated::
+
+ >>> config.user = sale_opportunity_user.id
+ >>> opportunity.reload()
+ >>> opportunity.amount
+ Decimal('90.00')
+ >>> opportunity.state
+ u'converted'
+
+Add a second quotation::
+
+ >>> config.user = sale_user.id
+ >>> second_sale = Sale()
+ >>> second_sale.origin = opportunity
+ >>> second_sale.party = customer
+ >>> second_sale.payment_term = payment_term
+ >>> line = second_sale.lines.new()
+ >>> line.product = product
+ >>> line.quantity = 1
+ >>> second_sale.click('quote')
+
+Check opportunity amount updated::
+
+ >>> config.user = sale_opportunity_user.id
+ >>> opportunity.reload()
+ >>> opportunity.amount
+ Decimal('100.00')
+ >>> opportunity.state
+ u'converted'
+
+Cancel second quotation::
+
+ >>> config.user = sale_user.id
+ >>> second_sale.click('cancel')
+ >>> second_sale.state
+ u'cancel'
+
+Check opportunity amount updated::
+
+ >>> config.user = sale_opportunity_user.id
+ >>> opportunity.reload()
+ >>> opportunity.amount
+ Decimal('90.00')
+ >>> opportunity.state
+ u'converted'
+
+Won opportunity::
+
+ >>> config.user = sale_user.id
+ >>> sale.click('confirm')
+ >>> config.user = sale_opportunity_user.id
+ >>> opportunity.reload()
+ >>> opportunity.state
+ u'won'
+
+Check opportunity state updated::
+
+ >>> config.user = sale_opportunity_user.id
+ >>> opportunity.reload()
+ >>> opportunity.state
+ u'won'
diff --git a/tests/test_sale_opportunity.py b/tests/test_sale_opportunity.py
index 7d2ec47..963f5c9 100644
--- a/tests/test_sale_opportunity.py
+++ b/tests/test_sale_opportunity.py
@@ -1,27 +1,22 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
import unittest
+import doctest
import trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view, test_depends
+from trytond.tests.test_tryton import ModuleTestCase
+from trytond.tests.test_tryton import doctest_setup, doctest_teardown
-class SaleOpportunityTestCase(unittest.TestCase):
+class SaleOpportunityTestCase(ModuleTestCase):
'Test SaleOpportunity module'
-
- def setUp(self):
- trytond.tests.test_tryton.install_module('sale_opportunity')
-
- def test0005views(self):
- 'Test views'
- test_view('sale_opportunity')
-
- def test0006depends(self):
- 'Test depends'
- test_depends()
+ module = 'sale_opportunity'
def suite():
suite = trytond.tests.test_tryton.suite()
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
SaleOpportunityTestCase))
+ suite.addTests(doctest.DocFileSuite('scenario_sale_opportunity.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 aeb7b7b..979e798 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=3.4.2
+version=3.6.0
depends:
account
company
diff --git a/trytond_sale_opportunity.egg-info/PKG-INFO b/trytond_sale_opportunity.egg-info/PKG-INFO
index 298a72b..0bc1735 100644
--- a/trytond_sale_opportunity.egg-info/PKG-INFO
+++ b/trytond_sale_opportunity.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond-sale-opportunity
-Version: 3.4.2
+Version: 3.6.0
Summary: Tryton module with leads and opportunities
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.4/
+Download-URL: http://downloads.tryton.org/3.6/
Description: trytond_sale_opportunity
========================
@@ -64,4 +64,6 @@ Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Office/Business
diff --git a/trytond_sale_opportunity.egg-info/SOURCES.txt b/trytond_sale_opportunity.egg-info/SOURCES.txt
index ebfabdd..f2e8da1 100644
--- a/trytond_sale_opportunity.egg-info/SOURCES.txt
+++ b/trytond_sale_opportunity.egg-info/SOURCES.txt
@@ -15,6 +15,7 @@ tryton.cfg
./opportunity.py
./opportunity.xml
./party.xml
+./sale.py
./tryton.cfg
./locale/bg_BG.po
./locale/ca_ES.po
@@ -29,6 +30,7 @@ tryton.cfg
./locale/ru_RU.po
./locale/sl_SI.po
./tests/__init__.py
+./tests/scenario_sale_opportunity.rst
./tests/test_sale_opportunity.py
./view/configuration_form.xml
./view/opportunity_employee_graph1.xml
@@ -45,6 +47,7 @@ tryton.cfg
./view/opportunity_monthly_graph2.xml
./view/opportunity_monthly_tree.xml
./view/opportunity_tree.xml
+doc/index.rst
locale/bg_BG.po
locale/ca_ES.po
locale/cs_CZ.po
@@ -58,7 +61,10 @@ locale/nl_NL.po
locale/ru_RU.po
locale/sl_SI.po
tests/__init__.py
+tests/__init__.pyc
+tests/scenario_sale_opportunity.rst
tests/test_sale_opportunity.py
+tests/test_sale_opportunity.pyc
trytond_sale_opportunity.egg-info/PKG-INFO
trytond_sale_opportunity.egg-info/SOURCES.txt
trytond_sale_opportunity.egg-info/dependency_links.txt
diff --git a/trytond_sale_opportunity.egg-info/requires.txt b/trytond_sale_opportunity.egg-info/requires.txt
index 4490e97..5028b19 100644
--- a/trytond_sale_opportunity.egg-info/requires.txt
+++ b/trytond_sale_opportunity.egg-info/requires.txt
@@ -1,9 +1,9 @@
-python-sql
-trytond_account >= 3.4, < 3.5
-trytond_company >= 3.4, < 3.5
-trytond_currency >= 3.4, < 3.5
-trytond_party >= 3.4, < 3.5
-trytond_product >= 3.4, < 3.5
-trytond_sale >= 3.4, < 3.5
-trytond_stock >= 3.4, < 3.5
-trytond >= 3.4, < 3.5
\ No newline at end of file
+python-sql >= 0.4
+trytond_account >= 3.6, < 3.7
+trytond_company >= 3.6, < 3.7
+trytond_currency >= 3.6, < 3.7
+trytond_party >= 3.6, < 3.7
+trytond_product >= 3.6, < 3.7
+trytond_sale >= 3.6, < 3.7
+trytond_stock >= 3.6, < 3.7
+trytond >= 3.6, < 3.7
\ No newline at end of file
diff --git a/view/opportunity_employee_graph1.xml b/view/opportunity_employee_graph1.xml
index 8c7fc4a..30ceceb 100644
--- a/view/opportunity_employee_graph1.xml
+++ b/view/opportunity_employee_graph1.xml
@@ -8,6 +8,7 @@ this repository contains the full copyright notices and license terms. -->
<y>
<field name="number"/>
<field name="converted"/>
+ <field name="won"/>
<field name="lost"/>
</y>
</graph>
diff --git a/view/opportunity_employee_graph2.xml b/view/opportunity_employee_graph2.xml
index 5b700dd..c3505b6 100644
--- a/view/opportunity_employee_graph2.xml
+++ b/view/opportunity_employee_graph2.xml
@@ -8,5 +8,6 @@ this repository contains the full copyright notices and license terms. -->
<y>
<field name="amount"/>
<field name="converted_amount"/>
+ <field name="won_amount"/>
</y>
</graph>
diff --git a/view/opportunity_employee_monthly_tree.xml b/view/opportunity_employee_monthly_tree.xml
index 83a8bf1..e62a7c0 100644
--- a/view/opportunity_employee_monthly_tree.xml
+++ b/view/opportunity_employee_monthly_tree.xml
@@ -7,10 +7,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="employee"/>
<field name="number"/>
<field name="converted"/>
+ <field name="won"/>
<field name="lost"/>
<field name="conversion_rate"/>
+ <field name="winning_rate"/>
<field name="amount"/>
<field name="converted_amount"/>
+ <field name="won_amount"/>
<field name="currency"/>
<field name="conversion_amount_rate"/>
+ <field name="winning_amount_rate"/>
</tree>
diff --git a/view/opportunity_employee_tree.xml b/view/opportunity_employee_tree.xml
index edb2259..f710988 100644
--- a/view/opportunity_employee_tree.xml
+++ b/view/opportunity_employee_tree.xml
@@ -5,10 +5,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="employee"/>
<field name="number"/>
<field name="converted"/>
+ <field name="won"/>
<field name="lost"/>
<field name="conversion_rate"/>
+ <field name="winning_rate"/>
<field name="amount"/>
<field name="converted_amount"/>
+ <field name="won_amount"/>
<field name="currency"/>
<field name="conversion_amount_rate"/>
+ <field name="winning_amount_rate"/>
</tree>
diff --git a/view/opportunity_form.xml b/view/opportunity_form.xml
index 4414219..6983603 100644
--- a/view/opportunity_form.xml
+++ b/view/opportunity_form.xml
@@ -29,8 +29,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="end_date"/>
<label name="payment_term"/>
<field name="payment_term"/>
- <label name="sale"/>
- <field name="sale"/>
<separator name="comment" colspan="4"/>
<field name="comment" colspan="4"/>
<separator name="lost_reason" colspan="4"/>
@@ -56,6 +54,9 @@ this repository contains the full copyright notices and license terms. -->
<page name="lines">
<field name="lines"/>
</page>
+ <page name="sales">
+ <field name="sales" colspan="4"/>
+ </page>
<page name="history">
<field name="history"/>
</page>
diff --git a/view/opportunity_history_form.xml b/view/opportunity_history_form.xml
index f00a9ec..3593006 100644
--- a/view/opportunity_history_form.xml
+++ b/view/opportunity_history_form.xml
@@ -14,6 +14,11 @@ this repository contains the full copyright notices and license terms. -->
<field name="address"/>
<label name="description"/>
<field name="description"/>
+ <label name="amount"/>
+ <group col="2" id="amount_currency">
+ <field name="amount"/>
+ <field name="currency"/>
+ </group>
<label name="probability"/>
<field name="probability"/>
<notebook colspan="4">
diff --git a/view/opportunity_history_tree.xml b/view/opportunity_history_tree.xml
index 82892f0..840ce25 100644
--- a/view/opportunity_history_tree.xml
+++ b/view/opportunity_history_tree.xml
@@ -2,12 +2,15 @@
<!-- 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="History">
- <field name="date"/>
+ <field name="date" widget="date"/>
+ <field name="date" widget="time" string="Change Time"/>
<field name="user"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="description"/>
<field name="party"/>
+ <field name="amount"/>
+ <field name="currency"/>
<field name="state"/>
<field name="probability"/>
</tree>
diff --git a/view/opportunity_line_form.xml b/view/opportunity_line_form.xml
index ab8d82d..f2151b8 100644
--- a/view/opportunity_line_form.xml
+++ b/view/opportunity_line_form.xml
@@ -12,6 +12,4 @@ this repository contains the full copyright notices and license terms. -->
<field name="quantity"/>
<label name="unit"/>
<field name="unit"/>
- <label name="sale_line"/>
- <field name="sale_line"/>
</form>
diff --git a/view/opportunity_monthly_graph1.xml b/view/opportunity_monthly_graph1.xml
index 335b42c..1e70d28 100644
--- a/view/opportunity_monthly_graph1.xml
+++ b/view/opportunity_monthly_graph1.xml
@@ -8,6 +8,7 @@ this repository contains the full copyright notices and license terms. -->
<y>
<field name="number"/>
<field name="converted"/>
+ <field name="won"/>
<field name="lost"/>
</y>
</graph>
diff --git a/view/opportunity_monthly_graph2.xml b/view/opportunity_monthly_graph2.xml
index 97141fc..52b4c1f 100644
--- a/view/opportunity_monthly_graph2.xml
+++ b/view/opportunity_monthly_graph2.xml
@@ -8,5 +8,6 @@ this repository contains the full copyright notices and license terms. -->
<y>
<field name="amount"/>
<field name="converted_amount"/>
+ <field name="won_amount"/>
</y>
</graph>
diff --git a/view/opportunity_monthly_tree.xml b/view/opportunity_monthly_tree.xml
index 12cbbf5..0068888 100644
--- a/view/opportunity_monthly_tree.xml
+++ b/view/opportunity_monthly_tree.xml
@@ -6,10 +6,14 @@ this repository contains the full copyright notices and license terms. -->
<field name="month"/>
<field name="number"/>
<field name="converted"/>
+ <field name="won"/>
<field name="lost"/>
<field name="conversion_rate"/>
+ <field name="winning_rate"/>
<field name="amount"/>
<field name="converted_amount"/>
+ <field name="won_amount"/>
<field name="currency"/>
<field name="conversion_amount_rate"/>
+ <field name="winning_amount_rate"/>
</tree>
--
tryton-modules-sale-opportunity
More information about the tryton-debian-vcs
mailing list