Просмотр исходного кода

fix: Number Card to support child table doctype for filters

version-14
Shariq Ansari 3 лет назад
Родитель
Сommit
2c0735d709
3 измененных файлов: 52 добавлений и 1 удалений
  1. +34
    -0
      frappe/desk/doctype/number_card/number_card.js
  2. +10
    -1
      frappe/desk/doctype/number_card/number_card.json
  3. +8
    -0
      frappe/desk/doctype/number_card/number_card.py

+ 34
- 0
frappe/desk/doctype/number_card/number_card.js Просмотреть файл

@@ -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);
}
}
}

});

+ 10
- 1
frappe/desk/doctype/number_card/number_card.json Просмотреть файл

@@ -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
}

+ 8
- 0
frappe/desk/doctype/number_card/number_card.py Просмотреть файл

@@ -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)


Загрузка…
Отмена
Сохранить