@@ -323,11 +323,21 @@ class Invoice(Model):
|
||||
|
||||
invoice.payment_term_date = cls._parse_2_payment_term_date(
|
||||
root.findall('./{*}PaymentTerms'))
|
||||
invoice.lines = [
|
||||
lines = [
|
||||
cls._parse_invoice_2_line(
|
||||
line, company=invoice.company, currency=invoice.currency,
|
||||
line,
|
||||
company=invoice.company,
|
||||
currency=invoice.currency,
|
||||
supplier=supplier)
|
||||
for line in root.iterfind('./{*}InvoiceLine')]
|
||||
lines += [
|
||||
cls._parse_invoice_2_allowance_charge(
|
||||
allowance_charge,
|
||||
company=invoice.company,
|
||||
currency=invoice.currency,
|
||||
supplier=supplier)
|
||||
for allowance_charge in root.iterfind('./{*}AllowanceCharge')]
|
||||
invoice.lines = lines
|
||||
invoice.taxes = [
|
||||
cls._parse_2_tax(
|
||||
tax, company=invoice.company)
|
||||
@@ -457,6 +467,51 @@ class Invoice(Model):
|
||||
line.taxes = taxes
|
||||
return line
|
||||
|
||||
@classmethod
|
||||
def _parse_invoice_2_allowance_charge(
|
||||
cls, allowance_charge, company, currency, supplier=None):
|
||||
pool = Pool()
|
||||
AccountConfiguration = pool.get('account.configuration')
|
||||
Line = pool.get('account.invoice.line')
|
||||
Tax = pool.get('account.tax')
|
||||
|
||||
account_configuration = AccountConfiguration(1)
|
||||
|
||||
line = Line(
|
||||
type='line', company=company, currency=currency, invoice_type='in')
|
||||
|
||||
indicator = allowance_charge.findtext('./{*}ChargeIndicator')
|
||||
line.quantity = {'true': 1, 'false': -1}[indicator]
|
||||
line.account = account_configuration.get_multivalue(
|
||||
'default_category_account_expense',
|
||||
company=company.id)
|
||||
line.description = allowance_charge.findtext(
|
||||
'./{*}AllowanceChargeReason')
|
||||
line.unit_price = round_price(Decimal(allowance_charge.findtext(
|
||||
'./{*}Amount')))
|
||||
|
||||
taxes = []
|
||||
tax_categories = allowance_charge.iterfind('./{*}TaxCategory')
|
||||
for tax_category in tax_categories:
|
||||
domain = cls._parse_2_tax_category(tax_category)
|
||||
domain.extend([
|
||||
['OR',
|
||||
('group', '=', None),
|
||||
('group.kind', 'in', ['purchase', 'both']),
|
||||
],
|
||||
('company', '=', company.id),
|
||||
])
|
||||
try:
|
||||
tax, = Tax.search(domain, limit=1)
|
||||
except ValueError:
|
||||
raise InvoiceError(gettext(
|
||||
'edocument_ubl.msg_tax_not_found',
|
||||
tax_category=etree.tostring(
|
||||
tax_category, pretty_print=True).decode()))
|
||||
taxes.append(tax)
|
||||
line.taxes = taxes
|
||||
return line
|
||||
|
||||
@classmethod
|
||||
def _parse_credit_note_2(cls, root):
|
||||
pool = Pool()
|
||||
@@ -504,11 +559,19 @@ class Invoice(Model):
|
||||
code=currency_code))
|
||||
invoice.payment_term_date = cls._parse_2_payment_term_date(
|
||||
root.findall('./{*}PaymentTerms'))
|
||||
invoice.lines = [
|
||||
lines = [
|
||||
cls._parse_credit_note_2_line(
|
||||
line, company=invoice.company, currency=invoice.currency,
|
||||
supplier=supplier)
|
||||
for line in root.iterfind('./{*}CreditNoteLine')]
|
||||
lines += [
|
||||
cls._parse_credit_note_2_allowance_charge(
|
||||
allowance_charge,
|
||||
company=invoice.company,
|
||||
currency=invoice.currency,
|
||||
supplier=supplier)
|
||||
for allowance_charge in root.iterfind('./{*}AllowanceCharge')]
|
||||
invoice.lines = lines
|
||||
invoice.taxes = [
|
||||
cls._parse_2_tax(
|
||||
tax, company=invoice.company)
|
||||
@@ -640,6 +703,51 @@ class Invoice(Model):
|
||||
line.taxes = taxes
|
||||
return line
|
||||
|
||||
@classmethod
|
||||
def _parse_credit_note_2_allowance_charge(
|
||||
cls, allowance_charge, company, currency, supplier=None):
|
||||
pool = Pool()
|
||||
AccountConfiguration = pool.get('account.configuration')
|
||||
Line = pool.get('account.invoice.line')
|
||||
Tax = pool.get('account.tax')
|
||||
|
||||
account_configuration = AccountConfiguration(1)
|
||||
|
||||
line = Line(
|
||||
type='line', company=company, currency=currency, invoice_type='in')
|
||||
|
||||
indicator = allowance_charge.findtext('./{*}ChargeIndicator')
|
||||
line.quantity = {'true': -1, 'false': 1}[indicator]
|
||||
line.account = account_configuration.get_multivalue(
|
||||
'default_category_account_expense',
|
||||
company=company.id)
|
||||
line.description = allowance_charge.findtext(
|
||||
'./{*}AllowanceChargeReason')
|
||||
line.unit_price = round_price(Decimal(allowance_charge.findtext(
|
||||
'./{*}Amount')))
|
||||
|
||||
taxes = []
|
||||
tax_categories = allowance_charge.iterfind('./{*}TaxCategory')
|
||||
for tax_category in tax_categories:
|
||||
domain = cls._parse_2_tax_category(tax_category)
|
||||
domain.extend([
|
||||
['OR',
|
||||
('group', '=', None),
|
||||
('group.kind', 'in', ['purchase', 'both']),
|
||||
],
|
||||
('company', '=', company.id),
|
||||
])
|
||||
try:
|
||||
tax, = Tax.search(domain, limit=1)
|
||||
except ValueError:
|
||||
raise InvoiceError(gettext(
|
||||
'edocument_ubl.msg_tax_not_found',
|
||||
tax_category=etree.tostring(
|
||||
tax_category, pretty_print=True).decode()))
|
||||
taxes.append(tax)
|
||||
line.taxes = taxes
|
||||
return line
|
||||
|
||||
@classmethod
|
||||
def _parse_2_supplier(cls, supplier_party, create=False):
|
||||
pool = Pool()
|
||||
|
||||
Reference in New Issue
Block a user