예제 #1
0
    def validate(self):
        for key in [
                "item_naming_by", "item_group", "stock_uom",
                "allow_negative_stock", "default_warehouse",
                "set_qty_in_transactions_based_on_serial_no_input"
        ]:
            dataent.db.set_default(key, self.get(key, ""))

        from epaas.setup.doctype.naming_series.naming_series import set_by_naming_series
        set_by_naming_series("Item",
                             "item_code",
                             self.get("item_naming_by") == "Naming Series",
                             hide_name_field=True)

        stock_frozen_limit = 356
        submitted_stock_frozen = self.stock_frozen_upto_days or 0
        if submitted_stock_frozen > stock_frozen_limit:
            self.stock_frozen_upto_days = stock_frozen_limit
            dataent.msgprint(
                _("`Freeze Stocks Older Than` should be smaller than %d days.")
                % stock_frozen_limit)

        # show/hide barcode field
        for name in ["barcode", "barcodes", "scan_barcode"]:
            dataent.make_property_setter({
                'fieldname':
                name,
                'property':
                'hidden',
                'value':
                0 if self.show_barcode_field else 1
            })

        self.cant_change_valuation_method()
        self.validate_clean_description_html()
예제 #2
0
def execute():
    # deprecated on 2016-03-09
    # using insert_after instead
    return

    dataent.db.sql(
        """delete from `tabProperty Setter` where property='previous_field'""")

    all_custom_fields = dataent._dict()
    for d in dataent.db.sql(
            """select name, dt, fieldname, insert_after from `tabCustom Field`
		where insert_after is not null and insert_after != ''""",
            as_dict=1):
        all_custom_fields.setdefault(d.dt, dataent._dict()).setdefault(
            d.fieldname, d.insert_after)

    for dt, custom_fields in all_custom_fields.items():
        _idx = []
        existing_ps = dataent.db.get_value("Property Setter", {
            "doc_type": dt,
            "property": "_idx"
        }, ["name", "value", "creation"],
                                           as_dict=1)

        # if no existsing property setter, build based on meta
        if not existing_ps:
            _idx = get_sorted_fields(dt, custom_fields)
        else:
            _idx = json.loads(existing_ps.value)

            idx_needs_to_be_fixed = False
            for fieldname, insert_after in custom_fields.items():
                # Delete existing property setter if field is not there
                if fieldname not in _idx:
                    idx_needs_to_be_fixed = True
                    break
                else:
                    previous_field = _idx[_idx.index(fieldname) - 1]

                    if previous_field != insert_after and cstr(
                            existing_ps.creation) >= "2015-12-28":
                        idx_needs_to_be_fixed = True
                        break

            if idx_needs_to_be_fixed:
                dataent.delete_doc("Property Setter", existing_ps.name)
                _idx = get_sorted_fields(dt, custom_fields)

        if _idx:
            dataent.make_property_setter(
                {
                    "doctype": dt,
                    "doctype_or_field": "DocType",
                    "property": "_idx",
                    "value": json.dumps(_idx),
                    "property_type": "Text"
                },
                validate_fields_for_doctype=False)
예제 #3
0
def after_install():
    """Add Mandrill under Email Account Service options"""
    meta = dataent.get_meta("Email Account")
    options = filter(None, meta.get_field("service").options.split("\n"))
    options.append("Mandrill")
    options = [""] + sorted(list(set(options)))
    dataent.make_property_setter({
        "doctype": "Email Account",
        "fieldname": "service",
        "property": "options",
        "value": "\n".join(options),
        "property_type": "Text"
    })
예제 #4
0
def make_default(name):
    """Set print format as default"""
    dataent.has_permission("Print Format", "write")

    print_format = dataent.get_doc("Print Format", name)

    if (dataent.conf.get('developer_mode') or 0) == 1:
        # developer mode, set it default in doctype
        doctype = dataent.get_doc("DocType", print_format.doc_type)
        doctype.default_print_format = name
        doctype.save()
    else:
        # customization
        dataent.make_property_setter({
            'doctype_or_field': "DocType",
            'doctype': print_format.doc_type,
            'property': "default_print_format",
            'value': name,
        })

    dataent.msgprint(
        dataent._("{0} is now default print format for {1} doctype").format(
            dataent.bold(name), dataent.bold(print_format.doc_type)))
예제 #5
0
    def make_property_setter(self,
                             property,
                             value,
                             property_type,
                             fieldname=None):
        self.delete_existing_property_setter(property, fieldname)

        property_value = self.get_existing_property_value(property, fieldname)

        if property_value == value:
            return

        # create a new property setter
        # ignore validation becuase it will be done at end
        dataent.make_property_setter(
            {
                "doctype": self.doc_type,
                "doctype_or_field": "DocField" if fieldname else "DocType",
                "fieldname": fieldname,
                "property": property,
                "value": value,
                "property_type": property_type
            },
            ignore_validate=True)
예제 #6
0
파일: domain.py 프로젝트: dataent/dataent
	def setup_properties(self):
		if self.data.properties:
			for args in self.data.properties:
				dataent.make_property_setter(args)