error fixes in voucher import tool
diff --git a/accounts/page/voucher_import_tool/voucher_import_tool.py b/accounts/page/voucher_import_tool/voucher_import_tool.py
index e42e11a..4fb033b 100644
--- a/accounts/page/voucher_import_tool/voucher_import_tool.py
+++ b/accounts/page/voucher_import_tool/voucher_import_tool.py
@@ -89,77 +89,86 @@
"against_journal_voucher:against_jv"], d, detail.fields)
webnotes.conn.commit()
- for i in xrange(len(data)):
- d = data[i][0]
- jv = webnotes.DictObj()
-
- try:
- d.posting_date = parse_date(d.posting_date)
- d.due_date = d.due_date and parse_date(d.due_date) or None
-
- if d.ref_number:
- if not d.ref_date:
- raise webnotes.ValidationError, \
- """Ref Date is Mandatory if Ref Number is specified"""
- d.ref_date = parse_date(d.ref_date)
+ try:
+ webnotes.conn.begin()
+ for i in xrange(len(data)):
+ d = data[i][0]
+ if import_type == "Voucher Import: Two Accounts" and flt(d.get("amount")) == 0:
+ webnotes.message_log = ["Amount not specified"]
+ raise Exception
+ elif import_type == "Voucher Import: Multiple Accounts" and \
+ (flt(d.get("total_debit")) == 0 or flt(d.get("total_credit")) == 0):
+ webnotes.message_log = ["Total Debit and Total Credit amount can not be zero"]
+ raise Exception
+ else:
+ d.posting_date = parse_date(d.posting_date)
+ d.due_date = d.due_date and parse_date(d.due_date) or None
- d.company = common_values.company
+ if d.ref_number:
+ if not d.ref_date:
+ raise webnotes.ValidationError, \
+ """Ref Date is Mandatory if Ref Number is specified"""
+ d.ref_date = parse_date(d.ref_date)
+
+ d.company = common_values.company
- jv = Document("Journal Voucher")
- map_fields(["voucher_type", "posting_date", "naming_series", "remarks:user_remark",
- "ref_number:cheque_no", "ref_date:cheque_date", "is_opening",
- "amount:total_debit", "amount:total_credit", "due_date", "company"], d, jv.fields)
+ jv = Document("Journal Voucher")
+ map_fields(["voucher_type", "posting_date", "naming_series",
+ "remarks:user_remark", "ref_number:cheque_no", "ref_date:cheque_date",
+ "is_opening", "due_date", "company"], d, jv.fields)
- jv.fiscal_year = get_fiscal_year(jv.posting_date)[0]
+ jv.fiscal_year = get_fiscal_year(jv.posting_date)[0]
- details = []
- if import_type == "Voucher Import: Two Accounts":
- detail1 = Document("Journal Voucher Detail")
- detail1.parent = True
- detail1.parentfield = "entries"
- map_fields(["debit_account:account","amount:debit"], d, detail1.fields)
- apply_cost_center_and_against_invoice(detail1, d)
+ details = []
+ if import_type == "Voucher Import: Two Accounts":
+ map_fields(["amount:total_debit", "amount:total_credit"], d, jv.fields)
+
+ detail1 = Document("Journal Voucher Detail")
+ detail1.parent = True
+ detail1.parentfield = "entries"
+ map_fields(["debit_account:account","amount:debit"], d, detail1.fields)
+ apply_cost_center_and_against_invoice(detail1, d)
- detail2 = Document("Journal Voucher Detail")
- detail2.parent = True
- detail2.parentfield = "entries"
- map_fields(["credit_account:account","amount:credit"], d, detail2.fields)
- apply_cost_center_and_against_invoice(detail2, d)
+ detail2 = Document("Journal Voucher Detail")
+ detail2.parent = True
+ detail2.parentfield = "entries"
+ map_fields(["credit_account:account","amount:credit"], d, detail2.fields)
+ apply_cost_center_and_against_invoice(detail2, d)
- details = [detail1, detail2]
- elif import_type == "Voucher Import: Multiple Accounts":
- accounts = data[i][1]
- for acc in accounts:
- detail = Document("Journal Voucher Detail")
- detail.parent = True
- detail.parentfield = "entries"
- detail.account = acc
- detail.debit = flt(accounts[acc]) > 0 and flt(accounts[acc]) or 0
- detail.credit = flt(accounts[acc]) < 0 and -1*flt(accounts[acc]) or 0
- apply_cost_center_and_against_invoice(detail, d)
- details.append(detail)
+ details = [detail1, detail2]
+ elif import_type == "Voucher Import: Multiple Accounts":
+ map_fields(["total_debit", "total_credit"], d, jv.fields)
+ accounts = data[i][1]
+ for acc in accounts:
+ detail = Document("Journal Voucher Detail")
+ detail.parent = True
+ detail.parentfield = "entries"
+ detail.account = acc
+ detail.debit = flt(accounts[acc]) > 0 and flt(accounts[acc]) or 0
+ detail.credit = flt(accounts[acc]) < 0 and -1*flt(accounts[acc]) or 0
+ apply_cost_center_and_against_invoice(detail, d)
+ details.append(detail)
- if not details:
- messages.append("""<p style='color: red'>No accounts found.
- If you entered accounts correctly, please check template once</p>""")
- return
- webnotes.conn.begin()
- doclist = DocList([jv]+details)
- doclist.submit()
- webnotes.conn.commit()
+ if not details:
+ webnotes.message_log = ["""No accounts found.
+ If you entered accounts correctly, please check template once"""]
+ raise Exception
+
+ doclist = DocList([jv]+details)
+ doclist.submit()
- messages.append("""<p style='color: green'>[row #%s]
- <a href=\"#Form/Journal Voucher/%s\">%s</a> imported</p>""" \
- % ((start_idx + 1) + i, jv.name, jv.name))
-
- except Exception, e:
- webnotes.conn.rollback()
- err_msg = webnotes.message_log and webnotes.message_log[0] or unicode(e)
- messages.append("<p style='color: red'>[row #%s] %s failed: %s</p>" \
- % ((start_idx + 1) + i, jv.name or "", err_msg or "No message"))
- webnotes.errprint(webnotes.getTraceback())
-
+ messages.append("""<p style='color: green'>[row #%s]
+ <a href=\"#Form/Journal Voucher/%s\">%s</a> imported</p>""" \
+ % ((start_idx + 1) + i, jv.name, jv.name))
+ webnotes.conn.commit()
+ except Exception, e:
+ webnotes.conn.rollback()
+ err_msg = webnotes.message_log and webnotes.message_log[0] or unicode(e)
+ messages.append("""<p style='color: red'>[row #%s] %s failed: %s</p>"""
+ % ((start_idx + 1) + i, jv.name or "", err_msg or "No message"))
+ messages.append("<p style='color: red'>All transactions rolled back</p>")
+ webnotes.errprint(webnotes.getTraceback())
webnotes.message_log = []
return messages
@@ -192,12 +201,18 @@
d[columns[cidx]] = r[cidx]
if accounts:
- total = 0
+ total_debit = total_credit = 0
for acc_idx in xrange(len(accounts)):
col_idx = len(columns) + acc_idx
- acc_dict[accounts[acc_idx]] = r[col_idx]
- if flt(r[col_idx]) > 0: total += flt(r[col_idx])
- d['amount'] = total
+ if flt(r[col_idx]) != 0:
+ acc_dict[accounts[acc_idx]] = r[col_idx]
+ if flt(r[col_idx]) > 0:
+ total_debit += flt(r[col_idx])
+ else:
+ total_credit += abs(flt(r[col_idx]))
+
+ d['total_debit'] = total_debit
+ d['total_credit'] = total_credit
data.append([d, acc_dict])
@@ -205,7 +220,7 @@
if r[0]=="--------Data----------":
start_row = i+2
columns = [c.replace(" ", "_").lower() for c in rows[i+1]
- if not c.endswith(company_abbr)]
- accounts = [c for c in rows[i+1] if c.endswith(company_abbr)]
+ if not c.endswith(" - " + company_abbr)]
+ accounts = [c for c in rows[i+1] if c.endswith(" - " + company_abbr)]
return data, start_row_idx
\ No newline at end of file