Browse Source

[8.0][fix] pos_pricelist (#252)

* In backoffice, set correct sale taxes on pos order lines
* PoS order created from PoS UI doesn't have the correct pricelist_id defined
* Possibility to see and change pricelist when creating / updating a customer in Front UI
pull/253/head
Sylvain LE GAL 7 years ago
committed by Pedro M. Baeza
parent
commit
16fae70238
  1. 2
      pos_pricelist/__openerp__.py
  2. 91
      pos_pricelist/i18n/fr.po
  3. 1
      pos_pricelist/models/__init__.py
  4. 17
      pos_pricelist/models/point_of_sale.py
  5. 20
      pos_pricelist/models/res_partner.py
  6. 18
      pos_pricelist/static/src/js/models.js
  7. 32
      pos_pricelist/static/src/xml/pos.xml

2
pos_pricelist/__openerp__.py

@ -5,7 +5,7 @@
{ {
'name': 'POS Pricelist', 'name': 'POS Pricelist',
'version': '8.0.1.4.0',
'version': '8.0.1.5.0',
'category': 'Point Of Sale', 'category': 'Point Of Sale',
'sequence': 1, 'sequence': 1,
'author': "Adil Houmadi @Taktik, " 'author': "Adil Houmadi @Taktik, "

91
pos_pricelist/i18n/fr.po

@ -8,32 +8,32 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: pos (8.0)\n" "Project-Id-Version: pos (8.0)\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-10-24 11:35+0000\n"
"PO-Revision-Date: 2017-09-22 22:56+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: French (http://www.transifex.com/oca/OCA-pos-8-0/language/fr/)\n"
"POT-Creation-Date: 2018-03-02 16:22+0000\n"
"PO-Revision-Date: 2018-03-02 16:22+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Plural-Forms: \n"
#. module: pos_pricelist #. module: pos_pricelist
#: field:pos.order.tax,amount:0 view:website:point_of_sale.report_receipt
#: field:pos.order.tax,amount:0
#: view:website:point_of_sale.report_receipt
msgid "Amount" msgid "Amount"
msgstr "Montant" msgstr "Montant"
#. module: pos_pricelist #. module: pos_pricelist
#. openerp-web #. openerp-web
#: code:addons/pos_pricelist/static/src/js/models.js:402 #: code:addons/pos_pricelist/static/src/js/models.js:402
#: code:addons/pos_pricelist/static/src/js/models.js:422
#, python-format #, python-format
msgid ""
"At least one pricelist has no active version ! Please create or activate "
"one."
msgstr ""
msgid "At least one pricelist has no active version ! Please create or activate one."
msgstr "Au moins une liste de prix n'a pas de version active ! Veuillez en créer ou en activer une."
#. module: pos_pricelist #. module: pos_pricelist
#: field:pos.order.tax,base:0 view:website:point_of_sale.report_receipt
#: field:pos.order.tax,base:0
#: view:website:point_of_sale.report_receipt
msgid "Base" msgid "Base"
msgstr "Base" msgstr "Base"
@ -60,10 +60,12 @@ msgstr "Nom à afficher"
#. module: pos_pricelist #. module: pos_pricelist
#: help:pos.config,display_price_with_taxes:0 #: help:pos.config,display_price_with_taxes:0
msgid "Display Prices with taxes on POS" msgid "Display Prices with taxes on POS"
msgstr ""
msgstr "Afficher les prix TTC sur le point de vente"
#. module: pos_pricelist #. module: pos_pricelist
#: code:addons/pos_pricelist/models/pos_order_patch.py:26
#: code:addons/pos_pricelist/models/pos_order_patch.py:28 #: code:addons/pos_pricelist/models/pos_order_patch.py:28
#: code:addons/pos_pricelist/models/pos_order_patch.py:152
#: code:addons/pos_pricelist/models/pos_order_patch.py:154 #: code:addons/pos_pricelist/models/pos_order_patch.py:154
#, python-format #, python-format
msgid "Error!" msgid "Error!"
@ -94,30 +96,42 @@ msgstr "Dernière mise à jour le"
msgid "Lines of Point of Sale" msgid "Lines of Point of Sale"
msgstr "Lignes de Points de Vente" msgstr "Lignes de Points de Vente"
#. module: pos_pricelist
#. openerp-web
#: code:addons/pos_pricelist/static/src/xml/pos.xml:46
#, python-format
msgid "N/A"
msgstr "N/A"
#. module: pos_pricelist #. module: pos_pricelist
#: field:pos.order.tax,pos_order:0 #: field:pos.order.tax,pos_order:0
msgid "POS Order" msgid "POS Order"
msgstr ""
msgstr "Vente"
#. module: pos_pricelist #. module: pos_pricelist
#: model:product.template,name:pos_pricelist.pos_product_product_1_product_template #: model:product.template,name:pos_pricelist.pos_product_product_1_product_template
msgid "POS Product 1" msgid "POS Product 1"
msgstr ""
msgstr "POS Product 1"
#. module: pos_pricelist #. module: pos_pricelist
#: model:product.template,name:pos_pricelist.pos_product_product_2_product_template #: model:product.template,name:pos_pricelist.pos_product_product_2_product_template
msgid "POS Product 2" msgid "POS Product 2"
msgstr ""
msgstr "POS Product 2"
#. module: pos_pricelist #. module: pos_pricelist
#: model:product.template,name:pos_pricelist.pos_product_product_3_product_template #: model:product.template,name:pos_pricelist.pos_product_product_3_product_template
msgid "POS Product 3" msgid "POS Product 3"
msgstr ""
msgstr "POS Product 3"
#. module: pos_pricelist #. module: pos_pricelist
#: model:product.template,name:pos_pricelist.pos_product_product_4_product_template #: model:product.template,name:pos_pricelist.pos_product_product_4_product_template
msgid "POS Product 4" msgid "POS Product 4"
msgstr ""
msgstr "POS Product 4"
#. module: pos_pricelist
#: model:ir.model,name:pos_pricelist.model_res_partner
msgid "Partner"
msgstr "Partenaire"
#. module: pos_pricelist #. module: pos_pricelist
#: view:pos.order:pos_pricelist.view_pos_pos_form #: view:pos.order:pos_pricelist.view_pos_pos_form
@ -125,38 +139,52 @@ msgid "Payments"
msgstr "Paiements" msgstr "Paiements"
#. module: pos_pricelist #. module: pos_pricelist
#: code:addons/pos_pricelist/models/pos_order_patch.py:152
#: code:addons/pos_pricelist/models/pos_order_patch.py:154 #: code:addons/pos_pricelist/models/pos_order_patch.py:154
#, python-format #, python-format
msgid "Please define income account for this product: \"%s\" (id:%d)." msgid "Please define income account for this product: \"%s\" (id:%d)."
msgstr ""
msgstr "Veuillez définir un compte de revenu pour cet article : \"%s\" (id. : %d)"
#. module: pos_pricelist #. module: pos_pricelist
#: model:ir.model,name:pos_pricelist.model_pos_order #: model:ir.model,name:pos_pricelist.model_pos_order
msgid "Point of Sale" msgid "Point of Sale"
msgstr "Point de vente"
msgstr "Point de Vente"
#. module: pos_pricelist #. module: pos_pricelist
#: field:pos.config,display_price_with_taxes:0 #: field:pos.config,display_price_with_taxes:0
msgid "Price With Taxes" msgid "Price With Taxes"
msgstr ""
msgstr "Prix TTC"
#. module: pos_pricelist
#. openerp-web
#: code:addons/pos_pricelist/static/src/xml/pos.xml:41
#: code:addons/pos_pricelist/static/src/xml/pos.xml:55
#, python-format
msgid "Pricelist"
msgstr "Liste de prix"
#. module: pos_pricelist #. module: pos_pricelist
#. openerp-web #. openerp-web
#: code:addons/pos_pricelist/static/src/js/models.js:401 #: code:addons/pos_pricelist/static/src/js/models.js:401
#: code:addons/pos_pricelist/static/src/js/models.js:421
#, python-format #, python-format
msgid "Pricelist Error" msgid "Pricelist Error"
msgstr ""
msgstr "Erreur de liste de prix"
#. module: pos_pricelist #. module: pos_pricelist
#: code:addons/pos_pricelist/models/pos_order_patch.py:26
#: code:addons/pos_pricelist/models/pos_order_patch.py:28 #: code:addons/pos_pricelist/models/pos_order_patch.py:28
#, python-format #, python-format
msgid "Selected orders do not have the same session!" msgid "Selected orders do not have the same session!"
msgstr ""
msgstr "Les commandes sélectionnées n'ont pas la même session !"
#. module: pos_pricelist #. module: pos_pricelist
#: code:addons/pos_pricelist/models/pos_order_patch.py:188
#: code:addons/pos_pricelist/models/pos_order_patch.py:190 #: code:addons/pos_pricelist/models/pos_order_patch.py:190
#: code:addons/pos_pricelist/models/pos_order_patch.py:205
#: code:addons/pos_pricelist/models/pos_order_patch.py:207 #: code:addons/pos_pricelist/models/pos_order_patch.py:207
#: field:pos.order.tax,tax:0 view:website:point_of_sale.report_receipt
#: field:pos.order.tax,tax:0
#: view:website:point_of_sale.report_receipt
#, python-format #, python-format
msgid "Tax" msgid "Tax"
msgstr "Taxe" msgstr "Taxe"
@ -164,10 +192,11 @@ msgstr "Taxe"
#. module: pos_pricelist #. module: pos_pricelist
#: field:pos.order.tax,name:0 #: field:pos.order.tax,name:0
msgid "Tax Description" msgid "Tax Description"
msgstr ""
msgstr "Description de la taxe"
#. module: pos_pricelist #. module: pos_pricelist
#: view:pos.order:pos_pricelist.view_pos_pos_form field:pos.order,taxes:0
#: view:pos.order:pos_pricelist.view_pos_pos_form
#: field:pos.order,taxes:0
#: field:pos.order.line,tax_ids:0 #: field:pos.order.line,tax_ids:0
msgid "Taxes" msgid "Taxes"
msgstr "Taxes" msgstr "Taxes"
@ -175,21 +204,23 @@ msgstr "Taxes"
#. module: pos_pricelist #. module: pos_pricelist
#: model:ir.model,name:pos_pricelist.model_account_fiscal_position_tax #: model:ir.model,name:pos_pricelist.model_account_fiscal_position_tax
msgid "Taxes Fiscal Position" msgid "Taxes Fiscal Position"
msgstr ""
msgstr "Position fiscale des taxes"
#. module: pos_pricelist #. module: pos_pricelist
#: view:pos.order:pos_pricelist.view_pos_pos_form #: view:pos.order:pos_pricelist.view_pos_pos_form
msgid "Taxes detail" msgid "Taxes detail"
msgstr ""
msgstr "Détail des taxes"
#. module: pos_pricelist #. module: pos_pricelist
#: code:addons/pos_pricelist/models/pos_order_patch.py:117
#: code:addons/pos_pricelist/models/pos_order_patch.py:119 #: code:addons/pos_pricelist/models/pos_order_patch.py:119
#, python-format #, python-format
msgid "The POS order must have lines when calling this method" msgid "The POS order must have lines when calling this method"
msgstr ""
msgstr "Le point de vente doit avoir des lignes lors de l'appel à cette méthode"
#. module: pos_pricelist #. module: pos_pricelist
#: code:addons/pos_pricelist/models/pos_order_patch.py:218
#: code:addons/pos_pricelist/models/pos_order_patch.py:220 #: code:addons/pos_pricelist/models/pos_order_patch.py:220
#, python-format #, python-format
msgid "Trade Receivables" msgid "Trade Receivables"
msgstr ""
msgstr "Marchandises à recevoir"

1
pos_pricelist/models/__init__.py

@ -7,3 +7,4 @@ from . import account_fiscal_position
from . import pos_pricelist from . import pos_pricelist
from . import point_of_sale from . import point_of_sale
from . import pos_order_patch from . import pos_order_patch
from . import res_partner

17
pos_pricelist/models/point_of_sale.py

@ -73,6 +73,17 @@ class PosOrderLine(models.Model):
price_subtotal = fields.Float(compute="_amount_line_all", store=True) price_subtotal = fields.Float(compute="_amount_line_all", store=True)
price_subtotal_incl = fields.Float(compute="_amount_line_all", store=True) price_subtotal_incl = fields.Float(compute="_amount_line_all", store=True)
@api.multi
def onchange_product_id(
self, pricelist, product_id, qty=0, partner_id=False):
product_obj = self.env['product.product']
res = super(PosOrderLine, self).onchange_product_id(
pricelist, product_id, qty=qty, partner_id=partner_id)
if product_id:
product = product_obj.browse(product_id)
res['value']['tax_ids'] = product.taxes_id.ids
return res
class PosOrder(models.Model): class PosOrder(models.Model):
_inherit = "pos.order" _inherit = "pos.order"
@ -80,6 +91,12 @@ class PosOrder(models.Model):
taxes = fields.One2many(comodel_name='pos.order.tax', taxes = fields.One2many(comodel_name='pos.order.tax',
inverse_name='pos_order', readonly=True) inverse_name='pos_order', readonly=True)
@api.model
def _order_fields(self, ui_order):
res = super(PosOrder, self)._order_fields(ui_order)
res.update({'pricelist_id': ui_order['pricelist_id']})
return res
@api.model @api.model
def _amount_line_tax(self, line): def _amount_line_tax(self, line):
price = line.price_unit * (1 - (line.discount or 0.0) / 100.0) price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)

20
pos_pricelist/models/res_partner.py

@ -0,0 +1,20 @@
# coding: utf-8
# Copyright (C) 2018 - Today: GRAP (http://www.grap.coop)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import api, models
class ResPartner(models.Model):
_inherit = 'res.partner'
@api.model
def create_from_ui(self, partner):
if 'property_product_pricelist' in partner:
pricelist_id_str = partner.get('property_product_pricelist')
if pricelist_id_str:
partner['property_product_pricelist'] = int(pricelist_id_str)
else:
partner['property_product_pricelist'] = False
return super(ResPartner, self).create_from_ui(partner)

18
pos_pricelist/static/src/js/models.js

@ -73,6 +73,24 @@ function pos_pricelist_models(instance, module) {
} }
}); });
/**
* Extend the Order
*/
var moduleOrderParent = module.Order;
module.Order = module.Order.extend({
export_as_JSON: function() {
var order = moduleOrderParent.prototype.export_as_JSON.apply(this, arguments);
partner = this.get_client();
if (partner && partner.property_product_pricelist) {
pricelist_id = partner.property_product_pricelist[0];
} else {
pricelist_id = this.pos.config.pricelist_id[0];
}
order['pricelist_id'] = pricelist_id;
return order;
},
});
/** /**
* Extend the Order line * Extend the Order line
*/ */

32
pos_pricelist/static/src/xml/pos.xml

@ -34,4 +34,36 @@
</t> </t>
</t> </t>
</t> </t>
<t t-extend="ClientDetails">
<t t-jquery=".client-details-right" t-operation="append">
<div class='client-detail'>
<span class='label'>Pricelist</span>
<t t-if='partner.property_product_pricelist'>
<span class='detail pricelist'><t t-esc='partner.property_product_pricelist[1]'/></span>
</t>
<t t-if='!partner.property_product_pricelist'>
<span class='detail pricelist empty'>N/A</span>
</t>
</div>
</t>
</t>
<t t-extend="ClientDetailsEdit">
<t t-jquery=".client-details-right" t-operation="append">
<div class='client-detail'>
<span class='label'>Pricelist</span>
<select class='detail client-pricelist_id needsclick' name='property_product_pricelist'>
<option value=''></option>
<t t-foreach='widget.pos.db.pricelist_by_id' t-as='pricelist_id'>
<t t-set="pricelist" t-value="widget.pos.db.pricelist_by_id[pricelist_id]"/>
<option t-att-value='pricelist.id' t-att-selected="partner.property_product_pricelist ? ((pricelist.id === partner.property_product_pricelist[0]) ? true : undefined) : undefined">
<t t-esc='pricelist.name'/>
</option>
</t>
</select>
</div>
</t>
</t>
</templates> </templates>
Loading…
Cancel
Save