Merge branch 'develop' into maint_sch_link_fix
This commit is contained in:
commit
450369dbae
@ -13,7 +13,7 @@
|
||||
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/asset",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"modified": "2021-08-24 17:50:41.573281",
|
||||
"modified": "2021-12-02 11:24:37.963746",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Assets",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-08-24 12:49:37.665239",
|
||||
"modified": "2021-11-23 10:02:03.242127",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Asset Category",
|
||||
"owner": "Administrator",
|
||||
|
@ -1,21 +1,22 @@
|
||||
{
|
||||
"action": "Show Form Tour",
|
||||
"action": "Create Entry",
|
||||
"action_label": "Let's create a new Asset item",
|
||||
"creation": "2021-08-13 14:27:07.277167",
|
||||
"description": "# Asset Item\n\nAsset items are created based on Asset Category. You can create one or multiple items against once Asset Category. The sales and purchase transaction for Asset is done via Asset Item. ",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"form_tour": "Item",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-08-16 13:59:18.362233",
|
||||
"modified": "2021-12-02 11:23:48.158504",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Asset Item",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Item",
|
||||
"show_form_tour": 0,
|
||||
"show_full_form": 0,
|
||||
"show_form_tour": 1,
|
||||
"show_full_form": 1,
|
||||
"title": "Create an Asset Item",
|
||||
"validate_action": 1
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-08-24 17:26:57.180637",
|
||||
"modified": "2021-11-23 10:02:03.235498",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Asset Purchase",
|
||||
"owner": "Administrator",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-08-24 17:46:37.646174",
|
||||
"modified": "2021-11-23 10:02:03.229566",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Fixed Asset Accounts",
|
||||
"owner": "Administrator",
|
||||
|
@ -59,9 +59,14 @@ class TestMaintenanceSchedule(unittest.TestCase):
|
||||
|
||||
ms.submit()
|
||||
s_id = ms.get_pending_data(data_type = "id", item_name = i.item_name, s_date = expected_dates[1])
|
||||
test = make_maintenance_visit(source_name = ms.name, item_name = "_Test Item", s_id = s_id)
|
||||
|
||||
# Check if item is mapped in visit.
|
||||
test_map_visit = make_maintenance_visit(source_name = ms.name, item_name = "_Test Item", s_id = s_id)
|
||||
self.assertEqual(len(test_map_visit.purposes), 1)
|
||||
self.assertEqual(test_map_visit.purposes[0].item_name, "_Test Item")
|
||||
|
||||
visit = frappe.new_doc('Maintenance Visit')
|
||||
visit = test
|
||||
visit = test_map_visit
|
||||
visit.maintenance_schedule = ms.name
|
||||
visit.maintenance_schedule_detail = s_id
|
||||
visit.completion_status = "Partially Completed"
|
||||
|
@ -41,7 +41,7 @@ frappe.ui.form.on('Maintenance Visit', {
|
||||
frm.set_value({ status: 'Draft' });
|
||||
}
|
||||
if (frm.doc.__islocal) {
|
||||
frm.clear_table("purposes");
|
||||
frm.doc.maintenance_type == 'Unscheduled' && frm.clear_table("purposes");
|
||||
frm.set_value({ mntc_date: frappe.datetime.get_today() });
|
||||
}
|
||||
},
|
||||
|
@ -76,6 +76,7 @@ frappe.ui.form.on('Job Card', {
|
||||
frm.trigger("prepare_timer_buttons");
|
||||
}
|
||||
|
||||
frm.trigger("setup_quality_inspection");
|
||||
if (frm.doc.work_order) {
|
||||
frappe.db.get_value('Work Order', frm.doc.work_order,
|
||||
'transfer_material_against').then((r) => {
|
||||
@ -86,6 +87,22 @@ frappe.ui.form.on('Job Card', {
|
||||
}
|
||||
},
|
||||
|
||||
setup_quality_inspection: function(frm) {
|
||||
let quality_inspection_field = frm.get_docfield("quality_inspection");
|
||||
quality_inspection_field.get_route_options_for_new_doc = function(frm) {
|
||||
return {
|
||||
"inspection_type": "In Process",
|
||||
"reference_type": "Job Card",
|
||||
"reference_name": frm.doc.name,
|
||||
"item_code": frm.doc.production_item,
|
||||
"item_name": frm.doc.item_name,
|
||||
"item_serial_no": frm.doc.serial_no,
|
||||
"batch_no": frm.doc.batch_no,
|
||||
"quality_inspection_template": frm.doc.quality_inspection_template,
|
||||
};
|
||||
};
|
||||
},
|
||||
|
||||
setup_corrective_job_card: function(frm) {
|
||||
frm.add_custom_button(__('Corrective Job Card'), () => {
|
||||
let operations = frm.doc.sub_operations.map(d => d.sub_operation).concat(frm.doc.operation);
|
||||
|
@ -19,6 +19,7 @@
|
||||
"serial_no",
|
||||
"column_break_12",
|
||||
"wip_warehouse",
|
||||
"quality_inspection_template",
|
||||
"quality_inspection",
|
||||
"project",
|
||||
"batch_no",
|
||||
@ -408,11 +409,18 @@
|
||||
"no_copy": 1,
|
||||
"options": "Job Card Scrap Item",
|
||||
"print_hide": 1
|
||||
},
|
||||
{
|
||||
"fetch_from": "operation.quality_inspection_template",
|
||||
"fieldname": "quality_inspection_template",
|
||||
"fieldtype": "Link",
|
||||
"label": "Quality Inspection Template",
|
||||
"options": "Quality Inspection Template"
|
||||
}
|
||||
],
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-11-12 10:15:03.572401",
|
||||
"modified": "2021-11-24 19:17:40.879235",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Job Card",
|
||||
|
@ -13,6 +13,7 @@
|
||||
"is_corrective_operation",
|
||||
"job_card_section",
|
||||
"create_job_card_based_on_batch_size",
|
||||
"quality_inspection_template",
|
||||
"column_break_6",
|
||||
"batch_size",
|
||||
"sub_operations_section",
|
||||
@ -92,15 +93,22 @@
|
||||
"fieldname": "is_corrective_operation",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is Corrective Operation"
|
||||
},
|
||||
{
|
||||
"fieldname": "quality_inspection_template",
|
||||
"fieldtype": "Link",
|
||||
"label": "Quality Inspection Template",
|
||||
"options": "Quality Inspection Template"
|
||||
}
|
||||
],
|
||||
"icon": "fa fa-wrench",
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-01-12 15:09:23.593338",
|
||||
"modified": "2021-11-24 19:15:24.357187",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Operation",
|
||||
"naming_rule": "Set by user",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
|
29
erpnext/selling/form_tour/customer/customer.json
Normal file
29
erpnext/selling/form_tour/customer/customer.json
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"creation": "2021-11-23 10:44:13.185982",
|
||||
"docstatus": 0,
|
||||
"doctype": "Form Tour",
|
||||
"idx": 0,
|
||||
"is_standard": 1,
|
||||
"modified": "2021-11-23 10:54:09.602358",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Customer",
|
||||
"owner": "Administrator",
|
||||
"reference_doctype": "Customer",
|
||||
"save_on_complete": 1,
|
||||
"steps": [
|
||||
{
|
||||
"description": "Enter the Full Name of the Customer",
|
||||
"field": "",
|
||||
"fieldname": "customer_name",
|
||||
"fieldtype": "Data",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Full Name",
|
||||
"parent_field": "",
|
||||
"position": "Left",
|
||||
"title": "Full Name"
|
||||
}
|
||||
],
|
||||
"title": "Customer"
|
||||
}
|
67
erpnext/selling/form_tour/quotation/quotation.json
Normal file
67
erpnext/selling/form_tour/quotation/quotation.json
Normal file
@ -0,0 +1,67 @@
|
||||
{
|
||||
"creation": "2021-11-23 12:00:36.138824",
|
||||
"docstatus": 0,
|
||||
"doctype": "Form Tour",
|
||||
"idx": 0,
|
||||
"is_standard": 1,
|
||||
"modified": "2021-11-23 12:02:48.010298",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Quotation",
|
||||
"owner": "Administrator",
|
||||
"reference_doctype": "Quotation",
|
||||
"save_on_complete": 1,
|
||||
"steps": [
|
||||
{
|
||||
"description": "Select a customer or lead for whom this quotation is being prepared. Let's select a Customer.",
|
||||
"field": "",
|
||||
"fieldname": "quotation_to",
|
||||
"fieldtype": "Link",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Quotation To",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Quotation To"
|
||||
},
|
||||
{
|
||||
"description": "Select a specific Customer to whom this quotation will be sent.",
|
||||
"field": "",
|
||||
"fieldname": "party_name",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Party",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Party"
|
||||
},
|
||||
{
|
||||
"child_doctype": "Quotation Item",
|
||||
"description": "Select an item for which you will be quoting a price.",
|
||||
"field": "",
|
||||
"fieldname": "items",
|
||||
"fieldtype": "Table",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Items",
|
||||
"parent_field": "",
|
||||
"parent_fieldname": "items",
|
||||
"position": "Bottom",
|
||||
"title": "Items"
|
||||
},
|
||||
{
|
||||
"description": "You can select pre-populated Sales Taxes and Charges from here.",
|
||||
"field": "",
|
||||
"fieldname": "taxes",
|
||||
"fieldtype": "Table",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Sales Taxes and Charges",
|
||||
"parent_field": "",
|
||||
"position": "Bottom",
|
||||
"title": "Sales Taxes and Charges"
|
||||
}
|
||||
],
|
||||
"title": "Quotation"
|
||||
}
|
67
erpnext/setup/form_tour/company/company.json
Normal file
67
erpnext/setup/form_tour/company/company.json
Normal file
@ -0,0 +1,67 @@
|
||||
{
|
||||
"creation": "2021-11-24 10:17:18.534917",
|
||||
"docstatus": 0,
|
||||
"doctype": "Form Tour",
|
||||
"first_document": 1,
|
||||
"idx": 0,
|
||||
"include_name_field": 0,
|
||||
"is_standard": 1,
|
||||
"modified": "2021-11-24 15:38:21.026582",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Company",
|
||||
"owner": "Administrator",
|
||||
"reference_doctype": "Company",
|
||||
"save_on_complete": 0,
|
||||
"steps": [
|
||||
{
|
||||
"description": "This is the default currency for this company.",
|
||||
"field": "",
|
||||
"fieldname": "default_currency",
|
||||
"fieldtype": "Link",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Default Currency",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Default Currency"
|
||||
},
|
||||
{
|
||||
"description": "Here, you can add multiple addresses of the company",
|
||||
"field": "",
|
||||
"fieldname": "company_info",
|
||||
"fieldtype": "Section Break",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Address & Contact",
|
||||
"parent_field": "",
|
||||
"position": "Top",
|
||||
"title": "Address & Contact"
|
||||
},
|
||||
{
|
||||
"description": "Here, you can set default Accounts, which will ease the creation of accounting entries.",
|
||||
"field": "",
|
||||
"fieldname": "default_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Accounts Settings",
|
||||
"parent_field": "",
|
||||
"position": "Top",
|
||||
"title": "Accounts Settings"
|
||||
},
|
||||
{
|
||||
"description": "This setting is recommended if you wish to track the real-time stock balance in your books of account. This will allow the creation of a General Ledger entry for every stock transaction.",
|
||||
"field": "",
|
||||
"fieldname": "enable_perpetual_inventory",
|
||||
"fieldtype": "Check",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Enable Perpetual Inventory",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Enable Perpetual Inventory"
|
||||
}
|
||||
],
|
||||
"title": "Company"
|
||||
}
|
62
erpnext/setup/module_onboarding/home/home.json
Normal file
62
erpnext/setup/module_onboarding/home/home.json
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"allow_roles": [
|
||||
{
|
||||
"role": "Accounts Manager"
|
||||
},
|
||||
{
|
||||
"role": "Stock Manager"
|
||||
},
|
||||
{
|
||||
"role": "Sales Manager"
|
||||
},
|
||||
{
|
||||
"role": "Purchase Manager"
|
||||
},
|
||||
{
|
||||
"role": "Manufacturing Manager"
|
||||
},
|
||||
{
|
||||
"role": "Item Manager"
|
||||
}
|
||||
],
|
||||
"creation": "2021-11-22 12:19:15.888642",
|
||||
"docstatus": 0,
|
||||
"doctype": "Module Onboarding",
|
||||
"documentation_url": "https://docs.erpnext.com/docs/v13/user/manual/en/setting-up/company-setup",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"modified": "2021-12-15 14:23:52.460913",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Home",
|
||||
"owner": "Administrator",
|
||||
"steps": [
|
||||
{
|
||||
"step": "Company Set Up"
|
||||
},
|
||||
{
|
||||
"step": "Navigation Help"
|
||||
},
|
||||
{
|
||||
"step": "Data import"
|
||||
},
|
||||
{
|
||||
"step": "Create an Item"
|
||||
},
|
||||
{
|
||||
"step": "Create a Customer"
|
||||
},
|
||||
{
|
||||
"step": "Create a Supplier"
|
||||
},
|
||||
{
|
||||
"step": "Create a Quotation"
|
||||
},
|
||||
{
|
||||
"step": "Letterhead"
|
||||
}
|
||||
],
|
||||
"subtitle": "Company, Item, Customer, Supplier, Navigation Help, Data Import, Letter Head, Quotation",
|
||||
"success_message": "Masters are all set up!",
|
||||
"title": "Let's Set Up Some Masters"
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Create Entry",
|
||||
"action_label": "Let's review your Company",
|
||||
"creation": "2021-11-22 11:55:48.931427",
|
||||
"description": "# Set Up a Company\n\nA company is a legal entity for which you will set up your books of account and create accounting transactions. In ERPNext, you can create multiple companies, and establish relationships (group/subsidiary) among them.\n\nWithin the company master, you can capture various default accounts for that Company and set crucial settings related to the accounting methodology followed for a company.\n",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:22:18.317423",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Company Set Up",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Company",
|
||||
"show_form_tour": 1,
|
||||
"show_full_form": 1,
|
||||
"title": "Set Up a Company",
|
||||
"validate_action": 1
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Create Entry",
|
||||
"action_label": "Let\u2019s create your first Customer",
|
||||
"creation": "2020-05-14 17:46:41.831517",
|
||||
"description": "# Create a Customer\n\nThe Customer master is at the heart of your sales transactions. Customers are linked in Quotations, Sales Orders, Invoices, and Payments. Customers can be either numbered or identified by name (you would typically do this based on the number of customers you have).\n\nThrough Customer\u2019s master, you can effectively track essentials like:\n - Customer\u2019s multiple address and contacts\n - Account Receivables\n - Credit Limit and Credit Period\n",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:20:31.197564",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Create a Customer",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Customer",
|
||||
"show_form_tour": 0,
|
||||
"show_full_form": 0,
|
||||
"title": "Manage Customers",
|
||||
"validate_action": 1
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Create Entry",
|
||||
"action_label": "Let\u2019s create your first Quotation",
|
||||
"creation": "2020-06-01 13:34:58.958641",
|
||||
"description": "# Create a Quotation\n\nLet\u2019s get started with business transactions by creating your first Quotation. You can create a Quotation for an existing customer or a prospect. It will be an approved document, with items you sell and the proposed price + taxes applied. After completing the instructions, you will get a Quotation in a ready to share print format.",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:21:31.675330",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Create a Quotation",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Quotation",
|
||||
"show_form_tour": 1,
|
||||
"show_full_form": 1,
|
||||
"title": "Create your first Quotation",
|
||||
"validate_action": 1
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Create Entry",
|
||||
"action_label": "Let\u2019s create your first Supplier",
|
||||
"creation": "2020-05-14 22:09:10.043554",
|
||||
"description": "# Create a Supplier\n\nAlso known as Vendor, is a master at the center of your purchase transactions. Suppliers are linked in Request for Quotation, Purchase Orders, Receipts, and Payments. Suppliers can be either numbered or identified by name.\n\nThrough Supplier\u2019s master, you can effectively track essentials like:\n - Supplier\u2019s multiple address and contacts\n - Account Receivables\n - Credit Limit and Credit Period\n",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:21:23.518301",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Create a Supplier",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Supplier",
|
||||
"show_form_tour": 0,
|
||||
"show_full_form": 0,
|
||||
"title": "Manage Suppliers",
|
||||
"validate_action": 1
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
{
|
||||
"action": "Create Entry",
|
||||
"action_label": "Create a new Item",
|
||||
"creation": "2021-05-17 13:47:18.515052",
|
||||
"description": "# Create an Item\n\nItem is a product, of a or service offered by your company, or something you buy as a part of your supplies or raw materials.\n\nItems are integral to everything you do in ERPNext - from billing, purchasing to managing inventory. Everything you buy or sell, whether it is a physical product or a service is an Item. Items can be stock, non-stock, variants, serialized, batched, assets etc.\n",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"form_tour": "Item General",
|
||||
"idx": 0,
|
||||
"intro_video_url": "",
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:19:56.297772",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Create an Item",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Item",
|
||||
"show_form_tour": 1,
|
||||
"show_full_form": 1,
|
||||
"title": "Manage Items",
|
||||
"validate_action": 1
|
||||
}
|
21
erpnext/setup/onboarding_step/data_import/data_import.json
Normal file
21
erpnext/setup/onboarding_step/data_import/data_import.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Watch Video",
|
||||
"action_label": "Learn more about data migration",
|
||||
"creation": "2021-05-19 05:29:16.809610",
|
||||
"description": "# Import Data from Spreadsheet\n\nIn ERPNext, you can easily migrate your historical data using spreadsheets. You can use it for migrating not just masters (like Customer, Supplier, Items), but also for transactions like (outstanding invoices, opening stock and accounting entries, etc). If you are migrating from [Tally](https://tallysolutions.com/) or [Quickbooks](https://quickbooks.intuit.com/in/), we got special migration tools for you.",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 13:10:57.346422",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Data import",
|
||||
"owner": "Administrator",
|
||||
"show_form_tour": 0,
|
||||
"show_full_form": 0,
|
||||
"title": "Import Data from Spreadsheet",
|
||||
"validate_action": 1,
|
||||
"video_url": "https://youtu.be/DQyqeurPI64"
|
||||
}
|
21
erpnext/setup/onboarding_step/letterhead/letterhead.json
Normal file
21
erpnext/setup/onboarding_step/letterhead/letterhead.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Create Entry",
|
||||
"action_label": "Let\u2019s setup your first Letter Head",
|
||||
"creation": "2021-11-22 12:36:34.583783",
|
||||
"description": "# Create a Letter Head\n\nA Letter Head contains your organization's name, logo, address, etc which appears at the header and footer portion in documents. You can learn more about Setting up Letter Head in ERPNext here.\n",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:21:39.037742",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Letterhead",
|
||||
"owner": "Administrator",
|
||||
"reference_document": "Letter Head",
|
||||
"show_form_tour": 1,
|
||||
"show_full_form": 1,
|
||||
"title": "Setup Your Letterhead",
|
||||
"validate_action": 1
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"action": "Watch Video",
|
||||
"action_label": "Learn about Navigation options",
|
||||
"creation": "2021-11-22 12:09:52.233872",
|
||||
"description": "# Navigation in ERPNext\n\nEase of navigating and browsing around the ERPNext is one of our core strengths. In the following video, you will learn how to reach a specific feature in ERPNext via module page or awesome bar\u2019s shortcut.\n",
|
||||
"docstatus": 0,
|
||||
"doctype": "Onboarding Step",
|
||||
"idx": 0,
|
||||
"is_complete": 0,
|
||||
"is_single": 0,
|
||||
"is_skipped": 0,
|
||||
"modified": "2021-12-15 14:20:55.441678",
|
||||
"modified_by": "Administrator",
|
||||
"name": "Navigation Help",
|
||||
"owner": "Administrator",
|
||||
"show_form_tour": 0,
|
||||
"show_full_form": 0,
|
||||
"title": "How to Navigate in ERPNext",
|
||||
"validate_action": 1,
|
||||
"video_url": "https://youtu.be/j60xyNFqX_A"
|
||||
}
|
@ -1,13 +1,18 @@
|
||||
{
|
||||
"charts": [],
|
||||
"content": "[{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"level\":4,\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Item\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Customer\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Supplier\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Invoice\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Leaderboard\",\"col\":4}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"level\":4,\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounting\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Stock\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Human Resources\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"CRM\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Data Import and Settings\",\"col\":4}}]",
|
||||
"content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Home\",\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\",\"level\":4,\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Item\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Customer\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Supplier\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Invoice\",\"col\":4}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Leaderboard\",\"col\":4}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\",\"level\":4,\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounting\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Stock\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Human Resources\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"CRM\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Data Import and Settings\",\"col\":4}}]",
|
||||
"creation": "2020-01-23 13:46:38.833076",
|
||||
"developer_mode_only": 0,
|
||||
"disable_user_customization": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Workspace",
|
||||
"extends_another_page": 0,
|
||||
"for_user": "",
|
||||
"hide_custom": 0,
|
||||
"icon": "getting-started",
|
||||
"idx": 0,
|
||||
"is_default": 0,
|
||||
"is_standard": 0,
|
||||
"label": "Home",
|
||||
"links": [
|
||||
{
|
||||
@ -271,12 +276,14 @@
|
||||
"type": "Link"
|
||||
}
|
||||
],
|
||||
"modified": "2021-08-10 15:33:20.704741",
|
||||
"modified": "2021-11-22 12:50:15.771366",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Setup",
|
||||
"name": "Home",
|
||||
"owner": "Administrator",
|
||||
"parent_page": "",
|
||||
"pin_to_bottom": 0,
|
||||
"pin_to_top": 0,
|
||||
"public": 1,
|
||||
"restrict_to_domain": "",
|
||||
"roles": [],
|
||||
@ -309,4 +316,4 @@
|
||||
}
|
||||
],
|
||||
"title": "Home"
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ frappe.ui.form.on("Quality Inspection", {
|
||||
},
|
||||
|
||||
item_code: function(frm) {
|
||||
if (frm.doc.item_code) {
|
||||
if (frm.doc.item_code && !frm.doc.quality_inspection_template) {
|
||||
return frm.call({
|
||||
method: "get_quality_inspection_template",
|
||||
doc: frm.doc,
|
||||
|
@ -18,6 +18,15 @@ class QualityInspection(Document):
|
||||
if not self.readings and self.item_code:
|
||||
self.get_item_specification_details()
|
||||
|
||||
if self.inspection_type=="In Process" and self.reference_type=="Job Card":
|
||||
item_qi_template = frappe.db.get_value("Item", self.item_code, 'quality_inspection_template')
|
||||
parameters = get_template_details(item_qi_template)
|
||||
for reading in self.readings:
|
||||
for d in parameters:
|
||||
if reading.specification == d.specification:
|
||||
reading.update(d)
|
||||
reading.status = "Accepted"
|
||||
|
||||
if self.readings:
|
||||
self.inspect_and_set_status()
|
||||
|
||||
|
@ -2,15 +2,17 @@
|
||||
"creation": "2021-08-24 17:56:40.754909",
|
||||
"docstatus": 0,
|
||||
"doctype": "Form Tour",
|
||||
"first_document": 0,
|
||||
"idx": 0,
|
||||
"include_name_field": 0,
|
||||
"is_standard": 1,
|
||||
"modified": "2021-08-24 18:04:50.928431",
|
||||
"modified": "2021-11-24 17:59:44.559001",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Item",
|
||||
"owner": "Administrator",
|
||||
"reference_doctype": "Item",
|
||||
"save_on_complete": 0,
|
||||
"save_on_complete": 1,
|
||||
"steps": [
|
||||
{
|
||||
"description": "Enter code for Asset Item",
|
||||
@ -36,14 +38,27 @@
|
||||
"position": "Bottom",
|
||||
"title": "Asset Item Name"
|
||||
},
|
||||
{
|
||||
"description": "Select an Item Group",
|
||||
"field": "",
|
||||
"fieldname": "item_group",
|
||||
"fieldtype": "Link",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Item Group",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Item Group"
|
||||
},
|
||||
{
|
||||
"description": "Check this field to make this an Asset Item",
|
||||
"field": "",
|
||||
"fieldname": "is_fixed_asset",
|
||||
"fieldtype": "Check",
|
||||
"has_next_condition": 0,
|
||||
"has_next_condition": 1,
|
||||
"is_table_field": 0,
|
||||
"label": "Is Fixed Asset",
|
||||
"next_step_condition": "eval:doc.is_fixed_asset",
|
||||
"parent_field": "",
|
||||
"position": "Bottom",
|
||||
"title": "Is this a Fixed Asset?"
|
||||
@ -53,9 +68,10 @@
|
||||
"field": "",
|
||||
"fieldname": "auto_create_assets",
|
||||
"fieldtype": "Check",
|
||||
"has_next_condition": 0,
|
||||
"has_next_condition": 1,
|
||||
"is_table_field": 0,
|
||||
"label": "Auto Create Assets on Purchase",
|
||||
"next_step_condition": "eval:doc.auto_create_assets",
|
||||
"parent_field": "",
|
||||
"position": "Bottom",
|
||||
"title": "Auto Create Asset on Purchase"
|
||||
@ -69,7 +85,7 @@
|
||||
"is_table_field": 0,
|
||||
"label": "Asset Category",
|
||||
"parent_field": "",
|
||||
"position": "Bottom",
|
||||
"position": "Left",
|
||||
"title": "Asset Category"
|
||||
},
|
||||
{
|
||||
@ -81,9 +97,9 @@
|
||||
"is_table_field": 0,
|
||||
"label": "Asset Naming Series",
|
||||
"parent_field": "",
|
||||
"position": "Bottom",
|
||||
"position": "Left",
|
||||
"title": "Asset Naming Series"
|
||||
}
|
||||
],
|
||||
"title": "Item"
|
||||
}
|
||||
}
|
79
erpnext/stock/form_tour/item_general/item_general.json
Normal file
79
erpnext/stock/form_tour/item_general/item_general.json
Normal file
@ -0,0 +1,79 @@
|
||||
{
|
||||
"creation": "2021-12-02 10:37:55.433087",
|
||||
"docstatus": 0,
|
||||
"doctype": "Form Tour",
|
||||
"first_document": 0,
|
||||
"idx": 0,
|
||||
"include_name_field": 0,
|
||||
"is_standard": 1,
|
||||
"modified": "2021-12-02 10:37:55.433087",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Item General",
|
||||
"owner": "Administrator",
|
||||
"reference_doctype": "Item",
|
||||
"save_on_complete": 1,
|
||||
"steps": [
|
||||
{
|
||||
"description": "Enter code for the Item",
|
||||
"field": "",
|
||||
"fieldname": "item_code",
|
||||
"fieldtype": "Data",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Item Code",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Item Code"
|
||||
},
|
||||
{
|
||||
"description": "Enter name for the Item",
|
||||
"field": "",
|
||||
"fieldname": "item_name",
|
||||
"fieldtype": "Data",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Item Name",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Item Name"
|
||||
},
|
||||
{
|
||||
"description": "Select an Item Group",
|
||||
"field": "",
|
||||
"fieldname": "item_group",
|
||||
"fieldtype": "Link",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Item Group",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Item Group"
|
||||
},
|
||||
{
|
||||
"description": "This is the default measuring unit that you will use for your product. It could be Nos, Kgs, Meters, etc.",
|
||||
"field": "",
|
||||
"fieldname": "stock_uom",
|
||||
"fieldtype": "Link",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Default Unit of Measure",
|
||||
"parent_field": "",
|
||||
"position": "Right",
|
||||
"title": "Default Unit of Measurement"
|
||||
},
|
||||
{
|
||||
"description": "When creating an Item, entering a value for this field will automatically create an Item Price at the backend. Entering a value after the Item has been saved will not work. In this case, the Item Price is created from any transactions with the Item.",
|
||||
"field": "",
|
||||
"fieldname": "standard_rate",
|
||||
"fieldtype": "Currency",
|
||||
"has_next_condition": 0,
|
||||
"is_table_field": 0,
|
||||
"label": "Standard Selling Rate",
|
||||
"parent_field": "",
|
||||
"position": "Left",
|
||||
"title": "Standard Selling Rate"
|
||||
}
|
||||
],
|
||||
"title": "Item General"
|
||||
}
|
@ -167,7 +167,7 @@ def get_stock_ledger_entries(filters, items):
|
||||
sle.company, sle.voucher_type, sle.qty_after_transaction, sle.stock_value_difference,
|
||||
sle.item_code as name, sle.voucher_no, sle.stock_value, sle.batch_no
|
||||
from
|
||||
`tabStock Ledger Entry` sle force index (posting_sort_index)
|
||||
`tabStock Ledger Entry` sle
|
||||
where sle.docstatus < 2 %s %s
|
||||
and is_cancelled = 0
|
||||
order by sle.posting_date, sle.posting_time, sle.creation, sle.actual_qty""" % #nosec
|
||||
|
@ -0,0 +1,43 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
/* eslint-disable */
|
||||
|
||||
const DIFFERNCE_FIELD_NAMES = [
|
||||
"difference_in_qty",
|
||||
"fifo_qty_diff",
|
||||
"fifo_value_diff",
|
||||
"fifo_valuation_diff",
|
||||
"valuation_diff",
|
||||
"fifo_difference_diff"
|
||||
];
|
||||
|
||||
frappe.query_reports["Stock Ledger Invariant Check"] = {
|
||||
"filters": [
|
||||
{
|
||||
"fieldname": "item_code",
|
||||
"fieldtype": "Link",
|
||||
"label": "Item",
|
||||
"mandatory": 1,
|
||||
"options": "Item",
|
||||
get_query: function() {
|
||||
return {
|
||||
filters: {is_stock_item: 1, has_serial_no: 0}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"fieldname": "warehouse",
|
||||
"fieldtype": "Link",
|
||||
"label": "Warehouse",
|
||||
"mandatory": 1,
|
||||
"options": "Warehouse",
|
||||
}
|
||||
],
|
||||
formatter (value, row, column, data, default_formatter) {
|
||||
value = default_formatter(value, row, column, data);
|
||||
if (DIFFERNCE_FIELD_NAMES.includes(column.fieldname) && Math.abs(data[column.fieldname]) > 0.001) {
|
||||
value = "<span style='color:red'>" + value + "</span>";
|
||||
}
|
||||
return value;
|
||||
},
|
||||
};
|
@ -0,0 +1,26 @@
|
||||
{
|
||||
"add_total_row": 0,
|
||||
"columns": [],
|
||||
"creation": "2021-12-16 06:31:23.290916",
|
||||
"disable_prepared_report": 0,
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"filters": [],
|
||||
"idx": 0,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2021-12-16 09:55:58.341764",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Ledger Invariant Check",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"ref_doctype": "Stock Ledger Entry",
|
||||
"report_name": "Stock Ledger Invariant Check",
|
||||
"report_type": "Script Report",
|
||||
"roles": [
|
||||
{
|
||||
"role": "System Manager"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,236 @@
|
||||
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# License: GNU GPL v3. See LICENSE
|
||||
|
||||
import json
|
||||
|
||||
import frappe
|
||||
|
||||
SLE_FIELDS = (
|
||||
"name",
|
||||
"posting_date",
|
||||
"posting_time",
|
||||
"creation",
|
||||
"voucher_type",
|
||||
"voucher_no",
|
||||
"actual_qty",
|
||||
"qty_after_transaction",
|
||||
"incoming_rate",
|
||||
"outgoing_rate",
|
||||
"stock_queue",
|
||||
"batch_no",
|
||||
"stock_value",
|
||||
"stock_value_difference",
|
||||
"valuation_rate",
|
||||
)
|
||||
|
||||
|
||||
def execute(filters=None):
|
||||
columns = get_columns()
|
||||
data = get_data(filters)
|
||||
return columns, data
|
||||
|
||||
|
||||
def get_data(filters):
|
||||
sles = get_stock_ledger_entries(filters)
|
||||
return add_invariant_check_fields(sles)
|
||||
|
||||
|
||||
def get_stock_ledger_entries(filters):
|
||||
return frappe.get_all(
|
||||
"Stock Ledger Entry",
|
||||
fields=SLE_FIELDS,
|
||||
filters={
|
||||
"item_code": filters.item_code,
|
||||
"warehouse": filters.warehouse,
|
||||
"is_cancelled": 0
|
||||
},
|
||||
order_by="timestamp(posting_date, posting_time), creation",
|
||||
)
|
||||
|
||||
|
||||
def add_invariant_check_fields(sles):
|
||||
balance_qty = 0.0
|
||||
for idx, sle in enumerate(sles):
|
||||
queue = json.loads(sle.stock_queue)
|
||||
|
||||
fifo_qty = 0.0
|
||||
fifo_value = 0.0
|
||||
for qty, rate in queue:
|
||||
fifo_qty += qty
|
||||
fifo_value += qty * rate
|
||||
|
||||
balance_qty += sle.actual_qty
|
||||
if sle.voucher_type == "Stock Reconciliation" and not sle.batch_no:
|
||||
balance_qty = sle.qty_after_transaction
|
||||
|
||||
sle.fifo_queue_qty = fifo_qty
|
||||
sle.fifo_stock_value = fifo_value
|
||||
sle.fifo_valuation_rate = fifo_value / fifo_qty if fifo_qty else None
|
||||
sle.balance_value_by_qty = (
|
||||
sle.stock_value / sle.qty_after_transaction if sle.qty_after_transaction else None
|
||||
)
|
||||
sle.expected_qty_after_transaction = balance_qty
|
||||
|
||||
# set difference fields
|
||||
sle.difference_in_qty = sle.qty_after_transaction - sle.expected_qty_after_transaction
|
||||
sle.fifo_qty_diff = sle.qty_after_transaction - fifo_qty
|
||||
sle.fifo_value_diff = sle.stock_value - fifo_value
|
||||
sle.fifo_valuation_diff = (
|
||||
sle.valuation_rate - sle.fifo_valuation_rate if sle.fifo_valuation_rate else None
|
||||
)
|
||||
sle.valuation_diff = (
|
||||
sle.valuation_rate - sle.balance_value_by_qty if sle.balance_value_by_qty else None
|
||||
)
|
||||
|
||||
if idx > 0:
|
||||
sle.fifo_stock_diff = sle.fifo_stock_value - sles[idx - 1].fifo_stock_value
|
||||
sle.fifo_difference_diff = sle.fifo_stock_diff - sle.stock_value_difference
|
||||
|
||||
return sles
|
||||
|
||||
|
||||
def get_columns():
|
||||
return [
|
||||
{
|
||||
"fieldname": "name",
|
||||
"fieldtype": "Link",
|
||||
"label": "Stock Ledger Entry",
|
||||
"options": "Stock Ledger Entry",
|
||||
},
|
||||
{
|
||||
"fieldname": "posting_date",
|
||||
"fieldtype": "Date",
|
||||
"label": "Posting Date",
|
||||
},
|
||||
{
|
||||
"fieldname": "posting_time",
|
||||
"fieldtype": "Time",
|
||||
"label": "Posting Time",
|
||||
},
|
||||
{
|
||||
"fieldname": "creation",
|
||||
"fieldtype": "Datetime",
|
||||
"label": "Creation",
|
||||
},
|
||||
{
|
||||
"fieldname": "voucher_type",
|
||||
"fieldtype": "Link",
|
||||
"label": "Voucher Type",
|
||||
"options": "DocType",
|
||||
},
|
||||
{
|
||||
"fieldname": "voucher_no",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"label": "Voucher No",
|
||||
"options": "voucher_type",
|
||||
},
|
||||
{
|
||||
"fieldname": "batch_no",
|
||||
"fieldtype": "Link",
|
||||
"label": "Batch",
|
||||
"options": "Batch",
|
||||
},
|
||||
{
|
||||
"fieldname": "actual_qty",
|
||||
"fieldtype": "Float",
|
||||
"label": "Qty Change",
|
||||
},
|
||||
{
|
||||
"fieldname": "incoming_rate",
|
||||
"fieldtype": "Float",
|
||||
"label": "Incoming Rate",
|
||||
},
|
||||
{
|
||||
"fieldname": "outgoing_rate",
|
||||
"fieldtype": "Float",
|
||||
"label": "Outgoing Rate",
|
||||
},
|
||||
{
|
||||
"fieldname": "qty_after_transaction",
|
||||
"fieldtype": "Float",
|
||||
"label": "(A) Qty After Transaction",
|
||||
},
|
||||
{
|
||||
"fieldname": "expected_qty_after_transaction",
|
||||
"fieldtype": "Float",
|
||||
"label": "(B) Expected Qty After Transaction",
|
||||
},
|
||||
{
|
||||
"fieldname": "difference_in_qty",
|
||||
"fieldtype": "Float",
|
||||
"label": "A - B",
|
||||
},
|
||||
{
|
||||
"fieldname": "stock_queue",
|
||||
"fieldtype": "Data",
|
||||
"label": "FIFO Queue",
|
||||
},
|
||||
|
||||
{
|
||||
"fieldname": "fifo_queue_qty",
|
||||
"fieldtype": "Float",
|
||||
"label": "(C) Total qty in queue",
|
||||
},
|
||||
{
|
||||
"fieldname": "fifo_qty_diff",
|
||||
"fieldtype": "Float",
|
||||
"label": "A - C",
|
||||
},
|
||||
{
|
||||
"fieldname": "stock_value",
|
||||
"fieldtype": "Float",
|
||||
"label": "(D) Balance Stock Value",
|
||||
},
|
||||
{
|
||||
"fieldname": "fifo_stock_value",
|
||||
"fieldtype": "Float",
|
||||
"label": "(E) Balance Stock Value in Queue",
|
||||
},
|
||||
{
|
||||
"fieldname": "fifo_value_diff",
|
||||
"fieldtype": "Float",
|
||||
"label": "D - E",
|
||||
},
|
||||
|
||||
{
|
||||
"fieldname": "stock_value_difference",
|
||||
"fieldtype": "Float",
|
||||
"label": "(F) Stock Value Difference",
|
||||
},
|
||||
{
|
||||
"fieldname": "fifo_stock_diff",
|
||||
"fieldtype": "Float",
|
||||
"label": "(G) Stock Value difference (FIFO queue)",
|
||||
},
|
||||
{
|
||||
"fieldname": "fifo_difference_diff",
|
||||
"fieldtype": "Float",
|
||||
"label": "F - G",
|
||||
},
|
||||
{
|
||||
"fieldname": "valuation_rate",
|
||||
"fieldtype": "Float",
|
||||
"label": "(H) Valuation Rate",
|
||||
},
|
||||
{
|
||||
"fieldname": "fifo_valuation_rate",
|
||||
"fieldtype": "Float",
|
||||
"label": "(I) Valuation Rate as per FIFO",
|
||||
},
|
||||
|
||||
{
|
||||
"fieldname": "fifo_valuation_diff",
|
||||
"fieldtype": "Float",
|
||||
"label": "H - I",
|
||||
},
|
||||
{
|
||||
"fieldname": "balance_value_by_qty",
|
||||
"fieldtype": "Float",
|
||||
"label": "(J) Valuation = Value (D) ÷ Qty (A)",
|
||||
},
|
||||
{
|
||||
"fieldname": "valuation_diff",
|
||||
"fieldtype": "Float",
|
||||
"label": "H - J",
|
||||
},
|
||||
]
|
@ -41,6 +41,12 @@ REPORT_FILTER_TEST_CASES: List[Tuple[ReportName, ReportFilters]] = [
|
||||
("Total Stock Summary", {"group_by": "warehouse",}),
|
||||
("Batch Item Expiry Status", {}),
|
||||
("Stock Ageing", {"range1": 30, "range2": 60, "range3": 90, "_optional": True}),
|
||||
("Stock Ledger Invariant Check",
|
||||
{
|
||||
"warehouse": "_Test Warehouse - _TC",
|
||||
"item": "_Test Item"
|
||||
}
|
||||
),
|
||||
]
|
||||
|
||||
OPTIONAL_FILTERS = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user