Browse Source

[ADD] module pos_price_to_weight (#171)

* [ADD] module pos_price_to_weight

* [FIX] jslint / pylint / flake8 issues
pull/105/merge
Sylvain LE GAL 8 years ago
committed by Rafael Blasco
parent
commit
08bbed77d7
  1. 105
      pos_price_to_weight/README.rst
  2. 2
      pos_price_to_weight/__init__.py
  3. 25
      pos_price_to_weight/__openerp__.py
  4. 19
      pos_price_to_weight/data/barcode_rule.xml
  5. 18
      pos_price_to_weight/demo/product_product.xml
  6. 28
      pos_price_to_weight/i18n/fr.po
  7. 2
      pos_price_to_weight/models/__init__.py
  8. 17
      pos_price_to_weight/models/barcode_rule.py
  9. BIN
      pos_price_to_weight/static/description/barcode_rule.png
  10. BIN
      pos_price_to_weight/static/description/icon.png
  11. BIN
      pos_price_to_weight/static/description/pos_test_1.png
  12. BIN
      pos_price_to_weight/static/description/pos_test_2.png
  13. 38
      pos_price_to_weight/static/src/js/models.js
  14. 22
      pos_price_to_weight/static/src/js/screens.js
  15. 17
      pos_price_to_weight/static/src/xml/templates.xml

105
pos_price_to_weight/README.rst

@ -0,0 +1,105 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===============================
Point of Sale - Price to Weight
===============================
This module extends Odoo Point Of Sale features, to allow to scan barcode
with price and to compute according quantity.
In Odoo by default, there are three types of barcode rules for products.
* 'Unit Product' (type='product'). Scanning a product will add a unit of this
product to the current order.
* 'Priced product' (type='price'). A price is extracted from the barcode, and
a new line with the given price and a quantity = 1 is added to the current
order.
* 'Weighted product' (type='weight). A weight is extracted from the barcode,
and a new line with the given weight, and a computed price
(quantity * Unit price) is added to the current order.
This module add a new option:
* 'Priced Product (Computed Weight)' (type='price_to_weight'). A price is
extracted from the barcode, and a new line with the given price, and a
computed quantity (Price / Unit Price) is added to the current order.
.. image:: /pos_price_to_weight/static/description/barcode_rule.png
:width: 800 px
This module is usefull in shops with products scaled, to manage correctly
stock quantities.
Samples
* Given a product with a unit price of 1,50€ / kg
* The barcode is 0212345{NNNDD}x where:
* 02 is the prefix of the barcode rule
* 12345 is the product number
* {NNNDD} is the price of the scaled product
* x is the control digit
if {NNNDD} is 00265, the price is so 2,65€ and the according quantity is
2,65€ / 1,5 €/kg = 1,767 kg
.. image:: /pos_price_to_weight/static/description/pos_test_1.png
:width: 800 px
if {NNNDD} is 00810, the price is so 8,10€ and the according quantity is
8,10€ / 1,5 €/kg = 5,400 kg
.. image:: /pos_price_to_weight/static/description/pos_test_2.png
:width: 800 px
Configuration
=============
* Go to 'Point of Sale' / 'Configuration' / 'Barcode Nomenclatures'
* Edit your barcode rules, according to your barcodes settings
Usage
=====
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/184/9.0
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/pos/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smash it by providing detailed and welcomed feedback.
Credits
=======
Images
------
Icon parts come from http://icons8.com
Contributors
------------
* Sylvain LE GAL <https://twitter.com/legalsylvain>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.

2
pos_price_to_weight/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import models

25
pos_price_to_weight/__openerp__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2017-Today: La Louve (<http://www.lalouve.net/>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Point of Sale - Price to Weight',
'version': '9.0.1.0.0',
'category': 'Point Of Sale',
'summary': 'Compute weight based on barcodes with prices',
'author': 'La Louve, GRAP, Odoo Community Association (OCA)',
'website': 'http://www.lalouve.net/',
'license': 'AGPL-3',
'depends': [
'point_of_sale',
],
'data': [
'data/barcode_rule.xml',
'static/src/xml/templates.xml',
],
'demo': [
'demo/product_product.xml',
],
'installable': True,
}

19
pos_price_to_weight/data/barcode_rule.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2017 - 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).
-->
<openerp><data>
<record id="rule_price_to_weight" model="barcode.rule">
<field name="name">Price Barcodes (Computed Weight) 2 Decimals</field>
<field name="barcode_nomenclature_id" ref="barcodes.default_barcode_nomenclature"/>
<field name="type">price_to_weight</field>
<field name="pattern">02.....{NNNDD}</field>
<field name="sequence">15</field>
<field name="encoding">ean13</field>
</record>
</data></openerp>

18
pos_price_to_weight/demo/product_product.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2017 - 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).
-->
<odoo>
<record id="product_price_to_weight_barcode" model="product.product">
<field name="name">Apples (with Price To Weight Barcode)</field>
<field name="barcode">0212345000007</field>
<field name="list_price">1.50</field>
<field name="uom_id" ref="product.product_uom_kgm"/>
<field name="uom_po_id" ref="product.product_uom_kgm"/>
</record>
</odoo>

28
pos_price_to_weight/i18n/fr.po

@ -0,0 +1,28 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_price_to_weight
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-10 01:40+0000\n"
"PO-Revision-Date: 2017-05-10 01:40+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: pos_price_to_weight
#: model:product.product,name:pos_price_to_weight.product_price_to_weight_barcode
#: model:product.template,name:pos_price_to_weight.product_price_to_weight_barcode_product_template
msgid "Apples (with Price To Weight Barcode)"
msgstr "Pommes (Avec un code barre Prix vers Pois)"
#. module: pos_price_to_weight
#: code:addons/pos_price_to_weight/models/barcode_rule.py:17
#, python-format
msgid "Priced Product (Computed Weight)"
msgstr "Code Barre Prix (Poid calculé)"

2
pos_price_to_weight/models/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import barcode_rule

17
pos_price_to_weight/models/barcode_rule.py

@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2017-Today: La Louve (<http://www.lalouve.net/>)
# @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 BarcodeRule(models.Model):
_inherit = 'barcode.rule'
@api.model
def _get_type_selection(self):
res = super(BarcodeRule, self)._get_type_selection()
res.append(
('price_to_weight', _('Priced Product (Computed Weight)')))
return res

BIN
pos_price_to_weight/static/description/barcode_rule.png

After

Width: 887  |  Height: 225  |  Size: 18 KiB

BIN
pos_price_to_weight/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 7.7 KiB

BIN
pos_price_to_weight/static/description/pos_test_1.png

After

Width: 632  |  Height: 209  |  Size: 26 KiB

BIN
pos_price_to_weight/static/description/pos_test_2.png

After

Width: 637  |  Height: 217  |  Size: 27 KiB

38
pos_price_to_weight/static/src/js/models.js

@ -0,0 +1,38 @@
///*
// Copyright (C) 2017-Today: La Louve (<http://www.lalouve.net/>)
// @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
//*/
odoo.define('pos_price_to_weight.models', function (require) {
"use strict";
var models = require('point_of_sale.models');
var _super_PosModel = models.PosModel.prototype;
models.PosModel = models.PosModel.extend({
scan_product: function(parsed_code) {
if (! (parsed_code.type === 'price_to_weight')){
// Normal behaviour
return _super_PosModel.scan_product.apply(this, [parsed_code]);
}
// Compute quantity, based on price and unit price
var selectedOrder = this.get_order();
var product = this.db.get_product_by_barcode(parsed_code.base_code);
if(!product){
return false;
}
var quantity = 0;
var price = parseFloat(parsed_code.value) || 0;
if (price !== 0 && product.price !== 0){
quantity = price / product.price;
}
selectedOrder.add_product(product, {quantity: quantity, merge: false});
return true;
},
});
});

22
pos_price_to_weight/static/src/js/screens.js

@ -0,0 +1,22 @@
/*
Copyright (C) 2017-Today: La Louve (<http://www.lalouve.net/>)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
*/
odoo.define('pos_price_to_weight.screens', function (require) {
"use strict";
var screens = require('point_of_sale.screens');
screens.ScreenWidget.include({
show: function(){
this._super();
var self = this;
this.pos.barcode_reader.set_action_callback({
'price_to_weight': _.bind(self.barcode_product_action, self),
});
},
});
});

17
pos_price_to_weight/static/src/xml/templates.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-Today: La Louve (<http://www.lalouve.net/>)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<template id="assets_frontend" inherit_id="point_of_sale.assets">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_price_to_weight/static/src/js/screens.js"/>
<script type="text/javascript" src="/pos_price_to_weight/static/src/js/models.js"/>
</xpath>
</template>
</odoo>
Loading…
Cancel
Save