コード例 #1
0
        /// <summary>勤務シフトの取得
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        public virtual CPattern GetByID(long n)
        {
            // ビルトインのもの
            if (n == CPattern.NULL.ObjectID)
            {
                return(CPattern.NULL);
            }
            if (n == CPattern.DAYOFF.ObjectID)
            {
                return(CPattern.DAYOFF);
            }
            if (n == CPattern.MULTI.ObjectID)
            {
                return(CPattern.MULTI);
            }
            // 検索する
            CPattern work = new CPattern(this);

            work.ObjectID = n;
            int i = patterns.BinarySearch(work);

            if (i < 0)
            {
                return(CPattern.NULL);
            }
            return(patterns[i]);
        }
コード例 #2
0
ファイル: CSaver.cs プロジェクト: kkimmg/TimeTableManager
        /// <summary>人員配置のセーブ
        /// </summary>
        public XmlElement SaveRequirePatterns(XmlDocument doc, CTimeTable all)
        {
            XmlElement element = doc.CreateElement("requires");

            SaveTmElement(doc, element, all.Requires);
            for (int i = 0; i < all.Requires.Size(true); i++)
            {
                CRequirePatterns require = all.Requires[i, true];
                if (!require.BuiltIn)
                {
                    XmlElement pNode = doc.CreateElement("require");
                    SaveTmElement(doc, pNode, require);
                    pNode.SetAttribute("name", require.Name);
                    // シフトごとの人数
                    for (int j = 0; j < require.Size(); j++)
                    {
                        CPattern pattern = require.GetPattern(j);
                        int      needs   = require.GetRequire(pattern);
                        if (needs > 0)
                        {
                            XmlElement nNode = doc.CreateElement("pattern");
                            nNode.SetAttribute("patternid", pattern.ObjectID.ToString());
                            nNode.SetAttribute("requirenums", needs.ToString());
                            pNode.AppendChild(nNode);
                        }
                    }
                    // エレメントを追加
                    element.AppendChild(pNode);
                }
            }
            return(element);
        }
コード例 #3
0
        /// <summary>
        /// メンバーの作業時間の重複(エラー)または※2の時間を満たしていなければ警告
        /// </summary>
        private void CheckSpace()
        {
            CSchedule tsche = sdate[_member];
            CPattern  tpatt = tsche.Pattern;

            if (!(tpatt == null || tpatt.BuiltIn))
            {
                // 今日のパターンが存在する
                DateTime       today     = sdate.Date;
                DateTime       yesterday = today.AddDays(-1).Date;
                CScheduledDate ydate     = Root[yesterday];
                CSchedule      ysche     = ydate[_member];
                CPattern       ypatt     = ysche.Pattern;
                if (!(ypatt == null || ypatt.BuiltIn))
                {
                    // 昨日のパターンが存在する!
                    DateTime yend = yesterday + ypatt.End;
                    DateTime tend = yend + _member.Spacetime;
                    DateTime tstt = today + tpatt.Start;
                    if (yend >= tstt)
                    {
                        AddItem(EvaluationResult.ERROR, _member.Name + "の作業時間が重複しています。(" + tstt + "~" + yend + ")");
                    }
                    else if (tend > tstt)
                    {
                        AddItem(EvaluationResult.WARNING, _member.Name + "の作業間隔が不足しています。(" + yend + "~" + tstt + ")");
                    }
                }
            }
        }
コード例 #4
0
ファイル: FCSVExport.cs プロジェクト: kkimmg/TimeTableManager
        /// <summary>勤務シフトの長さを返す
        /// </summary>
        /// <param name="date"></param>
        /// <param name="member"></param>
        /// <param name="head"></param>
        /// <returns></returns>
        private string ReturnPatternLength(DateTime date, CMember member, bool head)
        {
            if (head)
            {
                return(member.Name + "の勤務時間");
            }
            CScheduledDate sdate   = TimeTable[date];
            CSchedule      schdule = sdate[member];

            if (schdule == null)
            {
                return(TimeSpan.Zero.ToString());
            }
            CPattern pattern = schdule.Pattern;

            if (pattern == null)
            {
                return(TimeSpan.Zero.ToString());
            }
            if (pattern.BuiltIn)
            {
                return(TimeSpan.Zero.ToString());
            }
            return(pattern.Scope.ToString());
        }
コード例 #5
0
        /// <summary>メンバーの作業時間の重複(エラー)または※2の時間を満たしていなければ警告
        /// </summary>
        private void CheckSpace()
        {
            CSchedule tsche = sdate[_member];
            CPattern  tpatt = tsche.Pattern;

            if (!(tpatt == null || tpatt.BuiltIn))
            {
                // 今日のシフトが存在する
                DateTime       today     = sdate.Date;
                DateTime       yesterday = today.AddDays(-1).Date;
                CScheduledDate ydate     = Root[yesterday];
                CSchedule      ysche     = ydate[_member];
                CPattern       ypatt     = ysche.Pattern;
                if (!(ypatt == null || ypatt.BuiltIn))
                {
                    // 昨日のシフトが存在する!
                    DateTime yend = yesterday + ypatt.End;
                    DateTime tend = yend + _member.Spacetime;
                    DateTime tstt = today + tpatt.Start;
                    if (yend >= tstt)
                    {
                        AddItem(EEvaluationResult.ERROR, GenerateMessage(msg_space_error, new string[] { _member.Name, tstt.ToString(), yend.ToString() }));
                    }
                    else if (tend > tstt)
                    {
                        AddItem(EEvaluationResult.WORNING, GenerateMessage(msg_space_worning, new string[] { _member.Name, tstt.ToString(), yend.ToString() }));
                    }
                }
            }
        }
コード例 #6
0
ファイル: FCSVExport.cs プロジェクト: kkimmg/TimeTableManager
        /// <summary>勤務シフトの終了を返す
        /// </summary>
        /// <param name="date"></param>
        /// <param name="member"></param>
        /// <param name="head"></param>
        /// <returns></returns>
        private string ReturnPatternEnd(DateTime date, CMember member, bool head)
        {
            if (head)
            {
                return(member.Name + "のシフト終了");
            }
            CScheduledDate sdate   = TimeTable[date];
            CSchedule      schdule = sdate[member];

            if (schdule == null)
            {
                return("");
            }
            CPattern pattern = schdule.Pattern;

            if (pattern == null)
            {
                return("");
            }
            if (pattern.BuiltIn)
            {
                return("");
            }
            DateTime ret = date.Date + pattern.End;

            return(ret.ToLongDateString() + " " + ret.ToLongTimeString());
        }
コード例 #7
0
        /// <summary>メンバーの連続稼動日数が※1の日数を超えていたら警告
        /// </summary>
        private void CheckContinuas()
        {
            CSchedule schedule = sdate[_member];

            if (schedule == null)
            {
                return;
            }
            CPattern pattern = schedule.Pattern;

            if (pattern == null || pattern.BuiltIn)
            {
                return;
            }

            // 休み設定
            int conu = _member.ContinuasInt;

            if (conu > 0)
            {
                int cont = sdate.GetMemberContinues(_member, conu * 2);
                int rest = conu - cont;
                if (rest <= 0)
                {
                    if (cont >= conu * 2)
                    {
                        AddItem(EEvaluationResult.ERROR, GenerateMessage(msg_cont_error, new string[] { _member.Name, (cont + 1).ToString() }));
                    }
                    else
                    {
                        AddItem(EEvaluationResult.WORNING, GenerateMessage(msg_cont_worning, new string[] { _member.Name, (cont + 1).ToString() }));
                    }
                }
            }
        }
コード例 #8
0
 /// <summary>勤務シフトのインポート
 /// </summary>
 /// <param name="pattern">インポートする勤務シフト</param>
 /// <returns>成功:追加したエレメント/不成功:null</returns>
 private CPattern ImportPattern(CPattern pattern)
 {
     #region 重複チェック
     CPatternCollection col = Target.Patterns;
     if (col.GetByName(pattern.Name) != null)
     {
         return(null);
     }
     if (col.Size() >= FMainForm.MaxItemCount)
     {
         return(null);
     }
     #endregion
     #region インポート
     CPattern newpattern = col.CreatePattern(true);
     newpattern.Name  = pattern.Name;
     newpattern.Start = pattern.Start;
     newpattern.Scope = pattern.Scope;
     newpattern.Rest  = pattern.Rest;
     newpattern.Notes = pattern.Notes + "\nインポートされました。";
     foreach (string key in pattern.properties.AllKeys)
     {
         newpattern[key] = pattern[key];
     }
     #endregion
     col.AddPattern(newpattern);
     // 終端
     return(newpattern);
 }
コード例 #9
0
 /// <summary>勤務シフトを作成する
 /// </summary>
 /// <param name="member"></param>
 /// <param name="Span1"></param>
 /// <param name="Span2"></param>
 /// <param name="Rest"></param>
 private void CreatePattern (CMember member, TimeSpan Span1, TimeSpan Span2, TimeSpan Rest) {
     double dSpan1 = (long)(Span1.TotalHours / UMultiEditor.Threshold.TotalHours);
     double dSpan2 = (long)(Span2.TotalHours / UMultiEditor.Threshold.TotalHours);
     double dSpan3 = dSpan2 - dSpan1;
     CPattern newpattern = this.TimeTable.Patterns.CreatePattern();
     //newpattern.Name = "新しい作業用のシフト(" + dates[0].ToShortDateString() + (dates.Count <= 1 ? "" : "~" + dates[dates.Count - 1].ToShortDateString()) + ")";
     newpattern.Name = NewPatternName.Replace("%1", dates[0].ToShortDateString() + (dates.Count <= 1 ? "" : "~" + dates[dates.Count - 1].ToShortDateString()));
     newpattern.Start = TimeSpan.FromHours(dSpan1 * UMultiEditor.Threshold.TotalHours);
     newpattern.Scope = TimeSpan.FromHours(dSpan3 * UMultiEditor.Threshold.TotalHours);
     newpattern.Rest = Rest;
     newpattern.Notes = NewPatternNotes;
     newpattern.Created = dates[0];
     TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog();
     dialog.Pattern = newpattern;
     if (dialog.ShowDialog(MainForm) == DialogResult.OK) {
         TimeTable.Patterns.AddPattern(dialog.Pattern);
         foreach (DateTime date in dates) {
             if (date >= DateTime.Today) {
                 CScheduledDate sdate = TimeTable[date];
                 sdate[member].Pattern = dialog.Pattern;
             }
         }
         // 臨時用のみかどうか
         if (TimeTable.Patterns.Size() >= TimeTableManager.UI.FMainForm.MaxItemCount || MessageBox.Show(this.MainForm, CreatePatternMessage, CreatePatternTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) {
             newpattern.SetAvailable(false, dates[dates.Count - 1]);
         }
     }
 }
コード例 #10
0
 /// <summary>ダブルクリック時の処理
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void BodyTable_CellMouseDoubleClick (object sender, DataGridViewCellMouseEventArgs e) {
     if (e.RowIndex >= 0) {
         CMember member = this.Members[e.RowIndex];
         switch (e.ColumnIndex) {
             case 0:
                 // メンバーの修正
                 TimeTableManager.UI.FMemberDialog dialogM = new TimeTableManager.UI.FMemberDialog();
                 dialogM.Member = member;
                 if (dialogM.ShowDialog(this.MainForm) == DialogResult.OK) {
                     Refresh();
                 }
                 break;
             case 1:
                 // シフトの修正
                 PatternWrapper wrapper = Member2PatternWrapper[member];
                 CPattern pattern = wrapper.Pattern;
                 if (pattern != null && !pattern.BuiltIn) {
                     TimeTableManager.UI.FPatternDialog dialogP = new TimeTableManager.UI.FPatternDialog();
                     dialogP.Pattern = pattern;
                     if (dialogP.ShowDialog(this.MainForm) == DialogResult.OK) {
                         Refresh();
                     }
                 }
                 break;
             case 2:
                 // コメントの追加・修正
                 if (Dates.Count == 1 && Editable) {
                     BodyTable.CurrentCell = BodyTable[e.ColumnIndex, e.RowIndex];
                     BodyTable.BeginEdit(true);
                 }
                 break;
         }
     } else {
     }
 }
コード例 #11
0
        /// <summary>メンバーの作成(初期化機能つき)
        /// </summary>
        /// <returns>新しいメンバー</returns>
        public virtual CMember CreateMember(bool init)
        {
            CMember ret = CreateMember();

            if (init)
            {
                ret.Name = "新しいメンバー";
                int size = TimeTable.Patterns.Size(true);
                for (int i = 0; i < size; i++)
                {
                    CPattern pattern = TimeTable.Patterns[i, true];
                    if (pattern.Removed == null && !pattern.BuiltIn)
                    {
                        ret.AddPattern(pattern);
                    }
                }
                ret.SetAvailableDay(CTimeTable.tMonday, true);
                ret.SetAvailableDay(CTimeTable.tTuesday, true);
                ret.SetAvailableDay(CTimeTable.tWednesday, true);
                ret.SetAvailableDay(CTimeTable.tThursday, true);
                ret.SetAvailableDay(CTimeTable.tFriday, true);
                ret.SetAvailableDay(CTimeTable.tSaturday, true);
                ret.SetAvailableDay(CTimeTable.tSunday, true);
                ret.Priority = GetLastPriority(true) + 1;;
            }
            return(ret);
        }
コード例 #12
0
 /// <summary>値のセット
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void BodyTable_CellValuePushed (object sender, DataGridViewCellValueEventArgs e) {
     CMember member = Members[e.RowIndex];
     switch (e.ColumnIndex) {
         case 0:
             break;
         case 1:
             if (this.TimeTable == null) return;
             CPattern pattern = e.Value as CPattern;
             if (pattern == CPattern.MULTI) return;
             foreach (DateTime date in Dates) {
                 if (date >= DateTime.Today) {
                     CScheduledDate sdate = this.TimeTable[date];
                     CSchedule sche = sdate[member];
                     sche.Pattern = pattern;
                 }
             }
             SetUpMember2Pattern(member);
             break;
         case 2:
             if (Dates.Count == 1 && StartDate >= DateTime.Today) {
                 string val = e.Value as string;
                 if (val == null) val = "";
                 if (this.TimeTable != null) {
                     DateTime date = StartDate;
                     CScheduledDate sdate = this.TimeTable[date];
                     CSchedule sche = sdate[member];
                     sche.Notes = val;
                     //sche.SetProperty("notes", val);
                     this.timeTable.NotifyScheduleEdited(sche);
                     SetUpMember2Pattern(member);
                 }
             }
             break;
     }
 }
コード例 #13
0
        /// <summary>人員配置からコントロールに値をセットする
        /// </summary>
        private void RequirePatterns2Components()
        {
            this.TxtRequireName.Text = this.require.Name;               // 名前
            // 人員配置の展開
            CTimeTable table = this.require.TimeTable;

            for (int i = 0; i < table.Patterns.Size(true); i++)
            {
                CPattern pattern = table.Patterns[i, true];
                int      needs   = this.require.GetRequire(pattern);
                if (!pattern.BuiltIn && (pattern.Removed == null || needs > 0))
                {
                    DataRow row = this.TblRequires.NewRow();
                    row["ClmPattern"]     = pattern;
                    row["ClmPatternName"] = pattern.Name;
                    row["ClmRequireNum"]  = needs;
                    this.TblRequires.Rows.Add(row);
                }
            }
            this.ResetTotalCount();
            this.txtNote.Text     = this.require.Notes;   // メモ
            this.txtCreated.Value = this.require.Created; // 作成日
            if (this.require.Removed != null && this.require.Removed > this.txtRemoved.MinDate)
            {
                this.txtRemoved.Value = (DateTime)this.require.Removed; // 削除日
            }
        }
コード例 #14
0
ファイル: CLoader.cs プロジェクト: kkimmg/TimeTableManager
        /// <summary>人員配置のロード
        /// </summary>
        public void LoadRequirePatterns(XmlElement element, CTimeTable all)
        {
            XmlElement pNode = element.FirstChild as XmlElement;

            while (pNode != null)
            {
                if (pNode.Name == "require")
                {
                    CRequirePatterns require = all.Requires.CreateRequirePatterns();
                    LoadTmElement(pNode, require);
                    require.Name = pNode.GetAttribute("name");
                    // 利用できるシフト
                    XmlElement tNode = pNode.FirstChild as XmlElement;
                    while (tNode != null)
                    {
                        if (tNode.Name == "pattern")
                        {
                            //
                            int      patternid  = int.Parse(tNode.GetAttribute("patternid"));
                            int      requirenum = int.Parse(tNode.GetAttribute("requirenums"));
                            CPattern pattern    = all.Patterns.GetByID(patternid);
                            require.SetRequire(pattern, requirenum);
                        }
                        //
                        tNode = tNode.NextSibling as XmlElement;
                    }
                    //
                    all.Requires.AddRequirePatterns(require);
                }
                //
                pNode = pNode.NextSibling as XmlElement;
            }
            //all.Requires.AddRequirePatterns(RequirePatterns.NOWORK);
        }
コード例 #15
0
 /// <summary>勤務シフトの削除
 /// </summary>
 /// <param name="pattern">削除するシフト</param>
 public virtual void  DelPattern(CPattern pattern)
 {
     pattern.SetAvailable(false);
     if (pattern.Removed != null)
     {
         availables.Remove(pattern);
         // 人員配置から削除
         CRequirePatternsCollection requires = parent.Requires;
         for (int i = 0; i < requires.Size(true); i++)
         {
             CRequirePatterns require = requires[i, true];
             require.SetRequire(pattern, 0);
         }
         // メンバーから削除
         CMemberCollection members = parent.Members;
         for (int i = 0; i < members.Size(true); i++)
         {
             CMember member = members[i, true];
             member.RemovePattern(pattern);
         }
         // イベント発生
         if (TimeTable != null)
         {
             TimeTable.NotifyPatternsEdited(EnumTimeTableElementEventTypes.ElementRemoved, pattern);
         }
     }
 }
コード例 #16
0
        /// <summary>
        /// スケジュール日に設定されたパターンの一覧
        /// </summary>
        /// <returns>パターンのリスト</returns>
        private List <CPattern> GetDatePatterns()
        {
            List <CPattern> ret = new List <CPattern>();
            int             max = sdate.ValidMemberSize;

            for (int i = 0; i < max; i++)
            {
                CMember   member   = sdate.GetValidMember(i);
                CSchedule schedule = sdate[member];
                if (schedule != null)
                {
                    CPattern pattern = schedule.Pattern;
                    if (pattern == null || pattern.BuiltIn)
                    {
                    }
                    else
                    {
                        if (!ret.Contains(pattern))
                        {
                            ret.Add(pattern);
                        }
                    }
                }
            }
            ret.Sort(new PatternComparer1());
            return(ret);
        }
コード例 #17
0
        /// <summary>
        /// メンバーの連続稼動日数が※1の日数を超えていたら警告
        /// </summary>
        private void CheckContinuas()
        {
            CSchedule schedule = sdate[_member];

            if (schedule == null)
            {
                return;
            }
            CPattern pattern = schedule.Pattern;

            if (pattern == null || pattern.BuiltIn)
            {
                return;
            }

            // 休み設定
            int conu = _member.ContinuasInt;

            if (conu > 0)
            {
                int cont = sdate.GetMemberContinues(_member, conu * 2);
                int rest = conu - cont;
                if (rest <= 0)
                {
                    if (cont >= conu * 2)
                    {
                        AddItem(EvaluationResult.ERROR, _member.Name + "の作業日が" + (cont + 1) + "日以上連続しています。");
                    }
                    else
                    {
                        AddItem(EvaluationResult.WARNING, _member.Name + "の作業日が" + (cont + 1) + "日連続しています。");
                    }
                }
            }
        }
コード例 #18
0
 /// <summary>インポートする
 /// </summary>
 /// <param name="sender">イベント発生元</param>
 /// <param name="e">発生したイベント</param>
 private void BtnOK_Click(object sender, EventArgs e)
 {
     try {
         foreach (DataRowView view in LstImportMember.CheckedItems)
         {
             CMember item = view.Row["ClmImportMember"] as CMember;
             ImportMember(item);
         }
         foreach (DataRowView view in LstImportPattern.CheckedItems)
         {
             CPattern item = view.Row["ClmImportPattern"] as CPattern;
             ImportPattern(item);
         }
         foreach (DataRowView view in LstImportRequires.CheckedItems)
         {
             CRequirePatterns item = view.Row["ClmImportRequires"] as CRequirePatterns;
             ImportRequires(item);
         }
         foreach (DataRowView view in LstImportDayOff.CheckedItems)
         {
             CDayOff item = view.Row["ClmImportDayOff"] as CDayOff;
             ImportDayOff(item);
         }
     } catch (Exception ex) {
         MessageBox.Show(this, ex.StackTrace, ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
     Dispose();
 }
コード例 #19
0
        /// <summary>勤務シフトに対してマッチしているか?(1日単位で)
        /// </summary>
        /// <returns>割合</returns>
        private double CheckPatternMuches()
        {
            double           ret     = 0.0;
            CRequirePatterns require = sdate.Require;

            if (require == null)
            {
                return(1.0);
            }
            List <CPattern> patterns = new List <CPattern>();

            for (int i = 0; i < require.Size(); i++)
            {
                patterns.Add(require.GetPattern(i));
            }
            int j = 0;

            for (int i = 0; i < patterns.Count; i++)
            {
                CPattern pattern = patterns[i];
                if (pattern.IsAvailable(sdate.Date))
                {
                    double work = CheckPatternMuches(pattern);
                    ret += work;
                    j++;
                }
            }
            ret = (j > 0 ? ret / (double)j : 1.0);
            return(ret);
        }
コード例 #20
0
 /// <summary>勤務シフトの復活
 /// </summary>
 /// <param name="pattern"></param>
 public virtual void  RescuePattern(CPattern pattern)
 {
     if (pattern.Removed != null)
     {
         pattern.SetAvailable(true);
         availables.Add(pattern);
         availables.Sort();
         parent.NotifyPatternsEdited(EnumTimeTableElementEventTypes.ElementRescued, pattern);
     }
 }
コード例 #21
0
 /// <summary>勤務シフトの追加
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void TsmiAddPattern_Click (object sender, EventArgs e) {
     if (this.TimeTable == null) return;
     if (this.TimeTable.Patterns.Size() >= TimeTableManager.UI.FMainForm.MaxItemCount) return;
     CPattern pattern = this.TimeTable.Patterns.CreatePattern(true);
     TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog();
     dialog.Pattern = pattern;
     if (dialog.ShowDialog(this.MainForm) == DialogResult.OK) {
         this.TimeTable.Patterns.AddPattern(pattern);
     }
 }
コード例 #22
0
        /// <summary>勤務シフトの取得(なかったらヌル)
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        private CPattern GetByIDorNull(long n)
        {
            // 検索する
            CPattern work = new CPattern(this);

            work.ObjectID = n;
            int i = patterns.BinarySearch(work);

            return(i >= 0 ? patterns[i] : null);
        }
コード例 #23
0
 /// <summary>メンバーの就業状態の作成
 /// </summary>
 /// <param name="member"></param>
 private void SetUpMember2Pattern (CMember member) {
     PatternWrapper wrapper = new PatternWrapper();
     wrapper.Pattern = CPattern.NULL;
     wrapper.StartTime = TimeSpan.MaxValue;
     wrapper.EndTime = TimeSpan.MinValue;
     if ((member == null) || (Dates.Count <= 0) || (TimeTable == null)) {
         // 存在しない
         if (member != null && Member2PatternWrapper.ContainsKey(member)) {
             Member2PatternWrapper.Remove(member);
         }
         return;
     } else {
         // 繰り返し
         int i = 0;
         foreach (DateTime date in Dates) {
             CScheduledDate sdate = TimeTable[date];
             CSchedule schedule = sdate[member];
             CPattern work = schedule.Pattern;
             if (i == 0) {
                 // 最初のシフト
                 wrapper.Pattern = work;
                 if (work != null && !work.BuiltIn) {
                     wrapper.StartTime = work.Start;
                     wrapper.EndTime = work.End;
                     i++;
                 }
                 wrapper.Notes = schedule.Notes;
                 //wrapper.Notes = schedule["notes"];
             } else if (wrapper.Pattern != work) {
                 if (schedule.Notes != "") {
                     // メモの追加
                     wrapper.Notes += "," + schedule.Notes;
                 }
                 // 複数選択されている
                 wrapper.Pattern = CPattern.MULTI;
                 if (work != null && !work.BuiltIn) {
                     if (wrapper.StartTime > work.Start) {
                         wrapper.StartTime = work.Start;
                     }
                     if (wrapper.EndTime < work.End) {
                         wrapper.EndTime = work.End;
                     }
                 }
                 i++;
             }
             
         }
         // 追加する
         if (Member2PatternWrapper.ContainsKey(member)) {
             Member2PatternWrapper[member] = wrapper;
         } else {
             Member2PatternWrapper.Add(member, wrapper);
         }
     }
 }
コード例 #24
0
 /// <summary>勤務シフトの修正
 /// </summary>
 /// <param name="sender">イベントの発生したオブジェクト</param>
 /// <param name="e">発生したイベント</param>
 private void TsmiEditPattern_Click (object sender, EventArgs e) {
     CMember member = this.Members[CurrentRowIndex];
     PatternWrapper wrapper = Member2PatternWrapper[member];
     CPattern pattern = wrapper.Pattern;
     if (pattern != null && !pattern.BuiltIn) {
         TimeTableManager.UI.FPatternDialog dialog = new TimeTableManager.UI.FPatternDialog();
         dialog.Pattern = pattern;
         if (dialog.ShowDialog(this.MainForm) == DialogResult.OK) {
             Refresh();
         }
     }
 }
コード例 #25
0
        /// <summary>勤務シフトの作成
        /// </summary>
        /// <returns></returns>
        public virtual CPattern CreatePattern(bool init)
        {
            CPattern ret = new CPattern(this);

            if (init)
            {
                ret.Name  = "新しいシフト";
                ret.Start = TimeTable.StartTime;
                ret.Scope = TimeTable.Around;
                ret.Rest  = TimeSpan.FromHours(1.0);
            }
            return(ret);
        }
コード例 #26
0
        /// <summary>メンバーがこのパターンを含むかどうかチェックする
        /// </summary>
        private void CheckPattern()
        {
            CSchedule tsche = sdate[_member];
            CPattern  tpatt = tsche.Pattern;

            if (!(tpatt == null || tpatt.BuiltIn))
            {
                if (!_member.Contains(tpatt))
                {
                    AddItem(EEvaluationResult.NOTICE, GenerateMessage(msg_pattern_nomatch, new string[] { tpatt.Name, _member.Name }));
                }
            }
        }
コード例 #27
0
        /// <summary>勤務シフトの取得
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public CPattern GetByName(string name)
        {
            CPattern ret = null;

            for (int i = 0; i < Size(true); i++)
            {
                if (this[i, true].Name == name)
                {
                    ret = this[i, true];
                    break;
                }
            }
            return(ret);
        }
コード例 #28
0
 /// <summary>勤務シフトの一覧の作成
 /// </summary>
 private void SetUpValidPatterns () {
     TblPattern.Clear();
     if (TimeTable != null && Dates.Count > 0) {
         // 期間中有効なシフトのみ
         int size = TimeTable.Patterns.Size(true);
         for (int i = 0; i < size; i++) {
             CPattern pattern = TimeTable.Patterns[i, true];
             if (pattern.IsAvailable(StartDate, EndDate)) {
                 TblPattern.Rows.Add(pattern, pattern.Name);
             }
         }
         TblPattern.Rows.Add(CPattern.MULTI, CPattern.MULTI.Name);
     }
 }
コード例 #29
0
 /// <summary>勤務シフト一覧の作成
 /// </summary>
 private void MakePatterns()
 {
     for (int i = 0; i < Source.Patterns.Size(true); i++)
     {
         CPattern pattern = Source.Patterns[i, true];
         if (!pattern.BuiltIn)
         {
             DataRow dr = TblImportPattern.NewRow();
             dr[ClmImportPattern]     = pattern;
             dr[ClmImportPatternName] = pattern.Name + (pattern.Removed == null ? "" : "(削除されています)");
             TblImportPattern.Rows.Add(dr);
         }
     }
 }
コード例 #30
0
        /// <summary>コンポーネントからメンバーへ
        /// </summary>
        private void Components2Member()
        {
            this.Member.Priority     = (int)this.NumPriority.Value;             // 優先度
            this.Member.Name         = this.TxtMemberName.Text;                 // 名前
            this.Member.ExpectedWork = TxtWorkTime.Value.TimeOfDay;             // 気体の作業時間
            // 期待される休憩時間
            double ExpectedRest;

            if (double.TryParse(this.TxtRest.Text, out ExpectedRest))
            {
                this.Member.ExpectedRest = ExpectedRest;
            }
            else
            {
                this.Member.ExpectedRest = 1.0;
            }
            this.Member.IsChief = this.ChkChief.Checked; // チーフメンバーですか?
            // シフトの追加
            this.Member.ClearPatterns();                 // とりあえず最初にクリア
            foreach (System.Data.DataRowView view in this.LstPatterns.CheckedItems)
            {
                // そのあとで有効なものを追加する
                CPattern pattern = view.Row["ClmPattern"] as CPattern;
                this.Member.AddPattern(pattern);
            }
            // 稼働日
            Member.SetAvailableDay(CTimeTable.tMonday, chkMonday.Checked);
            Member.SetAvailableDay(CTimeTable.tTuesday, chkTuesday.Checked);
            Member.SetAvailableDay(CTimeTable.tWednesday, chkWednesday.Checked);
            Member.SetAvailableDay(CTimeTable.tThursday, chkThursday.Checked);
            Member.SetAvailableDay(CTimeTable.tFriday, chkFriday.Checked);
            Member.SetAvailableDay(CTimeTable.tSaturday, chkSaturday.Checked);
            Member.SetAvailableDay(CTimeTable.tSunday, chkSunday.Checked);
            // 稼動間隔
            Member.Spacetime = dtpSpace.Value.TimeOfDay;
            // 連続稼働日
            Member.ContinuasInt = (int)numContinuas.Value;
            // メモ
            Member.Notes = txtNotes.Text;
            // 作成日
            Member.Created = txtCreated.Value.Date;
            // 削除日
            if (Member.Removed != null)
            {
                Member.Removed = txtRemoved.Value.Date;
            }
            // イベント発生
            this.Member.TimeTable.NotifyMembersEdited(EnumTimeTableElementEventTypes.ElementEdited, this.Member);
        }