fix: Item-wise Sales and Purchase register with no item codes #41373

This commit is contained in:
Poorvi-R-Bhat
2024-05-13 09:35:10 +05:30
parent c90185f533
commit 1b45ecfcae
4 changed files with 75 additions and 67 deletions

View File

@@ -311,34 +311,39 @@ def get_conditions(filters):
return conditions return conditions
def get_items(filters, additional_query_columns): def get_items(filters, additional_query_columns):
conditions = get_conditions(filters) pi = frappe.qb.DocType('Purchase Invoice')
if additional_query_columns: pii = frappe.qb.DocType('Purchase Invoice Item')
additional_query_columns = "," + ",".join(additional_query_columns) Item = frappe.qb.DocType('Item')
return frappe.db.sql( query = (frappe.qb.from_(pi)
f""" .join(pii).on(pi.name == pii.parent)
select .left_join(Item).on(pii.item_code == Item.name)
`tabPurchase Invoice Item`.`name`, `tabPurchase Invoice Item`.`parent`, .select(
`tabPurchase Invoice`.posting_date, `tabPurchase Invoice`.credit_to, `tabPurchase Invoice`.company, pii.name.as_('pii_name'), pii.parent,
`tabPurchase Invoice`.supplier, `tabPurchase Invoice`.remarks, `tabPurchase Invoice`.base_net_total, pi.posting_date, pi.credit_to, pi.company,
`tabPurchase Invoice`.unrealized_profit_loss_account, pi.supplier, pi.remarks, pi.base_net_total,
`tabPurchase Invoice Item`.`item_code`, `tabPurchase Invoice Item`.description, `tabPurchase Invoice Item`.`item_group`, pi.unrealized_profit_loss_account,
`tabPurchase Invoice Item`.`item_name` as pi_item_name, `tabPurchase Invoice Item`.`item_group` as pi_item_group, pii.item_code, pii.description, pii.item_group,
`tabItem`.`item_name` as i_item_name, `tabItem`.`item_group` as i_item_group, pii.item_name.as_('pi_item_name'), pii.item_group.as_('pi_item_group'),
`tabPurchase Invoice Item`.`project`, `tabPurchase Invoice Item`.`purchase_order`, Item.item_name.as_('i_item_name'), Item.item_group.as_('i_item_group'),
`tabPurchase Invoice Item`.`purchase_receipt`, `tabPurchase Invoice Item`.`po_detail`, pii.project, pii.purchase_order,
`tabPurchase Invoice Item`.`expense_account`, `tabPurchase Invoice Item`.`stock_qty`, pii.purchase_receipt, pii.po_detail,
`tabPurchase Invoice Item`.`stock_uom`, `tabPurchase Invoice Item`.`base_net_amount`, pii.expense_account, pii.stock_qty,
`tabPurchase Invoice`.`supplier_name`, `tabPurchase Invoice`.`mode_of_payment` {additional_query_columns} pii.stock_uom, pii.base_net_amount,
from `tabPurchase Invoice`, `tabPurchase Invoice Item`, `tabItem` pi.supplier_name, pi.mode_of_payment
where `tabPurchase Invoice`.name = `tabPurchase Invoice Item`.`parent` and )
`tabItem`.name = `tabPurchase Invoice Item`.`item_code` and .where(pi.docstatus == 1))
`tabPurchase Invoice`.docstatus = 1 {conditions}
""", if additional_query_columns:
filters, query = query.select(*additional_query_columns)
as_dict=1,
) if filters.get("supplier"):
query = query.where(pi.supplier == filters['supplier'])
if filters.get("company"):
query = query.where(pi.company == filters['company'])
return query.run(as_dict=True)
def get_aii_accounts(): def get_aii_accounts():

View File

@@ -402,39 +402,46 @@ def get_group_by_conditions(filters, doctype):
return "ORDER BY `tab{}`.{}".format(doctype, frappe.scrub(filters.get("group_by"))) return "ORDER BY `tab{}`.{}".format(doctype, frappe.scrub(filters.get("group_by")))
def get_items(filters, additional_query_columns, additional_conditions=None): def get_items(filters, additional_query_columns,additional_conditions=None):
conditions = get_conditions(filters, additional_conditions) si = frappe.qb.DocType('Sales Invoice')
if additional_query_columns: sii = frappe.qb.DocType('Sales Invoice Item')
additional_query_columns = "," + ",".join(additional_query_columns) Item = frappe.qb.DocType('Item')
return frappe.db.sql(
""" query = (
select frappe.qb.from_(si)
`tabSales Invoice Item`.name, `tabSales Invoice Item`.parent, .join(sii).on(si.name == sii.parent)
`tabSales Invoice`.posting_date, `tabSales Invoice`.debit_to, .left_join(Item).on(sii.item_code == Item.name)
`tabSales Invoice`.unrealized_profit_loss_account, .select(
`tabSales Invoice`.is_internal_customer, sii.name, sii.parent,
`tabSales Invoice`.customer, `tabSales Invoice`.remarks, si.posting_date, si.debit_to,
`tabSales Invoice`.territory, `tabSales Invoice`.company, `tabSales Invoice`.base_net_total, si.unrealized_profit_loss_account,
`tabSales Invoice Item`.project, si.is_internal_customer,
`tabSales Invoice Item`.item_code, `tabSales Invoice Item`.description, si.customer, si.remarks,
`tabSales Invoice Item`.`item_name`, `tabSales Invoice Item`.`item_group`, si.territory, si.company, si.base_net_total,
`tabSales Invoice Item`.`item_name` as si_item_name, `tabSales Invoice Item`.`item_group` as si_item_group, sii.project,
`tabItem`.`item_name` as i_item_name, `tabItem`.`item_group` as i_item_group, sii.item_code, sii.description,
`tabSales Invoice Item`.sales_order, `tabSales Invoice Item`.delivery_note, sii.item_name, sii.item_group,
`tabSales Invoice Item`.income_account, `tabSales Invoice Item`.cost_center, sii.item_name.as_('si_item_name'), sii.item_group.as_('si_item_group'),
`tabSales Invoice Item`.enable_deferred_revenue, `tabSales Invoice Item`.deferred_revenue_account, Item.item_name.as_('i_item_name'), Item.item_group.as_('i_item_group'),
`tabSales Invoice Item`.stock_qty, `tabSales Invoice Item`.stock_uom, sii.sales_order, sii.delivery_note,
`tabSales Invoice Item`.base_net_rate, `tabSales Invoice Item`.base_net_amount, sii.income_account, sii.cost_center,
`tabSales Invoice`.customer_name, `tabSales Invoice`.customer_group, `tabSales Invoice Item`.so_detail, sii.enable_deferred_revenue, sii.deferred_revenue_account,
`tabSales Invoice`.update_stock, `tabSales Invoice Item`.uom, `tabSales Invoice Item`.qty {} sii.stock_qty, sii.stock_uom,
from `tabSales Invoice`, `tabSales Invoice Item`, `tabItem` sii.base_net_rate, sii.base_net_amount,
where `tabSales Invoice`.name = `tabSales Invoice Item`.parent and si.customer_name, si.customer_group, sii.so_detail,
`tabItem`.name = `tabSales Invoice Item`.`item_code` and si.update_stock, sii.uom, sii.qty
`tabSales Invoice`.docstatus = 1 {} )
""".format(additional_query_columns, conditions), .where(si.docstatus == 1)
filters, )
as_dict=1, if filters.get("customer"):
) # nosec query = query.where(si.customer == filters['customer'])
if filters.get("customer_group"):
query = query.where(si.customer_group == filters['customer_group'])
return query.run(as_dict=True)
def get_delivery_notes_against_sales_order(item_list): def get_delivery_notes_against_sales_order(item_list):

View File

@@ -376,10 +376,8 @@ def get_account_columns(invoice_list, include_payments):
def get_invoices(filters, additional_query_columns): def get_invoices(filters, additional_query_columns):
pi = frappe.qb.DocType("Purchase Invoice") pi = frappe.qb.DocType("Purchase Invoice")
pii = frappe.qb.DocType("Purchase Invoice Item")
query = ( query = (
frappe.qb.from_(pi) frappe.qb.from_(pi)
.left_join(pii).on(pi.name == pii.parent)
.select( .select(
ConstantColumn("Purchase Invoice").as_("doctype"), ConstantColumn("Purchase Invoice").as_("doctype"),
pi.name, pi.name,
@@ -397,7 +395,7 @@ def get_invoices(filters, additional_query_columns):
pi.outstanding_amount, pi.outstanding_amount,
pi.mode_of_payment, pi.mode_of_payment,
) )
.where((pi.docstatus == 1) & pii.item_code.isnotnull()) .where((pi.docstatus == 1))
.orderby(pi.posting_date, pi.name, order=Order.desc) .orderby(pi.posting_date, pi.name, order=Order.desc)
) )

View File

@@ -414,10 +414,8 @@ def get_account_columns(invoice_list, include_payments):
def get_invoices(filters, additional_query_columns): def get_invoices(filters, additional_query_columns):
si = frappe.qb.DocType("Sales Invoice") si = frappe.qb.DocType("Sales Invoice")
sii = frappe.qb.DocType("Sales Invoice Item")
query = ( query = (
frappe.qb.from_(si) frappe.qb.from_(si)
.left_join(sii).on(si.name == sii.parent)
.select( .select(
ConstantColumn("Sales Invoice").as_("doctype"), ConstantColumn("Sales Invoice").as_("doctype"),
si.name, si.name,
@@ -439,7 +437,7 @@ def get_invoices(filters, additional_query_columns):
si.represents_company, si.represents_company,
si.company, si.company,
) )
.where((si.docstatus == 1) & sii.item_code.isnotnull()) .where((si.docstatus == 1))
.orderby(si.posting_date, si.name, order=Order.desc) .orderby(si.posting_date, si.name, order=Order.desc)
) )