diff --git a/modules/purchase/purchase.py b/modules/purchase/purchase.py index 078bd72..ca5acbb 100755 --- a/modules/purchase/purchase.py +++ b/modules/purchase/purchase.py @@ -1857,77 +1857,77 @@ class Line(sequence_ordered(), ModelSQL, ModelView): else: lots_to_invoice = self.lots for l in lots_to_invoice: - #if l.lot_type == 'physic': - invoice_line = InvoiceLine() - invoice_line.type = self.type - invoice_line.currency = self.currency - invoice_line.company = self.company - invoice_line.description = self.description - invoice_line.note = self.note - invoice_line.origin = self - qt, gross_qt = l.get_hist_quantity(0) - quantity = float(qt) - quantity = Uom.compute_qty(l.lot_unit_line, quantity, self.unit) - if self.unit: - quantity = self.unit.round(quantity) - invoice_line.unit_price = l.get_lot_price() - invoice_line.product = l.lot_product - invoice_line.quantity = quantity - if not invoice_line.quantity: - return [] - invoice_line.unit = self.unit - invoice_line.taxes = self.taxes - if self.company.purchase_taxes_expense: - invoice_line.taxes_deductible_rate = 0 - elif self.product: - invoice_line.taxes_deductible_rate = ( - self.product.supplier_taxes_deductible_rate_used) - invoice_line.invoice_type = 'in' - if self.product: - invoice_line.account = self.product.account_stock_in_used - if not invoice_line.account: - raise AccountError( - gettext('purchase' - '.msg_purchase_product_missing_account_expense', - purchase=self.purchase.rec_name, - product=self.product.rec_name)) - else: - invoice_line.account = account_config.get_multivalue( - 'default_category_account_expense', company=self.company.id) - if not invoice_line.account: - raise AccountError( - gettext('purchase' - '.msg_purchase_missing_account_expense', - purchase=self.purchase.rec_name)) - if action == 'prov': - invoice_line.description = 'Pro forma' - elif action == 'final': - invoice_line.description = 'Final' - elif action == 'service': - invoice_line.description = 'Service' - #invoice_line.stock_moves = self._get_invoice_line_moves() - #invoice_line.stock_moves = [l.get_current_supplier_move()] - invoice_line.lot = l.id - if self.product.type == 'service': - invoice_line.unit_price = self.unit_price - invoice_line.product = self.product - invoice_line.stock_moves = [] - Fee = Pool().get('fee.fee') - fee = Fee.search(['purchase','=',self.purchase.id]) - if fee: - invoice_line.fee = fee[0] - lines.append(invoice_line) - logger.info("GETINVLINE:%s",self.product.type) - logger.info("GETINVLINE2:%s",l.invoice_line_prov) - if l.invoice_line_prov and self.product.type != 'service': - invoice_line_, = InvoiceLine.copy([l.invoice_line_prov], default={ - 'invoice': None, - 'quantity': -l.invoice_line_prov.quantity, - 'unit_price': l.invoice_line_prov.unit_price, - 'party': l.invoice_line_prov.invoice.party, - 'origin': str(self), - }) - lines.append(invoice_line_) + if l.lot_type == 'physic': + invoice_line = InvoiceLine() + invoice_line.type = self.type + invoice_line.currency = self.currency + invoice_line.company = self.company + invoice_line.description = self.description + invoice_line.note = self.note + invoice_line.origin = self + qt, gross_qt = l.get_hist_quantity(0) + quantity = float(qt) + quantity = Uom.compute_qty(l.lot_unit_line, quantity, self.unit) + if self.unit: + quantity = self.unit.round(quantity) + invoice_line.unit_price = l.get_lot_price() + invoice_line.product = l.lot_product + invoice_line.quantity = quantity + if not invoice_line.quantity: + return [] + invoice_line.unit = self.unit + invoice_line.taxes = self.taxes + if self.company.purchase_taxes_expense: + invoice_line.taxes_deductible_rate = 0 + elif self.product: + invoice_line.taxes_deductible_rate = ( + self.product.supplier_taxes_deductible_rate_used) + invoice_line.invoice_type = 'in' + if self.product: + invoice_line.account = self.product.account_stock_in_used + if not invoice_line.account: + raise AccountError( + gettext('purchase' + '.msg_purchase_product_missing_account_expense', + purchase=self.purchase.rec_name, + product=self.product.rec_name)) + else: + invoice_line.account = account_config.get_multivalue( + 'default_category_account_expense', company=self.company.id) + if not invoice_line.account: + raise AccountError( + gettext('purchase' + '.msg_purchase_missing_account_expense', + purchase=self.purchase.rec_name)) + if action == 'prov': + invoice_line.description = 'Pro forma' + elif action == 'final': + invoice_line.description = 'Final' + elif action == 'service': + invoice_line.description = 'Service' + #invoice_line.stock_moves = self._get_invoice_line_moves() + #invoice_line.stock_moves = [l.get_current_supplier_move()] + invoice_line.lot = l.id + if self.product.type == 'service': + invoice_line.unit_price = self.unit_price + invoice_line.product = self.product + invoice_line.stock_moves = [] + Fee = Pool().get('fee.fee') + fee = Fee.search(['purchase','=',self.purchase.id]) + if fee: + invoice_line.fee = fee[0] + lines.append(invoice_line) + logger.info("GETINVLINE:%s",self.product.type) + logger.info("GETINVLINE2:%s",l.invoice_line_prov) + if l.invoice_line_prov and self.product.type != 'service': + invoice_line_, = InvoiceLine.copy([l.invoice_line_prov], default={ + 'invoice': None, + 'quantity': -l.invoice_line_prov.quantity, + 'unit_price': l.invoice_line_prov.unit_price, + 'party': l.invoice_line_prov.invoice.party, + 'origin': str(self), + }) + lines.append(invoice_line_) return lines def _get_invoice_line_quantity(self):