def get_acutual_plan_value_deviation(request, company_objects, bookmarks, from_date, to_date, aggregation_type): """ Получить данные по отклонению фактического значения от планового. @param company_objects: выбранные объекты @param bookmarks: @param from_date: @param to_date: @param aggregation_type: Указывает то, как аггрегировать данные. Возможны следующие варианты: 'enterprise' - по всему предприятию 'branch' - по филиалам 'thermal' - по тепловым районам None - не выполнять аггрегации """ try: if aggregation_type not in ['enterprise', 'thermal', 'branch', None]: raise ValueError(u"Неизвестный тип аггрегации") data = [] boilers = get_boilers(request.user, company_objects, bookmarks) common_categoty_name = get_common_category_name() data = WaterConsumption.objects.get_consumption_data( boilers, from_date, to_date, aggregation_type) return data except Exception as ex: _logger.error(ex) raise ex
def get_company_object_from_mix(request, company_objects, bookmarks_id): """ Получить объекты компании для теплового района """ print company_objects print bookmarks_id ids = [] for boiler in get_boilers(request.user, company_objects, bookmarks_id): ids.append(boiler.id) print ids return {'boilers': ids}
def get_problems(request, first_row, last_row, company_objects, bookmarks, filter_settings, sort_by=None, sort_order=None): """ Получить список проблем """ try: _logger.info(u"[deviation.getProblems()] - Получить список проблем, пользователем: %s"% unicode(request.user.username)) boilers = get_boilers(request.user, company_objects, bookmarks) if len(boilers)>0: qs = ParameterDeviationProblem.objects.select_related().filter(boiler__in = boilers) # Has start date if qooxdoo_utils.get_item(filter_settings, 'startDate') != None: from_date = string_to_date(qooxdoo_utils.get_item(filter_settings, 'startDate')) qs = qs.filter(start_date = from_date) if qooxdoo_utils.get_item(filter_settings, 'state','id') > 0: qs = qs.filter(state__id = qooxdoo_utils.get_item(filter_settings, 'state','id')) if qooxdoo_utils.get_item(filter_settings, 'cause','id') > 0: qs = qs.filter(Q(cause__id = qooxdoo_utils.get_item(filter_settings, 'cause','id')) | Q (cause__id=None)) qs = qs.order_by("boiler__branch__name", "boiler__thermalArea__name", "boiler__name", 'start_date', 'cause__name') problems = serializers.serialize("json", qs[first_row: last_row+1], relations={'boiler' : {'relations' : ('thermalArea','branch')}, 'resource' : {}, 'state' : {}, 'cause' : {}, 'responsible': {}, 'concerned' : {}, 'water' : {}, 'fuel' : {}, 'electricity': {} }) return problems except Exception as ex: _logger.error(u"[deviation.getProblems()] - Не удалось получить список проблем пользователю: %(user)s. %(exception)s " % {'user': unicode(request.user.username), 'exception': unicode(ex)}) raise ex
def deviation_report(request): """ Отчет по воде """ import json company_objects = request.GET['companyObjects'] bookmarks = request.GET['bookmarks'] boilers = get_boilers(request.user, json.loads(company_objects), json.loads(bookmarks)) if len(boilers) > 0: qs = ParameterDeviationProblem.objects.select_related().filter( boiler__in=boilers) # Has start date if request.GET['startDate'] != 'null': from_date = parse(request.GET['startDate']).date( ) #string_to_date2(request.GET['startDate']) qs = qs.filter(start_date=from_date) if request.GET['state'] > 0: qs = qs.filter(state__id=request.GET['state']) if request.GET['cause'] > 0: qs = qs.filter( Q(cause__id=request.GET['cause']) | Q(cause__id=None)) deviations_id = qs.values_list('id', flat=True) data = DeviationsReport.objects.get_deviations(deviations_id) params = { 'report_title': u'Список отклонений', 'items': data, 'report_delimiter': "," } context = RequestContext(request, params) template = get_template('deviation/deviation.html') #return HttpResponse(template.render(context)) response = HttpResponse( template.render(context), content_type='application/vnd.ms-excel; charset=utf-8') response[ 'Content-Disposition'] = 'attachment; filename=Deviations_Report.xls' return response
def get_problems_count(request, company_objects, bookmarks, filter_settings): """ Получить количество записей. @param company_objects: Объекты компании @param bookmarks: Закладки @param resources: Ресурсы @param states: Состояния @param start_date: Дата начала проблемы """ try: boilers = get_boilers(request.user, company_objects, bookmarks) number_rows = 0 if len(boilers)>0: qs = ParameterDeviationProblem.objects.filter(boiler__in = boilers) # Has start date if qooxdoo_utils.get_item(filter_settings, 'startDate') != None: from_date = string_to_date(qooxdoo_utils.get_item(filter_settings, 'startDate')) print from_date qs = qs.filter(start_date = from_date) if qooxdoo_utils.get_item(filter_settings, 'state','id') > 0: qs = qs.filter(state__id = qooxdoo_utils.get_item(filter_settings, 'state','id')) if qooxdoo_utils.get_item(filter_settings, 'cause','id') > 0: qs = qs.filter(Q(cause__id = qooxdoo_utils.get_item(filter_settings, 'cause','id')) | Q (cause__id=None)) number_rows = qs.count() return {'count': number_rows} except: traceback.print_exc(file=sys.stdout) raise
def look_for_problems(actor, first_row, last_row, company_objects, bookmarks, state, resource, sort_by=None, sort_order=None): """ Найти проблемы по указанным параметрам. @param actor: @param state: Состояние проблемы @param company_objects: Объекты структуры. Список метаданных, в котором указывается [{name: <Branch|ThermalArea|BoilerHouse>, id: <Идентификатор>},{...}] """ problems = [] boilers = get_boilers(actor, company_objects, bookmarks) print boilers problems = ParameterDeviationProblem.objects.filter( boiler__in=boilers, state__name__in=state, resource__name__in=resource).values( 'id', 'start_date', 'boiler__branch__name', 'boiler__thermalArea__name', 'boiler__name', 'resource__name', 'state__name')[first_row:last_row + 1] print problems #if state: # print "===========================================" # query_set.filter(state__name == state) #if sort_by =='ID': # query_set.extra(order_by("-id")) #elif sort_by == 'start_date': # query_set.extra(order_by("-start_date")) #elif sort_by == 'branch': #query_set.order_by().boiler.branch.name # pass #elif sort_by == 'thermal': #query_set.order_by().boiler.thermalArea.name # pass #elif sort_by =='company_object': # pass #query_set.get_resource().boiler.name, #elif sort_by =='resource': #query_set.get_resource_name(), # pass #elif sort_by =='state': #query_set(problem.state) # pass #else: # pass #query_set.order_by("boiler__branch__name","boiler__therame","boiler__name", "start_date") #query_set = query_set.extra(order_by = ["branch.name","thermal.name","boiler.name", "deviation.start_date"]) #print query_set[first_row: last_row+1].query '''problems = query_set.values('id','start_date', 'boiler__branch__name', 'boiler__thermalArea__name', 'boiler__name', 'resource__name', 'state__name')[first_row: last_row+1]''' #print problems data = {} try: a = [] for problem in problems: o = { 'ID': problem['id'], 'start_date': unicode(problem['start_date']), 'branch': unicode(problem['boiler__branch__name']), 'thermal': unicode(problem['boiler__thermalArea__name']), 'company_object': unicode(problem['boiler__name']), 'resource': unicode(problem['resource__name']), 'state': unicode(problem['state__name']) } a.append(o) data = {'data': a} except Exception as ex: print ex return data
def look_for_problems_query(actor, company_objects=[], bookmarks=[], state=None, resource=None, sort_by=None, sort_order=None): """ Найти проблемы по указанным параметрам. @param actor: @param state: Состояние проблемы @param company_objects: Объекты структуры. Список метаданных, в котором указывается [{name: <Branch|ThermalArea|BoilerHouse>, id: <Идентификатор>},{...}] """ problems = [] boilers = get_boilers(actor, company_objects, bookmarks) query_set = ParameterDeviationProblem.objects.select_related() if boilers != []: if resource == 'Вода': query_set.filter(water__boiler__in=boilers) elif resource == 'Электричество': query_set.filter(electricity__boiler__in=boilers) elif resource == 'Топливо': query_set.filter(fuel__boiler__in=boilers) else: query_set.filter( Q(water__boiler__in=boilers) | Q(electricity__boiler__in=boilers) | Q(fuel__boiler__in=boilers)) else: if resource == 'Вода': query_set.filter(water__isnull=False) elif resource == 'Электричество': query_set.filter(electricity__isnull=False) elif resource == 'Топливо': query_set.filter(fuel__isnull=False) if state: query_set.filter(state__name == state) if sort_by == 'ID': query_set.extra(order_by("-id")) elif sort_by == 'start_date': query_set.extra(order_by("-start_date")) elif sort_by == 'branch': query_set.order_by().boiler.branch.name elif sort_by == 'thermal': query_set.order_by().boiler.thermalArea.name elif sort_by == 'company_object': query_set.get_resource().boiler.name, elif sort_by == 'resource': query_set.get_resource_name(), elif sort_by == 'state': query_set(problem.state) return query_set