ジャーナルクラブ,レクチャー割り当て解説 その3(終了)

8.辞める人はさよならレクチャーを辞める日の数週間前に割り当てて,以後は当たらないようにする
9.今から2ヶ月後の木金土を割り当てる
10.ジャーナルクラブもレクチャーも割当日に休みではなく,やったことない人>やったのが一番古い人の順で割り当てる
11.割り当てる人がいなかったらエラーをteamsに送るようにして気づくようにしておく

残りはこれだけ.


辞める人にさよならレクチャーを割り当てる

さよならレクチャー割り当てに入っている.

流れは
1.すでに割り当てられている人をピックアップ
2.割り当てるのは3ヶ月以上回っている人とする
3.割り当てる
4.割り当てられなかったらリマインドするようにしておく
5.割り当てた日から後ろの日にはあらゆるものを割り当てないように0を入力する

すでにやった人に再度割り当てないように,さよならレクチャー割り当てられているかをチェック.
updateGoodbyeDatesToSheetというコード.
レクチャー実績シートから,"さよなら"で検索.
検索して取得した日付を取得し,名前は正規化(空白を消去して名前の書式を統一すること)して検索し,一致するところにさよならレクチャーの日付を入力.
これで,さよならレクチャー割り当てられている人の実績が割り当て表に表示される.

こんな感じで6/20に一人だけ割り当てられている.

で,実際に割り当てる.割り当ては簡単.
ByeByeLectureAssignment
というコード.

ジャーナルクラブや他のレクチャーより優先されるため,問答無用で割り当ててしまえばいい.
3月末は有給消費とか,引っ越しとかいろいろあり得るので範囲は広めで7週間前から1週間前に割り当てる.それ以外は2週間前から7週間前とした.
なお,割り当て番号は100とした.ジャーナルクラブは10, レクチャーは1にしている.

割り当てできなかったら,さよならレクチャーなくなるので,リマインドするようにしている.とは言え,毎週割り当ては3つなので,辞める時期が被っている人が5人とかだと,割り当てられない週がでてくるとは思うが,チェックのためにちょうどいいかなと.

で,割り当てたらそれ以降の空欄に全部0を入れて,ジャーナルクラブなどが割り当てられないようにしている.

2ヶ月後の木金土を割り当てる

ジャーナルクラブをランダムに割当するとこになったので,これを割り当てる.
inputJCorLC
というコード.

2ヶ月後の木金土がGN列から始まっているため,そこから3日間だけ検討.
祝日でない場合にランダムにJCを割り当て,残りをLCに割り当て3行目に入力しているだけ.

で,あとはジャーナルクラブとレクチャーをただ割り当てている.優先順位は
1.0ではない(0は無理な日)
2.やったことがない人(実績に日付が入っていない人)
3.全員がやっていたら,やったのが一番昔の人

ただそれだけ,機械的に決まるようにしている.Chat GPTに聞けばわりと簡単にコード書いてくれる.

最後にその結果をカレンダーに送る

そのまんま.レクチャーなら"朝担当 ◯◯",ジャーナルクラブなら"抄読会 ◯◯"と書いてもらうだけ.ただし,これをやっちゃうと消すことはできない.頑張ればできるけれど,失敗しないようにここまで作成している.

最後のどれでもないレクチャー検出

これは,後日追加になったもの.薬剤部のイベントなどがあったときに,そこに割り当てをしないようにしたいということが生じた.
なので,"朝担当 薬剤部レクチャー"などといれてもらって,"朝担当"と入っているのに,名前が入っていない場合,そこは祝日シートに加えるというコード.これによりなんらかのイベント(他にも予演会など)を割り当てできないようにしている.

ここで,最終コードをざっと見直す.

function finalcode() {
  fetchJapaneseHolidaysAndSaveToSheet();//祝日取得,4月第1週,年末年始特別休暇入力
  moveUnmatchedAndFutureTitlesToHolidays();//未来にイベント入っていたら,それを祝日に入れてしまう
  updateNames();//メンバー更新
    updateNamesforlastdays();//最終日の日付消去判定と実行
    updateNamesfortemporarylastdays();//院外研修者の日付消去判定と実行
  importSpecifiedWeekendsToSheetHorizontal();//カレンダー更新,0入力
  importJCandLectureToSheet();//カレンダーからレクチャー実績を取得
  updateDatesJCandLectureDateautomationversion();//レクチャー実績から最終JC,レクチャー日を取得(検索文字列:抄読会 名前, 朝担当 名前)
    transferstaffdoctorlastDates();//常勤医の最終日を割り当て表に移動
  updateCalendarWithZero();//ローテーターの期間以外のところに0入力
  importEventsToSheet()//リフ休や出張を取得
  update0ofrefreshholidayAssignmentSheet();//リフ休から0を割り当て表に入力
  updateGoodbyeDatesToSheet();//サヨナラレクチャー実績取得
  ByeByeLectureAssignment();//サヨナラレクチャーを割り当てる
  updateColumnsWithZeros();//さよならレクチャー以後に0を入れる
  inputJCorLC();//JCとLCを割り当て
  assign1forJC();//JCに1を割り当て
  assign10forLC();//LCに10を割り当て
  addEventsToCalendar();//カレンダーへ飛ばす
  }

すべてにコメントを入れているので,なんとなく見ればわかると思います.


この記事が気に入ったらサポートをしてみませんか?