В продължение на темата Промяна на сметката по подразбиране за авансовo плащание при покупкa или продажбa - Odoo 8, днес ще решим един проблем, който към днешна дата не е решен в официалната версия на Odoo въпреки, че има пач за това от март 2015 г.
Става дума за това, че при плащане по фактура от клиент частично в процент, не се начислява ДДС, а цялото ДДС се начислява при окончателната фактура. Проблема е поставен тук - https://github.com/odoo/odoo/issues/530 и тук - https://github.com/odoo/odoo/issues/4653. Pешен e с пач, който се намира в Github на адрес - https://github.com/odoo/odoo/pull/6067/commits/dd4a330e6e2a04a3d721a31e99063c6710114646
По долу поставям кода на пача на файла addons/sale/wizard/sale_make_invoice_advance.py
@@ -105,9 +105,23 @@ def _prepare_advance_invoice_vals(self, cr, uid, ids, context=None):
|
raise osv.except_osv(_('Incorrect Data'),
|
_('The value of Advance Amount must be positive.'))
|
if wizard.advance_payment_method == 'percentage':
|
- inv_amount = sale.amount_untaxed * wizard.amount / 100
|
- if not res.get('name'):
|
- res['name'] = self._translate_advance(cr, uid, percentage=True, context=dict(context, lang=sale.partner_id.lang)) % (wizard.amount)
|
+ for sale_line in sale.order_line :
|
+ name = self._translate_advance(cr, uid, percentage=True, context=dict(context, lang=sale.partner_id.lang)) % (wizard.amount)
|
+ # create the invoice line
|
+ 'name': name + '\n' + sale_line.name,
|
+ 'account_id': res['account_id'],
|
+ 'price_unit': (sale_line.product_uos_qty * sale_line.price_unit * wizard.amount) / 100,
|
+ 'discount': sale_line.discount,
|
+ 'uos_id': res.get('uos_id', False),
|
+ 'invoice_line_tax_id': [(6, 0, sale_line.tax_id.ids)],
|
+ 'account_analytic_id': sale.project_id.id or False,
|
+ inv_lines_values.append((0, 0, inv_line_values))
|
inv_amount = wizard.amount
|
@@ -119,33 +133,35 @@ def _prepare_advance_invoice_vals(self, cr, uid, ids, context=None):
|
symbol_order = (symbol, inv_amount)
|
res['name'] = self._translate_advance(cr, uid, context=dict(context, lang=sale.partner_id.lang)) % symbol_order
|
- if res.get('invoice_line_tax_id'):
|
- res['invoice_line_tax_id'] = [(6, 0, res.get('invoice_line_tax_id'))]
|
- res['invoice_line_tax_id'] = False
|
+ if res.get('invoice_line_tax_id'):
|
+ res['invoice_line_tax_id'] = [(6, 0, res.get('invoice_line_tax_id'))]
|
+ res['invoice_line_tax_id'] = False
|
+ 'name': res.get('name'),
|
+ 'account_id': res['account_id'],
|
+ 'price_unit': inv_amount,
|
+ 'quantity': wizard.qtty or 1.0,
|
+ 'uos_id': res.get('uos_id', False),
|
+ 'product_id': wizard.product_id.id,
|
+ 'invoice_line_tax_id': res.get('invoice_line_tax_id'),
|
+ 'account_analytic_id': sale.project_id.id or False,
|
+ inv_lines_values = [(0, 0, inv_line_values)]
|
- 'name': res.get('name'),
|
- 'account_id': res['account_id'],
|
- 'price_unit': inv_amount,
|
- 'quantity': wizard.qtty or 1.0,
|
- 'uos_id': res.get('uos_id', False),
|
- 'product_id': wizard.product_id.id,
|
- 'invoice_line_tax_id': res.get('invoice_line_tax_id'),
|
- 'account_analytic_id': sale.project_id.id or False,
|
'name': sale.client_order_ref or sale.name,
|
'account_id': sale.partner_id.property_account_receivable.id,
|
'partner_id': sale.partner_invoice_id.id,
|
- 'invoice_line': [(0, 0, inv_line_values)],
|
+ 'invoice_line': inv_lines_values,
|
'currency_id': sale.pricelist_id.currency_id.id,
|
'payment_term': sale.payment_term.id,
|