Esempio n. 1
0
def create():
    form = TimeRuleForm()
    if form.validate_on_submit():
        timerule = TimeRule()
        timerule.populate_form(form)
        db.session.add(timerule)
        try:
            db.session.commit()
            flash('タイムテーブルの追加ができました', 'success')
            return redirect(url_for('timerules.index'))
        except Exception as e:
            db.session.rollback()
            flash('タイムテーブル追加時にエラーが発生しました"{}"'.format(e), 'danger')
    return render_template('timerules/edit.pug', form=form)
Esempio n. 2
0
def add_timerule(caption, rules):
    timerule = TimeRule.query.filter(TimeRule.caption == caption).first()
    if timerule is not None:
        return
    print('タイムルール"{}"初期化'.format(caption))
    timerule = TimeRule(caption=caption, rules=rules)
    db.session.add(timerule)
    db.session.commit()
Esempio n. 3
0
def destroy(id):
    item = TimeRule.get_or_404(id)
    db.session.delete(item)
    try:
        db.session.commit()
        flash('タイムテーブルの削除ができました')
    except Exception as e:
        db.session.rollback()
        flash('タイムテーブル削除時にエラーが発生しました {}'.format(e), 'danger')
        app.logger.exception(e)
    return redirect(url_for('timerules.index'))
Esempio n. 4
0
def edit(id):
    item = TimeRule.get_or_404(id)
    form = TimeRuleForm(obj=item)
    if form.validate_on_submit():
        form.populate_obj(item)
        db.session.add(item)
        try:
            db.session.commit()
            flash('タイムテーブルの更新ができました', 'success')
            return redirect(url_for('timerules.index'))
        except Exception as e:
            db.session.rollback()
            flash('タイムテーブル更新時にエラーが出ました {}'.format(e), 'danger')
            app.logger.exception(e)
    return render_template('timerules/edit.pug', id=id, form=form)
Esempio n. 5
0
 def run(self):
     print('Initialize Start')
     print('Initialize Administrator')
     user = User.query.filter(User.userid == 'admin').first()
     if user is None:
         user = User(userid='admin')
         user.set_password('password')
         db.session.add(user)
     print('Initialize TimeRule Table')
     timerule = TimeRule.query.filter(TimeRule.caption == '00:標準').first()
     if timerule is None:
         timerule = TimeRule(caption="00:標準", rules=default_rule)
         db.session.add(timerule)
     timerule = TimeRule.query.filter(TimeRule.caption == '10:職員').first()
     if timerule is None:
         timerule = TimeRule(caption="10:職員", rules=default_rule_staff)
     db.session.add(timerule)
     try:
         db.session.commit()
         print('Initialize End')
     except Exception as e:
         db.session.rollback()
         print('Initialize Error {}'.format(e))
         print_exc()
Esempio n. 6
0
def edit(id):
    timerule = TimeRule.get(id)
    if timerule is None:
        abort(404)
    form = TimeRuleForm(obj=timerule)
    if form.validate_on_submit():
        timerule.populate_form(form)
        db.session.add(timerule)
        try:
            db.session.commit()
            flash('タイムテーブルの更新ができました', 'success')
            return redirect(url_for('timerules.index'))
        except Exception as e:
            db.session.rollback()
            flash('タイムテーブル更新時にエラーが発生しました"{}"'.format(e), 'danger')
    return render_template('timerules/edit.pug', form=form)
Esempio n. 7
0
def index():
    persons = Person.query.filter(Person.staff == True).order_by(Person.name.asc()).all()
    items = []
    for person in persons:
        timerule = TimeRule.get(person.timerule_id)
        item = dict(
            id=person.id,
            enabled=person.enabled,
            name=person.get_display(),
            idm=person.idm,
            timerule=timerule.caption if timerule is not None else '',
            create_at=person.create_at.strftime('%Y/%m/%d %H:%M') if person.create_at is not None else '',
            update_at=person.update_at.strftime('%Y/%m/%d %H:%M') if person.update_at is not None else ''
        )
        items.append(item)
    return render_template('staffs/index.pug', items=items)
Esempio n. 8
0
def destroy(id):
    timerule = TimeRule.get(id)
    if timerule is None:
        abort(404)
    q = db.session.query(func.count(Person.id)).filter(
        Person.timerule_id == id).group_by(Person.timerule_id).first()
    if q is not None:
        flash('タイムテーブルを使用しているメンバーが存在しているため、削除できません', 'danger')
        return redirect(url_for('timerules.index'))
    db.session.delete(timerule)
    try:
        db.session.commit()
        flash('タイムテーブルの削除ができました', 'success')
    except Exception as e:
        db.session.rollback()
        flash('タイムテーブル削除時にエラーが発生しました "{}"'.format(e), 'danger')
    return redirect(url_for('timerules.index'))
Esempio n. 9
0
def update_worklog_value(id, yymm, dd=None):
    app.logger.info(
        'Update WorkLog value from Time-Table. id={} yymm={} dd={}'.format(
            id, yymm, dd))
    person = Person.get(id)
    if person is None:
        return
    if person.timerule_id is None:
        return
    timerule = TimeRule.get(person.timerule_id)
    if timerule is None:
        return
    if dd is None:
        dds = range(1, 32)
    else:
        dds = (dd, )
    for d in dds:
        worklog = WorkLog.get(id, yymm, d)
        if worklog is None:
            continue
        if worklog.value is not None:
            continue
        app.logger.info(
            'Updating WorkLog value from Time-Table. id={} yymm={} dd={}'.
            format(id, yymm, d))
        if not bool(worklog.work_in):
            continue
        if not bool(worklog.work_out):
            continue
        rules = json.loads(timerule.rules)
        work_in = rules['core']['start']
        work_out = rules['core']['end']
        for i in rules['times']:
            if (i['in']) and (i['start'] <= worklog.work_in) and (
                    worklog.work_in < i['end']):
                work_in = i['value']
                break
        for i in rules['times']:
            if (i['out']) and (i['start'] <= worklog.work_out) and (
                    worklog.work_out < i['end']):
                work_out = i['value']
                break
        value = work_out - work_in
        break_t = 0.0
        if 'break' in rules:
            for i in rules['break']:
                if (work_in <= i['start']) and (work_out >= i['end']):
                    break_t = break_t + i['value']
        if value < 0:
            value = 0
        elif ('max' in rules) and (value > rules['max']):
            value = rules['max']
        worklog.value = value - break_t
        worklog.break_t = break_t
        worklog.over_t = worklog.value - rules['core']['value']
        if worklog.over_t < 0:
            worklog.over_t = 0
        worklog.late = work_in > rules['core']['start']
        worklog.leave = work_out < rules['core']['end']
        db.session.add(worklog)
    try:
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        app.logger.error(e)
Esempio n. 10
0
 def __init__(self, id):
     self.item = TimeRule.get(id)