def getFields(self, **params): """ get list of fields = list of active cars :param params: dept for department-filter :return: """ if 'dept' in params: cars = [c for c in Car.getCars(deptid=params['dept'].id) if c.active] else: cars = [c for c in Car.getCars() if c.active] return [FieldName(car.name, u'{}'.format(car.id), prefix=u"") for car in cars]
def getAdminContent(self, **params): """ Deliver admin content of module cars :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if request.method == 'POST': if request.form.get('action') == 'createcars': # add car params.update({'car': Car('', '', '', '', '', int(module[1])), 'departments': Department.getDepartments(), 'cartypes': Settings.getCarTypes()}) return render_template('admin.cars_edit.html', **params) elif request.form.get('action') == 'updatecars': # save car if request.form.get('car_id') != 'None': # update car car = Car.getCars(id=request.form.get('car_id')) else: # add car car = Car('', '', '', '', '', module[1]) db.session.add(car) car.name = request.form.get('edit_name') car.description = request.form.get('edit_description') car.fmsid = request.form.get('edit_fmsid') car.active = request.form.get('edit_active') car.type = request.form.get('edit_type') car._dept = request.form.get('edit_department') db.session.commit() elif request.form.get('action') == 'cancel': pass elif request.form.get('action').startswith('editcars_'): # edit car params.update({'car': Car.getCars(id=request.form.get('action').split('_')[-1]), 'departments': Department.getDepartments(), 'cartypes': Settings.getCarTypes()}) return render_template('admin.cars_edit.html', **params) elif request.form.get('action').startswith('deletecars_'): # delete car db.session.delete(Car.getCars(id=request.form.get('action').split('_')[-1])) db.session.commit() try: cars = Department.getDepartments(module[1]).getCars() except AttributeError: cars = [] params.update({'cars': cars}) return render_template('admin.cars.html', **params)
def getFields(self, **params): """ get list of fields = list of active cars :param params: dept for department-filter :return: """ if 'dept' in params: cars = [ c for c in Car.getCars(deptid=params['dept'].id) if c.active ] else: cars = [c for c in Car.getCars() if c.active] return [ FieldName(car.name, u'{}'.format(car.id), prefix=u"") for car in cars ]
def get_cars_proto(self, ctype): # type 1:cars1, 2:cars2, 3:material _t = {1: 'k.cars1', 2: 'k.cars2', 3: 'k.material'} ret = [] if not inspect(self).session: return ret cars = Car.getCars() for _c in [int(c) for c in self.get(_t[ctype], '').split(',') if c != '']: try: ret.append(filter(lambda c: c.id == _c, cars)[0]) except IndexError: pass return ret
def get_cars_proto(self, ctype): """ Prototype of car, material getter :param ctype: 1:cars1, 2:cars2, 3:material :return: list of :py:class:`emonitor.modules.cars.car.Car` """ _t = {1: 'cars1', 2: 'cars2', 3: 'material'} ret = [] cars = Car.getCars() for _c in [int(c) for c in self.get(_t[ctype]) if c != '']: try: ret.append(filter(lambda c: c.id == _c, cars)[0]) except IndexError: pass return ret
def _get_cars_proto(self, cartype): # type 1:cars1, 2:cars2, 3:material ret = [] l = [] cars = Car.getCars() try: if cartype == 1: l = [int(i) for i in self._cars1.split(';') if i != ''] elif cartype == 2: l = [int(i) for i in self._cars2.split(';') if i != ''] elif cartype == 3: l = [int(i) for i in self._material.split(';') if i != ''] except: l = [] for c_id in l: c = filter(lambda c: c.id == c_id, cars) if len(c) == 1: ret.append(c[0]) return ret
def evalMaterial(fieldname, **params): cars = Car.getCars(params=['onlyactive']) carlist = [u'{} {}'.format(c.dept.name, c.name) for c in cars] c = [[], []] departements = Department.getDepartments() for p in [l for l in re.split(r"[\s]{2,}|[\n]+", FezAlarmFaxChecker().fields[fieldname][0])]: addcar = None if len([d for d in departements if d.name == p.strip()]) == 1: # department default found c = [[u'default'], [0]] FezAlarmFaxChecker().logger.debug(u'material: "{}" default department found'.format(p.strip())) continue # try list or car names repl = difflib.get_close_matches(p.strip(), carlist, 1, cutoff=0.7) if len(repl) == 1: addcar = filter(lambda x: u'{} {}'.format(x.dept.name, x.name) == repl[0], cars)[0] addcar = addcar.name, addcar.id else: # try list of car descriptions descriptionlist = [u'{} {}'.format(cn.dept.name, cn.description) for cn in cars] repl = difflib.get_close_matches(p.strip(), descriptionlist, 1, cutoff=0.7) if len(repl) == 1: addcar = filter(lambda x: u'{} {}'.format(x.dept.name, x.description) == repl[0], cars)[0] addcar = addcar.name, addcar.id else: t = "" for x in p.split(): # try parts of name and stop after first match t += x repl = difflib.get_close_matches(t, carlist, 1, cutoff=0.7) if len(repl) == 1: addcar = filter(lambda x: u'{} {}'.format(x.dept.name, x.name) == repl[0], cars)[0] addcar = addcar.name, addcar.id break if addcar and addcar[1] not in c[1]: c[0].append(addcar[0]) c[1].append(addcar[1]) if len(c[0]) > 0: FezAlarmFaxChecker().logger.debug(u'material: done with {}, {}'.format(c[0], c[1])) FezAlarmFaxChecker().fields[fieldname] = (u','.join(c[0]), u','.join([str(_c) for _c in c[1]]))
def getAdminContent(self, **params): """ Deliver admin content of module alarmkeys :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if len(module) > 2 and module[2] == 'upload': # upload alarmkeys params.update({'': int(module[1]), 'department': module[1]}) return render_template('admin.alarmkeys.upload.html', **params) else: depid = 1 try: if module[1].isnumeric(): depid = int(module[1]) except: pass if request.method == 'POST': if depid == 0: if request.form.get('action', '') == 'createset': # add alarmkeyset params.update({ 'alarmkeyset': AlarmkeySet('', '', datetime.date.today(), datetime.date.today(), ''), 'setbases': AlarmkeySet.getBases(), 'orphankeys': Alarmkey.getOrphanKeys() }) return render_template('admin.alarmkeys.set_actions.html', **params) elif request.form.get('action', '').startswith('deleteset_'): db.session.delete( AlarmkeySet.getAlarmkeySets( request.form.get('action', '').split('_')[-1])) db.session.commit() elif request.form.get( 'action', '').startswith('detailset_'): # edit alarmkeyset params.update({ 'alarmkeyset': AlarmkeySet.getAlarmkeySets( request.form.get('action').split('_')[-1]), 'setbases': AlarmkeySet.getBases(), 'orphankeys': Alarmkey.getOrphanKeys() }) return render_template('admin.alarmkeys.set_actions.html', **params) elif request.form.get( 'action', '') == 'savealarmkeyset': # save alarmkeyset if request.form.get('set_id', '') == 'None': # add akset = AlarmkeySet('', '', datetime.date.today(), datetime.date.today(), '') db.session.add(akset) else: akset = AlarmkeySet.getAlarmkeySets( request.form.get('set_id')) akset.name = request.form.get('set_name') if request.form.get('set_startdate', '') != "": akset.startdate = datetime.datetime.strptime( request.form.get('set_startdate'), '%d.%m.%Y') else: akset.startdate = None if request.form.get('set_enddate', '') != "": akset.enddate = datetime.datetime.strptime( request.form.get('set_enddate'), '%d.%m.%Y') else: akset.enddate = None akset.remark = request.form.get('set_remark') akset.base = request.form.get('set_base') db.session.commit() if 'set_assignorphan' in request.form.keys( ): # add all orphan keys to current set for key in Alarmkey.getOrphanKeys(): key._keyset = int(akset.id) db.session.commit() elif request.form.get('action', '').startswith('deletebase_'): if os.path.exists("{}alarmkeysetbase/{}".format( current_app.config.get('PATH_DATA'), "_".join( request.form.get('action', '').split('_')[1:]))): os.remove("{}alarmkeysetbase/{}".format( current_app.config.get('PATH_DATA'), "_".join( request.form.get('action', '').split('_')[1:]))) params.update({ 'aksets': AlarmkeySet.getAlarmkeySets(), 'akbases': AlarmkeySet.getBases() }) return render_template('admin.alarmkeys.set_list.html', **params) if request.form.get('action') == 'adddefault': # add default aao params.update({ 'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': 0 }) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get( 'action') == 'savedefault': # save default aao alarmkeycar = AlarmkeyCars.getAlarmkeyCars( kid=9999, dept=request.form.get( 'deptid')) # 9999 = default department if not alarmkeycar: # add alarmkeycar = AlarmkeyCars(9999, request.form.get('deptid'), '', '', '') db.session.add(alarmkeycar) alarmkeycar.cars1 = request.form.get('cars1') alarmkeycar.cars2 = request.form.get('cars2') alarmkeycar.materials = request.form.get('material') if alarmkeycar.kid != 9999 and request.form.get( 'cars1') == request.form.get( 'cars2') == request.form.get( 'material') == '': # remove db.session.delete(alarmkeycar) db.session.commit() elif request.form.get( 'action') == 'editdefault': # edit default aao params.update({ 'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'aksets': AlarmkeySet.getAlarmkeySets(), 'cars': Car.getCars(), 'type': -1 }) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'addkey': # add key params.update({ 'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'aksets': AlarmkeySet.getAlarmkeySets(), 'cars': Car.getCars(), 'type': -2 }) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'savekey': # save key if request.form.get('keyid') == 'None': # add new alarmkey = Alarmkey('', '', '', '') db.session.add(alarmkey) db.session.commit() else: # update existing alarmkey = Alarmkey.getAlarmkeys(request.form.get('keyid')) alarmkey.category = request.form.get('category') alarmkey.key = request.form.get('key') alarmkey.key_internal = request.form.get('keyinternal') alarmkey.remark = request.form.get('remark') if request.form.get('keyset', '') == '': alarmkey._keyset = None else: alarmkey._keyset = request.form.get('keyset') alarmkey.setCars(int(request.form.get('deptid')), cars1=request.form.get('cars1'), cars2=request.form.get('cars2'), material=request.form.get('material')) alarmkey.keysetitem = None if request.form.get('keyset', '') != "": keyset = AlarmkeySet.getAlarmkeySets( request.form.get('keyset')) if keyset: item = filter( lambda x: x.get('stichwort') == alarmkey.category and x.get('schlagwort') == alarmkey.key, keyset.alarmkeys) if len(item) > 0: alarmkey.keysetitem = item[0].get('nr') db.session.commit() # readd elif request.form.get('action').startswith( 'deletecars_'): # delete car definition _op, _kid, _dept = request.form.get('action').split('_') keycar = AlarmkeyCars.getAlarmkeyCars(kid=_kid, dept=_dept) if keycar: db.session.delete(keycar) db.session.commit() # delete key if no definied cars if len(AlarmkeyCars.getAlarmkeyCars(kid=_kid)) == 0: key = Alarmkey.getAlarmkeys(id=_kid) db.session.delete(key) db.session.commit() elif request.form.get('action').startswith( 'editcars_'): # edit key with cars _op, _kid, _dept = request.form.get('action').split('_') params.update({ 'alarmkey': Alarmkey.getAlarmkeys(id=_kid), 'depid': _dept, 'departments': Department.getDepartments(), 'aksets': AlarmkeySet.getAlarmkeySets(), 'cars': Car.getCars(), 'type': 1 }) return render_template('admin.alarmkeys_actions.html', **params) if depid == 0: # edit options params.update({ 'aksets': AlarmkeySet.getAlarmkeySets(), 'departments': Department.getDepartments(), 'akbases': AlarmkeySet.getBases() }) return render_template('admin.alarmkeys.set_list.html', **params) alarmkeys_count = [] ak = Alarmkey counted_keys = db.get(ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id')).group_by(ak.category, ak.id) _sum = 0 for r in counted_keys.all(): alarmkeys_count.append([r.category, r.key, r.id]) _sum += int(r.key) params.update({ 'depid': depid, 'defaultcars': Alarmkey.getDefault(depid), 'aksets': AlarmkeySet.getAlarmkeySets() }) return render_template('admin.alarmkeys.html', **params)
def getFrontendContent(**params): """ Deliver frontend content of module alarms :return: data of alarms """ from emonitor.extensions import monitorserver if 'alarmfilter' not in session: session['alarmfilter'] = '7' if request.args.get('alarmfilter'): # filter for alarms last x days, -1 no filter set session['alarmfilter'] = request.args.get('alarmfilter', '7') if 'area' in request.args: params['area'] = request.args.get('area') if 'state' in request.args: params['activeacc'] = request.args.get('state') if request.form.get('action') == 'updatealarm': if request.form.get('alarm_id') != 'None': # update alarm alarm = Alarm.getAlarms(request.form.get('alarm_id')) else: # create new alarm d = datetime.datetime.strptime('%s %s' % (request.form.get('edit_timestamp_date'), request.form.get('edit_timestamp_time')), "%d.%m.%Y %H:%M:%S") alarm = Alarm(d, request.form.get('edit_keyid'), 2, 0) db.session.add(alarm) params['activeacc'] = 1 try: alarm.timestamp = datetime.datetime.strptime('%s %s' % (request.form.get('edit_timestamp_date'), request.form.get('edit_timestamp_time')), "%d.%m.%Y %H:%M:%S") except ValueError: alarm.timestamp = datetime.datetime.now() alarm._key = request.form.get('edit_key') alarm.set(u'id.key', request.form.get('edit_keyid')) alarm.set(u'k.cars1', request.form.get('val_cars1')) alarm.set(u'k.cars2', request.form.get('val_cars2')) alarm.set(u'k.material', request.form.get('val_material')) alarm.set(u'marker', request.form.get('marker')) alarm.set(u'id.city', request.form.get('edit_city')) _city = City.getCities(id=request.form.get('edit_cityname')) if _city: alarm.set(u'city', _city.name) else: alarm.set(u'city', request.form.get('edit_cityname')) alarm.set(u'streetno', request.form.get('edit_streetno')) street = Street.getStreets(id=request.form.get('edit_addressid')) hnumber = None if street: alarm.set(u'id.address', street.id) try: hnumber = [h for h in street.housenumbers if h.number == request.form.get('edit_streetno').split()[0]] if len(hnumber) > 0: alarm.set(u'lat', hnumber[0].points[0][0]) alarm.set(u'lng', hnumber[0].points[0][1]) except IndexError: pass elif request.form.get('edit_addressid') == 'None': alarm.set(u'id.address', '') else: alarm.set(u'id.address', request.form.get('edit_addressid')) alarm.set(u'address', request.form.get('edit_address')) if request.form.get('edit_object') != '0': alarm.set(u'id.object', request.form.get('edit_object')) else: # remove object definition if present if u'id.object' in alarm.attributes: del alarm.attributes[u'id.object'] if u'object' in alarm.attributes: del alarm.attributes[u'object'] alarm.set(u'priority', request.form.get('edit_priority')) alarm.set(u'remark', request.form.get('edit_remark')) alarm.set(u'person', request.form.get('edit_person')) if request.form.get(u'edit_address2').strip() != '': alarm.set(u'address2', request.form.get('edit_address2')) if (request.form.get(u'marker') == '1' and not hnumber) or request.form.get('update_position') == '1': alarm.set(u'routing', '') alarm.set(u'lat', request.form.get('lat')) alarm.set(u'lng', request.form.get('lng')) alarm.set(u'zoom', request.form.get('zoom')) try: d = datetime.datetime.strptime('%s %s' % (request.form.get('edit_endtimestamp_date'), request.form.get('edit_endtimestamp_time')), "%d.%m.%Y %H:%M:%S") except ValueError: d = datetime.datetime.now() alarm.set(u'endtimestamp', d) db.session.commit() signal.send('alarm', 'updated', alarmid=alarm.id) if request.form.get('alarm_id') == u'None': # create new Alarm.changeState(alarm.id, 0) # prepare alarm return redirect('/alarms?area=%s&state=1' % params['area']) elif alarm.state == 1: # active alarm update monitorserver.sendMessage('0', 'reset') # refresh monitor layout return redirect('/alarms?area=%s&state=0' % params['area']) elif request.args.get('action') == 'editalarm': if request.args.get('alarmid', '0') == '0': # add new alarm alarm = Alarm(datetime.datetime.now(), '', 2, 0) #flash(babel.gettext(u'alarms.alarmadded'), 'alarms.add') else: # edit alarm alarm = Alarm.getAlarms(id=request.args.get('alarmid')) return render_template('frontend.alarms_edit.html', alarm=alarm, cities=City.getCities(), objects=AlarmObject.getAlarmObjects(), cars=Car.getCars(), departments=Department.getDepartments(), frontendarea=params['area'], frontendmodules=frontend.modules, frontendmoduledef=Settings.get('frontend.default')) elif request.args.get('action') == 'refresh': # refresh alarm section params['area'] = request.args.get('area') params['activeacc'] = int(request.args.get('activeacc')) elif request.args.get('action') == 'finishalarm': # finish selected alarm Alarm.changeState(int(request.args.get('alarmid')), 2) params['area'] = request.args.get('area') elif request.args.get('action') == 'activatealarm': # activate selected alarm ret = Alarm.changeState(int(request.args.get('alarmid')), 1) if len(ret) > 0: flash(render_template_string("{{ _('alarms.carsinuse') }}</br><b>" + ", ".join([r.name for r in sorted(ret, key=attrgetter('name'))]) + "</b>"), 'alarms') params['area'] = request.args.get('area') params['activeacc'] = 0 elif request.args.get('action') == 'deletealarm': # delete selected alarm alarm = Alarm.getAlarms(id=request.args.get('alarmid')) refresh = 1 or alarm.state == 1 # check if alarm is active try: # delete file if not used in any other alarm c = Alarm.query.filter(Alarm.attributes.any(value=alarm.get('filename'), name="filename")).count() if c == 1 and os.path.exists("{}{}".format(current_app.config.get('PATH_DONE'), alarm.get('filename'))): os.remove("{}{}".format(current_app.config.get('PATH_DONE'), alarm.get('filename'))) except: pass alarm.state = -1 alarm.updateSchedules() db.session.delete(alarm) db.session.commit() if refresh: monitorserver.sendMessage('0', 'reset') # refresh monitor layout signal.send('alarm', 'deleted', alarmid=request.args.get('alarmid')) elif request.args.get('action') == 'archivealarm': # archive selected alarms, id=0 == all if ";" in request.args.get('alarmid'): # archive selected alarms for alarmid in request.args.get('alarmid').split(';'): Alarm.changeState(int(alarmid), 3) elif int(request.args.get('alarmid')) == 0: # archive all alarms Alarm.changeStates(3) else: # archive single selected alarm Alarm.changeState(int(request.args.get('alarmid')), 3) params['area'] = request.args.get('area') stats = dict.fromkeys(Alarm.ALARMSTATES.keys() + ['3'], 0) for s, c in Alarm.getAlarmCount(days=int(session['alarmfilter'])): # s=state, c=count(ids of state) if str(s) in stats.keys(): stats[str(s)] = c if 'area' not in params: params['area'] = 'center' if 'activeacc' not in params: params['activeacc'] = 0 return render_template('frontend.alarms_smallarea.html', alarmstates=Alarm.ALARMSTATES, stats=stats, frontendarea=params['area'], activeacc=str(params['activeacc']), printdefs=Printers.getActivePrintersOfModule('alarms'), frontendmodules=frontend.modules, frontendmoduledef=Settings.get('frontend.default'), alarmfilter=session['alarmfilter'])
def getFrontendData(self): """ Deliver frontend content of module alarms (ajax) :return: rendered template as string or json dict """ from emonitor.extensions import monitorserver if "download" in request.path: # deliver file with open('{}{}'.format(current_app.config.get('PATH_TMP'), request.path.split('download/')[-1]), 'rb') as data: si = StringIO.StringIO(data.read()).getvalue() output = make_response(si) if request.path.split('/')[-1].startswith('temp'): # remove if filename starts with temp == temporary file os.remove('{}{}'.format(current_app.config.get('PATH_TMP'), request.path.split('download/')[-1])) output.headers["Content-Disposition"] = "attachment; filename=report.{}".format(request.path.split('.')[-1]) output.headers["Content-type"] = "application/x.download" return output if request.args.get('action') == 'editalarm': if request.args.get('alarmid', '0') == '0': # add new alarm alarm = Alarm(datetime.datetime.now(), '', 2, 0) else: # edit alarm alarm = Alarm.getAlarms(id=request.args.get('alarmid')) return render_template('frontend.alarms_edit.html', alarm=alarm, cities=City.getCities(), objects=AlarmObject.getAlarmObjects(), cars=Car.getCars(), frontendarea=request.args.get('frontendarea')) elif request.args.get('action') == 'alarmmonitor': # send alarm to monitor for monitor in Monitor.getMonitors(): scheduler.deleteJobForEvent('changeLayout') # send update to monitors for l in MonitorLayout.getLayouts(mid=int(monitor.id)): if l.trigger == 'alarm_added': #monitorserver.sendMessage(str(monitor.id), 'load', ['layoutid=%s' % l.id, 'alarmid=%s' % request.args.get('alarmid')]) TODO changed from list monitorserver.sendMessage(str(monitor.id), 'load', layoutid=l.id, alarmid=request.args.get('alarmid')) elif request.args.get('action') == 'printalarm': Printers.getPrinters(pid=int(request.args.get('printerdef'))).doPrint(object=Alarm.getAlarms(id=int(request.args.get('alarmid'))), id=request.args.get('alarmid'), copies=1) return "" elif request.args.get('action') == 'routeinfo': return render_template('frontend.alarms_routing.html', routing=Alarm.getAlarms(id=request.args.get('alarmid')).getRouting()) elif request.args.get('action') == 'routecoords': return jsonify(Alarm.getAlarms(id=request.args.get('alarmid')).getRouting()) elif request.args.get('action') == 'message': return render_template('frontend.alarms_message.html', alarm=Alarm.getAlarms(id=request.args.get('alarmid')), messagestates=AlarmHistory.historytypes, area=request.args.get('area'), reload=request.args.get('reload', 'true')) elif request.args.get('action') == 'addmessage': # add message if request.form.get('messagetext') != "": alarm = Alarm.getAlarms(request.form.get('alarmid')) alarm.addHistory(request.form.get('messagestate'), request.form.get('messagetext')) db.session.commit() return render_template('frontend.alarms_message.html', alarm=Alarm.getAlarms(request.form.get('alarmid')), messagestates=AlarmHistory.historytypes, area=request.args.get('area')) elif request.args.get('action') == 'deletemessage': # delete selected message alarm = Alarm.getAlarms(request.args.get('alarmid')) for msg in alarm.history: if str(msg.timestamp) == request.args.get('datetime'): db.session.delete(msg) db.session.commit() return render_template('frontend.alarms_message.html', alarm=Alarm.getAlarms(request.args.get('alarmid')), messagestates=AlarmHistory.historytypes, area=request.args.get('area')) elif request.args.get('action') == 'housecoordinates': # return a dict with coordinats of housenumber if request.args.get('alarmid') != "None": alarm = Alarm.getAlarms(id=int(request.args.get('alarmid'))) if alarm and alarm.housenumber: return {'lat': map(lambda x: x[0], alarm.housenumber.points), 'lng': map(lambda x: x[1], alarm.housenumber.points)} return [] elif request.args.get('action') == 'evalhouse': # try to eval housenumer street = Street.getStreets(id=request.args.get('streetid')) if street: points = dict(lat=[], lng=[]) for hn in street.housenumbers: if str(hn.number) == request.args.get('housenumber').strip(): points['lat'].extend(map(lambda x: x[0], hn.points)) points['lng'].extend(map(lambda x: x[1], hn.points)) return points return {} elif request.args.get('action') == 'alarmsforstate': # render alarms for given state if 'alarmfilter' not in session: session['alarmfilter'] = 7 return render_template('frontend.alarms_alarm.html', alarms=Alarm.getAlarms(days=int(session['alarmfilter']), state=int(request.args.get('state', '-1'))), printdefs=Printers.getActivePrintersOfModule('alarms')) elif request.args.get('action') == 'collective': # render collective form reports = [r for r in AlarmReport.getReports() if r.reporttype.multi] if len(reports) == 0: return "" return render_template('frontend.alarms_collective.html', alarms=Alarm.getAlarms(state=2), reports=reports) elif request.args.get('action') == 'docollective': # build collective form if request.args.get('ids') == "": ids = [] else: ids = request.args.get('ids').split(',') f = AlarmReport.getReports(request.args.get('form')).createReport(ids=ids) _path, _filename = os.path.split(f) shutil.move(f, "{}{}".format(current_app.config.get('PATH_TMP'), _filename)) return _filename elif request.args.get('action') == 'alarmpriocars': # show prio cars cars = [] c = Settings.getIntList('alarms.spc_cars.{}'.format(request.args.get('state'))) if len(c) == 0: return "" for alarm in Alarm.getAlarms(state=request.args.get('state')): cars.extend([car for car in alarm.cars1 if car.id in c]) cars = Counter(cars) return render_template('frontend.alarms_cars.html', cars=cars) elif request.args.get('action') == 'showdetailsform': # build alarmdetails edtit form alarm = Alarm.getAlarms(id=request.args.get('alarmid')) if alarm.street.city: fields = AlarmField.getAlarmFields(dept=alarm.street.city.dept) else: fields = AlarmField.getAlarmFields(dept=Department.getDefaultDepartment().id) return render_template('frontend.alarms_fields.html', alarm=alarm, fields=fields, reports=AlarmReport.getReports()) elif request.args.get('action') == 'saveextform': # store ext-form values alarm = Alarm.getAlarms(id=request.form.get('alarmid')) for field in AlarmField.getAlarmFields(dept=alarm.street.city.dept): field.saveForm(request, alarm) db.session.commit() return ""
def getValues(self, coldefinition): cars = {} notfound = {} states = {'-1': 0, '0': 0, '1': 0} for c in Car.getCars(deptid=coldefinition['dept']): cars[unicode(c.name)] = c keys = Alarmkey.getAlarmkeys() worksheet = self.book.sheet_by_name(self.book.sheet_names()[int(coldefinition['sheet'])]) def getPosForCol(name): ret = -65 while len(name) > 0: ret += ord(name[0]) name = name[1:] return ret def evalValue(crow, ccol): try: return worksheet.cell_value(crow, ccol) except: return "" importkeys = [] # state -1:new, 0:no changes, 1:need update for row in range(self.headerrow + 1, worksheet.nrows - 1): item = {'cars1': [], 'cars2': [], 'material': [], 'cars1_ids': [], 'cars2_ids': [], 'material_ids': [], 'dbid': None, 'state': '0', 'category': evalValue(row, getPosForCol(coldefinition['category'])), 'key': evalValue(row, getPosForCol(coldefinition['key'])), 'keyinternal': evalValue(row, getPosForCol(coldefinition['keyinternal'])), 'remark': evalValue(row, getPosForCol(coldefinition['remark']))} for field in ['cars1', 'cars2', 'material']: for c in coldefinition[field]: cell_val = evalValue(row, getPosForCol(c)) if unicode(cell_val) in cars.keys(): item[field].append(cars[unicode(cell_val)]) item[field + '_ids'].append(str(cars[unicode(cell_val)].id)) elif cell_val.strip() != '': if unicode(cell_val) not in notfound.keys(): n_c = Car('<em style="color:#ff0000">%s</em>' % cell_val, '', '', 0, 'new', coldefinition['dept']) notfound[unicode(cell_val)] = n_c else: n_c = notfound[unicode(cell_val)] item[field].append(n_c) item[field + '_ids'].append(-1) # check if key exists for k in keys: if unicode(k.category) == unicode(item['category']) and unicode(k.key) == unicode(item['key']): item['dbid'] = k.id if k.getCars1(coldefinition['dept']) != item['cars1'] or k.getCars2(coldefinition['dept']) != item['cars2'] or k.getMaterial(coldefinition['dept']) != item['material']: item['cars1'] = k.getCars1(coldefinition['dept']) item['cars2'] = k.getCars2(coldefinition['dept']) item['material'] = k.getMaterial(coldefinition['dept']) item['state'] = '1' # mark to update if not item['dbid']: item['state'] = '-1' # mark as new if item['category'] != '' and item['key'] != '': states[str(item['state'])] += 1 importkeys.append(item) return dict(keys=importkeys, carsnotfound=notfound, states=states)
def getAdminContent(self, **params): """ Deliver admin content of module alarms :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) > 1: if module[1] == 'types': impl = [] # load implementations of faxchecker for f in [f for f in os.listdir('%s/emonitor/modules/alarms/inc/' % current_app.config.get('PROJECT_ROOT')) if f.endswith('.py')]: if not f.startswith('__'): cls = imp.load_source('emonitor.modules.alarms.inc', 'emonitor/modules/alarms/inc/%s' % f) if isinstance(getattr(cls, cls.__all__[0])(), AlarmFaxChecker): impl.append((f, getattr(cls, cls.__all__[0])(), AlarmType.getAlarmTypeByClassname(f))) if request.method == 'POST': if request.form.get('action') == 'createtype': # add type params.update({'alarmtype': AlarmType('', ''), 'interpreter': impl}) return render_template('admin.alarms.type_actions.html', **params) elif request.form.get('action').startswith('deleteinterpreter_'): # delete checker for cls in impl: if cls[0] == request.form.get('action')[18:]: if os.path.exists('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0])): os.remove('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0])) if os.path.exists('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0])): os.remove('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0])) impl.remove(cls) elif request.form.get('action').startswith('editalarmtype_'): # edit type params.update({'alarmtype': AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])), 'interpreter': impl}) return render_template('admin.alarms.type_actions.html', **params) elif request.form.get('action').startswith('deletetype_'): # delete type atype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])) for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]: # delete event handlers and monitor layout for eh in Eventhandler.getEventhandlers(event=e.name): for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all(): if ';' in ml.trigger: _tr = ml.trigger.split(';') del _tr[_tr.index(e.name)] ml.trigger = ";".join(_tr) else: db.session.remove(ml) db.session.delete(eh) # delete event del events.events[events.events.index(e)] db.session.delete(atype) db.session.commit() elif request.form.get('action') == 'updatetype': # update type if request.form.get('type_id') == 'None': # add type atype = AlarmType('', '') db.session.add(atype) events.addEvent('alarm_added.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[]) events.addEvent('alarm_changestate.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[]) else: # update type atype = AlarmType.getAlarmTypes(id=int(request.form.get('type_id'))) for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]: # update event handler and monitor layout newname = '{}.{}'.format(e.name.split('.')[0], request.form.get('edit_name')) for eh in Eventhandler.getEventhandlers(event=e.name): for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all(): ml.trigger = ml.trigger.replace(e.name, newname) eh.event = newname # update event e.name = newname atype.name = request.form.get('edit_name') atype.keywords = request.form.get('edit_keywords') atype.interpreter = request.form.get('edit_interpreter') atype.attributes = dict(zip(request.form.getlist('attribute_name'), request.form.getlist('attribute_value'))) atype.translations = dict(zip(request.form.getlist('alarmtypevariables'), request.form.getlist('alarmtypetranslation'))) db.session.commit() if request.form.get('type_id') == 'None': # add predefined keywords and sections # add pre-defined sections for checker in [i for i in impl if i[0] == request.form.get('edit_interpreter')]: if request.form.get('edit_keywords') == "": atype.keywords = "\n".join(checker[1].getDefaultConfig()['keywords']) sections = checker[1].getDefaultConfig()['sections'] i = 1 for key in sections: db.session.add(AlarmSection(atype.id, key, sections[key][0], 1, sections[key][1], i)) i += 1 db.session.commit() elif request.form.get('action').startswith('createsection_'): # add section alarmtype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])) params.update({'alarmtype': alarmtype, 'section': AlarmSection(alarmtype.id, '', '', 0, '', 0), 'functions': alarmtype.interpreterclass().getEvalMethods()}) return render_template('admin.alarms.sections_actions.html', **params) elif request.form.get('action') == 'updatesection': # save section db.session.rollback() if request.form.get('section_id') == 'None': # add section = AlarmSection(request.form.get('edit_tid'), '', '', '', '', '') section.orderpos = 1 + len(AlarmSection.getSections()) db.session.add(section) else: # update section = AlarmSection.getSections(id=int(request.form.get('section_id'))) section.orderpos = request.form.get('edit_orderpos') section.tid = request.form.get('edit_tid') section.name = request.form.get('edit_name') section.key = request.form.get('edit_key') section.method = request.form.get('edit_method') section.active = request.form.get('edit_active') alarmtype = AlarmType.getAlarmTypes(request.form.get('edit_tid')) if alarmtype.interpreterclass().configtype == 'generic': attrs = {'start': request.form.get('edit_start'), 'end': request.form.get('edit_end')} if 'edit_multiline' in request.form.keys(): attrs['multiline'] = 'True' section.attributes = attrs db.session.commit() elif request.form.get('action') == 'updateorder': for item in [i for i in request.form if i.startswith('position_')]: ids = request.form.getlist(item) for _id in ids: AlarmSection.getSections(id=_id).orderpos = ids.index(_id) + 1 db.session.commit() elif request.form.get('action').startswith('editalarmsection_'): # edit section section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1])) params.update({'section': section, 'functions': section.alarmtype.interpreterclass().getEvalMethods(), 'alarmtype': AlarmType.getAlarmTypes(section.tid)}) return render_template('admin.alarms.sections_actions.html', **params) elif request.form.get('action').startswith('deletealarmsection_'): # delete section section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1])) db.session.delete(section) db.session.commit() params.update({'alarmtypes': AlarmType.getAlarmTypes(), 'interpreters': impl}) return render_template('admin.alarms.type.html', **params) elif module[1] == 'report': if request.method == 'POST': if request.form.get('action') == 'createreport': # add report params.update({'report': AlarmReport('', '', '', 1, []), 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes()}) return render_template('admin.alarms.report_action.html', **params) elif request.form.get('action') == 'updatereport': if request.form.get('report_id') == 'None': # add new report report = AlarmReport('', '', '', '') db.session.add(report) else: report = AlarmReport.getReports(request.form.get('report_id')) report.name = request.form.get('edit_name') if not request.form.get('template').startswith(current_app.config.get('PATH_DATA')): # internal template report._reporttype = 'internal' report.filename = request.form.get('template').replace("{}/emonitor/modules/alarms/templates/".format(current_app.config.get('PROJECT_ROOT')).replace('\\', '/'), "") else: report._reporttype = 'external' report.filename = request.form.get('template').replace("{}".format(current_app.config.get('PATH_DATA')), "") report.fields = json.loads(request.form.get('fielddefinition')) report.departments = request.form.getlist('edit_department') db.session.commit() elif request.form.get('action').startswith('editreport_'): # edit report report = AlarmReport.getReports(request.form.get('action').split('_')[-1]) params.update({'report': report, 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes(), 'alarmfields': AlarmField.getAlarmFields()}) return render_template('admin.alarms.report_action.html', **params) elif request.form.get('action').startswith('deletereport_'): # delete report report = AlarmReport.getReports(request.form.get('action').split('_')[-1]) if AlarmReport.query.filter(AlarmReport.filename == report.filename).count() == 1 and os.path.exists(report.filename): os.remove(report.filename) db.session.delete(report) db.session.commit() params.update({'reports': AlarmReport.getReports(), 'departments': Department.getDepartments()}) return render_template('admin.alarms.report.html', **params) elif module[1] == 'config': if request.method == 'POST': if request.form.get('action') == 'alarmcarsprio': for k in Alarm.ALARMSTATES.keys(): if 'used_cars{}'.format(k) in request.form.keys(): Settings.set('alarms.spc_cars.{}'.format(k), request.form.get('used_cars{}'.format(k))) db.session.commit() elif request.form.get('action') == 'alarmsettings': Settings.set('alarms.autoclose', request.form.get('settings.autoclose')) for aalarm in [a for a in Alarm.getAlarms() if a.state == 1]: # only active alarms aalarm.updateSchedules(reference=1) # use alarmtime as refernce elif request.form.get('action') == 'archivesettings': Settings.set('alarms.autoarchive', request.form.get('settings.autoarchive')) for aalarm in [a for a in Alarm.getAlarms() if a.state == 2]: # only closed alarms aalarm.updateSchedules(reference=1) # use alarmtime as refernce elif request.form.get('action').startswith('save_'): if request.form.get('fieldid') == 'None': field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[1], dept=request.form.get('action').split('_')[2]) db.session.add(field) else: field = AlarmField.getAlarmFields(id=request.form.get('fieldid')) field.saveConfigForm(request) db.session.commit() elif request.form.get('action').startswith('field_delete_'): # delete definition of field db.session.delete(AlarmField.getAlarmFields(id=request.form.get('action').split('_')[-1])) db.session.commit() elif request.form.get('action').startswith('field_add_'): # add field for department field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[-2], dept=request.form.get('action').split('_')[-1]) field.name = babel.gettext(field.name) db.session.add(field) db.session.commit() fields = {} for dept in Department.getDepartments(): fields[dept.id] = AlarmField.getAlarmFieldsForDepartment(dept.id) params.update({'cars': Car.getCars(), 'alarmstates': Alarm.ALARMSTATES, 'settings': Settings, 'departments': Department.getDepartments(), 'fields': fields}) return render_template('admin.alarms.config.html', **params) elif module[1] == 'test': params.update({'uploadfileformat': filter(None, sum([Settings.get('ocr.inputformat', []), Settings.get('ocr.inputtextformat', [])], []))}) return render_template('admin.alarms.test.html', **params) else: params.update({'alarms': dict(Alarm.getAlarmCount()), 'alarmstates': Alarm.ALARMSTATES, 'help': self.hasHelp('admin')}) return render_template('admin.alarms.html', **params)
def getFrontendContent(**params): """ Deliver frontend content of module alarms :return: data of alarms """ from emonitor.extensions import monitorserver if 'alarmfilter' not in session: session['alarmfilter'] = '7' if request.args.get( 'alarmfilter'): # filter for alarms last x days, -1 no filter set session['alarmfilter'] = request.args.get('alarmfilter', '7') if 'area' in request.args: params['area'] = request.args.get('area') if 'state' in request.args: params['activeacc'] = request.args.get('state') if request.form.get('action') == 'updatealarm': if request.form.get('alarm_id') != 'None': # update alarm alarm = Alarm.getAlarms(request.form.get('alarm_id')) else: # create new alarm d = datetime.datetime.strptime( '%s %s' % (request.form.get('edit_timestamp_date'), request.form.get('edit_timestamp_time')), "%d.%m.%Y %H:%M:%S") alarm = Alarm(d, request.form.get('edit_keyid'), 2, 0) db.session.add(alarm) params['activeacc'] = 1 try: alarm.timestamp = datetime.datetime.strptime( '%s %s' % (request.form.get('edit_timestamp_date'), request.form.get('edit_timestamp_time')), "%d.%m.%Y %H:%M:%S") except ValueError: alarm.timestamp = datetime.datetime.now() alarm._key = request.form.get('edit_key') alarm.set(u'id.key', request.form.get('edit_keyid')) alarm.set(u'k.cars1', request.form.get('val_cars1')) alarm.set(u'k.cars2', request.form.get('val_cars2')) alarm.set(u'k.material', request.form.get('val_material')) alarm.set(u'marker', request.form.get('marker')) alarm.set(u'id.city', request.form.get('edit_city')) _city = City.getCities(id=request.form.get('edit_cityname')) if _city: alarm.set(u'city', _city.name) else: alarm.set(u'city', request.form.get('edit_cityname')) alarm.set(u'streetno', request.form.get('edit_streetno')) street = Street.getStreets(id=request.form.get('edit_addressid')) hnumber = None if street: alarm.set(u'id.address', street.id) try: hnumber = [ h for h in street.housenumbers if h.number == request.form.get('edit_streetno').split()[0] ] if len(hnumber) > 0: alarm.set(u'lat', hnumber[0].points[0][0]) alarm.set(u'lng', hnumber[0].points[0][1]) except IndexError: pass elif request.form.get('edit_addressid') == 'None': alarm.set(u'id.address', '') else: alarm.set(u'id.address', request.form.get('edit_addressid')) alarm.set(u'address', request.form.get('edit_address')) if request.form.get('edit_object') != '0': alarm.set(u'id.object', request.form.get('edit_object')) else: # remove object definition if present if u'id.object' in alarm.attributes: del alarm.attributes[u'id.object'] if u'object' in alarm.attributes: del alarm.attributes[u'object'] alarm.set(u'priority', request.form.get('edit_priority')) alarm.set(u'remark', request.form.get('edit_remark')) alarm.set(u'person', request.form.get('edit_person')) if request.form.get(u'edit_address2').strip() != '': alarm.set(u'address2', request.form.get('edit_address2')) if (request.form.get(u'marker') == '1' and not hnumber) or request.form.get('update_position') == '1': alarm.set(u'routing', '') alarm.set(u'lat', request.form.get('lat')) alarm.set(u'lng', request.form.get('lng')) alarm.set(u'zoom', request.form.get('zoom')) try: d = datetime.datetime.strptime( '%s %s' % (request.form.get('edit_endtimestamp_date'), request.form.get('edit_endtimestamp_time')), "%d.%m.%Y %H:%M:%S") except ValueError: d = datetime.datetime.now() alarm.set(u'endtimestamp', d) db.session.commit() signal.send('alarm', 'updated', alarmid=alarm.id) if request.form.get('alarm_id') == u'None': # create new Alarm.changeState(alarm.id, 0) # prepare alarm return redirect('/alarms?area=%s&state=1' % params['area']) elif alarm.state == 1: # active alarm update monitorserver.sendMessage('0', 'reset') # refresh monitor layout return redirect('/alarms?area=%s&state=0' % params['area']) elif request.args.get('action') == 'editalarm': if request.args.get('alarmid', '0') == '0': # add new alarm alarm = Alarm(datetime.datetime.now(), '', 2, 0) #flash(babel.gettext(u'alarms.alarmadded'), 'alarms.add') else: # edit alarm alarm = Alarm.getAlarms(id=request.args.get('alarmid')) return render_template( 'frontend.alarms_edit.html', alarm=alarm, cities=City.getCities(), objects=AlarmObject.getAlarmObjects(), cars=Car.getCars(), departments=Department.getDepartments(), frontendarea=params['area'], frontendmodules=frontend.modules, frontendmoduledef=Settings.get('frontend.default')) elif request.args.get('action') == 'refresh': # refresh alarm section params['area'] = request.args.get('area') params['activeacc'] = int(request.args.get('activeacc')) elif request.args.get('action') == 'finishalarm': # finish selected alarm Alarm.changeState(int(request.args.get('alarmid')), 2) params['area'] = request.args.get('area') elif request.args.get( 'action') == 'activatealarm': # activate selected alarm ret = Alarm.changeState(int(request.args.get('alarmid')), 1) if len(ret) > 0: flash( render_template_string( "{{ _('alarms.carsinuse') }}</br><b>" + ", ".join( [r.name for r in sorted(ret, key=attrgetter('name'))]) + "</b>"), 'alarms') params['area'] = request.args.get('area') params['activeacc'] = 0 elif request.args.get('action') == 'deletealarm': # delete selected alarm alarm = Alarm.getAlarms(id=request.args.get('alarmid')) refresh = 1 or alarm.state == 1 # check if alarm is active try: # delete file if not used in any other alarm c = Alarm.query.filter( Alarm.attributes.any(value=alarm.get('filename'), name="filename")).count() if c == 1 and os.path.exists("{}{}".format( current_app.config.get('PATH_DONE'), alarm.get('filename'))): os.remove("{}{}".format(current_app.config.get('PATH_DONE'), alarm.get('filename'))) except: pass alarm.state = -1 alarm.updateSchedules() db.session.delete(alarm) db.session.commit() if refresh: monitorserver.sendMessage('0', 'reset') # refresh monitor layout signal.send('alarm', 'deleted', alarmid=request.args.get('alarmid')) elif request.args.get( 'action' ) == 'archivealarm': # archive selected alarms, id=0 == all if ";" in request.args.get('alarmid'): # archive selected alarms for alarmid in request.args.get('alarmid').split(';'): Alarm.changeState(int(alarmid), 3) elif int(request.args.get('alarmid')) == 0: # archive all alarms Alarm.changeStates(3) else: # archive single selected alarm Alarm.changeState(int(request.args.get('alarmid')), 3) params['area'] = request.args.get('area') stats = dict.fromkeys(Alarm.ALARMSTATES.keys() + ['3'], 0) for s, c in Alarm.getAlarmCount(days=int( session['alarmfilter'])): # s=state, c=count(ids of state) if str(s) in stats.keys(): stats[str(s)] = c if 'area' not in params: params['area'] = 'center' if 'activeacc' not in params: params['activeacc'] = 0 return render_template( 'frontend.alarms_smallarea.html', alarmstates=Alarm.ALARMSTATES, stats=stats, frontendarea=params['area'], activeacc=str(params['activeacc']), printdefs=Printers.getActivePrintersOfModule('alarms'), frontendmodules=frontend.modules, frontendmoduledef=Settings.get('frontend.default'), alarmfilter=session['alarmfilter'])
def getAdminContent(self, **params): """ Deliver admin content of module alarmobjects :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] if len(module) > 1: # type definition if module[1] == 'types': if request.method == 'POST': if request.form.get('action') == 'createalarmobjecttype': # add type params.update({'alarmobjecttype': AlarmObjectType('', '')}) return render_template('admin.alarmobjects.types_action.html', **params) elif request.form.get('action') == 'savealarmobjecttype': # save type if request.form.get('alarmobjecttype_id') == 'None': # add new type alarmobjecttype = AlarmObjectType('', '') db.session.add(alarmobjecttype) else: # update existing alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('alarmobjecttype_id'))) alarmobjecttype.name = request.form.get('alarmobjecttype_name') alarmobjecttype.remark = request.form.get('alarmobjecttype_remark') db.session.commit() elif request.form.get('action').startswith('detailobjecttype'): # edit type alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('action').split('_')[-1])) params.update({'alarmobjecttype': alarmobjecttype}) return render_template('admin.alarmobjects.types_action.html', **params) elif request.form.get('action').startswith('deleteobjecttype_'): # delete type db.session.delete(AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update({'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects.types.html', **params) elif module[1] == 'fields': if request.method == 'POST': if request.form.get('action') == 'updatefield': # update fields Settings.set('alarmobjectfields', [i for i in chunks(request.form.getlist('fieldname'), 2) if i[0] != '']) db.session.commit() params.update({'fields': Settings.get('alarmobjectfields', [])}) return render_template('admin.alarmobjects.fields.html', **params) else: # base view if request.method == 'POST': streets = Street.getStreets() if request.form.get('action') == 'createalarmobject': # add alarmobject params.update({'alarmobject': AlarmObject('', 0, '', Settings.get('defaultLat'), Settings.get('defaultLng'), Settings.get('defaultZoom'), '', '', '', 0, 0), 'streets': streets, 'selectedstreet': '', 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action') == 'savealarmobject': # save if request.form.get('alarmobject_id') == 'None': # add new alarmobject = AlarmObject('', 0, '', 0, 0, 0, '', '', '', 0, 0) db.session.add(alarmobject) else: # update existing alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id')) alarmobject.name = request.form.get('edit_name') alarmobject._streetid = request.form.get('streetid') alarmobject._objecttype = int(request.form.get('edit_objecttype')) alarmobject.remark = request.form.get('edit_remark') if request.form.get('edit_position') == '1': alarmobject.lat = request.form.get('edit_lat') alarmobject.lng = request.form.get('edit_lng') alarmobject.zoom = request.form.get('edit_zoom') alarmobject.streetno = request.form.get('edit_streetno') alarmobject.alarmplan = request.form.get('edit_alarmplan') alarmobject.bma = request.form.get('edit_bma') alarmobject.active = int(request.form.get('edit_active', '0')) db.session.commit() elif request.form.get('action') == 'savealarmobjectattributes': # save attributes alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id')) for field in Settings.get('alarmobjectfields', []): # store attributes if 'edit_%s' % field[0] in request.form: alarmobject.set(field[0], request.form.get('edit_%s' % field[0])) db.session.commit() elif request.form.get('action') == 'savealarmobjectaao': # save aao alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id')) if alarmobject: alarmobject.set('cars1', [c for c in request.form.get('cars1').split(';') if c != '']) alarmobject.set('cars2', [c for c in request.form.get('cars2').split(';') if c != '']) alarmobject.set('material', [c for c in request.form.get('material').split(';') if c != '']) db.session.commit() elif request.form.get('action').startswith('editalarmobject_'): # edit alarmobject alarmobject = AlarmObject.getAlarmObjects(id=int(request.form.get('action').split('_')[-1])) params.update({'alarmobject': alarmobject, 'streets': streets, 'selectedstreet': '%s (%s)' % (alarmobject.street.name, alarmobject.street.city.name), 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes(), 'fields': Settings.get('alarmobjectfields', []), 'cars': Car.getCars(deptid=Department.getDefaultDepartment().id)}) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action').startswith('deletealarmobject_'): # delete alarmobject db.session.delete(AlarmObject.getAlarmObjects(id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update({'alarmobjects': AlarmObject.getAlarmObjects(active=0), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects.html', **params)
def getFrontendData(self): """ Deliver frontend content of module alarms (ajax) :return: rendered template as string or json dict """ from emonitor.extensions import monitorserver if "download" in request.path: # deliver file with open( '{}{}'.format(current_app.config.get('PATH_TMP'), request.path.split('download/')[-1]), 'rb') as data: si = StringIO.StringIO(data.read()).getvalue() output = make_response(si) if request.path.split('/')[-1].startswith( 'temp' ): # remove if filename starts with temp == temporary file os.remove('{}{}'.format(current_app.config.get('PATH_TMP'), request.path.split('download/')[-1])) output.headers[ "Content-Disposition"] = "attachment; filename=report.{}".format( request.path.split('.')[-1]) output.headers["Content-type"] = "application/x.download" return output if request.args.get('action') == 'editalarm': if request.args.get('alarmid', '0') == '0': # add new alarm alarm = Alarm(datetime.datetime.now(), '', 2, 0) else: # edit alarm alarm = Alarm.getAlarms(id=request.args.get('alarmid')) return render_template('frontend.alarms_edit.html', alarm=alarm, cities=City.getCities(), objects=AlarmObject.getAlarmObjects(), cars=Car.getCars(), frontendarea=request.args.get('frontendarea')) elif request.args.get('action') == 'alarmmonitor': # send alarm to monitor for monitor in Monitor.getMonitors(): scheduler.deleteJobForEvent( 'changeLayout') # send update to monitors for l in MonitorLayout.getLayouts(mid=int(monitor.id)): if l.trigger == 'alarm_added': #monitorserver.sendMessage(str(monitor.id), 'load', ['layoutid=%s' % l.id, 'alarmid=%s' % request.args.get('alarmid')]) TODO changed from list monitorserver.sendMessage( str(monitor.id), 'load', layoutid=l.id, alarmid=request.args.get('alarmid')) elif request.args.get('action') == 'printalarm': Printers.getPrinters(pid=int(request.args.get('printerdef'))).doPrint( object=Alarm.getAlarms(id=int(request.args.get('alarmid'))), id=request.args.get('alarmid'), copies=1) return "" elif request.args.get('action') == 'routeinfo': return render_template( 'frontend.alarms_routing.html', routing=Alarm.getAlarms( id=request.args.get('alarmid')).getRouting()) elif request.args.get('action') == 'routecoords': return jsonify( Alarm.getAlarms(id=request.args.get('alarmid')).getRouting()) elif request.args.get('action') == 'message': return render_template( 'frontend.alarms_message.html', alarm=Alarm.getAlarms(id=request.args.get('alarmid')), messagestates=AlarmHistory.historytypes, area=request.args.get('area'), reload=request.args.get('reload', 'true')) elif request.args.get('action') == 'addmessage': # add message if request.form.get('messagetext') != "": alarm = Alarm.getAlarms(request.form.get('alarmid')) alarm.addHistory(request.form.get('messagestate'), request.form.get('messagetext')) db.session.commit() return render_template('frontend.alarms_message.html', alarm=Alarm.getAlarms( request.form.get('alarmid')), messagestates=AlarmHistory.historytypes, area=request.args.get('area')) elif request.args.get( 'action') == 'deletemessage': # delete selected message alarm = Alarm.getAlarms(request.args.get('alarmid')) for msg in alarm.history: if str(msg.timestamp) == request.args.get('datetime'): db.session.delete(msg) db.session.commit() return render_template('frontend.alarms_message.html', alarm=Alarm.getAlarms( request.args.get('alarmid')), messagestates=AlarmHistory.historytypes, area=request.args.get('area')) elif request.args.get( 'action' ) == 'housecoordinates': # return a dict with coordinats of housenumber if request.args.get('alarmid') != "None": alarm = Alarm.getAlarms(id=int(request.args.get('alarmid'))) if alarm and alarm.housenumber: return { 'lat': map(lambda x: x[0], alarm.housenumber.points), 'lng': map(lambda x: x[1], alarm.housenumber.points) } return [] elif request.args.get('action') == 'evalhouse': # try to eval housenumer street = Street.getStreets(id=request.args.get('streetid')) if street: points = dict(lat=[], lng=[]) for hn in street.housenumbers: if str(hn.number) == request.args.get('housenumber').strip(): points['lat'].extend(map(lambda x: x[0], hn.points)) points['lng'].extend(map(lambda x: x[1], hn.points)) return points return {} elif request.args.get( 'action') == 'alarmsforstate': # render alarms for given state if 'alarmfilter' not in session: session['alarmfilter'] = 7 return render_template( 'frontend.alarms_alarm.html', alarms=Alarm.getAlarms(days=int(session['alarmfilter']), state=int(request.args.get('state', '-1'))), printdefs=Printers.getActivePrintersOfModule('alarms')) elif request.args.get('action') == 'collective': # render collective form reports = [r for r in AlarmReport.getReports() if r.reporttype.multi] if len(reports) == 0: return "" return render_template('frontend.alarms_collective.html', alarms=Alarm.getAlarms(state=2), reports=reports) elif request.args.get('action') == 'docollective': # build collective form if request.args.get('ids') == "": ids = [] else: ids = request.args.get('ids').split(',') f = AlarmReport.getReports( request.args.get('form')).createReport(ids=ids) _path, _filename = os.path.split(f) shutil.move( f, "{}{}".format(current_app.config.get('PATH_TMP'), _filename)) return _filename elif request.args.get('action') == 'alarmpriocars': # show prio cars cars = [] c = Settings.getIntList('alarms.spc_cars.{}'.format( request.args.get('state'))) if len(c) == 0: return "" for alarm in Alarm.getAlarms(state=request.args.get('state')): cars.extend([car for car in alarm.cars1 if car.id in c]) cars = Counter(cars) return render_template('frontend.alarms_cars.html', cars=cars) elif request.args.get( 'action') == 'showdetailsform': # build alarmdetails edtit form alarm = Alarm.getAlarms(id=request.args.get('alarmid')) if alarm.street.city: fields = AlarmField.getAlarmFields(dept=alarm.street.city.dept) else: fields = AlarmField.getAlarmFields( dept=Department.getDefaultDepartment().id) return render_template('frontend.alarms_fields.html', alarm=alarm, fields=fields, reports=AlarmReport.getReports()) elif request.args.get('action') == 'saveextform': # store ext-form values alarm = Alarm.getAlarms(id=request.form.get('alarmid')) for field in AlarmField.getAlarmFields(dept=alarm.street.city.dept): field.saveForm(request, alarm) db.session.commit() return ""
def getAdminContent(self, **params): """ Deliver admin content of module alarmkeys :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if len(module) > 2 and module[2] == 'upload': # upload alarmkeys params.update({'': int(module[1]), 'department': module[1]}) return render_template('admin.alarmkeys.upload.html', **params) else: depid = 1 try: if int(module[1]): depid = int(module[1]) except: pass if request.method == 'POST': if request.form.get('action') == 'adddefault': # add default aao params.update({ 'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': 0 }) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get( 'action') == 'savedefault': # save default aao alarmkeycar = AlarmkeyCars.getAlarmkeyCars( kid=9999, dept=request.form.get( 'deptid')) # 9999 = default department if not alarmkeycar: # add alarmkeycar = AlarmkeyCars(9999, request.form.get('deptid'), '', '', '') db.session.add(alarmkeycar) alarmkeycar.cars1 = request.form.get('cars1') alarmkeycar.cars2 = request.form.get('cars2') alarmkeycar.materials = request.form.get('material') if alarmkeycar.kid != 9999 and request.form.get( 'cars1') == request.form.get( 'cars2') == request.form.get( 'material') == '': # remove db.session.delete(alarmkeycar) db.session.commit() elif request.form.get( 'action') == 'editdefault': # edit default aao params.update({ 'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': -1 }) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'addkey': # add key params.update({ 'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': -2 }) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'savekey': # save key if request.form.get('keyid') == 'None': # add new alarmkey = Alarmkey('', '', '', '') db.session.add(alarmkey) db.session.commit() else: # update existing alarmkey = Alarmkey.getAlarmkeys(request.form.get('keyid')) alarmkey.category = request.form.get('category') alarmkey.key = request.form.get('key') alarmkey.key_internal = request.form.get('keyinternal') alarmkey.remark = request.form.get('remark') alarmkey.setCars(int(request.form.get('deptid')), cars1=request.form.get('cars1'), cars2=request.form.get('cars2'), material=request.form.get('material')) db.session.commit() elif request.form.get('action').startswith( 'deletecars_'): # delete car definition _op, _kid, _dept = request.form.get('action').split('_') keycar = AlarmkeyCars.getAlarmkeyCars(kid=_kid, dept=_dept) if keycar: db.session.delete(keycar) db.session.commit() # delete key if no definied cars if len(AlarmkeyCars.getAlarmkeyCars(kid=_kid)) == 0: key = Alarmkey.getAlarmkeys(id=_kid) db.session.delete(key) db.session.commit() elif request.form.get('action').startswith( 'editcars_'): # edit key with cars _op, _kid, _dept = request.form.get('action').split('_') params.update({ 'alarmkey': Alarmkey.getAlarmkeys(id=_kid), 'depid': _dept, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': 1 }) return render_template('admin.alarmkeys_actions.html', **params) alarmkeys_count = [] ak = Alarmkey counted_keys = db.get(ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id')).group_by(ak.category) _sum = 0 for r in counted_keys.all(): alarmkeys_count.append([r.category, r.key, r.id]) _sum += int(r.key) params.update({ 'alarmkeys_count': alarmkeys_count, 'depid': depid, 'defaultcars': Alarmkey.getDefault(depid), 'sum': _sum }) return render_template('admin.alarmkeys.html', **params)
def getValues(self, coldefinition): cars = {} notfound = {} states = {'-1': 0, '0': 0, '1': 0} for c in Car.getCars(deptid=coldefinition['dept']): cars[unicode(c.name)] = c keys = Alarmkey.getAlarmkeys() worksheet = self.book.sheet_by_name(self.book.sheet_names()[int( coldefinition['sheet'])]) def getPosForCol(name): ret = -65 while len(name) > 0: ret += ord(name[0]) name = name[1:] return ret def evalValue(crow, ccol): try: return worksheet.cell_value(crow, ccol) except: return "" importkeys = [] # state -1:new, 0:no changes, 1:need update for row in range(self.headerrow + 1, worksheet.nrows - 1): item = { 'cars1': [], 'cars2': [], 'material': [], 'cars1_ids': [], 'cars2_ids': [], 'material_ids': [], 'dbid': None, 'state': '0', 'category': evalValue(row, getPosForCol(coldefinition['category'])), 'key': evalValue(row, getPosForCol(coldefinition['key'])), 'keyinternal': evalValue(row, getPosForCol(coldefinition['keyinternal'])), 'remark': evalValue(row, getPosForCol(coldefinition['remark'])) } for field in ['cars1', 'cars2', 'material']: for c in coldefinition[field]: cell_val = evalValue(row, getPosForCol(c)) if unicode(cell_val) in cars.keys(): item[field].append(cars[unicode(cell_val)]) item[field + '_ids'].append( str(cars[unicode(cell_val)].id)) elif cell_val.strip() != '': if unicode(cell_val) not in notfound.keys(): n_c = Car( '<em style="color:#ff0000">%s</em>' % cell_val, '', '', 0, 'new', coldefinition['dept']) notfound[unicode(cell_val)] = n_c else: n_c = notfound[unicode(cell_val)] item[field].append(n_c) item[field + '_ids'].append(-1) # check if key exists for k in keys: if unicode(k.category) == unicode( item['category']) and unicode(k.key) == unicode( item['key']): item['dbid'] = k.id if k.getCars1( coldefinition['dept'] ) != item['cars1'] or k.getCars2( coldefinition['dept'] ) != item['cars2'] or k.getMaterial( coldefinition['dept']) != item['material']: item['cars1'] = k.getCars1(coldefinition['dept']) item['cars2'] = k.getCars2(coldefinition['dept']) item['material'] = k.getMaterial(coldefinition['dept']) item['state'] = '1' # mark to update if not item['dbid']: item['state'] = '-1' # mark as new if item['category'] != '' and item['key'] != '': states[str(item['state'])] += 1 importkeys.append(item) return dict(keys=importkeys, carsnotfound=notfound, states=states)
def getAdminContent(self, **params): """ Deliver admin content of module alarmkeys :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if len(module) > 2 and module[2] == 'upload': # upload alarmkeys params.update({'': int(module[1]), 'department': module[1]}) return render_template('admin.alarmkeys.upload.html', **params) else: depid = 1 try: if module[1].isnumeric(): depid = int(module[1]) except: pass if request.method == 'POST': if depid == 0: if request.form.get('action', '') == 'createset': # add alarmkeyset params.update({'alarmkeyset': AlarmkeySet('', '', datetime.date.today(), datetime.date.today(), ''), 'setbases': AlarmkeySet.getBases(), 'orphankeys': Alarmkey.getOrphanKeys()}) return render_template('admin.alarmkeys.set_actions.html', **params) elif request.form.get('action', '').startswith('deleteset_'): db.session.delete(AlarmkeySet.getAlarmkeySets(request.form.get('action', '').split('_')[-1])) db.session.commit() elif request.form.get('action', '').startswith('detailset_'): # edit alarmkeyset params.update({'alarmkeyset': AlarmkeySet.getAlarmkeySets(request.form.get('action').split('_')[-1]), 'setbases': AlarmkeySet.getBases(), 'orphankeys': Alarmkey.getOrphanKeys()}) return render_template('admin.alarmkeys.set_actions.html', **params) elif request.form.get('action', '') == 'savealarmkeyset': # save alarmkeyset if request.form.get('set_id', '') == 'None': # add akset = AlarmkeySet('', '', datetime.date.today(), datetime.date.today(), '') db.session.add(akset) else: akset = AlarmkeySet.getAlarmkeySets(request.form.get('set_id')) akset.name = request.form.get('set_name') if request.form.get('set_startdate', '') != "": akset.startdate = datetime.datetime.strptime(request.form.get('set_startdate'), '%d.%m.%Y') else: akset.startdate = None if request.form.get('set_enddate', '') != "": akset.enddate = datetime.datetime.strptime(request.form.get('set_enddate'), '%d.%m.%Y') else: akset.enddate = None akset.remark = request.form.get('set_remark') akset.base = request.form.get('set_base') db.session.commit() if 'set_assignorphan' in request.form.keys(): # add all orphan keys to current set for key in Alarmkey.getOrphanKeys(): key._keyset = int(akset.id) db.session.commit() elif request.form.get('action', '').startswith('deletebase_'): if os.path.exists("{}alarmkeysetbase/{}".format(current_app.config.get('PATH_DATA'), "_".join(request.form.get('action', '').split('_')[1:]))): os.remove("{}alarmkeysetbase/{}".format(current_app.config.get('PATH_DATA'), "_".join(request.form.get('action', '').split('_')[1:]))) params.update({'aksets': AlarmkeySet.getAlarmkeySets(), 'akbases': AlarmkeySet.getBases()}) return render_template('admin.alarmkeys.set_list.html', **params) if request.form.get('action') == 'adddefault': # add default aao params.update({'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': 0}) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'savedefault': # save default aao alarmkeycar = AlarmkeyCars.getAlarmkeyCars(kid=9999, dept=request.form.get('deptid')) # 9999 = default department if not alarmkeycar: # add alarmkeycar = AlarmkeyCars(9999, request.form.get('deptid'), '', '', '') db.session.add(alarmkeycar) alarmkeycar.cars1 = request.form.get('cars1') alarmkeycar.cars2 = request.form.get('cars2') alarmkeycar.materials = request.form.get('material') if alarmkeycar.kid != 9999 and request.form.get('cars1') == request.form.get('cars2') == request.form.get('material') == '': # remove db.session.delete(alarmkeycar) db.session.commit() elif request.form.get('action') == 'editdefault': # edit default aao params.update({'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'aksets': AlarmkeySet.getAlarmkeySets(), 'cars': Car.getCars(), 'type': -1}) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'addkey': # add key params.update({'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'aksets': AlarmkeySet.getAlarmkeySets(), 'cars': Car.getCars(), 'type': -2}) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'savekey': # save key if request.form.get('keyid') == 'None': # add new alarmkey = Alarmkey('', '', '', '') db.session.add(alarmkey) db.session.commit() else: # update existing alarmkey = Alarmkey.getAlarmkeys(request.form.get('keyid')) alarmkey.category = request.form.get('category') alarmkey.key = request.form.get('key') alarmkey.key_internal = request.form.get('keyinternal') alarmkey.remark = request.form.get('remark') if request.form.get('keyset', '') == '': alarmkey._keyset = None else: alarmkey._keyset = request.form.get('keyset') alarmkey.setCars(int(request.form.get('deptid')), cars1=request.form.get('cars1'), cars2=request.form.get('cars2'), material=request.form.get('material')) alarmkey.keysetitem = None if request.form.get('keyset', '') != "": keyset = AlarmkeySet.getAlarmkeySets(request.form.get('keyset')) if keyset: item = filter(lambda x: x.get('stichwort') == alarmkey.category and x.get('schlagwort') == alarmkey.key, keyset.alarmkeys) if len(item) > 0: alarmkey.keysetitem = item[0].get('nr') db.session.commit() # readd elif request.form.get('action').startswith('deletecars_'): # delete car definition _op, _kid, _dept = request.form.get('action').split('_') keycar = AlarmkeyCars.getAlarmkeyCars(kid=_kid, dept=_dept) if keycar: db.session.delete(keycar) db.session.commit() # delete key if no definied cars if len(AlarmkeyCars.getAlarmkeyCars(kid=_kid)) == 0: key = Alarmkey.getAlarmkeys(id=_kid) db.session.delete(key) db.session.commit() elif request.form.get('action').startswith('editcars_'): # edit key with cars _op, _kid, _dept = request.form.get('action').split('_') params.update({'alarmkey': Alarmkey.getAlarmkeys(id=_kid), 'depid': _dept, 'departments': Department.getDepartments(), 'aksets': AlarmkeySet.getAlarmkeySets(), 'cars': Car.getCars(), 'type': 1}) return render_template('admin.alarmkeys_actions.html', **params) if depid == 0: # edit options params.update({'aksets': AlarmkeySet.getAlarmkeySets(), 'departments': Department.getDepartments(), 'akbases': AlarmkeySet.getBases()}) return render_template('admin.alarmkeys.set_list.html', **params) params.update({'depid': depid, 'defaultcars': Alarmkey.getDefault(depid), 'aksets': AlarmkeySet.getAlarmkeySets()}) return render_template('admin.alarmkeys.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module cars :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if request.method == 'POST': if request.form.get('action') == 'createcars': # add car params.update({ 'car': Car('', '', '', '', '', int(module[1])), 'departments': Department.getDepartments(), 'cartypes': Settings.getCarTypes() }) return render_template('admin.cars_edit.html', **params) elif request.form.get('action') == 'updatecars': # save car if request.form.get('car_id') != 'None': # update car car = Car.getCars(id=request.form.get('car_id')) else: # add car car = Car('', '', '', '', '', module[1]) db.session.add(car) car.name = request.form.get('edit_name') car.description = request.form.get('edit_description') car.fmsid = request.form.get('edit_fmsid') car.active = request.form.get('edit_active') car.type = request.form.get('edit_type') car._dept = request.form.get('edit_department') db.session.commit() elif request.form.get('action') == 'cancel': pass elif request.form.get('action').startswith('editcars_'): # edit car params.update({ 'car': Car.getCars(id=request.form.get('action').split('_')[-1]), 'departments': Department.getDepartments(), 'cartypes': Settings.getCarTypes() }) return render_template('admin.cars_edit.html', **params) elif request.form.get('action').startswith( 'deletecars_'): # delete car db.session.delete( Car.getCars(id=request.form.get('action').split('_')[-1])) db.session.commit() try: cars = Department.getDepartments(module[1]).getCars() except AttributeError: cars = [] params.update({'cars': cars}) return render_template('admin.cars.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module alarmkeys :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') if len(module) < 2: module.append(u'1') if len(module) > 2 and module[2] == 'upload': # upload alarmkeys params.update({'': int(module[1]), 'department': module[1]}) return render_template('admin.alarmkeys.upload.html', **params) else: depid = 1 try: if int(module[1]): depid = int(module[1]) except: pass if request.method == 'POST': if request.form.get('action') == 'adddefault': # add default aao params.update({'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': 0}) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'savedefault': # save default aao alarmkeycar = AlarmkeyCars.getAlarmkeyCars(kid=9999, dept=request.form.get('deptid')) # 9999 = default department if not alarmkeycar: # add alarmkeycar = AlarmkeyCars(9999, request.form.get('deptid'), '', '', '') db.session.add(alarmkeycar) alarmkeycar.cars1 = request.form.get('cars1') alarmkeycar.cars2 = request.form.get('cars2') alarmkeycar.materials = request.form.get('material') if alarmkeycar.kid != 9999 and request.form.get('cars1') == request.form.get('cars2') == request.form.get('material') == '': # remove db.session.delete(alarmkeycar) db.session.commit() elif request.form.get('action') == 'editdefault': # edit default aao params.update({'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': -1}) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'addkey': # add key params.update({'alarmkey': Alarmkey('', '', '', ''), 'depid': depid, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': -2}) return render_template('admin.alarmkeys_actions.html', **params) elif request.form.get('action') == 'savekey': # save key if request.form.get('keyid') == 'None': # add new alarmkey = Alarmkey('', '', '', '') db.session.add(alarmkey) db.session.commit() else: # update existing alarmkey = Alarmkey.getAlarmkeys(request.form.get('keyid')) alarmkey.category = request.form.get('category') alarmkey.key = request.form.get('key') alarmkey.key_internal = request.form.get('keyinternal') alarmkey.remark = request.form.get('remark') alarmkey.setCars(int(request.form.get('deptid')), cars1=request.form.get('cars1'), cars2=request.form.get('cars2'), material=request.form.get('material')) db.session.commit() elif request.form.get('action').startswith('deletecars_'): # delete car definition _op, _kid, _dept = request.form.get('action').split('_') keycar = AlarmkeyCars.getAlarmkeyCars(kid=_kid, dept=_dept) if keycar: db.session.delete(keycar) db.session.commit() # delete key if no definied cars if len(AlarmkeyCars.getAlarmkeyCars(kid=_kid)) == 0: key = Alarmkey.getAlarmkeys(id=_kid) db.session.delete(key) db.session.commit() elif request.form.get('action').startswith('editcars_'): # edit key with cars _op, _kid, _dept = request.form.get('action').split('_') params.update({'alarmkey': Alarmkey.getAlarmkeys(id=_kid), 'depid': _dept, 'departments': Department.getDepartments(), 'cars': Car.getCars(), 'type': 1}) return render_template('admin.alarmkeys_actions.html', **params) alarmkeys_count = [] ak = Alarmkey counted_keys = db.get(ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id')).group_by(ak.category) _sum = 0 for r in counted_keys.all(): alarmkeys_count.append([r.category, r.key, r.id]) _sum += int(r.key) params.update({'alarmkeys_count': alarmkeys_count, 'depid': depid, 'defaultcars': Alarmkey.getDefault(depid), 'sum': _sum}) return render_template('admin.alarmkeys.html', **params)
def getAdminContent(self, **params): """ Deliver admin content of module alarmobjects :param params: use given parameters of request :return: rendered template as string """ module = request.view_args['module'].split('/') def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] if len(module) > 1: # type definition if module[1] == 'types': if request.method == 'POST': if request.form.get( 'action') == 'createalarmobjecttype': # add type params.update({'alarmobjecttype': AlarmObjectType('', '')}) return render_template( 'admin.alarmobjects.types_action.html', **params) elif request.form.get( 'action') == 'savealarmobjecttype': # save type if request.form.get( 'alarmobjecttype_id') == 'None': # add new type alarmobjecttype = AlarmObjectType('', '') db.session.add(alarmobjecttype) else: # update existing alarmobjecttype = AlarmObjectType.getAlarmObjectTypes( id=int(request.form.get('alarmobjecttype_id'))) alarmobjecttype.name = request.form.get( 'alarmobjecttype_name') alarmobjecttype.remark = request.form.get( 'alarmobjecttype_remark') db.session.commit() elif request.form.get('action').startswith( 'detailobjecttype'): # edit type alarmobjecttype = AlarmObjectType.getAlarmObjectTypes( id=int(request.form.get('action').split('_')[-1])) params.update({'alarmobjecttype': alarmobjecttype}) return render_template( 'admin.alarmobjects.types_action.html', **params) elif request.form.get('action').startswith( 'deleteobjecttype_'): # delete type db.session.delete( AlarmObjectType.getAlarmObjectTypes( id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update( {'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()}) return render_template('admin.alarmobjects.types.html', **params) elif module[1] == 'fields': if request.method == 'POST': if request.form.get( 'action') == 'updatefield': # update fields Settings.set('alarmobjectfields', [ i for i in chunks(request.form.getlist('fieldname'), 2) if i[0] != '' ]) db.session.commit() params.update({'fields': Settings.get('alarmobjectfields', [])}) return render_template('admin.alarmobjects.fields.html', **params) else: # base view if request.method == 'POST': streets = Street.getStreets() if request.form.get( 'action') == 'createalarmobject': # add alarmobject params.update({ 'alarmobject': AlarmObject('', 0, '', Settings.get('defaultLat'), Settings.get('defaultLng'), Settings.get('defaultZoom'), '', '', '', 0, 0), 'streets': streets, 'selectedstreet': '', 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes() }) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action') == 'savealarmobject': # save if request.form.get('alarmobject_id') == 'None': # add new alarmobject = AlarmObject('', 0, '', 0, 0, 0, '', '', '', 0, 0) db.session.add(alarmobject) else: # update existing alarmobject = AlarmObject.getAlarmObjects( id=request.form.get('alarmobject_id')) alarmobject.name = request.form.get('edit_name') alarmobject._streetid = request.form.get('streetid') alarmobject._objecttype = int( request.form.get('edit_objecttype')) alarmobject.remark = request.form.get('edit_remark') if request.form.get('edit_position') == '1': alarmobject.lat = request.form.get('edit_lat') alarmobject.lng = request.form.get('edit_lng') alarmobject.zoom = request.form.get('edit_zoom') alarmobject.streetno = request.form.get('edit_streetno') alarmobject.alarmplan = request.form.get('edit_alarmplan') alarmobject.bma = request.form.get('edit_bma') alarmobject.active = int(request.form.get('edit_active', '0')) db.session.commit() elif request.form.get( 'action' ) == 'savealarmobjectattributes': # save attributes alarmobject = AlarmObject.getAlarmObjects( id=request.form.get('alarmobject_id')) for field in Settings.get('alarmobjectfields', []): # store attributes if 'edit_%s' % field[0] in request.form: alarmobject.set(field[0], request.form.get('edit_%s' % field[0])) db.session.commit() elif request.form.get( 'action') == 'savealarmobjectaao': # save aao alarmobject = AlarmObject.getAlarmObjects( id=request.form.get('alarmobject_id')) if alarmobject: alarmobject.set('cars1', [ c for c in request.form.get('cars1').split(';') if c != '' ]) alarmobject.set('cars2', [ c for c in request.form.get('cars2').split(';') if c != '' ]) alarmobject.set('material', [ c for c in request.form.get('material').split(';') if c != '' ]) db.session.commit() elif request.form.get('action').startswith( 'editalarmobject_'): # edit alarmobject alarmobject = AlarmObject.getAlarmObjects( id=int(request.form.get('action').split('_')[-1])) params.update({ 'alarmobject': alarmobject, 'streets': streets, 'selectedstreet': '%s (%s)' % (alarmobject.street.name, alarmobject.street.city.name), 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes(), 'fields': Settings.get('alarmobjectfields', []), 'cars': Car.getCars(deptid=Department.getDefaultDepartment().id) }) return render_template('admin.alarmobjects_actions.html', **params) elif request.form.get('action').startswith( 'deletealarmobject_'): # delete alarmobject db.session.delete( AlarmObject.getAlarmObjects( id=int(request.form.get('action').split('_')[-1]))) db.session.commit() params.update({ 'alarmobjects': AlarmObject.getAlarmObjects(active=0), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes() }) return render_template('admin.alarmobjects.html', **params)
def evalMaterial(field, **params): cars = Car.getCars(params=['onlyactive']) carlist = [u'{} {}'.format(c.dept.name, c.name) for c in cars] c = [[], []] for p in [l for l in re.split(r"[\s]{2,}|[\n]+", field.value[0])]: addcar = None if len([ d for d in Department.getDepartments() if d.name in p.strip() ]) == 1: # department default found c = [[u'default'] + c[0], [0] + c[1]] GenericAlarmFaxChecker().logger.debug( u'material: "{}" default department found'.format( p.strip())) continue # try list or car names repl = difflib.get_close_matches(p.strip(), carlist, 1, cutoff=0.7) if len(repl) == 1: addcar = filter( lambda x: u'{} {}'.format(x.dept.name, x.name) == repl[0], cars)[0] addcar = addcar.name, addcar.id else: # try list of car descriptions descriptionlist = [ u'{} {}'.format(cn.dept.name, cn.description) for cn in cars ] repl = difflib.get_close_matches(p.strip(), descriptionlist, 1, cutoff=0.7) if len(repl) == 1: addcar = filter( lambda x: u'{} {}'.format(x.dept.name, x.description) == repl[0], cars)[0] addcar = addcar.name, addcar.id else: t = "" for x in p.split( ): # try parts of name and stop after first match t += x repl = difflib.get_close_matches(t, carlist, 1, cutoff=0.7) if len(repl) == 1: addcar = filter( lambda x: u'{} {}'.format(x.dept.name, x.name) == repl[0], cars)[0] addcar = addcar.name, addcar.id break if addcar and addcar[1] not in c[1]: c[0].append(addcar[0]) c[1].append(addcar[1]) if len(c[0]) > 0: GenericAlarmFaxChecker().logger.debug( u'material: done with {}, {}'.format(c[0], c[1])) field.value = (u','.join(c[0]), u','.join([str(_c) for _c in c[1]]))