Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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()
Esempio n. 4
0
    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()
Esempio n. 5
0
    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()