tz_dealer_discount - fix problem with sorting in account_invoice
							parent
							
								
									39567c8e04
								
							
						
					
					
						commit
						ef69c915cb
					
				|  | @ -530,12 +530,14 @@ class SaleOrder(models.Model): | |||
|         precision = self.env['decimal.precision'].precision_get('Product Unit of Measure') | ||||
|         invoices = {} | ||||
|         references = {} | ||||
|         for order in self: | ||||
|         seq = 0 | ||||
|         for order in self.sorted(key=lambda o: o.name): | ||||
|             collective_bill = order.partner_id.collective_bill and "x" or order.id | ||||
|             group_key = order.id if grouped else (collective_bill, order.partner_invoice_id.id, order.currency_id.id) | ||||
|             for line in order.order_line.sorted(key=lambda l: l.qty_to_invoice < 0): | ||||
|             for line in order.order_line.sorted(key=lambda l: (l.sequence, l.qty_to_invoice < 0)): | ||||
|                 if float_is_zero(line.qty_to_invoice, precision_digits=precision): | ||||
|                     continue | ||||
|                 seq += 1 | ||||
|                 if group_key not in invoices: | ||||
|                     inv_data = order._prepare_invoice() | ||||
|                     invoice = inv_obj.create(inv_data) | ||||
|  | @ -551,9 +553,9 @@ class SaleOrder(models.Model): | |||
|                         vals['name'] = "siehe Detail" | ||||
|                     invoices[group_key].write(vals) | ||||
|                 if line.qty_to_invoice > 0: | ||||
|                     line.invoice_line_create(invoices[group_key].id, line.qty_to_invoice) | ||||
|                     line.invoice_line_create(invoices[group_key].id, line.qty_to_invoice,seq) | ||||
|                 elif line.qty_to_invoice < 0 and final: | ||||
|                     line.invoice_line_create(invoices[group_key].id, line.qty_to_invoice) | ||||
|                     line.invoice_line_create(invoices[group_key].id, line.qty_to_invoice,seq) | ||||
| 
 | ||||
|             if references.get(invoices.get(group_key)): | ||||
|                 if order not in references[invoices[group_key]]: | ||||
|  | @ -828,7 +830,7 @@ class SaleOrderLine(models.Model): | |||
|         return res | ||||
| 
 | ||||
|     @api.multi | ||||
|     def invoice_line_create(self, invoice_id, qty): | ||||
|     def invoice_line_create(self, invoice_id, qty, seq): | ||||
|         """ | ||||
|         Overwritten and added a logic to create an extra line for discounts from a retailer | ||||
|         :param invoice_id: | ||||
|  | @ -840,7 +842,7 @@ class SaleOrderLine(models.Model): | |||
|         for line in self: | ||||
|             if not float_is_zero(qty, precision_digits=precision): | ||||
|                 vals = line._prepare_invoice_line(qty=qty) | ||||
|                 vals.update({'invoice_id': invoice_id, 'sale_line_ids': [(6, 0, [line.id])]}) | ||||
|                 vals.update({'invoice_id': invoice_id, 'sequence' : seq, 'sale_line_ids': [(6, 0, [line.id])]}) | ||||
|                 invoice_lines |= self.env['account.invoice.line'].create(vals) | ||||
|                 if line.order_id.partner_invoice_id.is_retailer: | ||||
|                     discount = line.calc_discount() | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| # Copyright 2018-Today datenpol gmbh (<http://www.datenpol.at>) | ||||
| # License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses). | ||||
| 
 | ||||
| from itertools import groupby | ||||
| from odoo import api, fields, models | ||||
| 
 | ||||
| 
 | ||||
|  | @ -9,7 +10,22 @@ class AccountInvoice(models.Model): | |||
| 
 | ||||
|     @api.multi | ||||
|     def order_lines_layouted(self): | ||||
|         res = super(AccountInvoice, self).order_lines_layouted() | ||||
| #        res = super(AccountInvoice, self).order_lines_layouted() | ||||
| 
 | ||||
|         self.ensure_one() | ||||
|         res = [[]] | ||||
|         for category, lines in groupby(self.invoice_line_ids.sorted(key=lambda s: s.layout_category_id.name), lambda l: l.layout_category_id): | ||||
|             # If last added category induced a pagebreak, this one will be on a new page | ||||
|             if res[-1] and res[-1][-1]['pagebreak']: | ||||
|                 res.append([]) | ||||
|             # Append category to current report page | ||||
|             res[-1].append({ | ||||
|                 'name': category and category.name or 'Uncategorized', | ||||
|                 'subtotal': category and category.subtotal, | ||||
|                 'pagebreak': category and category.pagebreak, | ||||
|                 'lines': list(lines) | ||||
|             }) | ||||
| 
 | ||||
|         uncategorized = False | ||||
|         # Rechnungszeilen ohne Kategorie löschen und an den Anfang stellen | ||||
|         for idx1, page in enumerate(res): | ||||
|  |  | |||
|  | @ -64,7 +64,7 @@ class Invoice(models.Model): | |||
|                 discount_pos = "" | ||||
|                 n=0 | ||||
|                 nd=0 | ||||
|                 for line in invoice.invoice_line_ids: | ||||
|                 for line in invoice.invoice_line_ids.sorted(key=lambda l: l.sequence): | ||||
|                     n += 1 | ||||
|                     if not line.product_id.product_tmpl_id.material_type_id.no_dealer_discount: | ||||
|                         nd += 1 | ||||
|  | @ -86,6 +86,9 @@ class Invoice(models.Model): | |||
|             layout_category_id = self.env['sale.layout_category'].search([('name', '=', discount_product_id.manufacturing_number)]) | ||||
| 
 | ||||
|             if amount > 0: | ||||
|                 last_inv_line = self.env['account.invoice.line'].search([('invoice_id', '=', invoice.id)], order='sequence desc', | ||||
|                                                                   limit=1) | ||||
|                 last_sequence = last_inv_line.sequence + 1 if last_inv_line else 99999 | ||||
|                 # Create the Invoice line | ||||
|                 InvoiceLine.create({ | ||||
|                     'name': discount_text, | ||||
|  | @ -98,7 +101,7 @@ class Invoice(models.Model): | |||
|                     'invoice_id': invoice.id, | ||||
|                     'invoice_line_tax_ids': [(6, 0, taxes_ids)], | ||||
|                     'layout_category_id':layout_category_id.id, | ||||
|                     'sequence': 99999, | ||||
|                     'sequence': last_sequence, | ||||
|                 }) | ||||
| 
 | ||||
|         super()._onchange_invoice_line_ids() | ||||
|  |  | |||
|  | @ -56,7 +56,7 @@ class SaleOrder(models.Model): | |||
|                 discount_pos = "" | ||||
|                 n=0 | ||||
|                 nd=0 | ||||
|                 for line in order.order_line: | ||||
|                 for line in order.order_line.sorted(key=lambda l: l.sequence): | ||||
|                     n += 1 | ||||
|                     if not line.product_id.product_tmpl_id.material_type_id.no_dealer_discount: | ||||
|                         nd += 1 | ||||
|  | @ -70,6 +70,9 @@ class SaleOrder(models.Model): | |||
|                 discount_text = discount_text + discount_pos.rstrip(sep) | ||||
| 
 | ||||
|             if amount > 0: | ||||
|                 last_so_line = self.env['sale.order.line'].search([('order_id', '=', order.id)], order='sequence desc', | ||||
|                                                                   limit=1) | ||||
|                 last_sequence = last_so_line.sequence + 1 if last_so_line else 99999 | ||||
|                 # Create the Sale line | ||||
|                 Line.create({ | ||||
|                     'name': discount_text, | ||||
|  | @ -79,7 +82,7 @@ class SaleOrder(models.Model): | |||
|                     'product_uom': discount_product_id.uom_id.id, | ||||
|                     'product_id': discount_product_id.id, | ||||
|                     'order_id': order.id, | ||||
|                     'sequence': 99999, | ||||
|                     'sequence': last_sequence, | ||||
|                 }) | ||||
| 
 | ||||
|             self.dealer_discount_product = '' | ||||
|  |  | |||
|  | @ -23,9 +23,11 @@ | |||
|                                 attrs="{'invisible': ['|',('state','not in', ['draft','sent']),('dealer_discount','=', False)]}" | ||||
|                                 style="margin-right:0px;"/> | ||||
|                         </div> | ||||
| <!-- | ||||
|                         <div> | ||||
|                             <button name="unset_dealer_discount" string="Remove Lines" type="object" class="oe_inline fa fa-arrow-left oe_link oe_edit_only" attrs="{'invisible': ['|',('state','not in', ['draft','sent']),('dealer_discount','=', False)]}"/> | ||||
|                         </div> | ||||
| --> | ||||
|                     </div> | ||||
|                 </xpath> | ||||
|             </data> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue