[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