def insert(self, ignore_permissions=None): if ignore_permissions != None: self.ignore_permissions = ignore_permissions self.set("__islocal", True) if not self.has_permission("create"): self.raise_no_permission_to("create") self._set_defaults() self._set_docstatus_user_and_timestamp() self.check_if_latest() set_new_name(self) self.run_method("before_insert") self.set_parent_in_children() self.run_before_save_methods() self._validate() # run validate, on update etc. # parent if getattr(self.meta, "issingle", 0): self.update_single(self.get_valid_dict()) else: self.db_insert() # children for d in self.get_all_children(): d.db_insert() self.run_method("after_insert") self.run_post_save_methods() return self
def db_insert(self): """INSERT the document (with valid columns) in the database.""" if not self.name: # name will be set by document class in most cases set_new_name(self) d = self.get_valid_dict() columns = d.keys() try: frappe.db.sql("""insert into `tab{doctype}` ({columns}) values ({values})""".format( doctype = self.doctype, columns = ", ".join(["`"+c+"`" for c in columns]), values = ", ".join(["%s"] * len(columns)) ), d.values()) except Exception, e: if e.args[0]==1062: if "PRIMARY" in cstr(e.args[1]): if self.meta.autoname=="hash": # hash collision? try again self.name = None self.db_insert() return type, value, traceback = sys.exc_info() frappe.msgprint(_("Duplicate name {0} {1}").format(self.doctype, self.name)) raise frappe.DuplicateEntryError, (self.doctype, self.name, e), traceback elif "Duplicate" in cstr(e.args[1]): # unique constraint self.show_unique_validation_message(e) else: raise else: raise
def insert(self, ignore_permissions=None): if ignore_permissions!=None: self.ignore_permissions = ignore_permissions self.set("__islocal", True) if not self.has_permission("create"): self.raise_no_permission_to("create") self._set_defaults() self._set_docstatus_user_and_timestamp() self.check_if_latest() set_new_name(self) self.run_method("before_insert") self.set_parent_in_children() self.run_before_save_methods() self._validate() # run validate, on update etc. # parent if getattr(self.meta, "issingle", 0): self.update_single(self.get_valid_dict()) else: self.db_insert() # children for d in self.get_all_children(): d.db_insert() self.run_method("after_insert") self.run_post_save_methods() return self
def set_new_name(self, force=False): """Calls `frappe.naming.se_new_name` for parent and child docs.""" if self.flags.name_set and not force: return set_new_name(self) # set name for children for d in self.get_all_children(): set_new_name(d) self.flags.name_set = True
def db_insert(self): """INSERT the document (with valid columns) in the database.""" if not self.name: # name will be set by document class in most cases set_new_name(self) if not self.creation: self.creation = self.modified = now() self.created_by = self.modified_by = frappe.session.user # if doctype is "DocType", don't insert null values as we don't know who is valid yet d = self.get_valid_dict( convert_dates_to_str=True, ignore_nulls=self.doctype in DOCTYPES_FOR_DOCTYPE ) columns = list(d) try: frappe.db.sql( """INSERT INTO `tab{doctype}` ({columns}) VALUES ({values})""".format( doctype=self.doctype, columns=", ".join(["`" + c + "`" for c in columns]), values=", ".join(["%s"] * len(columns)), ), list(d.values()), ) except Exception as e: if frappe.db.is_primary_key_violation(e): if self.meta.autoname == "hash": # hash collision? try again frappe.flags.retry_count = (frappe.flags.retry_count or 0) + 1 if frappe.flags.retry_count > 5 and not frappe.flags.in_test: raise self.name = None self.db_insert() return frappe.msgprint( _("{0} {1} already exists").format(self.doctype, frappe.bold(self.name)), title=_("Duplicate Name"), indicator="red", ) raise frappe.DuplicateEntryError(self.doctype, self.name, e) elif frappe.db.is_unique_key_violation(e): # unique constraint self.show_unique_validation_message(e) else: raise self.set("__islocal", False)
def set_new_name(self, force=False, set_name=None, set_child_names=True): """Calls `frappe.naming.set_new_name` for parent and child docs.""" if self.flags.name_set and not force: return if set_name: self.name = set_name else: set_new_name(self) if set_child_names: # set name for children for d in self.get_all_children(): set_new_name(d) self.flags.name_set = True
def db_insert(self): set_new_name(self) d = self.get_valid_dict() columns = d.keys() try: frappe.db.sql("""insert into `tab{doctype}` ({columns}) values ({values})""".format( doctype = self.doctype, columns = ", ".join(["`"+c+"`" for c in columns]), values = ", ".join(["%s"] * len(columns)) ), d.values()) except Exception, e: if e.args[0]==1062: type, value, traceback = sys.exc_info() raise frappe.NameError, (self.doctype, self.name, e), traceback else: raise
def db_insert(self): set_new_name(self) d = self.get_valid_dict() columns = d.keys() try: frappe.db.sql( """insert into `tab{doctype}` ({columns}) values ({values})""".format( doctype=self.doctype, columns=", ".join(["`" + c + "`" for c in columns]), values=", ".join(["%s"] * len(columns))), d.values()) except Exception, e: if e.args[0] == 1062: type, value, traceback = sys.exc_info() raise frappe.NameError, (self.doctype, self.name, e), traceback else: raise
def db_insert(self): """INSERT the document (with valid columns) in the database.""" if not self.name: # name will be set by document class in most cases set_new_name(self) if not self.creation: self.creation = self.modified = now() self.created_by = self.modified_by = frappe.session.user # if doctype is "DocType", don't insert null values as we don't know if it is valid yet d = self.get_valid_dict(convert_dates_to_str=True, ignore_nulls = self.doctype in DOCTYPES_FOR_DOCTYPE) if hasattr(self.meta, "name_after_submit") and hasattr(self, "_draft_name"): if self.meta.name_after_submit and self._draft_name: d["_draft_name"] = self._draft_name columns = list(d) try: frappe.db.sql("""INSERT INTO `tab{doctype}` ({columns}) VALUES ({values})""".format( doctype = self.doctype, columns = ", ".join(["`"+c+"`" for c in columns]), values = ", ".join(["%s"] * len(columns)) ), list(d.values())) except Exception as e: if frappe.db.is_primary_key_violation(e): if self.meta.autoname=="hash": # hash collision? try again self.name = None self.db_insert() return frappe.msgprint(_("Duplicate name {0} {1}").format(self.doctype, self.name)) raise frappe.DuplicateEntryError(self.doctype, self.name, e) elif frappe.db.is_unique_key_violation(e): # unique constraint self.show_unique_validation_message(e) else: raise self.set("__islocal", False)
def db_insert(self): """INSERT the document (with valid columns) in the database.""" if not self.name: # name will be set by document class in most cases set_new_name(self) if not self.creation: self.creation = self.modified = now() self.created_by = self.modified_by = frappe.session.user d = self.get_valid_dict(convert_dates_to_str=True) columns = list(d) try: frappe.db.sql( """INSERT INTO `tab{doctype}` ({columns}) VALUES ({values})""".format(doctype=self.doctype, columns=", ".join( ["`" + c + "`" for c in columns]), values=", ".join(["%s"] * len(columns))), list(d.values())) except Exception as e: if frappe.db.is_primary_key_violation(e): if self.meta.autoname == "hash": # hash collision? try again self.name = None self.db_insert() return frappe.msgprint( _("Duplicate name {0} {1}").format(self.doctype, self.name)) raise frappe.DuplicateEntryError(self.doctype, self.name, e) elif frappe.db.is_unique_key_violation(e): # unique constraint self.show_unique_validation_message(e) else: raise self.set("__islocal", False)
def db_insert(self): """INSERT the document (with valid columns) in the database.""" if not self.name: # name will be set by document class in most cases set_new_name(self) if not self.creation: self.creation = self.modified = now() self.created_by = self.modifield_by = frappe.session.user d = self.get_valid_dict(convert_dates_to_str=True) columns = list(d) try: frappe.db.sql( """insert into `tab{doctype}` ({columns}) values ({values})""".format( doctype=self.doctype, columns=", ".join(["`" + c + "`" for c in columns]), values=", ".join(["%s"] * len(columns))), list(d.values())) except Exception as e: if e.args[0] == 1062: if "PRIMARY" in cstr(e.args[1]): if self.meta.autoname == "hash": # hash collision? try again self.name = None self.db_insert() return raise frappe.DuplicateEntryError(self.doctype, self.name, e) elif "Duplicate" in cstr(e.args[1]): # unique constraint self.show_unique_validation_message(e) else: raise else: raise self.set("__islocal", False)
def db_insert(self): """INSERT the document (with valid columns) in the database.""" if not self.name: # name will be set by document class in most cases set_new_name(self) if not self.creation: self.creation = self.modified = now() self.created_by = self.modifield_by = frappe.session.user d = self.get_valid_dict(convert_dates_to_str=True) columns = list(d) try: frappe.db.sql("""insert into `tab{doctype}` ({columns}) values ({values})""".format( doctype = self.doctype, columns = ", ".join(["`"+c+"`" for c in columns]), values = ", ".join(["%s"] * len(columns)) ), list(d.values())) except Exception as e: if e.args[0]==1062: if "PRIMARY" in cstr(e.args[1]): if self.meta.autoname=="hash": # hash collision? try again self.name = None self.db_insert() return raise frappe.DuplicateEntryError(self.doctype, self.name, e) elif "Duplicate" in cstr(e.args[1]): # unique constraint self.show_unique_validation_message(e) else: raise else: raise self.set("__islocal", False)
def set_new_name(self, force=False, set_name=None, set_child_names=True): """Calls `frappe.naming.set_new_name` for parent and child docs.""" if self.flags.name_set and not force: return # If autoname has set as Prompt (name) if self.get("__newname"): self.name = validate_name(self.doctype, self.get("__newname")) self.flags.name_set = True return if set_name: self.name = validate_name(self.doctype, set_name) else: set_new_name(self) if set_child_names: # set name for children for d in self.get_all_children(): set_new_name(d) self.flags.name_set = True
def set_new_name(self): """Calls `frappe.naming.se_new_name` for parent and child docs.""" set_new_name(self) # set name for children for d in self.get_all_children(): set_new_name(d)
def set_name_in_children(self): # Set name for any new children for d in self.get_all_children(): if not d.name: set_new_name(d)
def process_insurance_coverages(kwargs): company = kwargs items_list = get_insurance_coverage_items() coverage_plan_list = frappe.get_all( "Healthcare Insurance Coverage Plan", fields={"name", "nhif_scheme_id", "code_for_nhif_excluded_services"}, filters={ "insurance_company": ["like", "NHIF%"], "is_active": 1, "company": company, }, ) for plan in coverage_plan_list: insert_data = [] time_stamp = now() user = frappe.session.user for item in items_list: if plan.nhif_scheme_id != item.schemeid: continue excluded_services = get_excluded_services(item.ref_code, company) if ( excluded_services and excluded_services.excludedforproducts and plan.code_for_nhif_excluded_services ): if ( plan.code_for_nhif_excluded_services in excluded_services.excludedforproducts ): continue user_excluded_products = get_custom_excluded_services(company, item.ref_code) if ( user_excluded_products and plan.code_for_nhif_excluded_services and plan.code_for_nhif_excluded_services in user_excluded_products ): continue doc = frappe.new_doc("Healthcare Service Insurance Coverage") doc.healthcare_service = item.dt doc.healthcare_service_template = item.healthcare_service_template doc.healthcare_insurance_coverage_plan = plan.name doc.company = company doc.coverage = 100 doc.end_date = "2099-12-31" doc.is_active = 1 doc.discount = 0 maximumquantity = 0 isrestricted = 0 price_package = get_price_package(item.ref_code, item.schemeid, company) if price_package: if ( price_package.maximumquantity and price_package.maximumquantity != "-1" ): maximumquantity = int(price_package.maximumquantity) if price_package.isrestricted: isrestricted = int(price_package.isrestricted) set_new_name(doc) insert_data.append( ( isrestricted, # doc.approval_mandatory_for_claim, doc.coverage, time_stamp, doc.discount, doc.end_date, doc.healthcare_insurance_coverage_plan, doc.healthcare_service, doc.healthcare_service_template, doc.is_active, isrestricted, # doc.manual_approval_only, maximumquantity, # doc.maximum_number_of_claims, time_stamp, user, doc.name, doc.naming_series, user, doc.start_date, 1, doc.company, ) ) if plan.name: frappe.db.sql( "DELETE FROM `tabHealthcare Service Insurance Coverage` WHERE is_auto_generated = 1 AND healthcare_insurance_coverage_plan = '{0}'".format( plan.name ) ) if insert_data: frappe.db.sql( """ INSERT INTO `tabHealthcare Service Insurance Coverage` ( `approval_mandatory_for_claim`, `coverage`, `creation`, `discount`, `end_date`, `healthcare_insurance_coverage_plan`, `healthcare_service`, `healthcare_service_template`, `is_active`, `manual_approval_only`, `maximum_number_of_claims`, `modified`, `modified_by`, `name`, `naming_series`, `owner`, `start_date`, `is_auto_generated`, `company` ) VALUES {} """.format( ", ".join(["%s"] * len(insert_data)) ), tuple(insert_data), ) frappe.db.commit()
def process_insurance_coverages(): items_list = get_insurance_coverage_items() coverage_plan_list = frappe.get_all("Healthcare Insurance Coverage Plan", filters={ "insurance_company_name": "NHIF", "is_active": 1 }) for plan in coverage_plan_list: insert_data = [] time_stamp = now() user = frappe.session.user for item in items_list: excluded_services = get_excluded_services(item.ref_code) if excluded_services and excluded_services.excludedforproducts: if plan.name in excluded_services.excludedforproducts: continue doc = frappe.new_doc("Healthcare Service Insurance Coverage") doc.healthcare_service = item.dt doc.healthcare_service_template = item.healthcare_service_template doc.healthcare_insurance_coverage_plan = plan.name doc.coverage = 100 doc.end_date = "2099-12-31" doc.is_active = 1 doc.discount = 0 maximumquantity = 0 isrestricted = 0 if excluded_services: price_package = get_price_package(item.ref_code, excluded_services.schemeid) if price_package: if price_package.maximumquantity and price_package.maximumquantity != "-1": maximumquantity = int(price_package.maximumquantity) if price_package.isrestricted: isrestricted = int(price_package.isrestricted) doc.maximum_number_of_claims = maximumquantity doc.approval_mandatory_for_claim = isrestricted doc.manual_approval_only = isrestricted set_new_name(doc) insert_data.append( (doc.approval_mandatory_for_claim, doc.coverage, time_stamp, doc.discount, doc.end_date, doc.healthcare_insurance_coverage_plan, doc.healthcare_service, doc.healthcare_service_template, doc.is_active, doc.manual_approval_only, doc.maximum_number_of_claims, time_stamp, user, doc.name, doc.naming_series, user, doc.start_date, 1)) frappe.db.sql( "DELETE FROM `tabHealthcare Service Insurance Coverage` WHERE is_auto_generated = 1 AND healthcare_insurance_coverage_plan = '{0}'" .format(plan.name)) frappe.db.sql( ''' INSERT INTO `tabHealthcare Service Insurance Coverage` ( `approval_mandatory_for_claim`, `coverage`, `creation`, `discount`, `end_date`, `healthcare_insurance_coverage_plan`, `healthcare_service`, `healthcare_service_template`, `is_active`, `manual_approval_only`, `maximum_number_of_claims`, `modified`, `modified_by`, `name`, `naming_series`, `owner`, `start_date`, `is_auto_generated` ) VALUES {} '''.format(', '.join(['%s'] * len(insert_data))), tuple(insert_data))
def set_new_name(self): set_new_name(self) # set name for children for d in self.get_all_children(): set_new_name(d)