示例#1
0
def get_ewi_recipients(site_ids=None, site_codes=None, alert_level=0):
    """
    Function that get ewi recipients per site
    """

    query = UsersRelationship.query.join(UserOrganizations).join(
        Sites).options(
            DB.subqueryload("mobile_numbers").joinedload("mobile_number",
                                                         innerjoin=True),
            DB.subqueryload("organizations").joinedload("site",
                                                        innerjoin=True),
            DB.subqueryload("organizations").joinedload("organization",
                                                        innerjoin=True),
            DB.raiseload("*")).filter(Users.ewi_recipient == 1)

    if site_ids:
        query = query.filter(Sites.site_id.in_(site_ids))

    if site_codes:
        query = query.filter(Sites.site_code.in_(site_codes))

    if alert_level != 0:
        uer = UserEwiRestrictions
        query = query.join(uer).filter(
            DB.or_(uer.user_id.is_(None), uer.alert_level < alert_level))

    user_per_site_query = query.all()
    user_per_site_result = UsersRelationshipSchema(
        many=True,
        exclude=["emails", "teams", "landline_numbers",
                 "ewi_restriction"]).dump(user_per_site_query).data

    return user_per_site_result
示例#2
0
def get_contacts_per_site(site_ids=None,
                          site_codes=None,
                          only_ewi_recipients=True,
                          include_ewi_restrictions=False,
                          org_ids=None,
                          return_schema_format=True,
                          include_inactive_numbers=False):
    """
    Function that get contacts per site
    """

    query = UsersRelationship.query.join(UserOrganizations).join(Sites).join(
        UserMobiles).options(
            DB.subqueryload("mobile_numbers").joinedload("mobile_number",
                                                         innerjoin=True),
            DB.subqueryload("organizations").joinedload("site",
                                                        innerjoin=True),
            DB.subqueryload("organizations").joinedload("organization",
                                                        innerjoin=True),
            DB.raiseload("*"))

    if site_ids:
        query = query.filter(Sites.site_id.in_(site_ids))

    if site_codes:
        query = query.filter(Sites.site_code.in_(site_codes))

    if org_ids:
        query = query.join(UserOrganizations).filter(
            UserOrganizations.org_id.in_(org_ids))

    if only_ewi_recipients:
        query = query.filter(Users.ewi_recipient == 1)

    schema_exclusions = [
        "emails", "teams", "landline_numbers", "ewi_restriction"
    ]

    if include_ewi_restrictions:
        # uer = UserEwiRestrictions
        query = query.options(DB.joinedload("ewi_restriction"))
        schema_exclusions.remove("ewi_restriction")

    if not include_inactive_numbers:
        query = query.filter(UserMobiles.status == 1)

    user_per_site_result = query.all()

    if return_schema_format:
        user_per_site_result = UsersRelationshipSchema(
            many=True, exclude=schema_exclusions) \
            .dump(user_per_site_result).data

    return user_per_site_result
示例#3
0
def get_recipients_for_ground_meas(site_recipients):
    """
    Function that get recipient per site
    """
    feedback = []
    for row in site_recipients:
        site_ids = row["site_ids"]
        user_per_site_result = []

        if site_ids:
            user_per_site_query = UsersRelationship.query \
                .join(UserOrganizations) \
                .join(Sites) \
                .join(UserMobiles) \
                .options(
                    DB.subqueryload("mobile_numbers").joinedload(
                        "mobile_number", innerjoin=True),
                    DB.subqueryload("organizations").joinedload(
                        "site", innerjoin=True),
                    DB.subqueryload("organizations").joinedload(
                        "organization", innerjoin=True),
                    DB.raiseload("*")
                ).filter(
                    Users.ewi_recipient == 1, Sites.site_id.in_(site_ids),
                    UserOrganizations.org_id == 1, UserMobiles.status == 1
                ).all()

            user_per_site_result = UsersRelationshipSchema(
                many=True,
                exclude=[
                    "emails", "teams", "landline_numbers", "ewi_restriction",
                    "mobile_numbers.mobile_number.blocked_mobile"
                ]).dump(user_per_site_query).data

        row["recipients"] = user_per_site_result
        feedback.append(row)

    return feedback
示例#4
0
def include_loading(include_list):
    """
    Helper function that returns a list of SQLAlchemy
    load relationships - either raiseload or subqueryload
    depending on relationship
    """
    relationship_list = []
    for include_item in include_list:
        prop = PROP_DICT[include_item[0]]
        relationship = getattr(UsersRelationship, prop)
        rel = DB.raiseload(relationship)
        if include_item[1]:
            rel = DB.subqueryload(relationship)

        relationship_list.append(rel)

    return relationship_list