# coding: utf-8 from java.util import ArrayList import json from nci._nci_orm import edu_organizationCursor, org_addressCursor, person_edu_organizationCursor, org_activity_kindCursor from ru.curs.celesta.showcase.utils import XMLJSONConverter from security.functions import userHasPermission from com.jayway.jsonpath import JsonPath from nci.functions.persons import getPersonIdBySid try: from ru.curs.showcase.core.selector import ResultSelectorData from ru.beta2.extra.gwt.ui.selector.api import DataRecord except: pass def procListAndCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curValue=None, startsWith=None, firstRecord=None, recordCount=None): '''ListAndCount для edu_organization''' org_activity_kind = org_activity_kindCursor(context) edu_organization = edu_organizationCursor(context) edu_organization.orderBy('name') edu_organization.setFilter('name', "@%s'%s'%%" % ("%"*(not startsWith), curValue)) edu_organization.limit(firstRecord, recordCount) org_set = set() # org_activity_kind.setFilter('kind_id','4|5') # for org in org_activity_kind.iterate(): # org_set.add(org.org_id) # if org_set: # edu_organization.setFilter('uid',"|".join(["'%s'"%id for id in org_set])) # else: # edu_organization.setRange('uid','0') count = edu_organization.count() recordList = ArrayList() for row in edu_organization.iterate(): record = DataRecord() record.id = str(row.uid) record.name = row.shortname recordList.add(record) return ResultSelectorData(recordList, count) def eduList(context, main=None, add=None, filterinfo=None, session=None, params=None, curValue=None, startsWith=None, firstRecord=None, recordCount=None): '''Список организаций''' sid = JsonPath.read(session, "$.sessioncontext.sid") org_address = org_addressCursor(context) edu_organization = edu_organizationCursor(context) org_activity_kind = org_activity_kindCursor(context) recordList = ArrayList() if params: filter_data = json.loads(XMLJSONConverter.xmlToJson(params))["schema"]["filter"] if not isinstance(filter_data, list): filter_data = [filter_data] for filter_item in filter_data: if filter_item.get("region_id"): org_address.setRange("region_id", filter_item["region_id"]) elif filter_item.get("city_id"): org_address.setRange("city_id", filter_item["city_id"]) address_list = [] for org_address in org_address.iterate(): address_list.append("'%s'" % org_address.address_id) if address_list: edu_organization.setFilter("address_id", "|".join(address_list)) # доп. проверка, вообще в селектор пользователь не должен попадать, если нет разрешения if not userHasPermission(context, sid, "allEduOrgCourse"): person_org = person_edu_organizationCursor(context) person_org.setRange("person_id", getPersonIdBySid(context, sid)) if not person_org.count(): context.error(u"Обратитесь к администратору для приписывания к образовательной организации") edu_list = [] for person_org in person_org.iterate(): edu_list.append("'%s'" % person_org.edu_organization_id) edu_organization.setFilter("uid", "|".join(edu_list)) # else: # org_set = set() # # org_activity_kind.setFilter('kind_id','4|5') # for org in org_activity_kind.iterate(): # org_set.add(org.org_id) # if org_set: # edu_organization.setFilter('uid',"|".join(["'%s'"%id for id in org_set])) # else: # edu_organization.setRange('uid','0') if not edu_organization.count(): context.error(u"Нет доступных образовательных учреждений") edu_organization.orderBy('name') edu_organization.setFilter('name', "@%s'%s'%%" % ("%"*(not startsWith), curValue)) edu_organization.limit(firstRecord, recordCount) for edu_organization in edu_organization.iterate(): record = DataRecord() record.id = str(edu_organization.uid) record.name = edu_organization.shortname if edu_organization.address_id: org_address.get(edu_organization.address_id) record.addParameter("address", org_address.address) record.addParameter("region_id", org_address.region_id) record.addParameter("region_name", org_address.region_name) record.addParameter("city_id", org_address.city_id) record.addParameter("city_name", org_address.city_name) record.addParameter("website", edu_organization.website) record.addParameter("abbreviation", edu_organization.abbreviation) record.addParameter("phone", edu_organization.phone) record.addParameter("email", edu_organization.email) recordList.add(record) return ResultSelectorData(recordList, 0) def eduCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curValue=None, startsWith=None): '''Счетчик организаций''' sid = JsonPath.read(session, "$.sessioncontext.sid") org_address = org_addressCursor(context) edu_organization = edu_organizationCursor(context) org_activity_kind = org_activity_kindCursor(context) if params: filter_data = json.loads(XMLJSONConverter.xmlToJson(params))["schema"]["filter"] if not isinstance(filter_data, list): filter_data = [filter_data] for filter_item in filter_data: if filter_item.get("region_id"): org_address.setRange("region_id", filter_item["region_id"]) elif filter_item.get("city_id"): org_address.setRange("city_id", filter_item["city_id"]) address_list = [] if not userHasPermission(context, sid, "allEduOrgCourse"): person_org = person_edu_organizationCursor(context) person_org.setRange("person_id", getPersonIdBySid(context, sid)) if not person_org.count(): context.error(u"Обратитесь к администратору для приписывания к образовательной организации") edu_list = [] for person_org in person_org.iterate(): edu_list.append("'%s'" % person_org.edu_organization_id) edu_organization.setFilter("uid", "|".join(edu_list)) # else: # org_set = set() # # org_activity_kind.setFilter('kind_id','4|5') # for org in org_activity_kind.iterate(): # org_set.add(org.org_id) # if org_set: # edu_organization.setFilter('uid',"|".join(["'%s'"%id for id in org_set])) # else: # edu_organization.setRange('uid','0') for org_address in org_address.iterate(): address_list.append("'%s'" % org_address.address_id) if address_list: edu_organization.setFilter("address_id", "|".join(address_list)) edu_organization.setFilter('name', "@%s'%s'%%" % ("%"*(not startsWith), curValue)) return ResultSelectorData(None, edu_organization.count())