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
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							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
 | |
| 
 |