예제 #1
0
    def test_new_field_addition(self):
        """
        Проверка добавления поля в отчет
        """
        dataset = Dataset.objects.create(creator=self.test_admin,
                                         name=u"Название отчета",
                                         description=u"Описание отчета")

        # Добавить поле зависящее от категории расхода воды
        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)

        self.assertEqual(
            field_water.dataset_set.filter(id=dataset.id).count(), 1)
예제 #2
0
    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
    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)
예제 #4
0
    def test_get_report_header(self):
        """
        Проверка получения метаданных полей набора данных.
        """
        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 = u'Фактический расход электричества'
        field.description = u"Фактический расход"
        field.save()

        field.dataset_set.add(dataset)

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

        meta = get_fields(dataset, self.test_viewer)
        # ID, Котельная, Дата, Расход электричества
        self.assertEqual(len(meta), 4)

        # Добавить поле зависящее от категории расхода воды
        # Проверить, что соответствующие мета данные генерируются для нового набора полей
        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 = u'Фактический расход'
        field_water.description = u"Фактический расход воды"
        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)

        meta = get_fields(dataset, self.test_viewer)
        # ID, Котельная, Дата, WID, Категория, Расход воды, Расход электричества
        self.assertEqual(len(meta), 7)

        # Добавить поле зависящее от информации о топливе
        # Проверить что добавилось поле и информация о топливе
        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 = u'Фактический расход топлива'
        field_fuel.description = u"Фактический расход топлива в сутки"
        field_fuel.save()

        field_fuel.dataset_set.add(dataset)

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

        meta = get_fields(dataset, self.test_viewer)
        # ID, Котельная, Дата, WID, Категория, FID, Вид топлива, Расход воды, Расход электричества, Расход топлива
        self.assertEqual(len(meta), 10)

        self.assertEqual(meta[0]['name'], u'ID')
        self.assertEqual(meta[1]['name'], u'Дата')
        self.assertEqual(meta[2]['name'], u'Котельная')
        self.assertEqual(meta[3]['name'], u'WID')
        self.assertEqual(meta[4]['name'], u'Категория расхода воды')
        self.assertEqual(meta[5]['name'], u'FID')
        self.assertEqual(meta[6]['name'], u'Вид топлива')
        self.assertEqual(meta[7]['name'], u'Фактический расход электричества')
        self.assertEqual(meta[8]['name'], u'Фактический расход')
        self.assertEqual(meta[9]['name'], u'Фактический расход топлива')

        # Изменяем порядок колонок
        field_fuel.index = 1
        field_fuel.save()
        field_water.index = 2
        field_water.save()

        meta = get_fields(dataset, self.test_viewer)

        self.assertEqual(meta[0]['name'], u'ID')
        self.assertEqual(meta[1]['name'], u'Дата')
        self.assertEqual(meta[2]['name'], u'Котельная')
        self.assertEqual(meta[3]['name'], u'WID')
        self.assertEqual(meta[4]['name'], u'Категория расхода воды')
        self.assertEqual(meta[5]['name'], u'FID')
        self.assertEqual(meta[6]['name'], u'Вид топлива')
        self.assertEqual(meta[7]['name'], u'Фактический расход электричества')
        self.assertEqual(meta[8]['name'], u'Фактический расход топлива')
        self.assertEqual(meta[9]['name'], u'Фактический расход')
예제 #5
0
    def test_rows_number(self):
        """
        Проверка рассчета количества строк в наборе данных.
        """
        self.create_boiler()
        date_range = get_month_range(2011, 1)

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

        grant_permission(dataset,
                         Role.objects.get(name=settings.ROLE_EDITOR_NAME),
                         settings.PERMISSION_EDIT_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()

        field.dataset_set.add(dataset)

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

        # Проверяем, что количество строк в наборе данных будет равно 31, т.к. поле не
        # зависит от категории расхода воды и электричества.
        # Только пользователь выполняющий роль редактора может увидеть поля.
        rows_num = get_dataset_rows_number(dataset, self.test_viewer,
                                           date_range, [self.boiler_obj])
        self.assertEqual(rows_num, 0)

        rows_num = get_dataset_rows_number(dataset, self.test_editor,
                                           date_range, [self.boiler_obj])
        self.assertEqual(rows_num, 31)

        # Добавить поле зависящее от категории расхода воды
        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_EDITOR_NAME),
                         settings.PERMISSION_EDIT_NAME)
        grant_permission(field_water,
                         Role.objects.get(name=settings.ROLE_EDITOR_NAME),
                         settings.PERMISSION_VIEW_NAME)

        # Проверяем, что количество строк в наборе данных будет равно 31, т.к. поле не
        # зависит от категории расхода воды и электричества.
        # Только пользователь выполняющий роль редактора может увидеть поля.
        rows_num = get_dataset_rows_number(dataset, self.test_viewer,
                                           date_range, [self.boiler_obj])
        self.assertEqual(rows_num, 0)

        rows_num = get_dataset_rows_number(dataset, self.test_editor,
                                           date_range, [self.boiler_obj])
        self.assertEqual(rows_num, 31)

        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_EDITOR_NAME),
                         settings.PERMISSION_EDIT_NAME)
        grant_permission(field_fuel,
                         Role.objects.get(name=settings.ROLE_EDITOR_NAME),
                         settings.PERMISSION_VIEW_NAME)

        # Проверяем, что количество строк в наборе данных будет равно 31, т.к. поле не
        # зависит от категории расхода воды и электричества.
        # Только пользователь выполняющий роль редактора может увидеть поля.
        rows_num = get_dataset_rows_number(dataset, self.test_viewer,
                                           date_range, [self.boiler_obj])
        self.assertEqual(rows_num, 0)

        rows_num = get_dataset_rows_number(dataset, self.test_editor,
                                           date_range, [self.boiler_obj])
        self.assertEqual(rows_num, 62)
예제 #6
0
    def test_creation(self):
        """
        Проверка создания объекта поля.
        Создавать объекты могут только пользователи роль которых РАЗРАБОТЧИК, АДМИН, МЕНЕДЖЕР
        При создании у пользователя есть все права: редактировать, просматривать.
        
        
        """
        sources = get_models_content_types()
        field = get_model_fields(sources[0])[0]

        obj = DatasetField(creator=self.test_admin,
                           model_field_name=field.name,
                           model_content_type=sources[0])

        obj.save(save_revision=True)

        self.assertEquals(obj.name, "")
        self.assertEquals(obj.description, "")
        self.assertEquals(obj.internal_name, "")

        # Администратор, разработчик и менеджер имеют все права (Правка, просмотр, удаление)
        self.assertEqual(
            has_permission(obj, self.test_admin,
                           settings.PERMISSION_VIEW_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_developer,
                           settings.PERMISSION_VIEW_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_manager,
                           settings.PERMISSION_VIEW_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_viewer,
                           settings.PERMISSION_VIEW_NAME), False)
        self.assertEqual(
            has_permission(obj, self.test_editor,
                           settings.PERMISSION_VIEW_NAME), False)

        self.assertEqual(
            has_permission(obj, self.test_admin,
                           settings.PERMISSION_DELETE_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_developer,
                           settings.PERMISSION_DELETE_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_manager,
                           settings.PERMISSION_DELETE_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_viewer,
                           settings.PERMISSION_DELETE_NAME), False)
        self.assertEqual(
            has_permission(obj, self.test_editor,
                           settings.PERMISSION_DELETE_NAME), False)

        self.assertEqual(
            has_permission(obj, self.test_admin,
                           settings.PERMISSION_EDIT_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_developer,
                           settings.PERMISSION_EDIT_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_manager,
                           settings.PERMISSION_EDIT_NAME), True)
        self.assertEqual(
            has_permission(obj, self.test_viewer,
                           settings.PERMISSION_EDIT_NAME), False)
        self.assertEqual(
            has_permission(obj, self.test_editor,
                           settings.PERMISSION_EDIT_NAME), False)
    def handle(self, *args, **options):

        manager_email = settings.MANAGERS[0][1]
        manager_user = User.objects.get(email=manager_email)

        content_types = get_models_content_types()
        print content_types

        for content_type in content_types:
            fields = get_model_fields(content_type)
            index = 0

            for field in fields:
                if DatasetField.objects.filter(
                        model_field_name=field.name,
                        model_content_type=content_type).count() == 0:
                    df = DatasetField()
                    df.creator = manager_user
                    df.name = field.verbose_name
                    df.description = field.help_text
                    df.internal_name = field.verbose_name
                    df.model_field_name = field.name
                    df.model_content_type = content_type
                    df.index = index
                    df.save(save_revision=True)
                    print df

                index = index + 1