feat: Add corrective job card operating cost as additional costs in stock entry

This commit is contained in:
Mihir Kandoi
2025-01-15 18:14:19 +05:30
parent 001d1eb3f9
commit 2bf10f68a8
2 changed files with 54 additions and 1 deletions

View File

@@ -1433,6 +1433,55 @@ def add_operations_cost(stock_entry, work_order=None, expense_account=None):
},
)
def get_max_op_qty():
from frappe.query_builder.functions import Sum
table = frappe.qb.DocType("Job Card")
query = (
frappe.qb.from_(table)
.select(Sum(table.total_completed_qty).as_("qty"))
.where(
(table.docstatus == 1)
& (table.work_order == work_order.name)
& (table.is_corrective_job_card == 0)
)
.groupby(table.operation)
)
return min([d.qty for d in query.run(as_dict=True)], default=0)
def get_utilised_cc():
from frappe.query_builder.functions import Sum
table = frappe.qb.DocType("Stock Entry")
subquery = (
frappe.qb.from_(table)
.select(table.name)
.where(
(table.docstatus == 1)
& (table.work_order == work_order.name)
& (table.purpose == "Manufacture")
)
)
table = frappe.qb.DocType("Landed Cost Taxes and Charges")
query = (
frappe.qb.from_(table)
.select(Sum(table.amount).as_("amount"))
.where(table.parent.isin(subquery) & (table.description == "Corrective Operation Cost"))
)
return query.run(as_dict=True)[0].amount or 0
if work_order and work_order.corrective_operation_cost:
max_qty = get_max_op_qty() - work_order.produced_qty
remaining_cc = work_order.corrective_operation_cost - get_utilised_cc()
stock_entry.append(
"additional_costs",
{
"expense_account": expense_account,
"description": "Corrective Operation Cost",
"amount": remaining_cc / max_qty * flt(stock_entry.fg_completed_qty),
},
)
@frappe.whitelist()
def get_bom_diff(bom1, bom2):

View File

@@ -670,7 +670,11 @@ class JobCard(Document):
)
)
if self.get("operation") == d.operation or self.operation_row_id == d.operation_row_id:
if (
self.get("operation") == d.operation
or self.operation_row_id == d.operation_row_id
or self.is_corrective_job_card
):
self.append(
"items",
{