diff --git a/alembic/fcd72b56ad35_1_4.py b/alembic/fcd72b56ad35_1_4.py new file mode 100644 index 0000000..addbcdf --- /dev/null +++ b/alembic/fcd72b56ad35_1_4.py @@ -0,0 +1,35 @@ +""" +1.4 + +Revision ID: fcd72b56ad35 +Revises: fcd72b56ad35 +Create Date: 2016-07-30 21:01:23.824000 + +""" + +# revision identifiers, used by Alembic. +revision = 'fcd72b56ad35' +down_revision = '20c921506336' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.create_table('monitorlayouts_tmp', sa.Column('id', sa.INTEGER(), nullable=False), + sa.Column('mid', sa.INTEGER(), nullable=False), + sa.Column('trigger', sa.TEXT()), + sa.Column('layout', sa.TEXT()), + sa.Column('theme', sa.VARCHAR(30)), + sa.Column('mintime', sa.INTEGER()), + sa.Column('maxtime', sa.INTEGER()), + sa.Column('nextid', sa.INTEGER()), + sa.PrimaryKeyConstraint('id'), + sa.ForeignKeyConstraint(['mid'], ['monitors.id'])) + op.execute('insert into monitorlayouts_tmp select id, mid, monitorlayouts.trigger, layout, theme, mintime, maxtime, nextid from monitorlayouts;') + op.drop_table('monitorlayouts') + op.rename_table('monitorlayouts_tmp', 'monitorlayouts') + + +def downgrade(): + pass diff --git a/bin/build_doc.py b/bin/build_doc.py index 8eb7a96..d648570 100644 --- a/bin/build_doc.py +++ b/bin/build_doc.py @@ -16,7 +16,7 @@ def buildDocumentation(): helptext = 'usage: build_doc.py ' \ '\n - html: for html output' \ '\n - pdf: for pdf output' \ - '\n\n -all: complete documentation' \ + '\n\n - all: complete documentation' \ '\n - dev: only developer documentation' \ '\n - user: only user documentation' if len(sys.argv) != 3: diff --git a/emonitor/app.py b/emonitor/app.py index aed4ce9..779b885 100644 --- a/emonitor/app.py +++ b/emonitor/app.py @@ -48,7 +48,7 @@ class DEFAULT_CONFIG(object): DEFAULTZOOM = 12 # used for map-data LANGUAGES = {'de': 'Deutsch'} ALEMBIC = {'script_location': 'alembic'} # alembic base path - DB_VERSION = '20c921506336' # version of database + DB_VERSION = 'fcd72b56ad35' # version of database # monitorserver MONITORSERVER_ANY = "0.0.0.0" diff --git a/emonitor/extensions.py b/emonitor/extensions.py index 3d09b4d..6251308 100644 --- a/emonitor/extensions.py +++ b/emonitor/extensions.py @@ -50,5 +50,3 @@ def get_query(self, *entities, **kwargs): # communication from emonitor.communication import Communication communication = Communication() - - diff --git a/emonitor/modules/alarms/__init__.py b/emonitor/modules/alarms/__init__.py index b58912a..7bba4a8 100644 --- a/emonitor/modules/alarms/__init__.py +++ b/emonitor/modules/alarms/__init__.py @@ -50,8 +50,10 @@ def __init__(self, app): cls = imp.load_source('emonitor.modules.alarms.inc', '{}/emonitor/modules/alarms/inc/{}'.format(app.config.get('PROJECT_ROOT'), f)) checker = getattr(cls, cls.__all__[0])() if isinstance(checker, AlarmFaxChecker) and checker.getId() != 'Dummy': - events.addEvent('alarm_added.{}'.format(checker.getId()), handlers=[], parameters=['out.alarmid']) - events.addEvent('alarm_changestate.{}'.format(checker.getId()), handlers=[], parameters=['out.alarmid', 'out.state']) + for at in AlarmType.getAlarmTypes(): + if at.interpreter == f: + events.addEvent('alarm_added.{}'.format(at.name), handlers=[], parameters=['out.alarmid']) + events.addEvent('alarm_changestate.{}'.format(at.name), handlers=[], parameters=['out.alarmid', 'out.state']) events.addEvent('alarm_added', handlers=[], parameters=['out.alarmid']) # for all checkers events.addEvent('alarm_changestate', handlers=[], parameters=['out.alarmid', 'out.state']) # for all checkers @@ -63,10 +65,12 @@ def __init__(self, app): signal.addSignal('alarm', 'changestate') signal.addSignal('alarm', 'added') signal.addSignal('alarm', 'updated') + signal.addSignal('alarm', 'error') signal.connect('alarm', 'changestate', frontendAlarmHandler.handleAlarmChanges) signal.connect('alarm', 'added', frontendAlarmHandler.handleAlarmChanges) signal.connect('alarm', 'updated', frontendAlarmHandler.handleAlarmChanges) signal.connect('alarm', 'deleted', frontendAlarmHandler.handleAlarmChanges) + signal.connect('alarm', 'error', frontendAlarmHandler.handleAlarmErrors) signal.connect('alarm', 'testupload_start', adminAlarmHandler.handleAlarmTestUpload) @@ -231,6 +235,16 @@ def handleAlarmChanges(sender, **extra): """ SocketHandler.send_message(sender, **extra) + @staticmethod + def handleAlarmErrors(sender, **extra): + """ + Implementation of error in alarms + + :param sender: event sender + :param extra: extra parameters for event + """ + SocketHandler.send_message(sender, **extra) + class adminAlarmHandler(SocketHandler): """ diff --git a/emonitor/modules/alarms/alarm.py b/emonitor/modules/alarms/alarm.py index ccc4534..329b711 100644 --- a/emonitor/modules/alarms/alarm.py +++ b/emonitor/modules/alarms/alarm.py @@ -461,326 +461,330 @@ def handleEvent(eventname, **kwargs): :param kwargs: parameter list: error, fields, filename, id, incomepath, mode, time :return: all kwargs """ - from emonitor import app - global LASTALARM - - alarm_fields = dict() - stime = time.time() - alarmtype = None - for t in AlarmType.getAlarmTypes(): - if re.search(t.keywords.replace('\r\n', '|'), kwargs.get('text', '')): - alarm_fields = t.interpreterclass().buildAlarmFromText(t, kwargs.get('text', '')) - if alarm_fields.get('error'): - kwargs['error'] = alarm_fields['error'] - del alarm_fields['error'] - alarmtype = t - break - alarm = Alarm(datetime.datetime.now(), '', 1, 0) - etime = time.time() - - _missing = 0 - for p in ['time', 'city', 'address', 'key']: - if p not in alarm_fields: # test required fields - _missing += 1 - kwargs['error'] = kwargs.get('error', 'Missing parameter:') + "
- '{}'".format(p) try: - t = datetime.datetime.strptime(alarm_fields.get('time')[0], '%d.%m.%Y - %H:%M:%S') - except ValueError: - t = datetime.datetime.now() - alarm.timestamp = t + from emonitor import app + global LASTALARM + + alarm_fields = dict() + stime = time.time() + alarmtype = None + for t in AlarmType.getAlarmTypes(): + if re.search(t.keywords.replace('\r\n', '|'), kwargs.get('text', '')): + alarm_fields = t.interpreterclass().buildAlarmFromText(t, kwargs.get('text', '')) + if alarm_fields.get('error'): + kwargs['error'] = alarm_fields['error'] + del alarm_fields['error'] + alarmtype = t + break + alarm = Alarm(datetime.datetime.now(), '', 1, 0) + etime = time.time() + + _missing = 0 + for p in ['time', 'city', 'address', 'key']: + if p not in alarm_fields: # test required fields + _missing += 1 + kwargs['error'] = kwargs.get('error', 'Missing parameter:') + "
- '{}'".format(p) + try: + t = datetime.datetime.strptime(alarm_fields.get('time')[0], '%d.%m.%Y - %H:%M:%S') + except ValueError: + t = datetime.datetime.now() + alarm.timestamp = t - kwargs['fields'] = '' # set evaluated fields from fax - for k in alarm_fields: - kwargs['fields'] = u'{}\n-{}:\n {}'.format(kwargs.get('fields'), k, alarm_fields[k]) + kwargs['fields'] = '' # set evaluated fields from fax + for k in alarm_fields: + kwargs['fields'] = u'{}\n-{}:\n {}'.format(kwargs.get('fields'), k, alarm_fields[k]) - if _missing == 0: # all required parameters found - if not os.path.exists('{}{}'.format(app.config.get('PATH_DONE'), t.strftime('%Y/%m/'))): - os.makedirs('{}{}'.format(app.config.get('PATH_DONE'), t.strftime('%Y/%m/'))) + if _missing == 0: # all required parameters found + if not os.path.exists('{}{}'.format(app.config.get('PATH_DONE'), t.strftime('%Y/%m/'))): + os.makedirs('{}{}'.format(app.config.get('PATH_DONE'), t.strftime('%Y/%m/'))) - try: - shutil.copy2('{incomepath}{filename}'.format(**kwargs), '{}{}{}'.format(app.config.get('PATH_DONE'), t.strftime('%Y/%m/%Y%m%d-%H%M%S'), os.path.splitext(kwargs.get('filename'))[1])) - except: - pass - try: # remove file - os.remove('{incomepath}{filename}'.format(**kwargs)) - except: - pass - kwargs['filename'] = '{}{}'.format(t.strftime('%Y/%m/%Y%m%d-%H%M%S'), os.path.splitext(kwargs['filename'])[1]) - logger.debug('alarm_fields: {}'.format(alarm_fields)) - - if len(alarm_fields) == 0: # no alarmfields found - kwargs['id'] = 0 - logger.error('no alarm fields found.') - return kwargs - - if not alarmtype: # alarmtype not found - kwargs['id'] = 0 - kwargs['error'] = kwargs.get('error', '') + 'alarmtype not found' - logger.error('alarmtype not found.') - return kwargs - - # position - if alarm_fields.get('lat'): - _position = dict(lat=alarm_fields.get('lat')[0], lng=alarm_fields.get('lng')[0]) - else: - _position = dict(lat=u'0.0', lng=u'0.0') - if USE_NOMINATIM == 1: try: - url = 'http://nominatim.openstreetmap.org/search' - params = 'format=json&city={}&street={}'.format(alarm_fields['city'][0], alarm_fields['address'][0]) - if 'streetno' in alarm_fields: - params += ' {}'.format(alarm_fields['streetno'][0].split()[0]) # only first value - r = requests.get('{}?{}'.format(url, params)) - _position = dict(lat=r.json()[0]['lat'], lng=r.json()[0]['lon']) + shutil.copy2('{incomepath}{filename}'.format(**kwargs), '{}{}{}'.format(app.config.get('PATH_DONE'), t.strftime('%Y/%m/%Y%m%d-%H%M%S'), os.path.splitext(kwargs.get('filename'))[1])) except: pass - - # create alarm object - if alarm_fields.get('key', [u'', 0])[0] == u'': - if alarmtype.translation(u'_bma_main_') in alarm_fields.get('remark', [u'', 0])[0] or alarmtype.translation(u'_bma_main_') in alarm_fields.get('person', [u'', 0])[0]: - alarmkey = Alarmkey.query.filter(Alarmkey.key.like(u"%{}%".format(alarmtype.translation(u'_bma_')))).all() - if len(alarmkey) > 0: - alarm_fields['key'] = ('{}: {}'.format(alarmkey[0].category, alarmkey[0].key), str(alarmkey[0].id)) - else: - alarm_fields['key'] = (alarmtype.translation(u'_bma_key_'), u'0') - - if alarm_fields.get('time', [u'', 0])[1] == 1: # found correct time - t = datetime.datetime.strptime(alarm_fields.get('time', [u'', 0])[0], '%d.%m.%Y - %H:%M:%S') - else: - t = datetime.datetime.now() - alarm.timestamp = t - - alarm.set('id.key', alarm_fields['key'][1]) - alarm._key = alarm_fields['key'][0] - alarm.material = dict(cars1='', cars2='', material='') # set required attributes - alarm.set('marker', '0') - alarm.set('filename', kwargs['filename']) - alarm.set('priority', '1') # set normal priority - alarm.set('alarmtype', alarmtype.name) # set checker name - alarm.position = _position - alarm.state = 1 - - # city - if alarm_fields.get('city', ['', 0])[1] > 0: - alarm.city = City.getCities(id=alarm_fields.get('city')[1]) - if alarm_fields.get('address'): - alarm.street = Street.getStreets(id=alarm_fields.get('address')[1]) - else: # city not found -> build from fax - url = 'http://nominatim.openstreetmap.org/search' - params = u'format=json&city={}&street={}'.format(alarm_fields.get('city', [u'', 0])[0].split()[0], alarm_fields.get('address', [u'', 0])[0]) - if alarm_fields.get('streetno'): - params += u' {}'.format(alarm_fields.get('streetno')[0].split()[0]) # only first value - alarm.set('streetno', alarm_fields.get('streetno')[0]) - try: - r = requests.get(u'{}?{}'.format(url, params)) - logger.debug(u'load address data from nomination with parameters: city={} street={}'.format(alarm_fields.get('city')[0].split()[0], alarm_fields.get('address', ['', 0])[0])) - _position = dict(lat=r.json()[0]['lat'], lng=r.json()[0]['lon']) - alarm.position = _position + try: # remove file + os.remove('{incomepath}{filename}'.format(**kwargs)) except: pass - - alarm.set('city', alarm_fields.get('city')[0].split()[0]) - alarm.set('id.city', alarm_fields.get('city')[1]) - alarm.set('address', alarm_fields.get('address', ['', 0])[0]) - if alarm_fields.get('address', [u'', 0])[1] != 0: - alarm.street = Street.getStreets(id=alarm_fields.get('address')[1]) - - if alarm_fields.get('cars'): # add cars found in material - for _c in alarm_fields.get('cars')[1].split(';'): - alarm.set('k.cars1', alarm.get('k.cars1') + ';' + _c) - - # street / street2 - if alarm_fields.get('address', [u'', 0]) != '': - # check correct city -> change if street has different city - if len(str(alarm_fields.get('address')[1]).split(';')) > 0 and alarm_fields.get('address')[1] != 0: - _c = [] - - for s in str(alarm_fields.get('address')[1]).split(';'): - _s = Street.getStreets(id=s) - if _s.cityid and _s.cityid not in _c and _s.cityid == alarm_fields.get('city', [u'', 0])[1]: - _c.append(_s.cityid) - alarm.street = _s - if alarm_fields.get('object', [u'', 0])[1] == 0: - if not alarm_fields.get('lat') and not alarm_fields.get('lng'): - alarm.position = dict(lat=_s.lat, lng=_s.lng, zoom=_s.zoom) - if _position['lat'] != u'0.0' and _position['lng'] != u'0.0': # set marker if nominatim delivers result - alarm.position = _position - alarm.set('marker', '1') - else: # add unknown street - alarm.set('id.address', 0) - alarm.set('address', alarm_fields['address'][0]) - # houseno - if alarm_fields.get('streetno'): - alarm.set('streetno', alarm_fields.get('streetno')[0]) - if alarm_fields.get('id.streetno') and alarm_fields.get('lat') and alarm_fields.get('lng'): - alarm.position = dict(lat=alarm_fields.get('lat')[0], lng=alarm_fields.get('lng')[0]) - alarm.set('id.streetno', alarm_fields.get('id.streetno')[1]) - else: - # new - hn = alarm.street.getHouseNumber(name=alarm_fields.get('streetno')[0]) - if hn: - alarm.position = hn.getPosition(0) - if alarm_fields.get('zoom'): - alarm.set('zoom', alarm_fields.get('zoom')[0]) - - # crossing - if alarm_fields.get('crossing', [u'', 0])[0] != '': - if alarm_fields.get('crossing', [u'', 0])[1] != alarm_fields.get('address',[u'', 0])[1]: - alarm.set('id.address2', alarm_fields.get('crossing')[1]) - alarm.set('address2', alarm_fields.get('crossing')[0]) + kwargs['filename'] = '{}{}'.format(t.strftime('%Y/%m/%Y%m%d-%H%M%S'), os.path.splitext(kwargs['filename'])[1]) + logger.debug('alarm_fields: {}'.format(alarm_fields)) + + if len(alarm_fields) == 0: # no alarmfields found + kwargs['id'] = 0 + logger.error('no alarm fields found.') + return kwargs + + if not alarmtype: # alarmtype not found + kwargs['id'] = 0 + kwargs['error'] = kwargs.get('error', '') + 'alarmtype not found' + logger.error('alarmtype not found.') + return kwargs + + # position + if alarm_fields.get('lat'): + _position = dict(lat=alarm_fields.get('lat')[0], lng=alarm_fields.get('lng')[0]) else: - alarm.set('id.address2', '0') - alarm.set('address2', alarm_fields.get('crossing')[0]) + _position = dict(lat=u'0.0', lng=u'0.0') + if USE_NOMINATIM == 1: + try: + url = 'http://nominatim.openstreetmap.org/search' + params = 'format=json&city={}&street={}'.format(alarm_fields['city'][0], alarm_fields['address'][0]) + if 'streetno' in alarm_fields: + params += ' {}'.format(alarm_fields['streetno'][0].split()[0]) # only first value + r = requests.get('{}?{}'.format(url, params)) + _position = dict(lat=r.json()[0]['lat'], lng=r.json()[0]['lon']) + except: + pass + + # create alarm object + if alarm_fields.get('key', [u'', 0])[0] == u'': + if alarmtype.translation(u'_bma_main_') in alarm_fields.get('remark', [u'', 0])[0] or alarmtype.translation(u'_bma_main_') in alarm_fields.get('person', [u'', 0])[0]: + alarmkey = Alarmkey.query.filter(Alarmkey.key.like(u"%{}%".format(alarmtype.translation(u'_bma_')))).all() + if len(alarmkey) > 0: + alarm_fields['key'] = ('{}: {}'.format(alarmkey[0].category, alarmkey[0].key), str(alarmkey[0].id)) + else: + alarm_fields['key'] = (alarmtype.translation(u'_bma_key_'), u'0') - # addresspart - if alarm_fields.get('addresspart', [u'', 0])[0] != u'' and alarm_fields.get('addresspart', [u'', 0])[0] != alarm_fields.get('address', [u'', 0])[0]: - if alarm_fields.get('addresspart')[1] > 0: - if len(str(alarm_fields.get('addresspart')[1]).split(';')) > 0: + if alarm_fields.get('time', [u'', 0])[1] == 1: # found correct time + t = datetime.datetime.strptime(alarm_fields.get('time', [u'', 0])[0], '%d.%m.%Y - %H:%M:%S') + else: + t = datetime.datetime.now() + alarm.timestamp = t + + alarm.set('id.key', alarm_fields['key'][1]) + alarm._key = alarm_fields['key'][0] + alarm.material = dict(cars1='', cars2='', material='') # set required attributes + alarm.set('marker', '0') + alarm.set('filename', kwargs['filename']) + alarm.set('priority', '1') # set normal priority + alarm.set('alarmtype', alarmtype.name) # set checker name + alarm.position = _position + alarm.state = 1 + + # city + if alarm_fields.get('city', ['', 0])[1] > 0: + alarm.city = City.getCities(id=alarm_fields.get('city')[1]) + if alarm_fields.get('address'): + alarm.street = Street.getStreets(id=alarm_fields.get('address')[1]) + else: # city not found -> build from fax + url = 'http://nominatim.openstreetmap.org/search' + params = u'format=json&city={}&street={}'.format(alarm_fields.get('city', [u'', 0])[0].split()[0], alarm_fields.get('address', [u'', 0])[0]) + if alarm_fields.get('streetno'): + params += u' {}'.format(alarm_fields.get('streetno')[0].split()[0]) # only first value + alarm.set('streetno', alarm_fields.get('streetno')[0]) + try: + r = requests.get(u'{}?{}'.format(url, params)) + logger.debug(u'load address data from nomination with parameters: city={} street={}'.format(alarm_fields.get('city')[0].split()[0], alarm_fields.get('address', ['', 0])[0])) + _position = dict(lat=r.json()[0]['lat'], lng=r.json()[0]['lon']) + alarm.position = _position + except: + pass + + alarm.set('city', alarm_fields.get('city')[0].split()[0]) + alarm.set('id.city', alarm_fields.get('city')[1]) + alarm.set('address', alarm_fields.get('address', ['', 0])[0]) + if alarm_fields.get('address', [u'', 0])[1] != 0: + alarm.street = Street.getStreets(id=alarm_fields.get('address')[1]) + + if alarm_fields.get('cars'): # add cars found in material + for _c in alarm_fields.get('cars')[1].split(';'): + alarm.set('k.cars1', alarm.get('k.cars1') + ';' + _c) + + # street / street2 + if alarm_fields.get('address', [u'', 0]) != '': + # check correct city -> change if street has different city + if len(str(alarm_fields.get('address')[1]).split(';')) > 0 and alarm_fields.get('address')[1] != 0: _c = [] - for s in str(alarm_fields.get('addresspart')[1]).split(';'): - try: - _s = Street.getStreets(id=s) - if _s.cityid not in _c and _s.cityid == alarm_fields.get('city')[1]: - _c.append(_s.cityid) - alarm.set('id.address2', _s.id) - except: - pass + for s in str(alarm_fields.get('address')[1]).split(';'): + _s = Street.getStreets(id=s) + if _s.cityid and _s.cityid not in _c and _s.cityid == alarm_fields.get('city', [u'', 0])[1]: + _c.append(_s.cityid) + alarm.street = _s + if alarm_fields.get('object', [u'', 0])[1] == 0: + if not alarm_fields.get('lat') and not alarm_fields.get('lng'): + alarm.position = dict(lat=_s.lat, lng=_s.lng, zoom=_s.zoom) + if _position['lat'] != u'0.0' and _position['lng'] != u'0.0': # set marker if nominatim delivers result + alarm.position = _position + alarm.set('marker', '1') + else: # add unknown street + alarm.set('id.address', 0) + alarm.set('address', alarm_fields['address'][0]) + # houseno + if alarm_fields.get('streetno'): + alarm.set('streetno', alarm_fields.get('streetno')[0]) + if alarm_fields.get('id.streetno') and alarm_fields.get('lat') and alarm_fields.get('lng'): + alarm.position = dict(lat=alarm_fields.get('lat')[0], lng=alarm_fields.get('lng')[0]) + alarm.set('id.streetno', alarm_fields.get('id.streetno')[1]) else: - alarm.set('id.address2', alarm_fields.get('addresspart')[1]) - else: - alarm.set('id.address2', '0') - alarm.set('address2', alarm_fields.get('addresspart')[0]) - - # person - if alarm_fields.get('person', [u'', 0])[0] != u'': - alarm.set('person', alarm_fields.get('person')[0]) - # alarmplan - if alarm_fields.get('alarmplan', [u'', 0])[0] != u'': - alarm.set('alarmplan', alarm_fields.get('alarmplan')[0]) - - # alarmobject - _ao = None - if alarm_fields.get('object', [u'', 0])[0] != u'' and alarm_fields.get('city', [u'', 0])[1] > 0: - alarm.set('object', alarm_fields.get('object')[0]) - alarm.set('id.object', alarm_fields.get('object')[1]) - # alarmplan from object - if alarm_fields.get('object')[1] != 0: - _ao = AlarmObject.getAlarmObjects(id=alarm_fields.get('object')[1]) - - if _ao: - if _ao.alarmplan != 0: - alarm.set('alarmplan', _ao.alarmplan) - elif alarm_fields.get('alarmplan'): - alarm.set('alarmplan', alarm_fields.get('alarmplan')[0]) - - if _ao.street.id != alarm_fields.get('address', [u'', 0])[1]: # street config from alarmobject - alarm.street = Street.getStreets(id=_ao.street.id) - if _ao.streetno == "": - alarm.set('streetno', alarm_fields.get('streetno')[0]) - else: - alarm.set('streetno', _ao.streetno) - alarm.position = dict(lat=_ao.lat, lng=_ao.lng, zoom=_ao.zoom) - - # remark - if alarm_fields.get('remark', [u'', 0])[0] != u'': - alarm.set('remark', alarm_fields.get('remark')[0]) - if alarmtype.translation(u'_bma_main_') in alarm_fields.get('remark', [u'', 0])[0] or alarmtype.translation(u'_bma_main_') in alarm_fields.get('person', [u'', 0])[0]: - alarmkey = Alarmkey.query.filter(Alarmkey.key.like(u"%{}%".format(alarmtype.translation(u'_bma_')))).first() - if alarmkey: - alarm.set('id.key', alarmkey.id) - alarm._key = u'{}: {}'.format(alarmkey.category, alarmkey.key) + # new + hn = alarm.street.getHouseNumber(name=alarm_fields.get('streetno')[0]) + if hn: + alarm.position = hn.getPosition(0) + if alarm_fields.get('zoom'): + alarm.set('zoom', alarm_fields.get('zoom')[0]) + + # crossing + if alarm_fields.get('crossing', [u'', 0])[0] != '': + if alarm_fields.get('crossing', [u'', 0])[1] != alarm_fields.get('address',[u'', 0])[1]: + alarm.set('id.address2', alarm_fields.get('crossing')[1]) + alarm.set('address2', alarm_fields.get('crossing')[0]) else: - alarm.set('id.key', '0') - alarm._key = alarmtype.translation(u'_bma_key_') - # additional remarks - if alarm_fields.get('remark2', [u'', 0])[0] != u'': - alarm.set('remark', u'{}\n{}'.format(alarm.get('remark'), alarm_fields.get('remark2')[0])) - - # material - if alarm.get('id.key') != 0 and alarm_fields.get('city'): # found key with aao - if alarm_fields.get('city')[1] not in [0, -1]: # default city - if Department.getDepartments(id=alarm.city.dept).defaultcity == alarm_fields.get('city')[1]: # default city for dep - if alarm_fields.get('material'): - if str(alarm_fields.get('material')[1])[0] == '0': # default cars for aao - try: - alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(alarm.street.city.dept)]), cars2=u','.join([str(c.id) for c in alarm.key.getCars2(alarm.street.city.dept)]), material=u','.join([str(c.id) for c in alarm.key.getMaterial(alarm.street.city.dept)])) - except AttributeError: - alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(alarm.city.dept)]), cars2=u','.join([str(c.id) for c in alarm.key.getCars2(alarm.city.dept)]), material=u','.join([str(c.id) for c in alarm.key.getMaterial(alarm.city.dept)])) - - for _c in u'{}'.format(alarm_fields.get('material')[1]).split(','): # add additional cars - if _c != '0' and _c not in alarm.get('k.cars1').split(','): - alarm.set('k.cars1', u'{},{}'.format(alarm.get('k.cars1'), _c)) + alarm.set('id.address2', '0') + alarm.set('address2', alarm_fields.get('crossing')[0]) - else: # only alarmed material - alarm.material = dict(cars1=alarm_fields.get('material', [u'', ''])[1]) + # addresspart + if alarm_fields.get('addresspart', [u'', 0])[0] != u'' and alarm_fields.get('addresspart', [u'', 0])[0] != alarm_fields.get('address', [u'', 0])[0]: + if alarm_fields.get('addresspart')[1] > 0: + if len(str(alarm_fields.get('addresspart')[1]).split(';')) > 0: + _c = [] - else: # else city - if alarm_fields.get('material', [u'', u''])[1] == u'0': # default cars for aao - alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(alarm.city.dept)]), cars2=u','.join([str(c.id) for c in alarm.key.getCars2(alarm.city.dept)]), material=u','.join([str(c.id) for c in alarm.key.getMaterial(alarm.city.dept)])) + for s in str(alarm_fields.get('addresspart')[1]).split(';'): + try: + _s = Street.getStreets(id=s) + if _s.cityid not in _c and _s.cityid == alarm_fields.get('city')[1]: + _c.append(_s.cityid) + alarm.set('id.address2', _s.id) + except: + pass + else: + alarm.set('id.address2', alarm_fields.get('addresspart')[1]) else: - alarm.material = dict(cars1=u','.join(list(OrderedDict.fromkeys(filter(lambda x: x != '0', str(alarm_fields.get('material', ['', '-1'])[1]).split(',')))))) + alarm.set('id.address2', '0') + alarm.set('address2', alarm_fields.get('addresspart')[0]) + + # person + if alarm_fields.get('person', [u'', 0])[0] != u'': + alarm.set('person', alarm_fields.get('person')[0]) + # alarmplan + if alarm_fields.get('alarmplan', [u'', 0])[0] != u'': + alarm.set('alarmplan', alarm_fields.get('alarmplan')[0]) + + # alarmobject + _ao = None + if alarm_fields.get('object', [u'', 0])[0] != u'' and alarm_fields.get('city', [u'', 0])[1] > 0: + alarm.set('object', alarm_fields.get('object')[0]) + alarm.set('id.object', alarm_fields.get('object')[1]) + # alarmplan from object + if alarm_fields.get('object')[1] != 0: + _ao = AlarmObject.getAlarmObjects(id=alarm_fields.get('object')[1]) + + if _ao: + if _ao.alarmplan != 0: + alarm.set('alarmplan', _ao.alarmplan) + elif alarm_fields.get('alarmplan'): + alarm.set('alarmplan', alarm_fields.get('alarmplan')[0]) + + if _ao.street.id != alarm_fields.get('address', [u'', 0])[1]: # street config from alarmobject + alarm.street = Street.getStreets(id=_ao.street.id) + if _ao.streetno == "": + alarm.set('streetno', alarm_fields.get('streetno')[0]) + else: + alarm.set('streetno', _ao.streetno) + alarm.position = dict(lat=_ao.lat, lng=_ao.lng, zoom=_ao.zoom) + + # remark + if alarm_fields.get('remark', [u'', 0])[0] != u'': + alarm.set('remark', alarm_fields.get('remark')[0]) + if alarmtype.translation(u'_bma_main_') in alarm_fields.get('remark', [u'', 0])[0] or alarmtype.translation(u'_bma_main_') in alarm_fields.get('person', [u'', 0])[0]: + alarmkey = Alarmkey.query.filter(Alarmkey.key.like(u"%{}%".format(alarmtype.translation(u'_bma_')))).first() + if alarmkey: + alarm.set('id.key', alarmkey.id) + alarm._key = u'{}: {}'.format(alarmkey.category, alarmkey.key) + else: + alarm.set('id.key', '0') + alarm._key = alarmtype.translation(u'_bma_key_') + # additional remarks + if alarm_fields.get('remark2', [u'', 0])[0] != u'': + alarm.set('remark', u'{}\n{}'.format(alarm.get('remark'), alarm_fields.get('remark2')[0])) + + # material + if alarm.get('id.key') != 0 and alarm_fields.get('city'): # found key with aao + if alarm_fields.get('city')[1] not in [0, -1]: # default city + if Department.getDepartments(id=alarm.city.dept).defaultcity == alarm_fields.get('city')[1]: # default city for dep + if alarm_fields.get('material'): + if str(alarm_fields.get('material')[1])[0] == '0': # default cars for aao + try: + alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(alarm.street.city.dept)]), cars2=u','.join([str(c.id) for c in alarm.key.getCars2(alarm.street.city.dept)]), material=u','.join([str(c.id) for c in alarm.key.getMaterial(alarm.street.city.dept)])) + except AttributeError: + alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(alarm.city.dept)]), cars2=u','.join([str(c.id) for c in alarm.key.getCars2(alarm.city.dept)]), material=u','.join([str(c.id) for c in alarm.key.getMaterial(alarm.city.dept)])) + + for _c in u'{}'.format(alarm_fields.get('material')[1]).split(','): # add additional cars + if _c != '0' and _c not in alarm.get('k.cars1').split(','): + alarm.set('k.cars1', u'{},{}'.format(alarm.get('k.cars1'), _c)) + + else: # only alarmed material + alarm.material = dict(cars1=alarm_fields.get('material', [u'', ''])[1]) + + else: # else city + if alarm_fields.get('material', [u'', u''])[1] == u'0': # default cars for aao + alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(alarm.city.dept)]), cars2=u','.join([str(c.id) for c in alarm.key.getCars2(alarm.city.dept)]), material=u','.join([str(c.id) for c in alarm.key.getMaterial(alarm.city.dept)])) + else: + alarm.material = dict(cars1=u','.join(list(OrderedDict.fromkeys(filter(lambda x: x != '0', str(alarm_fields.get('material', ['', '-1'])[1]).split(',')))))) - else: # default aao of current department (without aao) - if alarm_fields.get('city', [u'', 0])[1] != 0: # found city -> use default aao - if City.getCities(id=alarm_fields.get('city')[1]): - c = City.getCities(id=alarm_fields.get('city')[1]).dept - else: - c = City.getDefaultCity().dept - akc = Alarmkey.getDefault(c) - if len(akc.cars1) + len(akc.cars2) + len(akc.materials) == 0: # no default aao defined - # use cars of fax - alarm.material = {'cars1': re.sub(r'^0,', '', alarm_fields.get('material')[1]), 'cars2': '', 'material': ''} - else: # use cars of default aao - alarm.material = dict(cars1=u','.join([str(c.id) for c in akc.cars1]), cars2=u",".join([str(c.id) for c in akc.cars2]), material=u",".join([str(c.id) for c in akc.materials])) - - l = (u'{},{},{}'.format(alarm.get('k.cars1'), alarm.get('k.cars2'), alarm.get('k.material'))).split(',') - if len(set(str(alarm_fields.get('material', ([], '-1'))[1]).split(',')).intersection(set(l))) == 0: - _dep = Department.getDefaultDepartment() - for c in str(alarm_fields.get('material', ([], '-1'))[1]).split(','): - if c == u'0': # default of home department needed - alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(_dep.id)]), cars2=u",".join([str(c.id) for c in alarm.key.getCars2(_dep.id)]), material=u",".join([str(c.id) for c in alarm.key.getMaterial(_dep.id)])) - break - if u'0' not in str(alarm_fields.get('material', ([], '-1'))[1]): # only single car needed - alarm.set('k.cars1', u'{},{}'.format(alarm_fields.get('material', ([], '-1'))[1], alarm.get('k.cars1'))) - - if _ao and _ao.hasOwnAAO(): # use aao of current object - alarm.material = dict(cars1=u",".join([str(c.id) for c in _ao.getCars1()]), cars2=u",".join([str(c.id) for c in _ao.getCars2()]), material=u",".join([str(c.id) for c in _ao.getMaterial()])) - - if not kwargs.get('time'): - kwargs['time'] = [] - kwargs['time'].append('alarm creation done in {} sec.'.format(etime - stime)) - - if kwargs.get('mode') != 'test': - db.session.add(alarm) - db.session.commit() - signal.send('alarm', 'added', alarmid=alarm.id) - Alarm.changeState(alarm.id, 1) # activate alarm - logger.info('alarm created with id {} ({})'.format(alarm.id, (etime - stime))) - else: - kwargs['fields'] = kwargs.get('fields', 'xxx') + '\n\n-------------- ALARM-Object --------------\n' - _cdict = Car.getCarsDict() - for a in alarm.attributes: - try: - if a in ['k.cars1', 'k.cars2', 'k.material']: - kwargs['fields'] += '\n-%s:\n %s -> %s' % (a, alarm.get(a), ", ".join([_cdict[int(_c)].name for _c in alarm.get(a).split(',') if _c not in ['', '0']])) - elif a in 'id.key': - if alarm.get(a) > 0: - _k = Alarmkey.getAlarmkeys(id=alarm.get(a)) - kwargs['fields'] += '\n-%s:\n %s -> %s: %s' % (a, alarm.get(a), _k.category, _k.key) + else: # default aao of current department (without aao) + if alarm_fields.get('city', [u'', 0])[1] != 0: # found city -> use default aao + if City.getCities(id=alarm_fields.get('city')[1]): + c = City.getCities(id=alarm_fields.get('city')[1]).dept + else: + c = City.getDefaultCity().dept + akc = Alarmkey.getDefault(c) + if len(akc.cars1) + len(akc.cars2) + len(akc.materials) == 0: # no default aao defined + # use cars of fax + alarm.material = {'cars1': re.sub(r'^0,', '', alarm_fields.get('material')[1]), 'cars2': '', 'material': ''} + else: # use cars of default aao + alarm.material = dict(cars1=u','.join([str(c.id) for c in akc.cars1]), cars2=u",".join([str(c.id) for c in akc.cars2]), material=u",".join([str(c.id) for c in akc.materials])) + + l = (u'{},{},{}'.format(alarm.get('k.cars1'), alarm.get('k.cars2'), alarm.get('k.material'))).split(',') + if len(set(str(alarm_fields.get('material', ([], '-1'))[1]).split(',')).intersection(set(l))) == 0: + _dep = Department.getDefaultDepartment() + for c in str(alarm_fields.get('material', ([], '-1'))[1]).split(','): + if c == u'0': # default of home department needed + alarm.material = dict(cars1=u','.join([str(c.id) for c in alarm.key.getCars1(_dep.id)]), cars2=u",".join([str(c.id) for c in alarm.key.getCars2(_dep.id)]), material=u",".join([str(c.id) for c in alarm.key.getMaterial(_dep.id)])) + break + if u'0' not in str(alarm_fields.get('material', ([], '-1'))[1]): # only single car needed + alarm.set('k.cars1', u'{},{}'.format(alarm_fields.get('material', ([], '-1'))[1], alarm.get('k.cars1'))) + + if _ao and _ao.hasOwnAAO(): # use aao of current object + alarm.material = dict(cars1=u",".join([str(c.id) for c in _ao.getCars1()]), cars2=u",".join([str(c.id) for c in _ao.getCars2()]), material=u",".join([str(c.id) for c in _ao.getMaterial()])) + + if not kwargs.get('time'): + kwargs['time'] = [] + kwargs['time'].append('alarm creation done in {} sec.'.format(etime - stime)) + + if kwargs.get('mode') != 'test': + db.session.add(alarm) + db.session.commit() + signal.send('alarm', 'added', alarmid=alarm.id) + Alarm.changeState(alarm.id, 1) # activate alarm + logger.info('alarm created with id {} ({})'.format(alarm.id, (etime - stime))) + else: + kwargs['fields'] = kwargs.get('fields', 'xxx') + '\n\n-------------- ALARM-Object --------------\n' + _cdict = Car.getCarsDict() + for a in alarm.attributes: + try: + if a in ['k.cars1', 'k.cars2', 'k.material']: + kwargs['fields'] += '\n-%s:\n %s -> %s' % (a, alarm.get(a), ", ".join([_cdict[int(_c)].name for _c in alarm.get(a).split(',') if _c not in ['', '0']])) + elif a in 'id.key': + if alarm.get(a) > 0: + _k = Alarmkey.getAlarmkeys(id=alarm.get(a)) + kwargs['fields'] += '\n-%s:\n %s -> %s: %s' % (a, alarm.get(a), _k.category, _k.key) + else: + kwargs['fields'] += '\n-%s:\n %s' % (a, alarm.get(a)) + kwargs['fields'] += '\n-key:\n %s' % alarm._key + elif a == 'id.address': + kwargs['fields'] += '\n-%s:\n %s -> %s' % (a, alarm.get(a), Street.getStreets(id=alarm.get(a)).name) + elif a == 'id.object': + kwargs['id.object'] = '\n-%s:\n %s' % (a, alarm.get(a)) + kwargs['object'] = '\n-object:\n %s' % alarm.get('object') else: kwargs['fields'] += '\n-%s:\n %s' % (a, alarm.get(a)) - kwargs['fields'] += '\n-key:\n %s' % alarm._key - elif a == 'id.address': - kwargs['fields'] += '\n-%s:\n %s -> %s' % (a, alarm.get(a), Street.getStreets(id=alarm.get(a)).name) - elif a == 'id.object': - kwargs['id.object'] = '\n-%s:\n %s' % (a, alarm.get(a)) - kwargs['object'] = '\n-object:\n %s' % alarm.get('object') - else: - kwargs['fields'] += '\n-%s:\n %s' % (a, alarm.get(a)) - except (AttributeError, KeyError): - kwargs['fields'] += '\n-%s:\n %s (error)' % (a, alarm.get(a)) - kwargs['id'] = '-0' # add dummy id - db.session.rollback() - logger.info('alarm created in TESTMODE (%s)' % (etime - stime)) + except (AttributeError, KeyError): + kwargs['fields'] += '\n-%s:\n %s (error)' % (a, alarm.get(a)) + kwargs['id'] = '-0' # add dummy id + db.session.rollback() + logger.info('alarm created in TESTMODE (%s)' % (etime - stime)) + except: + signal.send('alarm', 'error', message='alarms.errorincreation', text=kwargs.get('text', '')) + return kwargs diff --git a/emonitor/modules/alarms/content_admin.py b/emonitor/modules/alarms/content_admin.py index 60a7656..308dbe8 100644 --- a/emonitor/modules/alarms/content_admin.py +++ b/emonitor/modules/alarms/content_admin.py @@ -7,13 +7,15 @@ from flask import render_template, request, current_app, Response from itertools import chain -from emonitor.extensions import db, scheduler, babel +from emonitor.extensions import db, scheduler, babel, events from emonitor.modules.alarms.alarmutils import AlarmFaxChecker, processFile from emonitor.modules.alarms.alarm import Alarm from emonitor.modules.alarms.alarmfield import AlarmField, AFBasic from emonitor.modules.alarms.alarmtype import AlarmType from emonitor.modules.alarms.alarmsection import AlarmSection from emonitor.modules.alarms.alarmreport import AlarmReport +from emonitor.modules.events.eventhandler import Eventhandler +from emonitor.modules.monitors.monitorlayout import MonitorLayout from emonitor.modules.settings.settings import Settings from emonitor.modules.settings.department import Department from emonitor.modules.cars.car import Car @@ -56,15 +58,40 @@ def getAdminContent(self, **params): return render_template('admin.alarms.type_actions.html', **params) elif request.form.get('action').startswith('deletetype_'): # delete type - db.session.delete(AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1]))) + 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) - else: # update + 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') diff --git a/emonitor/modules/alarms/templates/admin.alarms.type_actions.html b/emonitor/modules/alarms/templates/admin.alarms.type_actions.html index a1994cb..39e9731 100644 --- a/emonitor/modules/alarms/templates/admin.alarms.type_actions.html +++ b/emonitor/modules/alarms/templates/admin.alarms.type_actions.html @@ -45,7 +45,7 @@

{{ _('alarms.type.header.overview') }}

diff --git a/emonitor/modules/alarms/templates/frontend.alarms_smallarea.html b/emonitor/modules/alarms/templates/frontend.alarms_smallarea.html index 0bb1f97..9b33cfe 100644 --- a/emonitor/modules/alarms/templates/frontend.alarms_smallarea.html +++ b/emonitor/modules/alarms/templates/frontend.alarms_smallarea.html @@ -46,6 +46,13 @@ location.reload(); parent.$('#overlaycontent').html('

{{ _('alarm.addedalert') }}

'); parent.$('.overlay').show(); + }else if (d.sender=='alarm.error'){ + var header = ""; + if (d.message == 'alarms.errorincreation'){ + header = "{{ _('alarms.errorincreation') }}"; + } + parent.$('#overlaycontent').html( header + '
' + d.text + '
'); + parent.$('.overlay').show(); } } diff --git a/emonitor/modules/monitors/monitorlayout.py b/emonitor/modules/monitors/monitorlayout.py index 9923b0e..ff546d4 100644 --- a/emonitor/modules/monitors/monitorlayout.py +++ b/emonitor/modules/monitors/monitorlayout.py @@ -17,7 +17,7 @@ class MonitorLayout(db.Model): id = db.Column(db.Integer, primary_key=True) mid = db.Column(db.Integer, db.ForeignKey('monitors.id')) - trigger = db.Column(db.String(30), default='default') + trigger = db.Column(db.TEXT, default='default') _layout = db.Column('layout', db.Text) theme = db.Column(db.String(30)) mintime = db.Column(db.Integer, default=0) diff --git a/emonitor/modules/textmod/content_admin.py b/emonitor/modules/textmod/content_admin.py index f041189..dd460ac 100644 --- a/emonitor/modules/textmod/content_admin.py +++ b/emonitor/modules/textmod/content_admin.py @@ -54,7 +54,7 @@ def getAdminContent(self, **params): if request.form.get('action') == 'savereconvertparams': # save changes Settings.set('convert.format', request.form.get('convert_format')) Settings.set('convert.callstring', request.form.get('convert_callstring')) - Settings.set('convert.crop', str('convert_crop' in request.form) or 'False') + Settings.set('convert.crop', 'convert_crop' in request.form.get('convert_crop', 'False')) params.update({'params': Ocr.getConvertParams(), 'imageformats': ['jpg', 'png']}) return render_template('admin.textmod.convert.html', **params) diff --git a/emonitor/modules/textmod/templates/admin.textmod.convert.html b/emonitor/modules/textmod/templates/admin.textmod.convert.html index 264eb6b..b65edc4 100644 --- a/emonitor/modules/textmod/templates/admin.textmod.convert.html +++ b/emonitor/modules/textmod/templates/admin.textmod.convert.html @@ -20,7 +20,7 @@

{{ _('textmod.convert.header.overview') }}

{{ _('textmod.convert.inputformatinfo') }}

- +

Fehler bei der Einsatzerzeugung

Folgende Informationen konnten" +" erkannt werden:

" + +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:65 msgid "alarms.addtitle" msgstr "Einsatz erstellen" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:59 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:66 msgid "alarms.autorefresh" msgstr "Einsätze automatisch aktualisieren" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:60 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:67 msgid "alarms.collectivereport" msgstr "Sammelmeldung erstellen" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:61 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:68 msgid "alarms.archivetitle" msgstr "Ausgewählte Einsätze archivieren" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:62 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:69 msgid "alarms.filter.title" msgstr "Einsätze filtern" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:62 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:69 msgid "alarms.filter.activetitle" msgstr "Einsatzfilter aktiv" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:148 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:155 msgid "alarms.finishquestion" msgstr "Soll die gewählte Einsatz abgeschlossen werden?" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:156 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:163 msgid "alarms.activatequestion" msgstr "Soll die gewählte Einsatz aktiviert werden?" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:166 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:173 msgid "alarms.archivequestion" msgstr "Sollen die gewählten Einsätze wirklich archiviert werden?" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:173 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:180 msgid "alarms.archivequestionnoselection" msgstr "" "Kein Einsatz zum Archivieren ausgewählt. Auswahl mehrerer Einsätze mit " "gehaltener Taste möglich." -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:179 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:186 msgid "alarms.deletequestion" msgstr "Soll die gewählte Einsatz wirklich gelöscht werden?" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:323 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:330 msgid "alarms.collectivereport.noreports" msgstr "Sammelmeldung kann nicht erstellt werden, es ist kein Template definiert." -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:342 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:349 msgid "alarms.collectivereport.error" msgstr "Fehler bei der Erstellung der Sammelmeldung" @@ -1934,10 +1948,11 @@ msgstr "Alarmierungs-Felder" #: emonitor/modules/alarms/templates/fields/field.config_afalerting.html:13 msgid "alarms.field.alerting.fieldinfo" msgstr "" -"Es können beliebig viele Felder definiert werden, die unterschiedliche Arten " -"der Alarmierung darstellen. Die Felder können dabei in einer einfachen " -"Hierarchie angelegt werden, wenn der Feldname mit einem Leerzeichen beginnt. In " -"der Datenbank wird das Feld unter dem Feld-Identifikator gespeichert." +"Es können beliebig viele Felder definiert werden, die unterschiedliche " +"Arten der Alarmierung darstellen. Die Felder können dabei in einer " +"einfachen Hierarchie angelegt werden, wenn der Feldname mit einem " +"Leerzeichen beginnt. In der Datenbank wird das Feld unter dem Feld-" +"Identifikator gespeichert." #: emonitor/modules/alarms/templates/fields/field.config_afalerting.html:19 #: emonitor/modules/alarms/templates/fields/field.config_afmaterial.html:19 @@ -1958,12 +1973,12 @@ msgstr "Geräte/Material-Liste" #: emonitor/modules/alarms/templates/fields/field.config_afmaterial.html:13 msgid "alarms.field.material.fieldinfo" msgstr "" -"Für den Einsatzbericht können bestimmte Gerätschaften definiert werden, die " -"gesondert aufgeführt werden sollen, z.B. zu Abrechnungszwecken. Es können " -"beliebig viele Geräte definiert werden, jeweils mit Name und Identifikator, die " -"verfügbar sein sollen. Feldnamen mit führendem Leerzeichen werden dabei als " -"Untergeräte einer Überkategorie gesehen, als Name erzeugt ein " -"Eingabefeld für eine freie Eingabe." +"Für den Einsatzbericht können bestimmte Gerätschaften definiert werden, " +"die gesondert aufgeführt werden sollen, z.B. zu Abrechnungszwecken. Es " +"können beliebig viele Geräte definiert werden, jeweils mit Name und " +"Identifikator, die verfügbar sein sollen. Feldnamen mit führendem " +"Leerzeichen werden dabei als Untergeräte einer Überkategorie gesehen, " +" als Name erzeugt ein Eingabefeld für eine freie Eingabe." #: emonitor/modules/alarms/templates/fields/field.config_afmaterial.html:21 #: emonitor/modules/alarms/templates/fields/field.config_afothers.html:21 @@ -1979,9 +1994,9 @@ msgstr "Sonstiges" #, fuzzy msgid "alarms.field.others.fieldinfo" msgstr "" -"Für die Mannschaft sind verschiedenen Felder vorgesehen, die einzeln aktiviert/" -"deaktiviert werden können. Nur für aktivierte Felder können Werte eingegeben " -"werden, die restlichen Felder werden nicht angezeigt." +"Für die Mannschaft sind verschiedenen Felder vorgesehen, die einzeln " +"aktiviert/deaktiviert werden können. Nur für aktivierte Felder können " +"Werte eingegeben werden, die restlichen Felder werden nicht angezeigt." #: emonitor/modules/alarms/templates/fields/field.config_afpersons.html:10 msgid "alarms.field.persons.title" @@ -1990,9 +2005,9 @@ msgstr "Mannschaftsfelder" #: emonitor/modules/alarms/templates/fields/field.config_afpersons.html:11 msgid "alarms.field.persons.fieldinfo" msgstr "" -"Für die Mannschaft sind verschiedenen Felder vorgesehen, die einzeln aktiviert/" -"deaktiviert werden können. Nur für aktivierte Felder können Werte eingegeben " -"werden, die restlichen Felder werden nicht angezeigt." +"Für die Mannschaft sind verschiedenen Felder vorgesehen, die einzeln " +"aktiviert/deaktiviert werden können. Nur für aktivierte Felder können " +"Werte eingegeben werden, die restlichen Felder werden nicht angezeigt." #: emonitor/modules/alarms/templates/fields/field.edit_afmaterial.html:9 #: emonitor/modules/alarms/templates/fields/field.edit_afothers.html:9 @@ -2004,7 +2019,8 @@ msgstr "Sonstiges" #: emonitor/modules/alarms/templates/fields/field.edit_afreport.html:9 msgid "alarms.field.reportinfo" msgstr "" -"Einsatzbericht in Textform eintragen, wird als Einsatzdokumentation gespeichert." +"Einsatzbericht in Textform eintragen, wird als Einsatzdokumentation " +"gespeichert." #: emonitor/modules/alarms/templates/fields/field.edit_afreport.html:11 msgid "alarms.fields.reportplaceholder" @@ -2063,8 +2079,8 @@ msgstr "Fahrzeug- & Materialübersicht" #: emonitor/modules/cars/templates/admin.cars.html:21 msgid "cars.info" msgstr "" -"Übersicht über Fahrzeuge und Material, die im System hinterlegt sind. Nur " -"aktive Fahrzeuge/Material werden in der Auswertung am Monitor angezeigt." +"Übersicht über Fahrzeuge und Material, die im System hinterlegt sind. Nur" +" aktive Fahrzeuge/Material werden in der Auswertung am Monitor angezeigt." #: emonitor/modules/cars/templates/admin.cars.html:25 #: emonitor/modules/cars/templates/admin.cars_edit.html:12 @@ -2144,14 +2160,14 @@ msgstr "Event-Handler Liste" msgid "events.info" msgstr "" "Für Systemevents können Handler definiert werden, die in angegebener " -"Reihenfolge nacheinander ausgeführt werden, wenn ein Systemevent eintritt. Die " -"Reihenfolge der Handler kann per Drag&Drop geändert werden." +"Reihenfolge nacheinander ausgeführt werden, wenn ein Systemevent " +"eintritt. Die Reihenfolge der Handler kann per Drag&Drop geändert werden." #: emonitor/modules/events/templates/admin.events.html:22 msgid "events.nodefinitionfound" msgstr "" -"Keine Definition vorhanden: Wenn eine Display-Steuerung erfolgen soll, muss " -"mindestens für ein Event ein Handler definiert werden. Details und " +"Keine Definition vorhanden: Wenn eine Display-Steuerung erfolgen soll, " +"muss mindestens für ein Event ein Handler definiert werden. Details und " "Beispielkonfigurationen sind in der Hilfe (oben rechts) zu finden." #: emonitor/modules/events/templates/admin.events.html:27 @@ -2218,8 +2234,8 @@ msgstr "Eingabe-Parameter" #: emonitor/modules/events/templates/admin.events_data.html:16 msgid "event.inparameters.info" msgstr "" -"Eingabe-Parameter müssen mit Werten belegt werden, dass das Modul korrekt " -"arbeiten kann." +"Eingabe-Parameter müssen mit Werten belegt werden, dass das Modul korrekt" +" arbeiten kann." #: emonitor/modules/events/templates/admin.events_data.html:47 #: emonitor/modules/events/templates/admin.events_data.html:86 @@ -2300,9 +2316,9 @@ msgstr "Kartenobjekte-Definition" #: emonitor/modules/mapitems/templates/admin.mapitems.html:24 msgid "admin.mapitems.definitioninfo" msgstr "" -"Auf der Karte können verschiedene zusätzliche Objekte eingeblendet werden. " -"Dafür kann über die Definition die Art des Objekts konfiguriert werden und " -"anschließend von OpenStreetMap geladen werden." +"Auf der Karte können verschiedene zusätzliche Objekte eingeblendet " +"werden. Dafür kann über die Definition die Art des Objekts konfiguriert " +"werden und anschließend von OpenStreetMap geladen werden." #: emonitor/modules/mapitems/templates/admin.mapitems.definition.html:22 msgid "mapitems.itemtypename" @@ -2387,10 +2403,10 @@ msgstr "Kategorieschlüssel" #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:33 msgid "mapitems.keys.info" msgstr "" -"Regulärer Ausdruck (zeilenweise), der die Anzeige der Kartenobjekte anhand der " -"Kategorie definiert.
Wenn der Reguläre Ausdruck passt, werden Objekte " -"diesen Typs auf der Karte dargestellt.
z.B. B[1-9] passt auf alle " -"Brandkategorien." +"Regulärer Ausdruck (zeilenweise), der die Anzeige der Kartenobjekte " +"anhand der Kategorie definiert.
Wenn der Reguläre Ausdruck passt, " +"werden Objekte diesen Typs auf der Karte dargestellt.
z.B. " +"B[1-9] passt auf alle Brandkategorien." #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:39 msgid "mapitems.tileserver" @@ -2399,9 +2415,9 @@ msgstr "Tileserver bereitstellen" #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:42 msgid "mapitems.tileserver.info" msgstr "" -"Falls ein Tileserver erstellt werden soll, können die Objekte als eigener " -"Kartenlayer in Tiles dargestellt werden. Das ist besonders bei einer großen " -"Anzahl an Objekten sinnvoll." +"Falls ein Tileserver erstellt werden soll, können die Objekte als eigener" +" Kartenlayer in Tiles dargestellt werden. Das ist besonders bei einer " +"großen Anzahl an Objekten sinnvoll." #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:45 #: emonitor/modules/mapitems/templates/admin.mapitems.html:53 @@ -2415,8 +2431,8 @@ msgstr "- keine Formatierung -" #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:52 msgid "mapitems.parameters.info" msgstr "" -"Formatierungsvorlage, um das Kartenobjekt auf der Karte in der richtigen Form " -"darzustellen." +"Formatierungsvorlage, um das Kartenobjekt auf der Karte in der richtigen " +"Form darzustellen." #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:56 msgid "mapitems.definitionparams" @@ -2439,8 +2455,8 @@ msgstr "Attribute" #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:66 msgid "mapitems.attributes.info" msgstr "" -"Attributnamen (zeilenweise), die importiert werden sollen. Pflichtattribut " -"id" +"Attributnamen (zeilenweise), die importiert werden sollen. " +"Pflichtattribut id" #: emonitor/modules/mapitems/templates/admin.mapitems.definition_actions.html:72 msgid "mapitems.save" @@ -2506,7 +2522,8 @@ msgstr "Download gestartet" msgid "settings.map.loadingstarted" msgstr "Tile-Download in Bearbeitung..." -#: emonitor/modules/maps/content_frontend.py:37 emonitor/modules/maps/map.py:114 +#: emonitor/modules/maps/content_frontend.py:37 +#: emonitor/modules/maps/map.py:114 msgid "maps.print.overview" msgstr "Karte wurde an den Drucker geschickt" @@ -2524,10 +2541,10 @@ msgstr "Vorhandene Karten" #: emonitor/modules/settings/templates/admin.settings.map_actions.html:18 msgid "settings.map.info" msgstr "" -"Unterschiedliche Karten können über den Tileserver ausgeliefert werden. Dazu " -"ist ein Name und ein Datenpfad zu definieren. Die erste Karte wird " -"standardmäßig als default angenommen, über Drag&Drop kann die Reihenfolge " -"geändert werden." +"Unterschiedliche Karten können über den Tileserver ausgeliefert werden. " +"Dazu ist ein Name und ein Datenpfad zu definieren. Die erste Karte wird " +"standardmäßig als default angenommen, über Drag&Drop kann die Reihenfolge" +" geändert werden." #: emonitor/modules/maps/templates/admin.map.html:27 #: emonitor/modules/maps/templates/admin.map_actions.html:33 @@ -2580,9 +2597,9 @@ msgstr "Standardkartenposition" #: emonitor/modules/maps/templates/admin.map.position.html:27 msgid "settings.map.positioninfo" msgstr "" -"Wenn für eine Kartenanzeige keine Koordinaten definiert worden sind, wird die " -"Standardposition verwendet. Richten Sie die Mitte der Karte auf den gewünschten " -"Punkt aus und bestätigen Sie mit 'Position speichern'." +"Wenn für eine Kartenanzeige keine Koordinaten definiert worden sind, wird" +" die Standardposition verwendet. Richten Sie die Mitte der Karte auf den " +"gewünschten Punkt aus und bestätigen Sie mit 'Position speichern'." #: emonitor/modules/maps/templates/admin.map.position.html:31 msgid "settings.map.searchcity" @@ -2627,8 +2644,9 @@ msgstr "Longitude" #: emonitor/modules/maps/templates/admin.map.position.html:53 msgid "settings.map.homeinfo" msgstr "" -"Durch Doppleklick auf die Karte kann die Startposition für die Navigation " -"gewählt werden. in der Regel wird das der Standort des Gerätehauses sein." +"Durch Doppleklick auf die Karte kann die Startposition für die Navigation" +" gewählt werden. in der Regel wird das der Standort des Gerätehauses " +"sein." #: emonitor/modules/maps/templates/admin.map.position.html:58 msgid "settings.map.saveposition" @@ -2673,10 +2691,11 @@ msgstr "Kartenserver" #: emonitor/modules/settings/templates/admin.settings.map_actions.html:40 msgid "settings.tileserver.info" msgstr "" -"Der Kartenserver kann entweder ein lokaler Server sein oder online die Kacheln " -"laden.
Beispiele:
lokal: /tileserver/osm/{z}/{x}/{y}
Bing: //ak.t2.tiles.virtualearth.net/tiles/a{q}?g=1236
Google:" -" //khm2.googleapis.com/kh?v=142&x={x}&y={y}&z={z}" +"Der Kartenserver kann entweder ein lokaler Server sein oder online die " +"Kacheln laden.
Beispiele:
lokal: " +"/tileserver/osm/{z}/{x}/{y}
Bing: " +"//ak.t2.tiles.virtualearth.net/tiles/a{q}?g=1236
Google: " +"//khm2.googleapis.com/kh?v=142&x={x}&y={y}&z={z}" #: emonitor/modules/maps/templates/admin.map_actions.html:57 #: emonitor/modules/settings/templates/admin.settings.map_actions.html:44 @@ -2712,8 +2731,8 @@ msgstr "Karte downloaden" #: emonitor/modules/settings/templates/admin.settings.map_actions.html:63 msgid "settings.map.gettilesinfo" msgstr "" -"Durch Klicken auf die Karte können Ausschnitte zum Download gewählt werden. " -"Grau hinterlegte Bereiche wurden nocht nicht lokal gespeichert." +"Durch Klicken auf die Karte können Ausschnitte zum Download gewählt " +"werden. Grau hinterlegte Bereiche wurden nocht nicht lokal gespeichert." #: emonitor/modules/maps/templates/admin.map_actions.html:76 #: emonitor/modules/settings/templates/admin.settings.map_actions.html:71 @@ -2727,14 +2746,15 @@ msgstr "Download abbrechen" #: emonitor/modules/maps/templates/admin.map_actions.html:118 msgid "settings.map.startdownload" msgstr "" -"Sollen die Kartenteile der gewählten Fläche heruntergeladen werden, dass sie " -"Offline zur Verfügung stehen?" +"Sollen die Kartenteile der gewählten Fläche heruntergeladen werden, dass " +"sie Offline zur Verfügung stehen?" #: emonitor/modules/maps/templates/frontend.map.html:82 msgid "maps.nodefaultposition" msgstr "" -"Es wurde noch keine Standardposition für die Kartendarstellung gespeichert, das " -"kann im Administrationsbereich unter 'Straßenkarte' eingestellt werden." +"Es wurde noch keine Standardposition für die Kartendarstellung " +"gespeichert, das kann im Administrationsbereich unter 'Straßenkarte' " +"eingestellt werden." #: emonitor/modules/messages/__init__.py:44 msgid "module.messages" @@ -2851,8 +2871,8 @@ msgstr "Wetter" #: emonitor/modules/messages/templates/admin.message.base.html:4 msgid "messages.base.default" msgstr "" -"Standard Widget (wird verwendet, wenn keine Meldung aktiv ist, evtl. leere " -"Anzeige)" +"Standard Widget (wird verwendet, wenn keine Meldung aktiv ist, evtl. " +"leere Anzeige)" #: emonitor/modules/messages/templates/admin.message.base.html:6 msgid "messages.base.default_none" @@ -2869,8 +2889,8 @@ msgstr "Anzeigedauer in Sekunden" #: emonitor/modules/messages/templates/admin.message.base.html:27 msgid "message.base.slidespeed.info" msgstr "" -"Wenn mehrere Mitteilungen aktiv sind, werden sie per slideshow weitergeschaltet " -"nach der konfigurierten Anzahl an Sekunden." +"Wenn mehrere Mitteilungen aktiv sind, werden sie per slideshow " +"weitergeschaltet nach der konfigurierten Anzahl an Sekunden." #: emonitor/modules/messages/templates/admin.message.base.html:32 msgid "messages.base.slideeffect" @@ -2898,8 +2918,8 @@ msgstr "Mitteilungstext/Inhalt" #: emonitor/modules/messages/templates/frontend.messages_edit_text.html:5 msgid "messages.text.content.info" msgstr "" -"Der Mitteilungstext kann einfacher Text sein oder nach 'restructuredText' " -"formatiert werden." +"Der Mitteilungstext kann einfacher Text sein oder nach 'restructuredText'" +" formatiert werden." #: emonitor/modules/messages/templates/admin.message.text.html:11 #: emonitor/modules/messages/templates/frontend.messages_edit_text.html:10 @@ -3041,8 +3061,8 @@ msgid "messages.types.info" msgstr "" "In der Konfiguration kann für die verschiedenen Mitteilungstypen die " "Basiskonfiguration vorgenommen werden. Dabei bieten die einzelnen Typen " -"unterschiedliche Parameter.
In der Basis-Einstellung können die globalen " -"Parameter der Mitteilungsmoduls definiert werden." +"unterschiedliche Parameter.
In der Basis-Einstellung können die " +"globalen Parameter der Mitteilungsmoduls definiert werden." #: emonitor/modules/messages/templates/admin.messages_message.html:12 #: emonitor/modules/messages/templates/frontend.messages_smallarea.html:95 @@ -3145,9 +3165,9 @@ msgstr "Bild hochladen" #: emonitor/modules/messages/templates/frontend.messages_edit_image.html:16 msgid "messages.image.fileinfo" msgstr "" -"Folgende Bilder stehen zur Verfügung. Wenn die Checkbox aktiviert ist, wird das " -"Bild auch für die Diashow verwendet. Es können beliebig viele Bilder (jpg, png) " -"verwendet werden." +"Folgende Bilder stehen zur Verfügung. Wenn die Checkbox aktiviert ist, " +"wird das Bild auch für die Diashow verwendet. Es können beliebig viele " +"Bilder (jpg, png) verwendet werden." #: emonitor/modules/messages/templates/frontend.messages_edit_image.html:63 msgid "messages.filesdeletequestion" @@ -3164,8 +3184,8 @@ msgstr "Hinweistext" #: emonitor/modules/messages/templates/frontend.messages_edit_map.html:11 msgid "messages.map.text.info" msgstr "" -"Neben den Symbolen für die Karte kann ein Hinweistext vergeben werden, der " -"zusammen mit der Karte dargestellt wird." +"Neben den Symbolen für die Karte kann ein Hinweistext vergeben werden, " +"der zusammen mit der Karte dargestellt wird." #: emonitor/modules/messages/templates/frontend.messages_edit_map.html:12 msgid "messages.map.textpreview.title" @@ -3290,8 +3310,8 @@ msgstr "Monitor-Themes bearbeiten" #: emonitor/modules/monitors/templates/admin.monitors.actions.html:17 msgid "monitors.actions.info" msgstr "" -"Übersicht über alle Schedules des Systems für Monitore und andere Trigger, die " -"automatisch ausgeführt werden sollen." +"Übersicht über alle Schedules des Systems für Monitore und andere " +"Trigger, die automatisch ausgeführt werden sollen." #: emonitor/modules/monitors/templates/admin.monitors.actions.html:20 #: emonitor/modules/monitors/templates/admin.monitors.current.html:16 @@ -3309,11 +3329,11 @@ msgstr "Angeschlossene Bildschirme/Clients" #: emonitor/modules/monitors/templates/admin.monitors.current.html:13 msgid "monitors.current.info" msgstr "" -"Hier kann eine Suche nach vorhandenen Bildschirmen/Clients angestoßen werden, " -"die auf die Events der Software reagieren. Damit ist eine Kontrolle der " -"korrekten Konfiguration gegeben.Falls ein Bildschirm/Client nicht gefunden " -"wurde, überprüfen Sie, ob die Software korrekt läuft und der Computer im " -"Netzwerk erreichbar ist." +"Hier kann eine Suche nach vorhandenen Bildschirmen/Clients angestoßen " +"werden, die auf die Events der Software reagieren. Damit ist eine " +"Kontrolle der korrekten Konfiguration gegeben.Falls ein Bildschirm/Client" +" nicht gefunden wurde, überprüfen Sie, ob die Software korrekt läuft und " +"der Computer im Netzwerk erreichbar ist." #: emonitor/modules/monitors/templates/admin.monitors.current.html:19 msgid "monitors.current.loadingclients" @@ -3349,14 +3369,16 @@ msgstr "Monitor-Definitionsübersicht" #: emonitor/modules/monitors/templates/admin.monitors.html:34 msgid "monitors.info" msgstr "" -"Übersicht über bereits angelegte Monitor-Definitionen. Hier können beliebige " -"Module arrangiert werden, die Inhalte auf Bildschirme zugeschnitten darstellen." +"Übersicht über bereits angelegte Monitor-Definitionen. Hier können " +"beliebige Module arrangiert werden, die Inhalte auf Bildschirme " +"zugeschnitten darstellen." #: emonitor/modules/monitors/templates/admin.monitors.html:37 msgid "monitors.nodefinitionfound" msgstr "" -"Keine Defintion vorhanden: Mindestens eine Monitordefinition ist erforderlich, " -"wenn eingehende Events verarbeitet dargestellt werden sollen." +"Keine Defintion vorhanden: Mindestens eine Monitordefinition ist " +"erforderlich, wenn eingehende Events verarbeitet dargestellt werden " +"sollen." #: emonitor/modules/monitors/templates/admin.monitors.html:43 msgid "monitors.client" @@ -3478,7 +3500,8 @@ msgstr "- keines -" #: emonitor/modules/monitors/templates/admin.monitors.layout_actions.html:91 msgid "monitorlayouts.nextidlabel" msgstr "" -"Nach der Maximalanzeigezeit wird automatisch in das Folgelayout gewechselt. " +"Nach der Maximalanzeigezeit wird automatisch in das Folgelayout " +"gewechselt. " #: emonitor/modules/monitors/templates/admin.monitors.layout_actions.html:95 msgid "monitorlayouts.save" @@ -3503,8 +3526,8 @@ msgstr "Monitor-Themes bearbeiten" #: emonitor/modules/monitors/templates/admin.monitors.style.html:16 msgid "monitors.style.info" msgstr "" -"Bei der Anzeige auf den Bildschirmen können unterschiedliche Themes verwendet " -"werden. Diese Themes können individuell angepasst werden." +"Bei der Anzeige auf den Bildschirmen können unterschiedliche Themes " +"verwendet werden. Diese Themes können individuell angepasst werden." #: emonitor/modules/monitors/templates/admin.monitors.style.html:24 msgid "monitors.style.addtheme" @@ -3537,8 +3560,8 @@ msgstr "Raster (Breite x Höhe)" #: emonitor/modules/monitors/templates/admin.monitors_actions.html:38 msgid "monitors.format.info" msgstr "" -"Ein Raster mit Kacheln kann in der Layout-Definition frei belegt werden" +"Ein Raster mit Kacheln kann in der Layout-Definition frei belegt " +"werden" #: emonitor/modules/monitors/templates/admin.monitors_actions.html:42 msgid "monitors.save" @@ -3601,8 +3624,8 @@ msgstr "Anzahl Geburtstage" #: emonitor/modules/persons/templates/frontend.messages_edit_birthday.html:6 msgid "messages.birthday.number.info" msgstr "" -"Anzahl der anzuzeigenden Personen, die um das aktuelle Datum herum Geburtstag " -"haben." +"Anzahl der anzuzeigenden Personen, die um das aktuelle Datum herum " +"Geburtstag haben." #: emonitor/modules/persons/templates/admin.message.birthday.html:13 #: emonitor/modules/persons/templates/frontend.messages_edit_birthday.html:10 @@ -3634,9 +3657,10 @@ msgstr "Mitglieder-Übersicht" #: emonitor/modules/persons/templates/admin.persons.html:30 msgid "persons.info" msgstr "" -"Für jede Einheit können Mitglieder gespeichert werden, die an verschiedenen " -"Stellen namentlich verwendet werden können. Falls ein Geburtsdatum angegeben " -"wurde, wird das Mitglied in der Geburtstagsliste angezeigt." +"Für jede Einheit können Mitglieder gespeichert werden, die an " +"verschiedenen Stellen namentlich verwendet werden können. Falls ein " +"Geburtsdatum angegeben wurde, wird das Mitglied in der Geburtstagsliste " +"angezeigt." #: emonitor/modules/persons/templates/admin.persons.html:33 msgid "persons.filterlabel" @@ -3702,8 +3726,8 @@ msgstr "Mitglieder Grundeinstellungen" #: emonitor/modules/persons/templates/admin.persons.settings.html:9 msgid "persons.settings.info" msgstr "" -"Für die Mitgliederverwaltung sind einige Grundeinstellungen vorzunehmen, dass " -"die Personen sinnvoll verwaltet werden können." +"Für die Mitgliederverwaltung sind einige Grundeinstellungen vorzunehmen, " +"dass die Personen sinnvoll verwaltet werden können." #: emonitor/modules/persons/templates/admin.persons.settings.html:11 msgid "persons.grade.title" @@ -3712,9 +3736,10 @@ msgstr "Dienstgrad-Einstellungen" #: emonitor/modules/persons/templates/admin.persons.settings.html:12 msgid "persons.grade.info" msgstr "" -"Jeder Person sollte einen Dienstgrad zugewiesen bekommen. Es ist vorgesehen, " -"jeweils eine Abkürzung und die volle Bezeichnung zu speichern. Diese Daten " -"können in der Einsatzverwaltung des Personals verwendet werden." +"Jeder Person sollte einen Dienstgrad zugewiesen bekommen. Es ist " +"vorgesehen, jeweils eine Abkürzung und die volle Bezeichnung zu " +"speichern. Diese Daten können in der Einsatzverwaltung des Personals " +"verwendet werden." #: emonitor/modules/persons/templates/admin.persons.settings.html:17 msgid "persons.grade.short" @@ -3738,8 +3763,8 @@ msgstr "Dienststellung" #: emonitor/modules/persons/templates/admin.persons.settings.html:56 msgid "persons.position.info" msgstr "" -"Jedes Mitglied hat in der aktiven Mannschaft eine Dienststellung. Diese wird " -"für die erweiterte Personalerfassung bei Einsätzen herangezogen." +"Jedes Mitglied hat in der aktiven Mannschaft eine Dienststellung. Diese " +"wird für die erweiterte Personalerfassung bei Einsätzen herangezogen." #: emonitor/modules/persons/templates/admin.persons.settings.html:70 msgid "persons.additional.label" @@ -3748,9 +3773,10 @@ msgstr "Zusätzliche Felder" #: emonitor/modules/persons/templates/admin.persons.settings.html:71 msgid "persons.additional.info" msgstr "" -"Für Mitglieder können zusätzliche Felder definiert werden, die individuell " -"gefüllt werden können.
Die Definition erfolgt zeilenweise in der Form:
'Parametername=Parameter Label[=checkbox]'" +"Für Mitglieder können zusätzliche Felder definiert werden, die " +"individuell gefüllt werden können.
Die Definition erfolgt zeilenweise" +" in der Form:
'Parametername=Parameter " +"Label[=checkbox]'" #: emonitor/modules/persons/templates/admin.persons.upload.html:22 msgid "persons.upload.headtitle" @@ -3759,7 +3785,8 @@ msgstr "Mitgliedersdatei hochladen" #: emonitor/modules/persons/templates/admin.persons.upload.html:23 msgid "persons.upload.info" msgstr "" -"Die Mitglieder können konfigurierbar über eine Excel-Datei hochgeladen werden." +"Die Mitglieder können konfigurierbar über eine Excel-Datei hochgeladen " +"werden." #: emonitor/modules/persons/templates/admin.persons.upload.html:35 msgid "persons.upload.filename" @@ -3776,7 +3803,8 @@ msgstr "Daten werden verarbeitet und der Import gestartet..." #: emonitor/modules/persons/templates/admin.persons.upload.html:79 msgid "persons.upload.wrongfiletype" msgstr "" -"Falscher Dateityp ausgewählt. Es können nur Excel-Dateien hochgeladen werden." +"Falscher Dateityp ausgewählt. Es können nur Excel-Dateien hochgeladen " +"werden." #: emonitor/modules/persons/templates/admin.persons.upload2.html:2 msgid "persons.upload.step2header" @@ -3801,7 +3829,8 @@ msgstr "- Spalte wählen -" #: emonitor/modules/persons/templates/admin.persons.upload3.html:18 msgid "persons.upload.requiredlabel" msgstr "" -"Mit %(mark)s gekennzeichnete Felder sind Pflichtfelder und müssen belegt werden." +"Mit %(mark)s gekennzeichnete Felder sind Pflichtfelder und müssen belegt " +"werden." #: emonitor/modules/persons/templates/admin.persons.upload3.html:20 msgid "persons.upload.evaldata" @@ -3964,8 +3993,9 @@ msgstr "Druckansicht-Definitionsübersicht" #: emonitor/modules/printers/templates/admin.printers.html:17 msgid "printers.info" msgstr "" -"Aus unterschiedlichen Modulen heraus kann gedruckt werden. An dieser Stelle " -"kann die Konfiguration unterschiedlicher Ausdrucke erstellt werden." +"Aus unterschiedlichen Modulen heraus kann gedruckt werden. An dieser " +"Stelle kann die Konfiguration unterschiedlicher Ausdrucke erstellt " +"werden." #: emonitor/modules/printers/templates/admin.printers.html:21 msgid "printers.id" @@ -4026,8 +4056,8 @@ msgstr "Druckeinstellungen" #: emonitor/modules/printers/templates/admin.printers.settings.html:9 msgid "printers.settings.info" msgstr "" -"Die Basiskonfiguration für das Drucken erstellen. Diese Basisparameter werden " -"für die Druckansichten verwendet" +"Die Basiskonfiguration für das Drucken erstellen. Diese Basisparameter " +"werden für die Druckansichten verwendet" #: emonitor/modules/printers/templates/admin.printers.settings.html:12 msgid "printers.settings.callstring" @@ -4036,12 +4066,13 @@ msgstr "Druckaufruf" #: emonitor/modules/printers/templates/admin.printers.settings.html:14 msgid "printers.settings.callstringinfo" msgstr "" -"Es werden externe Programme zum Ausdruck verwendet. Hierfür kann der Aufruf " -"konfiguriert werden. Es sind folgende Variablen möglich:
- [basepath]: " -"Verzeichnis der Anwendung
- [printer]: Name des Druckers, wenn nicht " -"gewählt wird der Standarddrucker des Servers verwendet
- [copies]: " -"Anzahl
- [filename]: Dateiname der zu druckenden Datei

Standard: " -"[basepath]/bin/gsprint -copies [copies] -noquery [filename]" +"Es werden externe Programme zum Ausdruck verwendet. Hierfür kann der " +"Aufruf konfiguriert werden. Es sind folgende Variablen möglich:
- " +"[basepath]: Verzeichnis der Anwendung
- [printer]: Name des Druckers," +" wenn nicht gewählt wird der Standarddrucker des Servers verwendet
- " +"[copies]: Anzahl
- [filename]: Dateiname der zu druckenden " +"Datei

Standard: [basepath]/bin/gsprint -copies [copies] -noquery" +" [filename]" #: emonitor/modules/printers/templates/admin.printers.settings.html:18 msgid "printers.settings.save" @@ -4132,8 +4163,8 @@ msgstr "" #: emonitor/modules/settings/content_admin.py:75 msgid "admin.settings.department_deleteerror1" msgstr "" -"Einheit kann nicht gelöscht werden, weil sie in folgenden Orten als Standard " -"genutzt wird: %(cities)s" +"Einheit kann nicht gelöscht werden, weil sie in folgenden Orten als " +"Standard genutzt wird: %(cities)s" #: emonitor/modules/settings/content_admin.py:188 msgid "admin.settings.updatedberror" @@ -4150,8 +4181,8 @@ msgstr "Fahrzeug/Material-Definition" #: emonitor/modules/settings/templates/admin.settings.cars.html:20 msgid "settings.cars.info" msgstr "" -"Kategorien für Fahrzeuge/Material, die bei Einsätzen zum Einsatz kommen können. " -"Die Farben werden als Hintergrund in der Darstellung verwendet." +"Kategorien für Fahrzeuge/Material, die bei Einsätzen zum Einsatz kommen " +"können. Die Farben werden als Hintergrund in der Darstellung verwendet." #: emonitor/modules/settings/templates/admin.settings.cars.html:24 msgid "settings.cars.types" @@ -4182,8 +4213,8 @@ msgstr "Mail-Einstellungen" #: emonitor/modules/settings/templates/admin.settings.communication.html:83 msgid "settings.communication.telegram.info" msgstr "" -"Telegram kann als Messenger-Dienst angebunden werden und auf bestimmte Events " -"Informationen an angemeldete Benutzer schicken." +"Telegram kann als Messenger-Dienst angebunden werden und auf bestimmte " +"Events Informationen an angemeldete Benutzer schicken." #: emonitor/modules/settings/templates/admin.settings.communication.html:89 msgid "settings.communication.telegram.botname" @@ -4202,8 +4233,8 @@ msgstr "Willkommenstext bei der Anmeldung am Bot" #: emonitor/modules/settings/templates/admin.settings.communication.html:103 msgid "settings.communication.telegram.welcomeinfo" msgstr "" -"Der Text wird an den User geschickt, der sich am Telegram-Bot anmeldet. Dabei " -"sind folgende Variablen möglich:
-{vorname}
-{nachname}" +"Der Text wird an den User geschickt, der sich am Telegram-Bot anmeldet. " +"Dabei sind folgende Variablen möglich:
-{vorname}
-{nachname}" #: emonitor/modules/settings/templates/admin.settings.communication.html:106 msgid "settings.communication.telegram.helptext" @@ -4252,14 +4283,15 @@ msgstr "Einheiten" #: emonitor/modules/settings/templates/admin.settings.department_actions.html:20 msgid "settings.department.info" msgstr "" -"Liste der bereits definierten Feuerwehreinheiten. Der erste Eintrag wird als " -"Standardeinheit genutzt, die Reihenfolge kann per Drag&Drop geändert werden." +"Liste der bereits definierten Feuerwehreinheiten. Der erste Eintrag wird " +"als Standardeinheit genutzt, die Reihenfolge kann per Drag&Drop geändert " +"werden." #: emonitor/modules/settings/templates/admin.settings.department.html:20 msgid "settings.nodepartmentdefinition" msgstr "" -"Definition fehlerhaft: Mindestens eine Einheit muss definiert werden, dass " -"eMonitor korrekt arbeiten kann." +"Definition fehlerhaft: Mindestens eine Einheit muss definiert werden, " +"dass eMonitor korrekt arbeiten kann." #: emonitor/modules/settings/templates/admin.settings.department.html:24 msgid "settings.department.delquestion" @@ -4375,8 +4407,8 @@ msgstr "Verzeichniseinstellungen" #: emonitor/modules/settings/templates/admin.settings.html:21 msgid "settings.info" msgstr "" -"Einstellung einiger Systempfade können hier gemacht werden. Wichtig ist, dass " -"die Pfade mit einem '/' enden und '\\' als '/' eingegeben werden." +"Einstellung einiger Systempfade können hier gemacht werden. Wichtig ist, " +"dass die Pfade mit einem '/' enden und '\\' als '/' eingegeben werden." #: emonitor/modules/settings/templates/admin.settings.html:24 msgid "settings.name" @@ -4393,10 +4425,10 @@ msgstr "Verzeichnisüberwachung" #: emonitor/modules/settings/templates/admin.settings.html:46 msgid "settings.observerstatusinfo" msgstr "" -"Konfiguration der Verzeichnisüberwachung für den Fax-Eingang. Wenn aktiviert, " -"wird in regelmäßigen Abständen das 'Fax-Ablageverzeichnis' auf neue Dateien " -"kontrolliert und bei Fax-Eingang die Bearbeitung angestoßen. Wenn deaktiviert, " -"wird das Verzeichnis nicht überwacht." +"Konfiguration der Verzeichnisüberwachung für den Fax-Eingang. Wenn " +"aktiviert, wird in regelmäßigen Abständen das 'Fax-Ablageverzeichnis' auf" +" neue Dateien kontrolliert und bei Fax-Eingang die Bearbeitung " +"angestoßen. Wenn deaktiviert, wird das Verzeichnis nicht überwacht." #: emonitor/modules/settings/templates/admin.settings.html:48 msgid "settings.observerinterval" @@ -4413,10 +4445,10 @@ msgstr "Monitor-Ping" #: emonitor/modules/settings/templates/admin.settings.html:58 msgid "settings.monitorpinginfo" msgstr "" -"In regelmäßigen Abständen kann an die Monitore in Ping gesendet werden, so dass " -"die Monitore 'aufgeweckt' werden. Diese Funktion ist gedacht, wenn die " -"Verbindung zu den Monitoren abreißt, wenn lange keine Informationen gesendet " -"wurden. (Deaktiviert für 0)" +"In regelmäßigen Abständen kann an die Monitore in Ping gesendet werden, " +"so dass die Monitore 'aufgeweckt' werden. Diese Funktion ist gedacht, " +"wenn die Verbindung zu den Monitoren abreißt, wenn lange keine " +"Informationen gesendet wurden. (Deaktiviert für 0)" #: emonitor/modules/settings/templates/admin.settings.html:60 msgid "settings.monitorpinginterval" @@ -4429,8 +4461,9 @@ msgstr "Datenbankversion" #: emonitor/modules/settings/templates/admin.settings.html:69 msgid "settings.db.info" msgstr "" -"Jede Version von eMonitor benötigt die passende Datenbankversion. Hier kann die " -"Datenbank aktualisiert werden und es wird die aktuelle Version angezeigt." +"Jede Version von eMonitor benötigt die passende Datenbankversion. Hier " +"kann die Datenbank aktualisiert werden und es wird die aktuelle Version " +"angezeigt." #: emonitor/modules/settings/templates/admin.settings.html:70 msgid "settings.db.currentrevision" @@ -4455,10 +4488,10 @@ msgstr "Startseite verwalten" #: emonitor/modules/settings/templates/admin.settings.start.html:18 msgid "settings.start.info" msgstr "" -"Auf der Startseite kann in drei Bereichen Inhalt angezeigt werden. Die Module " -"der Bereiche können ausgewählt werden. Zusätzlich ist es möglich auch die " -"Breiten der beiden äußeren Bereiche und das initiale Ein- oder Ausblenden zu " -"definieren." +"Auf der Startseite kann in drei Bereichen Inhalt angezeigt werden. Die " +"Module der Bereiche können ausgewählt werden. Zusätzlich ist es möglich " +"auch die Breiten der beiden äußeren Bereiche und das initiale Ein- oder " +"Ausblenden zu definieren." #: emonitor/modules/settings/templates/admin.settings.start.html:22 msgid "settings.start.west" @@ -4554,8 +4587,8 @@ msgstr "Ort bearbeiten" #: emonitor/modules/streets/templates/admin.streets.city_list.html:42 msgid "streets.city.info" msgstr "" -"Übersicht über die definierten Orte. Jedem Ort können beliebig viele Straßen " -"zugeordnet werden." +"Übersicht über die definierten Orte. Jedem Ort können beliebig viele " +"Straßen zugeordnet werden." #: emonitor/modules/streets/templates/admin.streets.city_edit.html:33 #: emonitor/modules/streets/templates/admin.streets.city_list.html:51 @@ -4626,8 +4659,8 @@ msgstr "Ortsliste" #: emonitor/modules/streets/templates/admin.streets.html:51 msgid "streets.nocitydef" msgstr "" -"Definition des Ortes unvollständig: Es muss mindestens ein Ort/eine Stadt " -"angelegt sein, dass eMonitor korrekt arbeiten kann." +"Definition des Ortes unvollständig: Es muss mindestens ein Ort/eine Stadt" +" angelegt sein, dass eMonitor korrekt arbeiten kann." #: emonitor/modules/streets/templates/admin.streets.city_list.html:56 msgid "streets.city.addtitle" @@ -4656,8 +4689,8 @@ msgstr "Hausnummern von OpenStreetMap laden" #: emonitor/modules/streets/templates/admin.streets.city_list.html:85 msgid "streets.city.housnumber.info" msgstr "" -"Von OpenStreetMap können alle Hausnummern der konfigurierten Städte geladen " -"werden. Dabei werden die Hausnummern je Straße verfügbar." +"Von OpenStreetMap können alle Hausnummern der konfigurierten Städte " +"geladen werden. Dabei werden die Hausnummern je Straße verfügbar." #: emonitor/modules/streets/templates/admin.streets.city_list.html:88 msgid "streets.city.loadnumbersbutton" @@ -4670,9 +4703,9 @@ msgstr "Städte/Orte von OpenStreetMap laden" #: emonitor/modules/streets/templates/admin.streets.city_list.html:94 msgid "streets.city.load.info" msgstr "" -"Über OpenStreetMap können automatisch alle Städte/Orte geladen werden, die " -"innerhalb des definierten Kartenausschnitts liegen. Anschließend können " -"einzelne Städte/Orte ins System eingespielt werden." +"Über OpenStreetMap können automatisch alle Städte/Orte geladen werden, " +"die innerhalb des definierten Kartenausschnitts liegen. Anschließend " +"können einzelne Städte/Orte ins System eingespielt werden." #: emonitor/modules/streets/templates/admin.streets.city_list.html:95 msgid "streets.city.loadbutton" @@ -4707,9 +4740,10 @@ msgstr "Straßenübersicht" #: emonitor/modules/streets/templates/admin.streets.html:48 msgid "streets.info" msgstr "" -"In der Straßenübersicht werden die Straßen abhängig vom Ort angezeigt. Für jede " -"Straße kann ein Kartenausschnitt definiert werden, der standardmäßig verwendet " -"werden soll. Jeder Straße muss ein Ort zugeordnet werden." +"In der Straßenübersicht werden die Straßen abhängig vom Ort angezeigt. " +"Für jede Straße kann ein Kartenausschnitt definiert werden, der " +"standardmäßig verwendet werden soll. Jeder Straße muss ein Ort zugeordnet" +" werden." #: emonitor/modules/streets/templates/admin.streets.html:56 msgid "streets.filterlabel" @@ -4747,8 +4781,8 @@ msgstr "- keine Straßen definiert -" #: emonitor/modules/streets/templates/admin.streets.html:79 msgid "streets.inactive" msgstr "" -"Straße ist nicht als 'aktiv' markiert und taucht somit auch nicht in der Suche " -"auf" +"Straße ist nicht als 'aktiv' markiert und taucht somit auch nicht in der " +"Suche auf" #: emonitor/modules/streets/templates/admin.streets.html:86 msgid "streets.mapset" @@ -4773,9 +4807,9 @@ msgstr "Straßen von OpenStreetMap laden" #: emonitor/modules/streets/templates/admin.streets.html:102 msgid "streets.load.info" msgstr "" -"Über OpenStreetMap können automatisch alle Straßen geladen werden, die dem " -"akutellen Ort zugeordnet sind. Anschließend können einzelne Straßen ins System " -"eingespielt werden." +"Über OpenStreetMap können automatisch alle Straßen geladen werden, die " +"dem akutellen Ort zugeordnet sind. Anschließend können einzelne Straßen " +"ins System eingespielt werden." #: emonitor/modules/streets/templates/admin.streets.html:103 msgid "streets.loadbutton" @@ -4804,7 +4838,8 @@ msgstr "Zugeordnet zu Ort" #: emonitor/modules/streets/templates/admin.streets_edit.html:56 msgid "streets.subcity.info" msgstr "" -"Ortsteil 'BAB' und 'Bahn' werden gesondert in der Alarmauswertung behandelt." +"Ortsteil 'BAB' und 'Bahn' werden gesondert in der Alarmauswertung " +"behandelt." #: emonitor/modules/streets/templates/admin.streets_edit.html:61 msgid "streets.active" @@ -4829,8 +4864,8 @@ msgstr "Position (Koordinatenpunkt)" #: emonitor/modules/streets/templates/admin.streets_edit.html:101 msgid "streets.housenumbers.info" msgstr "" -"Nach der Eingabe einer Hausnummer kann auf der Karten durch Doppelklicken der " -"zugehörige Punkt gewählt werden." +"Nach der Eingabe einer Hausnummer kann auf der Karten durch Doppelklicken" +" der zugehörige Punkt gewählt werden." #: emonitor/modules/streets/templates/admin.streets_edit.html:106 msgid "streets.updateposition" @@ -4851,8 +4886,8 @@ msgstr "Soll der gewählte Hausnummer wirklich gelöscht werden?" #: emonitor/modules/streets/templates/admin.streets_osm.html:7 msgid "streets.osmresult" msgstr "" -"Folgende Straßen wurden für den gewählten Ort gefunden. Grau unterlegte Straßen " -"sind bereits im System vorhanden." +"Folgende Straßen wurden für den gewählten Ort gefunden. Grau unterlegte " +"Straßen sind bereits im System vorhanden." #: emonitor/modules/streets/templates/admin.streets_osm.html:11 msgid "streets.indb" @@ -4906,8 +4941,8 @@ msgstr "Optimierungs-Parameter" msgid "textmod.convert.info" msgstr "" "Konfigurationsparameter für die korrekte Verarbeitung der Konvertierung. " -"Darunter fallen das verwendete Konvertierungsformat und die Parameter für die " -"Konvertierung." +"Darunter fallen das verwendete Konvertierungsformat und die Parameter für" +" die Konvertierung." #: emonitor/modules/textmod/templates/admin.textmod.convert.html:12 msgid "textmod.convert.inportformats" @@ -4920,9 +4955,9 @@ msgstr "Dateiendung der Bilddatei, sinnvoll: png oder jpg" #: emonitor/modules/textmod/templates/admin.textmod.convert.html:23 msgid "textmod.convert.cropimage" msgstr "" -"obersten Bereich des Faxes abschneiden
Wenn das Fax eine Kopfzeile enthält, " -"kann diese für eine bessere Texterkennung automatisch bei der Bilderzeugung " -"abgeschnitten werden." +"obersten Bereich des Faxes abschneiden
Wenn das Fax eine Kopfzeile " +"enthält, kann diese für eine bessere Texterkennung automatisch bei der " +"Bilderzeugung abgeschnitten werden." #: emonitor/modules/textmod/templates/admin.textmod.convert.html:26 msgid "textmod.convert.callstring" @@ -4931,12 +4966,13 @@ msgstr "Aufruf der Bildkonvertierung" #: emonitor/modules/textmod/templates/admin.textmod.convert.html:28 msgid "textmod.convert.callstringinfo" msgstr "" -"Aufruf der Bildkonvertierung. Folgende Variablen können verwendet werden und " -"werden automatisch ersetzt:
- [basepath]: Verzeichnis der Anwendung
- " -"[incomepath]: Standardpfad, der überwacht wird
- [filename]: Dateiname der " -"Datei, die verarbeitet werden soll
- [tmppath]: Temp-Path zum " -"Zwischenspeichern

Standard: convert -resize 150%% -depth 32 -density " -"200 [incomepath][filename] -quality 100 [tmppath]" +"Aufruf der Bildkonvertierung. Folgende Variablen können verwendet werden " +"und werden automatisch ersetzt:
- [basepath]: Verzeichnis der " +"Anwendung
- [incomepath]: Standardpfad, der überwacht wird
- " +"[filename]: Dateiname der Datei, die verarbeitet werden soll
- " +"[tmppath]: Temp-Path zum Zwischenspeichern

Standard: convert " +"-resize 150%% -depth 32 -density 200 [incomepath][filename] -quality 100 " +"[tmppath]" #: emonitor/modules/textmod/templates/admin.textmod.convert.html:32 msgid "textmod.convert.save" @@ -4957,9 +4993,9 @@ msgstr "Übersicht der Ersetzungen" #: emonitor/modules/textmod/templates/admin.textmod.html:32 msgid "textmod.replace.info" msgstr "" -"Das Ersetzungsmodul ermöglich es, fehlerhaft erkannten Text aus dem Fax durch " -"einen korrekten Wert zu ersetzen. 'Text' beinhaltet den Wert, der durch " -"'Ersetzungstext' ersetzt werden soll." +"Das Ersetzungsmodul ermöglich es, fehlerhaft erkannten Text aus dem Fax " +"durch einen korrekten Wert zu ersetzen. 'Text' beinhaltet den Wert, der " +"durch 'Ersetzungstext' ersetzt werden soll." #: emonitor/modules/textmod/templates/admin.textmod.html:33 msgid "textmod.replace.delquestion" @@ -5020,8 +5056,8 @@ msgstr "OCR-Parameter" msgid "textmod.ocr.info" msgstr "" "Konfigurationsparameter für die korrekte Verarbeitung der Texterkennung. " -"Darunter fallen die unterstützten Eingangsformate und die Parameter für die OCR " -"Verarbeitung" +"Darunter fallen die unterstützten Eingangsformate und die Parameter für " +"die OCR Verarbeitung" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:30 msgid "textmod.ocr.objectformats" @@ -5034,8 +5070,8 @@ msgstr "Datenformate" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:33 msgid "textmod.ocr.inputformatinfo" msgstr "" -"Dateiendungen für Datendateien, jeweils in einer eigenen Zeile, z.B. pdf, " -"tif
Achtung: Groß- und Kleinschreibung beachten!" +"Dateiendungen für Datendateien, jeweils in einer eigenen Zeile, z.B. pdf," +" tif
Achtung: Groß- und Kleinschreibung beachten!" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:36 msgid "textmod.ocr.callstring" @@ -5044,12 +5080,13 @@ msgstr "Aufruf der Textverarbeitung" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:39 msgid "textmod.ocr.callstringinfo" msgstr "" -"Aufruf der Texterkennung. Folgende Variablen können verwendet werden und werden " -"automatisch ersetzt:
- [basepath]: Verzeichnis der Anwendung
- " -"[incomepath]: Standardpfad, der überwacht wird
- [filename]: Dateiname der " -"Datei, die verarbeitet werden soll
- [tmppath]: Temp-Path zum " -"Zwischenspeichern

Standard: [basepath]/bin/tesseract/tesseract " -"[incomepath][filename] [tmppath] -l deu -psm 6 quiet custom" +"Aufruf der Texterkennung. Folgende Variablen können verwendet werden und " +"werden automatisch ersetzt:
- [basepath]: Verzeichnis der " +"Anwendung
- [incomepath]: Standardpfad, der überwacht wird
- " +"[filename]: Dateiname der Datei, die verarbeitet werden soll
- " +"[tmppath]: Temp-Path zum Zwischenspeichern

Standard: " +"[basepath]/bin/tesseract/tesseract [incomepath][filename] [tmppath] -l " +"deu -psm 6 quiet custom" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:44 msgid "textmod.ocr.textformats" @@ -5062,8 +5099,8 @@ msgstr "Textformate" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:47 msgid "textmod.ocr.inputtextformatinfo" msgstr "" -"Dateiendungen für Textdateien, jeweils in einer eigenen Zeile, z.B. txt, ocr
Achtung: Groß- und Kleinschreibung beachten!" +"Dateiendungen für Textdateien, jeweils in einer eigenen Zeile, z.B. txt, " +"ocr
Achtung: Groß- und Kleinschreibung beachten!" #: emonitor/modules/textmod/templates/admin.textmod.ocr.html:51 msgid "textmod.ocr.save" @@ -5076,9 +5113,9 @@ msgstr "OCR-Vokabular" #: emonitor/modules/textmod/templates/admin.textmod.ocrcustom.html:9 msgid "textmod.ocrcustom.info" msgstr "" -"Folgende Wörter sollen in die OCR-Bibliothek aufgenommen werden. Diese werden " -"als Wörterbuch mit verwendet, um die Erkennungsrate bei schwierigen Wörtern zu " -"erhöhen." +"Folgende Wörter sollen in die OCR-Bibliothek aufgenommen werden. Diese " +"werden als Wörterbuch mit verwendet, um die Erkennungsrate bei " +"schwierigen Wörtern zu erhöhen." #: emonitor/modules/textmod/templates/admin.textmod.ocrcustom.html:12 msgid "textmod.ocrcustom.vocabulary" @@ -5210,3 +5247,4 @@ msgstr "Abbrechen" #~ msgid "emonitor.modules.textmod.Textmod" #~ msgstr "Datei-Korrekturen" + diff --git a/emonitor/modules/translations/modules.pot b/emonitor/modules/translations/modules.pot index 7a2ec5f..d463676 100644 --- a/emonitor/modules/translations/modules.pot +++ b/emonitor/modules/translations/modules.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2016-07-24 10:06+0200\n" +"POT-Creation-Date: 2016-07-25 21:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -694,303 +694,303 @@ msgstr "" msgid "admin.alarmobjects.changemarkerblue" msgstr "" -#: emonitor/modules/alarms/__init__.py:103 +#: emonitor/modules/alarms/__init__.py:105 msgid "module.alarms" msgstr "" -#: emonitor/modules/alarms/__init__.py:104 +#: emonitor/modules/alarms/__init__.py:106 msgid "alarms.base" msgstr "" -#: emonitor/modules/alarms/__init__.py:105 +#: emonitor/modules/alarms/__init__.py:107 msgid "module.alarms.types" msgstr "" -#: emonitor/modules/alarms/__init__.py:106 +#: emonitor/modules/alarms/__init__.py:108 msgid "module.alarms.report" msgstr "" -#: emonitor/modules/alarms/__init__.py:107 +#: emonitor/modules/alarms/__init__.py:109 msgid "module.alarms.config" msgstr "" -#: emonitor/modules/alarms/__init__.py:108 +#: emonitor/modules/alarms/__init__.py:110 msgid "module.alarms.test" msgstr "" -#: emonitor/modules/alarms/__init__.py:109 +#: emonitor/modules/alarms/__init__.py:111 msgid "alarms_income" msgstr "" -#: emonitor/modules/alarms/__init__.py:110 +#: emonitor/modules/alarms/__init__.py:112 msgid "alarms_timer" msgstr "" -#: emonitor/modules/alarms/__init__.py:111 +#: emonitor/modules/alarms/__init__.py:113 msgid "alarms_remark" msgstr "" -#: emonitor/modules/alarms/__init__.py:112 +#: emonitor/modules/alarms/__init__.py:114 msgid "alarms" msgstr "" -#: emonitor/modules/alarms/__init__.py:113 +#: emonitor/modules/alarms/__init__.py:115 msgid "alarms.prio0" msgstr "" -#: emonitor/modules/alarms/__init__.py:114 +#: emonitor/modules/alarms/__init__.py:116 msgid "alarms.prio1" msgstr "" -#: emonitor/modules/alarms/__init__.py:115 +#: emonitor/modules/alarms/__init__.py:117 msgid "alarms.prio2" msgstr "" -#: emonitor/modules/alarms/__init__.py:116 +#: emonitor/modules/alarms/__init__.py:118 msgid "emonitor.modules.alarms.alarm.Alarms" msgstr "" -#: emonitor/modules/alarms/__init__.py:117 +#: emonitor/modules/alarms/__init__.py:119 msgid "emonitor.modules.alarms.alarmtype.AlarmTypes" msgstr "" -#: emonitor/modules/alarms/__init__.py:118 +#: emonitor/modules/alarms/__init__.py:120 #: emonitor/modules/alarms/templates/admin.alarms.test.html:68 #: emonitor/modules/alarms/templates/admin.alarms.test.html:70 msgid "alarms.test.protocol" msgstr "" -#: emonitor/modules/alarms/__init__.py:119 +#: emonitor/modules/alarms/__init__.py:121 msgid "alarms.test.result" msgstr "" -#: emonitor/modules/alarms/__init__.py:120 +#: emonitor/modules/alarms/__init__.py:122 msgid "alarmstate.active" msgstr "" -#: emonitor/modules/alarms/__init__.py:121 +#: emonitor/modules/alarms/__init__.py:123 msgid "alarmstate.created" msgstr "" -#: emonitor/modules/alarms/__init__.py:122 +#: emonitor/modules/alarms/__init__.py:124 msgid "alarmstate.done" msgstr "" -#: emonitor/modules/alarms/__init__.py:123 +#: emonitor/modules/alarms/__init__.py:125 #: emonitor/modules/alarms/templates/admin.alarms.html:55 msgid "alarmstate.archive" msgstr "" -#: emonitor/modules/alarms/__init__.py:124 +#: emonitor/modules/alarms/__init__.py:126 msgid "active" msgstr "" -#: emonitor/modules/alarms/__init__.py:125 +#: emonitor/modules/alarms/__init__.py:127 msgid "created" msgstr "" -#: emonitor/modules/alarms/__init__.py:126 +#: emonitor/modules/alarms/__init__.py:128 msgid "done" msgstr "" -#: emonitor/modules/alarms/__init__.py:127 +#: emonitor/modules/alarms/__init__.py:129 msgid "archive" msgstr "" -#: emonitor/modules/alarms/__init__.py:128 emonitor/modules/alarms/alarm.py:353 +#: emonitor/modules/alarms/__init__.py:130 emonitor/modules/alarms/alarm.py:353 msgid "alarms.statechangeactivated" msgstr "" -#: emonitor/modules/alarms/__init__.py:129 +#: emonitor/modules/alarms/__init__.py:131 msgid "alarms.prioshort0" msgstr "" -#: emonitor/modules/alarms/__init__.py:130 +#: emonitor/modules/alarms/__init__.py:132 msgid "alarms.prioshort1" msgstr "" -#: emonitor/modules/alarms/__init__.py:131 +#: emonitor/modules/alarms/__init__.py:133 msgid "alarms.prioshort2" msgstr "" -#: emonitor/modules/alarms/__init__.py:132 +#: emonitor/modules/alarms/__init__.py:134 msgid "alarms.carsinuse" msgstr "" -#: emonitor/modules/alarms/__init__.py:133 +#: emonitor/modules/alarms/__init__.py:135 msgid "history.autochangeState" msgstr "" -#: emonitor/modules/alarms/__init__.py:134 +#: emonitor/modules/alarms/__init__.py:136 msgid "history.message" msgstr "" -#: emonitor/modules/alarms/__init__.py:135 +#: emonitor/modules/alarms/__init__.py:137 msgid "trigger.alarm_added" msgstr "" -#: emonitor/modules/alarms/__init__.py:136 +#: emonitor/modules/alarms/__init__.py:138 msgid "trigger.alarm_changestate" msgstr "" -#: emonitor/modules/alarms/__init__.py:138 +#: emonitor/modules/alarms/__init__.py:140 msgid "trigger.alarm_added_sub" msgstr "" -#: emonitor/modules/alarms/__init__.py:139 +#: emonitor/modules/alarms/__init__.py:141 msgid "trigger.alarm_changestate_sub" msgstr "" -#: emonitor/modules/alarms/__init__.py:141 +#: emonitor/modules/alarms/__init__.py:143 #: emonitor/modules/alarms/alarmutils.py:384 msgid "alarms.print.slightleft" msgstr "" -#: emonitor/modules/alarms/__init__.py:142 +#: emonitor/modules/alarms/__init__.py:144 #: emonitor/modules/alarms/alarmutils.py:384 msgid "alarms.print.slightright" msgstr "" -#: emonitor/modules/alarms/__init__.py:143 +#: emonitor/modules/alarms/__init__.py:145 #: emonitor/modules/alarms/alarmutils.py:384 msgid "alarms.print.right" msgstr "" -#: emonitor/modules/alarms/__init__.py:144 +#: emonitor/modules/alarms/__init__.py:146 #: emonitor/modules/alarms/alarmutils.py:384 msgid "alarms.print.left" msgstr "" -#: emonitor/modules/alarms/__init__.py:145 +#: emonitor/modules/alarms/__init__.py:147 #: emonitor/modules/alarms/alarmutils.py:384 #: emonitor/modules/alarms/alarmutils.py:399 msgid "alarms.print.straight" msgstr "" -#: emonitor/modules/alarms/__init__.py:146 +#: emonitor/modules/alarms/__init__.py:148 #: emonitor/modules/alarms/alarmutils.py:384 #: emonitor/modules/alarms/alarmutils.py:399 msgid "alarms.print.exit" msgstr "" -#: emonitor/modules/alarms/__init__.py:147 +#: emonitor/modules/alarms/__init__.py:149 #: emonitor/modules/alarms/alarmutils.py:383 msgid "alarms.print.bus" msgstr "" -#: emonitor/modules/alarms/__init__.py:148 +#: emonitor/modules/alarms/__init__.py:150 #: emonitor/modules/alarms/alarmutils.py:401 msgid "alarms.print.positive" msgstr "" -#: emonitor/modules/alarms/__init__.py:149 +#: emonitor/modules/alarms/__init__.py:151 #: emonitor/modules/alarms/alarmutils.py:402 msgid "alarms.print.negative" msgstr "" -#: emonitor/modules/alarms/__init__.py:151 +#: emonitor/modules/alarms/__init__.py:153 msgid "alarms.filter.0" msgstr "" -#: emonitor/modules/alarms/__init__.py:152 +#: emonitor/modules/alarms/__init__.py:154 msgid "alarms.filter.1" msgstr "" -#: emonitor/modules/alarms/__init__.py:153 +#: emonitor/modules/alarms/__init__.py:155 msgid "alarms.filter.7" msgstr "" -#: emonitor/modules/alarms/__init__.py:154 +#: emonitor/modules/alarms/__init__.py:156 msgid "alarms.filter.31" msgstr "" -#: emonitor/modules/alarms/__init__.py:156 +#: emonitor/modules/alarms/__init__.py:158 msgid "internal" msgstr "" -#: emonitor/modules/alarms/__init__.py:157 +#: emonitor/modules/alarms/__init__.py:159 #: emonitor/modules/alarms/templates/admin.alarms.report_fields.html:2 msgid "external" msgstr "" -#: emonitor/modules/alarms/__init__.py:159 +#: emonitor/modules/alarms/__init__.py:161 msgid "AFAlerting" msgstr "" -#: emonitor/modules/alarms/__init__.py:160 +#: emonitor/modules/alarms/__init__.py:162 msgid "AFCars" msgstr "" -#: emonitor/modules/alarms/__init__.py:161 +#: emonitor/modules/alarms/__init__.py:163 msgid "AFMaterial" msgstr "" -#: emonitor/modules/alarms/__init__.py:162 +#: emonitor/modules/alarms/__init__.py:164 #: emonitor/modules/alarms/alarmfield.py:411 msgid "AFReport" msgstr "" -#: emonitor/modules/alarms/__init__.py:163 +#: emonitor/modules/alarms/__init__.py:165 msgid "AFTime" msgstr "" -#: emonitor/modules/alarms/__init__.py:164 +#: emonitor/modules/alarms/__init__.py:166 msgid "AFDamage" msgstr "" -#: emonitor/modules/alarms/__init__.py:165 +#: emonitor/modules/alarms/__init__.py:167 msgid "AFOthers" msgstr "" -#: emonitor/modules/alarms/__init__.py:166 +#: emonitor/modules/alarms/__init__.py:168 msgid "AFPersons" msgstr "" -#: emonitor/modules/alarms/__init__.py:168 +#: emonitor/modules/alarms/__init__.py:170 msgid "alarms.fields.simple" msgstr "" -#: emonitor/modules/alarms/__init__.py:169 +#: emonitor/modules/alarms/__init__.py:171 msgid "alarms.fields.extended" msgstr "" -#: emonitor/modules/alarms/__init__.py:170 +#: emonitor/modules/alarms/__init__.py:172 msgid "alarms.fields.persons.field.sum" msgstr "" -#: emonitor/modules/alarms/__init__.py:171 +#: emonitor/modules/alarms/__init__.py:173 msgid "alarms.fields.persons.field.house" msgstr "" -#: emonitor/modules/alarms/__init__.py:172 +#: emonitor/modules/alarms/__init__.py:174 msgid "alarms.fields.persons.field.pa_alarm" msgstr "" -#: emonitor/modules/alarms/__init__.py:173 +#: emonitor/modules/alarms/__init__.py:175 msgid "alarms.fields.persons.field.el" msgstr "" -#: emonitor/modules/alarms/__init__.py:174 +#: emonitor/modules/alarms/__init__.py:176 msgid "alarms.fields.persons.field.alarm" msgstr "" -#: emonitor/modules/alarms/__init__.py:175 +#: emonitor/modules/alarms/__init__.py:177 msgid "alarms.fields.persons.field.pa" msgstr "" -#: emonitor/modules/alarms/__init__.py:176 +#: emonitor/modules/alarms/__init__.py:178 msgid "alarms.fields.persons.field.pa_house" msgstr "" -#: emonitor/modules/alarms/__init__.py:177 +#: emonitor/modules/alarms/__init__.py:179 msgid "alarms.fields.persons.field.elgrade" msgstr "" -#: emonitor/modules/alarms/__init__.py:178 +#: emonitor/modules/alarms/__init__.py:180 msgid "alarms.fields.persons.field.style.simple" msgstr "" -#: emonitor/modules/alarms/__init__.py:179 +#: emonitor/modules/alarms/__init__.py:181 msgid "alarms.fields.persons.field.style.extended" msgstr "" @@ -1517,7 +1517,7 @@ msgstr "" #: emonitor/modules/alarms/templates/admin.alarms_alarm.html:27 #: emonitor/modules/alarms/templates/frontend.alarms_alarm.html:30 -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:88 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:95 msgid "alarms.noactive" msgstr "" @@ -1749,55 +1749,59 @@ msgstr "" msgid "alarm.addedalert" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:58 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:52 +msgid "alarms.errorincreation" +msgstr "" + +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:65 msgid "alarms.addtitle" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:59 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:66 msgid "alarms.autorefresh" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:60 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:67 msgid "alarms.collectivereport" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:61 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:68 msgid "alarms.archivetitle" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:62 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:69 msgid "alarms.filter.title" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:62 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:69 msgid "alarms.filter.activetitle" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:148 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:155 msgid "alarms.finishquestion" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:156 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:163 msgid "alarms.activatequestion" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:166 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:173 msgid "alarms.archivequestion" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:173 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:180 msgid "alarms.archivequestionnoselection" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:179 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:186 msgid "alarms.deletequestion" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:323 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:330 msgid "alarms.collectivereport.noreports" msgstr "" -#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:342 +#: emonitor/modules/alarms/templates/frontend.alarms_smallarea.html:349 msgid "alarms.collectivereport.error" msgstr ""