Ejemplo n.º 1
0
 def getTimeRangeOffice(self, date, personId):
     atcAmbulance = 'amb'
     etcTimeTable = '0'
     timeRange = ('--:--', '--:--')
     office = u''
     times = []
     queue = []
     db = QtGui.qApp.db
     eventTypeId = getEventType(etcTimeTable).eventTypeId
     eventTable = db.table('Event')
     cond = [
         eventTable['deleted'].eq(0),
         eventTable['eventType_id'].eq(eventTypeId),
         eventTable['execDate'].eq(date),
         eventTable['execPerson_id'].eq(personId)
     ]
     event = db.getRecordEx(eventTable, '*', cond)
     if event:
         eventId = forceRef(event.value('id'))
         action = CAction.getAction(eventId, atcAmbulance)
         begTime = action['begTime']
         endTime = action['endTime']
         office = action['office']
         times = action['times']
         queue = action['queue']
         if begTime and endTime:
             timeRange = begTime.toString(
                 'H:mm') + ' - ' + endTime.toString('H:mm')
     return timeRange, office, times, queue
Ejemplo n.º 2
0
 def saveData(self):
     if self.action and self.eventId:
         times = self.action['times']
         lenItems = len(self.items)
         diff = lenItems - len(times)
         if diff < 0:
             self.items.extend([None] * (-diff))
         elif diff > 0:
             times.extend([None] * diff)
         for row in xrange(lenItems):
             itemTime = self.items[row][0]
             times[row] = forceTime(itemTime)
         self.action['times'] = times
         db = QtGui.qApp.db
         db.transaction()
         try:
             self.saveDataNumbers(self.date.day() - 1)
             db.commit()
             if self.actionTypeCode == constants.atcAmbulance:
                 self.tableItems[CTimeTableModel.ciAmbChange] = False
             elif self.actionTypeCode == constants.atcHome:
                 self.tableItems[CTimeTableModel.ciHomeChange] = False
             self.action = CAction.getAction(self.eventId,
                                             self.actionTypeCode)
         except:
             db.rollback()
             QtGui.qApp.logCurrentException()
             raise
Ejemplo n.º 3
0
 def getTimeRange(actionTypeCode, date, personId):
     timeRange = ('--:--', '--:--')
     db = QtGui.qApp.db
     eventTypeId = getEventType(etcTimeTable).eventTypeId
     eventTable = db.table('Event')
     cond = [
         eventTable['deleted'].eq(0),
         eventTable['eventType_id'].eq(eventTypeId),
         eventTable['execDate'].eq(date),
         eventTable['execPerson_id'].eq(personId)
     ]
     event = db.getRecordEx(eventTable, '*', cond)
     if event:
         eventId = forceRef(event.value('id'))
         action = CAction.getAction(eventId, actionTypeCode)
         begTime = action['begTime']
         endTime = action['endTime']
         if begTime and endTime:
             timeRange = begTime.toString(
                 'H:mm') + ' - ' + endTime.toString('H:mm')
     return timeRange
Ejemplo n.º 4
0
    def processResults(self, results):
        defaultEventTypeId = forceRef(
            self.db.translate('EventType', 'code', '001', 'id'))
        tableJobTicket = self.db.table('Job_Ticket').alias('jt')
        tableAction = self.db.table('Action').alias('a')
        currentDate = QDate.currentDate()
        for i in range(results.length()):
            result = results.at(i)
            localId = result.firstChildElement('ido').text()
            externalId = result.firstChildElement('idi').text()
            tests = result.firstChildElement('tests')
            if not tests:
                continue

            test = tests.firstChildElement('test')
            if not test:
                continue
            dateString = test.firstChildElement('date').text()
            date = QDate.fromString(dateString, Qt.ISODate)
            value = test.firstChildElement('value').text()
            status = test.firstChildElement('status').text()
            comment = test.firstChildElement('comment').text()
            if localId:
                stmt = u'''SELECT
                  a.id as actionId, Event.id as eventId
                FROM Job_Ticket jt
                  INNER JOIN Job j
                    ON j.id = jt.master_id AND jt.status = 0
                  INNER JOIN rbJobType jt1 ON jt1.code = '4-4' AND jt1.id= j.jobType_id
                  INNER JOIN ActionProperty_Job_Ticket apjt
                    ON apjt.value = jt.id
                  INNER JOIN ActionProperty ap ON ap.id = apjt.id
                  INNER JOIN Action a ON a.id = ap.action_id AND a.deleted = 0
                  INNER JOIN Event ON Event.id = a.event_id AND Event.deleted = 0
                  INNER JOIN Client c ON c.id = Event.client_id AND c.deleted = 0
                WHERE %s'''
                cond = [
                    self.tableEvent['client_id'].eq(forceRef(localId)),
                    tableJobTicket['datetime'].dateEq(date),
                    tableAction['actionType_id'].eq(self.actionType)
                ]
                query = self.db.query(stmt % self.db.joinAnd(cond))
                if not query.first():
                    continue
                record = query.record()
                eventId = forceRef(record.value('eventId'))
                action = CAction.getAction(eventId, u'А06.09.007.002*')
                actionRecord = action.getRecord()
                endDate = forceDate(actionRecord.value('endDate'))
                if not endDate:
                    actionRecord.setValue('endDate', toVariant(currentDate))
                actionRecord.setValue(
                    'status',
                    toVariant(2 if status == 1 else 3 if status == 2 else 0))
                action[u'Результат'] = externalId + u' ' + value
                action[u'Описание'] = comment
                action.setRecord(actionRecord)
                action.save()

            elif defaultEventTypeId:
                localId = self._mapIDOtoIDI.get(externalId, None)
                if localId is None:
                    print 'Error: found test result without information about client. Skipping.'
                    continue

                self.db.transaction()
                try:
                    eventRecord = self.tableEvent.newRecord()
                    eventRecord.setValue('eventType_id',
                                         toVariant(defaultEventTypeId))
                    eventRecord.setValue('client_id', toVariant(localId))
                    eventRecord.setValue('setDate', toVariant(date))
                    eventRecord.setValue('isPrimary', toVariant(1))
                    eventRecord.setValue('order', toVariant(1))
                    eventId = self.db.insertRecord('Event', eventRecord)

                    action = CAction.createByTypeId(self.actionType)
                    actionRecord = action.getRecord()
                    if not actionRecord:
                        actionRecord = self.tableAction.newRecord()
                        actionRecord.setValue('actionType_id',
                                              toVariant(self.actionType))
                    actionRecord.setValue(
                        'status',
                        toVariant(2 if status == 1 else 3 if status ==
                                  2 else 0))
                    actionRecord.setValue('begDate', toVariant(date))
                    actionRecord.setValue('endDate', toVariant(currentDate))
                    action[u'Результат'] = externalId + ' ' + value
                    action[u'Описание'] = comment
                    action.setRecord(actionRecord)
                    action.save(eventId)
                    self.db.commit()
                except:
                    self.db.rollback()
                    raise
Ejemplo n.º 5
0
 def loadData(self, ciChange, gaps=None):
     event = getEvent(constants.etcTimeTable, self.date, self.personId)
     if event:
         self.eventId = forceRef(event.value('id'))
         self.action = CAction.getAction(self.eventId, self.actionTypeCode)
         if self.action:
             queue = self.action['queue']
         else:
             queue = []
         notQueue = True
         for clientId in queue:
             if clientId:
                 notQueue = False
                 break
         if ciChange:
             if notQueue:
                 if self.actionTypeCode == constants.atcAmbulance:
                     office = self.tableItems[CTimeTableModel.ciAmbOffice]
                     timeRange = self.tableItems[
                         CTimeTableModel.ciAmbTimeRange]
                     timeRange1 = self.tableItems[
                         CTimeTableModel.ciAmbTimeRange1]
                     timeRange2 = self.tableItems[
                         CTimeTableModel.ciAmbTimeRange2]
                     if timeRange1 and timeRange2:
                         result = calcTimePlan(
                             timeRange1,
                             self.tableItems[CTimeTableModel.ciAmbPlan1],
                             self.personId,
                             True,
                             result=[],
                             interval=self.tableItems[
                                 CTimeTableModel.ciAmbInterval1])
                         result = calcTimePlan(
                             timeRange2,
                             self.tableItems[CTimeTableModel.ciAmbPlan2],
                             self.personId, True, result, self.tableItems[
                                 CTimeTableModel.ciAmbInterval2])
                         times = result
                     else:
                         times = calcTimePlan(
                             timeRange,
                             self.tableItems[CTimeTableModel.ciAmbPlan],
                             self.personId,
                             True,
                             result=[],
                             interval=self.tableItems[
                                 CTimeTableModel.ciAmbInterval])
                 elif self.actionTypeCode == constants.atcHome:
                     office = u'на дому'
                     timeRange = self.tableItems[
                         CTimeTableModel.ciHomeTimeRange]
                     timeRange1 = self.tableItems[
                         CTimeTableModel.ciHomeTimeRange1]
                     timeRange2 = self.tableItems[
                         CTimeTableModel.ciHomeTimeRange2]
                     if timeRange1 and timeRange2:
                         result = calcTimePlan(
                             timeRange1,
                             self.tableItems[CTimeTableModel.ciHomePlan1],
                             self.personId,
                             True,
                             result=[],
                             interval=self.tableItems[
                                 CTimeTableModel.ciHomeInterval1])
                         result = calcTimePlan(
                             timeRange2,
                             self.tableItems[CTimeTableModel.ciHomePlan2],
                             self.personId, True, result, self.tableItems[
                                 CTimeTableModel.ciHomeInterval2])
                         times = result
                     else:
                         times = calcTimePlan(
                             timeRange,
                             self.tableItems[CTimeTableModel.ciHomePlan],
                             self.personId,
                             True,
                             result=[],
                             interval=self.tableItems[
                                 CTimeTableModel.ciHomeInterval])
             else:
                 if self.actionTypeCode == constants.atcAmbulance:
                     office = self.action['office']
                 else:
                     office = u'на дому'
                 times = self.action['times']
         else:
             if self.action:
                 if self.actionTypeCode == constants.atcAmbulance:
                     office = self.action['office']
                 else:
                     office = u'на дому'
                 times = self.action['times']
             else:
                 office = u''
                 times = []
                 queue = []
     else:
         office = u''
         times = []
         queue = []
     try:
         if ciChange:
             if times:
                 lenQueue = len(queue) if queue else 0
                 diff = len(times) - lenQueue
                 if diff < 0:
                     times.extend([None] * (-diff))
                 elif diff > 0:
                     queue.extend([None] * diff)
                 for row in xrange(len(times)):
                     time = times[row] if row < len(times) else None
                     queueBusy = queue[row] if (
                         queue and row < len(queue)) else None
                     item = [
                         time,
                         forceString(office),
                         forceString(queueBusy)
                     ]
                     self.items.append(item)
         else:
             diff = len(times) - len(queue)
             if diff < 0:
                 times.extend([None] * (-diff))
             elif diff > 0:
                 queue.extend([None] * diff)
             for row in xrange(len(queue)):
                 time = times[row] if row < len(times) else None
                 queueBusy = queue[row] if row < len(queue) else None
                 item = [time, forceString(office), forceString(queueBusy)]
                 self.items.append(item)
     finally:
         self.reset()