今回は、高度な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 件のコメント:
コメントを投稿