def execute(filters=None): if not filters: filters = {} validate_filters(filters) columns = get_columns(filters) entries = get_entries(filters) invoice_details = get_invoice_posting_date_map(filters) data = [] for d in entries: invoice = invoice_details.get(d.against_voucher) or frappe._dict() if d.reference_type == "Purchase Invoice": payment_amount = flt(d.debit) or -1 * flt(d.credit) else: payment_amount = flt(d.credit) or -1 * flt(d.debit) d.update({ "range1": 0, "range2": 0, "range3": 0, "range4": 0, "outstanding": payment_amount }) if d.against_voucher: ReceivablePayableReport(filters).get_ageing_data( invoice.posting_date, d) row = [ d.voucher_type, d.voucher_no, d.party_type, d.party, d.posting_date, d.against_voucher, invoice.posting_date, invoice.due_date, d.debit, d.credit, d.remarks, d.age, d.range1, d.range2, d.range3, d.range4 ] if invoice.due_date: row.append( (getdate(d.posting_date) - getdate(invoice.due_date)).days or 0) data.append(row) return columns, data
def execute(filters=None): args = { "party_type": "Customer", "naming_by": ["Selling Settings", "cust_master_name"], } columns, data, temp1, chart, temp2, skip_total_row = ReceivablePayableReport( filters).run(args) for raw in data: if raw.get('bold') and raw.get('paid', 0) > 0 and raw.get( 'invoiced', 0) > 0: print(raw) else: data.remove(raw) if raw.get('party') == "Total": data.remove(raw) return columns, data, temp1, chart, temp2, skip_total_row
def get_data(self, args): self.data = [] self.receivables = ReceivablePayableReport(self.filters).run(args)[1] self.get_party_total(args) party_advance_amount = (get_partywise_advanced_payment_amount( self.party_type, self.filters.report_date, self.filters.show_future_payments, self.filters.company, ) or {}) if self.filters.show_gl_balance: gl_balance_map = get_gl_balance(self.filters.report_date) for party, party_dict in iteritems(self.party_total): if party_dict.outstanding == 0: continue row = frappe._dict() row.party = party if self.party_naming_by == "Naming Series": row.party_name = frappe.get_cached_value( self.party_type, party, scrub(self.party_type) + "_name") row.update(party_dict) # Advance against party row.advance = party_advance_amount.get(party, 0) # In AR/AP, advance shown in paid columns, # but in summary report advance shown in separate column row.paid -= row.advance if self.filters.show_gl_balance: row.gl_balance = gl_balance_map.get(party) row.diff = flt(row.outstanding) - flt(row.gl_balance) self.data.append(row)
def execute(filters=None): args = { "party_type": "Supplier", "naming_by": ["Buying Settings", "supp_master_name"], } columns, data, more, chart = ReceivablePayableReport(filters).run(args) columns = get_columns() # aggregate by supplier output = [] suppliers = [] overall_totals = { 'invoiced': 0, 'outstanding': 0 } for d in data: supplier = d['party'] if 'party' in d else d['supplier_name'] if not supplier in suppliers: suppliers.append(supplier) for c in sorted(suppliers or []): supplier_totals = { 'invoiced': 0, 'outstanding': 0 } for d in data: supplier = d['party'] if 'party' in d else d['supplier_name'] if supplier == c: output.append(d) supplier_totals['invoiced'] += d['invoiced'] supplier_totals['outstanding'] += d['outstanding'] overall_totals['invoiced'] += d['invoiced'] overall_totals['outstanding'] += d['outstanding'] output.append({ 'party': c, 'invoiced': supplier_totals['invoiced'], 'outstanding': supplier_totals['outstanding'] }) # use manual total, automatic sum would be double the actual value output.append({ 'party': _("Total"), 'invoiced': overall_totals['invoiced'], 'outstanding': overall_totals['outstanding'] }) return columns, output
def get_voucherwise_data(self, party_naming_by, args): voucherwise_data = ReceivablePayableReport(self.filters).run(args)[1] cols = ["posting_date", "party"] if party_naming_by == "Naming Series": cols += ["party_name"] cols += ["voucher_type", "voucher_no", "due_date"] if args.get("party_type") == "Supplier": cols += ["bill_no", "bill_date"] cols += ["invoiced_amt", "paid_amt", "credit_amt", "outstanding_amt", "age", "range1", "range2", "range3", "range4", "currency"] if args.get("party_type") == "Supplier": cols += ["supplier_group", "remarks"] if args.get("party_type") == "Customer": cols += ["territory", "customer_group", "remarks"] return self.make_data_dict(cols, voucherwise_data)
def execute(filters=None): args = { "party_type": "Supplier", "naming_by": ["Buying Settings", "supp_master_name"], } return ReceivablePayableReport(filters).run(args)
def execute(filters=None): args = { "party_type": "Employee", "naming_by": ["HR Settings", "emp_created_by"], } return ReceivablePayableReport(filters).run(args)
def get_voucherwise_data(self, party_naming_by, args): voucherwise_data = ReceivablePayableReport(self.filters).run(args)[1] return voucherwise_data