[tryton-debian-vcs] tryton-modules-sale-extra branch upstream created. 3c8dc4960a5261d87e30be086146f9aa2d2ad268

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Sun Apr 26 18:07:06 UTC 2015


The following commit has been merged in the upstream branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-sale-extra.git;a=commitdiff;h=3c8dc4960a5261d87e30be086146f9aa2d2ad268
commit 3c8dc4960a5261d87e30be086146f9aa2d2ad268
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Sat Apr 25 17:23:37 2015 +0200

    Adding upstream version 3.6.0.
    
    Signed-off-by: Mathias Behrle <mathiasb at m9s.biz>

diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..8708a5e
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,70 @@
+Metadata-Version: 1.1
+Name: trytond_sale_extra
+Version: 3.6.0
+Summary: Tryton module for sale extra
+Home-page: http://www.tryton.org/
+Author: Tryton
+Author-email: issue_tracker at tryton.org
+License: GPL-3
+Download-URL: http://downloads.tryton.org/3.6/
+Description: trytond_sale_extra
+        ==================
+        
+        The sale_extra module of the Tryton application platform.
+        
+        Installing
+        ----------
+        
+        See INSTALL
+        
+        Support
+        -------
+        
+        If you encounter any problems with Tryton, please don't hesitate to ask
+        questions on the Tryton bug tracker, mailing list, wiki or IRC channel:
+        
+          http://bugs.tryton.org/
+          http://groups.tryton.org/
+          http://wiki.tryton.org/
+          irc://irc.freenode.net/tryton
+        
+        License
+        -------
+        
+        See LICENSE
+        
+        Copyright
+        ---------
+        
+        See COPYRIGHT
+        
+        
+        For more information please visit the Tryton web site:
+        
+          http://www.tryton.org/
+        
+Keywords: tryton sale extra premium cost
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Plugins
+Classifier: Framework :: Tryton
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Financial and Insurance Industry
+Classifier: Intended Audience :: Legal Industry
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Catalan
+Classifier: Natural Language :: Czech
+Classifier: Natural Language :: Dutch
+Classifier: Natural Language :: English
+Classifier: Natural Language :: French
+Classifier: Natural Language :: German
+Classifier: Natural Language :: Russian
+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
+Classifier: Topic :: Office/Business :: Financial :: Accounting
diff --git a/README b/README
new file mode 100644
index 0000000..8b32c36
--- /dev/null
+++ b/README
@@ -0,0 +1,35 @@
+trytond_sale_extra
+==================
+
+The sale_extra module of the Tryton application platform.
+
+Installing
+----------
+
+See INSTALL
+
+Support
+-------
+
+If you encounter any problems with Tryton, please don't hesitate to ask
+questions on the Tryton bug tracker, mailing list, wiki or IRC channel:
+
+  http://bugs.tryton.org/
+  http://groups.tryton.org/
+  http://wiki.tryton.org/
+  irc://irc.freenode.net/tryton
+
+License
+-------
+
+See LICENSE
+
+Copyright
+---------
+
+See COPYRIGHT
+
+
+For more information please visit the Tryton web site:
+
+  http://www.tryton.org/
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..ee99601
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,16 @@
+# 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 .sale import *
+from .price_list import *
+
+
+def register():
+    Pool.register(
+        SaleExtra,
+        SaleExtraLine,
+        Sale,
+        SaleLine,
+        PriceList,
+        module='sale_extra', type_='model')
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
new file mode 100644
index 0000000..d578328
--- /dev/null
+++ b/locale/ca_ES.po
@@ -0,0 +1,151 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Extres de venda"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Actiu"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Data creació"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Usuari creació"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimals de la moneda"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Línies"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Tarifa"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Import de la venda"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Data modificació"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Usuari modificació"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Data creació"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Usuari creació"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Gratis"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Producte"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Categoria UdM del producte"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Import de la venda"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Seqüència"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Unitat"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Decimals de la unitat"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Data modificació"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Usuari modificació"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Extres de venda"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Extra de venda"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Línia extra de venda"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Línia extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Línies extres"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Línia de venta"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extres"
diff --git a/locale/de_DE.po b/locale/de_DE.po
new file mode 100644
index 0000000..bc02043
--- /dev/null
+++ b/locale/de_DE.po
@@ -0,0 +1,151 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Verkaufsextras"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Aktiv"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Nachkommastellen Währung"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Zeilen"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Preisliste"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Verkaufsbetrag"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Letzte Änderung durch"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Gratis"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Kategorie Maßeinheit"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Menge"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Verkaufsbetrag"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Revision"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Einheit"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Nachkommastellen"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Letzte Änderung durch"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Verkaufsextras"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Verkaufsextra"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Verkaufsextrazeile"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Extrazeile"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Extrazeilen"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Verkaufsposition"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extras"
diff --git a/locale/es_AR.po b/locale/es_AR.po
new file mode 100644
index 0000000..03c88b2
--- /dev/null
+++ b/locale/es_AR.po
@@ -0,0 +1,151 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Extras de venta"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de moneda"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Líneas"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Lista de precios"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Importe de venta"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Gratuito"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Categoría de UdM de producto"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Importe de venta"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Unidad"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Decimales de unidad"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Extras de venta"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Extra de venta"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Línea extra de venta"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Línea extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Líneas extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Línea de venta"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extras"
diff --git a/locale/es_CO.po b/locale/es_CO.po
new file mode 100644
index 0000000..d3dfbd8
--- /dev/null
+++ b/locale/es_CO.po
@@ -0,0 +1,152 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Extras de Venta"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Creado por Usuario"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de Moneda"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Líneas"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Lista de Precios"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Valor"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Fecha de Modificación"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Modificado por Usuario"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Creado por Usuario"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Gratis"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Categoría de UdM"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Valor"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Unidad"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Decimales de Unidad"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Fecha de Modificación"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Modificado por Usuario"
+
+#, fuzzy
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Extras de Venta"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Extra en Venta"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Línea Extra de Venta"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Línea Extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Líneas Extras"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Línea de Venta"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extras"
diff --git a/locale/es_EC.po b/locale/es_EC.po
new file mode 100644
index 0000000..511ef56
--- /dev/null
+++ b/locale/es_EC.po
@@ -0,0 +1,151 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Extras de venta"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Creado por Usuario"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de moneda"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Líneas"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Lista de precios"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Importe de venta"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Fecha de modificación"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Modificado por usuario"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Creado por Usuario"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Gratuito"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Cateogría de UdM de producto"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Importe de venta"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Unidad"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Decimales de unidad"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Fecha de modificación"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Modificado por usuario"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Extras de venta"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Extra de venta"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Línea extra de venta"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Línea extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Líneas extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Línea de venta"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extras"
diff --git a/locale/es_ES.po b/locale/es_ES.po
new file mode 100644
index 0000000..0240304
--- /dev/null
+++ b/locale/es_ES.po
@@ -0,0 +1,151 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Extras de venta"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Activo"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimales de la moneda"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Líneas"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Tarifa"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Importe de la venta"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Gratis"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Producto"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Categoría UdM del producto"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Importe de la venta"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Secuencia"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Unidad"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Decimales de la unidad"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Extras de venta"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Extra de venta"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Línea extra de venta"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Línea extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Líneas extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Línea de venta"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extras"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
new file mode 100644
index 0000000..1e05e2c
--- /dev/null
+++ b/locale/fr_FR.po
@@ -0,0 +1,151 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Extras de vente"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Actif"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Décimales de la devise"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Lignes"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Liste de prix"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Montant de la vente"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Libre"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Catégorie d'unité de mesure"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Quantité"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Montant de la vente"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Séquence"
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "Unité"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Décimales de l'unité"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Extras de vente"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Extra de vente"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Ligne de vente extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Ligne extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Lignes extra"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Ligne de vente"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Extra"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Extras"
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
new file mode 100644
index 0000000..cbdaaa0
--- /dev/null
+++ b/locale/sl_SI.po
@@ -0,0 +1,152 @@
+# 
+msgid ""
+msgstr "Content-Type: text/plain; charset=utf-8\n"
+
+msgctxt "field:product.price_list,sale_extras:"
+msgid "Sale Extras"
+msgstr "Prodajni dodatki"
+
+msgctxt "field:sale.extra,active:"
+msgid "Active"
+msgstr "Aktivno"
+
+msgctxt "field:sale.extra,create_date:"
+msgid "Create Date"
+msgstr "Izdelano"
+
+msgctxt "field:sale.extra,create_uid:"
+msgid "Create User"
+msgstr "Izdelal"
+
+msgctxt "field:sale.extra,currency_digits:"
+msgid "Currency Digits"
+msgstr "Decimalke"
+
+msgctxt "field:sale.extra,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra,lines:"
+msgid "Lines"
+msgstr "Postavke"
+
+msgctxt "field:sale.extra,name:"
+msgid "Name"
+msgstr "Naziv"
+
+msgctxt "field:sale.extra,price_list:"
+msgid "Price List"
+msgstr "Cenik"
+
+msgctxt "field:sale.extra,rec_name:"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "field:sale.extra,sale_amount:"
+msgid "Sale Amount"
+msgstr "Znesek prodaje"
+
+msgctxt "field:sale.extra,write_date:"
+msgid "Write Date"
+msgstr "Zapisano"
+
+msgctxt "field:sale.extra,write_uid:"
+msgid "Write User"
+msgstr "Zapisal"
+
+msgctxt "field:sale.extra.line,create_date:"
+msgid "Create Date"
+msgstr "Izdelano"
+
+msgctxt "field:sale.extra.line,create_uid:"
+msgid "Create User"
+msgstr "Izdelal"
+
+msgctxt "field:sale.extra.line,extra:"
+msgid "Extra"
+msgstr "Dodatno"
+
+msgctxt "field:sale.extra.line,free:"
+msgid "Free"
+msgstr "Prosto"
+
+msgctxt "field:sale.extra.line,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:sale.extra.line,product:"
+msgid "Product"
+msgstr "Izdelek"
+
+msgctxt "field:sale.extra.line,product_uom_category:"
+msgid "Product UoM Category"
+msgstr "Kategorije EM izdelka"
+
+msgctxt "field:sale.extra.line,quantity:"
+msgid "Quantity"
+msgstr "Količina"
+
+msgctxt "field:sale.extra.line,rec_name:"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "field:sale.extra.line,sale_amount:"
+msgid "Sale Amount"
+msgstr "Znesek prodaje"
+
+msgctxt "field:sale.extra.line,sequence:"
+msgid "Sequence"
+msgstr "Zap.št."
+
+msgctxt "field:sale.extra.line,unit:"
+msgid "Unit"
+msgstr "enota"
+
+msgctxt "field:sale.extra.line,unit_digits:"
+msgid "Unit Digits"
+msgstr "Decimalke"
+
+msgctxt "field:sale.extra.line,write_date:"
+msgid "Write Date"
+msgstr "Zapisano"
+
+msgctxt "field:sale.extra.line,write_uid:"
+msgid "Write User"
+msgstr "Zapisal"
+
+msgctxt "field:sale.line,extra:"
+msgid "Extra"
+msgstr "Dodatno"
+
+#, fuzzy
+msgctxt "model:ir.action,name:act_extra_form"
+msgid "Sale Extras"
+msgstr "Dodatno"
+
+msgctxt "model:sale.extra,name:"
+msgid "Sale Extra"
+msgstr "Dodatno"
+
+msgctxt "model:sale.extra.line,name:"
+msgid "Sale Extra Line"
+msgstr "Dodatna prodajna postavka"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Line"
+msgstr "Dodatna postavka"
+
+msgctxt "view:sale.extra.line:"
+msgid "Extra Lines"
+msgstr "Dodatne postavke"
+
+msgctxt "view:sale.extra.line:"
+msgid "Sale Line"
+msgstr "Prodajna postavka"
+
+msgctxt "view:sale.extra:"
+msgid "Extra"
+msgstr "Dodatno"
+
+msgctxt "view:sale.extra:"
+msgid "Extras"
+msgstr "Dodatno"
diff --git a/price_list.py b/price_list.py
new file mode 100644
index 0000000..dcca69d
--- /dev/null
+++ b/price_list.py
@@ -0,0 +1,13 @@
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
+from trytond.pool import PoolMeta
+from trytond.model import fields
+
+__all__ = ['PriceList']
+__metaclass__ = PoolMeta
+
+
+class PriceList:
+    __name__ = 'product.price_list'
+
+    sale_extras = fields.One2Many('sale.extra', 'price_list', 'Sale Extras')
diff --git a/price_list.xml b/price_list.xml
new file mode 100644
index 0000000..00f316a
--- /dev/null
+++ b/price_list.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+    <data>
+        <record model="ir.ui.view" id="price_list_view_form">
+            <field name="model">product.price_list</field>
+            <field name="inherit" ref="product_price_list.price_list_view_form"/>
+            <field name="name">price_list_form</field>
+        </record>
+    </data>
+</tryton>
diff --git a/sale.py b/sale.py
new file mode 100644
index 0000000..54dfd7a
--- /dev/null
+++ b/sale.py
@@ -0,0 +1,198 @@
+# 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 decimal import Decimal
+
+from trytond.pool import PoolMeta, Pool
+from trytond.model import ModelSQL, ModelView, MatchMixin, Workflow, fields
+from trytond.pyson import Eval
+
+__all__ = ['Sale', 'SaleLine',
+    'SaleExtra', 'SaleExtraLine']
+__metaclass__ = PoolMeta
+
+
+class Sale:
+    __name__ = 'sale.sale'
+
+    @classmethod
+    @ModelView.button
+    @Workflow.transition('quotation')
+    def quote(cls, sales):
+        super(Sale, cls).quote(sales)
+        for sale in sales:
+            sale.set_extra()
+        cls.save(sales)
+
+    def set_extra(self):
+        'Set extra lines'
+        pool = Pool()
+        Extra = pool.get('sale.extra')
+
+        extra_lines = Extra.get_lines(self)
+        extra2lines = {line.extra: line for line in extra_lines}
+        lines = list(self.lines)
+        for line in list(lines):
+            if line.type != 'line' or not line.extra:
+                continue
+            if line.extra in extra2lines:
+                del extra2lines[line.extra]
+                continue
+            else:
+                lines.remove(line)
+        if extra2lines:
+            lines.extend(extra2lines.values())
+        self.lines = lines
+
+
+class SaleLine:
+    __name__ = 'sale.line'
+
+    extra = fields.Many2One('sale.extra.line', 'Extra', ondelete='RESTRICT')
+
+
+class SaleExtra(ModelSQL, ModelView, MatchMixin):
+    'Sale Extra'
+    __name__ = 'sale.extra'
+
+    name = fields.Char('Name', translate=True, required=True)
+    active = fields.Boolean('Active')
+    price_list = fields.Many2One('product.price_list', 'Price List',
+        required=True, ondelete='CASCADE')
+    sale_amount = fields.Numeric('Sale Amount',
+        digits=(16, Eval('currency_digits', 2)),
+        depends=['currency_digits'])
+    currency_digits = fields.Function(fields.Integer('Currency Digits'),
+        'on_change_with_currency_digits')
+    lines = fields.One2Many('sale.extra.line', 'extra', 'Lines')
+
+    @staticmethod
+    def default_active():
+        return True
+
+    @fields.depends('price_list')
+    def on_change_with_currency_digits(self, name=None):
+        if self.price_list.company:
+            return self.price_list.company.currency.digits
+        return 2
+
+    @classmethod
+    def get_lines(cls, sale, pattern=None):
+        'Return extra sale lines'
+        pool = Pool()
+        Currency = pool.get('currency.currency')
+
+        if not sale.price_list:
+            return []
+
+        if pattern is None:
+            pattern = {}
+        pattern['sale_amount'] = Currency.compute(sale.currency,
+            sale.untaxed_amount, sale.company.currency)
+
+        lines = []
+        for extra in sale.price_list.sale_extras:
+            if extra.match(pattern):
+                for line in extra.lines:
+                    if line.match(pattern):
+                        lines.append(line.get_line(sale))
+                        break
+        return lines
+
+    def match(self, pattern):
+        pattern = pattern.copy()
+        sale_amount = pattern.pop('sale_amount')
+
+        match = super(SaleExtra, self).match(pattern)
+
+        if self.sale_amount is not None:
+            if sale_amount < self.sale_amount:
+                return False
+        return match
+
+
+class SaleExtraLine(ModelSQL, ModelView, MatchMixin):
+    'Sale Extra Line'
+    __name__ = 'sale.extra.line'
+
+    extra = fields.Many2One('sale.extra', 'Extra', required=True,
+        ondelete='CASCADE')
+    sequence = fields.Integer('Sequence')
+    sale_amount = fields.Numeric('Sale Amount',
+        digits=(16, Eval('_parent_extra', {}).get('currency_digits', 2)))
+    product = fields.Many2One('product.product', 'Product', required=True,
+        domain=[('salable', '=', True)])
+    product_uom_category = fields.Function(
+        fields.Many2One('product.uom.category', 'Product UoM Category'),
+        'on_change_with_product_uom_category')
+    quantity = fields.Float('Quantity',
+        digits=(16, Eval('unit_digits', 2)), required=True,
+        depends=['unit_digits'])
+    unit = fields.Many2One('product.uom', 'Unit', required=True,
+        domain=[
+            ('category', '=', Eval('product_uom_category', -1)),
+            ],
+        depends=['product_uom_category'])
+    unit_digits = fields.Function(fields.Integer('Unit Digits'),
+        'on_change_with_unit_digits')
+    free = fields.Boolean('Free')
+
+    @classmethod
+    def __setup__(cls):
+        super(SaleExtraLine, cls).__setup__()
+        cls._order.insert(0, ('extra', 'ASC'))
+        cls._order.insert(0, ('sequence', 'ASC'))
+
+    @fields.depends('product')
+    def on_change_with_product_uom_category(self, name=None):
+        if self.product:
+            return self.product.default_uom_category.id
+
+    @fields.depends('unit')
+    def on_change_with_unit_digits(self, name=None):
+        if self.unit:
+            return self.unit.digits
+        return 2
+
+    @fields.depends('product')
+    def on_change_product(self):
+        if self.product:
+            self.unit = self.product.sale_uom
+
+    @staticmethod
+    def default_free():
+        return False
+
+    def match(self, pattern):
+        pattern = pattern.copy()
+        sale_amount = pattern.pop('sale_amount')
+
+        match = super(SaleExtraLine, self).match(pattern)
+
+        if self.sale_amount is not None:
+            if sale_amount < self.sale_amount:
+                return False
+        return match
+
+    def get_line(self, sale):
+        pool = Pool()
+        Line = pool.get('sale.line')
+
+        sequence = None
+        if sale.lines:
+            last_line = sale.lines[-1]
+            if last_line.sequence is not None:
+                sequence = last_line.sequence + 1
+
+        line = Line(
+            sale=sale,
+            sequence=sequence,
+            type='line',
+            product=self.product,
+            quantity=self.quantity,
+            unit=self.unit,
+            extra=self,
+            )
+        line.on_change_product()
+        if self.free:
+            line.unit_price = line.amount = Decimal(0)
+        return line
diff --git a/sale.xml b/sale.xml
new file mode 100644
index 0000000..a30c3ce
--- /dev/null
+++ b/sale.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tryton>
+    <data>
+        <record model="ir.ui.view" id="extra_view_form">
+            <field name="model">sale.extra</field>
+            <field name="type">form</field>
+            <field name="name">extra_form</field>
+        </record>
+
+        <record model="ir.ui.view" id="extra_view_list">
+            <field name="model">sale.extra</field>
+            <field name="type">tree</field>
+            <field name="name">extra_list</field>
+        </record>
+
+        <record model="ir.action.act_window" id="act_extra_form">
+            <field name="name">Sale Extras</field>
+            <field name="res_model">sale.extra</field>
+            <field name="domain"
+                eval="[('price_list', 'in', Eval('active_ids'))]"
+                pyson="1"/>
+        </record>
+        <record model="ir.action.act_window.view" id="act_extra_form_view1">
+            <field name="sequence" eval="10"/>
+            <field name="view" ref="extra_view_list"/>
+            <field name="act_window" ref="act_extra_form"/>
+        </record>
+        <record model="ir.action.act_window.view" id="act_extra_form_view2">
+            <field name="sequence" eval="20"/>
+            <field name="view" ref="extra_view_form"/>
+            <field name="act_window" ref="act_extra_form"/>
+        </record>
+        <record model="ir.action.keyword" id="act_extra_keyword1">
+            <field name="keyword">form_relate</field>
+            <field name="model">product.price_list,-1</field>
+            <field name="action" ref="act_extra_form"/>
+        </record>
+
+        <record model="ir.rule.group" id="rule_group_extra">
+            <field name="model" search="[('model', '=', 'sale.extra')]"/>
+            <field name="global_p" eval="True"/>
+        </record>
+        <record model="ir.rule" id="rule_extra1">
+            <field name="domain"
+                eval="[('price_list.company', '=', Eval('user', {}).get('company', None))]"
+                pyson="1"/>
+            <field name="rule_group" ref="rule_group_extra"/>
+        </record>
+
+        <record model="ir.model.access" id="access_extra">
+            <field name="model" search="[('model', '=', 'sale.extra')]"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
+        <record model="ir.model.access" id="access_extra_product_admin">
+            <field name="model" search="[('model', '=', 'sale.extra')]"/>
+            <field name="group" ref="product.group_product_admin"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+
+        <record model="ir.ui.view" id="extra_line_view_form">
+            <field name="model">sale.extra.line</field>
+            <field name="type">form</field>
+            <field name="name">extra_line_form</field>
+        </record>
+
+        <record model="ir.ui.view" id="extra_line_view_list">
+            <field name="model">sale.extra.line</field>
+            <field name="type">tree</field>
+            <field name="name">extra_line_list</field>
+            <field name="priority" eval="10"/>
+        </record>
+
+        <record model="ir.ui.view" id="extra_line_view_list_sequence">
+            <field name="model">sale.extra.line</field>
+            <field name="type">tree</field>
+            <field name="name">extra_line_list_sequence</field>
+            <field name="priority" eval="20"/>
+        </record>
+
+        <record model="ir.rule.group" id="rule_group_extra_line">
+            <field name="model" search="[('model', '=', 'sale.extra.line')]"/>
+            <field name="global_p" eval="True"/>
+        </record>
+        <record model="ir.rule" id="rule_extra_line1">
+            <field name="domain"
+                eval="[('extra.price_list.company', '=', Eval('user', {}).get('company', None))]"
+                pyson="1"/>
+            <field name="rule_group" ref="rule_group_extra_line"/>
+        </record>
+
+        <record model="ir.model.access" id="access_extra_line">
+            <field name="model" search="[('model', '=', 'sale.extra.line')]"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
+        <record model="ir.model.access" id="access_extra_line_product_admin">
+            <field name="model" search="[('model', '=', 'sale.extra.line')]"/>
+            <field name="group" ref="product.group_product_admin"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+    </data>
+</tryton>
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..861a9f5
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+tag_svn_revision = 0
+
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..ba8b443
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,110 @@
+#!/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.
+
+from setuptools import setup
+import re
+import os
+import ConfigParser
+
+
+def read(fname):
+    return open(os.path.join(os.path.dirname(__file__), fname)).read()
+
+
+def get_require_version(name):
+    if minor_version % 2:
+        require = '%s >= %s.%s.dev0, < %s.%s'
+    else:
+        require = '%s >= %s.%s, < %s.%s'
+    require %= (name, major_version, minor_version,
+        major_version, minor_version + 1)
+    return require
+
+config = ConfigParser.ConfigParser()
+config.readfp(open('tryton.cfg'))
+info = dict(config.items('tryton'))
+for key in ('depends', 'extras_depend', 'xml'):
+    if key in info:
+        info[key] = info[key].strip().splitlines()
+version = info.get('version', '0.0.1')
+major_version, minor_version, _ = version.split('.', 2)
+major_version = int(major_version)
+minor_version = int(minor_version)
+name = 'trytond_sale_extra'
+
+download_url = 'http://downloads.tryton.org/%s.%s/' % (
+    major_version, minor_version)
+if minor_version % 2:
+    version = '%s.%s.dev0' % (major_version, minor_version)
+    download_url = (
+        'hg+http://hg.tryton.org/modules/%s#egg=%s-%s' % (
+            name[8:], name, version))
+
+requires = []
+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 for sale extra',
+    long_description=read('README'),
+    author='Tryton',
+    author_email='issue_tracker at tryton.org',
+    url='http://www.tryton.org/',
+    download_url=download_url,
+    keywords='tryton sale extra premium cost',
+    package_dir={'trytond.modules.sale_extra': '.'},
+    packages=[
+        'trytond.modules.sale_extra',
+        'trytond.modules.sale_extra.tests',
+        ],
+    package_data={
+        'trytond.modules.sale_extra': (info.get('xml', [])
+            + ['tryton.cfg', 'view/*.xml', 'locale/*.po', 'tests/*.rst']),
+        },
+    classifiers=[
+        'Development Status :: 5 - Production/Stable',
+        'Environment :: Plugins',
+        'Framework :: Tryton',
+        'Intended Audience :: Developers',
+        'Intended Audience :: Financial and Insurance Industry',
+        'Intended Audience :: Legal Industry',
+        'License :: OSI Approved :: GNU General Public License (GPL)',
+        'Natural Language :: Bulgarian',
+        'Natural Language :: Catalan',
+        'Natural Language :: Czech',
+        'Natural Language :: Dutch',
+        'Natural Language :: English',
+        'Natural Language :: French',
+        'Natural Language :: German',
+        'Natural Language :: Russian',
+        'Natural Language :: Slovenian',
+        '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',
+        'Topic :: Office/Business :: Financial :: Accounting',
+        ],
+    license='GPL-3',
+    install_requires=requires,
+    dependency_links=dependency_links,
+    zip_safe=False,
+    entry_points="""
+    [trytond.modules]
+    sale_extra = trytond.modules.sale_extra
+    """,
+    test_suite='tests',
+    test_loader='trytond.test_loader:Loader',
+    tests_require=tests_require,
+    )
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..f5bc657
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,6 @@
+# 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_extra import suite
+
+__all__ = ['suite']
diff --git a/tests/scenario_sale_extra.rst b/tests/scenario_sale_extra.rst
new file mode 100644
index 0000000..3fbd299
--- /dev/null
+++ b/tests/scenario_sale_extra.rst
@@ -0,0 +1,180 @@
+===================
+Sale Extra Scenario
+===================
+
+Imports::
+
+    >>> import datetime
+    >>> from dateutil.relativedelta import relativedelta
+    >>> 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
+    >>> today = datetime.date.today()
+
+Configure::
+
+    >>> config = config.set_trytond()
+    >>> config.pool.test = True
+
+Install sale_extra::
+
+    >>> Module = Model.get('ir.module.module')
+    >>> module, = Module.find([
+    ...         ('name', '=', 'sale_extra'),
+    ...         ])
+    >>> 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')
+    >>> config._context = User.get_preferences(True, config.context)
+
+Create chart of accounts::
+
+    >>> _ = create_chart(company)
+    >>> accounts = get_accounts(company)
+    >>> revenue = accounts['revenue']
+    >>> expense = accounts['expense']
+
+Create customer::
+
+    >>> Party = Model.get('party.party')
+    >>> customer = Party(name='Customer')
+    >>> customer.save()
+
+Create product::
+
+    >>> ProductUom = Model.get('product.uom')
+    >>> ProductTemplate = Model.get('product.template')
+    >>> Product = Model.get('product.product')
+    >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+    >>> product = Product()
+    >>> template = ProductTemplate()
+    >>> template.name = 'Product'
+    >>> template.default_uom = unit
+    >>> template.type = 'goods'
+    >>> template.salable = True
+    >>> template.delivery_time = 0
+    >>> template.list_price = Decimal('20')
+    >>> template.cost_price = Decimal('8')
+    >>> template.account_revenue = revenue
+    >>> template.save()
+    >>> product.template = template
+    >>> product.save()
+    >>> extra_product = Product()
+    >>> extra_template = ProductTemplate()
+    >>> extra_template.name = 'Extra'
+    >>> extra_template.default_uom = unit
+    >>> extra_template.type = 'service'
+    >>> extra_template.salable = True
+    >>> extra_template.delivery_time = 0
+    >>> extra_template.list_price = Decimal('3')
+    >>> extra_template.cost_price = Decimal('3')
+    >>> extra_template.account_revenue = revenue
+    >>> extra_template.save()
+    >>> extra_product.template = extra_template
+    >>> extra_product.save()
+
+Create payment term::
+
+    >>> payment_term = create_payment_term()
+    >>> payment_term.save()
+
+Create Extra::
+
+    >>> PriceList = Model.get('product.price_list')
+    >>> price_list = PriceList(name='Default')
+    >>> extra = price_list.sale_extras.new(name='Free Extra')
+    >>> line = extra.lines.new()
+    >>> line.sale_amount = Decimal('100')
+    >>> line.product = extra_product
+    >>> line.quantity = 2
+    >>> line.free = True
+    >>> line = extra.lines.new()
+    >>> line.sale_amount = Decimal('50')
+    >>> line.product = extra_product
+    >>> line.quantity = 1
+    >>> price_list.save()
+
+Sale for 100, 2 free extra added::
+
+    >>> Sale = Model.get('sale.sale')
+    >>> sale = Sale()
+    >>> sale.party = customer
+    >>> sale.price_list = price_list
+    >>> sale.payment_term = payment_term
+    >>> sale_line = sale.lines.new()
+    >>> sale_line.product = product
+    >>> sale_line.quantity = 5
+    >>> sale.save()
+    >>> sale.untaxed_amount
+    Decimal('100.00')
+    >>> len(sale.lines)
+    1
+    >>> sale.click('quote')
+    >>> sale.untaxed_amount
+    Decimal('100.00')
+    >>> len(sale.lines)
+    2
+    >>> sum(l.quantity for l in sale.lines)
+    7.0
+
+Back to draft, nothing change::
+
+    >>> sale.click('draft')
+    >>> sale.click('quote')
+    >>> sale.untaxed_amount
+    Decimal('100.00')
+    >>> len(sale.lines)
+    2
+
+Sale for 60, 1 extra added::
+
+    >>> sale = Sale()
+    >>> sale.party = customer
+    >>> sale.price_list = price_list
+    >>> sale.payment_term = payment_term
+    >>> sale_line = sale.lines.new()
+    >>> sale_line.product = product
+    >>> sale_line.quantity = 3
+    >>> sale.save()
+    >>> sale.untaxed_amount
+    Decimal('60.00')
+    >>> len(sale.lines)
+    1
+    >>> sale.click('quote')
+    >>> sale.untaxed_amount
+    Decimal('63.00')
+    >>> len(sale.lines)
+    2
+
+Sale for 20, nothing added::
+
+    >>> sale = Sale()
+    >>> sale.party = customer
+    >>> sale.price_list = price_list
+    >>> sale.payment_term = payment_term
+    >>> sale_line = sale.lines.new()
+    >>> sale_line.product = product
+    >>> sale_line.quantity = 1
+    >>> sale.save()
+    >>> sale.untaxed_amount
+    Decimal('20.00')
+    >>> len(sale.lines)
+    1
+    >>> sale.click('quote')
+    >>> sale.untaxed_amount
+    Decimal('20.00')
+    >>> len(sale.lines)
+    1
diff --git a/tests/test_sale_extra.py b/tests/test_sale_extra.py
new file mode 100644
index 0000000..8aa99fb
--- /dev/null
+++ b/tests/test_sale_extra.py
@@ -0,0 +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.
+import unittest
+import doctest
+import trytond.tests.test_tryton
+from trytond.tests.test_tryton import ModuleTestCase
+from trytond.tests.test_tryton import doctest_setup, doctest_teardown
+
+
+class SaleExtraTestCase(ModuleTestCase):
+    'Test Sale Extra module'
+    module = 'sale_extra'
+
+
+def suite():
+    suite = trytond.tests.test_tryton.suite()
+    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
+            SaleExtraTestCase))
+    suite.addTests(doctest.DocFileSuite('scenario_sale_extra.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
new file mode 100644
index 0000000..a740ba3
--- /dev/null
+++ b/tryton.cfg
@@ -0,0 +1,13 @@
+[tryton]
+version=3.6.0
+depends:
+    company
+    ir
+    product
+    product_price_list
+    res
+    sale
+    sale_price_list
+xml:
+    sale.xml
+    price_list.xml
diff --git a/trytond_sale_extra.egg-info/PKG-INFO b/trytond_sale_extra.egg-info/PKG-INFO
new file mode 100644
index 0000000..365577e
--- /dev/null
+++ b/trytond_sale_extra.egg-info/PKG-INFO
@@ -0,0 +1,70 @@
+Metadata-Version: 1.1
+Name: trytond-sale-extra
+Version: 3.6.0
+Summary: Tryton module for sale extra
+Home-page: http://www.tryton.org/
+Author: Tryton
+Author-email: issue_tracker at tryton.org
+License: GPL-3
+Download-URL: http://downloads.tryton.org/3.6/
+Description: trytond_sale_extra
+        ==================
+        
+        The sale_extra module of the Tryton application platform.
+        
+        Installing
+        ----------
+        
+        See INSTALL
+        
+        Support
+        -------
+        
+        If you encounter any problems with Tryton, please don't hesitate to ask
+        questions on the Tryton bug tracker, mailing list, wiki or IRC channel:
+        
+          http://bugs.tryton.org/
+          http://groups.tryton.org/
+          http://wiki.tryton.org/
+          irc://irc.freenode.net/tryton
+        
+        License
+        -------
+        
+        See LICENSE
+        
+        Copyright
+        ---------
+        
+        See COPYRIGHT
+        
+        
+        For more information please visit the Tryton web site:
+        
+          http://www.tryton.org/
+        
+Keywords: tryton sale extra premium cost
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Plugins
+Classifier: Framework :: Tryton
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Financial and Insurance Industry
+Classifier: Intended Audience :: Legal Industry
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Catalan
+Classifier: Natural Language :: Czech
+Classifier: Natural Language :: Dutch
+Classifier: Natural Language :: English
+Classifier: Natural Language :: French
+Classifier: Natural Language :: German
+Classifier: Natural Language :: Russian
+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
+Classifier: Topic :: Office/Business :: Financial :: Accounting
diff --git a/trytond_sale_extra.egg-info/SOURCES.txt b/trytond_sale_extra.egg-info/SOURCES.txt
new file mode 100644
index 0000000..35a87c5
--- /dev/null
+++ b/trytond_sale_extra.egg-info/SOURCES.txt
@@ -0,0 +1,32 @@
+README
+setup.py
+./__init__.py
+./price_list.py
+./price_list.xml
+./sale.py
+./sale.xml
+./tryton.cfg
+./locale/ca_ES.po
+./locale/de_DE.po
+./locale/es_AR.po
+./locale/es_CO.po
+./locale/es_EC.po
+./locale/es_ES.po
+./locale/fr_FR.po
+./locale/sl_SI.po
+./tests/__init__.py
+./tests/scenario_sale_extra.rst
+./tests/test_sale_extra.py
+./view/extra_form.xml
+./view/extra_line_form.xml
+./view/extra_line_list.xml
+./view/extra_line_list_sequence.xml
+./view/extra_list.xml
+./view/price_list_form.xml
+trytond_sale_extra.egg-info/PKG-INFO
+trytond_sale_extra.egg-info/SOURCES.txt
+trytond_sale_extra.egg-info/dependency_links.txt
+trytond_sale_extra.egg-info/entry_points.txt
+trytond_sale_extra.egg-info/not-zip-safe
+trytond_sale_extra.egg-info/requires.txt
+trytond_sale_extra.egg-info/top_level.txt
\ No newline at end of file
diff --git a/trytond_sale_extra.egg-info/dependency_links.txt b/trytond_sale_extra.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/trytond_sale_extra.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/trytond_sale_extra.egg-info/entry_points.txt b/trytond_sale_extra.egg-info/entry_points.txt
new file mode 100644
index 0000000..202c479
--- /dev/null
+++ b/trytond_sale_extra.egg-info/entry_points.txt
@@ -0,0 +1,4 @@
+
+    [trytond.modules]
+    sale_extra = trytond.modules.sale_extra
+    
\ No newline at end of file
diff --git a/trytond_sale_extra.egg-info/not-zip-safe b/trytond_sale_extra.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/trytond_sale_extra.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/trytond_sale_extra.egg-info/requires.txt b/trytond_sale_extra.egg-info/requires.txt
new file mode 100644
index 0000000..5500efd
--- /dev/null
+++ b/trytond_sale_extra.egg-info/requires.txt
@@ -0,0 +1,6 @@
+trytond_company >= 3.6, < 3.7
+trytond_product >= 3.6, < 3.7
+trytond_product_price_list >= 3.6, < 3.7
+trytond_sale >= 3.6, < 3.7
+trytond_sale_price_list >= 3.6, < 3.7
+trytond >= 3.6, < 3.7
\ No newline at end of file
diff --git a/trytond_sale_extra.egg-info/top_level.txt b/trytond_sale_extra.egg-info/top_level.txt
new file mode 100644
index 0000000..93df119
--- /dev/null
+++ b/trytond_sale_extra.egg-info/top_level.txt
@@ -0,0 +1 @@
+trytond
diff --git a/view/extra_form.xml b/view/extra_form.xml
new file mode 100644
index 0000000..43642d0
--- /dev/null
+++ b/view/extra_form.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form string="Extra">
+    <label name="name"/>
+    <field name="name"/>
+    <label name="active"/>
+    <field name="active"/>
+    <label name="price_list"/>
+    <field name="price_list"/>
+    <newline/>
+    <label name="sale_amount"/>
+    <field name="sale_amount"/>
+    <field name="lines" colspan="4"
+        view_ids="sale_extra.extra_line_view_list_sequence"/>
+</form>
diff --git a/view/extra_line_form.xml b/view/extra_line_form.xml
new file mode 100644
index 0000000..32eef89
--- /dev/null
+++ b/view/extra_line_form.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form string="Extra Line">
+    <label name="extra"/>
+    <field name="extra"/>
+    <newline/>
+    <label name="sequence"/>
+    <field name="sequence"/>
+    <label name="sale_amount"/>
+    <field name="sale_amount"/>
+    <separator id="sale_line" string="Sale Line" colspan="4"/>
+    <label name="product"/>
+    <field name="product"/>
+    <label name="free"/>
+    <field name="free"/>
+    <label name="quantity"/>
+    <field name="quantity"/>
+    <label name="unit"/>
+    <field name="unit"/>
+</form>
diff --git a/view/extra_line_list.xml b/view/extra_line_list.xml
new file mode 100644
index 0000000..ecba8f0
--- /dev/null
+++ b/view/extra_line_list.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Extra Lines">
+    <field name="extra"/>
+    <field name="sale_amount"/>
+    <field name="product"/>
+    <field name="quantity"/>
+    <field name="unit"/>
+    <field name="free"/>
+</tree>
diff --git a/view/extra_line_list_sequence.xml b/view/extra_line_list_sequence.xml
new file mode 100644
index 0000000..2195148
--- /dev/null
+++ b/view/extra_line_list_sequence.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Extra Lines" sequence="sequence">
+    <field name="extra"/>
+    <field name="sale_amount"/>
+    <field name="product"/>
+    <field name="quantity"/>
+    <field name="unit"/>
+    <field name="free"/>
+</tree>
diff --git a/view/extra_list.xml b/view/extra_list.xml
new file mode 100644
index 0000000..af7bea4
--- /dev/null
+++ b/view/extra_list.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Extras">
+    <field name="price_list"/>
+    <field name="name"/>
+    <field name="sale_amount"/>
+    <field name="active" tree_invisible="1"/>
+</tree>
diff --git a/view/price_list_form.xml b/view/price_list_form.xml
new file mode 100644
index 0000000..421dfab
--- /dev/null
+++ b/view/price_list_form.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+    <xpath expr="/form/notebook" position="inside">
+        <page name="sale_extras">
+            <field name="sale_extras" colspan="4"/>
+        </page>
+    </xpath>
+</data>
-- 
tryton-modules-sale-extra



More information about the tryton-debian-vcs mailing list