Merge branch 'develop' into cont-temp

This commit is contained in:
Marica 2020-12-09 17:33:26 +05:30 committed by GitHub
commit 4efbee57f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 105 additions and 71 deletions

View File

@ -245,6 +245,9 @@ def get():
"account_number": "2200" "account_number": "2200"
}, },
_("Duties and Taxes"): { _("Duties and Taxes"): {
_("TDS Payable"): {
"account_number": "2310"
},
"account_type": "Tax", "account_type": "Tax",
"is_group": 1, "is_group": 1,
"account_number": "2300" "account_number": "2300"

View File

@ -9,11 +9,13 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sal
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
from erpnext.accounts.page.bank_reconciliation.bank_reconciliation import reconcile, get_linked_payments from erpnext.accounts.page.bank_reconciliation.bank_reconciliation import reconcile, get_linked_payments
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
test_dependencies = ["Item", "Cost Center"] test_dependencies = ["Item", "Cost Center"]
class TestBankTransaction(unittest.TestCase): class TestBankTransaction(unittest.TestCase):
def setUp(self): def setUp(self):
make_pos_profile()
add_transactions() add_transactions()
add_payments() add_payments()
@ -27,6 +29,9 @@ class TestBankTransaction(unittest.TestCase):
frappe.db.sql("""delete from `tabPayment Entry Reference`""") frappe.db.sql("""delete from `tabPayment Entry Reference`""")
frappe.db.sql("""delete from `tabPayment Entry`""") frappe.db.sql("""delete from `tabPayment Entry`""")
# Delete POS Profile
frappe.db.sql("delete from `tabPOS Profile`")
frappe.flags.test_bank_transactions_created = False frappe.flags.test_bank_transactions_created = False
frappe.flags.test_payments_created = False frappe.flags.test_payments_created = False

View File

@ -70,6 +70,7 @@ def get_items_list(pos_profile, company):
""".format(cond=cond), tuple([company] + args_list), as_dict=1) """.format(cond=cond), tuple([company] + args_list), as_dict=1)
def make_pos_profile(**args): def make_pos_profile(**args):
frappe.db.sql("delete from `tabPOS Payment Method`")
frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Profile`")
args = frappe._dict(args) args = frappe._dict(args)

View File

@ -405,6 +405,8 @@ class SalesInvoice(SellingController):
from erpnext.stock.get_item_details import get_pos_profile_item_details, get_pos_profile from erpnext.stock.get_item_details import get_pos_profile_item_details, get_pos_profile
if not self.pos_profile: if not self.pos_profile:
pos_profile = get_pos_profile(self.company) or {} pos_profile = get_pos_profile(self.company) or {}
if not pos_profile:
frappe.throw(_("No POS Profile found. Please create a New POS Profile first"))
self.pos_profile = pos_profile.get('name') self.pos_profile = pos_profile.get('name')
pos = {} pos = {}

View File

@ -690,7 +690,8 @@ class TestSalesInvoice(unittest.TestCase):
self.assertTrue(gle) self.assertTrue(gle)
def test_pos_gl_entry_with_perpetual_inventory(self): def test_pos_gl_entry_with_perpetual_inventory(self):
make_pos_profile() make_pos_profile(company="_Test Company with perpetual inventory", income_account = "Sales - TCP1",
expense_account = "Cost of Goods Sold - TCP1", warehouse="Stores - TCP1", cost_center = "Main - TCP1", write_off_account="_Test Write Off - TCP1")
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1") pr = make_purchase_receipt(company= "_Test Company with perpetual inventory", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
@ -746,7 +747,8 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEqual(pos_return.get('payments')[0].amount, -1000) self.assertEqual(pos_return.get('payments')[0].amount, -1000)
def test_pos_change_amount(self): def test_pos_change_amount(self):
make_pos_profile() make_pos_profile(company="_Test Company with perpetual inventory", income_account = "Sales - TCP1",
expense_account = "Cost of Goods Sold - TCP1", warehouse="Stores - TCP1", cost_center = "Main - TCP1", write_off_account="_Test Write Off - TCP1")
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory", pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",
item_code= "_Test FG Item",warehouse= "Stores - TCP1", cost_center= "Main - TCP1") item_code= "_Test FG Item",warehouse= "Stores - TCP1", cost_center= "Main - TCP1")

View File

@ -78,7 +78,10 @@ def get_fiscal_years(transaction_date=None, fiscal_year=None, label="Date", verb
else: else:
return ((fy.name, fy.year_start_date, fy.year_end_date),) return ((fy.name, fy.year_start_date, fy.year_end_date),)
error_msg = _("""{0} {1} not in any active Fiscal Year.""").format(label, formatdate(transaction_date)) error_msg = _("""{0} {1} is not in any active Fiscal Year""").format(label, formatdate(transaction_date))
if company:
error_msg = _("""{0} for {1}""").format(error_msg, frappe.bold(company))
if verbose==1: frappe.msgprint(error_msg) if verbose==1: frappe.msgprint(error_msg)
raise FiscalYearError(error_msg) raise FiscalYearError(error_msg)

View File

@ -168,6 +168,7 @@
"bold": 1, "bold": 1,
"fieldname": "supplier", "fieldname": "supplier",
"fieldtype": "Link", "fieldtype": "Link",
"in_global_search": 1,
"in_standard_filter": 1, "in_standard_filter": 1,
"label": "Supplier", "label": "Supplier",
"oldfieldname": "supplier", "oldfieldname": "supplier",
@ -1106,7 +1107,7 @@
"idx": 105, "idx": 105,
"is_submittable": 1, "is_submittable": 1,
"links": [], "links": [],
"modified": "2020-10-30 13:58:14.697921", "modified": "2020-12-03 16:46:44.229351",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Buying", "module": "Buying",
"name": "Purchase Order", "name": "Purchase Order",

View File

@ -42,7 +42,7 @@ class SellingController(StockController):
self.validate_max_discount() self.validate_max_discount()
self.validate_selling_price() self.validate_selling_price()
self.set_qty_as_per_stock_uom() self.set_qty_as_per_stock_uom()
self.set_po_nos() self.set_po_nos(for_validate=True)
self.set_gross_profit() self.set_gross_profit()
set_default_income_account_for_item(self) set_default_income_account_for_item(self)
self.set_customer_address() self.set_customer_address()
@ -370,20 +370,28 @@ class SellingController(StockController):
})) }))
self.make_sl_entries(sl_entries) self.make_sl_entries(sl_entries)
def set_po_nos(self): def set_po_nos(self, for_validate=False):
if self.doctype == 'Sales Invoice' and hasattr(self, "items"): if self.doctype == 'Sales Invoice' and hasattr(self, "items"):
if for_validate and self.po_no:
return
self.set_pos_for_sales_invoice() self.set_pos_for_sales_invoice()
if self.doctype == 'Delivery Note' and hasattr(self, "items"): if self.doctype == 'Delivery Note' and hasattr(self, "items"):
if for_validate and self.po_no:
return
self.set_pos_for_delivery_note() self.set_pos_for_delivery_note()
def set_pos_for_sales_invoice(self): def set_pos_for_sales_invoice(self):
po_nos = [] po_nos = []
if self.po_no:
po_nos.append(self.po_no)
self.get_po_nos('Sales Order', 'sales_order', po_nos) self.get_po_nos('Sales Order', 'sales_order', po_nos)
self.get_po_nos('Delivery Note', 'delivery_note', po_nos) self.get_po_nos('Delivery Note', 'delivery_note', po_nos)
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(',')))) self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
def set_pos_for_delivery_note(self): def set_pos_for_delivery_note(self):
po_nos = [] po_nos = []
if self.po_no:
po_nos.append(self.po_no)
self.get_po_nos('Sales Order', 'against_sales_order', po_nos) self.get_po_nos('Sales Order', 'against_sales_order', po_nos)
self.get_po_nos('Sales Invoice', 'against_sales_invoice', po_nos) self.get_po_nos('Sales Invoice', 'against_sales_invoice', po_nos)
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(',')))) self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))

View File

@ -641,7 +641,8 @@ class calculate_taxes_and_totals(object):
if default_mode_of_payment: if default_mode_of_payment:
self.doc.append('payments', { self.doc.append('payments', {
'mode_of_payment': default_mode_of_payment.mode_of_payment, 'mode_of_payment': default_mode_of_payment.mode_of_payment,
'amount': total_amount_to_pay 'amount': total_amount_to_pay,
'default': 1
}) })
else: else:
self.doc.is_pos = 0 self.doc.is_pos = 0

View File

@ -7,6 +7,7 @@ import frappe
import unittest import unittest
from frappe.utils import nowdate, add_days from frappe.utils import nowdate, add_days
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_healthcare_docs, create_appointment, create_healthcare_service_items from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_healthcare_docs, create_appointment, create_healthcare_service_items
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
test_dependencies = ["Company"] test_dependencies = ["Company"]
@ -15,6 +16,7 @@ class TestFeeValidity(unittest.TestCase):
frappe.db.sql("""delete from `tabPatient Appointment`""") frappe.db.sql("""delete from `tabPatient Appointment`""")
frappe.db.sql("""delete from `tabFee Validity`""") frappe.db.sql("""delete from `tabFee Validity`""")
frappe.db.sql("""delete from `tabPatient`""") frappe.db.sql("""delete from `tabPatient`""")
make_pos_profile()
def test_fee_validity(self): def test_fee_validity(self):
item = create_healthcare_service_items() item = create_healthcare_service_items()

View File

@ -7,12 +7,14 @@ import frappe
from erpnext.healthcare.doctype.patient_appointment.patient_appointment import update_status, make_encounter from erpnext.healthcare.doctype.patient_appointment.patient_appointment import update_status, make_encounter
from frappe.utils import nowdate, add_days from frappe.utils import nowdate, add_days
from frappe.utils.make_random import get_random from frappe.utils.make_random import get_random
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
class TestPatientAppointment(unittest.TestCase): class TestPatientAppointment(unittest.TestCase):
def setUp(self): def setUp(self):
frappe.db.sql("""delete from `tabPatient Appointment`""") frappe.db.sql("""delete from `tabPatient Appointment`""")
frappe.db.sql("""delete from `tabFee Validity`""") frappe.db.sql("""delete from `tabFee Validity`""")
frappe.db.sql("""delete from `tabPatient Encounter`""") frappe.db.sql("""delete from `tabPatient Encounter`""")
make_pos_profile()
def test_status(self): def test_status(self):
patient, medical_department, practitioner = create_healthcare_docs() patient, medical_department, practitioner = create_healthcare_docs()

View File

@ -6,11 +6,13 @@ import unittest
import frappe import frappe
from frappe.utils import nowdate from frappe.utils import nowdate
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_encounter, create_healthcare_docs, create_appointment from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_encounter, create_healthcare_docs, create_appointment
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
class TestPatientMedicalRecord(unittest.TestCase): class TestPatientMedicalRecord(unittest.TestCase):
def setUp(self): def setUp(self):
frappe.db.set_value('Healthcare Settings', None, 'enable_free_follow_ups', 0) frappe.db.set_value('Healthcare Settings', None, 'enable_free_follow_ups', 0)
frappe.db.set_value('Healthcare Settings', None, 'automate_appointment_invoicing', 1) frappe.db.set_value('Healthcare Settings', None, 'automate_appointment_invoicing', 1)
make_pos_profile()
def test_medical_record(self): def test_medical_record(self):
patient, medical_department, practitioner = create_healthcare_docs() patient, medical_department, practitioner = create_healthcare_docs()

View File

@ -441,42 +441,43 @@ global_search_doctypes = {
{"doctype": "Sales Order", "index": 8}, {"doctype": "Sales Order", "index": 8},
{"doctype": "Quotation", "index": 9}, {"doctype": "Quotation", "index": 9},
{"doctype": "Work Order", "index": 10}, {"doctype": "Work Order", "index": 10},
{"doctype": "Purchase Receipt", "index": 11}, {"doctype": "Purchase Order", "index": 11},
{"doctype": "Purchase Invoice", "index": 12}, {"doctype": "Purchase Receipt", "index": 12},
{"doctype": "Delivery Note", "index": 13}, {"doctype": "Purchase Invoice", "index": 13},
{"doctype": "Stock Entry", "index": 14}, {"doctype": "Delivery Note", "index": 14},
{"doctype": "Material Request", "index": 15}, {"doctype": "Stock Entry", "index": 15},
{"doctype": "Delivery Trip", "index": 16}, {"doctype": "Material Request", "index": 16},
{"doctype": "Pick List", "index": 17}, {"doctype": "Delivery Trip", "index": 17},
{"doctype": "Salary Slip", "index": 18}, {"doctype": "Pick List", "index": 18},
{"doctype": "Leave Application", "index": 19}, {"doctype": "Salary Slip", "index": 19},
{"doctype": "Expense Claim", "index": 20}, {"doctype": "Leave Application", "index": 20},
{"doctype": "Payment Entry", "index": 21}, {"doctype": "Expense Claim", "index": 21},
{"doctype": "Lead", "index": 22}, {"doctype": "Payment Entry", "index": 22},
{"doctype": "Opportunity", "index": 23}, {"doctype": "Lead", "index": 23},
{"doctype": "Item Price", "index": 24}, {"doctype": "Opportunity", "index": 24},
{"doctype": "Purchase Taxes and Charges Template", "index": 25}, {"doctype": "Item Price", "index": 25},
{"doctype": "Sales Taxes and Charges", "index": 26}, {"doctype": "Purchase Taxes and Charges Template", "index": 26},
{"doctype": "Asset", "index": 27}, {"doctype": "Sales Taxes and Charges", "index": 27},
{"doctype": "Project", "index": 28}, {"doctype": "Asset", "index": 28},
{"doctype": "Task", "index": 29}, {"doctype": "Project", "index": 29},
{"doctype": "Timesheet", "index": 30}, {"doctype": "Task", "index": 30},
{"doctype": "Issue", "index": 31}, {"doctype": "Timesheet", "index": 31},
{"doctype": "Serial No", "index": 32}, {"doctype": "Issue", "index": 32},
{"doctype": "Batch", "index": 33}, {"doctype": "Serial No", "index": 33},
{"doctype": "Branch", "index": 34}, {"doctype": "Batch", "index": 34},
{"doctype": "Department", "index": 35}, {"doctype": "Branch", "index": 35},
{"doctype": "Employee Grade", "index": 36}, {"doctype": "Department", "index": 36},
{"doctype": "Designation", "index": 37}, {"doctype": "Employee Grade", "index": 37},
{"doctype": "Job Opening", "index": 38}, {"doctype": "Designation", "index": 38},
{"doctype": "Job Applicant", "index": 39}, {"doctype": "Job Opening", "index": 39},
{"doctype": "Job Offer", "index": 40}, {"doctype": "Job Applicant", "index": 40},
{"doctype": "Salary Structure Assignment", "index": 41}, {"doctype": "Job Offer", "index": 41},
{"doctype": "Appraisal", "index": 42}, {"doctype": "Salary Structure Assignment", "index": 42},
{"doctype": "Loan", "index": 43}, {"doctype": "Appraisal", "index": 43},
{"doctype": "Maintenance Schedule", "index": 44}, {"doctype": "Loan", "index": 44},
{"doctype": "Maintenance Visit", "index": 45}, {"doctype": "Maintenance Schedule", "index": 45},
{"doctype": "Warranty Claim", "index": 46}, {"doctype": "Maintenance Visit", "index": 46},
{"doctype": "Warranty Claim", "index": 47},
], ],
"Healthcare": [ "Healthcare": [
{'doctype': 'Patient', 'index': 1}, {'doctype': 'Patient', 'index': 1},

View File

@ -124,7 +124,7 @@ class ProductionPlanReport(object):
if self.filters.include_subassembly_raw_materials else "(bom_item.qty / bom.quantity)") if self.filters.include_subassembly_raw_materials else "(bom_item.qty / bom.quantity)")
raw_materials = frappe.db.sql(""" SELECT bom_item.parent, bom_item.item_code, raw_materials = frappe.db.sql(""" SELECT bom_item.parent, bom_item.item_code,
bom_item.item_name as raw_material_name, {0} as required_qty bom_item.item_name as raw_material_name, {0} as required_qty_per_unit
FROM FROM
`tabBOM` as bom, `tab{1}` as bom_item `tabBOM` as bom, `tab{1}` as bom_item
WHERE WHERE
@ -208,7 +208,7 @@ class ProductionPlanReport(object):
warehouses = self.mrp_warehouses or [] warehouses = self.mrp_warehouses or []
for d in self.raw_materials_dict.get(key): for d in self.raw_materials_dict.get(key):
if self.filters.based_on != "Work Order": if self.filters.based_on != "Work Order":
d.required_qty = d.required_qty * data.qty_to_manufacture d.required_qty = d.required_qty_per_unit * data.qty_to_manufacture
if not warehouses: if not warehouses:
warehouses = [data.warehouse] warehouses = [data.warehouse]

View File

@ -739,4 +739,5 @@ erpnext.patches.v13_0.update_custom_fields_for_shopify
execute:frappe.delete_doc("Report", "Quoted Item Comparison") execute:frappe.delete_doc("Report", "Quoted Item Comparison")
erpnext.patches.v13_0.updates_for_multi_currency_payroll erpnext.patches.v13_0.updates_for_multi_currency_payroll
erpnext.patches.v13_0.create_leave_policy_assignment_based_on_employee_current_leave_policy erpnext.patches.v13_0.create_leave_policy_assignment_based_on_employee_current_leave_policy
erpnext.patches.v13_0.add_po_to_global_search
erpnext.patches.v13_0.update_returned_qty_in_pr_dn erpnext.patches.v13_0.update_returned_qty_in_pr_dn

View File

@ -0,0 +1,17 @@
from __future__ import unicode_literals
import frappe
def execute():
global_search_settings = frappe.get_single("Global Search Settings")
if "Purchase Order" in (
dt.document_type for dt in global_search_settings.allowed_in_global_search
):
return
global_search_settings.append(
"allowed_in_global_search", {"document_type": "Purchase Order"}
)
global_search_settings.save(ignore_permissions=True)

View File

@ -29,7 +29,7 @@ def execute():
'response_by_variance': response_by_variance, 'response_by_variance': response_by_variance,
'resolution_by_variance': resolution_by_variance, 'resolution_by_variance': resolution_by_variance,
'first_response_time': mins_to_first_response 'first_response_time': mins_to_first_response
}) }, update_modified=False)
# commit after every 100 updates # commit after every 100 updates
count += 1 count += 1
if count%100 == 0: if count%100 == 0:
@ -44,7 +44,7 @@ def execute():
count = 0 count = 0
for entry in opportunities: for entry in opportunities:
mins_to_first_response = convert_to_seconds(entry.mins_to_first_response, 'Minutes') mins_to_first_response = convert_to_seconds(entry.mins_to_first_response, 'Minutes')
frappe.db.set_value('Opportunity', entry.name, 'first_response_time', mins_to_first_response) frappe.db.set_value('Opportunity', entry.name, 'first_response_time', mins_to_first_response, update_modified=False)
# commit after every 100 updates # commit after every 100 updates
count += 1 count += 1
if count%100 == 0: if count%100 == 0:

View File

@ -289,7 +289,9 @@ class PayrollEntry(Document):
jv_name = journal_entry.name jv_name = journal_entry.name
self.update_salary_slip_status(jv_name = jv_name) self.update_salary_slip_status(jv_name = jv_name)
except Exception as e: except Exception as e:
frappe.msgprint(e) if type(e) in (str, list, tuple):
frappe.msgprint(e)
raise
return jv_name return jv_name

View File

@ -8,7 +8,7 @@ frappe.ui.form.on("Sales Order", {
frm.custom_make_buttons = { frm.custom_make_buttons = {
'Delivery Note': 'Delivery Note', 'Delivery Note': 'Delivery Note',
'Pick List': 'Pick List', 'Pick List': 'Pick List',
'Sales Invoice': 'Invoice', 'Sales Invoice': 'Sales Invoice',
'Material Request': 'Material Request', 'Material Request': 'Material Request',
'Purchase Order': 'Purchase Order', 'Purchase Order': 'Purchase Order',
'Project': 'Project', 'Project': 'Project',

View File

@ -1,25 +1,5 @@
{ {
"cards": [ "cards": [
{
"hidden": 0,
"label": "Healthcare",
"links": "[\n {\n \"label\": \"Patient\",\n \"name\": \"Patient\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Diagnosis\",\n \"name\": \"Diagnosis\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
},
{
"hidden": 0,
"label": "Agriculture",
"links": "[\n {\n \"label\": \"Crop\",\n \"name\": \"Crop\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Crop Cycle\",\n \"name\": \"Crop Cycle\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Location\",\n \"name\": \"Location\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Fertilizer\",\n \"name\": \"Fertilizer\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
},
{
"hidden": 0,
"label": "Education",
"links": "[\n {\n \"label\": \"Student\",\n \"name\": \"Student\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Course\",\n \"name\": \"Course\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Instructor\",\n \"name\": \"Instructor\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Room\",\n \"name\": \"Room\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
},
{
"hidden": 0,
"label": "Non Profit",
"links": "[\n {\n \"description\": \"Member information.\",\n \"label\": \"Member\",\n \"name\": \"Member\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Volunteer information.\",\n \"label\": \"Volunteer\",\n \"name\": \"Volunteer\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Chapter information.\",\n \"label\": \"Chapter\",\n \"name\": \"Chapter\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Donor information.\",\n \"label\": \"Donor\",\n \"name\": \"Donor\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
},
{ {
"hidden": 0, "hidden": 0,
"label": "Stock", "label": "Stock",
@ -54,10 +34,11 @@
"docstatus": 0, "docstatus": 0,
"doctype": "Desk Page", "doctype": "Desk Page",
"extends_another_page": 0, "extends_another_page": 0,
"hide_custom": 0,
"idx": 0, "idx": 0,
"is_standard": 1, "is_standard": 1,
"label": "Home", "label": "Home",
"modified": "2020-05-11 10:20:37.358701", "modified": "2020-12-07 14:22:38.667767",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Setup", "module": "Setup",
"name": "Home", "name": "Home",
@ -96,4 +77,4 @@
"type": "Page" "type": "Page"
} }
] ]
} }