Ejemplo n.º 1
0
def get_kpi_by_kpi_code(args):
    try:
        collection = common.get_collection('TMLS_KPI')
        ret = collection.aggregate([
        {'$lookup': {
            'foreignField': 'value', 
            'as': 'val', 
            'from': common.get_collection_name_with_schema('SYS_VW_ValueList'),
            'localField': 'cycle_type'
            }
        }, 
        {'$unwind': {
            'path': '$val', 
            'preserveNullAndEmptyArrays': True
            }
        }, 
        {'$match': {   
            '$and':[{
                        '$or' :[{ 'val.list_name':None},
                                { 'val.list_name':'LCycleType'}]
                    },
                    {
                        '$or' :[{ 'val.language':None},
                                { 'val.language': common.get_language()}]
                    }]
            }
        },
        {'$lookup': {
            'foreignField': 'unit_code', 
            'as': 'unit', 
            'from': common.get_collection_name_with_schema('HCSLS_Unit'), 
            'localField': 'unit_code'
            }
        }, 
        {'$unwind': {
            'path': '$unit', 
            'preserveNullAndEmptyArrays': True
            }
        }, 
        {'$project': {
            'kpi_name': '$kpi_name', 
            'is_apply_all': '$is_apply_all', 
            'kpi_desc': '$kpi_desc', 
            'cycle_type': { '$ifNull': [ '$val.caption', '' ] }, 
            'kpi_code': { '$ifNull': [ '$kpi_code', '' ] }, 
            'weight': '$weight', 
            'unit_code': { '$ifNull': [ '$unit.unit_name', '' ] }, 
            'lock': '$lock', 
            'benchmark': { '$ifNull': [ '$benchmark', '' ] },
            'score_from': { '$ifNull': [ '$score_from', '' ] },
            'score_to': { '$ifNull': [ '$score_to', '' ] }
            }
        }, 
        {'$match': {'lock': {'$ne': True}, 'kpi_code':{'$eq':args['data']['kpi_code']}}}])

        return (lambda x: x[0] if x != None and len(x) > 0 else None)(list(ret))
    except Exception as ex:
        raise(ex)
Ejemplo n.º 2
0
def getListRankcode(args):
    ret = {}
    collection = common.get_collection('TMLS_Rank').aggregate([
        {"$lookup":{'from':common.get_collection_name_with_schema('TMPER_AprPeriodRank'), 'localField':'rank_code', 'foreignField':'rank_code', 'as': 'rr'}},
        {"$unwind":{'path':'$rr', "preserveNullAndEmptyArrays":True}},
        {"$project": {
            "rank_code": 1,
            "rank_name": 1,
            "ordinal": 1,
            "percent": { "$ifNull": ["$rr.percent", "0"] },
        }}
        ])
        
    ret = list(collection)
    return ret
Ejemplo n.º 3
0
def get_list_distinct_approval_year_and_period(args):
    ret = {}
    collection = common.get_collection('TMPER_AprPeriod').aggregate([{
        "$lookup": {
            'from': common.get_collection_name_with_schema('SYS_VW_ValueList'),
            'localField': 'apr_period',
            'foreignField': 'value',
            'as': 'aprPeriod'
        }
    }, {
        "$unwind": {
            'path': '$aprPeriod',
            "preserveNullAndEmptyArrays": True
        }
    }, {
        "$match": {
            "$and": [{
                'aprPeriod.list_name': "LApprovalPeriod"
            }, {
                'aprPeriod.language': quicky.language.get_language()
            }]
        }
    }, {
        "$project": {
            "apr_period_a": {
                "$ifNull": ["$aprPeriod.caption", ""]
            },
            "apr_year_a": {
                '$toString': "$apr_year"
            },
            "apr_period": {
                '$toString': "$apr_period"
            },
            "apr_year": 1
        }
    }, {
        "$project": {
            "caption": {
                '$concat': ["$apr_year_a", " / ", "$apr_period_a"]
            },
            "value": {
                '$concat': ["$apr_year_a", "__", "$apr_period"]
            },
            "apr_year": 1,
            "apr_period": {
                '$toInt': "$apr_period"
            },
        }
    }, {
        "$sort":
        SON([("apr_year", -1), ("apr_period", -1)])
    }])

    ret = list(collection)
    ret1 = []
    if (args['data'] != None
            and args['data'].has_key('apr_period' and 'apr_year')):
        for x in ret:
            if (x['apr_period'] == args['data']['apr_period']
                    and x['apr_year'] == args['data']['apr_year']):
                continue
            else:
                collection1 = common.get_collection(
                    'TMPER_AprPeriodEmpOut').aggregate([
                        {
                            "$match": {
                                "$and": [{
                                    'apr_year': x['apr_year']
                                }, {
                                    'apr_period': x['apr_period']
                                }]
                            }
                        },
                    ])
                if (len(list(collection1)) == 0):
                    ret1.append(x)
        item_list = [e for e in ret if e not in ret1]
        return item_list
Ejemplo n.º 4
0
def get_function_list_by_permission(username):
    role_code = models.auth_user_info.aggregate \
        .project(
        username=1,
        role_code=1
    ) \
        .match("username == {0}", username).get_item()

    ret = common.get_collection('SYS_FunctionList').aggregate([{
        "$lookup": {
            "from":
            common.get_collection_name_with_schema("AD_Roles"),
            "let": {
                "function_id": "$function_id",
                "type": "$type"
            },
            "pipeline": [{
                "$unwind": {
                    "path": "$permission",
                    "preserveNullAndEmptyArrays": False
                }
            }, {
                "$match": {
                    "$expr": {
                        "$or": [{
                            "$eq":
                            ["$permission.function_id", "$$function_id"]
                        }]
                    }
                }
            }, {
                "$project": {
                    "role_code": 1,
                    "read": "$permission.read"
                }
            }],
            "as":
            "role"
        }
    }, {
        "$match": {
            "$expr": {
                "$or": [
                    {
                        "$eq": ["$type", "Image"]
                    },
                    {
                        "$ne": ["$role", []]
                    },
                ]
            }
        }
    }, {
        "$unwind": {
            "path": "$role",
            "preserveNullAndEmptyArrays": True
        }
    }, {
        "$match": {
            "$or": [{
                "role.role_code": role_code.get("role_code", None),
                "role.read": True,
            }, {
                "$or": [{
                    "parent_id": None
                }, {
                    "type": "Image"
                }, {
                    "parent_id": -1
                }]
            }]
        }
    }, {
        "$project": {
            "_id": 0,
            "function_id": 1
        }
    }])

    fnl = list(ret)

    if len(fnl) > 0:
        return [x['function_id'] for x in fnl]
    return []
Ejemplo n.º 5
0
def get_list_module(args):
    item = common.get_collection('HCSSYS_Modules')
    ret_item = item.aggregate([{
        "$match": {
            "$and": [{
                "module_type": "portal"
            }, {
                "module_code": {
                    "$ne": "PortalMain"
                }
            }, {
                "is_active": True
            }]
        }
    }])
    data = list(ret_item)
    max_url = max(it["url"] for it in data)
    max_redirect_url = max(it["redirect_url"] for it in data)

    if (args["data"] == None or args["data"].has_key("language") == False
            or args["data"]["language"] == None):
        return dict()

    lang = args["data"]["language"]

    if (lang == "vi"):
        lang = 'vn'

    lang = lang.upper()

    collection = common.get_collection('HCSSYS_Modules')

    ret = collection.aggregate([{
        "$sort": {
            "sorting": 1
        }
    }, {
        "$match": {
            "$and": [{
                "$or": [{
                    "module_type": "application"
                }, {
                    "module_code": "PortalMain" if len(data) > 0 else ""
                }]
            }, {
                "is_active": True
            }]
        }
    }, {
        "$lookup": {
            "from":
            common.get_collection_name_with_schema('HCSSYS_FunctionListLabel'),
            "let": {
                "module_code": "$module_code"
            },
            "pipeline": [{
                "$match": {
                    "$expr": {
                        "$and": [{
                            "$eq": ["$language", lang]
                        }, {
                            "$eq": ["$function_id", "$$module_code"]
                        }, {
                            "$eq": ["$application", "HCSSYS_Modules"]
                        }]
                    }
                }
            }, {
                "$project": {
                    "function_id": 1,
                    "language": 1,
                    "default_name": 1,
                    "custom_name": 1,
                    "description": 1
                }
            }],
            "as":
            "stockdata"
        }
    }, {
        "$unwind": "$stockdata"
    }, {
        "$project": {
            "module_code": 1,
            "module_name": 1,
            "module_type": 1,
            "url": 1,
            "redirect_url": 1,
            "is_active": 1,
            "sorting": 1,
            "is_new_tab": 1,
            "default_name": "$stockdata.default_name",
            "custom_name": "$stockdata.custom_name",
            "description": "$stockdata.description",
            "function_id": "$stockdata.function_id",
        }
    }])
    dt_main = list(ret)
    if (len(dt_main) > 0 and len(dt_main) == 1):
        dt_it = [x for x in dt_main if x["module_code"] == "PortalMain"]
        dt_it[0]["url"] = max_url
        dt_it[0]["redirect_url"] = max_redirect_url

    return dt_main
Ejemplo n.º 6
0
def get_list_kpi(args):
    searchText = args['data'].get('search', '')
    page_size = args['data'].get('pageSize', 0)
    page_index = args['data'].get('pageIndex', 20)
    sort = args['data'].get('sort', 20)

    collection = common.get_collection('TMLS_KPI')
    ret = collection.aggregate([{
        '$lookup': {
            'foreignField': 'value',
            'as': 'val',
            'from': common.get_collection_name_with_schema('SYS_VW_ValueList'),
            'localField': 'cycle_type'
        }
    }, {
        '$unwind': {
            'path': '$val',
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$match': {
            '$and': [{
                '$or': [{
                    'val.list_name': None
                }, {
                    'val.list_name': 'LCycleType'
                }]
            }, {
                '$or': [{
                    'val.language': None
                }, {
                    'val.language': common.get_language()
                }]
            }]
        }
    }, {
        '$lookup': {
            'foreignField': 'unit_code',
            'as': 'unit',
            'from': common.get_collection_name_with_schema('HCSLS_Unit'),
            'localField': 'unit_code'
        }
    }, {
        '$unwind': {
            'path': '$unit',
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$lookup': {
            'foreignField': 'kpi_group_code',
            'as': 'kpig',
            'from': common.get_collection_name_with_schema('TMLS_KPIGroup'),
            'localField': 'kpi_group_code'
        }
    }, {
        '$unwind': {
            'path': '$kpig',
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$project': {
            'kpi_name': '$kpi_name',
            'is_apply_all': '$is_apply_all',
            'kpi_desc': '$kpi_desc',
            'cycle_type': {
                '$ifNull': ['$val.caption', '']
            },
            'kpi_code': '$kpi_code',
            'level_code': '$kpig.level_code',
            'weight': '$weight',
            'unit_code': {
                '$ifNull': ['$unit.unit_name', '']
            },
            'lock': '$lock',
            'benchmark': {
                '$ifNull': ['$benchmark', '']
            },
            'score_from': {
                '$ifNull': ['$score_from', '']
            },
            'score_to': {
                '$ifNull': ['$score_to', '']
            }
        }
    }, {
        '$match': {
            'lock': {
                '$ne': True
            },
            'level_code': {
                '$eq': args['data']['kpi_group_code']
            }
        }
    }, {
        '$sort': common.aggregate_sort(sort)
    }, {
        "$facet": {
            "metadata": [{
                "$count": "total"
            }, {
                "$addFields": {
                    "page_index": page_index,
                    "page_size": page_size
                }
            }],
            "data": [{
                "$skip": page_size * page_index
            }, {
                "$limit": page_size
            }]
        }
    }, {
        "$unwind": {
            "path": '$metadata',
            "preserveNullAndEmptyArrays": False
        }
    }, {
        "$project": {
            'page_size': '$metadata.page_size',
            'page_index': '$metadata.page_index',
            'total_items': '$metadata.total',
            'items': '$data'
        }
    }])

    return (lambda x: x[0] if x != None and len(x) > 0 else {
        'page_size': page_size,
        'page_index': page_index,
        'total_items': 0,
        'items': []
    })(list(ret))
Ejemplo n.º 7
0
def get_employee_list_by_department(dept_code, active, page_size, page_index,
                                    sort, search, ignore):
    if (active == "0"):
        active = {"$match": {"emp.active": {"$eq": True}}}
    elif (active == "1"):
        active = {"$match": {"emp.active": {"$ne": True}}}
    else:
        active = {
            "$match": {
                "$or": [{
                    "emp.active": {
                        "$ne": True
                    }
                }, {
                    "emp.active": {
                        "$eq": True
                    }
                }]
            }  #get all
        }

    rs = list(
        common.get_collection('SYS_ValueList').aggregate([{
            "$match": {
                "list_name": "LGender"
            }
        }, {
            "$unwind": {
                "path": "$values",
                "preserveNullAndEmptyArrays": False
            }
        }, {
            "$lookup": {
                "from":
                common.get_collection_name_with_schema("HCSEM_Employees"),
                "localField": "values.value",
                "foreignField": "gender",
                "as": "emp"
            }
        }, {
            "$unwind": {
                "path": "$emp",
                "preserveNullAndEmptyArrays": True
            }
        }, {
            "$lookup": {
                "from":
                common.get_collection_name_with_schema("HCSSYS_Departments"),
                "localField":
                "emp.department_code",
                "foreignField":
                "department_code",
                "as":
                "dept"
            }
        }, {
            "$unwind": {
                "path": "$dept",
                "preserveNullAndEmptyArrays": False
            }
        }, {
            "$match": {
                "dept.level_code": dept_code
            }
        }, active, {
            "$match": {
                "emp.employee_code": {
                    "$nin": ignore
                }
            }
        }, {
            "$project": {
                "full_name": {
                    "$concat": ["$emp.last_name", " ", "$emp.first_name"]
                },
                "employee_code": "$emp.employee_code",
                "gender": "$values.caption",
                "job_w_code": "$emp.job_w_code",
                "join_date": "$emp.join_date",
                "department_code": "$emp.department_code",
                "department_name": "$dept.department_name",
                "photo_id": "$emp.photo_id",
                "last_name": "$emp.last_name",
                "first_name": "$emp.first_name",
                "extra_name": "$emp.extra_name",
                "birthday": "$emp.birthday",
                "b_province_code": "$emp.b_province_code",
                "nation_code": "$emp.nation_code",
                "ethnic_code": "$emp.ethnic_code",
                "religion_code": "$emp.religion_code",
                "culture_id": "$emp.culture_id",
                "is_retrain": "$emp.is_retrain",
                "train_level_code": "$emp.train_level_code",
                "marital_code": "$emp.marital_code",
                "id_card_no": "$emp.id_card_no",
                "issued_date": "$emp.issued_date",
                "issued_place_code": "$emp.issued_place_code",
                "mobile": "$emp.mobile",
                "p_phone": "$emp.p_phone",
                "email": "$emp.email",
                "personal_email": "$emp.personal_email",
                "document_no": "$emp.document_no",
                "official_date": "$emp.official_date",
                "career_date": "$emp.career_date",
                "personnel_date": "$emp.personnel_date",
                "emp_type_code": "$emp.emp_type_code",
                "labour_type": "$emp.labour_type",
                "job_pos_code": "$emp.job_pos_code",
                "job_pos_date": "$emp.job_pos_date",
                "job_w_date": "$emp.job_w_date",
                "profession_code": "$emp.profession_code",
                "level_management": "$emp.level_management",
                "is_cbcc": "$emp.is_cbcc",
                "is_expert_recruit": "$emp.is_expert_recruit",
                "is_expert_train": "$emp.is_expert_train",
                "manager_code": "$emp.manager_code",
                "manager_sub_code": "$emp.manager_sub_code",
                "user_id": "$emp.user_id",
                "job_pos_hold_code": "$emp.job_pos_hold_code",
                "job_w_hold_code": "$emp.job_w_hold_code",
                "department_code_hold": "$emp.department_code_hold",
                "job_pos_hold_from_date": "$emp.job_pos_hold_from_date",
                "job_pos_hold_to_date": "$emp.job_pos_hold_to_date",
                "end_date": "$emp.end_date",
                "retire_ref_no": "$emp.retire_ref_no",
                "signed_date": "$emp.signed_date",
                "signed_person": "$emp.signed_person",
                "active": "$emp.active",
                "note": "$emp.note",
                "p_address": "$emp.p_address",
                "p_province_code": "$emp.p_province_code",
                "p_district_code": "$emp.p_district_code",
                "p_ward_code": "$emp.p_ward_code",
                "p_hamlet_code": "$emp.p_hamlet_code",
                "t_address": "$emp.t_address",
                "t_province_code": "$emp.t_province_code",
                "t_district_code": "$emp.t_district_code",
                "t_ward_code": "$emp.t_ward_code",
                "t_hamlet_code": "$emp.t_hamlet_code",
                "foreigner": "$emp.foreigner",
                "vn_foreigner": "$emp.vn_foreigner",
                "is_not_reside": "$emp.is_not_reside",
                "fo_working": "$emp.fo_working",
                "fo_permiss": "$emp.fo_permiss",
                "fo_begin_date": "$emp.fo_begin_date",
                "fo_end_date": "$emp.fo_end_date"
            }
        }, {
            "$match": {
                "$or": [{
                    "full_name": {
                        "$regex": search,
                        "$options": 'i'
                    }
                }, {
                    "employee_code": {
                        "$regex": search,
                        "$options": 'i'
                    }
                }, {
                    "gender": {
                        "$regex": search,
                        "$options": 'i'
                    }
                }, {
                    "job_w_code": {
                        "$regex": search,
                        "$options": 'i'
                    }
                }, {
                    "join_date": {
                        "$regex": search,
                        "$options": 'i'
                    }
                }, {
                    "department_name": {
                        "$regex": search,
                        "$options": 'i'
                    }
                }]
            }
        }, {
            "$sort": sort
        }, {
            "$facet": {
                "metadata": [{
                    "$count": "total"
                }, {
                    "$addFields": {
                        "page_index": page_index,
                        "page_size": page_size
                    }
                }],
                "data": [{
                    "$skip": page_size * page_index
                }, {
                    "$limit": page_size
                }]
            }
        }, {
            "$unwind": {
                "path": '$metadata',
                "preserveNullAndEmptyArrays": False
            }
        }, {
            "$project": {
                'page_size': '$metadata.page_size',
                'page_index': '$metadata.page_index',
                'total_items': '$metadata.total',
                'items': '$data',
            }
        }]))

    if len(rs) > 0:
        return rs[0]
    return {
        'page_size': page_size,
        'page_index': page_index,
        'total_items': 0,
        'items': [],
    }
Ejemplo n.º 8
0
def get_list_module(args):
    if (args["data"] == None or args["data"].has_key("language") == False
            or args["data"]["language"] == None):
        return dict()

    lang = args["data"]["language"]

    if (lang == "vi"):
        lang = 'vn'

    lang = lang.upper()

    collection = common.get_collection('HCSSYS_Modules')

    ret = collection.aggregate([{
        "$sort": {
            "sorting": 1
        }
    }, {
        "$match": {
            "module_type": "portal"
        }
    }, {
        "$lookup": {
            "from":
            common.get_collection_name_with_schema('HCSSYS_FunctionListLabel'),
            "let": {
                "module_code": "$module_code"
            },
            "pipeline": [{
                "$match": {
                    "$expr": {
                        "$and": [{
                            "$eq": ["$language", lang]
                        }, {
                            "$eq": ["$function_id", "$$module_code"]
                        }, {
                            "$eq": ["$application", "HCSSYS_Modules"]
                        }]
                    }
                }
            }, {
                "$project": {
                    "function_id": 1,
                    "language": 1,
                    "default_name": 1,
                    "custom_name": 1,
                    "description": 1
                }
            }],
            "as":
            "stockdata"
        }
    }, {
        "$unwind": "$stockdata"
    }, {
        "$project": {
            "module_code": 1,
            "module_name": 1,
            "module_type": 1,
            "url": 1,
            "redirect_url": 1,
            "is_active": 1,
            "sorting": 1,
            "is_new_tab": 1,
            "default_name": "$stockdata.default_name",
            "custom_name": "$stockdata.custom_name",
            "description": "$stockdata.description",
            "function_id": "$stockdata.function_id",
        }
    }])

    #ret = models.HCSSYS_Modules().aggregate()
    #ret.match("module_type == {0}", "portal")
    #ret.sort({"sorting": 1})
    #ret.left_join()
    #ret.project(
    #    module_code = 1,
    #    module_name = 1,
    #    module_type = 1,
    #    url = 1,
    #    redirect_url = 1,
    #    is_active = 1,
    #    sorting = 1,
    #    is_new_tab = 1,
    #    lb = 1
    #)
    return list(ret)
Ejemplo n.º 9
0
def get_list_with_select_node(args):
    searchText = args['data'].get('search', '')
    pageSize = args['data'].get('pageSize', 0)
    pageIndex = args['data'].get('pageIndex', 20)
    sort = args['data'].get('sort', 20)

    pageIndex = (lambda pIndex: pIndex if pIndex != None else 0)(pageIndex)
    pageSize = (lambda pSize: pSize if pSize != None else 20)(pageSize)
    collection = common.get_collection('LMSLS_ExQuestionCategory')
    where = args['data'].get('where')
    arrayData = []
    match = {}
    if (where['folder_id'] != None or searchText != None):
        match = {"$match": {}}
    if (where['folder_id'] != None):
        match["$match"]["level_code"] = where['folder_id']

    if (searchText != None):
        match["$match"]["folder_name"] = {"$regex": ".*" + searchText + "*"}

    if (where['folder_id'] != None or searchText != None):
        arrayData.append(match)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'created_by',
            "foreignField": 'username',
            "as": 'us'
        }
    }
    arrayData.append(lookup)
    arrayData.append({
        "$project": {
            "folder_id": 1,
            "folder_name": 1,
            "folder_name2": 1,
            "parent_id": 1,
            "parent_code": 1,
            "level": 1,
            "level_code": 1,
            "ordinal": 1,
            "lock": 1,
            "note": 1,
            "moderator_id": 1,
            "approver_id": 1,
            "active": 1,
            "permisions": 1,
            "approve_type": 1,
            "created_on": 1,
            "created_by": "$us.login_account",
            "modified_on": 1,
            "modified_by": 1
        }
    })

    if (sort != None):
        arrayData.append({"$sort": sort})
    ret = collection.aggregate(arrayData)
    return dict(items=list(ret),
                page_index=pageIndex,
                page_size=pageSize,
                total_items=list(ret).__len__())
Ejemplo n.º 10
0
def get_list_category_question(args):
    searchText = args['data'].get('search', '')
    pageSize = args['data'].get('pageSize', 0)
    pageIndex = args['data'].get('pageIndex', 20)
    sort = args['data'].get('sort', 20)
    where = args['data'].get('where')
    collection = common.get_collection('LMSLS_ExQuestionCategory')
    arrayData = []

    lookup = {
        "$lookup": {
            "from": "lv.LMSLS_ExQuestionBank",
            "localField": "category_id",
            "foreignField": "ques_category",
            "as": "ques",
        },
    }
    arrayData.append(lookup)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'created_by',
            "foreignField": 'username',
            "as": 'uc'
        },
    }
    arrayData.append(lookup)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'modified_by',
            "foreignField": 'username',
            "as": 'um'
        },
    }
    arrayData.append(lookup)

    arrayData.append({'$unwind': '$uc'})
    arrayData.append(
        {"$unwind": {
            'path': '$um',
            "preserveNullAndEmptyArrays": True
        }})

    arrayData.append({
        "$project": {
            "category_id": 1,
            "category_name": 1,
            "category_name2": 1,
            "created_on": 1,
            "created_by": "$uc.login_account",
            "modified_on": 1,
            'modified_by': {
                "$ifNull": ["$um.login_account", ""]
            },
            "active": 1,
            "note": 1,
            "order": 1,
            "ques": 1,
        }
    })

    if (sort != None):
        arrayData.append({"$sort": sort})
    ret = list(collection.aggregate(arrayData))
    return dict(items=ret,
                page_index=pageIndex,
                page_size=pageSize,
                total_items=ret.__len__())
Ejemplo n.º 11
0
def get_list_with_searchtext(args):
    searchText = args['data'].get('search', '')
    pageSize = args['data'].get('pageSize', 0)
    pageIndex = args['data'].get('pageIndex', 20)
    sort = args['data'].get('sort', 20)

    pageIndex = (lambda pIndex: pIndex if pIndex != None else 0)(pageIndex)
    pageSize = (lambda pSize: pSize if pSize != None else 20)(pageSize)

    collection = common.get_collection('TMLS_Competency')
    ret = collection.aggregate([{
        '$lookup': {
            'foreignField': 'value',
            'as': 'val_aft',
            'from': common.get_collection_name_with_schema('SYS_VW_ValueList'),
            'localField': 'apr_form_type'
        }
    }, {
        '$unwind': {
            'path': '$val_aft',
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$match': {
            '$and': [{
                '$or': [{
                    'val_aft.list_name': None
                }, {
                    'val_aft.list_name': 'PERF_AproveFormType'
                }]
            }, {
                '$or': [{
                    'val_aft.language': None
                }, {
                    'val_aft.language': common.get_language()
                }]
            }]
        }
    }, {
        '$lookup': {
            'foreignField': 'value',
            'as': 'val_pst',
            'from': SYS_VW_ValueList().get_collection_name(),
            'localField': 'point_scale_type'
        }
    }, {
        '$unwind': {
            'path': '$val_pst',
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$match': {
            '$and': [{
                '$or': [{
                    'val_pst.list_name': None
                }, {
                    'val_pst.list_name': 'PERF_PointScaleType'
                }]
            }, {
                '$or': [{
                    'val_pst.language': None
                }, {
                    'val_pst.language': common.get_language()
                }]
            }]
        }
    }, {
        '$lookup': {
            'foreignField': 'com_group_code',
            'as': 'group',
            'from':
            common.get_collection_name_with_schema('TMLS_CompetencyGroup'),
            'localField': 'com_group_code'
        }
    }, {
        '$unwind': {
            'path': '$group',
            'preserveNullAndEmptyArrays': True
        }
    }, {
        '$project': {
            'com_code': '$com_code',
            'level_code': '$group.level_code',
            'com_group_code': '$com_group_code',
            'com_name': '$com_name',
            'com_type': '$com_type',
            'apr_form_type': {
                '$ifNull': ['$val_aft.caption', '']
            },
            'point_scale_type': {
                '$ifNull': ['$val_pst.caption', '']
            },
            'ordinal': '$ordinal',
            'lock': '$lock'
        }
    }, {
        '$match': {
            'lock':
            common.aggregate_filter_lock(args['data']['lock']),
            'level_code': {
                '$eq': args['data']['com_group_code']
            },
            '$or': [(lambda x: {} if x == 0 else {
                "com_type": x
            })(args['data']['com_type'])]
        }
    }, {
        '$sort': common.aggregate_sort(sort)
    }, {
        "$facet": {
            "metadata": [{
                "$count": "total"
            }, {
                "$addFields": {
                    "page_index": pageIndex,
                    "page_size": pageSize
                }
            }],
            "data": [{
                "$skip": pageSize * pageIndex
            }, {
                "$limit": pageSize
            }]
        }
    }, {
        "$unwind": {
            "path": '$metadata',
            "preserveNullAndEmptyArrays": False
        }
    }, {
        "$project": {
            'page_size': '$metadata.page_size',
            'page_index': '$metadata.page_index',
            'total_items': '$metadata.total',
            'items': '$data'
        }
    }])
    return (lambda x: x[0] if x != None and len(x) > 0 else {
        'page_size': pageSize,
        'page_index': pageIndex,
        'total_items': 0,
        'items': []
    })(list(ret))
Ejemplo n.º 12
0
def get_list_performance_standanrd(args):
    try:
        search = args['data'].get('search', '')
        if search == None:
            search = ""
        page_size = args['data'].get('pageSize', 0)
        page_index = args['data'].get('pageIndex', 20)
        sort = args['data'].get('sort', 20)
        collection = common.get_collection('HCSLS_JobWorking')
        ret = collection.aggregate([
            {
                '$unwind': {
                    'path': '$kpi',
                    'preserveNullAndEmptyArrays': False
                }
            },
            {
                '$project': {
                    'job_w_code': '$job_w_code',
                    'rec_id': '$kpi.rec_id',
                    'kpi_code': '$kpi.kpi_code',
                    'cycle_type': "$kpi.cycle",
                    'weight': '$kpi.weight',
                    'unit_code': "$kpi.unit",
                    'description': '$kpi.description',
                    #'standard_mark': '$kpi.standard_mark',
                    'score_from': '$kpi.score_from',
                    'score_to': '$kpi.score_to',
                    'note': "$kpi.note",
                    'created_by': '$kpi.created_by',
                    'created_on': "$kpi.created_on",
                    'modified_by': '$kpi.modified_by',
                    'modified_on': "$kpi.modified_on"
                }
            },
            {
                '$lookup': {
                    'foreignField':
                    'value',
                    'as':
                    'val',
                    'from':
                    common.get_collection_name_with_schema('SYS_VW_ValueList'),
                    'localField':
                    'cycle_type'
                }
            },
            {
                '$unwind': {
                    'path': '$val',
                    'preserveNullAndEmptyArrays': True
                }
            },
            {
                '$lookup': {
                    'foreignField':
                    'username',
                    'as':
                    'uc',
                    'from':
                    common.get_collection_name_with_schema('auth_user_info'),
                    'localField':
                    'created_by'
                }
            },
            {
                '$unwind': {
                    'path': '$uc',
                    'preserveNullAndEmptyArrays': True
                }
            },
            {
                '$lookup': {
                    'foreignField':
                    'username',
                    'as':
                    'um',
                    'from':
                    common.get_collection_name_with_schema('auth_user_info'),
                    'localField':
                    'modified_by'
                }
            },
            {
                '$unwind': {
                    'path': '$um',
                    'preserveNullAndEmptyArrays': True
                }
            },
            {
                '$match': {
                    '$and': [{
                        '$or': [{
                            'val.list_name': None
                        }, {
                            'val.list_name': 'LCycleType'
                        }]
                    }, {
                        '$or': [{
                            'val.language': None
                        }, {
                            'val.language': common.get_language()
                        }]
                    }]
                }
            },
            {
                '$lookup': {
                    'foreignField': 'unit_code',
                    'as': 'unit',
                    'from':
                    common.get_collection_name_with_schema('HCSLS_Unit'),
                    'localField': 'unit_code'
                }
            },
            {
                '$unwind': {
                    'path': '$unit',
                    'preserveNullAndEmptyArrays': True
                }
            },
            {
                '$lookup': {
                    'foreignField': 'kpi_code',
                    'as': 'h_kpi',
                    'from': common.get_collection_name_with_schema('TMLS_KPI'),
                    'localField': 'kpi_code'
                }
            },
            {
                '$unwind': {
                    'path': '$h_kpi',
                    'preserveNullAndEmptyArrays': True
                }
            },
            {
                '$project': {
                    'job_w_code': '$job_w_code',
                    'rec_id': '$rec_id',
                    'kpi_name': '$h_kpi.kpi_name',
                    'kpi_desc': {
                        '$ifNull': ['$h_kpi.kpi_desc', '']
                    },
                    'cycle_type': {
                        '$ifNull': ['$val.caption', '']
                    },
                    'cycle': '$cycle_type',
                    'kpi_code': {
                        '$ifNull': ['$kpi_code', '']
                    },
                    'weight': '$weight',
                    'unit': {
                        '$ifNull': ['$unit.unit_name', '']
                    },
                    'unit_code': '$unit',
                    'description': "$h_kpi.kpi_desc",
                    #'standard_mark': "$standard_mark",
                    'score_from': "$score_from",
                    'score_to': "$score_to",
                    'note': '$note',
                    'created_by': {
                        '$ifNull': ['$uc.login_account', '']
                    },
                    'created_on': "$created_on",
                    'modified_by': {
                        '$ifNull': ['$um.login_account', '']
                    },
                    'modified_on': "$modified_on"
                }
            },
            {
                '$match': {
                    "$and": [
                        {
                            "$or": [
                                {
                                    "kpi_name": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                },
                                {
                                    "unit_code": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                },
                                {
                                    "cycle_type": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                },
                                {
                                    "note": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                },
                                {
                                    "description": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                },
                                #{ "standard_mark": { "$regex": search, "$options": 'i' } },
                                {
                                    "score_from": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                },
                                {
                                    "score_to": {
                                        "$regex": search,
                                        "$options": 'i'
                                    }
                                }
                            ]
                        },
                        {
                            "job_w_code": args['data']['job_w_code']
                        }
                    ]
                }
            },
            {
                "$sort": common.aggregate_sort(sort)
            },
            {
                "$facet": {
                    "metadata": [{
                        "$count": "total"
                    }, {
                        "$addFields": {
                            "page_index": page_index,
                            "page_size": page_size
                        }
                    }],
                    "data": [{
                        "$skip": page_size * page_index
                    }, {
                        "$limit": page_size
                    }]
                }
            },
            {
                "$unwind": {
                    "path": '$metadata',
                    "preserveNullAndEmptyArrays": False
                }
            },
            {
                "$project": {
                    'page_size': '$metadata.page_size',
                    'page_index': '$metadata.page_index',
                    'total_items': '$metadata.total',
                    'items': '$data'
                }
            }
        ])

        return (lambda x: x[0] if x != None and len(x) > 0 else {
            "page_size": "",
            "page_index": "",
            "total_items": 0,
            "items": [],
        })(list(ret))
    except Exception as ex:
        raise (ex)
Ejemplo n.º 13
0
def get_list_with_searchtext_all(args):
    searchText = args['data'].get('search', '')
    pageSize = args['data'].get('pageSize', 0)
    pageIndex = args['data'].get('pageIndex', 20)
    sort = args['data'].get('sort', 20)
    where = args['data'].get('where')

    pageIndex = (lambda pIndex: pIndex if pIndex != None else 0)(pageIndex)
    pageSize = (lambda pSize: pSize if pSize != None else 20)(pageSize)
    collection = common.get_collection('LMSLS_Topic')

    arrayData = []
    match = {}

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'created_by',
            "foreignField": 'username',
            "as": 'uc'
        }
    }
    arrayData.append(lookup)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'modified_by',
            "foreignField": 'username',
            "as": 'um'
        }
    }
    arrayData.append(lookup)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("LMSLS_Forum"),
            "localField": 'forum_id',
            "foreignField": 'forum_id',
            "as": 'fr'
        }
    }
    arrayData.append(lookup)

    arrayData.append({"$unwind": "$uc"})
    arrayData.append(
        {"$unwind": {
            'path': '$um',
            "preserveNullAndEmptyArrays": True
        }})

    arrayData.append({"$unwind": "$fr"})

    if (where != None):
        match = {"$match": {}}
        if (where.has_key('parent_code')
                and (where['parent_code'] == None
                     or where['parent_code'] == '0')):  # là node cha
            if (where.has_key('forum_id')
                    and where['forum_id'] != None):  # kiểm tra id của node cha
                if (where['forum_id'] == 0
                        or where['forum_id'] == '0'):  # lấy all topic
                    pass
                elif (where['forum_id'] == 1 or where['forum_id']
                      == '1'):  # lấy topic của forum public
                    match["$match"]["fr.forum_type"] = True
                elif (where['forum_id'] == 2 or where['forum_id']
                      == '2'):  # lấy topic của forum private
                    match["$match"]["fr.forum_type"] = False
        else:
            if (where.has_key('forum_id') and where['forum_id'] != None):
                match["$match"]["forum_id"] = where['forum_id']

    arrayData.append({
        "$project": {
            'topic_id': 1,
            'topic_name': 1,
            'topic_name_other': 1,
            'forum_id': 1,
            'topic_description': 1,
            'publish': 1,
            'publish_date': 1,
            'allow_replies': 1,
            'topic_replies': 1,
            'topic_views': 1,
            'approved_by': 1,
            'rejected_on': 1,
            'rejected_by': 1,
            'topic_approved': 1,
            'feedback': 1,
            'topic_removed': 1,
            'created_on': 1,
            'created_by': "$uc.login_account",
            'fr': '$fr',
            'modified_on': 1,
            'modified_by': {
                "$ifNull": ["$um.login_account", ""]
            },
            'status': {
                "$cond": {
                    "if": {
                        "$and": [{
                            "$eq": ["$publish", False]
                        }, {
                            "$eq": ["$topic_removed", False]
                        }]
                    },
                    "then": 1,
                    "else": {
                        "$cond": {
                            "if": {
                                "$and": [{
                                    "$eq": ["$publish", True]
                                }, {
                                    "$eq": ["$topic_approved", None]
                                }, {
                                    "$eq": ["$topic_removed", False]
                                }]
                            },
                            "then": 2,
                            "else": {
                                "$cond": {
                                    "if": {
                                        "$and": [{
                                            "$eq": ["$publish", True]
                                        }, {
                                            "$eq": ["$topic_approved", True]
                                        }, {
                                            "$eq": ["$topic_removed", False]
                                        }, {
                                            "$lte": [{
                                                "$subtract": [
                                                    "$publish_date",
                                                    datetime.datetime.now()
                                                ]
                                            }, 1000 * 60 * 60 * 24]
                                        }]
                                    },
                                    "then": 3,
                                    "else": {
                                        "$cond": {
                                            "if": {
                                                "$and": [{
                                                    "$eq": ["$publish", True]
                                                }, {
                                                    "$eq":
                                                    ["$topic_approved", True]
                                                }, {
                                                    "$eq":
                                                    ["$topic_removed", False]
                                                }, {
                                                    "$gt": [{
                                                        "$subtract": [
                                                            "$publish_date",
                                                            datetime.datetime.
                                                            now()
                                                        ]
                                                    }, 1000 * 60 * 60 * 24]
                                                }]
                                            },
                                            "then": 4,
                                            "else": {
                                                "$cond": {
                                                    "if": {
                                                        "$and": [{
                                                            "$eq":
                                                            ["$publish", True]
                                                        }, {
                                                            "$eq": [
                                                                "$topic_approved",
                                                                False
                                                            ]
                                                        }, {
                                                            "$eq": [
                                                                "$topic_removed",
                                                                False
                                                            ]
                                                        }, {
                                                            "$lt": [{
                                                                "$subtract": [
                                                                    datetime.
                                                                    datetime.
                                                                    now(),
                                                                    "$rejected_on"
                                                                ]
                                                            }, 10 * 1000 * 60 *
                                                                    60 * 24]
                                                        }]
                                                    },
                                                    "then": 5,
                                                    "else": {
                                                        "$cond": {
                                                            "if": {
                                                                "$or": [{
                                                                    "$eq": [
                                                                        "$topic_removed",
                                                                        True
                                                                    ]
                                                                }, {
                                                                    "$gt": [{
                                                                        "$subtract":
                                                                        [
                                                                            datetime
                                                                            .
                                                                            datetime
                                                                            .
                                                                            now(
                                                                            ),
                                                                            "$rejected_on"
                                                                        ]
                                                                    }, 10 * 1000
                                                                            *
                                                                            60
                                                                            *
                                                                            60
                                                                            *
                                                                            24]
                                                                }]
                                                            },
                                                            "then": 6,
                                                            "else": "false"
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
        }
    })

    arrayData.append(match)

    if (searchText != None and searchText != ''):
        arrayData.append({
            "$match":
            qmongo.helpers.filter(
                "contains(topic_name, @name) or contains(topic_description, @name)",
                name=searchText).get_filter()
        })

    if (sort != None):
        arrayData.append({"$sort": sort})
    ret = collection.aggregate(arrayData)
    return dict(items=list(ret),
                page_index=pageIndex,
                page_size=pageSize,
                total_items=list(ret).__len__())
Ejemplo n.º 14
0
def get_list_with_searchtext_removed(args):

    searchText = args['data'].get('search', '')
    pageSize = args['data'].get('pageSize', 0)
    pageIndex = args['data'].get('pageIndex', 20)
    sort = args['data'].get('sort', 20)
    where = args['data'].get('where')

    pageIndex = (lambda pIndex: pIndex if pIndex != None else 0)(pageIndex)
    pageSize = (lambda pSize: pSize if pSize != None else 20)(pageSize)
    collection = common.get_collection('LMSLS_Topic')

    arrayData = []
    match = {}

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'created_by',
            "foreignField": 'username',
            "as": 'uc'
        }
    }
    arrayData.append(lookup)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("auth_user_info"),
            "localField": 'modified_by',
            "foreignField": 'username',
            "as": 'um'
        }
    }
    arrayData.append(lookup)

    lookup = {
        "$lookup": {
            "from": common.get_collection_name_with_schema("LMSLS_Forum"),
            "localField": 'forum_id',
            "foreignField": 'forum_id',
            "as": 'fr'
        }
    }
    arrayData.append(lookup)

    arrayData.append({"$unwind": "$uc"})
    arrayData.append({"$unwind": "$um"})
    arrayData.append({"$unwind": "$fr"})

    if (where != None):
        match = {
            "$match":
            qmongo.helpers.filter(
                "expr((({0}-rejected_on)/86400000)>10 or topic_removed=={1})",
                datetime.datetime.now(), True).get_filter()
        }
        if (where.has_key('parent_code')
                and (where['parent_code'] == None
                     or where['parent_code'] == '0')):  # là node cha
            if (where.has_key('forum_id')
                    and where['forum_id'] != None):  # kiểm tra id của node cha
                if (where['forum_id'] == 0
                        or where['forum_id'] == '0'):  #lấy all topic
                    pass
                elif (where['forum_id'] == 1 or where['forum_id']
                      == '1'):  # lấy topic của forum public
                    match["$match"]["fr.forum_type"] = True
                elif (where['forum_id'] == 2 or where['forum_id']
                      == '2'):  # lấy topic của forum private
                    match["$match"]["fr.forum_type"] = False
        else:
            if (where.has_key('forum_id') and where['forum_id'] != None):
                match["$match"]["forum_id"] = where['forum_id']

    arrayData.append({
        "$project": {
            'topic_id': 1,
            'topic_name': 1,
            'topic_name_other': 1,
            'forum_id': 1,
            'topic_description': 1,
            'publish': 1,
            'publish_date': 1,
            'allow_replies': 1,
            'topic_replies': 1,
            'topic_views': 1,
            'approved_by': 1,
            'approved_on': 1,
            'rejected_on': 1,
            'rejected_by': 1,
            'topic_approved': 1,
            'feedback': 1,
            'topic_removed': 1,
            'fr': '$fr',
            'created_on': 1,
            'created_by': "$uc.login_account",
            'modified_on': 1,
            'modified_by': "$um.login_account"
        }
    })

    if (searchText != None and searchText != ''):
        arrayData.append({
            "$match":
            qmongo.helpers.filter(
                "contains(topic_name, @name) or contains(topic_description, @name)",
                name=searchText).get_filter()
        })

    arrayData.append(match)

    if (sort != None):
        arrayData.append({"$sort": sort})
    ret = collection.aggregate(arrayData)
    return dict(items=list(ret),
                page_index=pageIndex,
                page_size=pageSize,
                total_items=list(ret).__len__())