You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

129 lines
5.7 KiB

import logging
from odoo import models
_logger = logging.getLogger(__name__)
class PosOrder(models.Model):
_inherit = 'pos.order'
def get_category_summary(self, order_ids):
orders = self.env['pos.order'].search([('id', 'in', order_ids)])
categories = []
if orders:
self.env.cr.execute("""SELECT category.name, sum(price_subtotal_incl) as amount,
sum(qty) as qty FROM pos_order_line AS line INNER JOIN
product_product AS product ON line.product_id = product.id INNER JOIN
product_template AS template ON product.product_tmpl_id = template.id
INNER JOIN pos_category as category ON template.pos_categ_id = category.id
WHERE line.order_id IN %s GROUP BY category.name """, (tuple(orders.ids),))
categories = self.env.cr.dictfetchall()
return categories
def get_product_summary(self, order_ids):
orders = self.env['pos.order'].search([('id', 'in', order_ids)])
if orders:
self.env.cr.execute("""
SELECT product.id, template.name, product.default_code as code, sum(qty) as qty
FROM product_product AS product,
pos_order_line AS line, product_template AS template
WHERE product.id = line.product_id AND template.id = product.product_tmpl_id
AND line.order_id IN %s
GROUP BY product.id, template.name, template.default_code
""", (tuple(orders.ids),))
product_summary = self.env.cr.dictfetchall()
else:
product_summary = []
return product_summary
def get_order_summary(self, order_ids):
orders = self.env['pos.order'].search([('id', 'in', order_ids)])
order_summary = []
for order in orders:
order_summary.append(
{'order_name': order.name, 'state': dict(self._fields['state'].selection).get(order.state),
'date_order': order.date_order, 'amount_total': order.amount_total})
return order_summary
class PosPayment(models.Model):
_inherit = 'pos.payment'
def get_payment_summary(self, order_ids):
orders = self.env['pos.order'].search([('id', 'in', order_ids)])
payment_ids = self.env["pos.payment"].search([('pos_order_id', 'in', orders.ids)]).ids
if payment_ids:
self.env.cr.execute("""
SELECT method.name, sum(amount) total
FROM pos_payment AS payment,
pos_payment_method AS method
WHERE payment.payment_method_id = method.id
AND payment.id IN %s
GROUP BY method.name
""", (tuple(payment_ids),))
payments_summary = self.env.cr.dictfetchall()
else:
payments_summary = []
return payments_summary
class PosSession(models.Model):
_inherit = 'pos.session'
def get_session_summary(self, session):
if session:
session = self.env['pos.session'].search([('id', '=', session)])
order_ids = session.order_ids
if order_ids:
self.env.cr.execute("""
SELECT product.id, template.name, product.default_code as code, sum(qty) as qty, sum(line.price_subtotal_incl) as total
FROM product_product AS product,
pos_order_line AS line, product_template AS template
WHERE product.id = line.product_id AND template.id = product.product_tmpl_id
AND line.order_id IN %s
GROUP BY product.id, template.name, template.default_code
""", (tuple(order_ids.ids),))
product_summary = self.env.cr.dictfetchall()
payment_ids = self.env["pos.payment"].search([('pos_order_id', 'in', order_ids.ids)]).ids
if payment_ids:
self.env.cr.execute("""
SELECT method.name, sum(amount) total
FROM pos_payment AS payment,
pos_payment_method AS method
WHERE payment.payment_method_id = method.id
AND payment.id IN %s
GROUP BY method.name
""", (tuple(payment_ids),))
payments_summary = self.env.cr.dictfetchall()
else:
payments_summary = []
else:
product_summary = []
payments_summary = []
session_summary = {
'session_name': session.name,
'start_date': session.start_at,
'end_date': session.stop_at,
'opening_balance': session.cash_register_balance_start,
'closing_balance': session.cash_register_balance_end_real,
'product_summary': product_summary,
'payments_summary': payments_summary
}
return session_summary
class PosConfig(models.Model):
_inherit = 'pos.config'
def get_location_summary(self, location_id):
location_quant = self.env['stock.quant'].search(
[('location_id', '=', int(location_id))])
location_summary = []
for quant in location_quant.filtered(lambda x: x.product_id.available_in_pos):
values = {
'product_id': quant.product_id.id,
'product': quant.product_id.name,
'quantity': quant.available_quantity,
}
location_summary.append(values)
return location_summary