Exemple #1
0
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