rohaniのブログ

ゆるっと自然言語処理奴。ときどき工作系バイト。

調整さんの候補日程を入力するのが面倒なのでPythonにやってもらうことにした

調整さんの候補日程の入力フォーマット

調整さんは、とても簡単にスケジュール調整ができるツールだと思う。

とっても便利だし、簡単だと思う、 けど、、面倒くさがりなひとには、それでも面倒くさい。

f:id:ojho0318:20190417075038p:plain

調整さんを毎月のシフト希望調査に使う場合

「毎月のシフト希望調査」という用途から、入力すべき候補日程は簡単な規則で表すことができる。 私の場合は、以下の要件になった。

  • 火水金は10:00-12:00, 13:00-16:30, 16:00-19:00の3枠
  • 土は9:00-12:00, 13:00-17:00の2枠
  • 月木日と祝日は休業日

調整さんのコメントの入力すら面倒になってきた

調整さんは親切なので、コメントの入力もとっても簡単にできる。 けど面倒くさがりなひとには、それでも面倒くさ(略

f:id:ojho0318:20190417075644p:plain

コメント欄に書くことも大体決まっているので、これも自動生成することにした。

スクリプト

import jpholiday
import datetime

opened = [x for x in '火水金土']
weekname = [x for x in '月火水木金土日']
shift_weekday = ['10:00〜', '13:00〜', '16:00〜']
shift_end_weekday = ['12:00', '16:30', '19:00']
shift_weekend = ['9:00〜', '13:00〜']
shift_end_weekend = ['12:00', '17:00']


def makeshift(dt):
    if (weekname[dt.weekday()] in opened) and (jpholiday.is_holiday(dt) is False):
        datestr = dt.strftime('{}/{}({}) '.format(dt.month,
                                                  dt.day,
                                                  weekname[dt.weekday()]))
        if dt.weekday() < 5:
            return '\n'.join([datestr + x for x in shift_weekday])
        else:
            return '\n'.join([datestr + x for x in shift_weekend])
    else:
        return ''


def makedescription():
    s = '○はOK、△はなるべくいれないでほしい、✗は無理。\n'
    s += '平日のシフト時間は'
    s += '/ '.join([x+y for (x, y) in zip(shift_weekday, shift_end_weekday)])
    s += '、休日のシフト時間は'
    s += '/ '.join([x+y for (x, y) in zip(shift_weekend, shift_end_weekend)])
    s += '\n'
    s += '注意事項や調整注文等はコメント欄に必ず書いてください。'
    return s


if __name__ == '__main__':
    year = 2019
    month = 5
    enddate = 31
    filename = './data/%s月.txt' % month
    # 候補日程の作成
    liststr = ''
    for date in range(1, enddate+1):
        line = makeshift(datetime.date(year, month, date))
        if len(line) > 0:
            liststr += line + '\n'
    # 書き出し
    with open(filename, 'w') as f:
        f.write(makedescription() + '\n')
        f.write(liststr)

祝日判定にはjpholidayを使わせていただいた

github.com

pip install jpholidayできる。

datetime.date型データを投げると祝日かどうかを判定してくれるスグレモノ。 他にも色々できるみたいです。

使い方

main内の以下の変数を埋め、python3で実行するとファイルが生成される

  • year:シフト生成したい年
  • month:シフト生成したい月
  • enddate:シフト生成したい月の最終日(を自動取得してくれないところはダサいので直したい)
  • filename:生成した候補日程とコメントを書き出すファイル名

感想

これでシフト調整の作成も一瞬だね!