iPhone ショートカットで勤怠管理

どうも
最近ニート卒業してIT派遣として働き始めたんですが

**勤怠管理をEXCELで！！？**

びっくらこいた、毎月の勤怠をExcelで提出するといった作業が必要で、自分で出勤・退勤時間を記録する必要があったのでどうせならスマホで打刻できるようにしようと考えました。
時給制でもあるので日額計算もできるようにしています。

## できたもの
ショートカットをロック画面に追加して実行できるようにしています。
![example.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/30cd8385-e553-2d8c-7f6c-16ec0b7d9729.gif)
(ちょっと出勤時間をいじってます）
![スクリーンショット 2024-03-30 22.09.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/216fdfb1-6a11-8ccb-cfab-89c2d0b2d9e9.png)


## 構成
とりあえずiPhoneのショートカットで作ろうと考えました。
ただ自分のiPhoneのスペックが低いのかアクションが多くなってくると重くなってくるし、画面が小さいので条件分岐をつけたりすると頭がバグりそうになってくるのでところどころ処理を分割することにしました。
（それでも辛かったので結局macで作成しました)


構成としては以下です。

![IMG_0569.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/b18f125f-af32-ef56-5bac-5d346c5e9da6.jpeg)
### アプリ
* 出退勤  
    * ここが打刻処理の入り口、ホームに追加したりして起動するショートカット
* 勤怠表取得
    * 当月の打刻をまとめてcsvとして出力するショートカット

### 関数群
* 休憩時間
    * 休憩時間を設定するショートカットで、基本読み取り
* 分給
    * 正確な日額の計算をするために時給を設定して、それを分給に変換して返すショートカット
* 日額計算
    * 出勤と退勤の時間差を受けとって休憩時間を反映し分給で計算
    * 通知で表示する用の実働時間と日額をテキストで返す
* 各月prefix
    * 実行時の月を二桁で返す(2月なら02を返す)
    * 勤務表データを作る際に検索用でカレンダーのタイトルにつけるため

## 実行内容
### 出退勤
1. **[[各月prefix](#各月prefix)]** を実行して取得(以下変数 ${prefix} )
1. 出勤時にタイトルが ${prefix}出勤  (例. 02出勤) で開始と終了日時を実行時で追加する
1. 再度実行時に予定があればタイトルを ${prefix}出勤/退勤 にして、終了日時を実行日時で変更
    1. 開始と終了の時間差を取得して **[[日額計算](#日額計算)]** に渡して実行
    1. 実働時間と日額のテキストが返ってくるのでそれを通知として表示
1. 実行時に ${prefix}出勤/退勤 のタイトルの予定があれば　「すでに登録されています」を通知

![スクリーンショット 2024-03-30 21.08.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/61d4222f-7b37-7589-500b-b1b8117e36c3.png)
![スクリーンショット 2024-03-30 21.08.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/9484127d-279e-32d5-76d2-ad0a179455ab.png)
![スクリーンショット 2024-03-30 21.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/c80bb487-bf5f-2d4b-a968-a67cdec05887.png)

### 勤務表取得
1. **[[各月prefix](#各月prefix)]** を実行して取得(以下変数 ${prefix} )
1. タイトルが ${prefix}出勤/退勤の予定を過去一年内から取得
1. 取得した予定を古い順に並べてcsvに保存

![スクリーンショット 2024-03-30 21.18.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/40a186bd-61c9-7ea3-c29a-92545be7599b.png)

### 休憩時間
1. 時間を設定してそれを分に変換して返す

![スクリーンショット 2024-03-30 21.24.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/4af6ce31-45a5-4be0-6f4b-87a97943d48f.png)

### 分給
1. 時給を入れてそれを分給に変換して返す

![スクリーンショット 2024-03-30 21.26.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/031a432c-bb5f-49e4-0840-56a3e6fdea6d.png)

### 日額計算
1. 出勤と退勤の差を受け取る
1. **[[休憩時間](#休憩時間)]** を実行して取得
1. 出勤と退勤の差から休憩を引いて実働時間を計算
1. **[[分給](#分給)]** を実行して取得
1. 上で計算した実働時間とかけて日額の計算
1. 返す値をテキストでまとめる

![スクリーンショット 2024-03-30 21.30.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/7a45addb-b5cf-32a5-8a38-8c25c8a08d32.png)

### 各月prefix
1. 実行時の日付をフォーマットして二桁の月 （02, 11, とか）を返す
![スクリーンショット 2024-03-30 21.32.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/5fe759aa-f709-2bcf-f098-f35f852b200e.png)


## ちょっとしたこと
* 基本打刻時の秒数は無視だと思うので出勤時と退勤時の時間のフォーマットから ss を削除してます
* csv保存時は作成した時強制的に .txt ファイルになってしまったので作成後に .csv に変更しています

## あとがき
結構関数ぽく作れるので面白かったです
帰りの電車で作ってたら熱中し過ぎて降りる駅を過ぎてしまい歩く羽目になりました()