Exemple #1
0
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
Exemple #3
0
    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)
Exemple #6
0
def execute(filters=None):
	args = {
		"party_type": "Supplier",
		"naming_by": ["Buying Settings", "supp_master_name"],
	}
	return ReceivablePayableReport(filters).run(args)
Exemple #7
0
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