def get_filtered_dimensions(doctype, txt, searchfield, start, page_len, filters): from erpnext.accounts.doctype.accounting_dimension_filter.accounting_dimension_filter import get_dimension_filter_map dimension_filters = get_dimension_filter_map() dimension_filters = dimension_filters.get((filters.get('dimension'),filters.get('account'))) query_filters = [] meta = frappe.get_meta(doctype) if meta.is_tree: query_filters.append(['is_group', '=', 0]) if meta.has_field('company'): query_filters.append(['company', '=', filters.get('company')]) if txt: query_filters.append([searchfield, 'LIKE', "%%%s%%" % txt]) if dimension_filters: if dimension_filters['allow_or_restrict'] == 'Allow': query_selector = 'in' else: query_selector = 'not in' if len(dimension_filters['allowed_dimensions']) == 1: dimensions = tuple(dimension_filters['allowed_dimensions'] * 2) else: dimensions = tuple(dimension_filters['allowed_dimensions']) query_filters.append(['name', query_selector, dimensions]) output = frappe.get_all(doctype, filters=query_filters) result = [d.name for d in output] return [(d,) for d in set(result)]
def validate_allowed_dimensions(self): dimension_filter_map = get_dimension_filter_map() for key, value in iteritems(dimension_filter_map): dimension = key[0] account = key[1] if self.account == account: if value['is_mandatory'] and not self.get(dimension): frappe.throw( _("{0} is mandatory for account {1}").format( frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account)), MandatoryAccountDimensionError) if value['allow_or_restrict'] == 'Allow': if self.get(dimension) and self.get( dimension) not in value['allowed_dimensions']: frappe.throw( _("Invalid value {0} for {1} against account {2}" ).format(frappe.bold(self.get(dimension)), frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account)), InvalidAccountDimensionError) else: if self.get(dimension) and self.get( dimension) in value['allowed_dimensions']: frappe.throw( _("Invalid value {0} for {1} against account {2}" ).format(frappe.bold(self.get(dimension)), frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account)), InvalidAccountDimensionError)
def get_filtered_dimensions(doctype, txt, searchfield, start, page_len, filters): from erpnext.accounts.doctype.accounting_dimension_filter.accounting_dimension_filter import ( get_dimension_filter_map, ) dimension_filters = get_dimension_filter_map() dimension_filters = dimension_filters.get( (filters.get("dimension"), filters.get("account"))) query_filters = [] or_filters = [] fields = ["name"] searchfields = frappe.get_meta(doctype).get_search_fields() meta = frappe.get_meta(doctype) if meta.is_tree: query_filters.append(["is_group", "=", 0]) if meta.has_field("disabled"): query_filters.append(["disabled", "!=", 1]) if meta.has_field("company"): query_filters.append(["company", "=", filters.get("company")]) for field in searchfields: or_filters.append([field, "LIKE", "%%%s%%" % txt]) fields.append(field) if dimension_filters: if dimension_filters["allow_or_restrict"] == "Allow": query_selector = "in" else: query_selector = "not in" if len(dimension_filters["allowed_dimensions"]) == 1: dimensions = tuple(dimension_filters["allowed_dimensions"] * 2) else: dimensions = tuple(dimension_filters["allowed_dimensions"]) query_filters.append(["name", query_selector, dimensions]) output = frappe.get_list(doctype, fields=fields, filters=query_filters, or_filters=or_filters, as_list=1) return [tuple(d) for d in set(output)]