def get_record_data(self, record_id=None, rdate=None): """ Description: Метод получения данных для инициализации полей формы существующей записью, включая расширенные состояния при наличии """ if not record_id and rdate: try: record_id = self.record_set.filter(date=rdate)[0].id except IndexError: return None if record_id: data = {} rec = self.record_set.get(pk=record_id) data['date'] = rec.date.strftime('%d.%m.%Y') data['work'] = stat_timedelta(rec.work) data['pusk_cnt'] = rec.pusk_cnt data['ostanov_cnt'] = rec.ostanov_cnt if self.extended_stat: # сначала инициализация всего набора for state in EXT_STATE_DATA: data[state] = '0:00' # потом ненулевых состояний for state_item in rec.stateitem_set.all(): data[state_item.state.lower()] = stat_timedelta(state_item.time_in_state) return data else: return None
def get_data(self): """ Метод подготовки всех данных записи и выдачи в виде словаря. Продолжительность приведена в строках """ rec_data = {'record_id': self.id} for name in STANDARD_STATE_DATA: rec_data[name] = self.__getattribute__[name] rec_data.update(dict.fromkeys(EXT_STATE_DATA, '0:00')) for ext_state in self.stateitem_set.all(): rec_data[ext_state.state.lower()] = stat_timedelta(ext_state.time_in_state) return rec_data
def get_state_summary(self, date_from=None, date_to=None): """ Description: Метод подсчета базовой статистики, возможно, от определенной даты """ if self.record_set.count(): recs = self.record_set if date_from: recs = recs.filter(date__gte=date_from) if date_to: recs = recs.exclude(date__gte=date_to) stat = "wd=%s,psk=%d,ost=%d" % ( stat_timedelta(recs.aggregate(models.Sum('work'))['work__sum']), recs.aggregate(models.Sum('pusk_cnt'))['pusk_cnt__sum'], recs.aggregate(models.Sum('ostanov_cnt'))['ostanov_cnt__sum'],) else: stat = "wd=00:00,psk=0,ost=0" return stat
def get_records_on_dates(unit_tree, start_date, days_cnt): """ Метод класса Record готовит словарь словарей наработки оборудования из журналов (тех, что имеют статистику) на даты для дерева оборудования """ res = {} date_list = [ (start_date + timedelta(days=dc)).strftime("%Y-%m-%d") for dc in range(days_cnt) ] res.update(dict(dates=date_list)) recordsDataSet = Record.objects.filter(date__in=date_list) for uitem, ident in unit_tree: try: journal_key = str(uitem.journal.id) work_on_dates_dict = {} for rec in recordsDataSet.filter(journal_id=uitem.journal.id).all(): date_key = rec.date.strftime("%Y-%m-%d") work_on_dates_dict.update({date_key: stat_timedelta(rec.work)}) res.update({journal_key: work_on_dates_dict}) except Journal.DoesNotExist: continue return res