diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_sale/models | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/pos_sale/models')
| -rw-r--r-- | addons/pos_sale/models/__init__.py | 8 | ||||
| -rw-r--r-- | addons/pos_sale/models/account_move.py | 28 | ||||
| -rw-r--r-- | addons/pos_sale/models/crm_team.py | 31 | ||||
| -rw-r--r-- | addons/pos_sale/models/pos_config.py | 22 | ||||
| -rw-r--r-- | addons/pos_sale/models/pos_order.py | 28 | ||||
| -rw-r--r-- | addons/pos_sale/models/pos_session.py | 10 |
6 files changed, 127 insertions, 0 deletions
diff --git a/addons/pos_sale/models/__init__.py b/addons/pos_sale/models/__init__.py new file mode 100644 index 00000000..a819ee04 --- /dev/null +++ b/addons/pos_sale/models/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import pos_config +from . import pos_order +from . import crm_team +from . import pos_session +from . import account_move diff --git a/addons/pos_sale/models/account_move.py b/addons/pos_sale/models/account_move.py new file mode 100644 index 00000000..2ab94c2c --- /dev/null +++ b/addons/pos_sale/models/account_move.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +from odoo import fields, models, api + +class AccountMove(models.Model): + _inherit = 'account.move' + + def _get_invoiced_lot_values(self): + self.ensure_one() + + lot_values = super(AccountMove, self)._get_invoiced_lot_values() + + if self.state == 'draft': + return lot_values + + for order in self.pos_order_ids: + for line in order.lines: + lots = line.pack_lot_ids or False + if lots: + for lot in lots: + lot_values.append({ + 'product_name': lot.product_id.name, + 'quantity': line.qty if lot.product_id.tracking == 'lot' else 1.0, + 'uom_name': line.product_uom_id.name, + 'lot_name': lot.lot_name, + }) + + return lot_values diff --git a/addons/pos_sale/models/crm_team.py b/addons/pos_sale/models/crm_team.py new file mode 100644 index 00000000..7e2659e8 --- /dev/null +++ b/addons/pos_sale/models/crm_team.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ +from odoo.exceptions import UserError, ValidationError +from datetime import datetime +import pytz + + +class CrmTeam(models.Model): + _inherit = 'crm.team' + + pos_config_ids = fields.One2many('pos.config', 'crm_team_id', string="Point of Sales") + pos_sessions_open_count = fields.Integer(string='Open POS Sessions', compute='_compute_pos_sessions_open_count') + pos_order_amount_total = fields.Float(string="Session Sale Amount", compute='_compute_pos_order_amount_total') + + def _compute_pos_sessions_open_count(self): + for team in self: + team.pos_sessions_open_count = self.env['pos.session'].search_count([('config_id.crm_team_id', '=', team.id), ('state', '=', 'opened')]) + + def _compute_pos_order_amount_total(self): + data = self.env['report.pos.order'].read_group([ + ('session_id.state', '=', 'opened'), + ('config_id.crm_team_id', 'in', self.ids), + ], ['price_total:sum', 'config_id'], ['config_id']) + rg_results = dict((d['config_id'][0], d['price_total']) for d in data) + for team in self: + team.pos_order_amount_total = sum([ + rg_results.get(config.id, 0.0) + for config in team.pos_config_ids + ]) diff --git a/addons/pos_sale/models/pos_config.py b/addons/pos_sale/models/pos_config.py new file mode 100644 index 00000000..c6a8dd7c --- /dev/null +++ b/addons/pos_sale/models/pos_config.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models, api +from odoo.exceptions import AccessError + + +class PosConfig(models.Model): + _inherit = 'pos.config' + + + crm_team_id = fields.Many2one( + 'crm.team', string="Sales Team", + help="This Point of sale's sales will be related to this Sales Team.") + + @api.onchange('company_id') + def _get_default_pos_team(self): + default_sale_team = self.env.ref('sales_team.pos_sales_team', raise_if_not_found=False) + if default_sale_team and (not default_sale_team.company_id or default_sale_team.company_id == self.company_id): + self.crm_team_id = default_sale_team + else: + self.crm_team_id = self.env['crm.team'].search(['|', ('company_id', '=', self.company_id.id), ('company_id', '=', False)], limit=1) diff --git a/addons/pos_sale/models/pos_order.py b/addons/pos_sale/models/pos_order.py new file mode 100644 index 00000000..eb16cd72 --- /dev/null +++ b/addons/pos_sale/models/pos_order.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class PosOrder(models.Model): + _inherit = 'pos.order' + + currency_rate = fields.Float(compute='_compute_currency_rate', store=True, digits=0, readonly=True) + crm_team_id = fields.Many2one('crm.team', string="Sales Team") + + @api.model + def _complete_values_from_session(self, session, values): + values = super(PosOrder, self)._complete_values_from_session(session, values) + values.setdefault('crm_team_id', session.config_id.crm_team_id.id) + return values + + @api.depends('pricelist_id.currency_id', 'date_order', 'company_id') + def _compute_currency_rate(self): + for order in self: + date_order = order.date_order or fields.Datetime.now() + order.currency_rate = self.env['res.currency']._get_conversion_rate(order.company_id.currency_id, order.pricelist_id.currency_id, order.company_id, date_order) + + def _prepare_invoice_vals(self): + invoice_vals = super(PosOrder, self)._prepare_invoice_vals() + invoice_vals['team_id'] = self.crm_team_id + return invoice_vals diff --git a/addons/pos_sale/models/pos_session.py b/addons/pos_sale/models/pos_session.py new file mode 100644 index 00000000..3f4848bb --- /dev/null +++ b/addons/pos_sale/models/pos_session.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class PosSession(models.Model): + _inherit = 'pos.session' + + crm_team_id = fields.Many2one('crm.team', related='config_id.crm_team_id', string="Sales Team", readonly=True) |
