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
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
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
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