fix: AD not getting copied from SCO while creating a SE (#32004)
This commit is contained in:
parent
af5cbc881f
commit
9dbaaa33f5
@ -2568,27 +2568,26 @@ def get_supplied_items(
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_items_from_subcontracting_order(source_name, target_doc=None):
|
def get_items_from_subcontracting_order(source_name, target_doc=None):
|
||||||
sco = frappe.get_doc("Subcontracting Order", source_name)
|
def post_process(source, target):
|
||||||
|
target.stock_entry_type = target.purpose = "Send to Subcontractor"
|
||||||
|
target.subcontracting_order = source_name
|
||||||
|
|
||||||
if sco.docstatus == 1:
|
if target.items:
|
||||||
if target_doc and isinstance(target_doc, str):
|
target.items = []
|
||||||
target_doc = frappe.get_doc(json.loads(target_doc))
|
|
||||||
|
|
||||||
if target_doc.items:
|
|
||||||
target_doc.items = []
|
|
||||||
|
|
||||||
warehouses = {}
|
warehouses = {}
|
||||||
for item in sco.items:
|
for item in source.items:
|
||||||
warehouses[item.name] = item.warehouse
|
warehouses[item.name] = item.warehouse
|
||||||
|
|
||||||
for item in sco.supplied_items:
|
for item in source.supplied_items:
|
||||||
target_doc.append(
|
target.append(
|
||||||
"items",
|
"items",
|
||||||
{
|
{
|
||||||
"s_warehouse": warehouses.get(item.reference_name),
|
"s_warehouse": warehouses.get(item.reference_name),
|
||||||
"t_warehouse": sco.supplier_warehouse,
|
"t_warehouse": source.supplier_warehouse,
|
||||||
|
"subcontracted_item": item.main_item_code,
|
||||||
"item_code": item.rm_item_code,
|
"item_code": item.rm_item_code,
|
||||||
"qty": item.required_qty,
|
"qty": max(item.required_qty - item.total_supplied_qty, 0),
|
||||||
"transfer_qty": item.required_qty,
|
"transfer_qty": item.required_qty,
|
||||||
"uom": item.stock_uom,
|
"uom": item.stock_uom,
|
||||||
"stock_uom": item.stock_uom,
|
"stock_uom": item.stock_uom,
|
||||||
@ -2596,6 +2595,23 @@ def get_items_from_subcontracting_order(source_name, target_doc=None):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_doc = get_mapped_doc(
|
||||||
|
"Subcontracting Order",
|
||||||
|
source_name,
|
||||||
|
{
|
||||||
|
"Subcontracting Order": {
|
||||||
|
"doctype": "Stock Entry",
|
||||||
|
"field_no_map": ["purchase_order"],
|
||||||
|
"validation": {
|
||||||
|
"docstatus": ["=", 1],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
target_doc,
|
||||||
|
post_process,
|
||||||
|
ignore_child_tables=True,
|
||||||
|
)
|
||||||
|
|
||||||
return target_doc
|
return target_doc
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,10 +164,7 @@ erpnext.buying.SubcontractingOrderController = class SubcontractingOrderControll
|
|||||||
if (flt(doc.per_received) < 100) {
|
if (flt(doc.per_received) < 100) {
|
||||||
cur_frm.add_custom_button(__('Subcontracting Receipt'), this.make_subcontracting_receipt, __('Create'));
|
cur_frm.add_custom_button(__('Subcontracting Receipt'), this.make_subcontracting_receipt, __('Create'));
|
||||||
if (me.has_unsupplied_items()) {
|
if (me.has_unsupplied_items()) {
|
||||||
cur_frm.add_custom_button(__('Material to Supplier'),
|
cur_frm.add_custom_button(__('Material to Supplier'), this.make_stock_entry, __('Transfer'));
|
||||||
() => {
|
|
||||||
me.make_stock_entry();
|
|
||||||
}, __('Transfer'));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
|
cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
|
||||||
@ -195,120 +192,6 @@ erpnext.buying.SubcontractingOrderController = class SubcontractingOrderControll
|
|||||||
transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse);
|
transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse);
|
||||||
}
|
}
|
||||||
|
|
||||||
make_stock_entry() {
|
|
||||||
var items = $.map(cur_frm.doc.items, (d) => d.bom ? d.item_code : false);
|
|
||||||
var me = this;
|
|
||||||
|
|
||||||
if (items.length >= 1) {
|
|
||||||
me.raw_material_data = [];
|
|
||||||
me.show_dialog = 1;
|
|
||||||
let title = __('Transfer Material to Supplier');
|
|
||||||
let fields = [
|
|
||||||
{ fieldtype: 'Section Break', label: __('Raw Materials') },
|
|
||||||
{
|
|
||||||
fieldname: 'sub_con_rm_items', fieldtype: 'Table', label: __('Items'),
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
fieldtype: 'Data',
|
|
||||||
fieldname: 'item_code',
|
|
||||||
label: __('Item'),
|
|
||||||
read_only: 1,
|
|
||||||
in_list_view: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldtype: 'Data',
|
|
||||||
fieldname: 'rm_item_code',
|
|
||||||
label: __('Raw Material'),
|
|
||||||
read_only: 1,
|
|
||||||
in_list_view: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldtype: 'Float',
|
|
||||||
read_only: 1,
|
|
||||||
fieldname: 'qty',
|
|
||||||
label: __('Quantity'),
|
|
||||||
in_list_view: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldtype: 'Data',
|
|
||||||
read_only: 1,
|
|
||||||
fieldname: 'warehouse',
|
|
||||||
label: __('Reserve Warehouse'),
|
|
||||||
in_list_view: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldtype: 'Float',
|
|
||||||
read_only: 1,
|
|
||||||
fieldname: 'rate',
|
|
||||||
label: __('Rate'),
|
|
||||||
hidden: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldtype: 'Float',
|
|
||||||
read_only: 1,
|
|
||||||
fieldname: 'amount',
|
|
||||||
label: __('Amount'),
|
|
||||||
hidden: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldtype: 'Link',
|
|
||||||
read_only: 1,
|
|
||||||
fieldname: 'uom',
|
|
||||||
label: __('UOM'),
|
|
||||||
hidden: 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
data: me.raw_material_data,
|
|
||||||
get_data: () => me.raw_material_data
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
me.dialog = new frappe.ui.Dialog({
|
|
||||||
title: title, fields: fields
|
|
||||||
});
|
|
||||||
|
|
||||||
if (me.frm.doc['supplied_items']) {
|
|
||||||
me.frm.doc['supplied_items'].forEach((item) => {
|
|
||||||
if (item.rm_item_code && item.main_item_code && item.required_qty - item.supplied_qty != 0) {
|
|
||||||
me.raw_material_data.push({
|
|
||||||
'name': item.name,
|
|
||||||
'item_code': item.main_item_code,
|
|
||||||
'rm_item_code': item.rm_item_code,
|
|
||||||
'item_name': item.rm_item_code,
|
|
||||||
'qty': item.required_qty - item.supplied_qty,
|
|
||||||
'warehouse': item.reserve_warehouse,
|
|
||||||
'rate': item.rate,
|
|
||||||
'amount': item.amount,
|
|
||||||
'stock_uom': item.stock_uom
|
|
||||||
});
|
|
||||||
me.dialog.fields_dict.sub_con_rm_items.grid.refresh();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
me.dialog.get_field('sub_con_rm_items').check_all_rows();
|
|
||||||
|
|
||||||
me.dialog.show();
|
|
||||||
this.dialog.set_primary_action(__('Transfer'), () => {
|
|
||||||
me.values = me.dialog.get_values();
|
|
||||||
if (me.values) {
|
|
||||||
me.values.sub_con_rm_items.map((row, i) => {
|
|
||||||
if (!row.item_code || !row.rm_item_code || !row.warehouse || !row.qty || row.qty === 0) {
|
|
||||||
let row_id = i + 1;
|
|
||||||
frappe.throw(__('Item Code, warehouse and quantity are required on row {0}', [row_id]));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
me.make_rm_stock_entry(me.dialog.fields_dict.sub_con_rm_items.grid.get_selected_children());
|
|
||||||
me.dialog.hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
me.dialog.get_close_btn().on('click', () => {
|
|
||||||
me.dialog.hide();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
has_unsupplied_items() {
|
has_unsupplied_items() {
|
||||||
return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty);
|
return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty);
|
||||||
}
|
}
|
||||||
@ -321,6 +204,15 @@ erpnext.buying.SubcontractingOrderController = class SubcontractingOrderControll
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
make_stock_entry() {
|
||||||
|
frappe.model.open_mapped_doc({
|
||||||
|
method: 'erpnext.stock.doctype.stock_entry.stock_entry.get_items_from_subcontracting_order',
|
||||||
|
source_name: cur_frm.doc.name,
|
||||||
|
freeze: true,
|
||||||
|
freeze_message: __('Creating Stock Entry ...')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
make_rm_stock_entry(rm_items) {
|
make_rm_stock_entry(rm_items) {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: 'erpnext.controllers.subcontracting_controller.make_rm_stock_entry',
|
method: 'erpnext.controllers.subcontracting_controller.make_rm_stock_entry',
|
||||||
|
Loading…
Reference in New Issue
Block a user