|  | @ -221,6 +221,7 @@ class ReportSaleDetails(models.AbstractModel): | 
			
		
	
		
		
			
				
					|  |  |         products = [] |  |  |         products = [] | 
			
		
	
		
		
			
				
					|  |  |         refund_products = [] |  |  |         refund_products = [] | 
			
		
	
		
		
			
				
					|  |  |         for category_name, product_list in products_sold.items(): |  |  |         for category_name, product_list in products_sold.items(): | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             print("product_list.items()",product_list.items()) | 
			
		
	
		
		
			
				
					|  |  |             category_dictionnary = { |  |  |             category_dictionnary = { | 
			
		
	
		
		
			
				
					|  |  |                 'name': category_name, |  |  |                 'name': category_name, | 
			
		
	
		
		
			
				
					|  |  |                 'products': sorted([{ |  |  |                 'products': sorted([{ | 
			
		
	
	
		
		
			
				
					|  | @ -235,6 +236,7 @@ class ReportSaleDetails(models.AbstractModel): | 
			
		
	
		
		
			
				
					|  |  |                     'base_amount': base_amount, |  |  |                     'base_amount': base_amount, | 
			
		
	
		
		
			
				
					|  |  |                 } for (product, price_unit, discount, uom), (qty, product_total, base_amount, uom) in product_list.items()], key=lambda l: l['product_name']), |  |  |                 } for (product, price_unit, discount, uom), (qty, product_total, base_amount, uom) in product_list.items()], key=lambda l: l['product_name']), | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             products.append(category_dictionnary) |  |  |             products.append(category_dictionnary) | 
			
		
	
		
		
			
				
					|  |  |         products = sorted(products, key=lambda l: str(l['name'])) |  |  |         products = sorted(products, key=lambda l: str(l['name'])) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -248,10 +250,10 @@ class ReportSaleDetails(models.AbstractModel): | 
			
		
	
		
		
			
				
					|  |  |                     'quantity': qty, |  |  |                     'quantity': qty, | 
			
		
	
		
		
			
				
					|  |  |                     'price_unit': price_unit, |  |  |                     'price_unit': price_unit, | 
			
		
	
		
		
			
				
					|  |  |                     'discount': discount, |  |  |                     'discount': discount, | 
			
		
	
		
		
			
				
					
					|  |  |                     'uom': product.uom_id.name, |  |  |                     'uom': uom, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |                     'total_paid': product_total, |  |  |                     'total_paid': product_total, | 
			
		
	
		
		
			
				
					|  |  |                     'base_amount': base_amount, |  |  |                     'base_amount': base_amount, | 
			
		
	
		
		
			
				
					
					|  |  |                 } for (product, price_unit, discount), (qty, product_total, base_amount) in product_list.items()], key=lambda l: l['product_name']), |  |  |                 } for (product, price_unit, discount,uom), (qty, product_total, base_amount,uom) in product_list.items()], key=lambda l: l['product_name']), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |             refund_products.append(category_dictionnary) |  |  |             refund_products.append(category_dictionnary) | 
			
		
	
		
		
			
				
					|  |  |         refund_products = sorted(refund_products, key=lambda l: str(l['name'])) |  |  |         refund_products = sorted(refund_products, key=lambda l: str(l['name'])) | 
			
		
	
	
		
		
			
				
					|  | @ -291,6 +293,8 @@ class ReportSaleDetails(models.AbstractModel): | 
			
		
	
		
		
			
				
					|  |  |                 'invoices': session._get_invoice_total_list(), |  |  |                 'invoices': session._get_invoice_total_list(), | 
			
		
	
		
		
			
				
					|  |  |             }) |  |  |             }) | 
			
		
	
		
		
			
				
					|  |  |             invoiceTotal += session._get_total_invoice() |  |  |             invoiceTotal += session._get_total_invoice() | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         print('refund_info',refund_products) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         print('products_info',products) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         return { |  |  |         return { | 
			
		
	
		
		
			
				
					|  |  |             'opening_note': sessions[0].opening_notes if len(sessions) == 1 else False, |  |  |             'opening_note': sessions[0].opening_notes if len(sessions) == 1 else False, | 
			
		
	
	
		
		
			
				
					|  | @ -329,33 +333,28 @@ class ReportSaleDetails(models.AbstractModel): | 
			
		
	
		
		
			
				
					|  |  |         for key1 in keys1: |  |  |         for key1 in keys1: | 
			
		
	
		
		
			
				
					|  |  |             products.setdefault(key1, {}) |  |  |             products.setdefault(key1, {}) | 
			
		
	
		
		
			
				
					|  |  |             products[key1].setdefault(key2, [0.0, 0.0, 0.0, line.uom_id.name])  # Add UOM to the product data |  |  |             products[key1].setdefault(key2, [0.0, 0.0, 0.0, line.uom_id.name])  # Add UOM to the product data | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             # Add quantities and amounts |  |  |             # Add quantities and amounts | 
			
		
	
		
		
			
				
					|  |  |             products[key1][key2][0] += line.qty |  |  |             products[key1][key2][0] += line.qty | 
			
		
	
		
		
			
				
					|  |  |             products[key1][key2][1] += line.currency_id.round( |  |  |             products[key1][key2][1] += line.currency_id.round( | 
			
		
	
		
		
			
				
					|  |  |                 line.price_unit * line.qty * (100 - line.discount) / 100.0) |  |  |                 line.price_unit * line.qty * (100 - line.discount) / 100.0) | 
			
		
	
		
		
			
				
					|  |  |             products[key1][key2][2] += line.price_subtotal |  |  |             products[key1][key2][2] += line.price_subtotal | 
			
		
	
		
		
			
				
					|  |  |             # UOM is already stored in [3] (as line.uom_id.name) |  |  |             # UOM is already stored in [3] (as line.uom_id.name) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |         # Calculate taxes if applicable |  |  |         # Calculate taxes if applicable | 
			
		
	
		
		
			
				
					|  |  |         if line.tax_ids_after_fiscal_position: |  |  |         if line.tax_ids_after_fiscal_position: | 
			
		
	
		
		
			
				
					|  |  |             line_taxes = line.tax_ids_after_fiscal_position.sudo().compute_all( |  |  |             line_taxes = line.tax_ids_after_fiscal_position.sudo().compute_all( | 
			
		
	
		
		
			
				
					|  |  |                 line.price_unit * (1 - (line.discount or 0.0) / 100.0), currency, line.qty, |  |  |                 line.price_unit * (1 - (line.discount or 0.0) / 100.0), currency, line.qty, | 
			
		
	
		
		
			
				
					|  |  |                 product=line.product_id, partner=line.order_id.partner_id or False |  |  |                 product=line.product_id, partner=line.order_id.partner_id or False | 
			
		
	
		
		
			
				
					|  |  |             ) |  |  |             ) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             # Store tax amounts and base amounts |  |  |             # Store tax amounts and base amounts | 
			
		
	
		
		
			
				
					|  |  |             base_amounts = {} |  |  |             base_amounts = {} | 
			
		
	
		
		
			
				
					|  |  |             for tax in line_taxes['taxes']: |  |  |             for tax in line_taxes['taxes']: | 
			
		
	
		
		
			
				
					|  |  |                 taxes.setdefault(tax['id'], {'name': tax['name'], 'tax_amount': 0.0, 'base_amount': 0.0}) |  |  |                 taxes.setdefault(tax['id'], {'name': tax['name'], 'tax_amount': 0.0, 'base_amount': 0.0}) | 
			
		
	
		
		
			
				
					|  |  |                 taxes[tax['id']]['tax_amount'] += tax['amount'] |  |  |                 taxes[tax['id']]['tax_amount'] += tax['amount'] | 
			
		
	
		
		
			
				
					|  |  |                 base_amounts[tax['id']] = tax['base'] |  |  |                 base_amounts[tax['id']] = tax['base'] | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             # Add base amounts to taxes |  |  |             # Add base amounts to taxes | 
			
		
	
		
		
			
				
					|  |  |             for tax_id, base_amount in base_amounts.items(): |  |  |             for tax_id, base_amount in base_amounts.items(): | 
			
		
	
		
		
			
				
					|  |  |                 taxes[tax_id]['base_amount'] += base_amount |  |  |                 taxes[tax_id]['base_amount'] += base_amount | 
			
		
	
		
		
			
				
					|  |  |         else: |  |  |         else: | 
			
		
	
		
		
			
				
					|  |  |             taxes.setdefault(0, {'name': _('No Taxes'), 'tax_amount': 0.0, 'base_amount': 0.0}) |  |  |             taxes.setdefault(0, {'name': _('No Taxes'), 'tax_amount': 0.0, 'base_amount': 0.0}) | 
			
		
	
		
		
			
				
					|  |  |             taxes[0]['base_amount'] += line.price_subtotal_incl |  |  |             taxes[0]['base_amount'] += line.price_subtotal_incl | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |         return products, taxes |  |  |         return products, taxes |