Manuel Claeys Bouuaert
5 years ago
committed by
Rémy Taymans
13 changed files with 816 additions and 0 deletions
-
3beesdoo_product/__init__.py
-
36beesdoo_product/__openerp__.py
-
13beesdoo_product/data/barcode_rule.xml
-
69beesdoo_product/data/product_label.xml
-
14beesdoo_product/data/product_sequence.xml
-
222beesdoo_product/i18n/fr_BE.po
-
2beesdoo_product/models/__init__.py
-
187beesdoo_product/models/beesdoo_product.py
-
5beesdoo_product/security/ir.model.access.csv
-
188beesdoo_product/views/beesdoo_product.xml
-
1beesdoo_product/wizard/__init__.py
-
21beesdoo_product/wizard/label_printing_utils.py
-
55beesdoo_product/wizard/views/label_printing_utils.xml
@ -0,0 +1,3 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
import models |
||||
|
import wizard |
@ -0,0 +1,36 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
{ |
||||
|
'name': "beesdoo_product", |
||||
|
|
||||
|
'summary': """ |
||||
|
Modification of product module for the needs of beescoop |
||||
|
- SOOO5 - Ajout de label bio/ethique/provenance""", |
||||
|
|
||||
|
'description': """ |
||||
|
|
||||
|
""", |
||||
|
|
||||
|
'author': "Beescoop - Cellule IT", |
||||
|
'website': "https://github.com/beescoop/Obeesdoo", |
||||
|
|
||||
|
# Categories can be used to filter modules in modules listing |
||||
|
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml |
||||
|
# for the full list |
||||
|
'category': 'Sales Management', |
||||
|
'version': '0.1', |
||||
|
|
||||
|
# any module necessary for this one to work correctly |
||||
|
'depends': ['beesdoo_base', 'product', 'point_of_sale','pos_price_to_weight'], |
||||
|
|
||||
|
# always loaded |
||||
|
'data': [ |
||||
|
'data/product_label.xml', |
||||
|
'data/barcode_rule.xml', |
||||
|
'data/product_sequence.xml', |
||||
|
'views/beesdoo_product.xml', |
||||
|
'wizard/views/label_printing_utils.xml', |
||||
|
'security/ir.model.access.csv', |
||||
|
], |
||||
|
# only loaded in demonstration mode |
||||
|
'demo': [], |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<record model="barcode.rule" id="beesdoo_product_barcode_rule"> |
||||
|
<field name="name">Beescoop Product Barcodes</field> |
||||
|
<field name="barcode_nomenclature_id">1</field> |
||||
|
<field name="type">product</field> |
||||
|
<field name="pattern">043</field> |
||||
|
<field name="sequence">45</field> |
||||
|
<field name="encoding">ean13</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,69 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<record model="beesdoo.product.label" id="eco_green"> |
||||
|
<field name="name">Label Bio ou Confiance</field> |
||||
|
<field name="type">eco</field> |
||||
|
<field name="color_code">#40ff00</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="eco_orange"> |
||||
|
<field name="name">Agriculture raisonnée</field> |
||||
|
<field name="type">eco</field> |
||||
|
<field name="color_code">#ffa200</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="eco_red"> |
||||
|
<field name="name">Conventionnel</field> |
||||
|
<field name="type">eco</field> |
||||
|
<field name="color_code">#ff4000</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="local_green"> |
||||
|
<field name="name">Belgique</field> |
||||
|
<field name="type">local</field> |
||||
|
<field name="color_code">#40ff00</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="local_orange"> |
||||
|
<field name="name">Europe</field> |
||||
|
<field name="type">local</field> |
||||
|
<field name="color_code">#ffa200</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="local_red"> |
||||
|
<field name="name">Monde</field> |
||||
|
<field name="type">local</field> |
||||
|
<field name="color_code">#ff4000</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="fair_green"> |
||||
|
<field name="name">Label par tiers</field> |
||||
|
<field name="type">fair</field> |
||||
|
<field name="color_code">#40ff00</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="fair_orange"> |
||||
|
<field name="name">Préserve l’intérêt</field> |
||||
|
<field name="type">fair</field> |
||||
|
<field name="color_code">#ffa200</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="fair_red"> |
||||
|
<field name="name">Aucune garantie</field> |
||||
|
<field name="type">fair</field> |
||||
|
<field name="color_code">#ff4000</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="delivery_green"> |
||||
|
<field name="name">Intermédiaire coopératif</field> |
||||
|
<field name="type">delivery</field> |
||||
|
<field name="color_code">#40ff00</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="delivery_orange"> |
||||
|
<field name="name">Grossiste biologique</field> |
||||
|
<field name="type">delivery</field> |
||||
|
<field name="color_code">#ffa200</field> |
||||
|
</record> |
||||
|
<record model="beesdoo.product.label" id="delivery_red"> |
||||
|
<field name="name">Grossiste industriel</field> |
||||
|
<field name="type">delivery</field> |
||||
|
<field name="color_code">#ff4000</field> |
||||
|
</record> |
||||
|
<record id="consignes_group_tax" model="account.tax.group"> |
||||
|
<field name="name">Consignes</field> |
||||
|
<field name="sequence" eval="10" /> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<data noupdate="1"> |
||||
|
<record id="seq_ean_product_internal_ref" model="ir.sequence"> |
||||
|
<field name="name">Internal reference</field> |
||||
|
<field name="code">product.internal.code</field> |
||||
|
<field name="prefix"></field> |
||||
|
<field name="padding">5</field> |
||||
|
<field name="suffix"></field> |
||||
|
<field name="number_next">1</field> |
||||
|
<!-- <field name="barcode_sequence" eval="True"/> --> |
||||
|
</record> |
||||
|
</data> |
||||
|
</odoo> |
@ -0,0 +1,222 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * beesdoo_product |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 9.0c\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2016-11-13 15:12+0000\n" |
||||
|
"PO-Revision-Date: 2016-11-13 15:12+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: beesdoo_product |
||||
|
#: model:ir.ui.view,arch_db:beesdoo_product.printing_label_request_wizard |
||||
|
#: model:ir.ui.view,arch_db:beesdoo_product.set_label_as_printed_wizard |
||||
|
msgid "Cancel" |
||||
|
msgstr "Annuler" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_color_code |
||||
|
msgid "Color code" |
||||
|
msgstr "Code Couleur" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_note |
||||
|
msgid "Comments" |
||||
|
msgstr "Commentaires" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:account.tax.group,name:beesdoo_product.consignes_group_tax |
||||
|
msgid "Consignes" |
||||
|
msgstr "Consignes" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_create_uid |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_create_uid |
||||
|
msgid "Created by" |
||||
|
msgstr "Créé par" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_create_date |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_create_date |
||||
|
msgid "Created on" |
||||
|
msgstr "Créé le" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_default_reference_unit |
||||
|
msgid "Default reference unit" |
||||
|
msgstr "Default reference unit" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_total_deposit |
||||
|
msgid "Deposit Price" |
||||
|
msgstr "Deposit Price" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_display_name |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_display_name |
||||
|
msgid "Display Name" |
||||
|
msgstr "Nom affiché" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_display_unit |
||||
|
msgid "Display unit" |
||||
|
msgstr "Display unit" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_display_weight |
||||
|
msgid "Display weight" |
||||
|
msgstr "Display weight" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: selection:beesdoo.product.label,type:0 |
||||
|
msgid "Distribution" |
||||
|
msgstr "Distribution" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_eco_label |
||||
|
msgid "Eco label" |
||||
|
msgstr "Eco label" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_fair_label |
||||
|
msgid "Fair label" |
||||
|
msgstr "Fair label" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_id |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_id |
||||
|
msgid "ID" |
||||
|
msgstr "ID" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.ui.view,arch_db:beesdoo_product.beesdoo_product_form |
||||
|
msgid "Label" |
||||
|
msgstr "Label" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_label_last_printed |
||||
|
msgid "Label last printed on" |
||||
|
msgstr "Label last printed on" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label___last_update |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard___last_update |
||||
|
msgid "Last Modified on" |
||||
|
msgstr "Dernière modification le" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_write_uid |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_write_uid |
||||
|
msgid "Last Updated by" |
||||
|
msgstr "Mis à jour par" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_write_date |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_write_date |
||||
|
msgid "Last Updated on" |
||||
|
msgstr "Mis à jour le" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: selection:beesdoo.product.label,type:0 |
||||
|
msgid "Local" |
||||
|
msgstr "Local" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_local_label |
||||
|
msgid "Local label" |
||||
|
msgstr "Local label" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_main_seller_id |
||||
|
msgid "Main seller id" |
||||
|
msgstr "Main seller id" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_name |
||||
|
msgid "Name" |
||||
|
msgstr "Nom" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_origin_label |
||||
|
msgid "Origin label" |
||||
|
msgstr "Origin label" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_label_to_be_printed |
||||
|
msgid "Print label?" |
||||
|
msgstr "Print label?" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model,name:beesdoo_product.model_product_template |
||||
|
msgid "Product Template" |
||||
|
msgstr "Modèle d'article" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_label_printing_wizard_product_ids |
||||
|
msgid "Product ids" |
||||
|
msgstr "Product ids" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: code:addons/beesdoo_product/models/beesdoo_product.py:56 |
||||
|
#, python-format |
||||
|
msgid "Reference Unit and Display Unit should belong to the same category" |
||||
|
msgstr "Reference Unit and Display Unit should belong to the same category" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.actions.act_window,name:beesdoo_product.beesdoo_product_action_request_label_printing |
||||
|
#: model:ir.ui.view,arch_db:beesdoo_product.printing_label_request_wizard |
||||
|
msgid "Request label printing" |
||||
|
msgstr "Request label printing" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.actions.act_window,name:beesdoo_product.beesdoo_product_action_set_label_as_printed |
||||
|
msgid "Set label as printed" |
||||
|
msgstr "Set label as printed" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.ui.view,arch_db:beesdoo_product.set_label_as_printed_wizard |
||||
|
msgid "Set labels as printed" |
||||
|
msgstr "Set labels as printed" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_total_with_vat |
||||
|
msgid "Total Sales Price with VAT" |
||||
|
msgstr "Total Sales Price with VAT" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_product_template_total_with_vat_by_unit |
||||
|
msgid "Total Sales Price with VAT by Reference Unit" |
||||
|
msgstr "Total Sales Price with VAT by Reference Unit" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model.fields,field_description:beesdoo_product.field_beesdoo_product_label_type |
||||
|
msgid "Type" |
||||
|
msgstr "Type" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model,name:beesdoo_product.model_beesdoo_product_label |
||||
|
msgid "beesdoo.product.label" |
||||
|
msgstr "beesdoo.product.label" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: model:ir.model,name:beesdoo_product.model_label_printing_wizard |
||||
|
msgid "label.printing.wizard" |
||||
|
msgstr "label.printing.wizard" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: selection:beesdoo.product.label,type:0 |
||||
|
msgid "Écologique" |
||||
|
msgstr "Écologique" |
||||
|
|
||||
|
#. module: beesdoo_product |
||||
|
#: selection:beesdoo.product.label,type:0 |
||||
|
msgid "Équitable" |
||||
|
msgstr "Équitable" |
||||
|
|
@ -0,0 +1,2 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
import beesdoo_product |
@ -0,0 +1,187 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from openerp import models, fields, api |
||||
|
from openerp.tools.translate import _ |
||||
|
from openerp.exceptions import UserError, ValidationError |
||||
|
import uuid |
||||
|
|
||||
|
|
||||
|
class BeesdooProduct(models.Model): |
||||
|
_inherit = "product.template" |
||||
|
|
||||
|
eco_label = fields.Many2one('beesdoo.product.label', domain=[('type', '=', 'eco')]) |
||||
|
local_label = fields.Many2one('beesdoo.product.label', domain=[('type', '=', 'local')]) |
||||
|
fair_label = fields.Many2one('beesdoo.product.label', domain=[('type', '=', 'fair')]) |
||||
|
origin_label = fields.Many2one('beesdoo.product.label', domain=[('type', '=', 'delivery')]) |
||||
|
|
||||
|
main_seller_id = fields.Many2one('res.partner', string='Main Seller', compute='_compute_main_seller_id', store=True) |
||||
|
|
||||
|
display_unit = fields.Many2one('product.uom') |
||||
|
default_reference_unit = fields.Many2one('product.uom') |
||||
|
display_weight = fields.Float(compute='_get_display_weight', store=True) |
||||
|
|
||||
|
total_with_vat = fields.Float(compute='_get_total', store=True, string="Total Sales Price with VAT") |
||||
|
total_with_vat_by_unit = fields.Float(compute='_get_total', store=True, string="Total Sales Price with VAT by Reference Unit") |
||||
|
total_deposit = fields.Float(compute='_get_total', store=True, string="Deposit Price") |
||||
|
|
||||
|
label_to_be_printed = fields.Boolean('Print label?') |
||||
|
label_last_printed = fields.Datetime('Label last printed on') |
||||
|
|
||||
|
note = fields.Text('Comments') |
||||
|
|
||||
|
# S0023 : List_price = Price HTVA, so add a suggested price |
||||
|
list_price = fields.Float(string='exVAT Price') |
||||
|
suggested_price = fields.Float(string='Suggested exVAT Price', compute='_compute_cost', readOnly=True) |
||||
|
|
||||
|
deadline_for_sale = fields.Integer(string="Deadline for sale(days)") |
||||
|
deadline_for_consumption = fields.Integer(string="Deadline for consumption(days)") |
||||
|
ingredients = fields.Char(string="Ingredient") |
||||
|
scale_label_info_1 = fields.Char(string="Scale lable info 1") |
||||
|
scale_label_info_2 = fields.Char(string="Scale lable info 2") |
||||
|
scale_sale_unit = fields.Char(compute="_get_scale_sale_uom", string="Scale sale unit", store=True) |
||||
|
scale_category = fields.Many2one('beesdoo.scale.category', string="Scale Category") |
||||
|
scale_category_code = fields.Integer(related='scale_category.code', string="Scale category code", readonly=True, store=True) |
||||
|
|
||||
|
@api.depends('uom_id','uom_id.category_id','uom_id.category_id.type') |
||||
|
@api.multi |
||||
|
def _get_scale_sale_uom(self): |
||||
|
for product in self: |
||||
|
if product.uom_id.category_id.type == 'unit': |
||||
|
product.scale_sale_unit = 'F' |
||||
|
elif product.uom_id.category_id.type == 'weight': |
||||
|
product.scale_sale_unit = 'P' |
||||
|
|
||||
|
def _get_main_supplier_info(self): |
||||
|
suppliers = self.seller_ids.sorted( |
||||
|
key=lambda seller: seller.date_start, |
||||
|
reverse=True) |
||||
|
if suppliers: |
||||
|
return suppliers[0] |
||||
|
else: |
||||
|
return suppliers |
||||
|
|
||||
|
@api.one |
||||
|
def generate_barcode(self): |
||||
|
if self.to_weight: |
||||
|
seq_internal_code = self.env.ref('beesdoo_product.seq_ean_product_internal_ref') |
||||
|
bc = '' |
||||
|
if not self.default_code: |
||||
|
rule = self.env['barcode.rule'].search([('name', '=', 'Price Barcodes (Computed Weight) 2 Decimals')])[0] |
||||
|
default_code = seq_internal_code.next_by_id() |
||||
|
while(self.search_count([('default_code', '=', default_code)]) > 1): |
||||
|
default_code = seq_internal_code.next_by_id() |
||||
|
self.default_code = default_code |
||||
|
ean = '02' + self.default_code[0:5] + '000000' |
||||
|
bc = ean[0:12] + str(self.env['barcode.nomenclature'].ean_checksum(ean)) |
||||
|
else: |
||||
|
rule = self.env['barcode.rule'].search([('name', '=', 'Beescoop Product Barcodes')])[0] |
||||
|
size = 13 - len(rule.pattern) |
||||
|
ean = rule.pattern + str(uuid.uuid4().fields[-1])[:size] |
||||
|
bc = ean[0:12] + str(self.env['barcode.nomenclature'].ean_checksum(ean)) |
||||
|
# Make sure there is no other active member with the same barcode |
||||
|
while(self.search_count([('barcode', '=', bc)]) > 1): |
||||
|
ean = rule.pattern + str(uuid.uuid4().fields[-1])[:size] |
||||
|
bc = ean[0:12] + str(self.env['barcode.nomenclature'].ean_checksum(ean)) |
||||
|
print 'barcode :', bc |
||||
|
self.barcode = bc |
||||
|
|
||||
|
@api.one |
||||
|
@api.depends('seller_ids', 'seller_ids.date_start') |
||||
|
def _compute_main_seller_id(self): |
||||
|
# Calcule le vendeur associé qui a la date de début la plus récente et plus petite qu’aujourd’hui |
||||
|
sellers_ids = self._get_main_supplier_info() # self.seller_ids.sorted(key=lambda seller: seller.date_start, reverse=True) |
||||
|
self.main_seller_id = sellers_ids and sellers_ids[0].name or False |
||||
|
|
||||
|
@api.one |
||||
|
@api.depends('taxes_id', 'list_price', 'taxes_id.amount', |
||||
|
'taxes_id.tax_group_id', 'total_with_vat', |
||||
|
'display_weight', 'weight') |
||||
|
def _get_total(self): |
||||
|
consignes_group = self.env.ref('beesdoo_product.consignes_group_tax', |
||||
|
raise_if_not_found=False) |
||||
|
|
||||
|
taxes_included = set(self.taxes_id.mapped('price_include')) |
||||
|
if len(taxes_included) == 0: |
||||
|
self.total_with_vat = self.list_price |
||||
|
return True |
||||
|
|
||||
|
elif len(taxes_included) > 1: |
||||
|
raise ValidationError('Several tax strategies (price_include) defined for %s' % self.name) |
||||
|
|
||||
|
elif taxes_included.pop(): |
||||
|
self.total_with_vat = self.list_price |
||||
|
self.total_deposit = sum([tax._compute_amount(self.list_price, self.list_price) for tax in self.taxes_id if tax.tax_group_id == consignes_group]) |
||||
|
else: |
||||
|
tax_amount_sum = sum([tax._compute_amount(self.list_price, self.list_price) |
||||
|
for tax in self.taxes_id |
||||
|
if tax.tax_group_id != consignes_group]) |
||||
|
self.total_with_vat = self.list_price + tax_amount_sum |
||||
|
|
||||
|
self.total_deposit = sum([tax._compute_amount(self.list_price, self.list_price) |
||||
|
for tax in self.taxes_id |
||||
|
if tax.tax_group_id == consignes_group]) |
||||
|
|
||||
|
if self.display_weight > 0: |
||||
|
self.total_with_vat_by_unit = self.total_with_vat / self.weight |
||||
|
|
||||
|
@api.one |
||||
|
@api.depends('weight', 'display_unit') |
||||
|
def _get_display_weight(self): |
||||
|
self.display_weight = self.weight * self.display_unit.factor |
||||
|
|
||||
|
@api.one |
||||
|
@api.constrains('display_unit', 'default_reference_unit') |
||||
|
def _unit_same_category(self): |
||||
|
if self.display_unit.category_id != self.default_reference_unit.category_id: |
||||
|
raise UserError(_('Reference Unit and Display Unit should belong to the same category')) |
||||
|
|
||||
|
@api.one |
||||
|
@api.depends('seller_ids') |
||||
|
def _compute_cost(self): |
||||
|
suppliers = self._get_main_supplier_info() |
||||
|
if(len(suppliers) > 0): |
||||
|
self.suggested_price = (suppliers[0].price * self.uom_po_id.factor)* (1 + suppliers[0].product_tmpl_id.categ_id.profit_margin / 100) |
||||
|
|
||||
|
class BeesdooScaleCategory(models.Model): |
||||
|
_name = "beesdoo.scale.category" |
||||
|
|
||||
|
name = fields.Char(string="Scale name category") |
||||
|
code = fields.Integer(string="Category code") |
||||
|
|
||||
|
_sql_constraints = [ |
||||
|
('code_scale_categ_uniq', 'unique (code)', 'The code of the scale category must be unique !') |
||||
|
] |
||||
|
|
||||
|
class BeesdooProductLabel(models.Model): |
||||
|
_name = "beesdoo.product.label" |
||||
|
|
||||
|
name = fields.Char() |
||||
|
type = fields.Selection([('eco', 'Écologique'), ('local', 'Local'), ('fair', 'Équitable'), ('delivery', 'Distribution')]) |
||||
|
color_code = fields.Char() |
||||
|
active = fields.Boolean(default=True) |
||||
|
|
||||
|
class BeesdooProductCategory(models.Model): |
||||
|
_inherit = "product.category" |
||||
|
|
||||
|
profit_margin = fields.Float(default = '10.0', string = "Product Margin [%]") |
||||
|
|
||||
|
@api.one |
||||
|
@api.constrains('profit_margin') |
||||
|
def _check_margin(self): |
||||
|
if (self.profit_margin < 0.0): |
||||
|
raise UserError(_('Percentages for Profit Margin must > 0.')) |
||||
|
|
||||
|
class BeesdooProductSupplierInfo(models.Model): |
||||
|
_inherit = "product.supplierinfo" |
||||
|
|
||||
|
price = fields.Float('exVAT Price') |
||||
|
|
||||
|
class BeesdooUOMCateg(models.Model): |
||||
|
_inherit = 'product.uom.categ' |
||||
|
|
||||
|
type = fields.Selection([('unit','Unit'), |
||||
|
('weight','Weight'), |
||||
|
('time','Time'), |
||||
|
('distance','Distance'), |
||||
|
('surface','Surface'), |
||||
|
('volume','Volume'), |
||||
|
('other','Other')],string='Category type',default='unit') |
@ -0,0 +1,5 @@ |
|||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
||||
|
beesdoo_product_label_read_all,beesdoo.product.label Read All,model_beesdoo_product_label,,1,0,0,0 |
||||
|
beesdoo_product_label_all_access_sale_manager,beesdoo.product.label All Access Sale Manager,model_beesdoo_product_label,base.group_sale_manager,1,1,1,1 |
||||
|
beesdoo_scale_category_read_all,beesdoo.scale.category Read All,model_beesdoo_scale_category,,1,0,0,0 |
||||
|
beesdoo_scale_categoryl_all_access_sale_manager,beesdoo.scale.category All Access Sale Manager,model_beesdoo_scale_category,base.group_sale_manager,1,1,1,0 |
@ -0,0 +1,188 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<record model="ir.ui.view" id="beesdoo_product_form"> |
||||
|
<field name="name">bees.product.template.form</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_only_form_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="barcode" position="after"> |
||||
|
<button string="Generate Barcode" name="generate_barcode" type="object" colspan="2" attrs="{'invisible' : [('barcode','!=',False)]}" /> /> |
||||
|
</field> |
||||
|
<field name="list_price" position="after"> |
||||
|
<field name="suggested_price" widget='monetary' options="{'currency_field': 'currency_id'}" /> |
||||
|
</field> |
||||
|
<field name="invoice_policy" position="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</field> |
||||
|
<field name="purchase_method" position="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</field> |
||||
|
<field name="route_ids" position="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</field> |
||||
|
<group name="sale_condition" position="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</group> |
||||
|
<field name="property_account_creditor_price_difference" |
||||
|
position="attributes"> |
||||
|
<attribute name="invisible">1</attribute> |
||||
|
</field> |
||||
|
<xpath expr="//group[@name='inventory']/.." position="after"> |
||||
|
<page string="Label"> |
||||
|
<group> |
||||
|
<group name="label"> |
||||
|
<field name="total_with_vat"/> |
||||
|
<field name="display_weight"/> |
||||
|
<field name="display_unit"/> |
||||
|
<field name="default_reference_unit"/> |
||||
|
<field name="total_with_vat_by_unit" /> |
||||
|
<field name="total_deposit" /> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="main_seller_id"/> |
||||
|
<field name="eco_label"/> |
||||
|
<field name="local_label"/> |
||||
|
<field name="fair_label"/> |
||||
|
<field name="origin_label"/> |
||||
|
<field name="label_to_be_printed"/> |
||||
|
<field name="label_last_printed"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="note" /> |
||||
|
</group> |
||||
|
</page> |
||||
|
<page string="Scale labels" attrs="{'invisible':[('to_weight','=',False)]}"> |
||||
|
<group> |
||||
|
<group name="scale_label"> |
||||
|
<field name="deadline_for_sale"/> |
||||
|
<field name="deadline_for_consumption"/> |
||||
|
<field name="ingredients"/> |
||||
|
<field name="scale_label_info_1"/> |
||||
|
<field name="scale_label_info_2"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="scale_sale_unit"/> |
||||
|
<field name="scale_category" widget="selection"/> |
||||
|
<field name="scale_category_code"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
</page> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_product_label_form"> |
||||
|
<field name="name">bees.product.label.form</field> |
||||
|
<field name="model">beesdoo.product.label</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<group> |
||||
|
<field name="name" /> |
||||
|
<field name="type" /> |
||||
|
<field name="color_code" /> |
||||
|
<field name="active" /> |
||||
|
</group> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_product_label_tree"> |
||||
|
<field name="name">bees.product.label.tree</field> |
||||
|
<field name="model">beesdoo.product.label</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree editable="Top"> |
||||
|
<field name="name" /> |
||||
|
<field name="type" /> |
||||
|
<field name="color_code" /> |
||||
|
<field name="active" /> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_product_category_list"> |
||||
|
<field name="name">beesdoo.product.category.list</field> |
||||
|
<field name="model">product.category</field> |
||||
|
<field name="inherit_id" ref="product.product_category_list_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="complete_name" position="after"> |
||||
|
<field name="profit_margin"></field> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_product_category_form"> |
||||
|
<field name="name">beesdoo.product.category.form</field> |
||||
|
<field name="model">product.category</field> |
||||
|
<field name="inherit_id" ref="product.product_category_form_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="parent_id" position="after"> |
||||
|
<field name="profit_margin"></field> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_product_supplierinfo_tree_view"> |
||||
|
<field name="name">beesdoo.product.supplierinfo.tree</field> |
||||
|
<field name="model">product.supplierinfo</field> |
||||
|
<field name="inherit_id" ref="product.product_supplierinfo_tree_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="price" position="replace"> |
||||
|
<field name="price"></field> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.actions.act_window" id="action_labels"> |
||||
|
<field name="name">Product Labels</field> |
||||
|
<field name="res_model">beesdoo.product.label</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="label_configuration_menu" name="Labels" parent="product.prod_config_main" |
||||
|
action="action_labels" sequence="20"/> |
||||
|
|
||||
|
<record id="beesdoo_product_uom_categ_form" model="ir.ui.view"> |
||||
|
<field name="name">product.uom.categ.form</field> |
||||
|
<field name="model">product.uom.categ</field> |
||||
|
<field name="inherit_id" ref="product.product_uom_categ_form_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<field name="name" position="after"> |
||||
|
<field name="type"/> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_scale_category_list"> |
||||
|
<field name="name">beesdoo.scale.category.list</field> |
||||
|
<field name="model">beesdoo.scale.category</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="code"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.ui.view" id="beesdoo_scale_category_form"> |
||||
|
<field name="name">beesdoo.scale.category.form</field> |
||||
|
<field name="model">beesdoo.scale.category</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
<field name="code"/> |
||||
|
</group> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.actions.act_window" id="action_scale_categories"> |
||||
|
<field name="name">Scale categories</field> |
||||
|
<field name="res_model">beesdoo.scale.category</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem id="scale_categories_configuration_menu" name="Scale categories" parent="product.prod_config_main" |
||||
|
action="action_scale_categories" sequence="15"/> |
||||
|
</odoo> |
@ -0,0 +1 @@ |
|||||
|
import label_printing_utils |
@ -0,0 +1,21 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
from openerp import models, fields, api |
||||
|
|
||||
|
class RequestLabelPrintingWizard(models.TransientModel): |
||||
|
|
||||
|
_name = 'label.printing.wizard' |
||||
|
|
||||
|
def _get_selected_products(self): |
||||
|
return self.env.context['active_ids'] |
||||
|
|
||||
|
product_ids = fields.Many2many('product.template', default=_get_selected_products) |
||||
|
|
||||
|
|
||||
|
@api.one |
||||
|
def request_printing(self): |
||||
|
self.product_ids.write({'label_to_be_printed' : True}) |
||||
|
|
||||
|
|
||||
|
@api.one |
||||
|
def set_as_printed(self): |
||||
|
self.product_ids.write({'label_to_be_printed' : False, 'label_last_printed' : fields.Datetime.now()}) |
@ -0,0 +1,55 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<record id="printing_label_request_wizard" model="ir.ui.view"> |
||||
|
<field name="name">Request Label Printing Wizard</field> |
||||
|
<field name="model">label.printing.wizard</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<field name="product_ids" /> |
||||
|
<footer> |
||||
|
<button |
||||
|
type="object" |
||||
|
name="request_printing" |
||||
|
string="Request label printing" |
||||
|
class="oe_highlight" /> |
||||
|
<button special="cancel" string="Cancel" /> |
||||
|
</footer> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<act_window name="Request label printing" |
||||
|
res_model="label.printing.wizard" |
||||
|
src_model="product.template" |
||||
|
view_mode="form" |
||||
|
target="new" |
||||
|
view_id="printing_label_request_wizard" |
||||
|
key2="client_action_multi" |
||||
|
id="beesdoo_product_action_request_label_printing" |
||||
|
/> |
||||
|
<record id="set_label_as_printed_wizard" model="ir.ui.view"> |
||||
|
<field name="name">Request Label Printing Wizard</field> |
||||
|
<field name="model">label.printing.wizard</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<field name="product_ids" /> |
||||
|
<footer> |
||||
|
<button |
||||
|
type="object" |
||||
|
name="set_as_printed" |
||||
|
string="Set labels as printed" |
||||
|
class="oe_highlight" /> |
||||
|
<button special="cancel" string="Cancel" /> |
||||
|
</footer> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<act_window name="Set label as printed" |
||||
|
res_model="label.printing.wizard" |
||||
|
src_model="product.template" |
||||
|
view_mode="form" |
||||
|
view_id="set_label_as_printed_wizard" |
||||
|
target="new" |
||||
|
key2="client_action_multi" |
||||
|
id="beesdoo_product_action_set_label_as_printed" |
||||
|
/> |
||||
|
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue