def _execute(filters=None,
             additional_table_columns=None,
             additional_query_columns=None):
    if not filters: filters = {}
    columns = get_columns(additional_table_columns)

    item_list = get_items(filters, additional_query_columns)
    aii_account_map = get_aii_accounts()
    if item_list:
        itemised_tax, tax_columns = get_tax_accounts(
            item_list,
            columns,
            doctype="Purchase Invoice",
            tax_doctype="Purchase Taxes and Charges")

    columns.append({
        "fieldname": "currency",
        "label": _("Currency"),
        "fieldtype": "Data",
        "width": 80
    })
    company_currency = frappe.db.get_value("Company", filters.company,
                                           "default_currency")
    po_pr_map = get_purchase_receipts_against_purchase_order(item_list)

    data = []
    for d in item_list:
        purchase_receipt = None
        if d.purchase_receipt:
            purchase_receipt = d.purchase_receipt
        elif d.po_detail:
            purchase_receipt = ", ".join(po_pr_map.get(d.po_detail, []))

        expense_account = d.expense_account or aii_account_map.get(d.company)
        row = [
            d.item_code, d.item_name, d.item_group, d.parent, d.posting_date,
            d.supplier, d.supplier_name
        ]

        if additional_query_columns:
            for col in additional_query_columns:
                row.append(d.get(col))

        row += [
            d.credit_to, d.mode_of_payment, d.project, d.company,
            d.purchase_order, purchase_receipt, expense_account, d.qty,
            d.stock_uom, d.base_net_rate, d.base_net_amount
        ]

        total_tax = 0
        for tax in tax_columns:
            item_tax = itemised_tax.get(d.name, {}).get(tax, {})
            row += [item_tax.get("tax_rate", 0), item_tax.get("tax_amount", 0)]
            total_tax += flt(item_tax.get("tax_amount"))

        row += [total_tax, d.base_net_amount + total_tax, company_currency]

        data.append(row)

    return columns, data
def _execute(filters=None, additional_table_columns=None, additional_query_columns=None):
	if not filters: filters = {}
	filters.update({"from_date": filters.get("date_range")[0], "to_date": filters.get("date_range")[1]})
	columns = get_columns(additional_table_columns)

	company_currency = erpnext.get_company_currency(filters.company)

	item_list = get_items(filters, additional_query_columns)
	aii_account_map = get_aii_accounts()
	if item_list:
		itemised_tax, tax_columns = get_tax_accounts(item_list, columns, company_currency,
			doctype="Purchase Invoice", tax_doctype="Purchase Taxes and Charges")

	columns.append({
		"fieldname": "currency",
		"label": _("Currency"),
		"fieldtype": "Data",
		"width": 80
	})

	po_pr_map = get_purchase_receipts_against_purchase_order(item_list)

	data = []
	for d in item_list:
		if not d.stock_qty:
			continue

		purchase_receipt = None
		if d.purchase_receipt:
			purchase_receipt = d.purchase_receipt
		elif d.po_detail:
			purchase_receipt = ", ".join(po_pr_map.get(d.po_detail, []))

		expense_account = d.expense_account or aii_account_map.get(d.company)
		row = [d.item_code, d.item_name, d.item_group, d.description, d.parent, d.posting_date, d.supplier,
			d.supplier_name]

		if additional_query_columns:
			for col in additional_query_columns:
				row.append(d.get(col))

		row += [
			d.credit_to, d.mode_of_payment, d.project, d.company, d.purchase_order,
			purchase_receipt, expense_account, d.stock_qty, d.stock_uom, d.base_net_amount / d.stock_qty, d.base_net_amount
		]

		total_tax = 0
		for tax in tax_columns:
			item_tax = itemised_tax.get(d.name, {}).get(tax, {})
			row += [item_tax.get("tax_rate", 0), item_tax.get("tax_amount", 0)]
			total_tax += flt(item_tax.get("tax_amount"))

		row += [total_tax, d.base_net_amount + total_tax, company_currency]

		data.append(row)

	return columns, data
Exemplo n.º 3
0
 def get_itemised_taxes(self):
     if self.entries:
         self.itemised_tax, self.tax_columns = get_tax_accounts(
             self.entries, [], self.company_currency, self.filters.doctype,
             "Sales Taxes and Charges" if self.filters.party_type
             == "Customer" else "Purchase Taxes and Charges")
         self.tax_amount_fields = [
             "tax_" + scrub(tax) for tax in self.tax_columns
         ]
         self.tax_rate_fields = [
             "tax_" + scrub(tax) + "_rate" for tax in self.tax_columns
         ]
     else:
         self.itemised_tax, self.tax_columns = {}, []
         self.tax_amount_fields, self.tax_rate_fields = [], []
def _execute(filters=None, additional_table_columns=None, additional_query_columns=None):
	if not filters: filters = {}
	filters.update({"from_date": filters.get("date_range")[0], "to_date": filters.get("date_range")[1]})
	columns = get_columns(additional_table_columns, filters)

	company_currency = erpnext.get_company_currency(filters.company)

	item_list = get_items(filters, additional_query_columns)
	aii_account_map = get_aii_accounts()
	if item_list:
		itemised_tax, tax_columns = get_tax_accounts(item_list, columns, company_currency,
			doctype='Purchase Invoice', tax_doctype='Purchase Taxes and Charges')

	po_pr_map = get_purchase_receipts_against_purchase_order(item_list)

	data = []
	total_row_map = {}
	skip_total_row = 0
	prev_group_by_value = ''

	if filters.get('group_by'):
		grand_total = get_grand_total(filters, 'Purchase Invoice')

	item_details = get_item_details()

	for d in item_list:
		if not d.stock_qty:
			continue

		item_record = item_details.get(d.item_code)

		purchase_receipt = None
		if d.purchase_receipt:
			purchase_receipt = d.purchase_receipt
		elif d.po_detail:
			purchase_receipt = ", ".join(po_pr_map.get(d.po_detail, []))

		expense_account = d.expense_account or aii_account_map.get(d.company)

		row = {
			'item_code': d.item_code,
			'item_name': item_record.item_name if item_record else d.item_name,
			'item_group': item_record.item_group if item_record else d.item_group,
			'description': d.description,
			'invoice': d.parent,
			'posting_date': d.posting_date,
			'supplier': d.supplier,
			'supplier_name': d.supplier_name
		}

		if additional_query_columns:
			for col in additional_query_columns:
				row.update({
					col: d.get(col)
				})

		row.update({
			'credit_to': d.credit_to,
			'mode_of_payment': d.mode_of_payment,
			'project': d.project,
			'company': d.company,
			'purchase_order': d.purchase_order,
			'purchase_receipt': d.purchase_receipt,
			'expense_account': expense_account,
			'stock_qty': d.stock_qty,
			'stock_uom': d.stock_uom,
			'rate': d.base_net_amount / d.stock_qty,
			'amount': d.base_net_amount
		})

		total_tax = 0
		for tax in tax_columns:
			item_tax = itemised_tax.get(d.name, {}).get(tax, {})
			row.update({
				frappe.scrub(tax + ' Rate'): item_tax.get('tax_rate', 0),
				frappe.scrub(tax + ' Amount'): item_tax.get('tax_amount', 0),
			})
			total_tax += flt(item_tax.get('tax_amount'))

		row.update({
			'total_tax': total_tax,
			'total': d.base_net_amount + total_tax,
			'currency': company_currency
		})

		if filters.get('group_by'):
			row.update({'percent_gt': flt(row['total']/grand_total) * 100})
			group_by_field, subtotal_display_field = get_group_by_and_display_fields(filters)
			data, prev_group_by_value = add_total_row(data, filters, prev_group_by_value, d, total_row_map,
				group_by_field, subtotal_display_field, grand_total, tax_columns)
			add_sub_total_row(row, total_row_map, d.get(group_by_field, ''), tax_columns)

		data.append(row)

	if filters.get('group_by') and item_list:
		total_row = total_row_map.get(prev_group_by_value or d.get('item_name'))
		total_row['percent_gt'] = flt(total_row['total']/grand_total * 100)
		data.append(total_row)
		data.append({})
		add_sub_total_row(total_row, total_row_map, 'total_row', tax_columns)
		data.append(total_row_map.get('total_row'))
		skip_total_row = 1

	return columns, data, None, None, None, skip_total_row
def execute(filters=None):

    if not filters:
        filters = {}

    from_date = filters.get("date_range")[0]
    to_date = filters.get("date_range")[1]
    patient = filters.get("patient")

    columns, data = [], []

    if patient:
        sales_invoices = frappe.get_list(
            'Sales Invoice',
            filters=[['posting_date', ">=", from_date],
                     ['posting_date', "<=", to_date], {
                         'patient': patient
                     }])
    else:
        sales_invoices = frappe.get_list(
            'Sales Invoice',
            filters=[['posting_date', ">=", from_date],
                     ['posting_date', "<=", to_date]])

    columns = [
        'Date:Date:78',
        'Invoice:Link/Sales Invoice:80',
        'Procedure:Link/Clinical Procedure:80',
        'Proceure Name:200',
        'Doctor::150',
        'Patient:Link/Patient:90',
        'Patient Name::150',
        'Family Name::100',
        'Qty:20',
        'Rate:Currency:100',
        'Amount:Currency:100',
    ]

    items_list = []

    for si_name in sales_invoices:
        si = frappe.get_doc('Sales Invoice', si_name)

        if (not si) or (si.docstatus != 1):
            continue

        si_items = si.items

        for item in si_items:
            items_list.append(frappe._dict(vars(item)))

    if items_list:
        items_tax_list, tax_columns = get_tax_accounts(items_list, columns,
                                                       'INR')

        for si_name in sales_invoices:
            si = frappe.get_doc('Sales Invoice', si_name)

            if (not si) or (si.docstatus != 1):
                continue

            posting_date = si.posting_date

            si_items = si.items

            for item in si_items:
                reference_dt = item.reference_dt

                if not reference_dt in billable_healtcare_doctypes:
                    continue

                amount = item.amount
                reference_dn = item.reference_dn
                rate = item.rate
                qty = item.qty

                healthcare_doc = frappe.get_doc(reference_dt, reference_dn)

                if healthcare_doc:

                    if reference_dt == 'Clinical Procedure' or reference_dt == 'Patient Encounter':
                        template = healthcare_doc.procedure_template if (
                            reference_dt
                            == 'Clinical Procedure') else 'Patient Encounter'
                        practitioner = healthcare_doc.practitioner
                        patient_id = healthcare_doc.patient

                        doctor_name = ''
                        doctor_full_name = ''
                        if practitioner:
                            doctor_name = practitioner
                            doctor = frappe.get_doc('Healthcare Practitioner',
                                                    doctor_name)
                            if doctor.first_name:
                                doctor_full_name += doctor.first_name
                            if doctor.last_name:
                                doctor_full_name += " " + doctor.last_name

                        patient = frappe.get_doc('Patient', patient_id)
                        patient_name = patient.patient_name
                        family_name = patient.family_name

                        if family_name == None:
                            family_name = 'N/A'

                        array_to_append = [
                            posting_date, si_name.name, healthcare_doc.name,
                            template, doctor_full_name, patient_id,
                            patient_name, family_name, qty, rate, amount
                        ]
                    elif reference_dt == 'Procedure Prescription' or reference_dt == 'Lab Prescription':
                        pass
                    else:
                        continue

                    total_tax = 0
                    for tax in tax_columns:
                        item_tax = items_tax_list.get(item.name,
                                                      {}).get(tax, {})
                        array_to_append += [
                            item_tax.get("tax_rate", 0),
                            item_tax.get("tax_amount", 0)
                        ]
                        total_tax += flt(item_tax.get("tax_amount"))

                    array_to_append += [
                        total_tax, item.base_net_amount + total_tax, "INR"
                    ]

                    data.append(array_to_append)

    return columns, data
Exemplo n.º 6
0
def _execute(filters=None,
             additional_table_columns=None,
             additional_query_columns=None):
    if not filters:
        filters = {}
    columns = get_columns(additional_table_columns, filters)

    company_currency = erpnext.get_company_currency(filters.company)

    item_list = get_items(filters, additional_query_columns)
    aii_account_map = get_aii_accounts()
    if item_list:
        itemised_tax, tax_columns = get_tax_accounts(
            item_list,
            columns,
            company_currency,
            doctype="Purchase Invoice",
            tax_doctype="Purchase Taxes and Charges",
        )

    po_pr_map = get_purchase_receipts_against_purchase_order(item_list)

    data = []
    total_row_map = {}
    skip_total_row = 0
    prev_group_by_value = ""

    if filters.get("group_by"):
        grand_total = get_grand_total(filters, "Purchase Invoice")

    item_details = get_item_details()

    for d in item_list:
        if not d.stock_qty:
            continue

        item_record = item_details.get(d.item_code)

        purchase_receipt = None
        if d.purchase_receipt:
            purchase_receipt = d.purchase_receipt
        elif d.po_detail:
            purchase_receipt = ", ".join(po_pr_map.get(d.po_detail, []))

        expense_account = (d.unrealized_profit_loss_account
                           or d.expense_account
                           or aii_account_map.get(d.company))

        row = {
            "item_code": d.item_code,
            "item_name": item_record.item_name if item_record else d.item_name,
            "item_group":
            item_record.item_group if item_record else d.item_group,
            "description": d.description,
            "invoice": d.parent,
            "posting_date": d.posting_date,
            "supplier": d.supplier,
            "supplier_name": d.supplier_name,
        }

        if additional_query_columns:
            for col in additional_query_columns:
                row.update({col: d.get(col)})

        row.update({
            "credit_to": d.credit_to,
            "mode_of_payment": d.mode_of_payment,
            "project": d.project,
            "company": d.company,
            "purchase_order": d.purchase_order,
            "purchase_receipt": d.purchase_receipt,
            "expense_account": expense_account,
            "stock_qty": d.stock_qty,
            "stock_uom": d.stock_uom,
            "rate": d.base_net_amount / d.stock_qty,
            "amount": d.base_net_amount,
        })

        total_tax = 0
        for tax in tax_columns:
            item_tax = itemised_tax.get(d.name, {}).get(tax, {})
            row.update({
                frappe.scrub(tax + " Rate"):
                item_tax.get("tax_rate", 0),
                frappe.scrub(tax + " Amount"):
                item_tax.get("tax_amount", 0),
            })
            total_tax += flt(item_tax.get("tax_amount"))

        row.update({
            "total_tax": total_tax,
            "total": d.base_net_amount + total_tax,
            "currency": company_currency
        })

        if filters.get("group_by"):
            row.update({"percent_gt": flt(row["total"] / grand_total) * 100})
            group_by_field, subtotal_display_field = get_group_by_and_display_fields(
                filters)
            data, prev_group_by_value = add_total_row(
                data,
                filters,
                prev_group_by_value,
                d,
                total_row_map,
                group_by_field,
                subtotal_display_field,
                grand_total,
                tax_columns,
            )
            add_sub_total_row(row, total_row_map, d.get(group_by_field, ""),
                              tax_columns)

        data.append(row)

    if filters.get("group_by") and item_list:
        total_row = total_row_map.get(prev_group_by_value
                                      or d.get("item_name"))
        total_row["percent_gt"] = flt(total_row["total"] / grand_total * 100)
        data.append(total_row)
        data.append({})
        add_sub_total_row(total_row, total_row_map, "total_row", tax_columns)
        data.append(total_row_map.get("total_row"))
        skip_total_row = 1

    return columns, data, None, None, None, skip_total_row