Merge branch 'develop' into new_invoice_fix
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"actions": [],
|
||||||
"autoname": "hash",
|
"autoname": "hash",
|
||||||
"creation": "2013-05-24 19:29:06",
|
"creation": "2013-05-24 19:29:06",
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
"base_amount",
|
"base_amount",
|
||||||
"pricing_rules",
|
"pricing_rules",
|
||||||
"is_free_item",
|
"is_free_item",
|
||||||
|
"is_fixed_asset",
|
||||||
"section_break_29",
|
"section_break_29",
|
||||||
"net_rate",
|
"net_rate",
|
||||||
"net_amount",
|
"net_amount",
|
||||||
@@ -708,11 +710,20 @@
|
|||||||
"fieldname": "against_blanket_order",
|
"fieldname": "against_blanket_order",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Against Blanket Order"
|
"label": "Against Blanket Order"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fetch_from": "item_code.is_fixed_asset",
|
||||||
|
"fieldname": "is_fixed_asset",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Is Fixed Asset",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2019-11-19 14:10:52.865006",
|
"links": [],
|
||||||
|
"modified": "2019-12-06 13:17:12.142799",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Buying",
|
"module": "Buying",
|
||||||
"name": "Purchase Order Item",
|
"name": "Purchase Order Item",
|
||||||
|
|||||||
@@ -3,18 +3,18 @@
|
|||||||
"app": "ERPNext",
|
"app": "ERPNext",
|
||||||
"creation": "2019-11-15 14:45:32.626641",
|
"creation": "2019-11-15 14:45:32.626641",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Setup Wizard Slide",
|
"doctype": "Onboarding Slide",
|
||||||
"domains": [],
|
"domains": [],
|
||||||
"help_links": [
|
"help_links": [
|
||||||
{
|
{
|
||||||
"label": "Supplier",
|
"label": "Learn More",
|
||||||
"video_id": "zsrrVDk6VBs"
|
"video_id": "zsrrVDk6VBs"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_src": "/assets/erpnext/images/illustrations/supplier.png",
|
"image_src": "/assets/erpnext/images/illustrations/supplier-onboard.png",
|
||||||
"max_count": 3,
|
"max_count": 3,
|
||||||
"modified": "2019-11-26 18:26:25.498325",
|
"modified": "2019-12-03 22:53:50.552445",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"name": "Add A Few Suppliers",
|
"name": "Add A Few Suppliers",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
@@ -44,6 +44,5 @@
|
|||||||
],
|
],
|
||||||
"slide_order": 50,
|
"slide_order": 50,
|
||||||
"slide_title": "Add A Few Suppliers",
|
"slide_title": "Add A Few Suppliers",
|
||||||
"slide_type": "Create",
|
"slide_type": "Create"
|
||||||
"submit_method": ""
|
|
||||||
}
|
}
|
||||||
@@ -606,6 +606,7 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite
|
|||||||
item.image,
|
item.image,
|
||||||
bom.project,
|
bom.project,
|
||||||
item.stock_uom,
|
item.stock_uom,
|
||||||
|
item.item_group,
|
||||||
item.allow_alternative_item,
|
item.allow_alternative_item,
|
||||||
item_default.default_warehouse,
|
item_default.default_warehouse,
|
||||||
item_default.expense_account as expense_account,
|
item_default.expense_account as expense_account,
|
||||||
|
|||||||
@@ -188,7 +188,8 @@ class Timesheet(Document):
|
|||||||
}, as_dict=True)
|
}, as_dict=True)
|
||||||
# check internal overlap
|
# check internal overlap
|
||||||
for time_log in self.time_logs:
|
for time_log in self.time_logs:
|
||||||
if not (time_log.from_time or time_log.to_time): continue
|
if not (time_log.from_time and time_log.to_time
|
||||||
|
and args.from_time and args.to_time): continue
|
||||||
|
|
||||||
if (fieldname != 'workstation' or args.get(fieldname) == time_log.get(fieldname)) and \
|
if (fieldname != 'workstation' or args.get(fieldname) == time_log.get(fieldname)) and \
|
||||||
args.idx != time_log.idx and ((args.from_time > time_log.from_time and args.from_time < time_log.to_time) or
|
args.idx != time_log.idx and ((args.from_time > time_log.from_time and args.from_time < time_log.to_time) or
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
BIN
erpnext/public/images/illustrations/customers-onboard.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
erpnext/public/images/illustrations/desk-onboard.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
erpnext/public/images/illustrations/letterhead-onboard.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
BIN
erpnext/public/images/illustrations/products-onboard.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
erpnext/public/images/illustrations/supplier-onboard.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
@@ -55,14 +55,25 @@ frappe.query_reports["GSTR-1"] = {
|
|||||||
report.page.add_inner_button(__("Download as JSON"), function () {
|
report.page.add_inner_button(__("Download as JSON"), function () {
|
||||||
var filters = report.get_values();
|
var filters = report.get_values();
|
||||||
|
|
||||||
const args = {
|
frappe.call({
|
||||||
cmd: 'erpnext.regional.report.gstr_1.gstr_1.get_json',
|
method: 'erpnext.regional.report.gstr_1.gstr_1.get_json',
|
||||||
|
args: {
|
||||||
data: report.data,
|
data: report.data,
|
||||||
report_name: report.report_name,
|
report_name: report.report_name,
|
||||||
filters: filters
|
filters: filters
|
||||||
|
},
|
||||||
|
callback: function(r) {
|
||||||
|
if (r.message) {
|
||||||
|
const args = {
|
||||||
|
cmd: 'erpnext.regional.report.gstr_1.gstr_1.download_json_file',
|
||||||
|
data: r.message.data,
|
||||||
|
report_name: r.message.report_name,
|
||||||
|
report_type: r.message.report_type
|
||||||
};
|
};
|
||||||
|
|
||||||
open_url_post(frappe.request.url, args);
|
open_url_post(frappe.request.url, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -532,16 +532,9 @@ class Gstr1Report(object):
|
|||||||
self.columns = self.invoice_columns + self.tax_columns + self.other_columns
|
self.columns = self.invoice_columns + self.tax_columns + self.other_columns
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_json():
|
def get_json(filters, report_name, data):
|
||||||
data = frappe._dict(frappe.local.form_dict)
|
filters = json.loads(filters)
|
||||||
|
report_data = json.loads(data)
|
||||||
del data["cmd"]
|
|
||||||
if "csrf_token" in data:
|
|
||||||
del data["csrf_token"]
|
|
||||||
|
|
||||||
filters = json.loads(data["filters"])
|
|
||||||
report_data = json.loads(data["data"])
|
|
||||||
report_name = data["report_name"]
|
|
||||||
gstin = get_company_gstin_number(filters["company"])
|
gstin = get_company_gstin_number(filters["company"])
|
||||||
|
|
||||||
fp = "%02d%s" % (getdate(filters["to_date"]).month, getdate(filters["to_date"]).year)
|
fp = "%02d%s" % (getdate(filters["to_date"]).month, getdate(filters["to_date"]).year)
|
||||||
@@ -575,7 +568,11 @@ def get_json():
|
|||||||
out = get_export_json(res)
|
out = get_export_json(res)
|
||||||
gst_json["exp"] = out
|
gst_json["exp"] = out
|
||||||
|
|
||||||
download_json_file(report_name, filters["type_of_business"], gst_json)
|
return {
|
||||||
|
'report_name': report_name,
|
||||||
|
'report_type': filters['type_of_business'],
|
||||||
|
'data': gst_json
|
||||||
|
}
|
||||||
|
|
||||||
def get_b2b_json(res, gstin):
|
def get_b2b_json(res, gstin):
|
||||||
inv_type, out = {"Registered Regular": "R", "Deemed Export": "DE", "URD": "URD", "SEZ": "SEZ"}, []
|
inv_type, out = {"Registered Regular": "R", "Deemed Export": "DE", "URD": "URD", "SEZ": "SEZ"}, []
|
||||||
@@ -722,11 +719,15 @@ def get_company_gstin_number(company):
|
|||||||
if gstin:
|
if gstin:
|
||||||
return gstin[0]["gstin"]
|
return gstin[0]["gstin"]
|
||||||
else:
|
else:
|
||||||
frappe.throw(_("Please set valid GSTIN No. in Company Address"))
|
frappe.throw(_("Please set valid GSTIN No. in Company Address for company {0}".format(
|
||||||
|
frappe.bold(company)
|
||||||
|
)))
|
||||||
|
|
||||||
def download_json_file(filename, report_type, data):
|
@frappe.whitelist()
|
||||||
|
def download_json_file():
|
||||||
''' download json content in a file '''
|
''' download json content in a file '''
|
||||||
frappe.response['filename'] = frappe.scrub("{0} {1}".format(filename, report_type)) + '.json'
|
data = frappe._dict(frappe.local.form_dict)
|
||||||
frappe.response['filecontent'] = json.dumps(data)
|
frappe.response['filename'] = frappe.scrub("{0} {1}".format(data['report_name'], data['report_type'])) + '.json'
|
||||||
|
frappe.response['filecontent'] = data['data']
|
||||||
frappe.response['content_type'] = 'application/json'
|
frappe.response['content_type'] = 'application/json'
|
||||||
frappe.response['type'] = 'download'
|
frappe.response['type'] = 'download'
|
||||||
|
|||||||
@@ -3,18 +3,18 @@
|
|||||||
"app": "ERPNext",
|
"app": "ERPNext",
|
||||||
"creation": "2019-11-15 14:44:10.065014",
|
"creation": "2019-11-15 14:44:10.065014",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Setup Wizard Slide",
|
"doctype": "Onboarding Slide",
|
||||||
"domains": [],
|
"domains": [],
|
||||||
"help_links": [
|
"help_links": [
|
||||||
{
|
{
|
||||||
"label": "Customers",
|
"label": "Learn More",
|
||||||
"video_id": "zsrrVDk6VBs"
|
"video_id": "zsrrVDk6VBs"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_src": "/assets/erpnext/images/illustrations/customer.png",
|
"image_src": "/assets/erpnext/images/illustrations/customers-onboard.png",
|
||||||
"max_count": 3,
|
"max_count": 3,
|
||||||
"modified": "2019-11-26 18:26:15.888794",
|
"modified": "2019-12-03 22:54:28.959549",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"name": "Add A Few Customers",
|
"name": "Add A Few Customers",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
@@ -44,6 +44,5 @@
|
|||||||
],
|
],
|
||||||
"slide_order": 40,
|
"slide_order": 40,
|
||||||
"slide_title": "Add A Few Customers",
|
"slide_title": "Add A Few Customers",
|
||||||
"slide_type": "Create",
|
"slide_type": "Create"
|
||||||
"submit_method": ""
|
|
||||||
}
|
}
|
||||||
@@ -283,7 +283,7 @@ class EmailDigest(Document):
|
|||||||
card.value = card.value *-1
|
card.value = card.value *-1
|
||||||
card.value = self.fmt_money(card.value,False if key in ("bank_balance", "credit_balance") else True)
|
card.value = self.fmt_money(card.value,False if key in ("bank_balance", "credit_balance") else True)
|
||||||
|
|
||||||
cache.setex(cache_key, card, 24 * 60 * 60)
|
cache.set_value(cache_key, card, expires_in_sec=24 * 60 * 60)
|
||||||
|
|
||||||
context.cards.append(card)
|
context.cards.append(card)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"add_more_button": 0,
|
||||||
|
"app": "ERPNext",
|
||||||
|
"creation": "2019-12-04 19:21:39.995776",
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Onboarding Slide",
|
||||||
|
"domains": [],
|
||||||
|
"help_links": [],
|
||||||
|
"idx": 0,
|
||||||
|
"image_src": "/assets/erpnext/images/illustrations/desk-onboard.png",
|
||||||
|
"is_completed": 0,
|
||||||
|
"max_count": 3,
|
||||||
|
"modified": "2019-12-04 19:21:39.995776",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"name": "Welcome back to ERPNext!",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"slide_desc": "<p>Let's continue where you left from!</p>",
|
||||||
|
"slide_fields": [],
|
||||||
|
"slide_module": "Setup",
|
||||||
|
"slide_order": 0,
|
||||||
|
"slide_title": "Welcome back to ERPNext!",
|
||||||
|
"slide_type": "Continue"
|
||||||
|
}
|
||||||
@@ -3,20 +3,20 @@
|
|||||||
"app": "ERPNext",
|
"app": "ERPNext",
|
||||||
"creation": "2019-11-26 17:01:26.671859",
|
"creation": "2019-11-26 17:01:26.671859",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Setup Wizard Slide",
|
"doctype": "Onboarding Slide",
|
||||||
"domains": [],
|
"domains": [],
|
||||||
"help_links": [],
|
"help_links": [],
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_src": "/assets/erpnext/images/illustrations/onboard.png",
|
"image_src": "/assets/erpnext/images/illustrations/desk-onboard.png",
|
||||||
"max_count": 0,
|
"max_count": 0,
|
||||||
"modified": "2019-11-26 17:17:29.813299",
|
"modified": "2019-12-03 22:49:12.871260",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"name": "Welcome to ERPNext!",
|
"name": "Welcome to ERPNext!",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"slide_desc": "Setting up an ERP can be overwhelming. But don't worry, we have got your back!<br>\nLet's setup your company.\nThis wizard will help you onboard to ERPNext in a short time!",
|
"slide_desc": "Setting up an ERP can be overwhelming. But don't worry, we have got your back!\nLet's setup your company.\nThis wizard will help you onboard to ERPNext in a short time!",
|
||||||
"slide_fields": [],
|
"slide_fields": [],
|
||||||
"slide_module": "Setup",
|
"slide_module": "Setup",
|
||||||
"slide_order": 10,
|
"slide_order": 1,
|
||||||
"slide_title": "Welcome to ERPNext!",
|
"slide_title": "Welcome to ERPNext!",
|
||||||
"slide_type": "Information"
|
"slide_type": "Information"
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,8 @@ def get_exchange_rate(from_currency, to_currency, transaction_date=None, args=No
|
|||||||
# expire in 6 hours
|
# expire in 6 hours
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
value = response.json()["rates"][to_currency]
|
value = response.json()["rates"][to_currency]
|
||||||
cache.setex(key, value, 6 * 60 * 60)
|
|
||||||
|
cache.set_value(key, value, expires_in_sec=6 * 60 * 60)
|
||||||
return flt(value)
|
return flt(value)
|
||||||
except:
|
except:
|
||||||
frappe.log_error(title="Get Exchange Rate")
|
frappe.log_error(title="Get Exchange Rate")
|
||||||
|
|||||||
@@ -249,6 +249,8 @@ frappe.ui.form.on('Stock Entry', {
|
|||||||
}, __("Get items from"));
|
}, __("Get items from"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frm.events.show_bom_custom_button(frm);
|
||||||
|
|
||||||
if (frm.doc.company) {
|
if (frm.doc.company) {
|
||||||
frm.trigger("toggle_display_account_head");
|
frm.trigger("toggle_display_account_head");
|
||||||
}
|
}
|
||||||
@@ -262,6 +264,11 @@ frappe.ui.form.on('Stock Entry', {
|
|||||||
frm.trigger("setup_quality_inspection");
|
frm.trigger("setup_quality_inspection");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
stock_entry_type: function(frm){
|
||||||
|
frm.remove_custom_button('Bill of Materials', "Get items from");
|
||||||
|
frm.events.show_bom_custom_button(frm);
|
||||||
|
},
|
||||||
|
|
||||||
purpose: function(frm) {
|
purpose: function(frm) {
|
||||||
frm.trigger('validate_purpose_consumption');
|
frm.trigger('validate_purpose_consumption');
|
||||||
frm.fields_dict.items.grid.refresh();
|
frm.fields_dict.items.grid.refresh();
|
||||||
@@ -398,6 +405,85 @@ frappe.ui.form.on('Stock Entry', {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
show_bom_custom_button: function(frm){
|
||||||
|
if (frm.doc.docstatus === 0 &&
|
||||||
|
['Material Issue', 'Material Receipt', 'Material Transfer', 'Send to Subcontractor'].includes(frm.doc.purpose)) {
|
||||||
|
frm.add_custom_button(__('Bill of Materials'), function() {
|
||||||
|
frm.events.get_items_from_bom(frm);
|
||||||
|
}, __("Get items from"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
get_items_from_bom: function(frm) {
|
||||||
|
let filters = function(){
|
||||||
|
return {filters: { docstatus:1 }};
|
||||||
|
}
|
||||||
|
|
||||||
|
let fields = [
|
||||||
|
{"fieldname":"bom", "fieldtype":"Link", "label":__("BOM"),
|
||||||
|
options:"BOM", reqd: 1, get_query: filters()},
|
||||||
|
{"fieldname":"source_warehouse", "fieldtype":"Link", "label":__("Source Warehouse"),
|
||||||
|
options:"Warehouse"},
|
||||||
|
{"fieldname":"target_warehouse", "fieldtype":"Link", "label":__("Target Warehouse"),
|
||||||
|
options:"Warehouse"},
|
||||||
|
{"fieldname":"qty", "fieldtype":"Float", "label":__("Quantity"),
|
||||||
|
reqd: 1, "default": 1},
|
||||||
|
{"fieldname":"fetch_exploded", "fieldtype":"Check",
|
||||||
|
"label":__("Fetch exploded BOM (including sub-assemblies)"), "default":1},
|
||||||
|
{"fieldname":"fetch", "label":__("Get Items from BOM"), "fieldtype":"Button"}
|
||||||
|
]
|
||||||
|
|
||||||
|
// Exclude field 'Target Warehouse' in case of Material Issue
|
||||||
|
if (frm.doc.purpose == 'Material Issue'){
|
||||||
|
fields.splice(2,1);
|
||||||
|
}
|
||||||
|
// Exclude field 'Source Warehouse' in case of Material Receipt
|
||||||
|
else if(frm.doc.purpose == 'Material Receipt'){
|
||||||
|
fields.splice(1,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let d = new frappe.ui.Dialog({
|
||||||
|
title: __("Get Items from BOM"),
|
||||||
|
fields: fields
|
||||||
|
});
|
||||||
|
d.get_input("fetch").on("click", function() {
|
||||||
|
let values = d.get_values();
|
||||||
|
if(!values) return;
|
||||||
|
values["company"] = frm.doc.company;
|
||||||
|
if(!frm.doc.company) frappe.throw(__("Company field is required"));
|
||||||
|
frappe.call({
|
||||||
|
method: "erpnext.manufacturing.doctype.bom.bom.get_bom_items",
|
||||||
|
args: values,
|
||||||
|
callback: function(r) {
|
||||||
|
if (!r.message) {
|
||||||
|
frappe.throw(__("BOM does not contain any stock item"));
|
||||||
|
} else {
|
||||||
|
erpnext.utils.remove_empty_first_row(frm, "items");
|
||||||
|
$.each(r.message, function(i, item) {
|
||||||
|
let d = frappe.model.add_child(cur_frm.doc, "Stock Entry Detail", "items");
|
||||||
|
d.item_code = item.item_code;
|
||||||
|
d.item_name = item.item_name;
|
||||||
|
d.item_group = item.item_group;
|
||||||
|
d.s_warehouse = values.source_warehouse;
|
||||||
|
d.t_warehouse = values.target_warehouse;
|
||||||
|
d.uom = item.stock_uom;
|
||||||
|
d.stock_uom = item.stock_uom;
|
||||||
|
d.conversion_factor = item.conversion_factor ? item.conversion_factor : 1;
|
||||||
|
d.qty = item.qty;
|
||||||
|
d.expense_account = item.expense_account;
|
||||||
|
d.project = item.project;
|
||||||
|
frm.events.set_basic_rate(frm, d.doctype, d.name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
d.hide();
|
||||||
|
refresh_field("items");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
d.show();
|
||||||
|
},
|
||||||
|
|
||||||
calculate_basic_amount: function(frm, item) {
|
calculate_basic_amount: function(frm, item) {
|
||||||
item.basic_amount = flt(flt(item.transfer_qty) * flt(item.basic_rate),
|
item.basic_amount = flt(flt(item.transfer_qty) * flt(item.basic_rate),
|
||||||
precision("basic_amount", item));
|
precision("basic_amount", item));
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
"app": "ERPNext",
|
"app": "ERPNext",
|
||||||
"creation": "2019-11-15 14:41:12.007359",
|
"creation": "2019-11-15 14:41:12.007359",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Setup Wizard Slide",
|
"doctype": "Onboarding Slide",
|
||||||
"domains": [],
|
"domains": [],
|
||||||
"help_links": [],
|
"help_links": [],
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_src": "/assets/erpnext/images/illustrations/product.png",
|
"image_src": "/assets/erpnext/images/illustrations/products-onboard.png",
|
||||||
"max_count": 3,
|
"max_count": 3,
|
||||||
"modified": "2019-11-26 18:26:35.305755",
|
"modified": "2019-12-03 22:54:07.558632",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"name": "Add A Few Products You Buy Or Sell",
|
"name": "Add A Few Products You Buy Or Sell",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
@@ -26,15 +26,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"align": "",
|
"align": "",
|
||||||
"fieldtype": "Column Break",
|
"fieldname": "item_price",
|
||||||
"reqd": 1
|
"fieldtype": "Currency",
|
||||||
},
|
"label": "Item Price",
|
||||||
{
|
|
||||||
"align": "",
|
|
||||||
"fieldname": "uom",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "UOM",
|
|
||||||
"options": "UOM",
|
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -44,14 +38,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"align": "",
|
"align": "",
|
||||||
"fieldname": "item_price",
|
"fieldname": "uom",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Link",
|
||||||
"label": "Item Price",
|
"label": "UOM",
|
||||||
|
"options": "UOM",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"slide_order": 30,
|
"slide_order": 30,
|
||||||
"slide_title": "Add A Few Products You Buy Or Sell",
|
"slide_title": "Add A Few Products You Buy Or Sell",
|
||||||
"slide_type": "Create",
|
"slide_type": "Create"
|
||||||
"submit_method": ""
|
|
||||||
}
|
}
|
||||||