review changes
This commit is contained in:
parent
eb87566fa6
commit
e9377e2513
@ -33,6 +33,11 @@ class ImportSupplierInvoice(Document):
|
||||
mop_str = re.sub('\n', ',', mop_options)
|
||||
mop_dict = dict(item.split("-") for item in mop_str.split(","))
|
||||
|
||||
default_uom = frappe.db.get_value("Stock Settings", fieldname="stock_uom")
|
||||
|
||||
if not default_uom:
|
||||
frappe.throw(_("Please set default UOM in Stock Settings"))
|
||||
|
||||
with zipfile.ZipFile(get_full_path(self.zip_file)) as zf:
|
||||
file_count = 0
|
||||
for file_name in zf.namelist():
|
||||
@ -54,6 +59,7 @@ class ImportSupplierInvoice(Document):
|
||||
for line in file_content.find_all("DatiTrasmissione"):
|
||||
destination_code = line.CodiceDestinatario.text
|
||||
|
||||
#read address information from file
|
||||
for line in file_content.find_all("DatiGeneraliDocumento"):
|
||||
document_type = line.TipoDocumento.text
|
||||
bill_date = dateutil.parser.parse(line.Data.text).strftime("%Y-%m-%d")
|
||||
@ -84,26 +90,27 @@ class ImportSupplierInvoice(Document):
|
||||
|
||||
total_discount = 0
|
||||
|
||||
#read item information from file
|
||||
for line in file_content.find_all("DettaglioLinee"):
|
||||
if line.find("PrezzoUnitario") and line.find("PrezzoTotale"):
|
||||
unit_rate = float(line.PrezzoUnitario.text) or float(0)
|
||||
line_total = float(line.PrezzoTotale.text) or float(0)
|
||||
unit_rate = flt(line.PrezzoUnitario.text) or 0
|
||||
line_total = flt(line.PrezzoTotale.text) or 0
|
||||
|
||||
if (unit_rate == 0.0):
|
||||
qty = float(1)
|
||||
uom = "nos"
|
||||
qty = 1.0
|
||||
uom = default_uom
|
||||
rate = tax_rate = 0
|
||||
else:
|
||||
if (line_total / unit_rate) == 1.0:
|
||||
qty = float(1)
|
||||
uom = "nos"
|
||||
qty = 1.0
|
||||
uom = default_uom
|
||||
else:
|
||||
if line.find("Quantita"):
|
||||
qty = float(line.Quantita.text) or float(0)
|
||||
qty = flt(line.Quantita.text) or 0
|
||||
if line.find("UnitaMisura"):
|
||||
uom = create_uom(line.UnitaMisura.text)
|
||||
else:
|
||||
uom = "nos"
|
||||
uom = default_uom
|
||||
|
||||
if (unit_rate < 0 and line_total < 0):
|
||||
qty *= -1
|
||||
@ -113,7 +120,7 @@ class ImportSupplierInvoice(Document):
|
||||
|
||||
rate = unit_rate
|
||||
if line.find("AliquotaIVA"):
|
||||
tax_rate = float(line.AliquotaIVA.text)
|
||||
tax_rate = flt(line.AliquotaIVA.text)
|
||||
|
||||
line_str = re.sub('[^A-Za-z0-9]+', '-', line.Descrizione.text)
|
||||
item_name = line_str[0:140]
|
||||
@ -121,18 +128,19 @@ class ImportSupplierInvoice(Document):
|
||||
"item_code": self.item_code,
|
||||
"item_name": item_name,
|
||||
"description": line_str,
|
||||
"qty": float(qty),
|
||||
"qty": qty,
|
||||
"uom": uom,
|
||||
"rate": rate,
|
||||
"conversion_factor": float(1),
|
||||
"conversion_factor": 1.0,
|
||||
"tax_rate": tax_rate
|
||||
})
|
||||
|
||||
for disc_line in line.find_all("ScontoMaggiorazione"):
|
||||
if disc_line.find("Percentuale"):
|
||||
discount = float(disc_line.Percentuale.text) or float(0)
|
||||
total_discount += float((discount / 100) * (rate * qty))
|
||||
discount = flt(disc_line.Percentuale.text) or 0
|
||||
total_discount += flt((discount / 100) * (rate * qty))
|
||||
|
||||
#read taxes from file
|
||||
for line in file_content.find_all("DatiRiepilogo"):
|
||||
if line.find("AliquotaIVA"):
|
||||
if line.find("EsigibilitaIVA"):
|
||||
@ -142,11 +150,12 @@ class ImportSupplierInvoice(Document):
|
||||
taxes.append({
|
||||
"charge_type": "Actual",
|
||||
"account_head": self.tax_account,
|
||||
"tax_rate": float(line.AliquotaIVA.text) or float(0),
|
||||
"tax_rate": flt(line.AliquotaIVA.text) or 0,
|
||||
"description": descr,
|
||||
"tax_amount": float(line.Imposta.text) if len(line.find("Imposta"))!=0 else float(0)
|
||||
"tax_amount": flt(line.Imposta.text) if len(line.find("Imposta"))!=0 else 0
|
||||
})
|
||||
|
||||
|
||||
#read payment data from file
|
||||
for line in file_content.find_all("DettaglioPagamento"):
|
||||
mop_code = line.ModalitaPagamento.text + '-' + mop_dict.get(line.ModalitaPagamento.text)
|
||||
|
||||
@ -162,19 +171,18 @@ class ImportSupplierInvoice(Document):
|
||||
})
|
||||
|
||||
supplier_name = create_supplier(supplier = supplier, supplier_group = self.supplier_group,
|
||||
tax_id = tax_id, fiscal_code = fiscal_code,
|
||||
fiscal_regime = fiscal_regime)
|
||||
tax_id = tax_id, fiscal_code = fiscal_code,
|
||||
fiscal_regime = fiscal_regime)
|
||||
|
||||
address = create_address(supplier_name = supplier_name, address_line1 = address_line1,
|
||||
city = city, province = province,
|
||||
pin_code = pin_code, country = country)
|
||||
city = city, province = province,
|
||||
pin_code = pin_code, country = country)
|
||||
|
||||
pi_name = create_purchase_invoice(company = self.company, naming_series = self.invoice_series,
|
||||
supplier_name = supplier_name, bill_no = invoice_no,
|
||||
document_type = document_type, bill_date = bill_date,
|
||||
is_return = return_invoice, destination_code = destination_code,
|
||||
total_discount = total_discount, items = items,
|
||||
taxes = taxes, terms = terms,file_name = file_name)
|
||||
supplier_name = supplier_name, bill_no = invoice_no,document_type = document_type,
|
||||
bill_date = bill_date,is_return = return_invoice, destination_code = destination_code,
|
||||
total_discount = total_discount, items = items,taxes = taxes, terms = terms,
|
||||
file_name = file_name)
|
||||
|
||||
file_count += 1
|
||||
if pi_name:
|
||||
@ -264,36 +272,31 @@ def create_address(**args):
|
||||
existing_address = frappe.get_list("Address", filters)
|
||||
|
||||
if args.address_line1:
|
||||
make_address = frappe.new_doc("Address")
|
||||
make_address.address_line1 = args.address_line1
|
||||
new_address_doc = frappe.new_doc("Address")
|
||||
new_address_doc.address_line1 = args.address_line1
|
||||
|
||||
if args.city:
|
||||
make_address.city = args.city
|
||||
new_address_doc.city = args.city
|
||||
else:
|
||||
make_address.city = "Not Provided"
|
||||
new_address_doc.city = "Not Provided"
|
||||
|
||||
if args.province:
|
||||
make_address.state_code = args.province
|
||||
|
||||
if args.pincode:
|
||||
make_address.pincode = args.pincode
|
||||
|
||||
if args.country:
|
||||
make_address.country = args.country
|
||||
for field in ["province", "pincode", "country"]:
|
||||
if args.get(field):
|
||||
new_address_doc.set(field, args.get(field))
|
||||
|
||||
for address in existing_address:
|
||||
address_doc = frappe.get_doc("Address", address["name"])
|
||||
if (address_doc.address_line1 == make_address.address_line1 and
|
||||
address_doc.pincode == make_address.pincode):
|
||||
if (address_doc.address_line1 == new_address_doc.address_line1 and
|
||||
address_doc.pincode == new_address_doc.pincode):
|
||||
return address
|
||||
|
||||
make_address.append("links", {
|
||||
new_address_doc.append("links", {
|
||||
"link_doctype": "Supplier",
|
||||
"link_name": args.supplier_name
|
||||
})
|
||||
make_address.address_type = "Billing"
|
||||
make_address.insert()
|
||||
return make_address.name
|
||||
new_address_doc.address_type = "Billing"
|
||||
new_address_doc.insert()
|
||||
return new_address_doc.name
|
||||
else:
|
||||
return None
|
||||
|
||||
@ -316,28 +319,32 @@ def create_purchase_invoice(**args):
|
||||
})
|
||||
|
||||
try:
|
||||
pi.set_missing_values()
|
||||
pi.insert(ignore_permissions=True)
|
||||
|
||||
#if discount exists in file, apply any discount on grand total
|
||||
if args.total_discount > 0:
|
||||
pi.apply_discount_on = "Grand Total"
|
||||
pi.discount_amount = args.total_discount
|
||||
pi.save()
|
||||
|
||||
#adjust payment amount to match with grand total calculated
|
||||
calc_total = 0
|
||||
adj = 0
|
||||
for term in args.terms:
|
||||
calc_total += float(term["payment_amount"])
|
||||
if float(calc_total - float(pi.grand_total)) != 0:
|
||||
adj = calc_total - float(pi.grand_total)
|
||||
calc_total += flt(term["payment_amount"])
|
||||
if flt(calc_total - flt(pi.grand_total)) != 0:
|
||||
adj = calc_total - flt(pi.grand_total)
|
||||
pi.payment_schedule = []
|
||||
for term in args.terms:
|
||||
pi.append('payment_schedule',{"mode_of_payment_code": term["mode_of_payment_code"],
|
||||
"bank_account_iban": term["bank_account_iban"],
|
||||
"due_date": term["due_date"],
|
||||
"payment_amount": float(term["payment_amount"]) - adj })
|
||||
"payment_amount": flt(term["payment_amount"]) - adj })
|
||||
adj = 0
|
||||
pi.imported_grand_total = calc_total
|
||||
pi.save()
|
||||
|
||||
return pi.name
|
||||
except Exception as e:
|
||||
frappe.log_error(message=e, title="Create Purchase Invoice: " + args.bill_no + "File Name: " + args.file_name)
|
||||
|
Loading…
x
Reference in New Issue
Block a user