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)
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()
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'))
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)
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()
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)
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)
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'))
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)
def __init__(self, id): self.item = TimeRule.get(id)