def get_archive_list(self, **kwargs): self.start_dt = kwargs.get('start_dt') self.end_dt = kwargs.get('end_dt') self.flt_client_id = safe_int(kwargs.get('client_id')) self.flt_external_id = kwargs.get('external_id') self.flt_not_in_archive = safe_bool(kwargs.get('not_in_archive')) self.flt_closed_only = True self.set_base_query() self._join_latest_location() self._join_location_org_structure() self._join_event_archive() self._join_quality_control() self.query = self.query.with_entities( self.BaseEvent, func.IF(self.MovingAction.id.isnot(None), self.LocationOSfromMoving.shortName, self.LocationOSfromReceived.shortName).label('os_name'), self.EventArchive.id.label('archive_id'), self.EventArchive.archive.label('archive'), self.QualityControlAction).order_by( func.IF(self.MovingAction.id.isnot(None), self.MovingAction_begDate, self.ReceivedAction_begDate).desc()).options( contains_eager(self.BaseEvent.client), ) return self.get_paginated(kwargs)
def get_latest_hosps(self, start_dt, end_dt, history, **kwargs): self.start_dt = start_dt self.end_dt = end_dt self.history = history self.hosp_status = safe_int(kwargs.get('hosp_status')) self.flt_org_struct_id = safe_int(kwargs.get('org_struct_id')) self.flt_client_id = safe_int(kwargs.get('client_id')) self.flt_exec_person_id = safe_int(kwargs.get('exec_person_id')) self.flt_external_id = kwargs.get('external_id') self.set_base_query() self._filter_by_latest_location() self._filter_by_status() self._join_location_org_structure() self._join_hosp_bed() self.query = self.query.with_entities( self.BaseEvent, self.MovingAction, self.ReceivedAction, func.IF(self.MovingAction.id.isnot(None), self.LocationOSfromMoving.name, self.LocationOSfromReceived.name).label('os_name'), self.MovingOSHB.name.label('hosp_bed_name')) self.query = self.query.order_by( func.IF(self.MovingAction.id.isnot(None), self.MovingAction_begDate, self.ReceivedAction_begDate).desc()) self.query = self.query.options( contains_eager(self.BaseEvent.client), lazyload('*'), joinedload(self.BaseEvent.execPerson), # load only attrs an action, that will be used later Load(self.MovingAction ).load_only('id', 'begDate', 'endDate', 'status', 'event_id', 'person_id', 'createPerson_id').joinedload( 'actionType').load_only('class_'), Load(self.MovingAction).contains_eager('event'), Load(self.ReceivedAction).load_only( 'id', 'begDate', 'endDate', 'status', 'event_id', 'person_id', 'createPerson_id').joinedload('actionType').load_only( 'class_'), Load(self.ReceivedAction).contains_eager('event')) return self.get_paginated(kwargs)
def get_hosps_without_doctor(self, start_dt, end_dt, history, **kwargs): self.start_dt = start_dt self.end_dt = end_dt self.history = history self.hosp_status = HospStateStatus.current[0] self.flt_org_struct_id = safe_int(kwargs.get('org_struct_id')) self.set_base_query() self._join_latest_location() self._filter_by_status() self.query = self.query.filter( self.BaseEvent.execPerson_id.is_(None)).with_entities( self.BaseEvent.id.distinct().label('event_id'), self.BaseClient.id.label('client_id'), self.BaseClient.firstName.label('first_name'), self.BaseClient.lastName.label('last_name'), self.BaseClient.patrName.label('patr_name'), ) return self.get_all()
def get_hosps_by_doctor_counts(self, start_dt, end_dt, history, **kwargs): self.start_dt = start_dt self.end_dt = end_dt self.history = history self.hosp_status = HospStateStatus.current[0] self.flt_org_struct_id = safe_int(kwargs.get('org_struct_id')) self.set_base_query() self._join_latest_location() self._filter_by_status() Person = self.model_provider.get('Person') self.query = self.query.join( Person, self.BaseEvent.execPerson_id == Person.id).group_by( self.BaseEvent.execPerson_id).with_entities( Person, func.count( self.BaseEvent.id.distinct()).label('count_events')) return self.get_all()
def get_hosps_status_counts(self, start_dt, end_dt, history, **kwargs): self.start_dt = start_dt self.end_dt = end_dt self.history = history self.hosp_status = safe_int(kwargs.get('hosp_status')) self.flt_org_struct_id = safe_int(kwargs.get('org_struct_id')) self.flt_client_id = safe_int(kwargs.get('client_id')) self.flt_exec_person_id = safe_int(kwargs.get('exec_person_id')) self.flt_external_id = kwargs.get('external_id') statuses = set(kwargs.get('statuses') or HospStateStatus.get_values()) self.set_base_query() self._join_latest_location() self._join_location_org_structure() self._join_moving_os_transfer() self._join_movings_transfered_through() self._join_leaved() self.query = self.query.filter( or_(self.MovingAction.id.isnot(None), self.ReceivedAction.id.isnot(None)), ).with_entities() if HospStateStatus.current[0] in statuses: # кол-во текущих self.query = self.query.add_column( func.SUM( func.IF( func.IF( self.MovingAction.id.isnot(None), and_( self.MovingAction_begDate < self.end_dt, or_(self.MovingAction_endDate.is_(None), self.end_dt <= self.MovingAction_endDate), func.IF( self.flt_org_struct_id is not None, self.LocationOSfromMoving.id == self.flt_org_struct_id, 1)), and_( self.ReceivedAction_begDate < self.end_dt, or_(self.ReceivedAction_endDate.is_(None), self.end_dt <= self.ReceivedAction_endDate), func.IF( self.flt_org_struct_id is not None, self.LocationOSfromReceived.id == self.flt_org_struct_id, 1))), 1, 0)).label('count_current')) if HospStateStatus.received[0] in statuses: # кол-во поступивших self.query = self.query.add_column( func.SUM( func.IF( func.IF( self.MovingAction.id.isnot(None), and_( self.MovingAction_begDate < self.end_dt, self.start_dt <= self.MovingAction_begDate, or_(self.MovingAction_endDate.is_(None), self.start_dt <= self.MovingAction_endDate), func.IF( self.flt_org_struct_id is not None, self.LocationOSfromMoving.id == self.flt_org_struct_id, 1)), and_( self.ReceivedAction_begDate < self.end_dt, self.start_dt <= self.ReceivedAction_begDate, or_( self.ReceivedAction_endDate.is_(None), self.start_dt <= self.ReceivedAction_endDate), func.IF( self.flt_org_struct_id is not None, self.LocationOSfromReceived.id == self.flt_org_struct_id, 1))), 1, 0)).label('count_received')) if HospStateStatus.transferred[0] in statuses: # кол-во переведенных self.query = self.query.add_column( func.SUM( func.IF( self.q_movings_transfered_through.c.event_id.isnot( None), 1, 0)).label('count_transferred')) if HospStateStatus.leaved[0] in statuses: # кол-во выписанных self.query = self.query.add_column( func.SUM( func.IF( and_(self.LeavedAction.id.isnot(None), self.MovingOrgStructTransfer.id.is_(None), self.MovingAction_begDate < self.end_dt, self.MovingAction_endDate >= self.start_dt, self.MovingAction_endDate < self.end_dt), 1, 0)).label('count_leaved')) return self.get_one()