コード例 #1
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
    def test_commenting_problem(self):
        """
        Комментирование проблемы.
        """
        # TEST UTILITY METHOD
        info = FuelInfo.objects.create(boiler=self.boiler_obj,
                                       creator=self.test_user,
                                       type=settings.FUEL_TYPE_NAMES[0])
        consumption = FuelConsumption.objects.create(boiler=self.boiler_obj,
                                                     date=get_today(),
                                                     creator=self.test_user,
                                                     fuel_info=info)

        problem = create_problem(consumption)

        # Add comment
        comment1 = ParameterDeviationProblemComment.objects.create(
            author=self.responsible1,
            date=get_today(),
            text=u"Test comment!",
            deviation=problem)
        problem = ParameterDeviationProblem.objects.get(id=problem.id)

        # Два комментария с учетом комментария созданного при создании записи
        self.assertEqual(problem.comments.all().count(), 2)

        # Add another one comment
        comment2 = ParameterDeviationProblemComment.objects.create(
            author=self.concerned1,
            date=get_today(),
            text=u"Accept test comment!",
            deviation=problem)

        #problem = ParameterDeviationProblem.objects.get(id = problem.id)
        self.assertEqual(problem.comments.all().count(), 3)

        from django.core import serializers
        query_set = ParameterDeviationProblem.objects.all()
        result = serializers.serialize('json',
                                       query_set,
                                       indent=2,
                                       relations=('boiler', 'resource',
                                                  'state', 'cause',
                                                  'responsible'))
        print result
コード例 #2
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
    def test_data_setting(self):
        """
        Проверка установки значения через DataSet
        """
        self.create_boiler()
        # отчет новый
        dataset = Dataset.objects.create(creator=self.test_admin,
                                         name=u"Название отчета",
                                         description=u"Описание отчета")

        grant_permission(dataset,
                         Role.objects.get(name=settings.ROLE_VIEWER_NAME),
                         settings.PERMISSION_VIEW_NAME)

        # Добавить поле, которое не зависит от категорий расхода топлива и воды
        field = DatasetField()
        field.creator = self.test_admin
        field.model_content_type = ContentType.objects.get(
            model='electricityconsumption')
        field.model_field_name = u'actual_day'
        field.name = u'Фактический расход электричества'
        field.description = u"Фактический расход"
        field.save()

        grant_permission(field,
                         Role.objects.get(name=settings.ROLE_VIEWER_NAME),
                         settings.PERMISSION_VIEW_NAME)

        field.dataset_set.add(dataset)

        # self.field1.set_value()
        self.assertRaises(PermissionDenied, field.set_value, self.test_viewer,
                          get_today(), 0.1, self.boiler_obj, None, None)

        grant_permission(field,
                         Role.objects.get(name=settings.ROLE_EDITOR_NAME),
                         settings.PERMISSION_EDIT_NAME)

        val = 5.2
        field.set_value(self.test_editor, get_today(), val, self.boiler_obj,
                        None, None)
        current_val, entity = field.get_value(self.test_editor, get_today(),
                                              self.boiler_obj, None, None)
        self.assertEqual(current_val, val)
コード例 #3
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
 def test_method(self):
     """
     Тест создания объекта
     """
     self.create_boiler()
     model_class = ContentType.objects.get(
         model='electricityconsumption').model_class()
     obj = get_entity(self.test_user, get_today(), model_class,
                      self.boiler_obj, None, None)
     self.assertNotEquals(obj, None)
コード例 #4
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
    def test_closing_problem(self):
        """
        Закрытие проблемы.
        """
        # TEST UTILITY METHOD
        info = FuelInfo.objects.create(boiler=self.boiler_obj,
                                       creator=self.test_user,
                                       type=settings.FUEL_TYPE_NAMES[0])
        consumption = FuelConsumption.objects.create(boiler=self.boiler_obj,
                                                     date=get_today(),
                                                     creator=self.test_user,
                                                     fuel_info=info)

        problem = create_problem(consumption)
        close_problem(self.test_user, problem)
        problem = ParameterDeviationProblem.objects.get(id=problem.id)
        self.assertEqual(problem.state, self.state_closed)
コード例 #5
0
    def handle(self, *args, **options):

        # check fuel
        from dailyreport.fuel.models import FuelConsumption
        from dailyreport.utils.date_utils import get_today
        from dailyreport.deviation.models import ParameterDeviationProblem
        from dailyreport.deviation.utils import create_problem

        cons = FuelConsumption.objects.filter(
            date__lte=get_today() - datetime.timedelta(3)
        ).extra(where=[
            '1-(plan_day/real_plan_day) >=0.05', 'real_plan_day > 0',
            'plan_day > 0',
            "id NOT IN (SELECT fuel_id FROM deviation WHERE fuel_id IS NOT NULL ORDER BY deviation.start_date ASC)"
        ])

        for item in cons:
            #print item
            create_problem(item)
コード例 #6
0
    def handle(self, month=0, year=0, dataset_id = 0, *args, **options):
        
        manager_email = settings.MANAGERS[0][1]
        manager_user = User.objects.get(email=manager_email)

        month_range = [] 
        if month == 0:
            today = get_today()
            month_range = get_month_range(today.year, today.month)
        else:
            month_range = get_month_range(int(year), int(month))
        
        boilers = BoilerHouse.objects.all()
        datasets = []
        if dataset_id == 0:
            datasets = Dataset.objects.all()
        else:
            datasets = Dataset.objects.filter(id=dataset_id)
            
        for dataset in datasets:
            print u"GETTING DATA FOR DATASET ID=" + unicode(dataset.id) + ", MONTH RANGE="+unicode(month_range)
            get_data(dataset, manager_user, month_range, boilers)
            print "DATA GETTING WAS COMPLETE."
コード例 #7
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
    def test_creation(self):
        """
        Создание проблемы при возникновении отклонения.
        При заведении новой проблемы:
         - запись находится в статусе "Новая".
         - не указывается тип проблемы
         - указан список ответственных
         - указан список заинтересованных
         - указана дата возникновения проблемы
         - указан ресурс, параметр по которому отклоение превысило ожидаемый порог  
        """

        # TEST UTILITY METHOD
        info = FuelInfo.objects.create(boiler=self.boiler_obj,
                                       creator=self.test_user,
                                       type=settings.FUEL_TYPE_NAMES[0])
        consumption = FuelConsumption.objects.create(boiler=self.boiler_obj,
                                                     date=get_today(),
                                                     creator=self.test_user,
                                                     fuel_info=info)

        problem1 = create_problem(consumption)

        self.assertNotEqual(problem1, None)
コード例 #8
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
    def test_look_for_problem(self):
        """"""
        problems = look_for_problems_query(self.test_user, [], [], None, None,
                                           None, None)

        self.assertEqual(list(problems), [])

        # create a problem
        info = FuelInfo.objects.create(boiler=self.boiler_obj,
                                       creator=self.test_user,
                                       type=settings.FUEL_TYPE_NAMES[0])
        consumption = FuelConsumption.objects.create(boiler=self.boiler_obj,
                                                     date=get_today(),
                                                     creator=self.test_user,
                                                     fuel_info=info)

        problem = create_problem(consumption)

        self.assertNotEqual(problem, None)

        problems = look_for_problems_query(self.test_user, [], [], None, None,
                                           None, None)

        self.assertEqual(problems[0], problem)
コード例 #9
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
def get_test_date():
    return get_today()
コード例 #10
0
ファイル: tests.py プロジェクト: johnsky/dailyreport-server
    def test_load_report_data(self):
        self.create_boiler()

        # диапазон дат для которых нужно загрузить данные по отчету
        date_range = [get_today(), get_today()]

        # отчет новый
        dataset = Dataset.objects.create(creator=self.test_admin,
                                         name=u"Название отчета",
                                         description=u"Описание отчета")

        grant_permission(dataset,
                         Role.objects.get(name=settings.ROLE_VIEWER_NAME),
                         settings.PERMISSION_VIEW_NAME)

        # Добавить поле, которое не зависит от категорий расхода топлива и воды
        field = DatasetField()
        field.creator = self.test_admin
        field.model_content_type = ContentType.objects.get(
            model='electricityconsumption')
        field.model_field_name = 'actual_day'
        field.name = 'Фактический расход электричества'
        field.description = "Фактический расход"
        field.save()

        grant_permission(field,
                         Role.objects.get(name=settings.ROLE_VIEWER_NAME),
                         settings.PERMISSION_VIEW_NAME)

        field.dataset_set.add(dataset)

        # Должны быть данные для полей: ID, Дата, Наименование котельной, Раход электричества.
        dataset_data = get_data(dataset, self.test_admin, date_range,
                                [self.boiler_obj])
        self.assertEqual(dataset_data[0][0], self.boiler_obj.id)
        self.assertEqual(dataset_data[0][1].day, get_today().day)
        self.assertEqual(dataset_data[0][2], self.boiler_obj.name)
        self.assertEqual(dataset_data[0][3], 0.0)

        # Добавить поле зависящее от категории расхода воды
        field_water = DatasetField()
        field_water.creator = self.test_admin
        field_water.model_content_type = ContentType.objects.get(
            model='waterconsumption')
        field_water.model_field_name = 'actual_day'
        field_water.name = 'Фактический расход'
        field_water.description = "Фактический расход воды"
        field_water.save()

        field_water.dataset_set.add(dataset)

        grant_permission(field_water,
                         Role.objects.get(name=settings.ROLE_VIEWER_NAME),
                         settings.PERMISSION_VIEW_NAME)

        # Должны быть данные для полей: Идентификатор котельной,
        # Дата, Наименование котельной, WID, Наименование категории,
        # Раход электричества, Расход воды
        dataset_data = get_data(dataset, self.test_admin, date_range,
                                [self.boiler_obj])
        self.assertEqual(dataset_data[0][0], self.boiler_obj.id)
        self.assertEqual(dataset_data[0][1].day, get_today().day)
        self.assertEqual(dataset_data[0][2], self.boiler_obj.name)
        self.assertEqual(dataset_data[0][3], self.water_category.id)
        self.assertEqual(dataset_data[0][4], self.water_category.name)
        self.assertEqual(dataset_data[0][5], 0.0)
        self.assertEqual(dataset_data[0][6], 0.0)

        field_fuel = DatasetField()
        field_fuel.creator = self.test_admin
        field_fuel.model_content_type = ContentType.objects.get(
            model='fuelconsumption')
        field_fuel.model_field_name = 'actual_day'
        field_fuel.name = 'Фактический расход топлива'
        field_fuel.description = "Фактический расход топлива в сутки"
        field_fuel.save()

        field_fuel.dataset_set.add(dataset)

        grant_permission(field_fuel,
                         Role.objects.get(name=settings.ROLE_VIEWER_NAME),
                         settings.PERMISSION_VIEW_NAME)

        # Должны быть данные для полей: Идентификатор котельной,
        # Дата, Наименование котельной, Раход электричества, Расход воды,
        # Идентификатор вида топлива, наименование топлива, марка топлива,
        # Расход топлива
        dataset_data = get_data(dataset, self.test_admin, date_range,
                                [self.boiler_obj])
        self.assertEqual(dataset_data[0][0], self.boiler_obj.id)
        self.assertEqual(dataset_data[0][1].day, get_today().day)
        self.assertEqual(dataset_data[0][2], self.boiler_obj.name)
        self.assertEqual(dataset_data[0][3], self.water_category.id)
        self.assertEqual(dataset_data[0][4], self.water_category.name)
        self.assertEqual(dataset_data[0][5], self.fuel_info.id)
        self.assertEqual(dataset_data[0][6], self.fuel_info.type)
        self.assertEqual(dataset_data[0][7], 0.0)
        self.assertEqual(dataset_data[0][8], 0.0)
        self.assertEqual(dataset_data[0][9], 0.0)

        # Добавляем
        info = FuelInfo.objects.create(boiler=self.boiler_obj,
                                       creator=self.test_admin,
                                       type=u"Coal")

        # Должны быть данные для полей: Идентификатор котельной,
        # Дата, Наименование котельной, Раход электричества, Расход воды,
        # Идентификатор вида топлива, наименование топлива, марка топлива,
        # Расход топлива
        # Данных должно быть 2 ряда
        dataset_data = get_data(dataset, self.test_admin, date_range,
                                [self.boiler_obj])

        self.assertEqual(dataset_data[0][0], self.boiler_obj.id)
        self.assertEqual(dataset_data[0][1].day, get_today().day)
        self.assertEqual(dataset_data[0][2], self.boiler_obj.name)
        self.assertEqual(dataset_data[0][3], self.water_category.id)
        self.assertEqual(dataset_data[0][4], self.water_category.name)
        self.assertEqual(dataset_data[0][5], self.fuel_info.id)
        self.assertEqual(dataset_data[0][6], self.fuel_info.type)
        self.assertEqual(dataset_data[0][7], 0.0)
        self.assertEqual(dataset_data[0][8], 0.0)
        self.assertEqual(dataset_data[0][9], 0.0)

        self.assertEqual(dataset_data[1][0], self.boiler_obj.id)
        self.assertEqual(dataset_data[1][1].day, get_today().day)
        self.assertEqual(dataset_data[1][2], self.boiler_obj.name)
        self.assertEqual(dataset_data[1][3], self.water_category.id)
        self.assertEqual(dataset_data[1][4], self.water_category.name)
        self.assertEqual(dataset_data[1][5], info.id)
        self.assertEqual(dataset_data[1][6], info.type)
        self.assertEqual(dataset_data[1][7], 0.0)
        self.assertEqual(dataset_data[1][8], 0.0)
        self.assertEqual(dataset_data[1][9], 0.0)
コード例 #11
0
ファイル: views.py プロジェクト: johnsky/dailyreport-server
def set_dataset_data(request, field_id, on_date, company_object_id,
                     water_category_id, fuel_info_id, value):
    """
    Установить новое значениче для указанной колонки.
    
    @param on_date: Дата 
    @param field_id: идентификатор колонки
    @param company_object_id: Идентификатор объекта 
    @param water_category_id: Идентификатор категории расхода воды
    @param fuel_info_id: Идентификатор информации о топливе
    @param value: новое значение
    
    @return: Возвращает объект
    """

    try:
        field = DatasetField.objects.get(id=field_id)
        # Дата на которую нужно заполнить значение
        my_date = datetime.strptime(on_date, settings.DATE_FORMAT).date()
        today = get_today()

        # Проверка разрешения установления значения
        if not has_permission(field, request.user,
                              settings.PERMISSION_EDIT_NAME):
            return {
                'success': False,
                'message': u"У вас недостаточно прав для редактирования."
            }

        set_value = False

        user_roles = get_roles(request.user)
        admin = Role.objects.get(name=settings.ROLE_ADMIN_NAME)
        manager = Role.objects.get(name=settings.ROLE_MANAGER_NAME)
        developer = Role.objects.get(name=settings.ROLE_DEVELOPER_NAME)
        editor = Role.objects.get(name=settings.ROLE_EDITOR_NAME)

        # Если пользователь выполняет одну из ролей он может выполнять
        # редактирование в любое время
        if admin in user_roles or manager in user_roles or developer in user_roles:
            set_value = True

        # Если пользователь редактор - может в трехдневный срок редактировать данные
        elif editor in user_roles and (today - my_date).days < 4 and (
                today - my_date).days >= 0:
            set_value = True

        if set_value:

            # Дополнительная проверка разрешения выполнять корректировку.
            if field.model_field_name == 'correct':
                # Даты в которые поле доступно для редактирования
                editable_on_date = (get_month_day(today, 10),
                                    get_month_day(today, 20),
                                    get_month_day(today,
                                                  get_month_last_day(today)))

                if my_date not in editable_on_date:
                    return {
                        'success':
                        False,
                        'message':
                        u"Корректировку можно делать только 10-го, 20-го и в последний день месяца"
                    }

            # Информация о топливе
            fuel_info_obj = None
            if fuel_info_id > 0:
                fuel_info_obj = FuelInfo.objects.get(id=fuel_info_id)

            # Информация о воде
            water_category_obj = None
            if water_category_id > 0:
                water_category_obj = WaterConsumptionCategory.objects.get(
                    id=water_category_id)

            # Котельная
            boiler = BoilerHouse.objects.get(id=company_object_id)
            # Установить значение
            field.set_value(request.user, my_date, value, boiler,
                            water_category_obj, fuel_info_obj)
        else:
            return {
                'success': False,
                'message':
                u"Редактирование доступно только в трехдневный срок."
            }

    except Exception as ex:
        traceback.print_exc(file=sys.stdout)
        _logger.error(u"[dataset.setData] - Не удалось сохранить значение: " +
                      unicode(ex))

        return {
            'success': False,
            'message': u"Не удалось сохранить значение " + unicode(ex)
        }

    return {'success': True, 'message': u'Значение сохранено.'}