diff --git a/accounts/search_criteria/purchase_register/purchase_register.py b/accounts/search_criteria/purchase_register/purchase_register.py index c423b65bb4..d1d5e058cb 100644 --- a/accounts/search_criteria/purchase_register/purchase_register.py +++ b/accounts/search_criteria/purchase_register/purchase_register.py @@ -1,5 +1,10 @@ # add expense head columns -expense_acc = [c[0] for c in sql("select distinct expense_head from `tabPV Detail` where parenttype='Payable Voucher' and docstatus=1 order by idx asc")] +expense_acc = [c[0] for c in sql("""select distinct expense_head + from `tabPV Detail` + where parenttype='Payable Voucher' + and docstatus=1 + order by expense_head asc""")] + expense_acc.append('Net Total') for i in expense_acc: @@ -10,6 +15,14 @@ for i in expense_acc: # Add tax head columns tax_acc = [c[0] for c in sql("select distinct account_head from `tabPurchase Tax Detail` where parenttype='Payable Voucher' and category in ('For Total', 'For Both') and add_deduct_tax = 'Add' and docstatus=1 order by idx asc")] + +"""select distinct account_head + from `tabPurchase Tax Detail` + where parenttype = 'Payable Voucher' + and add_deduct_tax = 'Add' + and category != 'For Valuation' + order by account_head asc""" + tax_acc.append('Total Tax') tax_acc.append('GrandTotal') @@ -26,24 +39,60 @@ tax_acc = tax_acc[:-2] # add the values for r in res: + #Get amounts for expense heads + exp_head_amount = sql("""select expense_head, sum(amount) + from `tabPV Detail` + where parent = %s and parenttype='Payable Voucher' + group by expense_head""", (r[col_idx['ID']],)) + + #convert the result to dictionary for easy retrieval + exp_head_amount_dict = {} + for e in exp_head_amount: + exp_head_amount_dict[e[0]] = e[1] + + exp_head_keys = exp_head_amount_dict.keys() + net_total = 0 # get expense amount for i in expense_acc: - val = sql("select sum(amount) from `tabPV Detail` where parent = %s and parenttype='Payable Voucher' and expense_head = %s", (r[col_idx['ID']], i)) - val = flt(val and val[0][0] or 0) + val = 0 + + #check if expense head exists in dict + if i in exp_head_keys: + val = exp_head_amount_dict[i] + val = flt(val and val or 0) net_total += val r.append(val) + r.append(net_total) + #Get tax for account heads + acc_head_tax = sql("""select account_head, tax_amount + from `tabPurchase Tax Detail` + where parent = '%s' + and parenttype = 'Payable Voucher' + and add_deduct_tax = 'Add' + and category in ('For Total', 'For Both')""" %(r[col_idx['ID']],)) + + #Convert the result to dictionary for easy retrieval + acc_head_tax_dict = {} + for a in acc_head_tax: + acc_head_tax_dict[a[0]] = a[1] + + acc_head_keys = acc_head_tax_dict.keys() + # get tax amount total_tax = 0 grand_total = 0 for c in tax_acc: - if c: - val = sql("select tax_amount from `tabPurchase Tax Detail` where parent = %s and parenttype='Payable Voucher' and account_head = %s and category in ('For Total', 'For Both') and add_deduct_tax = 'Add'", (r[col_idx['ID']], c)) - val = flt(val and val[0][0] or 0) + val = 0 + if c: + #check if account head exists in dict + if c in acc_head_keys: + val = acc_head_tax_dict[c] + val = flt(val and val or 0) total_tax += val r.append(val) r.append(total_tax) - r.append(total_tax+net_total) # grand total + r.append(flt(total_tax)+ flt(net_total)) # grand total \ No newline at end of file