|  | @ -6,9 +6,11 @@ import openerp.addons.decimal_precision as dp | 
			
		
	
		
		
			
				
					|  |  | class SaleOrder(osv.Model): |  |  | class SaleOrder(osv.Model): | 
			
		
	
		
		
			
				
					|  |  |     _inherit = 'sale.order' |  |  |     _inherit = 'sale.order' | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     def _amount_all(self, cr, uid, ids, field_name, arg, context=None): |  |  |     def _amount_all(self, cr, uid, ids, field_name, arg, context=None): | 
			
		
	
		
		
			
				
					|  |  |         cur_obj = self.pool.get('res.currency') |  |  |         cur_obj = self.pool.get('res.currency') | 
			
		
	
		
		
			
				
					|  |  |         res = {} |  |  |         res = {} | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         print "_amount_all" | 
			
		
	
		
		
			
				
					|  |  |         for order in self.browse(cr, uid, ids, context=context): |  |  |         for order in self.browse(cr, uid, ids, context=context): | 
			
		
	
		
		
			
				
					|  |  |             res[order.id] = { |  |  |             res[order.id] = { | 
			
		
	
		
		
			
				
					|  |  |                 'amount_untaxed': 0.0, |  |  |                 'amount_untaxed': 0.0, | 
			
		
	
	
		
		
			
				
					|  | @ -16,21 +18,17 @@ class SaleOrder(osv.Model): | 
			
		
	
		
		
			
				
					|  |  |                 'amount_tax': 0.0, |  |  |                 'amount_tax': 0.0, | 
			
		
	
		
		
			
				
					|  |  |                 'amount_total': 0.0, |  |  |                 'amount_total': 0.0, | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |             val = val1 = val2 = 0.0 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             cur = order.pricelist_id.currency_id |  |  |             cur = order.pricelist_id.currency_id | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             val1 = val2 = val3 = 0.0 | 
			
		
	
		
		
			
				
					|  |  |             for line in order.order_line: |  |  |             for line in order.order_line: | 
			
		
	
		
		
			
				
					|  |  |                 val1 += line.price_subtotal |  |  |                 val1 += line.price_subtotal | 
			
		
	
		
		
			
				
					
					|  |  |                 val += self._amount_line_tax(cr, uid, line, context=context) |  |  |                 val2 += self._amount_line_tax(cr, uid, line, context=context) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             if order.discount_type == 'amount': |  |  |                 val3 += (line.product_uom_qty * line.price_unit) * line.discount / 100 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 val2 = order.discount_rate |  |  |             total = val1 + val2 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             elif order.discount_type == 'percent': |  |  |             res[order.id]['amount_untaxed'] = round(cur_obj.round(cr, uid, cur, val1)) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 val2 = ((val1 + val) * order.discount_rate) / 100 |  |  |             res[order.id]['amount_tax'] = round(cur_obj.round(cr, uid, cur, val2)) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val) |  |  |             res[order.id]['amount_discount'] = round(cur_obj.round(cr, uid, cur, val3)) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             res[order.id]['amount_untaxed'] = cur_obj.round(cr, uid, cur, val1) |  |  |             res[order.id]['amount_total'] = round(cur_obj.round(cr, uid, cur, total)) | 
			
				
				
			
		
	
		
		
			
				
					|  |  |             res[order.id]['amount_discount'] = cur_obj.round(cr, uid, cur, val2) |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] - \ |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                                             res[order.id]['amount_discount'] |  |  |  | 
			
		
	
		
		
			
				
					|  |  |         return res |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     def _get_order(self, cr, uid, ids, context=None): |  |  |     def _get_order(self, cr, uid, ids, context=None): | 
			
		
	
		
		
			
				
					|  |  |         result = {} |  |  |         result = {} | 
			
		
	
	
		
		
			
				
					|  | @ -60,27 +58,33 @@ class SaleOrder(osv.Model): | 
			
		
	
		
		
			
				
					|  |  |         'discount_type': 'percent', |  |  |         'discount_type': 'percent', | 
			
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |     @api.onchange('discount_type', 'discount_rate') |  |  |     @api.multi | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |     def compute_discount(self): |  |  |     def compute_discount(self, discount): | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |         for order in self: |  |  |         for order in self: | 
			
		
	
		
		
			
				
					|  |  |             val1 = val2 = 0.0 |  |  |             val1 = val2 = 0.0 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             disc_amnt = 0.0 | 
			
		
	
		
		
			
				
					|  |  |             for line in order.order_line: |  |  |             for line in order.order_line: | 
			
		
	
		
		
			
				
					
					|  |  |                 val1 += line.price_subtotal |  |  |                 val1 += (line.product_uom_qty * line.price_unit) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                 line.discount = discount | 
			
		
	
		
		
			
				
					|  |  |                 val2 += self._amount_line_tax(line) |  |  |                 val2 += self._amount_line_tax(line) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 disc_amnt += (line.product_uom_qty * line.price_unit * line.discount)/100 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             total = val1 + val2 - disc_amnt | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             self.currency_id = order.pricelist_id.currency_id | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             self.amount_discount = round(disc_amnt) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             self.amount_tax = round(val2) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             self.amount_total = round(total) | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     @api.onchange('discount_type', 'discount_rate') | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     def supply_rate(self): | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         for order in self: | 
			
		
	
		
		
			
				
					|  |  |             if order.discount_type == 'percent': |  |  |             if order.discount_type == 'percent': | 
			
		
	
		
		
			
				
					
					|  |  |                 if order.discount_rate == 100: |  |  |                 self.compute_discount(order.discount_rate) | 
			
				
				
			
		
	
		
		
			
				
					|  |  |                     disc_amnt = val1 + val2 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 else: |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                     disc_amnt = (val1 + val2) * order.discount_rate / 100 |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 total = val1 + val2 - disc_amnt |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 self.currency_id = order.pricelist_id.currency_id |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 self.amount_discount = disc_amnt |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 self.amount_total = total |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					|  |  |             else: |  |  |             else: | 
			
		
	
		
		
			
				
					
					|  |  |                 total = (val1 + val2) - order.discount_rate |  |  |                 total = 0.0 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 self.currency_id = order.pricelist_id.currency_id |  |  |                 for line in order.order_line: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 self.amount_discount = order.discount_rate |  |  |                     total += (line.product_uom_qty * line.price_unit) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |                 self.amount_total = total |  |  |                 discount = (order.discount_rate / total) * 100 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                 self.compute_discount(discount) | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     def _prepare_invoice(self, cr, uid, order, lines, context=None): |  |  |     def _prepare_invoice(self, cr, uid, order, lines, context=None): | 
			
		
	
		
		
			
				
					|  |  |         invoice_vals = super(SaleOrder, self)._prepare_invoice(cr, uid, order, lines, context=context) |  |  |         invoice_vals = super(SaleOrder, self)._prepare_invoice(cr, uid, order, lines, context=context) | 
			
		
	
	
		
		
			
				
					|  | 
 |