Esempio n. 1
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);
         }
     }
 }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
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();
 }
Esempio n. 5
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);
        }
Esempio n. 6
0
        /// <summary>日付のロード
        /// </summary>
        public void LoadScheduledDate(XmlElement element, CTimeTable all)
        {
            DateTime       date          = DateTime.Parse(element.GetAttribute("date"));
            CScheduledDate scheduleddate = all.Dates.CreateScheduledDate(date);

            if (date.Year == 2007 && date.Month == 4 && date.Day == 28)
            {
                System.Console.WriteLine("ここだ!");
            }
            LoadTmElement(element, scheduleddate);
            XmlAttribute req = element.Attributes["require"];

            // 人員配置
            if (req != null)
            {
                int wid = int.Parse(req.Value);
                CRequirePatterns reqobj = all.Requires.GetByID(wid);
                scheduleddate.Require = reqobj;
            }
            else
            {
                scheduleddate.Require = CRequirePatterns.NULL;
            }
            XmlElement pNode = element.FirstChild as XmlElement;

            while (pNode != null)
            {
                if (pNode.Name == "schedule")
                {
                    // スケジュール
                    CSchedule schedule = scheduleddate.CreateSchedule();
                    LoadTmElement(pNode, schedule);
                    string membertxt = pNode.GetAttribute("member");
                    if (membertxt.Trim().Length > 0)
                    {
                        int memberid = int.Parse(membertxt);
                        if (memberid > 0)
                        {
                            schedule.Member = all.Members.GetByID(memberid);
                        }
                    }
                    string patterntxt = pNode.GetAttribute("pattern");
                    if (patterntxt.Trim().Length > 0)
                    {
                        int patternid = int.Parse(patterntxt);
                        schedule.Pattern = all.Patterns.GetByID(patternid);
                    }
                    scheduleddate.SetSchedule(schedule);
                }
                //
                pNode = pNode.NextSibling as XmlElement;
            }
            all.Dates.AddScheduleDate(scheduleddate);
        }
Esempio n. 7
0
 /// <summary>人員配置一覧の作成
 /// </summary>
 private void MakeRequires()
 {
     for (int i = 0; i < Source.Requires.Size(true); i++)
     {
         CRequirePatterns requires = Source.Requires[i, true];
         if (!requires.BuiltIn)
         {
             DataRow dr = TblImportRequires.NewRow();
             dr[ClmImportRequires]     = requires;
             dr[ClmImportRequiresName] = requires.Name + (requires.Removed == null ? "" : "(削除されています)");
             TblImportRequires.Rows.Add(dr);
         }
     }
 }
        /// <summary>値の取得時
        /// </summary>
        /// <param name="value"></param>
        /// <param name="rowIndex"></param>
        /// <param name="cellStyle"></param>
        /// <param name="valueTypeConverter"></param>
        /// <param name="formattedValueTypeConverter"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        protected override object GetFormattedValue(
            object value, int rowIndex,
            ref DataGridViewCellStyle cellStyle,
            TypeConverter valueTypeConverter,
            TypeConverter formattedValueTypeConverter,
            DataGridViewDataErrorContexts context)
        {
            CRequirePatterns ret = null;

            if (value != null && value is CRequirePatterns)
            {
                ret = value as CRequirePatterns;
            }
            return((ret == null) ? "" : ret.Name);
        }
Esempio n. 9
0
        /// <summary>人員配置名を返す
        /// </summary>
        /// <param name="date"></param>
        /// <param name="member"></param>
        /// <param name="head"></param>
        /// <returns></returns>
        private string ReturnRequireName(DateTime date, CMember member, bool head)
        {
            if (head)
            {
                return("人員配置");
            }
            CScheduledDate   sdate = TimeTable[date];
            CRequirePatterns rq    = sdate.Require;

            if (rq == null)
            {
                return("");
            }
            return(ConvertColumn(rq.Name));
        }
        /// <summary>人員配置の一覧
        /// </summary>
        private void ResetRequires(DateTime currentdate)
        {
            if (timeTable == null)
            {
                return;
            }
            TblRequireComboBox.Clear();
            TimeTableManager.ElementCollection.CRequirePatternsCollection requires = TimeTable.Requires;
            int size = requires.Size(true);

            for (int i = 0; i < size; i++)
            {
                CRequirePatterns require = requires[i, true];
                if (require.IsAvailable(currentdate))
                {
                    TblRequireComboBox.Rows.Add(require, require.Name);
                }
            }
        }
Esempio n. 11
0
        /// <summary>
        /// パターンに対してマッチしているか?
        /// </summary>
        /// <param name="pattern">パターン</param>
        /// <returns>割合</returns>
        private double CheckPatternMuches(CPattern pattern)
        {
            double           ret     = 0;
            CRequirePatterns require = sdate.Require;

            if (require == null || require == CRequirePatterns.DAYOFF || require == CRequirePatterns.NULL)
            {
                // 休みなら常に条件を満たすことにする(必要人数が0だから)
                ret = 1.0;
            }
            else
            {
                int need = require.GetRequire(pattern);
                if (need <= 0)
                {
                    // 必要人数が0なら条件を常に満たす・・かな?
                    ret = 1.0;
                }
                else
                {
                    // 割合を計算してみる
                    int seed = GetPatternMemberCount(pattern);
                    ret = (double)seed / (double)need;
                    if (ret < 1)
                    {
                        if (ret <= 0.0)
                        {
                            AddItem(EvaluationResult.ERROR, pattern.Name + "が必要な人数を満たしていません。(" + need + "人中" + seed + "人)");
                        }
                        else if (ret < 0.5)
                        {
                            AddItem(EvaluationResult.WARNING, pattern.Name + "が必要な人数の半分を満たしていません。(" + need + "人中" + seed + "人)");
                        }
                        else if (ret < 1)
                        {
                            AddItem(EvaluationResult.NOTICE, pattern.Name + "が必要な人数を満たしていません。(" + need + "人中" + seed + "人)");
                        }
                    }
                }
            }
            return(ret);
        }
Esempio n. 12
0
        /// <summary>勤務シフトに対してマッチしているか?
        /// </summary>
        /// <param name="pattern">勤務シフト</param>
        /// <returns>割合</returns>
        private double CheckPatternMuches(CPattern pattern)
        {
            double           ret     = 0;
            CRequirePatterns require = sdate.Require;

            if (require == null || require == CRequirePatterns.DAYOFF || require == CRequirePatterns.NULL)
            {
                // 休みなら常に条件を満たすことにする(人員配置が0だから)
                ret = 1.0;
            }
            else
            {
                int need = require.GetRequire(pattern);
                if (need <= 0)
                {
                    // 人員配置が0なら条件を常に満たす・・かな?
                    ret = 1.0;
                }
                else
                {
                    // 割合を計算してみる
                    int seed = GetPatternMemberCount(pattern);
                    ret = (double)seed / (double)need;
                    if (ret < 1)
                    {
                        if (ret <= 0.0)
                        {
                            AddItem(EEvaluationResult.ERROR, GenerateMessage(msg_needs_unmuch_error, new string[] { pattern.Name, need.ToString(), seed.ToString() }));
                        }
                        else if (ret < 0.5)
                        {
                            AddItem(EEvaluationResult.WORNING, GenerateMessage(msg_needs_unmuch_worning, new string[] { pattern.Name, need.ToString(), seed.ToString() }));
                        }
                        else if (ret < 1)
                        {
                            AddItem(EEvaluationResult.NOTICE, GenerateMessage(msg_needs_unmuch_notice, new string[] { pattern.Name, need.ToString(), seed.ToString() }));
                        }
                    }
                }
            }
            return(ret);
        }
Esempio n. 13
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);
                    //if (work > 1) {
                    //    work = 1.0;
                    //} else {
                    //    if (work < 1) {
                    //        AddItem(EvaluationResult.NOTICE, pattern.Name + "が必要な人数を満たしていません。");
                    //    } else if (work < 0.5) {
                    //        AddItem(EvaluationResult.WARNING, pattern.Name + "が必要な人数の半分を満たしていません。");
                    //    } else if (work <= 0.0) {
                    //        AddItem(EvaluationResult.ERROR, pattern.Name + "が必要な人数を満たしていません。");
                    //    }
                    //}
                    ret += work;
                    j++;
                }
            }
            ret = (j > 0 ? ret / (double)j : 1.0);
            return(ret);
        }
Esempio n. 14
0
 /// <summary>人員配置のインポート
 /// </summary>
 /// <param name="requires">インポートする人員配置</param>
 /// <returns>成功:追加したエレメント/不成功:null</returns>
 private CRequirePatterns ImportRequires(CRequirePatterns requires)
 {
     #region 重複チェック
     CRequirePatternsCollection col = Target.Requires;
     if (col.GetByName(requires.Name) != null)
     {
         return(null);
     }
     if (col.Size() >= FMainForm.MaxItemCount)
     {
         return(null);
     }
     #endregion
     #region インポート
     CRequirePatterns newrequires = col.CreateRequirePatterns(true);
     newrequires.Name = requires.Name;
     for (int i = 0; i < Source.Patterns.Size(true); i++)
     {
         CPattern pattern = Source.Patterns[i, true];
         int      needs   = requires.GetRequire(pattern);
         if (!pattern.BuiltIn && (pattern.Removed == null || needs > 0))
         {
             CPattern newpattern = Target.Patterns.GetByName(pattern.Name);
             if (newpattern == null)
             {
                 newpattern = ImportPattern(pattern);
             }
             newrequires.SetRequire(newpattern, needs);
         }
     }
     newrequires.Notes = requires.Notes + "\nインポートされました。";
     foreach (string key in requires.properties.AllKeys)
     {
         newrequires[key] = requires[key];
     }
     #endregion
     col.AddRequirePatterns(newrequires);
     // 終端
     return(newrequires);
 }
 public ERequirePatternssEditedEventArgs(EnumTimeTableElementEventTypes EventType, CRequirePatterns EventSource)
 {
     this.type   = EventType;
     this.source = EventSource;
 }
Esempio n. 16
0
        /// <summary>ロードメイン
        /// </summary>
        public CTimeTable Load(string file)
        {
            CTimeTable ret = new CTimeTable();

            ret.ScheduleEditedEvnetIsValid = false;
            XmlDocument doc = new XmlDocument();

            doc.Load(file);
            XmlElement rNode = doc.DocumentElement;
            XmlElement cNode = rNode.FirstChild as XmlElement;

            while (cNode != null)
            {
                if (cNode.Name == "patterns")
                {
                    // シフト
                    LoadPatterns(cNode, ret);
                }
                else if (cNode.Name == "members")
                {
                    // メンバー
                    LoadMembers(cNode, ret);
                }
                else if (cNode.Name == "requires")
                {
                    // 人員配置
                    LoadRequirePatterns(cNode, ret);
                }
                else if (cNode.Name == "dayoffs")
                {
                    // 休日
                    LoadDayOffs(cNode, ret);
                }
                else if (cNode.Name == "scheduleddate")
                {
                    // 日付
                    LoadScheduledDate(cNode, ret);
                }
                else if (cNode.Name == "starttime")
                {
                    // 営業開始時間
                    string text = cNode.InnerText;
                    ret.StartTime = TimeSpan.Parse(text);
                }
                else if (cNode.Name == "endtime")
                {
                    // 営業終了時間
                    if (ret.Around == TimeSpan.Zero)
                    {
                        string text = cNode.InnerText;
                        ret.EndTime = TimeSpan.Parse(text);
                    }
                }
                else if (cNode.Name == "around")
                {
                    // 営業時間
                    string text = cNode.InnerText;
                    ret.Around = TimeSpan.Parse(text);
                }
                else if (cNode.Name == "default_require")
                {
                    // デフォルトの人員配置
                    string text      = cNode.InnerText;
                    int    requireid = int.Parse(text);
                    if (requireid > 0)
                    {
                        CRequirePatterns require = ret.Requires.GetByID(requireid);
                        if (require != null)
                        {
                            ret.DefaultRequire = require;
                        }
                    }
                }
                else if (cNode.Name == "defaultRequireweekday")
                {
                    // デフォルトの人員配置(曜日ごと)
                    string text1 = cNode.GetAttribute("weekday");
                    string text2 = cNode.GetAttribute("require");
                    try {
                        int weekdayid, requireid;
                        int.TryParse(text1, out weekdayid);
                        int.TryParse(text2, out requireid);
                        //= (int.TryParse(text1,) ? int.Parse(text1) : 0);
                        //int requireid = int.Parse(text2);
                        if (weekdayid >= 0)
                        {
                            CRequirePatterns require = ret.Requires.GetByID(requireid);
                            if (require != null)
                            {
                                ret.SetDefaultRequire(weekdayid, require);
                            }
                        }
                    } catch {
                    }
                }
                else if (cNode.Name == "sequence")
                {
                    // 順番
                    string text = cNode.InnerText;
                    int    seq  = int.Parse(text);
                    ret.CurrentID = seq;
                }
                else if (cNode.Name == "property")
                {
                    //ret[cNode.GetAttribute("key")] = cNode.GetAttribute("value");
                    ret[cNode.GetAttribute("key")] = cNode.InnerText;
                }
                //
                cNode = cNode.NextSibling as XmlElement;
            }
            ret.ScheduleEditedEvnetIsValid = true;
            return(ret);
        }
Esempio n. 17
0
        /// <summary>セーブメイン
        /// </summary>
        public void Save(string file, CTimeTable ret)
        {
            XmlDocument    doc         = new XmlDocument();
            XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "", "yes");

            doc.InsertBefore(declaration, doc.DocumentElement);
            XmlElement rNode = doc.CreateElement("scheduleall");

            doc.AppendChild(rNode);
            // シフト
            rNode.AppendChild(SavePatterns(doc, ret));
            // メンバー
            rNode.AppendChild(SaveMembers(doc, ret));
            // 人員配置
            rNode.AppendChild(SaveRequirePatterns(doc, ret));
            // 休日
            rNode.AppendChild(SaveDayOffs(doc, ret));
            #region 営業開始時間
            XmlElement startNode = doc.CreateElement("starttime");
            startNode.InnerText = ret.StartTime.ToString();
            rNode.AppendChild(startNode);
            #endregion
            #region 営業終了時間
            XmlElement endNode = doc.CreateElement("endtime");
            endNode.InnerText = ret.EndTime.ToString();
            rNode.AppendChild(endNode);
            #endregion
            #region 営業時間
            XmlElement aroundNode = doc.CreateElement("around");
            aroundNode.InnerText = ret.Around.ToString();
            rNode.AppendChild(aroundNode);
            #endregion
            #region デフォルトの人員配置
            if (ret.DefaultRequire != null && ret.DefaultRequire != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("default_require");
                defaultNode.InnerText = ret.DefaultRequire.ObjectID.ToString();
                rNode.AppendChild(defaultNode);
            }
            #endregion
            #region デフォルトの人員配置(曜日ごと)
            CRequirePatterns work = null;
            work = ret.GetDefaultRequire(System.DayOfWeek.Monday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "0");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            work = ret.GetDefaultRequire(System.DayOfWeek.Tuesday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "1");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            work = ret.GetDefaultRequire(System.DayOfWeek.Wednesday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "2");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            work = ret.GetDefaultRequire(System.DayOfWeek.Thursday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "3");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            work = ret.GetDefaultRequire(System.DayOfWeek.Friday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "4");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            work = ret.GetDefaultRequire(System.DayOfWeek.Saturday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "5");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            work = ret.GetDefaultRequire(System.DayOfWeek.Sunday);
            if (work != null && work != CRequirePatterns.NULL)
            {
                XmlElement defaultNode = doc.CreateElement("defaultRequireweekday");
                defaultNode.SetAttribute("weekday", "6");
                defaultNode.SetAttribute("require", work.ObjectID.ToString());
                rNode.AppendChild(defaultNode);
            }
            #endregion
            #region 順番
            XmlElement seqNode = doc.CreateElement("sequence");
            seqNode.InnerText = ret.CurrentID.ToString();
            rNode.AppendChild(seqNode);
            #endregion
            #region 直下のプロパティ
            foreach (string key in ret)
            {
                XmlElement propelement = doc.CreateElement("property");
                propelement.SetAttribute("key", key);
                propelement.InnerText = ret[key];
                rNode.AppendChild(propelement);
            }
            #endregion
            // 日付
            SaveScheduledDate(doc, rNode, ret);
            ///////////////
            doc.Save(file);
        }
 public EScheduleDateRequirePatternsEditedEventArgs(CScheduledDate param0, CRequirePatterns param1)
 {
     this.sdate   = param0;
     this.require = param1;
 }