def validate_search_index_fields(self): if not self.search_index_fields: return fields = self.search_index_fields.replace(' ', '') fields = unique(fields.strip(',').split( ',')) # Remove extra ',' and remove duplicates # All fields should be indexable allowed_indexable_fields = get_indexable_web_fields() if not (set(fields).issubset(allowed_indexable_fields)): invalid_fields = list( set(fields).difference(allowed_indexable_fields)) num_invalid_fields = len(invalid_fields) invalid_fields = comma_and(invalid_fields) if num_invalid_fields > 1: frappe.throw( _("{0} are not valid options for Search Index Field."). format(frappe.bold(invalid_fields))) else: frappe.throw( _("{0} is not a valid option for Search Index Field."). format(frappe.bold(invalid_fields))) self.search_index_fields = ','.join(fields)
def get_fields(doctype, fields=[]): meta = frappe.get_meta(doctype) fields.extend(meta.get_search_fields()) if meta.title_field and not meta.title_field.strip() in fields: fields.insert(1, meta.title_field.strip()) return unique(fields)
def build_for_autosuggest(res): results = [] for r in res: print r out = {"value": r[0], "description": ", ".join(unique(cstr(d) for d in r if d)[0:])} results.append(out) return results
def create_task_and_notify_user(self): # create the task for the given project and assign to the concerned person holiday_list = self.get_holiday_list() for activity in self.activities: if activity.task: continue dates = self.get_task_dates(activity, holiday_list) task = frappe.get_doc({ "doctype": "Task", "project": self.project, "subject": activity.activity_name + " : " + self.employee_name, "description": activity.description, "department": self.department, "company": self.company, "task_weight": activity.task_weight, "exp_start_date": dates[0], "exp_end_date": dates[1], }).insert(ignore_permissions=True) activity.db_set("task", task.name) users = [activity.user] if activity.user else [] if activity.role: user_list = frappe.db.sql_list( """ SELECT DISTINCT(has_role.parent) FROM `tabHas Role` has_role LEFT JOIN `tabUser` user ON has_role.parent = user.name WHERE has_role.parenttype = 'User' AND user.enabled = 1 AND has_role.role = %s """, activity.role, ) users = unique(users + user_list) if "Administrator" in users: users.remove("Administrator") # assign the task the users if users: self.assign_task_to_users(task, users)
def build_for_autosuggest(res): results = [] for r in res: out = { 'value': r[0], "description": ",".join(unique(cstr(d) for d in r)[1:-1]), "title": r[-1] } results.append(out) return results
def build_for_autosuggest(res, doctype): meta = frappe.get_meta(doctype) results = [] for r in res: r = list(r) if not (meta.title_field and meta.show_title_field_in_link ) or doctype in (frappe.get_hooks().standard_queries or {}): out = { "value": r[0], "description": ", ".join(unique(cstr(d) for d in r[1:] if d)) } else: out = { "value": r[0], "label": r[1], "description": ", ".join(unique(cstr(d) for d in r[2:] if d)) } results.append(out) return results
def update_delivery_trip_status(payment_amount, sales_invoice): delivery_stops = frappe.get_all("Delivery Stop", filters={ "sales_invoice": sales_invoice, "docstatus": 1 }, fields=["parent", "name"]) delivery_trips = unique([stop.parent for stop in delivery_stops]) delivery_stops = unique([stop.name for stop in delivery_stops]) for trip in delivery_trips: trip_doc = frappe.get_doc("Delivery Trip", trip) for stop in trip_doc.delivery_stops: if stop.name in delivery_stops: frappe.db.set_value("Delivery Stop", stop.name, "paid_amount", payment_amount) frappe.db.set_value("Delivery Stop", stop.name, "visited", 1) if stop.delivery_note: frappe.db.set_value("Delivery Note", stop.delivery_note, "status", "Completed")
def build_for_autosuggest(res): results = [] description = [] for r in res: for idx, value in enumerate(r): if idx == 0: out = {"value": value} elif str(value).find("<img") != -1: out.update({"image": value}) else: description.append(value) out.update({"description": ", ".join(unique(cstr(d) for d in description if d))}) results.append(out) return results
def set_per_picked(self): """ Set Percentage Picked(per_picked)in Sales Order on the basis of Pick List created. """ all_orders = [d.sales_order for d in self.locations] for order in unique(all_orders): picked_qty = sum(d.picked_qty for d in self.locations if d.sales_order == order and d.picked_qty) ordered_qty = sum(d.qty for d in self.locations if d.sales_order == order and d.qty) per_picked = (picked_qty / ordered_qty) * 100 frappe.db.set_value("Sales Order", self.locations[0].sales_order, "per_picked", per_picked, update_modified=False)
def update(self, dn, tl): """updates the _user_tag column in the table""" if not tl: tags = '' else: tl = unique(filter(lambda x: x, tl)) tags = ',' + ','.join(tl) try: frappe.db.sql("update `tab%s` set _user_tags=%s where name=%s" % \ (self.dt,'%s','%s'), (tags , dn)) doc= frappe.get_doc(self.dt, dn) update_tags(doc, tags) except Exception as e: if frappe.db.is_column_missing(e): if not tags: # no tags, nothing to do return self.setup() self.update(dn, tl) else: raise