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
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)
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)
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)
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)
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."
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)
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)
def get_test_date(): return get_today()
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)
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'Значение сохранено.'}