[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