Esempio n. 1
0
    def save(self, save_revision=False,  *args, **kwargs):
        
        # Если первый день месяца, тогда:
        #  - сумма потребления фактическая и плановая за период 
        # равна текущим значениям 
        # 
        # Количество дней в месяце
        days_number = get_month_last_day(self.date)
        
        if self.date.day == 1:
            self.energy_value_month = self.energy_value
        else:
            # пара значений даты начала и пердыдущего дня месяца
            actual_month_range = get_range(self.date, -1)
            
            # Сумма потребления с начала месяца до вчерашнего дня
            energy_sum = PowerPerformance.objects.filter(date__range=actual_month_range,
                boiler__id=self.boiler.id).aggregate(consumption_sum=Sum('energy_value'))

            if energy_sum['consumption_sum'] == None:
                energy_sum['consumption_sum']=0

            self.energy_value_month = energy_sum['consumption_sum'] + self.energy_value
        
        #if save_revision == True:
        #    with reversion.create_revision():
        #        super(PowerPerformance, self).save( *args, **kwargs)
        #else:
        super(PowerPerformance, self).save( *args, **kwargs)
Esempio n. 2
0
    def save(self, save_revision=False, *args, **kwargs):

        if self.fuel_info == None:
            raise FuelIncome.DoesNotExist("Информация о топливе не указана.")

        if self.date.day == 1:
            self.month = self.today
        else:
            date_range = get_range(self.date, -1)
            aggregation = FuelIncome.objects.filter(
                date__range=date_range,
                fuel_info__id=self.fuel_info.id).aggregate(
                    month=Sum('today'), pickup=Sum('pickup'))

            if aggregation['month'] == None:
                aggregation['month'] = 0.0

            if aggregation['pickup'] == None:
                aggregation['pickup'] = 0.0

            self.month = aggregation['month'] + self.today
            self.pickup_sum_period = aggregation['pickup'] + self.pickup

        #if save_revision == True:
        #    with reversion.create_revision():
        #        super(FuelIncome, self).save( *args, **kwargs)
        #else:
        super(FuelIncome, self).save(*args, **kwargs)
Esempio n. 3
0
    def save(self, save_revision=False, *args, **kwargs):

        # Если первый день месяца, тогда:
        #  - сумма потребления фактическая и плановая за период
        # равна текущим значениям
        #
        # Количество дней в месяце
        days_number = get_month_last_day(self.date)
        if self.date.day == 1:
            self.plan_day = round(self.plan_month / days_number, 3)
            self.plan_sum_period = self.plan_day
            self.actual_sum_period = self.actual_day
        else:
            # пара значений даты начала и пердыдущего дня месяца
            actual_month_range = get_range(self.date, -1)

            # Сумма потребления с начала месяца до вчерашнего дня
            actual_sum = ElectricityConsumption.objects.filter(
                date__range=actual_month_range,
                boiler__id=self.boiler.id).aggregate(
                    consumption_sum=Sum('actual_day'))

            if actual_sum['consumption_sum'] == None:
                actual_sum['consumption_sum'] = 0

            # среднесуточные значения и плановые месячные
            month, avg = self.get_month_plan()
            self.plan_day = avg
            self.plan_month = month

            # сумма равна сумме сегоднешнего значения и суммы всех значений с первого дня месяца
            # по вчерашнее число
            self.plan_sum_period = round(
                (self.plan_month / days_number) * self.date.day, 3)
            self.actual_sum_period = actual_sum[
                'consumption_sum'] + self.actual_day

        # Вычислить отклонение в процентах планового и фактического значений за период
        if self.plan_sum_period > 0:
            delta = ((self.actual_sum_period * 100.0) /
                     self.plan_sum_period) - 100.0
            self.diff_period_percent = round(delta, 3)

        #if save_revision == True:
        #    with reversion.create_revision():
        #        super(ElectricityConsumption,self).save( *args, **kwargs)
        #else:
        super(ElectricityConsumption, self).save(*args, **kwargs)
Esempio n. 4
0
    def save(self, save_revision=False, *args, **kwargs):
        # количество дней в месяце
        days = get_month_last_day(self.date)

        if self.category == None:
            raise WaterConsumption.DoesNotExist(
                "Категория расхода воды не указана.")

        if self.date.day == 1:
            self.actual_month = self.actual_day
            self.plan_day = round(self.plan_month / float(days), 3)
        else:

            # диапазон дат с начала месяца по текущий день
            date_range = get_range(self.date, -1)

            # фактический расход за период
            total_actual = WaterConsumption.objects.filter(
                date__range=date_range,
                boiler__id=self.boiler.id,
                category__id=self.category.id).aggregate(
                    actual_month=Sum('actual_day'))

            if total_actual['actual_month'] == None:
                total_actual['actual_month'] = 0

            self.actual_month = total_actual['actual_month'] + self.actual_day

            # Плановые дневные и месячные значения
            month_plan, day_plan = self.get_month_plan()
            self.plan_month = month_plan
            self.plan_day = day_plan

        # вычисляем разницы
        self.diff_day = round(self.actual_day - self.plan_day, 3)
        self.diff_month = round(
            self.actual_month - (self.plan_day * self.date.day), 3)

        self.farward_temperature_diff = self.farward_temperature_actual - self.farward_temperature_estimated
        self.backward_temperature_diff = self.backward_temperature_actual - self.backward_temperature_estimated

        #if save_revision == True:
        #    with reversion.create_revision():
        #        super(WaterConsumption,self).save( *args, **kwargs)
        #else:
        super(WaterConsumption, self).save(*args, **kwargs)
Esempio n. 5
0
    def save(self, save_revision=False, *args, **kwargs):
        # количество дней в месяце
        start_date, end_date, days = self.get_plan_period()

        if self.fuel_info == None:
            raise FuelConsumption.DoesNotExist(
                "Информация о виде топлива не указана.")

        # На первое число месячное значение равно дневному
        if self.date.day == 1:
            self.actual_month = self.actual_day
            self.real_plan_sum = self.real_plan_day

            if days > 0:
                self.plan_day = round(self.plan_month / float(days), 3)
            else:
                self.plan_day = 0.0
            self.plan_month_sum = self.plan_day

        else:
            # диапазон дат с начала месяца по текущий день
            date_range = get_range(self.date, -1)

            aggregation = FuelConsumption.objects.filter(
                date__range=date_range,
                fuel_info__id=self.fuel_info.id).aggregate(
                    actual_sum=Sum('actual_day'),
                    real_sum=Sum('real_plan_day'),
                    plan_sum=Sum('plan_day'))
            for key in aggregation.keys():
                if aggregation[key] == None:
                    aggregation[key] = 0

            #if aggregation['actual_sum'] == None:
            #    aggregation['actual_sum'] = 0

            #if aggregation['real_sum'] == None:
            #    aggregation['real_sum'] = 0

            print aggregation
            self.actual_month = aggregation['actual_sum'] + self.actual_day
            self.real_plan_sum = aggregation['real_sum'] + self.real_plan_day

            # Плановые дневные и месячные значения
            month_plan, day_plan, plan_eqv = self.get_plan(days)
            self.plan_month = month_plan
            self.plan_eqv = plan_eqv

            if days > 0:
                self.plan_day = day_plan
            else:
                self.plan_day = 0.0

            self.plan_month_sum = round(
                aggregation['plan_sum'] + self.plan_day, 3)

        # Проверка того, что была сделана корректировка
        self.correct_changed = False
        if self.pk is not None:
            orig = FuelConsumption.objects.get(pk=self.pk)
            if orig.correct != self.correct:
                self.correct_changed = True
        elif self.correct != 0.0:
            self.correct_changed = True

        # вычисляем разницы
        self.diff_day = round(self.actual_day - self.real_plan_day, 3)
        self.diff_month = round(
            self.actual_month + self.correct - self.real_plan_sum, 3)

        #if save_revision == True:
        #    with reversion.create_revision():
        #        super(FuelConsumption, self).save(*args, **kwargs)
        #else:
        super(FuelConsumption, self).save(*args, **kwargs)

        records = FuelConsumption.objects.exclude(date=self.date).filter(
            fuel_info__id=self.fuel_info.id)
Esempio n. 6
0
    def get_plan_period(self):
        """
        Получить плановый период для текущей даты и количество дней в периоде.
        
        - Если ни один период не начинается в текущем месяце, тогда начало периода совпадает с началом месца
        - Если ни один период не заканчивается в текущем месяце, тогда окончание периода совпадает с окончанием месяца
        - Если существует несколько периодов, которые пересекаются на текущую дату, первый из них будет удален                
        """

        period = None
        days = 0
        start_date = end_date = None

        try:
            # Найти период, который включает текущую дату
            period = self.boiler.periods.get(start__lte=self.date,
                                             end__gte=self.date)
            #print periods.query
        except Period.DoesNotExist:
            # Если период не найден, нужно убедиться есть ли период заканчивающийся в этом месяце
            # или период начинающийся в этом месяце
            days = get_month_last_day(self.date)
            # Все периоды, которые начинаются в месяце соответствующем дате
            s = self.boiler.periods.filter(start__month=self.date.month,
                                           start__year=self.date.year)
            # Все периоды, которые заканчиваются в месяце соответствующем дате
            e = self.boiler.periods.filter(end__month=self.date.month,
                                           end__year=self.date.year)

            start_date, end_date = get_month_range(self.date.year,
                                                   self.date.month)

            # Если есть периоды, которые начинаются в текущем месяце,
            # тогда дата окончания периода равна 'дата начала' - 1
            if len(s) > 0:
                end_date = get_month_day(self.date, s[0].start.day - 1)
                days = 0  #end_date.day

            if len(e) > 0:
                start_date = e[0].end
                days = 0  #end_date.day - start_date.day + 1

        except Period.MultipleObjectsReturned:
            items = self.boiler.periods.filter(start__lte=self.date,
                                               end__gte=self.date)

            is_first = True
            # Удаляем пересекающиеся периоды, кроме первого
            for item in items:
                if is_first == True:
                    period = item
                    is_first = False
                else:
                    item.delete()

        if period != None:
            # период первого месяца с даты начала периода, до последнего дня месяца
            start_period = get_range_revers(period.start)
            #print start_period
            # период последнего месяца с даты начала, до даты окончания периода
            end_period = get_range(period.end)
            #print end_period

            # Если дата расхода содержится в первом месячном периоде
            if contains(start_period, self.date):
                start_date = start_period[0]
                end_date = start_period[1]
                days = start_period[1].day - start_period[0].day + 1

            # Если дата расхода содержится в последнем месячном периоде
            elif contains(end_period, self.date):
                start_date = end_period[0]
                end_date = end_period[1]
                days = end_date.day
            else:
                days = get_month_last_day(self.date)
                start_date, end_date = get_month_range(self.date.year,
                                                       self.date.month)

        return (start_date, end_date, days)
Esempio n. 7
0
    def save(self, save_revision=False, *args, **kwargs):

        if self.fuel_info == None:
            raise FuelRemains.DoesNotExist("Информация о топливе не указана.")

        first_day = get_month_day(self.date, 1)
        range = get_range(self.date)

        if self.date.day == 1:
            pass
        else:
            try:
                obj = FuelRemains.objects.get(date=first_day,
                                              fuel_info__id=self.fuel_info.id)
                self.first_day_month = obj.first_day_month
            except FuelRemains.DoesNotExist:
                #traceback.print_exc(file=sys.stdout)
                #obj = FuelRemains()
                #obj.date = first_day
                #obj.fuel_info = self.fuel_info
                #obj.boiler = self.boiler
                #obj.creator = self.editor
                #obj.save(save_revision=True, force_insert=True)
                #self.first_day_month = obj.first_day_month
                pass

            except FuelRemains.MultipleObjectsReturned:
                #traceback.print_exc(file=sys.stdout)
                items = FuelRemains.objects.filter(
                    date=first_day, fuel_info__id=self.fuel_info.id)
                is_first = True
                for item in items:
                    if is_first == True:
                        self.first_day_month = item.first_day_month
                        is_first = False
                    else:
                        item.delete()

        fc = FuelConsumption.objects.filter(
            date__range=range, fuel_info__id=self.fuel_info.id).aggregate(
                actual=Sum('actual_day'))

        if fc['actual'] == None:
            fc['actual'] = 0.0

        fi = FuelIncome.objects.filter(
            date__range=range,
            fuel_info__id=self.fuel_info.id).aggregate(income=Sum('today'),
                                                       pickup=Sum('pickup'))

        if fi['income'] == None:
            fi['income'] = 0.0

        if fi['pickup'] == None:
            fi['pickup'] = 0.0

        self.tonnes = round(
            self.calc_remain_tonnes(self.first_day_month, fi['income'],
                                    fc['actual'], fi['pickup']), 3)
        self.days = 0

        #if save_revision == True:
        #    with reversion.create_revision():
        #        super(FuelRemains, self).save( *args, **kwargs)
        #else:
        super(FuelRemains, self).save(*args, **kwargs)