@@ -28,6 +28,7 @@ frappe.ui.form.on('Number Card', { | |||||
frm.trigger('render_filters_table'); | frm.trigger('render_filters_table'); | ||||
} | } | ||||
frm.trigger('create_add_to_dashboard_button'); | frm.trigger('create_add_to_dashboard_button'); | ||||
frm.trigger('set_parent_document_type'); | |||||
}, | }, | ||||
create_add_to_dashboard_button: function(frm) { | create_add_to_dashboard_button: function(frm) { | ||||
@@ -141,7 +142,9 @@ frappe.ui.form.on('Number Card', { | |||||
frm.set_value('filters_json', '[]'); | frm.set_value('filters_json', '[]'); | ||||
frm.set_value('dynamic_filters_json', '[]'); | frm.set_value('dynamic_filters_json', '[]'); | ||||
frm.set_value('aggregate_function_based_on', ''); | frm.set_value('aggregate_function_based_on', ''); | ||||
frm.set_value('parent_document_type', ''); | |||||
frm.trigger('set_options'); | frm.trigger('set_options'); | ||||
frm.trigger('set_parent_document_type'); | |||||
}, | }, | ||||
set_options: function(frm) { | set_options: function(frm) { | ||||
@@ -317,6 +320,7 @@ frappe.ui.form.on('Number Card', { | |||||
frm.filter_group = new frappe.ui.FilterGroup({ | frm.filter_group = new frappe.ui.FilterGroup({ | ||||
parent: dialog.get_field('filter_area').$wrapper, | parent: dialog.get_field('filter_area').$wrapper, | ||||
doctype: frm.doc.document_type, | doctype: frm.doc.document_type, | ||||
parent_doctype: frm.doc.parent_document_type, | |||||
on_change: () => {}, | on_change: () => {}, | ||||
}); | }); | ||||
filters && frm.filter_group.add_filters_to_filter_group(filters); | filters && frm.filter_group.add_filters_to_filter_group(filters); | ||||
@@ -436,6 +440,36 @@ frappe.ui.form.on('Number Card', { | |||||
frm.dynamic_filter_table.find('tbody').html(filter_rows); | frm.dynamic_filter_table.find('tbody').html(filter_rows); | ||||
} | } | ||||
}, | |||||
set_parent_document_type: async function(frm) { | |||||
let document_type = frm.doc.document_type; | |||||
let doc_is_table = document_type && | |||||
(await frappe.db.get_value('DocType', document_type, 'istable')).message.istable; | |||||
frm.set_df_property('parent_document_type', 'hidden', !doc_is_table); | |||||
if (document_type && doc_is_table) { | |||||
let parent = await frappe.db.get_list('DocField', { | |||||
filters: { | |||||
'fieldtype': 'Table', | |||||
'options': document_type | |||||
}, | |||||
fields: ['parent'] | |||||
}); | |||||
parent && frm.set_query('parent_document_type', function() { | |||||
return { | |||||
filters: { | |||||
"name": ['in', parent.map(({ parent }) => parent)] | |||||
} | |||||
}; | |||||
}); | |||||
if (parent.length === 1) { | |||||
frm.set_value('parent_document_type', parent[0].parent); | |||||
} | |||||
} | |||||
} | } | ||||
}); | }); |
@@ -16,6 +16,7 @@ | |||||
"aggregate_function_based_on", | "aggregate_function_based_on", | ||||
"column_break_2", | "column_break_2", | ||||
"document_type", | "document_type", | ||||
"parent_document_type", | |||||
"report_field", | "report_field", | ||||
"report_function", | "report_function", | ||||
"is_public", | "is_public", | ||||
@@ -188,10 +189,17 @@ | |||||
"label": "Function", | "label": "Function", | ||||
"mandatory_depends_on": "eval: doc.type == 'Report'", | "mandatory_depends_on": "eval: doc.type == 'Report'", | ||||
"options": "Sum\nAverage\nMinimum\nMaximum" | "options": "Sum\nAverage\nMinimum\nMaximum" | ||||
}, | |||||
{ | |||||
"description": "The document type selected is a child table, so the parent document type is required.", | |||||
"fieldname": "parent_document_type", | |||||
"fieldtype": "Link", | |||||
"label": "Parent Document Type", | |||||
"options": "DocType" | |||||
} | } | ||||
], | ], | ||||
"links": [], | "links": [], | ||||
"modified": "2020-07-23 11:11:03.391719", | |||||
"modified": "2022-03-10 15:34:38.210910", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Desk", | "module": "Desk", | ||||
"name": "Number Card", | "name": "Number Card", | ||||
@@ -234,6 +242,7 @@ | |||||
"search_fields": "label, document_type", | "search_fields": "label, document_type", | ||||
"sort_field": "modified", | "sort_field": "modified", | ||||
"sort_order": "DESC", | "sort_order": "DESC", | ||||
"states": [], | |||||
"title_field": "label", | "title_field": "label", | ||||
"track_changes": 1 | "track_changes": 1 | ||||
} | } |
@@ -3,6 +3,7 @@ | |||||
# License: MIT. See LICENSE | # License: MIT. See LICENSE | ||||
import frappe | import frappe | ||||
from frappe import _ | |||||
from frappe.model.document import Document | from frappe.model.document import Document | ||||
from frappe.utils import cint | from frappe.utils import cint | ||||
from frappe.model.naming import append_number_if_name_exists | from frappe.model.naming import append_number_if_name_exists | ||||
@@ -17,6 +18,13 @@ class NumberCard(Document): | |||||
if frappe.db.exists("Number Card", self.name): | if frappe.db.exists("Number Card", self.name): | ||||
self.name = append_number_if_name_exists('Number Card', self.name) | self.name = append_number_if_name_exists('Number Card', self.name) | ||||
def validate(self): | |||||
if not self.document_type: | |||||
frappe.throw(_("Document type is required to create a number card")) | |||||
if self.document_type and frappe.get_meta(self.document_type).istable and not self.parent_document_type: | |||||
frappe.throw(_("Parent document type is required to create a number card")) | |||||
def on_update(self): | def on_update(self): | ||||
if frappe.conf.developer_mode and self.is_standard: | if frappe.conf.developer_mode and self.is_standard: | ||||
export_to_files(record_list=[['Number Card', self.name]], record_module=self.module) | export_to_files(record_list=[['Number Card', self.name]], record_module=self.module) | ||||