Пример #1
0
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)]
Пример #2
0
    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)
Пример #3
0
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)]