From 3c8a50c257fca2c23bac7977f667d84e7bca2778 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 27 Sep 2011 11:16:30 +0530 Subject: [PATCH] Trial balance opening issue fixed if there is no prev year --- .../trial_balance/trial_balance.py | 88 +++++++++++-------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/erpnext/accounts/search_criteria/trial_balance/trial_balance.py b/erpnext/accounts/search_criteria/trial_balance/trial_balance.py index fb168e57af..994a5b8baa 100644 --- a/erpnext/accounts/search_criteria/trial_balance/trial_balance.py +++ b/erpnext/accounts/search_criteria/trial_balance/trial_balance.py @@ -1,13 +1,13 @@ # Columns #---------- -cl = [['Account','Data', '200px'],['Debit/Credit', 'Data', '100px'], ['Group/Ledger', 'Data', '100px'], ['Is PL Account', 'Data', '100px'], ['Opening','Data', '100px'],['Debit', 'Data', '100px'],['Credit', 'Data', '100px'],['Closing', 'Data', '100px']] +cl = [['Account','Data', '200px'],['Debit/Credit', 'Data', '100px'], ['Group/Ledger', 'Data', '100px'], ['Is PL Account', 'Data', '100px'], ['Opening (Dr)','Data', '100px'], ['Opening (Cr)','Data', '100px'],['Debit', 'Data', '100px'],['Credit', 'Data', '100px'],['Closing (Dr)', 'Data', '100px'],['Closing (Cr)', 'Data', '100px']] for c in cl: colnames.append(c[0]) coltypes.append(c[1]) colwidths.append(c[2]) coloptions.append('') col_idx[c[0]] = len(colnames)-1 - + # transaction date # ------------------ if not filter_values.get('transaction_date') or not filter_values.get('transaction_date1'): @@ -23,7 +23,7 @@ if not sql("select name from `tabFiscal Year` where %s between year_start_date a msgprint("From Date and To Date must be within same year") raise Exception -# get year of the from date and to date +# get year of the from date and to date # -------------------------------------- from_date_year = sql("select name from `tabFiscal Year` where %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",add_days(from_date, -1)) from_date_year = from_date_year and from_date_year[0][0] or '' @@ -33,11 +33,17 @@ to_date_year = to_date_year and to_date_year[0][0] or '' # if output is more than 500 lines then it will ask to export # ------------------------------------------------------------ -if len(res) > 500 and from_export == 0: +if len(res) > 1000 and from_export == 0: msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please click on 'Export' to open in a spreadsheet") raise Exception + -total_debit, total_credit = 0,0 +acc_dict = {} +for t in sql("select name, debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where docstatus != 2 and company = %s", filter_values['company']): + acc_dict[t[0]] = [t[1], t[2], t[3], t[4], t[5]] + + +total_debit, total_credit, total_opening_dr, total_opening_cr, total_closing_dr, total_closing_cr = 0, 0, 0, 0, 0, 0 glc = get_obj('GL Control') # Main logic @@ -45,47 +51,55 @@ glc = get_obj('GL Control') for r in res: # Fetch account details acc = r[col_idx['Account']].strip() - acc_det = sql("select debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where name = '%s'" % acc) - r.append(acc_det[0][0]) - r.append(acc_det[0][4]) - r.append(acc_det[0][1]) + r.append(acc_dict[acc][0]) + r.append(acc_dict[acc][4]) + r.append(acc_dict[acc][1]) #if shows group and ledger both but without group balance - if filter_values.get('show_group_ledger') == 'Both But Without Group Balance' and acc_det[0][4] == 'Group': + if filter_values.get('show_group_ledger') == 'Both But Without Group Balance' and acc_dict[acc][4] == 'Group': for i in range(4): r.append('') continue - # opening balance - if from_date_year: - debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(from_date, -1), acc_det[0][0], acc_det[0][2], acc_det[0][3]) - else: # if there is no previous year in system - debit_on_fromdate, credit_on_fromdate, opening = 0, 0, 0 + # Opening Balance + #----------------------------- + if from_date_year == to_date_year: + debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(from_date, -1), acc_dict[acc][0], acc_dict[acc][2], acc_dict[acc][3]) # opening = closing of prev_date + elif acc_dict[acc][1] == 'No': # if there is no previous year in system and not pl account + opening = sql("select opening from `tabAccount Balance` where account = %s and period = %s", (acc, to_date_year)) + debit_on_fromdate, credit_on_fromdate, opening = 0, 0, flt(opening[0][0]) + else: # if pl account and there is no previous year in system + debit_on_fromdate, credit_on_fromdate, opening = 0,0,0 # closing balance - debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, to_date, acc_det[0][0], acc_det[0][2], acc_det[0][3]) + #-------------------------------- + debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, to_date, acc_dict[acc][0], acc_dict[acc][2], acc_dict[acc][3]) # transaction betn the period - if from_date_year == to_date_year: - debit = flt(debit_on_todate) - flt(debit_on_fromdate) - credit = flt(credit_on_todate) - flt(credit_on_fromdate) - else: # if from date is start date of the year - debit = flt(debit_on_todate) - credit = flt(credit_on_todate) - + #---------------------------------------- + + debit = flt(debit_on_todate) - flt(debit_on_fromdate) + credit = flt(credit_on_todate) - flt(credit_on_fromdate) + + # Debit / Credit + if acc_dict[acc][0] == 'Credit': + opening, closing = -1*opening, -1*closing + + # Totals + total_opening_dr += opening>0 and flt(opening) or 0 + total_opening_cr += opening<0 and -1*flt(opening) or 0 total_debit += debit total_credit += credit - - if acc_det[0][1] == 'Yes' and from_date_year != to_date_year: - opening = 0 - - if acc_det[0][0] == 'Credit': - opening, closing = -1*opening, -1*closing + total_closing_dr += closing>0 and flt(closing) or 0 + total_closing_cr += closing<0 and -1*flt(closing) or 0 - r.append(flt(opening)) + # Append in rows + r.append(flt(opening>0 and opening or 0)) + r.append(flt(opening<0 and -opening or 0)) r.append(flt(debit)) r.append(flt(credit)) - r.append(flt(closing)) + r.append(flt(closing>0 and closing or 0)) + r.append(flt(closing<0 and -closing or 0)) out =[] @@ -94,14 +108,18 @@ for r in res: # ------------------------------------------------------------------ if filter_values.get('show_zero_balance') != 'No': out.append(r) - elif r[col_idx['Opening']] or r[col_idx['Debit']] or r[col_idx['Credit']] or r[col_idx['Closing']] or (r[col_idx['Group/Ledger']] == 'Group' and filter_values.get('show_group_ledger') == 'Both But Without Group Balance'): + elif r[col_idx['Opening (Dr)']] or r[col_idx['Opening (Cr)']] or r[col_idx['Debit']] or r[col_idx['Credit']] or r[col_idx['Closing (Dr)']] or r[col_idx['Closing (Cr)']] or (r[col_idx['Group/Ledger']] == 'Group' and filter_values.get('show_group_ledger') == 'Both But Without Group Balance'): out.append(r) - + # Total Debit / Credit # -------------------------- if filter_values.get('show_group_ledger') in ['Only Ledgers', 'Both But Without Group Balance']: t_row = ['' for i in range(len(colnames))] t_row[col_idx['Account']] = 'Total' - t_row[col_idx['Debit']] = total_debit - t_row[col_idx['Credit']] = total_credit + t_row[col_idx['Opening (Dr)']] = '%.2f' % total_opening_dr + t_row[col_idx['Opening (Cr)']] = '%.2f' % total_opening_cr + t_row[col_idx['Debit']] = '%.2f' % total_debit + t_row[col_idx['Credit']] = '%.2f' % total_credit + t_row[col_idx['Closing (Dr)']] = '%.2f' % total_closing_dr + t_row[col_idx['Closing (Cr)']] = '%.2f' % total_closing_cr out.append(t_row)