feat: added stock entry type master to select purpose in the stock entry
This commit is contained in:
parent
327c194144
commit
1f2f9cf360
@ -452,6 +452,7 @@ def make_rm_stock_entry(purchase_order, rm_items):
|
||||
stock_entry.address_display = purchase_order.address_display
|
||||
stock_entry.company = purchase_order.company
|
||||
stock_entry.to_warehouse = purchase_order.supplier_warehouse
|
||||
stock_entry.set_stock_entry_type()
|
||||
|
||||
for item_code in fg_items:
|
||||
for rm_item_data in rm_items_list:
|
||||
|
@ -568,6 +568,7 @@ def make_stock_entry(production_order_id, purpose, qty=None):
|
||||
stock_entry.bom_no = production_order.bom_no
|
||||
stock_entry.use_multi_level_bom = production_order.use_multi_level_bom
|
||||
stock_entry.fg_completed_qty = qty or (flt(production_order.qty) - flt(production_order.produced_qty))
|
||||
stock_entry.set_stock_entry_type()
|
||||
|
||||
if purpose=="Material Transfer for Manufacture":
|
||||
stock_entry.to_warehouse = wip_warehouse
|
||||
|
@ -625,6 +625,7 @@ def make_stock_entry(work_order_id, purpose, qty=None):
|
||||
additional_costs = get_additional_costs(work_order, fg_qty=stock_entry.fg_completed_qty)
|
||||
stock_entry.set("additional_costs", additional_costs)
|
||||
|
||||
stock_entry.set_stock_entry_type()
|
||||
stock_entry.get_items()
|
||||
return stock_entry.as_dict()
|
||||
|
||||
|
@ -591,4 +591,5 @@ erpnext.patches.v12_0.add_item_name_in_work_orders
|
||||
erpnext.patches.v12_0.update_pricing_rule_fields
|
||||
erpnext.patches.v11_1.make_job_card_time_logs
|
||||
erpnext.patches.v12_0.rename_pricing_rule_child_doctypes
|
||||
erpnext.patches.v12_0.move_target_distribution_from_parent_to_child #wmnfb
|
||||
erpnext.patches.v12_0.move_target_distribution_from_parent_to_child
|
||||
erpnext.patches.v12_0.stock_entry_enhancements
|
||||
|
@ -7,10 +7,31 @@ import frappe
|
||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
||||
|
||||
def execute():
|
||||
company = frappe.get_cached_value("Company", {'country': 'India'}, 'name')
|
||||
if not company:
|
||||
return
|
||||
create_stock_entry_types()
|
||||
|
||||
company = frappe.get_cached_value("Company", {'country': 'India'}, 'name')
|
||||
if company:
|
||||
pass
|
||||
# add_gst_hsn_code_field()
|
||||
|
||||
def create_stock_entry_types():
|
||||
frappe.reload_doc('stock', 'doctype', 'stock_entry_type')
|
||||
|
||||
for purpose in ["Material Issue", "Material Receipt", "Material Transfer",
|
||||
"Material Transfer for Manufacture", "Material Consumption for Manufacture", "Manufacture",
|
||||
"Repack", "Subcontract"]:
|
||||
ste_type = frappe.get_doc({
|
||||
'doctype': 'Stock Entry Type',
|
||||
'name': purpose,
|
||||
'purpose': purpose
|
||||
})
|
||||
|
||||
try:
|
||||
ste_type.insert()
|
||||
except frappe.DuplicateEntryError:
|
||||
pass
|
||||
|
||||
def add_gst_hsn_code_field():
|
||||
custom_fields = {
|
||||
'Stock Entry Detail': [dict(fieldname='gst_hsn_code', label='HSN/SAC',
|
||||
fieldtype='Data', fetch_from='item_code.gst_hsn_code',
|
@ -82,6 +82,17 @@ def install(country=None):
|
||||
{'doctype': 'Employment Type', 'employee_type_name': _('Intern')},
|
||||
{'doctype': 'Employment Type', 'employee_type_name': _('Apprentice')},
|
||||
|
||||
|
||||
# Stock Entry Type
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Material Issue', 'purpose': 'Material Issue'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Material Receipt', 'purpose': 'Material Receipt'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Material Transfer', 'purpose': 'Material Transfer'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Manufacture', 'purpose': 'Manufacture'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Repack', 'purpose': 'Repack'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Subcontract', 'purpose': 'Subcontract'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Material Transfer for Manufacture', 'purpose': 'Material Transfer for Manufacture'},
|
||||
{'doctype': 'Stock Entry Type', 'name': 'Material Consumption for Manufacture', 'purpose': 'Material Consumption for Manufacture'},
|
||||
|
||||
# Designation
|
||||
{'doctype': 'Designation', 'designation_name': _('CEO')},
|
||||
{'doctype': 'Designation', 'designation_name': _('Manager')},
|
||||
|
@ -426,6 +426,7 @@ def make_stock_entry(source_name, target_doc=None):
|
||||
target.purpose = "Material Receipt"
|
||||
|
||||
target.run_method("calculate_rate_and_amount")
|
||||
target.set_stock_entry_type()
|
||||
target.set_job_card_data()
|
||||
|
||||
doclist = get_mapped_doc("Material Request", source_name, {
|
||||
|
@ -21,6 +21,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "items_section",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -54,6 +55,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "{purpose}",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "title",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 1,
|
||||
@ -87,6 +89,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "naming_series",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
@ -114,6 +117,40 @@
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "stock_entry_type",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Stock Entry Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Stock Entry Type",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
@ -121,7 +158,9 @@
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Material Issue",
|
||||
"default": "",
|
||||
"fetch_from": "stock_entry_type.purpose",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "purpose",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
@ -140,7 +179,7 @@
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@ -156,6 +195,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "company",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -191,6 +231,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:in_list([\"Material Transfer for Manufacture\", \"Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "work_order",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -226,6 +267,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Subcontract\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "purchase_order",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -260,6 +302,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Sales Return\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "delivery_note_no",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -295,6 +338,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Sales Return\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "sales_invoice_no",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -328,6 +372,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Purchase Return\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "purchase_receipt_no",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -362,72 +407,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \t\t\t\t\t\"Subcontract\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
|
||||
"fieldname": "from_bom",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "From BOM",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "inspection_required",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Inspection Required",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "col2",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
@ -463,6 +443,7 @@
|
||||
"columns": 0,
|
||||
"default": "Today",
|
||||
"depends_on": "",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "posting_date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
@ -497,6 +478,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "posting_time",
|
||||
"fieldtype": "Time",
|
||||
"hidden": 0,
|
||||
@ -531,6 +513,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.docstatus==0",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "set_posting_time",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
@ -556,6 +539,74 @@
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "inspection_required",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Inspection Required",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \t\t\t\t\t\"Subcontract\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "from_bom",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "From BOM",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
@ -564,6 +615,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval: doc.from_bom && (doc.purpose!==\"Sales Return\" && doc.purpose!==\"Purchase Return\")",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "sb1",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -596,6 +648,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "from_bom",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "bom_no",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -630,6 +683,7 @@
|
||||
"columns": 0,
|
||||
"depends_on": "from_bom",
|
||||
"description": "As per Stock UOM",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "fg_completed_qty",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
@ -663,6 +717,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "cb1",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
@ -696,6 +751,7 @@
|
||||
"default": "1",
|
||||
"depends_on": "from_bom",
|
||||
"description": "Including items for sub assemblies",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "use_multi_level_bom",
|
||||
"fieldtype": "Check",
|
||||
"hidden": 0,
|
||||
@ -728,6 +784,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "from_bom",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "get_items",
|
||||
"fieldtype": "Button",
|
||||
"hidden": 0,
|
||||
@ -760,6 +817,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "section_break_12",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -791,6 +849,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "from_warehouse",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -826,6 +885,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "from_warehouse",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "source_warehouse_address",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -859,6 +919,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "source_address_display",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
@ -891,6 +952,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "cb0",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
@ -921,6 +983,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "to_warehouse",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -956,6 +1019,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "to_warehouse",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "target_warehouse_address",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -989,6 +1053,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "target_address_display",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
@ -1021,6 +1086,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "sb0",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -1052,6 +1118,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "scan_barcode",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
@ -1084,6 +1151,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "items",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
@ -1119,6 +1187,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "get_stock_and_rate",
|
||||
"fieldtype": "Button",
|
||||
"hidden": 0,
|
||||
@ -1152,6 +1221,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "section_break_19",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -1183,6 +1253,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "total_incoming_value",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -1216,6 +1287,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "column_break_22",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
@ -1247,6 +1319,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "total_outgoing_value",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -1280,6 +1353,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "value_difference",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -1314,6 +1388,7 @@
|
||||
"collapsible": 1,
|
||||
"collapsible_depends_on": "total_additional_costs",
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "additional_costs_section",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -1346,6 +1421,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "additional_costs",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
@ -1379,6 +1455,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "total_additional_costs",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -1413,6 +1490,7 @@
|
||||
"collapsible": 1,
|
||||
"columns": 0,
|
||||
"depends_on": "eval: in_list([\"Sales Return\", \"Purchase Return\", \"Subcontract\"], doc.purpose)",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "contact_section",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -1445,6 +1523,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Subcontract\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "supplier",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -1480,6 +1559,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Subcontract\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "supplier_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
@ -1514,6 +1594,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Purchase Return\" || doc.purpose==\"Subcontract\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "supplier_address",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -1548,6 +1629,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "address_display",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
@ -1580,6 +1662,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "column_break_39",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
@ -1612,6 +1695,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Sales Return\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "customer",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -1647,6 +1731,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Sales Return\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "customer_name",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
@ -1681,6 +1766,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "eval:doc.purpose==\"Sales Return\"",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "customer_address",
|
||||
"fieldtype": "Small Text",
|
||||
"hidden": 0,
|
||||
@ -1714,6 +1800,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "printing_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -1746,6 +1833,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "select_print_heading",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -1780,6 +1868,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "letter_head",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -1813,6 +1902,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "more_info",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
@ -1845,6 +1935,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "project",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -1878,6 +1969,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "remarks",
|
||||
"fieldtype": "Text",
|
||||
"hidden": 0,
|
||||
@ -1911,6 +2003,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "col5",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
@ -1944,6 +2037,7 @@
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "total_amount",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "total_amount",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
@ -1976,6 +2070,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "job_card",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -2009,6 +2104,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "amended_from",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
@ -2043,6 +2139,7 @@
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "credit_note",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 1,
|
||||
@ -2081,7 +2178,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2018-10-18 04:42:41.452572",
|
||||
"modified": "2019-03-13 16:36:37.491243",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Entry",
|
||||
|
@ -478,6 +478,11 @@ class StockEntry(StockController):
|
||||
if self.purpose not in ['Manufacture', 'Repack']:
|
||||
self.total_amount = sum([flt(item.amount) for item in self.get("items")])
|
||||
|
||||
def set_stock_entry_type(self):
|
||||
if not self.stock_entry_type and self.purpose:
|
||||
self.stock_entry_type = frappe.get_cached_value('Stock Entry Type',
|
||||
{'purpose': self.purpose}, 'name')
|
||||
|
||||
def validate_purchase_order(self):
|
||||
"""Throw exception if more raw material is transferred against Purchase Order than in
|
||||
the raw materials supplied table"""
|
||||
@ -1138,6 +1143,7 @@ def move_sample_to_retention_warehouse(company, items):
|
||||
stock_entry = frappe.new_doc("Stock Entry")
|
||||
stock_entry.company = company
|
||||
stock_entry.purpose = "Material Transfer"
|
||||
stock_entry.set_stock_entry_type()
|
||||
for item in items:
|
||||
if item.get('sample_quantity') and item.get('batch_no'):
|
||||
sample_quantity = validate_sample_quantity(item.get('item_code'), item.get('sample_quantity'),
|
||||
|
@ -124,6 +124,7 @@ def make_stock_entry(**args):
|
||||
'expense_account': args.expense_account
|
||||
})
|
||||
|
||||
s.set_stock_entry_type()
|
||||
if not args.do_not_save:
|
||||
s.insert()
|
||||
if not args.do_not_submit:
|
||||
|
@ -239,6 +239,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
repack = frappe.copy_doc(test_records[3])
|
||||
repack.posting_date = nowdate()
|
||||
repack.posting_time = nowtime()
|
||||
repack.set_stock_entry_type()
|
||||
repack.insert()
|
||||
repack.submit()
|
||||
|
||||
@ -272,6 +273,8 @@ class TestStockEntry(unittest.TestCase):
|
||||
"amount": 200
|
||||
},
|
||||
])
|
||||
|
||||
repack.set_stock_entry_type()
|
||||
repack.insert()
|
||||
repack.submit()
|
||||
|
||||
@ -327,6 +330,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
def test_serial_no_not_reqd(self):
|
||||
se = frappe.copy_doc(test_records[0])
|
||||
se.get("items")[0].serial_no = "ABCD"
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoNotRequiredError, se.submit)
|
||||
|
||||
@ -335,6 +339,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].item_code = "_Test Serialized Item"
|
||||
se.get("items")[0].qty = 2
|
||||
se.get("items")[0].transfer_qty = 2
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoRequiredError, se.submit)
|
||||
|
||||
@ -344,6 +349,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].qty = 2
|
||||
se.get("items")[0].serial_no = "ABCD\nEFGH\nXYZ"
|
||||
se.get("items")[0].transfer_qty = 2
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoQtyError, se.submit)
|
||||
|
||||
@ -353,6 +359,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].qty = 2
|
||||
se.get("items")[0].serial_no = "ABCD"
|
||||
se.get("items")[0].transfer_qty = 2
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoQtyError, se.submit)
|
||||
|
||||
@ -362,6 +369,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].qty = 2
|
||||
se.get("items")[0].serial_no = "ABCD\nEFGH"
|
||||
se.get("items")[0].transfer_qty = 2
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
se.submit()
|
||||
|
||||
@ -382,6 +390,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].t_warehouse = None
|
||||
se.get("items")[0].serial_no = "ABCD\nEFGH"
|
||||
se.get("items")[0].transfer_qty = 2
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
|
||||
self.assertRaises(SerialNoNotExistsError, se.submit)
|
||||
@ -394,6 +403,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].qty = 1
|
||||
se.get("items")[0].serial_no = serial_nos[0]
|
||||
se.get("items")[0].transfer_qty = 1
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoDuplicateError, se.submit)
|
||||
|
||||
@ -420,6 +430,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].serial_no = serial_nos[0]
|
||||
se.get("items")[0].s_warehouse = "_Test Warehouse - _TC"
|
||||
se.get("items")[0].t_warehouse = "_Test Warehouse 1 - _TC"
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoItemError, se.submit)
|
||||
|
||||
@ -435,6 +446,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].serial_no = serial_no
|
||||
se.get("items")[0].s_warehouse = "_Test Warehouse - _TC"
|
||||
se.get("items")[0].t_warehouse = "_Test Warehouse 1 - _TC"
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
se.submit()
|
||||
self.assertTrue(frappe.db.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
|
||||
@ -456,6 +468,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se.get("items")[0].serial_no = serial_nos[0]
|
||||
se.get("items")[0].s_warehouse = "_Test Warehouse 1 - _TC"
|
||||
se.get("items")[0].t_warehouse = "_Test Warehouse - _TC"
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(SerialNoWarehouseError, se.submit)
|
||||
|
||||
@ -476,6 +489,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
from erpnext.stock.utils import InvalidWarehouseCompany
|
||||
st1 = frappe.copy_doc(test_records[0])
|
||||
st1.get("items")[0].t_warehouse="_Test Warehouse 2 - _TC1"
|
||||
st1.set_stock_entry_type()
|
||||
st1.insert()
|
||||
self.assertRaises(InvalidWarehouseCompany, st1.submit)
|
||||
|
||||
@ -506,6 +520,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
st1.get("items")[0].t_warehouse="_Test Warehouse 2 - _TC1"
|
||||
st1.get("items")[0].expense_account = "Stock Adjustment - _TC1"
|
||||
st1.get("items")[0].cost_center = "Main - _TC1"
|
||||
st1.set_stock_entry_type()
|
||||
st1.insert()
|
||||
st1.submit()
|
||||
|
||||
@ -529,6 +544,7 @@ class TestStockEntry(unittest.TestCase):
|
||||
se = frappe.copy_doc(test_records[0])
|
||||
se.set_posting_time = 1
|
||||
se.posting_date = add_days(nowdate(), -15)
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
self.assertRaises(StockFreezeError, se.submit)
|
||||
frappe.db.set_value("Stock Settings", None, "stock_frozen_upto_days", 0)
|
||||
@ -737,6 +753,7 @@ def make_serialized_item(item_code=None, serial_no=None, target_warehouse=None):
|
||||
if target_warehouse:
|
||||
se.get("items")[0].t_warehouse = target_warehouse
|
||||
|
||||
se.set_stock_entry_type()
|
||||
se.insert()
|
||||
se.submit()
|
||||
return se
|
||||
|
0
erpnext/stock/doctype/stock_entry_type/__init__.py
Normal file
0
erpnext/stock/doctype/stock_entry_type/__init__.py
Normal file
@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Stock Entry Type', {
|
||||
// refresh: function(frm) {
|
||||
|
||||
// }
|
||||
});
|
156
erpnext/stock/doctype/stock_entry_type/stock_entry_type.json
Normal file
156
erpnext/stock/doctype/stock_entry_type/stock_entry_type.json
Normal file
@ -0,0 +1,156 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_events_in_timeline": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "Prompt",
|
||||
"beta": 0,
|
||||
"creation": "2019-03-13 16:23:46.636769",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Material Issue",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "purpose",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Purpose",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "\nMaterial Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSubcontract",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 1,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2019-03-13 16:28:02.326991",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Entry Type",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Manufacturing Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Stock Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
},
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "Stock User",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "ASC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
}
|
10
erpnext/stock/doctype/stock_entry_type/stock_entry_type.py
Normal file
10
erpnext/stock/doctype/stock_entry_type/stock_entry_type.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class StockEntryType(Document):
|
||||
pass
|
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
import unittest
|
||||
|
||||
class TestStockEntryType(unittest.TestCase):
|
||||
pass
|
Loading…
x
Reference in New Issue
Block a user