@@ -28,6 +28,7 @@ frappe.ui.form.on('Number Card', { | |||
frm.trigger('render_filters_table'); | |||
} | |||
frm.trigger('create_add_to_dashboard_button'); | |||
frm.trigger('set_parent_document_type'); | |||
}, | |||
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('dynamic_filters_json', '[]'); | |||
frm.set_value('aggregate_function_based_on', ''); | |||
frm.set_value('parent_document_type', ''); | |||
frm.trigger('set_options'); | |||
frm.trigger('set_parent_document_type'); | |||
}, | |||
set_options: function(frm) { | |||
@@ -317,6 +320,7 @@ frappe.ui.form.on('Number Card', { | |||
frm.filter_group = new frappe.ui.FilterGroup({ | |||
parent: dialog.get_field('filter_area').$wrapper, | |||
doctype: frm.doc.document_type, | |||
parent_doctype: frm.doc.parent_document_type, | |||
on_change: () => {}, | |||
}); | |||
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); | |||
} | |||
}, | |||
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", | |||
"column_break_2", | |||
"document_type", | |||
"parent_document_type", | |||
"report_field", | |||
"report_function", | |||
"is_public", | |||
@@ -188,10 +189,17 @@ | |||
"label": "Function", | |||
"mandatory_depends_on": "eval: doc.type == 'Report'", | |||
"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": [], | |||
"modified": "2020-07-23 11:11:03.391719", | |||
"modified": "2022-03-10 15:34:38.210910", | |||
"modified_by": "Administrator", | |||
"module": "Desk", | |||
"name": "Number Card", | |||
@@ -234,6 +242,7 @@ | |||
"search_fields": "label, document_type", | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"states": [], | |||
"title_field": "label", | |||
"track_changes": 1 | |||
} |
@@ -3,6 +3,7 @@ | |||
# License: MIT. See LICENSE | |||
import frappe | |||
from frappe import _ | |||
from frappe.model.document import Document | |||
from frappe.utils import cint | |||
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): | |||
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): | |||
if frappe.conf.developer_mode and self.is_standard: | |||
export_to_files(record_list=[['Number Card', self.name]], record_module=self.module) | |||