def get_tasks(user=None, exclude=None, include=None): exclude = exclude or [] include = include or [] #tasks = Task.view("couchflow/usertask", include_docs=True) db = Task.get_db() items_tasks = db.view('couchflow/usertask2', include_docs=True) if user: start = [user._id] end = [user._id, {}] items, tasks = get_item_tasks(items_tasks[start:end]) else: items, tasks = get_item_tasks(items_tasks) tasks_dic = {} for task in tasks: if task: tasks_dic[task['_id']] = task if user: for group in user.groups: start = [group] end = [group, {}] group_items, group_tasks = get_item_tasks(items_tasks[start:end]) items.update(group_items) for task in group_tasks: tasks_dic[task['_id']] = task wf_tasks = {} for task in tasks_dic.values(): item = items[task['wfitems_ids'][0]] item["id"] = item["_id"] task["id"] = task["_id"] task["is_bulkable"] = is_bulkable(task) status = get_task_status(item) if not status: continue #wf = cache.get(task.workflow_id, None) #if not wf: # wf = WorkFlow.get(task.workflow_id) #wf_type = wf.workflow_type.split('_', 1)[0] wf_type = task['workflow_type'].split('_', 1)[0] if exclude and wf_type in exclude: continue if include and wf_type not in include: continue nro_pedido = item["order_nbr"] if nro_pedido not in wf_tasks: wf_tasks[nro_pedido] = [] wf_tasks[nro_pedido].append(nro_pedido) wf_tasks[nro_pedido].append(task) #save_tasks.append(task) tasks = [task for values in wf_tasks.values() for task in values] #db.bulk_save(save_tasks) return tasks