Ejemplo n.º 1
0
class AbsenceLog(db.Model):
    __tablename__ = 'absencelogs'
    __table_args__ = (db.PrimaryKeyConstraint('person_id', 'yymm', 'dd'),
                      db.ForeignKeyConstraint(['person_id', 'yymm', 'dd'], [
                          'performlogs.person_id', 'performlogs.yymm',
                          'performlogs.dd'
                      ],
                                              onupdate='CASCADE',
                                              ondelete='CASCADE'),
                      db.ForeignKeyConstraint(['person_id'], ['persons.id']),
                      db.ForeignKeyConstraint(['staff_id'], ['persons.id']),
                      db.Index('absencelogs_yymmdd', 'yymm', 'dd'), {
                          'mysql_engine': 'InnoDB'
                      })
    person_id = db.Column(db.String(36))  # 利用者ID
    yymm = db.Column(db.String(8))  # 年月
    dd = db.Column(db.Integer)  # 日
    enabled = db.Column(db.Boolean)  # 月に4回以上であればFalse
    deleted = db.Column(db.Boolean)  # 欠席加算のチェックオフになったらTrue
    contact = db.Column(db.Date)  # 連絡日
    staff_id = db.Column(db.String(36))  # 対応職員
    reason = db.Column(db.String(128))  # 欠席理由
    remarks = db.Column(db.String(128))  # 相談援助
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)
    performlog = db.relationship('PerformLog', back_populates="absencelog")

    def populate_form(self, form):
        form.populate_obj(self)

    @classmethod
    def get(cls, id, yymm, dd):
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm,
                                cls.dd == dd).first()
Ejemplo n.º 2
0
class WorkLog(db.Model, ModelMixInID, ModelMixInYYMMDD):
    __tablename__ = 'worklogs'
    __table_args__ = (db.PrimaryKeyConstraint('person_id', 'yymm', 'dd'),
                      db.ForeignKeyConstraint(['person_id'], ['persons.id']),
                      db.ForeignKeyConstraint(['company_id'],
                                              ['companies.id']),
                      db.Index('worklogs_yymmdd', 'yymm', 'person_id', 'dd'), {
                          'mysql_engine': 'InnoDB'
                      })
    person_id = db.Column(db.String(36))  # 利用者ID
    yymm = db.Column(db.String(8))  # 年月
    dd = db.Column(db.Integer)  # 日
    presented = db.Column(db.Boolean)  # 勤怠として有効ならtrue
    work_in = db.Column(db.String(8))  # 開始時間
    work_out = db.Column(db.String(8))  # 終了時間
    value = db.Column(db.Float)  # 勤務時間
    break_t = db.Column(db.Float)  # 休憩時間
    over_t = db.Column(db.Float)  # 残業時間
    absence = db.Column(db.Boolean)  # 欠勤
    late = db.Column(db.Boolean)  # 遅刻
    leave = db.Column(db.Boolean)  # 早退
    company_id = db.Column(db.String(36))  # 就労先企業
    remarks = db.Column(db.String(128))  # 備考
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)

    def __repr__(self):
        return '<WorkLog: id={0.person_id}, yymm={0.yymm}, dd={0.dd}, name={0.person.name}>'.format(
            self)

    @property
    def date(self):
        yy = int(self.yymm[:4])
        mm = int(self.yymm[4:])
        return date(yy, mm, int(self.dd))

    @property
    def person(self):
        if hasattr(self, '__person'):
            return self.__person
        self.__person = Person.query.get(self.person_id)
        return self.__person

    @property
    def url_edit(self):
        return url_for('worklogs.edit',
                       id=self.person_id,
                       yymm=self.yymm,
                       dd=self.dd)

    @property
    def url_delete(self):
        if self.presented is None:
            return url_for('worklogs.index', id=self.person_id, yymm=self.yymm)
        return url_for('worklogs.destory',
                       id=self.person_id,
                       yymm=self.yymm,
                       dd=self.dd)
Ejemplo n.º 3
0
class WorkLog(db.Model):
    __tablename__ = 'worklogs'
    __table_args__ = (db.PrimaryKeyConstraint('person_id', 'yymm', 'dd'),
                      db.ForeignKeyConstraint(['person_id'], ['persons.id']),
                      db.Index('worklogs_yymmdd', 'yymm', 'person_id', 'dd'), {
                          'mysql_engine': 'InnoDB'
                      })
    person_id = db.Column(db.String(36))  # 利用者ID
    yymm = db.Column(db.String(8))  # 年月
    dd = db.Column(db.Integer)  # 日
    presented = db.Column(db.Boolean)  # 勤怠として有効ならtrue
    work_in = db.Column(db.String(8))  # 開始時間
    work_out = db.Column(db.String(8))  # 終了時間
    value = db.Column(db.Float)  # 勤務時間
    break_t = db.Column(db.Float)  # 休憩時間
    over_t = db.Column(db.Float)  # 残業時間
    absence = db.Column(db.Boolean)  # 欠勤
    late = db.Column(db.Boolean)  # 遅刻
    leave = db.Column(db.Boolean)  # 早退
    remarks = db.Column(db.String(128))  # 備考
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)

    def populate_form(self, form):
        form.populate_obj(self)
        if (self.work_in is not None) and (len(self.work_in) == 0):
            self.work_in == None
        if (self.work_out is not None) and (len(self.work_out) == 0):
            self.work_out == None
        if (self.remarks is not None) and (len(self.remarks) == 0):
            self.remarks == None
        if bool(self.work_in) or bool(self.work_out) or (self.value
                                                         is not None):
            self.presented = True
        else:
            self.presented = False
        worklog = WorkLog.get(self.person_id, self.yymm, self.dd)
        if (worklog is not None) and (worklog.value is not None):
            self.presented = True

    @classmethod
    def get(cls, id, yymm, dd):
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm,
                                cls.dd == dd).first()

    @classmethod
    def get_date(cls, id, yymmdd):
        yymm = yymmdd.strftime('%Y%m')
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm,
                                cls.dd == yymmdd.day).first()

    @classmethod
    def get_yymm(cls, id, yymm):
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm).all()
Ejemplo n.º 4
0
class AbsenceLog(db.Model, ModelMixInID):
    __tablename__ = 'absencelogs'
    __table_args__ = (db.PrimaryKeyConstraint('person_id', 'yymm', 'dd'),
                      db.ForeignKeyConstraint(['person_id', 'yymm', 'dd'], [
                          'performlogs.person_id', 'performlogs.yymm',
                          'performlogs.dd'
                      ],
                                              onupdate='CASCADE',
                                              ondelete='CASCADE'),
                      db.ForeignKeyConstraint(['person_id'], ['persons.id']),
                      db.ForeignKeyConstraint(['staff_id'], ['persons.id']),
                      db.Index('absencelogs_yymmdd', 'yymm', 'dd'), {
                          'mysql_engine': 'InnoDB'
                      })
    person_id = db.Column(db.String(36))  # 利用者ID
    yymm = db.Column(db.String(8))  # 年月
    dd = db.Column(db.Integer)  # 日
    contact = db.Column(db.Date)  # 連絡日
    staff_id = db.Column(db.String(36))  # 対応職員
    reason = db.Column(db.String(128))  # 欠席理由
    remarks = db.Column(db.String(128))  # 相談援助
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)

    @property
    def date(self):
        yy = int(self.yymm[:4])
        mm = int(self.yymm[4:])
        return date(yy, mm, self.dd)

    @property
    def person(self):
        if hasattr(self, '__person'):
            return self.__person
        self.__person = Person.query.get(self.person_id)
        return self.__person

    @property
    def staff(self):
        if hasattr(self, '__staff'):
            return self.__staff
        self.__staff = Person.query.filter(Person.id == self.staff_id).first()
        return self.__staff

    @property
    def date(self):
        yy = int(self.yymm[:4])
        mm = int(self.yymm[4:])
        return date(yy, mm, int(self.dd))
Ejemplo n.º 5
0
class PerformLog(db.Model, ModelMixInID, ModelMixInYYMMDD):
    __tablename__ = 'performlogs'
    __table_args__ = (db.PrimaryKeyConstraint('person_id', 'yymm', 'dd'),
                      db.ForeignKeyConstraint(['person_id'], ['persons.id']),
                      db.ForeignKeyConstraint(['company_id'],
                                              ['companies.id']),
                      db.Index('performlogs_yymmdd', 'yymm', 'person_id',
                               'dd'), {
                                   'mysql_engine': 'InnoDB'
                               })
    person_id = db.Column(db.String(36))  # 利用者ID
    yymm = db.Column(db.String(8))  # 年月
    dd = db.Column(db.Integer)  # 日
    enabled = db.Column(db.Boolean)  # 実績票出力対象はTrue
    presented = db.Column(db.Boolean)  # 月の日数-8を超えたらFalse
    absence = db.Column(db.Boolean, nullable=False)  # 欠席
    absence_add = db.Column(db.Boolean, nullable=False)  # 欠席加算対象
    work_in = db.Column(db.String(8))  # 開始時間
    work_out = db.Column(db.String(8))  # 終了時間
    pickup_in = db.Column(db.Boolean)  # 送迎加算(往路)
    pickup_out = db.Column(db.Boolean)  # 送迎加算(復路)
    visit = db.Column(db.Integer)  # 訪問支援特別加算(時間数)
    meal = db.Column(db.Boolean)  # 食事提供加算
    medical = db.Column(db.Integer)  # 医療連携体制加算
    experience = db.Column(db.Integer)  # 体験利用支援加算
    outside = db.Column(db.Boolean)  # 施設外支援
    company_id = db.Column(db.String(36))  # 就労先企業
    remarks = db.Column(db.String(128))  # 備考
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)

    def __repr__(self):
        return '<PerformLog: id={0.person_id}, yymm={0.yymm}, dd={0.dd}, name={0.person.name}>'.format(
            self)

    @property
    def date(self):
        yy = int(self.yymm[:4])
        mm = int(self.yymm[4:])
        return date(yy, mm, int(self.dd))

    @property
    def person(self):
        if hasattr(self, '__person'):
            return self.__person
        self.__person = Person.query.get(self.person_id)
        return self.__person

    @property
    def absencelog(self):
        if hasattr(self, '__absencelog'):
            return self.__absencelog
        self.__absencelog = AbsenceLog.query.get(
            (self.person.id, self.yymm, self.dd))

    @property
    def company(self):
        if hasattr(self, '__company'):
            return self.__company
        self.__company = Company.query.get(self.company_id) if bool(
            self.company_id) else None
        return self.__company

    @property
    def url_edit(self):
        return url_for('performlogs.edit',
                       id=self.person_id,
                       yymm=self.yymm,
                       dd=self.dd)

    @property
    def url_delete(self):
        if self.enabled is None:
            return url_for('performlogs.index',
                           id=self.person_id,
                           yymm=self.yymm)
        return url_for('performlogs.destroy',
                       id=self.person_id,
                       yymm=self.yymm,
                       dd=self.dd)
Ejemplo n.º 6
0
class WorkRec(db.Model):
    __tablename__ = 'workrecs'
    __table_args__ = ((db.UniqueConstraint('yymm',
                                           'dd',
                                           'person_id',
                                           name='idx_yymm_dd_id')),
                      (db.Index('yymm', 'enabled')), {
                          'mysql_engine': 'InnoDB'
                      })
    person_id = db.Column(db.String(36),
                          db.ForeignKey('persons.id'),
                          primary_key=True)
    yymm = db.Column(db.String(8), primary_key=True)
    dd = db.Column(db.Integer, primary_key=True)
    situation = db.Column(db.String(8))
    work_in = db.Column(db.String(5))
    work_out = db.Column(db.String(5))
    value = db.Column(db.Float)
    break_t = db.Column(db.Float)
    over_t = db.Column(db.Float)
    reason = db.Column(db.String(128))
    enabled = db.Column(db.Boolean, nullable=True)
    export = db.Column(db.Boolean)
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)

    @classmethod
    def get(cls, id, yymm, dd):
        return cls.query.filter_by(person_id=id, yymm=yymm, dd=dd).first()

    @classmethod
    def get_date(cls, id, yymmdd):
        yymm = yymmdd.strftime('%Y%m')
        return cls.query.filter_by(person_id=id, yymm=yymm,
                                   dd=yymmdd.day).first()

    @classmethod
    def get_yymm(cls, id, yymm):
        return cls.query.filter_by(person_id=id, yymm=yymm).all()

    def populate_form(self, form):
        form.populate_obj(self)
        if (self.situation is not None) and (len(self.situation) == 0):
            self.situation = None
        if (self.work_in is not None) and (len(self.work_in) == 0):
            self.work_in = None
        if (self.work_out is not None) and (len(self.work_out) == 0):
            self.work_out = None
        if (self.value is not None) and (len(self.value) == 0):
            self.value = None
        if (self.break_t is not None) and (len(self.break_t) == 0):
            self.break_t = None
        if (self.over_t is not None) and (len(self.over_t) == 0):
            self.over_t = None
        if (self.reason is not None) and (len(self.reason) == 0):
            self.reason = None

    def __repr__(self):
        return '<WorkRec id={id},yymm={yymm},dd={dd},in={work_in},out={work_out},val={val}>'.format(
            id=self.person_id,
            yymm=self.yymm,
            dd=self.dd,
            work_in=self.work_in,
            work_out=self.work_out,
            val=self.value)
Ejemplo n.º 7
0
class PerformLog(db.Model):
    __tablename__ = 'performlogs'
    __table_args__ = (db.PrimaryKeyConstraint('person_id', 'yymm', 'dd'),
                      db.ForeignKeyConstraint(['person_id'], ['persons.id']),
                      db.Index('performlogs_yymmdd', 'yymm', 'person_id',
                               'dd'), {
                                   'mysql_engine': 'InnoDB'
                               })
    person_id = db.Column(db.String(36))  # 利用者ID
    yymm = db.Column(db.String(8))  # 年月
    dd = db.Column(db.Integer)  # 日
    enabled = db.Column(db.Boolean)  # 実績票出力対象はTrue
    presented = db.Column(db.Boolean)  # 月の日数-8を超えたらFalse
    absence = db.Column(db.Boolean, nullable=False)  # 欠席
    absence_add = db.Column(db.Boolean, nullable=False)  # 欠席加算対象
    work_in = db.Column(db.String(8))  # 開始時間
    work_out = db.Column(db.String(8))  # 終了時間
    pickup_in = db.Column(db.Boolean)  # 送迎加算(往路)
    pickup_out = db.Column(db.Boolean)  # 送迎加算(復路)
    visit = db.Column(db.Integer)  # 訪問支援特別加算(時間数)
    meal = db.Column(db.Boolean)  # 食事提供加算
    medical = db.Column(db.Integer)  # 医療連携体制加算
    experience = db.Column(db.Integer)  # 体験利用支援加算
    outside = db.Column(db.Boolean)  # 施設外支援
    outemp = db.Column(db.Boolean)  # 施設外就労
    remarks = db.Column(db.String(128))  # 備考
    create_at = db.Column(db.DateTime, default=_get_now)
    update_at = db.Column(db.DateTime, onupdate=_get_now)
    absencelog = db.relationship('AbsenceLog',
                                 uselist=False,
                                 back_populates="performlog")

    def populate_form(self, form):
        form.populate_obj(self)
        if not bool(self.work_in):
            self.work_in == None
        if not bool(self.work_out):
            self.work_out == None
        if not bool(self.remarks):
            self.remarks == None

    def validate(self):
        if self.absence:
            if bool(self.work_in) or bool(self.work_out):
                raise ValidationError('開始・終了時刻が入っているため、欠席にはできません')
        if self.absence_add:
            if not self.absence:
                raise ValidationError('欠席にチェックしてください')

    def sync_to_worklog(self, worklog):
        if worklog is None:
            worklog = WorkLog(person_id=self.person_id,
                              yymm=self.yymm,
                              dd=self.dd)
        worklog.absence = self.absence
        worklog.work_in = self.work_in
        worklog.work_out = self.work_out
        if worklog.absence:
            worklog.presented = False
        elif bool(worklog.work_in) or bool(worklog.work_out) or (worklog.value
                                                                 is not None):
            worklog.presented = True
        else:
            worklog.presented = False
        db.session.add(worklog)

    def sync_from_worklog(self, workrec):
        # ICカードから入力なので欠席は取消す
        self.absence = False
        self.absence_add = False
        self.work_in = workrec.work_in
        self.work_out = workrec.work_out
        if bool(self.absencelog):
            self.absencelog.deleted = True

    @classmethod
    def get(cls, id, yymm, dd):
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm,
                                cls.dd == dd).first()

    @classmethod
    def get_date(cls, id, yymmdd):
        yymm = yymmdd.strftime('%Y%m')
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm,
                                cls.dd == yymmdd.day).first()

    @classmethod
    def get_yymm(cls, id, yymm):
        return cls.query.filter(cls.person_id == id, cls.yymm == yymm).all()