From cecd7a344831fe3de7f85c852446031ee3a30c99 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Fri, 9 Jul 2021 11:56:29 +0200 Subject: [PATCH] [MOV] lunch: Split model files according to guidelines --- addons/lunch/models/__init__.py | 2 + addons/lunch/models/lunch_product.py | 92 ------------------- addons/lunch/models/lunch_product_category.py | 78 ++++++++++++++++ addons/lunch/models/lunch_topping.py | 26 ++++++ 4 files changed, 106 insertions(+), 92 deletions(-) create mode 100644 addons/lunch/models/lunch_product_category.py create mode 100644 addons/lunch/models/lunch_topping.py diff --git a/addons/lunch/models/__init__.py b/addons/lunch/models/__init__.py index 94739d3cf9f..ada49399758 100644 --- a/addons/lunch/models/__init__.py +++ b/addons/lunch/models/__init__.py @@ -6,6 +6,8 @@ from . import lunch_cashmove from . import lunch_location from . import lunch_order from . import lunch_product +from . import lunch_product_category +from . import lunch_topping from . import lunch_supplier from . import res_company from . import res_config_settings diff --git a/addons/lunch/models/lunch_product.py b/addons/lunch/models/lunch_product.py index e460349ec2c..7a8017da6d1 100644 --- a/addons/lunch/models/lunch_product.py +++ b/addons/lunch/models/lunch_product.py @@ -7,101 +7,9 @@ from collections import defaultdict from odoo import api, fields, models, _ from odoo.exceptions import UserError -from odoo.modules.module import get_module_resource -from odoo.tools import formatLang from odoo.osv import expression -class LunchProductCategory(models.Model): - """ Category of the product such as pizza, sandwich, pasta, chinese, burger... """ - _name = 'lunch.product.category' - _inherit = 'image.mixin' - _description = 'Lunch Product Category' - - @api.model - def _default_image(self): - image_path = get_module_resource('lunch', 'static/img', 'lunch.png') - return base64.b64encode(open(image_path, 'rb').read()) - - name = fields.Char('Product Category', required=True, translate=True) - company_id = fields.Many2one('res.company') - currency_id = fields.Many2one('res.currency', related='company_id.currency_id') - topping_label_1 = fields.Char('Extra 1 Label', required=True, default='Extras') - topping_label_2 = fields.Char('Extra 2 Label', required=True, default='Beverages') - topping_label_3 = fields.Char('Extra 3 Label', required=True, default='Extra Label 3') - topping_ids_1 = fields.One2many('lunch.topping', 'category_id', domain=[('topping_category', '=', 1)]) - topping_ids_2 = fields.One2many('lunch.topping', 'category_id', domain=[('topping_category', '=', 2)]) - topping_ids_3 = fields.One2many('lunch.topping', 'category_id', domain=[('topping_category', '=', 3)]) - topping_quantity_1 = fields.Selection([ - ('0_more', 'None or More'), - ('1_more', 'One or More'), - ('1', 'Only One')], 'Extra 1 Quantity', default='0_more', required=True) - topping_quantity_2 = fields.Selection([ - ('0_more', 'None or More'), - ('1_more', 'One or More'), - ('1', 'Only One')], 'Extra 2 Quantity', default='0_more', required=True) - topping_quantity_3 = fields.Selection([ - ('0_more', 'None or More'), - ('1_more', 'One or More'), - ('1', 'Only One')], 'Extra 3 Quantity', default='0_more', required=True) - product_count = fields.Integer(compute='_compute_product_count', help="The number of products related to this category") - active = fields.Boolean(string='Active', default=True) - image_1920 = fields.Image(default=_default_image) - - def _compute_product_count(self): - product_data = self.env['lunch.product'].read_group([('category_id', 'in', self.ids)], ['category_id'], ['category_id']) - data = {product['category_id'][0]: product['category_id_count'] for product in product_data} - for category in self: - category.product_count = data.get(category.id, 0) - - @api.model - def create(self, vals): - for topping in vals.get('topping_ids_2', []): - topping[2].update({'topping_category': 2}) - for topping in vals.get('topping_ids_3', []): - topping[2].update({'topping_category': 3}) - return super(LunchProductCategory, self).create(vals) - - def write(self, vals): - for topping in vals.get('topping_ids_2', []): - topping_values = topping[2] - if topping_values: - topping_values.update({'topping_category': 2}) - for topping in vals.get('topping_ids_3', []): - topping_values = topping[2] - if topping_values: - topping_values.update({'topping_category': 3}) - return super(LunchProductCategory, self).write(vals) - - def toggle_active(self): - """ Archiving related lunch product """ - res = super().toggle_active() - Product = self.env['lunch.product'].with_context(active_test=False) - all_products = Product.search([('category_id', 'in', self.ids)]) - all_products._sync_active_from_related() - return res - -class LunchTopping(models.Model): - """""" - _name = 'lunch.topping' - _description = 'Lunch Extras' - - name = fields.Char('Name', required=True) - company_id = fields.Many2one('res.company', default=lambda self: self.env.company) - currency_id = fields.Many2one('res.currency', related='company_id.currency_id') - price = fields.Float('Price', digits='Account', required=True) - category_id = fields.Many2one('lunch.product.category', ondelete='cascade') - topping_category = fields.Integer('Topping Category', help="This field is a technical field", required=True, default=1) - - def name_get(self): - currency_id = self.env.company.currency_id - res = dict(super(LunchTopping, self).name_get()) - for topping in self: - price = formatLang(self.env, topping.price, currency_obj=currency_id) - res[topping.id] = '%s %s' % (topping.name, price) - return list(res.items()) - - class LunchProduct(models.Model): """ Products available to order. A product is linked to a specific vendor. """ _name = 'lunch.product' diff --git a/addons/lunch/models/lunch_product_category.py b/addons/lunch/models/lunch_product_category.py new file mode 100644 index 00000000000..727aa159b4a --- /dev/null +++ b/addons/lunch/models/lunch_product_category.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import base64 + +from odoo import api, fields, models + +from odoo.modules.module import get_module_resource + + +class LunchProductCategory(models.Model): + """ Category of the product such as pizza, sandwich, pasta, chinese, burger... """ + _name = 'lunch.product.category' + _inherit = 'image.mixin' + _description = 'Lunch Product Category' + + @api.model + def _default_image(self): + image_path = get_module_resource('lunch', 'static/img', 'lunch.png') + return base64.b64encode(open(image_path, 'rb').read()) + + name = fields.Char('Product Category', required=True, translate=True) + company_id = fields.Many2one('res.company') + currency_id = fields.Many2one('res.currency', related='company_id.currency_id') + topping_label_1 = fields.Char('Extra 1 Label', required=True, default='Extras') + topping_label_2 = fields.Char('Extra 2 Label', required=True, default='Beverages') + topping_label_3 = fields.Char('Extra 3 Label', required=True, default='Extra Label 3') + topping_ids_1 = fields.One2many('lunch.topping', 'category_id', domain=[('topping_category', '=', 1)]) + topping_ids_2 = fields.One2many('lunch.topping', 'category_id', domain=[('topping_category', '=', 2)]) + topping_ids_3 = fields.One2many('lunch.topping', 'category_id', domain=[('topping_category', '=', 3)]) + topping_quantity_1 = fields.Selection([ + ('0_more', 'None or More'), + ('1_more', 'One or More'), + ('1', 'Only One')], 'Extra 1 Quantity', default='0_more', required=True) + topping_quantity_2 = fields.Selection([ + ('0_more', 'None or More'), + ('1_more', 'One or More'), + ('1', 'Only One')], 'Extra 2 Quantity', default='0_more', required=True) + topping_quantity_3 = fields.Selection([ + ('0_more', 'None or More'), + ('1_more', 'One or More'), + ('1', 'Only One')], 'Extra 3 Quantity', default='0_more', required=True) + product_count = fields.Integer(compute='_compute_product_count', help="The number of products related to this category") + active = fields.Boolean(string='Active', default=True) + image_1920 = fields.Image(default=_default_image) + + def _compute_product_count(self): + product_data = self.env['lunch.product'].read_group([('category_id', 'in', self.ids)], ['category_id'], ['category_id']) + data = {product['category_id'][0]: product['category_id_count'] for product in product_data} + for category in self: + category.product_count = data.get(category.id, 0) + + @api.model + def create(self, vals): + for topping in vals.get('topping_ids_2', []): + topping[2].update({'topping_category': 2}) + for topping in vals.get('topping_ids_3', []): + topping[2].update({'topping_category': 3}) + return super(LunchProductCategory, self).create(vals) + + def write(self, vals): + for topping in vals.get('topping_ids_2', []): + topping_values = topping[2] + if topping_values: + topping_values.update({'topping_category': 2}) + for topping in vals.get('topping_ids_3', []): + topping_values = topping[2] + if topping_values: + topping_values.update({'topping_category': 3}) + return super(LunchProductCategory, self).write(vals) + + def toggle_active(self): + """ Archiving related lunch product """ + res = super().toggle_active() + Product = self.env['lunch.product'].with_context(active_test=False) + all_products = Product.search([('category_id', 'in', self.ids)]) + all_products._sync_active_from_related() + return res diff --git a/addons/lunch/models/lunch_topping.py b/addons/lunch/models/lunch_topping.py new file mode 100644 index 00000000000..aff16d878ae --- /dev/null +++ b/addons/lunch/models/lunch_topping.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + +from odoo.tools import formatLang + + +class LunchTopping(models.Model): + _name = 'lunch.topping' + _description = 'Lunch Extras' + + name = fields.Char('Name', required=True) + company_id = fields.Many2one('res.company', default=lambda self: self.env.company) + currency_id = fields.Many2one('res.currency', related='company_id.currency_id') + price = fields.Float('Price', digits='Account', required=True) + category_id = fields.Many2one('lunch.product.category', ondelete='cascade') + topping_category = fields.Integer('Topping Category', help="This field is a technical field", required=True, default=1) + + def name_get(self): + currency_id = self.env.company.currency_id + res = dict(super(LunchTopping, self).name_get()) + for topping in self: + price = formatLang(self.env, topping.price, currency_obj=currency_id) + res[topping.id] = '%s %s' % (topping.name, price) + return list(res.items())