def getAdminData(self): """ Deliver admin content of module alarmkeys (ajax) :return: rendered template as string or json dict """ if request.args.get('action') == 'loaddetails': # details for given key return render_template('admin.alarmkeys.detail.html', keys=Alarmkey.getAlarmkeysByCategoryId( request.args.get('category')), department=request.args.get('department')) elif request.args.get('action') == 'upload': if request.files: uploadfile = request.files['uploadfile'] filename = werkzeug.secure_filename(uploadfile.filename) fname = os.path.join(current_app.config.get('PATH_TMP'), filename) uploadfile.save(fname) xlsfile = XLSFile(fname) uploadfiles[uploadfile.filename] = xlsfile return render_template( 'admin.alarmkeys.upload2.html', sheets=uploadfiles[uploadfile.filename].getSheets()) elif request.args.get('action') == 'upload_sheet': # sheet selector definitionfile = uploadfiles[request.args.get('filename')] return render_template('admin.alarmkeys.upload3.html', cols=definitionfile.getCols( request.args.get('sheetname'))) elif request.args.get('action') == 'testimport': # build data for preview col_definition = { 'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material') } deffile = uploadfiles[request.args.get('filename')] vals = deffile.getValues(col_definition) return render_template('admin.alarmkeys.uploadpreview.html', vals=vals) elif request.args.get( 'action') == 'doimport': # do import and store values coldefinition = { 'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material') } deffile = uploadfiles[request.args.get('filename')] vals = deffile.getValues(coldefinition) states = [] if request.form.get('add_material'): # add new material p = re.compile(r'<.*?>') for k in vals['carsnotfound']: n_car = vals['carsnotfound'][k] n_car.name = p.sub('', n_car.name) if n_car.name == '': continue db.session.add(n_car) db.session.commit() if request.form.get('add_new'): # add new keys ( item state=-1) states.append('-1') if request.form.get( 'add_update'): # update existing keys (item state=1) states.append('1') for key in vals['keys']: # item list if key['state'] in states: # import only with correct state if key['state'] == '-1': # add key k = Alarmkey(key['category'], key['key'], key['keyinternal'], key['remark']) db.session.add(k) db.session.commit() k.setCars(coldefinition['dept'], cars1=";".join([str(c.id) for c in key['cars1']]), cars2=";".join([str(c.id) for c in key['cars2']]), materials=";".join( [str(c.id) for c in key['material']])) db.session.commit() key['state'] = '0' elif key['state'] == '1': # update key k = Alarmkey.getAlarmkeys(id=int(key['dbid'])) k.category = key['category'] k.key = key['key'] k.key_internal = key['keyinternal'] k.remark = key['remark'] k.setCars(coldefinition['dept'], cars1=';'.join(filter(None, key['cars1_ids'])), cars2=';'.join(filter(None, key['cars2_ids'])), materials=';'.join( filter(None, key['material_ids']))) db.session.commit() return "" elif request.args.get('action') == 'download': # build exportfile filename = buildDownloadFile(request.args.get('department'), request.args.get('options')) if filename != "": return filename elif request.args.get('action') == 'keyslookup': keys = {} for k in Alarmkey.getAlarmkeys(): keys[str(k.id)] = '%s: %s' % (k.category, k.key) return keys elif request.args.get('action') == 'categorylookup': key = Alarmkey.getAlarmkeys(id=int(request.args.get('keyid'))) return {'id': key.id, 'category': key.category} if "/download/" in request.url: # deliver file filename = os.path.basename(request.url) mime = "application/x.download" if filename.endswith('.xlsx'): mime = "application/vnd.ms-excel" return send_from_directory("%s/" % current_app.config.get('PATH_TMP'), filename, as_attachment=True, mimetype=mime) return ""
def getAdminData(self): """ Deliver admin content of module alarmkeys (ajax) :return: rendered template as string or json dict """ if request.args.get('action') == 'loaddetails': # details for given key return render_template('admin.alarmkeys.detail.html', keys=Alarmkey.getAlarmkeysByCategoryId(request.args.get('category')), department=request.args.get('department')) elif request.args.get('action') == 'upload': if request.files: uploadfile = request.files['uploadfile'] filename = werkzeug.secure_filename(uploadfile.filename) fname = os.path.join(current_app.config.get('PATH_TMP'), filename) uploadfile.save(fname) xlsfile = XLSFile(fname) uploadfiles[uploadfile.filename] = xlsfile return render_template('admin.alarmkeys.upload2.html', sheets=uploadfiles[uploadfile.filename].getSheets()) elif request.args.get('action') == 'upload_sheet': # sheet selector definitionfile = uploadfiles[request.args.get('filename')] return render_template('admin.alarmkeys.upload3.html', cols=definitionfile.getCols(request.args.get('sheetname'))) elif request.args.get('action') == 'testimport': # build data for preview col_definition = {'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material')} deffile = uploadfiles[request.args.get('filename')] vals = deffile.getValues(col_definition) return render_template('admin.alarmkeys.uploadpreview.html', vals=vals) elif request.args.get('action') == 'doimport': # do import and store values coldefinition = {'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material')} deffile = uploadfiles[request.args.get('filename')] vals = deffile.getValues(coldefinition) states = [] if request.form.get('add_material'): # add new material p = re.compile(r'<.*?>') for k in vals['carsnotfound']: n_car = vals['carsnotfound'][k] n_car.name = p.sub('', n_car.name) if n_car.name == '': continue db.session.add(n_car) db.session.commit() if request.form.get('add_new'): # add new keys ( item state=-1) states.append('-1') if request.form.get('add_update'): # update existing keys (item state=1) states.append('1') for key in vals['keys']: # item list if key['state'] in states: # import only with correct state if key['state'] == '-1': # add key k = Alarmkey(key['category'], key['key'], key['keyinternal'], key['remark']) db.session.add(k) db.session.commit() k.setCars(coldefinition['dept'], cars1=";".join([str(c.id) for c in key['cars1']]), cars2=";".join([str(c.id) for c in key['cars2']]), materials=";".join([str(c.id) for c in key['material']])) db.session.commit() key['state'] = '0' elif key['state'] == '1': # update key k = Alarmkey.getAlarmkeys(id=int(key['dbid'])) k.category = key['category'] k.key = key['key'] k.key_internal = key['keyinternal'] k.remark = key['remark'] k.setCars(coldefinition['dept'], cars1=';'.join(filter(None, key['cars1_ids'])), cars2=';'.join(filter(None, key['cars2_ids'])), materials=';'.join(filter(None, key['material_ids']))) db.session.commit() return "" elif request.args.get('action') == 'download': # build exportfile filename = buildDownloadFile(request.args.get('department'), request.args.get('options')) if filename != "": return filename elif request.args.get('action') == 'keyslookup': keys = {} for k in Alarmkey.getAlarmkeys(): keys[str(k.id)] = '%s: %s' % (k.category, k.key) return keys elif request.args.get('action') == 'categorylookup': key = Alarmkey.getAlarmkeys(id=int(request.args.get('keyid'))) return {'id': key.id, 'category': key.category} if "/download/" in request.url: # deliver file filename = os.path.basename(request.url) mime = "application/x.download" if filename.endswith('.xlsx'): mime = "application/vnd.ms-excel" return send_from_directory("%s/" % current_app.config.get('PATH_TMP'), filename, as_attachment=True, mimetype=mime) return ""
def getAdminData(self): """ Deliver admin content of module alarmkeys (ajax) :return: rendered template as string or json dict """ if request.args.get('action') == 'loaddetails': # details for given key return render_template('admin.alarmkeys.detail.html', keys=Alarmkey.getAlarmkeysByCategoryId( request.args.get('category'), keysetid=int(request.args.get( 'keysetid', 0))), department=request.args.get('department')) elif request.args.get( 'action', '') == "changekeyset": # deliver alarmkeys for given set ak = Alarmkey if request.args.get('keysetid', '0') == '0': counted_keys = db.get(ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id'), func.count( ak.id).label('keysetcount')).group_by( ak.category).filter_by(_keyset=None) else: counted_keys = db.get( ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id'), func.count(ak.id).label('keysetcount')).group_by( ak.category).filter_by( _keyset=request.args.get('keysetid')) _sum = 0 alarmkeys_count = [] for r in counted_keys.all(): alarmkeys_count.append([r.category, r.key, r.id]) _sum += int(r.key) return render_template('admin.alarmkeys.macro.html', alarmkeys_count=alarmkeys_count, depid=request.args.get('department'), sum=_sum) elif request.args.get('action') == 'upload': if request.files: uploadfile = request.files['uploadfile'] fname = os.path.join(current_app.config.get('PATH_TMP'), werkzeug.secure_filename(uploadfile.filename)) uploadfile.save(fname) uploadfiles[uploadfile.filename] = XLSFile(fname) return render_template( 'admin.alarmkeys.upload2.html', sheets=uploadfiles[uploadfile.filename].getSheets()) elif request.args.get('action') == 'upload_sheet': # sheet selector definitionfile = uploadfiles[request.args.get('filename')] return render_template('admin.alarmkeys.upload3.html', cols=definitionfile.getCols( request.args.get('sheetname'))) elif request.args.get('action') == 'testimport': # build data for preview col_definition = { 'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material') } deffile = uploadfiles[request.args.get('filename')] return render_template('admin.alarmkeys.uploadpreview.html', vals=deffile.getValues(col_definition), keysets=AlarmkeySet.getAlarmkeySets()) elif request.args.get( 'action') == 'doimport': # do import and store values coldefinition = { 'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material') } deffile = uploadfiles[request.args.get('filename')] vals = deffile.getValues(coldefinition) states = [] if request.form.get('add_material'): # add new material p = re.compile(r'<.*?>') for k in vals['carsnotfound']: n_car = vals['carsnotfound'][k] n_car.name = p.sub('', n_car.name) if n_car.name == '': continue db.session.add(n_car) db.session.flush() if request.form.get('add_new'): # add new keys ( item state=-1) states.append('-1') if request.form.get( 'add_update'): # update existing keys (item state=1) states.append('1') if request.form.get('add_assign') and request.form.get( 'keyset', '') != '': # assign keys to keyset (item state=2) keyset = AlarmkeySet.getAlarmkeySets(request.form.get('keyset')) states.append('2') for key in vals['keys']: # item list if key['state'] in states: # import only with correct state if key['state'] == '-1': # add key k = Alarmkey(key['category'], key['key'], key['keyinternal'], key['remark']) db.session.add(k) db.session.flush() k.setCars(coldefinition['dept'], cars1=";".join([str(c.id) for c in key['cars1']]), cars2=";".join([str(c.id) for c in key['cars2']]), materials=";".join( [str(c.id) for c in key['material']])) db.session.commit() key['state'] = '0' elif key['state'] == '1': # update key k = Alarmkey.getAlarmkeys(id=int(key['dbid'])) k.category = key['category'] k.key = key['key'] k.key_internal = key['keyinternal'] k.remark = key['remark'] k.setCars(coldefinition['dept'], cars1=';'.join(filter(None, key['cars1_ids'])), cars2=';'.join(filter(None, key['cars2_ids'])), materials=';'.join( filter(None, key['material_ids']))) db.session.commit() if '2' in states: # assign keys to keyset item = filter( lambda x: x.get('stichwort') == k.category and x.get( 'schlagwort') == k.key, keyset.alarmkeys) k._keyset = keyset.id if len(item) > 0: k.keysetitem = item[0].get('nr') db.session.commit() return "" elif request.args.get('action') == 'download': # build exportfile filename = buildDownloadFile(request.args.get('department'), request.args.get('options')) if filename != "": return filename elif request.args.get('action') == 'keyslookup': keys = {} for k in Alarmkey.getAlarmkeys(keysetid=request.args.get('keysetid')): keys[str(k.id)] = '%s: %s' % (k.category, k.key) return keys elif request.args.get('action') == 'categorylookup': key = Alarmkey.getAlarmkeys(id=int(request.args.get('keyid'))) return {'id': key.id, 'category': key.category} elif request.args.get('action', '') == 'keysetlookup': try: return AlarmkeySet.getAlarmkeySets( request.args.get('setid')).alarmkeys except ValueError: # no base given return [] elif request.args.get('action', '') == 'uploaddefinition': if request.files: ufile = request.files['uploadfile'] if not os.path.exists("{}alarmkeysetbase/".format( current_app.config.get('PATH_DATA'))): os.makedirs("{}alarmkeysetbase/".format( current_app.config.get('PATH_DATA'))) fname = os.path.join( "{}alarmkeysetbase/".format( current_app.config.get('PATH_DATA')), ufile.filename) ufile.save(fname) with codecs.open(fname, 'r', encoding='utf-8') as fin: aksetbase = AlarmkeySetBase(ufile.filename, json.load(fin), 'external') return jsonify(state="ok", name=aksetbase.name, startdate=datetime.datetime.strftime( aksetbase.start, "%d.%m.%Y"), items=len(aksetbase.items), filename=aksetbase.id, type=aksetbase.settype) return jsonify(state="error") elif request.args.get('action', '') == 'createbaseset': """ create base keys for given set and return number of updated """ stats = AlarmkeySet.getAlarmkeySets( id=request.args.get('setid')).createBaseKeys() return babel.gettext('alarmkeys.createbaseset.result', num_success=stats[0], num_error=stats[1]) if "/download/" in request.url: # deliver file filename = os.path.basename(request.url) mime = "application/x.download" if filename.endswith('.xlsx'): mime = "application/vnd.ms-excel" return send_from_directory("%s/" % current_app.config.get('PATH_TMP'), filename, as_attachment=True, mimetype=mime) return ""
def getAdminData(self): """ Deliver admin content of module alarmkeys (ajax) :return: rendered template as string or json dict """ if request.args.get('action') == 'loaddetails': # details for given key return render_template('admin.alarmkeys.detail.html', keys=Alarmkey.getAlarmkeysByCategoryId(request.args.get('category'), keysetid=int(request.args.get('keysetid', 0))), department=request.args.get('department')) elif request.args.get('action', '') == "changekeyset": # deliver alarmkeys for given set ak = Alarmkey if request.args.get('keysetid', '0') == '0': counted_keys = db.get(ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id'), func.count(ak.id).label('keysetcount')).group_by(ak.category).filter_by(_keyset=None) else: counted_keys = db.get(ak.category.label('category'), func.count(ak.key).label('key'), ak.id.label('id'), func.count(ak.id).label('keysetcount')).group_by(ak.category).filter_by(_keyset=request.args.get('keysetid')) _sum = 0 alarmkeys_count = [] for r in counted_keys.all(): alarmkeys_count.append([r.category, r.key, r.id]) _sum += int(r.key) return render_template('admin.alarmkeys.macro.html', alarmkeys_count=alarmkeys_count, depid=request.args.get('department'), sum=_sum) elif request.args.get('action') == 'upload': if request.files: uploadfile = request.files['uploadfile'] fname = os.path.join(current_app.config.get('PATH_TMP'), werkzeug.secure_filename(uploadfile.filename)) uploadfile.save(fname) uploadfiles[uploadfile.filename] = XLSFile(fname) return render_template('admin.alarmkeys.upload2.html', sheets=uploadfiles[uploadfile.filename].getSheets()) elif request.args.get('action') == 'upload_sheet': # sheet selector definitionfile = uploadfiles[request.args.get('filename')] return render_template('admin.alarmkeys.upload3.html', cols=definitionfile.getCols(request.args.get('sheetname'))) elif request.args.get('action') == 'testimport': # build data for preview col_definition = {'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material')} deffile = uploadfiles[request.args.get('filename')] return render_template('admin.alarmkeys.uploadpreview.html', vals=deffile.getValues(col_definition), keysets=AlarmkeySet.getAlarmkeySets()) elif request.args.get('action') == 'doimport': # do import and store values coldefinition = {'dept': request.args.get('department'), 'sheet': request.args.get('sheetname'), 'category': request.form.get('category'), 'key': request.form.get('key'), 'keyinternal': request.form.get('keyinternal'), 'remark': request.form.get('remark'), 'cars1': request.form.getlist('cars1'), 'cars2': request.form.getlist('cars2'), 'material': request.form.getlist('material')} deffile = uploadfiles[request.args.get('filename')] vals = deffile.getValues(coldefinition) states = [] if request.form.get('add_material'): # add new material p = re.compile(r'<.*?>') for k in vals['carsnotfound']: n_car = vals['carsnotfound'][k] n_car.name = p.sub('', n_car.name) if n_car.name == '': continue db.session.add(n_car) db.session.flush() if request.form.get('add_new'): # add new keys ( item state=-1) states.append('-1') if request.form.get('add_update'): # update existing keys (item state=1) states.append('1') if request.form.get('add_assign') and request.form.get('keyset', '') != '': # assign keys to keyset (item state=2) keyset = AlarmkeySet.getAlarmkeySets(request.form.get('keyset')) states.append('2') for key in vals['keys']: # item list if key['state'] in states: # import only with correct state if key['state'] == '-1': # add key k = Alarmkey(key['category'], key['key'], key['keyinternal'], key['remark']) db.session.add(k) db.session.flush() k.setCars(coldefinition['dept'], cars1=";".join([str(c.id) for c in key['cars1']]), cars2=";".join([str(c.id) for c in key['cars2']]), materials=";".join([str(c.id) for c in key['material']])) db.session.commit() key['state'] = '0' elif key['state'] == '1': # update key k = Alarmkey.getAlarmkeys(id=int(key['dbid'])) k.category = key['category'] k.key = key['key'] k.key_internal = key['keyinternal'] k.remark = key['remark'] k.setCars(coldefinition['dept'], cars1=';'.join(filter(None, key['cars1_ids'])), cars2=';'.join(filter(None, key['cars2_ids'])), materials=';'.join(filter(None, key['material_ids']))) db.session.commit() if '2' in states: # assign keys to keyset item = filter(lambda x: x.get('stichwort') == k.category and x.get('schlagwort') == k.key, keyset.alarmkeys) k._keyset = keyset.id if len(item) > 0: k.keysetitem = item[0].get('nr') db.session.commit() return "" elif request.args.get('action') == 'download': # build exportfile filename = buildDownloadFile(request.args.get('department'), request.args.get('options')) if filename != "": return filename elif request.args.get('action') == 'keyslookup': keys = {} for k in Alarmkey.getAlarmkeys(keysetid=request.args.get('keysetid')): keys[str(k.id)] = '%s: %s' % (k.category, k.key) return keys elif request.args.get('action') == 'categorylookup': key = Alarmkey.getAlarmkeys(id=int(request.args.get('keyid'))) return {'id': key.id, 'category': key.category} elif request.args.get('action', '') == 'keysetlookup': try: return AlarmkeySet.getAlarmkeySets(request.args.get('setid')).alarmkeys except ValueError: # no base given return [] elif request.args.get('action', '') == 'uploaddefinition': if request.files: ufile = request.files['uploadfile'] if not os.path.exists("{}alarmkeysetbase/".format(current_app.config.get('PATH_DATA'))): os.makedirs("{}alarmkeysetbase/".format(current_app.config.get('PATH_DATA'))) fname = os.path.join("{}alarmkeysetbase/".format(current_app.config.get('PATH_DATA')), ufile.filename) ufile.save(fname) with codecs.open(fname, 'r', encoding='utf-8') as fin: aksetbase = AlarmkeySetBase(ufile.filename, json.load(fin), 'external') return jsonify(state="ok", name=aksetbase.name, startdate=datetime.datetime.strftime(aksetbase.start, "%d.%m.%Y"), items=len(aksetbase.items), filename=aksetbase.id, type=aksetbase.settype) return jsonify(state="error") elif request.args.get('action', '') == 'createbaseset': """ create base keys for given set and return number of updated """ stats = AlarmkeySet.getAlarmkeySets(id=request.args.get('setid')).createBaseKeys() return babel.gettext('alarmkeys.createbaseset.result', num_success=stats[0], num_error=stats[1]) if "/download/" in request.url: # deliver file filename = os.path.basename(request.url) mime = "application/x.download" if filename.endswith('.xlsx'): mime = "application/vnd.ms-excel" return send_from_directory("%s/" % current_app.config.get('PATH_TMP'), filename, as_attachment=True, mimetype=mime) return ""