2022年3月11日金曜日

タスクとシフト表記を結びつける

 今回は、高度なTIPSです。

タスクは、一つのフェーズで一つActive状態を持ちます。シフトは、複数のフェーズに跨る概念です。前回の場合、2Phaseで、タスクは、各々DummyDay、とDummyというDefault状態が存在します。これは、タスクも、シフトと同様に各Phaseで、MostOne LeastOneで記述しなければいけない、というルールに基づいています。Day帯で言えば、振休か、日直か2状態がActiveになりえるBitですが、それ以外という意味のBitがDummyDayになります。

で、ph0=DummyDay,ph1=Dummyだった場合の休日は、”休み”とシフト上表記したくなりました。

もし、”休み”というシフトがない場合、タスク的には、何もないにもかかわらず、休みの日、日勤シフトと表記されるかもしれません。休みシフトと上記タスクを結びつける記述がGUIでは書けないので制御できないのです。

これは避けたい、と個人的に思い次のようなBindingをPythonで記述しています。

If day in 今月休日:

    予定が入っていないなら:

         [DummyDay,Dummy] => 休みシフト 

としたい訳です。

A=TaskVar[person][day][0][DummyDay] && TaskVar[person][day][1][Dummy];

B=ShiftVar[person][day]["休み"]

 何度もやっているようにImplication A->Bは、!A|Bとなります。

!A=~TaskVar[person][day][0][DummyDay] | ~TaskVar[person][day][1][Dummy];

なので、Python Programは、以下の通りになります。

for day in 今月休日:#

            if shift_schedules[person][day][0]=='':
                v=sc3.GetShiftVar(person,day,'公休')
                v1=sc3.GetTaskVar(person,day,0,'DummyDay')
                v2=sc3.GetTaskVar(person,day,1,'Dummy')
                s='タスクがない休日は休日シフトにする '+staffdef[person]+' '+daydef[day]
                sc3.AddHard(v | ~v1 |~v2,s)

0 件のコメント:

コメントを投稿