summaryrefslogtreecommitdiff
path: root/addons/pos_sale/models
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_sale/models
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/pos_sale/models')
-rw-r--r--addons/pos_sale/models/__init__.py8
-rw-r--r--addons/pos_sale/models/account_move.py28
-rw-r--r--addons/pos_sale/models/crm_team.py31
-rw-r--r--addons/pos_sale/models/pos_config.py22
-rw-r--r--addons/pos_sale/models/pos_order.py28
-rw-r--r--addons/pos_sale/models/pos_session.py10
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)