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