public static PmsRelationship GetObjWbsStructure(int _level, int _fromOID, PmsProject _proj)
        {
            List <DateTime> lHoliday = CalendarDetailRepository.SelCalendarDetails(new CalendarDetail {
                CalendarOID = _proj.OID, IsHoliday = 1
            }).Select(val => DateTime.Parse(val.Year + "-" + val.Month + "-" + val.Day)).ToList();
            string strHoliday = string.Join(",", CalendarDetailRepository.SelCalendarDetails(new CalendarDetail {
                CalendarOID = _proj.OID, IsHoliday = 1
            }).Select(value => value.FullDate.ToString().ToArray()));

            PmsRelationship getStructure = new PmsRelationship();

            getStructure.Level       = _level;
            getStructure.ToOID       = _fromOID;
            getStructure.ToData      = _proj;
            getStructure.ObjName     = _proj.Name;
            getStructure.Description = _proj.Description;
            getStructure.ObjType     = _proj.Type;
            getStructure.EstDuration = _proj.EstDuration;
            getStructure.EstStartDt  = _proj.EstStartDt != null?Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", _proj.EstStartDt)) : _proj.EstStartDt;

            getStructure.EstEndDt = _proj.EstEndDt != null?Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", _proj.EstEndDt)) : _proj.EstEndDt;

            getStructure.ActDuration = _proj.ActDuration;
            getStructure.ActStartDt  = _proj.ActStartDt != null?Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", _proj.ActStartDt)) : _proj.ActStartDt;

            getStructure.ActEndDt = _proj.ActEndDt != null?Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", _proj.ActEndDt)) : _proj.ActEndDt;

            getStructure.ObjSt      = _proj.BPolicyOID;
            getStructure.ObjStNm    = _proj.BPolicy.StatusNm;
            getStructure.Complete   = _proj.Complete;
            getStructure.WorkingDay = _proj.WorkingDay;
            getStructure.Id         = null;
            getStructure.Dependency = null;
            if (_proj.BPolicy.Name == PmsConstant.POLICY_PROJECT_PREPARE || _proj.BPolicy.Name == PmsConstant.POLICY_PROJECT_PAUSED)
            {
                getStructure.diseditable = PmsConstant.DISEDITABLE;
            }
            else
            {
                getStructure.diseditable = PmsConstant.FLOWEDITABLE;
                if (_proj.ActEndDt != null)
                {
                    getStructure.Delay = PmsUtils.CalculateDelay(Convert.ToDateTime(_proj.EstEndDt), Convert.ToDateTime(_proj.ActEndDt), Convert.ToInt32(_proj.WorkingDay), lHoliday);
                }
                else
                {
                    getStructure.Delay = PmsUtils.CalculateDelay(Convert.ToDateTime(_proj.EstEndDt), DateTime.Now, Convert.ToInt32(_proj.WorkingDay), lHoliday);
                }
            }
            GetWbsStructure(getStructure, _fromOID, Convert.ToInt32(_proj.WorkingDay), strHoliday, _proj, lHoliday);
            return(getStructure);
        }
        public static void GetGanttSturcture(Dictionary <string, object> _dParent, List <Dictionary <string, object> > _ldStructure, int _iWorkingDay, List <DateTime> _lHoliday)
        {
            List <PmsRelationship> children = PmsRelationshipRepository.SelPmsRelationship(new PmsRelationship {
                FromOID = Convert.ToInt32(_dParent["oid"]), Type = PmsConstant.RELATIONSHIP_WBS
            });

            if (children != null && children.Count > 0)
            {
                _dParent.Add("hasChild", true);
            }
            else
            {
                _dParent.Add("hasChild", false);
            }
            PmsProcess tmpProcess = null;

            children.ForEach(item =>
            {
                if (tmpProcess != null)
                {
                    tmpProcess = null;
                }
                tmpProcess = PmsProcessRepository.SelPmsProcess(new PmsProcess {
                    OID = item.ToOID
                });
                Dictionary <string, object> tmpChildren = new Dictionary <string, object>();
                tmpChildren.Add("oid", tmpProcess.OID);
                tmpChildren.Add("id", tmpProcess.Id);
                tmpChildren.Add("name", tmpProcess.Name);
                tmpChildren.Add("progress", 0);
                tmpChildren.Add("progressByWorklog", false);
                tmpChildren.Add("relevance", 0);
                tmpChildren.Add("type", "");
                tmpChildren.Add("typeId", "");
                tmpChildren.Add("description", tmpProcess.Description);
                tmpChildren.Add("code", Convert.ToInt32(_dParent["level"]) + 1);
                tmpChildren.Add("level", Convert.ToInt32(_dParent["level"]) + 1);
                if (tmpProcess.BPolicy.Name != PmsConstant.POLICY_PROCESS_PREPARE)
                {
                    if (tmpProcess.ActEndDt != null)
                    {
                        tmpChildren.Add("status", "STATUS_DONE");
                    }
                    else
                    {
                        int delay = PmsUtils.CalculateDelay(Convert.ToDateTime(tmpProcess.EstEndDt), DateTime.Now, _iWorkingDay, _lHoliday);
                        if (delay > 1 && delay <= PmsConstant.DELAY)
                        {
                            tmpChildren.Add("status", "STATUS_WAITING");
                        }
                        else if (delay > PmsConstant.DELAY)
                        {
                            tmpChildren.Add("status", "STATUS_FAILED");
                        }
                        else
                        {
                            tmpChildren.Add("status", "STATUS_ACTIVE");
                        }
                    }
                }
                else
                {
                    tmpChildren.Add("status", "STATUS_SUSPENDED");
                }
                tmpChildren.Add("depends", tmpProcess.Dependency != "" && tmpProcess.Dependency != null ? tmpProcess.Dependency : "");
                tmpChildren.Add("canWrite", true);
                tmpChildren.Add("start", tmpProcess.EstStartDt);
                tmpChildren.Add("duration", tmpProcess.EstDuration);
                tmpChildren.Add("end", tmpProcess.EstEndDt);
                tmpChildren.Add("ActStart", tmpProcess.ActStartDt != null ? string.Format("{0:yyyy-MM-dd}", tmpProcess.ActStartDt) : "");
                tmpChildren.Add("ActDuration", tmpProcess.ActDuration);
                tmpChildren.Add("ActEnd", tmpProcess.ActEndDt != null ? string.Format("{0:yyyy-MM-dd}", tmpProcess.ActEndDt) : "");
                tmpChildren.Add("startIsMilestone", false);
                tmpChildren.Add("endIsMilestone", false);
                tmpChildren.Add("collapsed", false);

                List <Dictionary <string, object> > lPerson = new List <Dictionary <string, object> >();
                PmsRelationshipRepository.SelPmsRelationship(new PmsRelationship {
                    FromOID = tmpProcess.OID, Type = PmsConstant.RELATIONSHIP_MEMBER
                }).ForEach(member =>
                {
                    Person personData = PersonRepository.SelPerson(new Person {
                        OID = member.ToOID
                    });
                    Dictionary <string, object> person = new Dictionary <string, object>();
                    person.Add("resourceId", Convert.ToInt32(personData.OID));
                    person.Add("id", Convert.ToInt32(personData.OID));
                    person.Add("name", personData.Name);
                    person.Add("Thumbnail", personData.Thumbnail);
                    lPerson.Add(person);
                    personData = null;
                });

                tmpChildren.Add("assigs", lPerson);
                _ldStructure.Add(tmpChildren);
                GetGanttSturcture(tmpChildren, _ldStructure, _iWorkingDay, _lHoliday);
            });
        }
        public static List <Dictionary <string, object> > GetLDGanttWbs(string OID)
        {
            int        Level = 0;
            PmsProject proj  = PmsProjectRepository.SelPmsObject(new PmsProject {
                OID = Convert.ToInt32(OID)
            });
            List <DateTime> lHoliday = CalendarDetailRepository.SelCalendarDetails(new CalendarDetail {
                CalendarOID = proj.CalendarOID, IsHoliday = 1
            }).Select(val => DateTime.Parse(val.Year + "-" + val.Month + "-" + val.Day)).ToList();
            List <Dictionary <string, object> > ldPmsWbs = new List <Dictionary <string, object> >();

            Dictionary <string, object> dProj = new Dictionary <string, object>();

            dProj.Add("oid", proj.OID);
            dProj.Add("id", 0);
            dProj.Add("name", proj.Name);
            dProj.Add("progress", 0);
            dProj.Add("progressByWorklog", false);
            dProj.Add("relevance", 0);
            dProj.Add("type", "");
            dProj.Add("typeId", "");
            dProj.Add("description", proj.Description);
            dProj.Add("code", Level);
            dProj.Add("level", Level);
            if (proj.BPolicy.Name != PmsConstant.POLICY_PROJECT_PREPARE)
            {
                if (proj.ActEndDt != null)
                {
                    dProj.Add("status", "STATUS_DONE");
                }
                else
                {
                    int delay = PmsUtils.CalculateDelay(Convert.ToDateTime(proj.EstEndDt), DateTime.Now, Convert.ToInt32(proj.WorkingDay), lHoliday);
                    if (delay > 1 && delay <= PmsConstant.DELAY)
                    {
                        dProj.Add("status", "STATUS_WAITING");
                    }
                    else if (delay > PmsConstant.DELAY)
                    {
                        dProj.Add("status", "STATUS_FAILED");
                    }
                    else
                    {
                        dProj.Add("status", "STATUS_ACTIVE");
                    }
                }
            }
            else
            {
                dProj.Add("status", "STATUS_SUSPENDED");
            }
            dProj.Add("depends", "");
            dProj.Add("canWrite", true);
            dProj.Add("start", proj.EstStartDt);
            dProj.Add("duration", proj.EstDuration);
            dProj.Add("end", proj.EstEndDt);
            dProj.Add("ActStart", proj.ActStartDt != null ? string.Format("{0:yyyy-MM-dd}", proj.ActStartDt) : "");
            dProj.Add("ActDuration", proj.ActDuration);
            dProj.Add("ActEnd", proj.ActEndDt != null ? string.Format("{0:yyyy-MM-dd}", proj.ActEndDt) : "");
            dProj.Add("startIsMilestone", false);
            dProj.Add("endIsMilestone", false);
            dProj.Add("collapsed", false);
            dProj.Add("assigs", new List <object>());
            ldPmsWbs.Add(dProj);
            GetGanttSturcture(dProj, ldPmsWbs, Convert.ToInt32(proj.WorkingDay), lHoliday);
            return(ldPmsWbs);
        }
 public static void GetWbsStructure(PmsRelationship _relObj, int _projOID, int _workingDay, string _holiday, PmsProject _proj, List <DateTime> _lHoliday)
 {
     _relObj.RootOID  = _projOID;
     _relObj.Children = PmsRelationshipRepository.SelPmsRelationship(new PmsRelationship {
         Type = PmsConstant.RELATIONSHIP_WBS, FromOID = _relObj.ToOID
     });
     _relObj.Children.ForEach(item =>
     {
         item.Level = _relObj.Level + 1;
         //item.FromData = PmsProcessRepository.SelPmsProcess(new PmsProcess { OID = item.FromOID });
         //item.ToData = PmsProcessRepository.SelPmsProcess(new PmsProcess { OID = item.ToOID });
         PmsProcess tmpFromData = PmsProcessRepository.SelPmsProcess(new PmsProcess {
             OID = item.FromOID
         });
         PmsProcess tmpToData = PmsProcessRepository.SelPmsProcess(new PmsProcess {
             OID = item.ToOID
         });
         item.ObjName     = tmpToData.Name;
         item.Description = tmpToData.Description;
         item.ObjType     = tmpToData.Type;
         item.EstDuration = tmpToData.EstDuration;
         item.EstStartDt  = tmpToData.EstStartDt != null ? Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", tmpToData.EstStartDt)) : tmpToData.EstStartDt;
         item.EstEndDt    = tmpToData.EstEndDt != null ? Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", tmpToData.EstEndDt)) : tmpToData.EstEndDt;
         item.ActDuration = tmpToData.ActDuration;
         item.ActStartDt  = tmpToData.ActStartDt != null ? Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", tmpToData.ActStartDt)) : tmpToData.ActStartDt;
         item.ActEndDt    = tmpToData.ActEndDt != null ? Convert.ToDateTime(string.Format("{0:yyyy-MM-dd}", tmpToData.ActEndDt)) : tmpToData.ActEndDt;
         item.ObjSt       = tmpToData.BPolicyOID;
         item.ObjStNm     = tmpToData.BPolicy.StatusNm;
         item.Id          = tmpToData.Id;
         item.Dependency  = tmpToData.Dependency;
         item.Complete    = tmpToData.Complete;
         item.WorkingDay  = _workingDay;
         item.Members     = new List <PmsRelationship>();
         PmsRelationshipRepository.SelPmsRelationship(new PmsRelationship {
             FromOID = item.ToOID, Type = PmsConstant.RELATIONSHIP_MEMBER
         }).ForEach(member =>
         {
             Person person = PersonRepository.SelPerson(new Person {
                 OID = member.ToOID
             });
             item.Members.Add(new PmsRelationship {
                 FromOID = item.ToOID, ToOID = person.OID, PersonNm = person.Name, Thumbnail = person.Thumbnail
             });
             person = null;
         });
         if (_proj.BPolicy.Name == PmsConstant.POLICY_PROJECT_PREPARE || _proj.BPolicy.Name == PmsConstant.POLICY_PROJECT_PAUSED)
         {
         }
         else
         {
             item.diseditable = PmsConstant.DISEDITABLE;
         }
         if (tmpToData.BPolicy.Name == PmsConstant.POLICY_PROCESS_PAUSED)
         {
             if (tmpToData.ActEndDt != null)
             {
                 item.Delay = PmsUtils.CalculateDelay(Convert.ToDateTime(tmpToData.EstEndDt), Convert.ToDateTime(tmpToData.ActEndDt), Convert.ToInt32(_proj.WorkingDay), _lHoliday);
             }
             else
             {
                 item.Delay = PmsUtils.CalculateDelay(Convert.ToDateTime(tmpToData.EstEndDt), DateTime.Now, Convert.ToInt32(_proj.WorkingDay), _lHoliday);
             }
         }
         GetWbsStructure(item, _projOID, _workingDay, _holiday, _proj, _lHoliday);
     });
 }