예제 #1
0
        public static OrgInfo getOrgInfo(OrgChart manager, OrgChart reportOne, OrgChart reportTwo)
        {
            int numImportantReports = 0;

            foreach (OrgChart directReport in manager.directReports)
            {
                OrgInfo orgInfo = getOrgInfo(directReport, reportOne, reportTwo);
                if (orgInfo.lowestCommonManager != null)
                {
                    return(orgInfo);
                }
                numImportantReports += orgInfo.numImportantReports;
            }

            if (manager == reportOne || manager == reportTwo)
            {
                numImportantReports++;
            }

            OrgChart lowestCommonManager = numImportantReports == 2 ? manager : null;

            OrgInfo newOrgInfo = new OrgInfo(lowestCommonManager, numImportantReports);

            return(newOrgInfo);
        }
예제 #2
0
파일: Sec_UserBL.cs 프로젝트: swigithub/MVC
        private List <OrgChart> DataTableToList(DataTable dt, string name)
        {
            List <OrgChart> lstUsers = new List <OrgChart>();

            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    OrgChart User = new OrgChart();
                    User.UserId     = DataType.ToInt64(dt.Rows[i]["UserId"].ToString());
                    User.CompanyId  = DataType.ToInt64(dt.Rows[i]["CompanyId"].ToString());
                    User.ReportToId = DataType.ToInt64(dt.Rows[i]["ReportToId"].ToString());
                    User.Id         = DataType.ToInt32(dt.Rows[i]["UserId"].ToString());
                    User.FirstName  = dt.Rows[i]["FirstName"].ToString();
                    User.LastName   = dt.Rows[i]["LastName"].ToString();
                    if (dt.Columns.Contains("ModifyDate") && !string.IsNullOrEmpty(dt.Rows[i]["ModifyDate"].ToString()))
                    {
                        User.Update_at = DateTime.Parse(dt.Rows[i]["ModifyDate"].ToString());
                    }
                    User.Picture      = dt.Columns.Contains("Picture") ? dt.Rows[i]["Picture"].ToString() : null;
                    User.UserName     = dt.Columns.Contains("UserName") ? dt.Rows[i]["UserName"].ToString() : null;
                    User.Email        = dt.Columns.Contains("Email") ? dt.Rows[i]["Email"].ToString() : null;
                    User.Address      = dt.Columns.Contains("Address") ? dt.Rows[i]["Address"].ToString() : null;
                    User.Contact      = dt.Columns.Contains("Contact") ? dt.Rows[i]["Contact"].ToString() : null;
                    User.ActiveStatus = dt.Columns.Contains("IsActive") ? bool.Parse(dt.Rows[i]["IsActive"].ToString()) : false;
                    User.RoleId       = (dt.Columns.Contains("RoleId")) ? Convert.ToInt32(dt.Rows[i]["RoleId"].ToString()) : 0;
                    User.RoleName     = (dt.Columns.Contains("RoleName")) ? dt.Rows[i]["RoleName"].ToString() : "";
                    User.ClientName   = (dt.Columns.Contains("ClientName")) ? dt.Rows[i]["ClientName"].ToString() : "";
                    User.ReportTo     = (dt.Columns.Contains("ReportTo")) ? dt.Rows[i]["ReportTo"].ToString() : "";
                    User.Designation  = (dt.Columns.Contains("Designation")) ? dt.Rows[i]["Designation"].ToString() : "";
                    lstUsers.Add(User);
                }
            }
            return(lstUsers);
        }
예제 #3
0
        private int PopulateOrgChart(Person person, int currentDepth, OrgChart node)
        {
            if (person != null)
            {
                int           maxdepth     = currentDepth;
                List <Person> subordinates = Data.Where(x => x.BossId == person.Id).ToList();
                if (subordinates != null)
                {
                    foreach (var subordinate in subordinates)
                    {
                        maxdepth = currentDepth + 1;
                        //var temp = new OrgChart { Name = person.GivenName + " " + person.FamilyName + "(" + person.Title + ")", Subordinates = new List<OrgChart>() };
                        var subordinateOrgChart = new OrgChart {
                            Name = subordinate.GivenName + " " + subordinate.FamilyName + "(" + subordinate.Title + ")", Subordinates = new List <OrgChart>()
                        };
                        node.Subordinates.Add(subordinateOrgChart);
                        int depth = PopulateOrgChart(subordinate, maxdepth, subordinateOrgChart);
                        if (depth > maxdepth)
                        {
                            maxdepth = depth;
                        }
                    }
                }

                return(maxdepth);
            }
            return(0);
        }
		public override string GetDesignTimeHtml() 
		{

			StringWriter sw = new StringWriter();
			HtmlTextWriter writer = new HtmlTextWriter(sw);

			//HtmlTextWriterStyle.Width
			//writer.AddStyleAttribute ( HtmlTextWriterStyle.Width ,);
			
			wb=(OrgChart)Component;
			//wb.RecordCount=225;
			wb.RenderControl(writer);
			//wb.RenderEndTag (writer);

			/*
			writer.Write("<table bgcolor=silver width=100% cellpadding=2 cellspacing=0 border=1 style='border-collapse:collapse;'>");
			writer.Write("<tr><td valign='top'>");
			writer.Write("<div>组织结构图</div>");
			writer.Write("</td><tr>");
			writer.Write("<tr><td valign='top'>");
			writer.Write("Version 1.0.0.0,2004.10," + this.AllowResize.ToString () );
			writer.Write("</td><tr>");
			writer.Write("</td></tr></table>");
			*/

			return sw.ToString();

		}
예제 #5
0
        private text Text(OrgChart l)
        {
            text a = new text();

            a.contact = l.Contact;
            a.name    = l.FirstName + " " + l.LastName + "???" + "/User/Edit?Id=" + l.Id;
            a.title   = l.Designation;
            return(a);
        }
        public void GetOrgChartForExistingPersonWithMOQ()
        {
            Mock <PersonDataAccess> mockPersonDataAccess = new Mock <PersonDataAccess>();
            UserController          _controller          = new UserController(mockPersonDataAccess.Object);

            var orgChart = new OrgChart();
            int depth;

            mockPersonDataAccess.Setup(i => i.GetOrgChart(1, out depth)).Returns(orgChart);

            var orgChartFromController = _controller.GetOrgChart(1) as JsonResult <OrgChart>;

            Assert.AreEqual(orgChart, orgChartFromController.Content);
        }
예제 #7
0
        /// <summary>
        /// Generated Org chart that reports to the specified person
        /// </summary>
        /// <param name="personId"></param>
        /// <param name="depth">Depth of the Org tree</param>
        /// <returns></returns>

        //Method made virtual for MOQ support
        public virtual OrgChart GetOrgChart(int personId, out int depth)
        {
            Person person = Data.Find(x => x.Id == personId);

            depth = 0;
            if (person != null)
            {
                OrgChart org = new OrgChart {
                    Name = person.GivenName + " " + person.FamilyName + "(" + person.Title + ")", Subordinates = new List <OrgChart>()
                };
                depth = PopulateOrgChart(person, 0, org);
                return(org);
            }
            return(null);
        }
예제 #8
0
        public void DisplayEmployeeHierarchy(IList <Employee> employees)
        {
            OrgChart.Nodes.Clear();

            foreach (Employee employee in employees)
            {
                TreeNode         node     = GetNode(employee);
                IList <TreeNode> children = GetChildren(employee);
                foreach (TreeNode childNode in children)
                {
                    node.Nodes.Add(childNode);
                }
                OrgChart.Nodes.Add(node);
            }
            OrgChart.ExpandAll();
        }
예제 #9
0
        protected void SetOrgObjectItemDate(AuxiliaryItem OrgObjItem, string sItemFldName, DateTime dtDat)
        {
            ItemField Fld = null;

            //--- Get the item field name
            Fld = GetSBMItemFieldByDatabaseName(OrgObjItem, sItemFldName);

            //--- Set the null value or date value to the item field
            if (OrgChart.IsNullDate(dtDat))
            {
                Fld.SetNullValue();
            }
            else
            {
                Fld.SetDateOnlyValue(dtDat);
            }
        }
예제 #10
0
 public IHttpActionResult GetOrgChart(int personId)
 {
     try
     {
         int      orgDepth = 0;
         OrgChart orgChart = _personDataAccess.GetOrgChart(personId, out orgDepth);
         if (orgChart == null)
         {
             return(Content(HttpStatusCode.NotFound, "The Org Chart could not be found"));
         }
         return(Json(orgChart));
     }
     catch (Exception ex)
     {
         //We can add some logging here in production environment
         return(InternalServerError(ex));
     }
 }
예제 #11
0
        public ActionResult EditPrecedence(OrgChart Org)
        {
            DSRCManagementSystemEntities1 db = new DSRCManagementSystemEntities1();
            var UpdatePrecedenceOrder        = db.OrgCharts.FirstOrDefault(x => x.UserID == Org.UserID);
            var PrecedenceOrderCheck         = db.OrgCharts.FirstOrDefault(x => x.DepartmentID == Org.DepartmentID && x.PrecedenceOrder == Org.PrecedenceOrder);

            //var ExistingPrecedenceOrder = db.OrgCharts.FirstOrDefault(x => x.PrecedenceOrder == Org.PrecedenceOrder);
            if (PrecedenceOrderCheck == null)
            {
                if (TryUpdateModel(UpdatePrecedenceOrder))
                {
                    db.SaveChanges();
                }
                return(Json(new { Result = "Success", URL = @Url.Action("AlertPopUp", "Popup") }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json(new { Result = "PrecedenceOrderCheck", URL = @Url.Action("AlertPopUp", "Popup") }, JsonRequestBehavior.AllowGet));
            }
        }
예제 #12
0
        public IHttpActionResult GetOrgChartDepth()
        {
            try
            {
                int      depth    = 0;
                OrgChart orgChart = _personDataAccess.GetOrgChart(1, out depth);
                if (orgChart == null)
                {
                    return(Content(HttpStatusCode.NotFound, "The Org Chart depth could not be found"));
                }

                //return Json(new { Depth = depth });
                //return Json(depth);
                return(Content(HttpStatusCode.OK, depth));
            }
            catch (Exception ex)
            {
                //We can add some logging here in production environment
                return(InternalServerError(ex));
            }
        }
 public static OrgChart GetLowestCommonManager(OrgChart topManager, OrgChart reportOne,
                                               OrgChart reportTwo)
 {
     return(getOrgInfo(topManager, reportOne, reportTwo).lowestCommonManager);
 }
 public OrgInfo(OrgChart lowestCommonManager, int numImportantReports)
 {
     this.lowestCommonManager = lowestCommonManager;
     this.numImportantReports = numImportantReports;
 }
예제 #15
0
 public static OrgChart GetLowestCommonManager(OrgChart topManager, OrgChart reportOne,
                                               OrgChart reportTwo)
 {
     // Write your code here.
     return(getOrgInfo(topManager, reportOne, reportTwo).lowestCommonManager);            // Replace this line.
 }
예제 #16
0
 public ActionResult CreatePrecedence(OrgPrecedence OrgChart)
 {
     ViewBag.Lbl_department = CommonLogic.getLabelName(2).ToString();
     ViewBag.Lbl_depgroup   = CommonLogic.getLabelName(3).ToString();
     try
     {
         DSRCManagementSystemEntities1 db = new DSRCManagementSystemEntities1();
         var DepartmentList      = db.Departments.ToList();
         var UserNameFilteration = db.Users.ToList();
         ViewBag.DepartmentIdList = new SelectList(DepartmentList, "DepartmentId", "DepartmentName");
         ViewBag.FirstNameList    = new SelectList(UserNameFilteration, "UserID", "FirstName");
         var NameAndPrecedenceCheck    = db.OrgCharts.FirstOrDefault(x => x.UserID == OrgChart.UserID && x.PrecedenceOrder == OrgChart.PrecedenceOrder);
         var DepartmentPrecedenceCheck = db.OrgCharts.FirstOrDefault(x => x.DepartmentID == OrgChart.DepartmentID && x.PrecedenceOrder == OrgChart.PrecedenceOrder);
         var UserNameCheck             = db.OrgCharts.FirstOrDefault(x => x.UserID == OrgChart.UserID);
         if (OrgChart.UserID != 0)
         {
             if (UserNameCheck == null)
             {
                 if (DepartmentPrecedenceCheck == null)
                 {
                     if (NameAndPrecedenceCheck == null)
                     {
                         if (ModelState.IsValid)
                         {
                             var t = new OrgChart
                             {
                                 UserID          = OrgChart.UserID,
                                 DepartmentID    = OrgChart.DepartmentID,
                                 PrecedenceOrder = OrgChart.PrecedenceOrder
                             };
                             db.OrgCharts.AddObject(t);
                             db.SaveChanges();
                             return(Json(new { Result = "Success", URL = @Url.Action("AlertPopUp", "Popup") }, JsonRequestBehavior.AllowGet));
                         }
                     }
                     else
                     {
                         return(Json("ExistingPrecedenceOrder", JsonRequestBehavior.AllowGet));
                     }
                 }
                 else
                 {
                     return(Json("ExistingDepartmentPrecedenceCheck", JsonRequestBehavior.AllowGet));
                 }
             }
             else
             {
                 return(Json("UserNameCheck", JsonRequestBehavior.AllowGet));
             }
         }
         else
         {
             return(Json("EmployeeCheck", JsonRequestBehavior.AllowGet));
         }
     }
     catch (Exception Ex)
     {
         string actionName     = this.ControllerContext.RouteData.Values["action"].ToString();
         string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
         ExceptionHandlingController.ExceptionDetails(Ex, actionName, controllerName);
     }
     return(View());
 }
예제 #17
0
        public override void Run()
        {
/*TEST
 * Library.Windows.Windows.Pause(20000);
 * return;
 */

            OrgChart      SAPOrgCha = null;
            OrgObject     SAPOrgObj = null;
            Table         Tab = null;
            AuxiliaryItem OrgChaItem = null, OrgObjItem = null;
            UserList      UsrLst = null;
            User          Usr    = null;
            Hashtable     UsrTab = null;
            ItemList
                OrgChaItemLst = null,
                UnitItemLst   = null,
                PosItemLst    = null,
                PerItemLst    = null,
                CosCenItemLst = null,
                OrgObjItemLst = null;
            int
                nPerNum  = Global.IntegerNull,
                nProgIdx = Global.IntegerNull,
                nAllCnt  = Global.IntegerNull;

            //--- Create a new start import message
            CreateMessage(ProgressMessage.enMessageState.Info, ProgMsg_StartImpSAPOrgCha);

            //--- Read the SAP org-chart
            SAPOrgCha = new OrgChart();
            SAPOrgCha = OrgChart.FromSAPFiles(ObjectFileWatcher.FileName, ReferenceFileWatcher.FileName);

            //--- Create a new read server users message
            CreateMessage(ProgressMessage.enMessageState.Info, ProgMsg_ReadOrgObjsSvr.Replace("%svr%", GetServer().ServerName));

            //--- Read the users
            UsrLst = ReadAllSBMUsers();

            //--- Init the user table and the AD user info
            UsrTab = new Hashtable();

            //--- Add the user to the user table
            for (int nIdx = 0; nIdx < UsrLst.Count; nIdx++)
            {
                //--- Get the user and the personnel number
                Usr     = UsrLst[nIdx];
                nPerNum = String.IsNullOrEmpty(Usr.GetEmailCC()) ? 0 : Convert.ToInt32(Usr.GetEmailCC());

                //--- Check personnel number not exists
                if (nPerNum == 0)
                {
                    continue;
                }
                //--- Check user exists in the user table
                else if (UsrTab[nPerNum] == null)
                {
                    UsrTab.Add(nPerNum, Usr);
                }
                else
                {
                    //--- Create a new start import message
                    CreateMessage
                    (
                        ProgressMessage.enMessageState.Warning,
                        ProgMsg_UsrPerNumExi
                        .Replace("%usr%", Usr.GetDisplayName())
                        .Replace("%num%", nPerNum.ToString())
                    );
                }
            }

            //--- Read the orag objects
            OrgChaItemLst = ReadSBMItems(TabName_OrgCha, SQLWhere_OrgCha_NumSky.Replace("%num%", FldVal_OrgCha_Num_Sky.ToString()));
            UnitItemLst   = ReadSBMItems(TabName_Unit);
            PosItemLst    = ReadSBMItems(TabName_Pos);
            PerItemLst    = ReadSBMItems(TabName_Per);
            CosCenItemLst = ReadSBMItems(TabName_CosCen);

            //--- Find the org-chart item wit the Sky number
            OrgChaItem = (AuxiliaryItem)OrgChaItemLst.FindByItemFieldValue(FldName_OrgCha_Num, FieldList.enFieldIdent.DatabaseName, FldVal_OrgCha_Num_Sky);

            //--- Check org-chart item exists
            if (OrgChaItem == null)
            {
                //--- Init the Sky org-chart and add to the org-chart items
                OrgChaItem = GetSBMTable(TabName_OrgCha).NewAuxiliaryItem();
                OrgChaItemLst.Add(OrgChaItem);

                //--- Tag the org-chart item for create
                OrgChaItem.Tag = enAction.Create;
            }
            //--- Tag the org-chart item for update
            else
            {
                OrgChaItem.Tag = enAction.Update;
            }

            //--- Update the org-chart item values
            GetSBMItemFieldByDatabaseName(OrgChaItem, FldName_OrgCha_Num).SetIntegerValue(FldVal_OrgCha_Num_Sky);
            OrgChaItem.SetActive(true);

            //--- Create a new read AD users message
            CreateMessage(ProgressMessage.enMessageState.Info, ProgMsg_ImpSAPOrgObjs);

            //--- Import the SAP org-objects
            for (int nIdx = 0; nIdx < SAPOrgCha.OrgObjects.Count; nIdx++)
            {
                //--- Get the SAP object and the table
                SAPOrgObj = SAPOrgCha.OrgObjects[nIdx];
                Tab       = GetOrgObjectTable(SAPOrgObj.ObjectType);

                //--- Get the table name dependend on the SAP object type
                if (SAPOrgObj.ObjectType == OrgObject.enObjectType.Unit)
                {
                    OrgObjItemLst = UnitItemLst;
                }
                else if (SAPOrgObj.ObjectType == OrgObject.enObjectType.Position)
                {
                    OrgObjItemLst = PosItemLst;
                }
                else if (SAPOrgObj.ObjectType == OrgObject.enObjectType.Person)
                {
                    OrgObjItemLst = PerItemLst;
                }
                else if (SAPOrgObj.ObjectType == OrgObject.enObjectType.CostCenter)
                {
                    OrgObjItemLst = CosCenItemLst;
                }
                else
                {
                    throw new Exception(ErrMsg_InvSAPObjTyp.Replace("%typ%", SAPOrgObj.ObjectType.ToString()));
                }

                //--- Find the orga object item
                OrgObjItem = (AuxiliaryItem)OrgObjItemLst.FindByItemFieldValue(FldName_OrgObj_Num, FieldList.enFieldIdent.DatabaseName, SAPOrgObj.ObjectNumber);

                //--- Check org-object item exists
                if (OrgObjItem == null)
                {
                    //--- Init the orga object and add to the org-object items
                    OrgObjItem = Tab.NewAuxiliaryItem();
                    OrgObjItemLst.Add(OrgObjItem);

                    //--- Tag the org-object item with the crsate action
                    OrgObjItem.Tag = enAction.Create;
                }
                //--- Tag the org-object item with the update action
                else
                {
                    OrgObjItem.Tag = enAction.Update;
                }

                //--- Set the values
                OrgObjItem.SetTitle(SAPOrgObj.LongName);
                OrgObjItem.SetActive(SAPOrgObj.IsActiveNow());
                GetSBMItemFieldByDatabaseName(OrgObjItem, FldName_OrgObj_Num).SetIntegerValue(SAPOrgObj.ObjectNumber);
                SetOrgObjectItemDate(OrgObjItem, FldName_OrgObj_StartDat, SAPOrgObj.StartDate);
                SetOrgObjectItemDate(OrgObjItem, FldName_OrgObj_EndDat, SAPOrgObj.EndDate);

                //--- Check position obejct type
                if (SAPOrgObj.ObjectType == OrgObject.enObjectType.Position)
                {
                    GetSBMItemFieldByDatabaseName(OrgObjItem, FldName_Pos_JobID).SetTextValue(SAPOrgObj.ShortName);
                }
                //--- Check person object type
                else if (SAPOrgObj.ObjectType == OrgObject.enObjectType.Person)
                {
                    //--- Get the user
                    Usr = (User)UsrTab[SAPOrgObj.ObjectNumber];

                    //--- Set the user in the person item
                    if (Usr == null)
                    {
                        GetSBMItemFieldByDatabaseName(OrgObjItem, FldName_Per_Usr).SetNullValue();
                    }
                    else
                    {
                        GetSBMItemFieldByDatabaseName(OrgObjItem, FldName_Per_Usr).SetRelationalID(Usr.GetID());
                    }

                    //--- Set the user active dependend if the user exists and is active
                    OrgObjItem.SetActive(Usr != null ? !Usr.IsDeleted() : false);
                }

                //--- Tag the SAP org-object with the org-object item
                SAPOrgObj.Tag = OrgObjItem;
            }

            //--- Set the chart objects of the org-chart
            SetChartObjects(SAPOrgCha.ChartObjects, null, OrgChaItem);

            //--- Activate and tag the item lists
            ActivateOrgObjectItems(UnitItemLst, false, enAction.Delete);
            ActivateOrgObjectItems(PosItemLst, false, enAction.Delete);
            ActivateOrgObjectItems(PerItemLst, false, enAction.Delete);
            ActivateOrgObjectItems(CosCenItemLst, true, enAction.None);

            //--- Create a new read AD users message
            CreateMessage(ProgressMessage.enMessageState.Info, ProgMsg_AddOrUpdSAPOrgObjs);

            //--- Init the progress index and calculate the all count
            nProgIdx = 0;
            nAllCnt  = OrgChaItemLst.Count + UnitItemLst.Count + PosItemLst.Count + PerItemLst.Count + CosCenItemLst.Count;

            //--- Add or update the org-objects
            AddOrUpdateOrgObjItems(OrgChaItemLst, ObjTypStr_OrgCha, ref nProgIdx, nAllCnt);
            AddOrUpdateOrgObjItems(UnitItemLst, OrgObject.enObjectType.Unit.ToString(), ref nProgIdx, nAllCnt);
            AddOrUpdateOrgObjItems(PosItemLst, OrgObject.enObjectType.Position.ToString(), ref nProgIdx, nAllCnt);
            AddOrUpdateOrgObjItems(PerItemLst, OrgObject.enObjectType.Person.ToString(), ref nProgIdx, nAllCnt);
            AddOrUpdateOrgObjItems(CosCenItemLst, OrgObject.enObjectType.CostCenter.ToString(), ref nProgIdx, nAllCnt);

            //--- Create a new message
            CreateMessage(ProgressMessage.enMessageState.Info, ProgMsg_FinImpADUsrs, nAllCnt, nAllCnt);
        }