2011-06-08 09:07:15 +00:00
# Columns
#----------
2011-09-27 05:46:30 +00:00
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 ' ] ]
2011-06-08 09:07:15 +00:00
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
2011-09-27 05:46:30 +00:00
2011-06-08 09:07:15 +00:00
# transaction date
# ------------------
if not filter_values . get ( ' transaction_date ' ) or not filter_values . get ( ' transaction_date1 ' ) :
msgprint ( " Please enter From Date and To Date " )
raise Exception
else :
from_date = filter_values [ ' transaction_date ' ]
to_date = filter_values [ ' transaction_date1 ' ]
#check for from date and to date within same year
#------------------------------------------------
if not 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) and %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day) " , ( from_date , to_date ) ) :
msgprint ( " From Date and To Date must be within same year " )
raise Exception
2011-09-27 05:46:30 +00:00
# get year of the from date and to date
2011-06-08 09:07:15 +00:00
# --------------------------------------
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 ' '
to_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) " , to_date )
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
# ------------------------------------------------------------
2011-09-27 05:46:30 +00:00
if len ( res ) > 1000 and from_export == 0 :
2011-06-08 09:07:15 +00:00
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
2011-09-27 05:46:30 +00:00
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 ] ]
2011-06-08 09:07:15 +00:00
2011-09-27 05:46:30 +00:00
total_debit , total_credit , total_opening_dr , total_opening_cr , total_closing_dr , total_closing_cr = 0 , 0 , 0 , 0 , 0 , 0
2011-06-08 09:07:15 +00:00
glc = get_obj ( ' GL Control ' )
# Main logic
2011-06-22 12:55:29 +00:00
# ----------
2011-06-08 09:07:15 +00:00
for r in res :
# Fetch account details
acc = r [ col_idx [ ' Account ' ] ] . strip ( )
2011-09-27 05:46:30 +00:00
r . append ( acc_dict [ acc ] [ 0 ] )
r . append ( acc_dict [ acc ] [ 4 ] )
r . append ( acc_dict [ acc ] [ 1 ] )
2011-06-08 09:07:15 +00:00
2011-06-22 12:55:29 +00:00
#if shows group and ledger both but without group balance
2011-09-27 05:46:30 +00:00
if filter_values . get ( ' show_group_ledger ' ) == ' Both But Without Group Balance ' and acc_dict [ acc ] [ 4 ] == ' Group ' :
2011-06-08 09:07:15 +00:00
for i in range ( 4 ) :
r . append ( ' ' )
2011-06-22 12:55:29 +00:00
continue
2011-06-08 09:07:15 +00:00
2011-09-27 05:46:30 +00:00
# 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
2011-06-08 09:07:15 +00:00
# closing balance
2011-09-27 05:46:30 +00:00
#--------------------------------
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 ] )
2011-06-08 09:07:15 +00:00
# transaction betn the period
2011-09-27 05:46:30 +00:00
#----------------------------------------
2011-06-08 09:07:15 +00:00
2011-09-27 05:46:30 +00:00
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 ' :
2011-06-08 09:07:15 +00:00
opening , closing = - 1 * opening , - 1 * closing
2011-09-27 05:46:30 +00:00
# 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
total_closing_dr + = closing > 0 and flt ( closing ) or 0
total_closing_cr + = closing < 0 and - 1 * flt ( closing ) or 0
2011-06-08 09:07:15 +00:00
2011-09-27 05:46:30 +00:00
# Append in rows
r . append ( flt ( opening > 0 and opening or 0 ) )
r . append ( flt ( opening < 0 and - opening or 0 ) )
2011-06-08 09:07:15 +00:00
r . append ( flt ( debit ) )
r . append ( flt ( credit ) )
2011-09-27 05:46:30 +00:00
r . append ( flt ( closing > 0 and closing or 0 ) )
r . append ( flt ( closing < 0 and - closing or 0 ) )
2011-06-08 09:07:15 +00:00
out = [ ]
for r in res :
2011-06-22 12:55:29 +00:00
# Remove accounts if opening bal = debit = credit = closing bal = 0
# ------------------------------------------------------------------
if filter_values . get ( ' show_zero_balance ' ) != ' No ' :
2011-06-08 09:07:15 +00:00
out . append ( r )
2011-09-27 05:46:30 +00:00
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 ' ) :
2011-06-08 09:07:15 +00:00
out . append ( r )
2011-09-27 05:46:30 +00:00
2011-06-08 09:07:15 +00:00
# Total Debit / Credit
# --------------------------
2011-06-22 12:55:29 +00:00
if filter_values . get ( ' show_group_ledger ' ) in [ ' Only Ledgers ' , ' Both But Without Group Balance ' ] :
2011-06-08 09:07:15 +00:00
t_row = [ ' ' for i in range ( len ( colnames ) ) ]
t_row [ col_idx [ ' Account ' ] ] = ' Total '
2011-09-27 05:46:30 +00:00
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
2011-06-08 09:07:15 +00:00
out . append ( t_row )