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()
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)
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" })
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)))
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)
def setup_properties(self): if self.data.properties: for args in self.data.properties: dataent.make_property_setter(args)