Esempio n. 1
0
def getAdminContent(self, **params):
    module = request.view_args['module'].split('/')

    if len(module) < 2:
        module.append(u'1')

    if len(module) > 2 and module[2] == 'upload':  # upload persons
        params.update({'': int(module[1]), 'depid': module[1]})
        return render_template('admin.persons.upload.html', **params)

    if request.method == 'POST':
        if request.form.get('action') == 'createperson':  # add person
            params.update({
                'person':
                Person('', '', '', '', '', '', False, datetime.now(), '',
                       int(module[1])),
                'settings':
                Settings.get('persons.settings')
            })
            return render_template('admin.persons_edit.html', **params)

        elif request.form.get('action').startswith(
                'editperson_'):  # edit person
            params.update({
                'person':
                Person.getPersons(
                    id=request.form.get('action').split('_')[-1]),
                'settings':
                Settings.get('persons.settings')
            })
            return render_template('admin.persons_edit.html', **params)

        elif request.form.get('action') == 'updateperson':  # save person
            if request.form.get('person_id') != 'None':
                person = Person.getPersons(id=request.form.get('person_id'))
            else:
                person = Person('', '', '', '', '', '', False, datetime.now(),
                                '', int(module[1]))
                db.session.add(person)

            person.firstname = request.form.get('firstname')
            person.lastname = request.form.get('lastname')
            person.salutation = request.form.get('salutation')
            person.grade = request.form.get('grade')
            person._dept = int(request.form.get('dept'))
            person.position = request.form.get('position')
            person.active = 'active' in request.form.keys()
            try:
                person.birthdate = datetime.strptime(
                    '{} 00:00:00'.format(request.form.get('birthdate')),
                    "%d.%m.%Y %H:%M:%S")
            except ValueError:
                pass
            person.identifier = request.form.get('identifier')
            person.remark = request.form.get('remark')
            _additional = {}
            for field in Settings.get('persons.settings',
                                      {}).get('additional', []):
                if field.split('=')[0] in request.form.keys(
                ) and request.form.get(field.split('=')[0]).strip() != '':
                    _additional[field.split('=')[0]] = request.form.get(
                        field.split('=')[0])
            person._options = yaml.safe_dump(_additional, encoding='utf-8')
            db.session.commit()

        elif request.form.get('action').startswith('deleteperson_'):
            db.session.delete(
                Person.getPersons(
                    id=request.form.get('action').split('_')[-1]))
            db.session.commit()

        elif request.form.get('action') == 'updategrades':
            grades = request.form.getlist('grade')
            while grades[-1] == grades[-2] == u"":  # remove last empty entries
                grades = grades[:-2]
            _settings = Settings.get('persons.settings', {})
            if 'positions' not in _settings.keys():
                _settings['positions'] = []
            _settings['grades'] = zip(*[grades[i::2] for i in range(2)])
            Settings.set('persons.settings', _settings)
            db.session.commit()

        elif request.form.get('action') == 'updatepositions':
            _settings = Settings.get('persons.settings', {})
            if 'grades' not in _settings.keys():
                _settings['grades'] = []
            _settings['positions'] = request.form.get('positions').replace(
                '\r', '').split('\n')
            Settings.set('persons.settings', _settings)
            db.session.commit()

        elif request.form.get('action') == 'updateadditional':
            _settings = Settings.get('persons.settings', {})
            if 'additional' not in _settings.keys():
                _settings['additional'] = []
            _settings['additional'] = request.form.get('additional').replace(
                '\r', '').split('\n')
            Settings.set('persons.settings', _settings)
            db.session.commit()

    if int(module[1]) == 0:
        params.update({'settings': Settings.get('persons.settings')})
        return render_template("admin.persons.settings.html", **params)
    persons = Person.getPersons(dept=int(module[1]))
    chars = {}
    for p in persons:
        chars[p.fullname[0].upper()] = 0
    params.update({
        'persons': persons,
        'chars': sorted(chars),
        'depid': module[1]
    })
    return render_template("admin.persons.html", **params)
Esempio n. 2
0
def getAdminData(self):
    if request.args.get('action') == '':
        pass

    elif request.args.get('action') == 'upload':
        if request.files:
            uploadfile = request.files['uploadfile']
            filename = werkzeug.secure_filename(uploadfile.filename)
            fname = os.path.join(current_app.config.get('PATH_TMP'), filename)
            uploadfile.save(fname)
            xlsfile = XLSFile(fname)
            uploadfiles[uploadfile.filename] = xlsfile
            return render_template(
                'admin.persons.upload2.html',
                sheets=uploadfiles[uploadfile.filename].getSheets())

    elif request.args.get('action') == 'upload_sheet':  # sheet selector
        definitionfile = uploadfiles[request.args.get('filename')]
        return render_template('admin.persons.upload3.html',
                               cols=definitionfile.getCols(
                                   request.args.get('sheetname')))

    elif request.args.get('action') == 'testimport':  # build data for preview
        col_definition = dict(zip(request.form.keys(), request.form.values()))
        col_definition.update({
            'sheet': request.args.get('sheetname'),
            'department': request.args.get('department')
        })

        deffile = uploadfiles[request.args.get('filename')]
        vals = deffile.getValues(col_definition)
        return render_template('admin.persons.uploadpreview.html', vals=vals)

    elif request.args.get(
            'action') == 'doimport':  # do import and store values
        col_definition = dict(zip(request.form.keys(), request.form.values()))
        col_definition.update({
            'sheet': request.args.get('sheetname'),
            'department': request.args.get('department')
        })

        deffile = uploadfiles[request.args.get('filename')]

        vals = deffile.getValues(col_definition)
        states = []

        if request.form.get('add_new'):  # add new keys ( item state=-1)
            states.append('-1')

        if request.form.get(
                'add_update'):  # update existing keys (item state=1)
            states.append('1')

        for key in vals['persons']:  # item list
            if key['state'] in states:  # import only with correct state
                if key['state'] == '-1':  # add key
                    try:
                        key['birthdate'] = datetime.strptime(
                            key['birthdate'], '%d.%m.%Y')
                    except:
                        pass
                    key['active'] = key['active'] == 'Aktiv'
                    p = Person(key['firstname'], key['lastname'],
                               key['salutation'], key['grade'],
                               key['position'], key['identifier'],
                               key['active'], key['birthdate'], key['remark'],
                               int(request.args.get('department')))
                    db.session.add(p)
                    db.session.commit()
                    key['state'] = '0'

                elif key['state'] == '1':  # update key
                    p = Person.getPersons(id=key['dbid'])
                    if p:
                        p.firstname = key['firstname']
                        p.lastname = key['lastname']
                        p.grade = key['grade']
                        p.position = key['position']
                        db.session.commit()
        return ""