Esempio n. 1
0
    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
Esempio n. 3
0
	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
Esempio n. 5
0
	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
Esempio n. 6
0
    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
Esempio n. 7
0
	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)
Esempio n. 8
0
	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
Esempio n. 9
0
	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
Esempio n. 10
0
    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
Esempio n. 11
0
	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)
Esempio n. 12
0
    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)
Esempio n. 13
0
    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)
Esempio n. 14
0
	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)
Esempio n. 15
0
	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
Esempio n. 16
0
 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)
Esempio n. 17
0
	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)
Esempio n. 18
0
	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)
Esempio n. 19
0
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()
Esempio n. 20
0
	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)
Esempio n. 21
0
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))
Esempio n. 22
0
 def set_new_name(self):
     set_new_name(self)
     # set name for children
     for d in self.get_all_children():
         set_new_name(d)
Esempio n. 23
0
	def set_new_name(self):
		set_new_name(self)
		# set name for children
		for d in self.get_all_children():
			set_new_name(d)