public void TestSetup() { busChnageInfo = new BChangeOrganicInfo(); person_testObject = new Person(); infoProxy = new OrganicInfoProxy(); errorList = new List <ChangeInfoErrorProxy>(); workgrpTA.Insert("WorkGroupTest1", "0-0", 0); workgrpTA.Insert("WorkGroupTest2", "0-1", 0); DatabaseGateway.TA_WorkGroupDataTable table = new DatabaseGateway.TA_WorkGroupDataTable(); DatabaseGateway.TA_CalculationRangeGroupDataTable dateRangeGroupTable = new DatabaseGateway.TA_CalculationRangeGroupDataTable(); DatabaseGateway.TA_RuleCategoryDataTable ruleTable = new DatabaseGateway.TA_RuleCategoryDataTable(); workgrpTA.FillByName(table, "WorkGroupTest1"); ADOWorkGroup1.ID = Convert.ToInt32(table.Rows[0]["workgroup_ID"]); ADOWorkGroup1.Name = Convert.ToString(table.Rows[0]["workgroup_Name"]); ADOWorkGroup1.CustomCode = Convert.ToString(table.Rows[0]["workgroup_CustomCode"]); workgrpTA.FillByName(table, "WorkGroupTest2"); ADOWorkGroup2.ID = Convert.ToInt32(table.Rows[0]["workgroup_ID"]); ADOWorkGroup2.Name = Convert.ToString(table.Rows[0]["workgroup_Name"]); ADOWorkGroup2.CustomCode = Convert.ToString(table.Rows[0]["workgroup_CustomCode"]); assignWorkGroupTA.Insert(ADOWorkGroup1.ID, ADOPerson1.ID, new DateTime(2011, 01, 01)); dateRangeGroupTA.Insert("RangeGroup1", "", 1); dateRangeGroupTA.Insert("RangeGroup2", "", 1); dateRangeGroupTA.FillByGroupName(dateRangeGroupTable, "RangeGroup1"); ADOGroup1.ID = Convert.ToDecimal(dateRangeGroupTable.Rows[0]["CalcRangeGroup_ID"]); ADOGroup1.Name = Convert.ToString(dateRangeGroupTable.Rows[0]["CalcRangeGroup_Name"]); ADOGroup1.Description = Convert.ToString(dateRangeGroupTable.Rows[0]["CalcRangeGroup_Des"]); dateRangeGroupTA.FillByGroupName(dateRangeGroupTable, "RangeGroup2"); ADOGroup2.ID = Convert.ToDecimal(dateRangeGroupTable.Rows[0]["CalcRangeGroup_ID"]); ADOGroup2.Name = Convert.ToString(dateRangeGroupTable.Rows[0]["CalcRangeGroup_Name"]); ADOGroup2.Description = Convert.ToString(dateRangeGroupTable.Rows[0]["CalcRangeGroup_Des"]); assinTA.Insert(ADOPerson1.ID, ADOGroup1.ID, new DateTime(2011, 01, 01)); ruleCatTA.Insert("RuleGroupTest1", "0000", false, "00-00test1"); ruleCatTA.Insert("RuleGroupTest2", "0000", false, "00-00test1"); ruleTable = ruleCatTA.GetDataByName("RuleGroupTest1"); ADORuleCat1.ID = (Decimal)ruleTable[0]["RuleCat_ID"]; ADORuleCat1.Name = (String)ruleTable[0]["RuleCat_Name"]; ruleTable = ruleCatTA.GetDataByName("RuleGroupTest2"); ADORuleCat2.ID = (Decimal)ruleTable[0]["RuleCat_ID"]; ADORuleCat2.Name = (String)ruleTable[0]["RuleCat_Name"]; ruleTA.Insert(0001, "", "", "", null, false, ADORuleCat1.ID, Utility.ToInteger(ruleTypeTA.GetData().Rows[0][0]), 0); ruleTA.Insert(0001, "", "", "", null, false, ADORuleCat2.ID, Utility.ToInteger(ruleTypeTA.GetData().Rows[0][0]), 0); prsRleCatAsgTA.Insert(ADOPerson1.ID, ADORuleCat2.ID, "2011/01/01", "2011/06/01", null); }
private OrganicInfoProxy CreatePersonnelOrganizationFeaturesTarget(string StrObjPersonnelOrganizationFeaturesTarget) { OrganicInfoProxy PersonnelOrganizationFeaturesTargetProxy = new OrganicInfoProxy(); Dictionary <string, object> ParamDic = (Dictionary <string, object>) this.JsSerializer.DeserializeObject(StrObjPersonnelOrganizationFeaturesTarget); if (decimal.Parse(ParamDic["DepartmentID"].ToString(), CultureInfo.InvariantCulture) != -1) { PersonnelOrganizationFeaturesTargetProxy.DepartmentID = decimal.Parse(ParamDic["DepartmentID"].ToString(), CultureInfo.InvariantCulture); } if (decimal.Parse(ParamDic["EmployTypeID"].ToString(), CultureInfo.InvariantCulture) != -1) { PersonnelOrganizationFeaturesTargetProxy.EmploymentTypeID = decimal.Parse(ParamDic["EmployTypeID"].ToString(), CultureInfo.InvariantCulture); } if (decimal.Parse(ParamDic["WorkGroupID"].ToString(), CultureInfo.InvariantCulture) != -1) { PersonnelOrganizationFeaturesTargetProxy.WorkGroupID = decimal.Parse(ParamDic["WorkGroupID"].ToString(), CultureInfo.InvariantCulture); } if (ParamDic["WorkGroupFromDate"].ToString() != string.Empty) { PersonnelOrganizationFeaturesTargetProxy.WorkGroupFromDate = ParamDic["WorkGroupFromDate"].ToString(); } if (decimal.Parse(ParamDic["CalculationRangeID"].ToString(), CultureInfo.InvariantCulture) != -1) { PersonnelOrganizationFeaturesTargetProxy.DateRangeID = decimal.Parse(ParamDic["CalculationRangeID"].ToString(), CultureInfo.InvariantCulture); } if (ParamDic["CalculationRangeFromDate"].ToString() != string.Empty) { PersonnelOrganizationFeaturesTargetProxy.DateRangeFromDate = ParamDic["CalculationRangeFromDate"].ToString(); } if (decimal.Parse(ParamDic["RuleGroupID"].ToString(), CultureInfo.InvariantCulture) != -1) { PersonnelOrganizationFeaturesTargetProxy.RuleGroupID = decimal.Parse(ParamDic["RuleGroupID"].ToString(), CultureInfo.InvariantCulture); } if (ParamDic["RuleGroupFromDate"].ToString() != string.Empty) { PersonnelOrganizationFeaturesTargetProxy.RuleGroupFromDate = ParamDic["RuleGroupFromDate"].ToString(); } if (ParamDic["RuleGroupToDate"].ToString() != string.Empty) { PersonnelOrganizationFeaturesTargetProxy.RuleGroupToDate = ParamDic["RuleGroupToDate"].ToString(); } if (decimal.Parse(ParamDic["ContractID"].ToString(), CultureInfo.InvariantCulture) != -1) { PersonnelOrganizationFeaturesTargetProxy.ContractID = decimal.Parse(ParamDic["ContractID"].ToString(), CultureInfo.InvariantCulture); } if (ParamDic["ContractFromDate"].ToString() != string.Empty) { PersonnelOrganizationFeaturesTargetProxy.ContractFromDate = ParamDic["ContractFromDate"].ToString(); } if (ParamDic["ContractToDate"].ToString() != string.Empty) { PersonnelOrganizationFeaturesTargetProxy.ContractToDate = ParamDic["ContractToDate"].ToString(); } return(PersonnelOrganizationFeaturesTargetProxy); }
public void ChangeInfo_AsgWrkGrp_LessDate() { OrganicInfoProxy infoProxy = new OrganicInfoProxy(); infoProxy.WorkGroupID = ADOWorkGroup2.ID; infoProxy.WorkGroupFromDate = Utility.ToPersianDate(new DateTime(2010, 12, 01)); IList <ChangeInfoErrorProxy> errorList = new List <ChangeInfoErrorProxy>(); bool result = busChnageInfo.ChangeInfo(ADOPerson1.PersonCode, infoProxy, out errorList); Assert.IsFalse(result); Assert.IsTrue(errorList.Count > 0); Assert.IsTrue(errorList.Where(x => x.PersonCode == ADOPerson1.PersonCode).Count() > 0); }
protected void Button49_Click(object sender, EventArgs e) { PersonAdvanceSearchProxy pas = new PersonAdvanceSearchProxy() { RuleGroupId = 26, PersonActivateState = true }; IList <ChangeInfoErrorProxy> msg = new List <ChangeInfoErrorProxy>(); OrganicInfoProxy info = new OrganicInfoProxy() { RuleGroupID = 27, RuleGroupFromDate = "1392/07/01" /*, RuleGroupToDate = "1392/08/01"*/ }; BChangeOrganicInfo bus = new BChangeOrganicInfo(); bus.ChangeInfo(pas, info, out msg); }
/// <summary> /// تغییر مشخصات سازمانی /// </summary> /// <param name="searchKey">عبارت جستجو</param> /// <param name="infoProxy">پروکسی مشخصات سازمانی</param> /// <param name="errorList">خروجی لیست خطاها</param> /// <returns>وضعیت انجام عملیات</returns> public bool ChangeInfo(string searchKey, OrganicInfoProxy infoProxy, out IList <ChangeInfoErrorProxy> errorList) { int count = searchTool.GetPersonInQuickSearchCount(searchKey); IList <Person> list = searchTool.QuickSearchByPage(0, count, searchKey); bool result = this.ChangeInfo(list, infoProxy, out errorList); if (!result) { foreach (ChangeInfoErrorProxy error in errorList) { BaseBusiness <Entity> .LogException(new Exception(error.ToString())); } } return(result); }
/// <summary> /// تغییر مشخصات سازمانی /// </summary> /// <param name="proxy"></param> /// public bool ChangeInfo(PersonAdvanceSearchProxy proxy, OrganicInfoProxy infoProxy, out IList <ChangeInfoErrorProxy> errorList) { int count = searchTool.GetPersonInAdvanceSearchCount(proxy); IList <Person> list = searchTool.GetPersonInAdvanceSearch(proxy, 0, count); bool result = this.ChangeInfo(list, infoProxy, out errorList); if (!result) { foreach (ChangeInfoErrorProxy error in errorList) { BaseBusiness <Entity> .LogException(new Exception(error.ToString())); } } return(result); }
/// <summary> /// تغییر مشخصات سازمانی پرسنل تحت مدیریت /// </summary> /// <param name="personList">لیست پرسنل</param> /// <param name="infoProxy">پروکسی مشخصات سازمانی</param> private void UpdateUnderManagement(IList <Person> personList, OrganicInfoProxy infoProxy) { try { if (infoProxy.DepartmentID != 0) { IQuery query = null; List <decimal> personIdList = new List <decimal>(); string operationGUID = string.Empty; string SQLCommand = string.Empty; operationGUID = string.Empty; foreach (Person person in personList) { personIdList.Add(person.ID); } if (personList.Count < this.operationBatchSizeValue && this.operationBatchSizeValue < 2100) { SQLCommand = @"Update TA_UnderManagment SET underMng_DepartmentID =:DepartmentId WHERE underMng_PersonID in (:PersonList)"; query = NHibernateSessionManager.Instance.GetSession().CreateSQLQuery(SQLCommand); query.SetParameter("DepartmentId", infoProxy.DepartmentID); query.SetParameterList("PersonList", personIdList); query.ExecuteUpdate(); } else { TempRepository temprepository = new TempRepository(false); operationGUID = temprepository.InsertTempList(personIdList); // SQLCommand = @"Update TA_UnderManagment SET underMng_DepartmentID =:DepartmentId WHERE underMng_PersonId in // (select prs_Id from TA_Person Inner join TA_Temp on prs_Id = temp_ObjectID WHERE temp_OperationGUID =:operationGUID)"; SQLCommand = @"Update underMng SET underMng_DepartmentID =:DepartmentId from TA_UnderManagment underMng inner join TA_Person person on underMng.underMng_PersonId = person.prs_Id inner join TA_Temp temp on person.prs_Id = temp.temp_ObjectID and temp.temp_OperationGUID =:operationGUID"; query = NHibernateSessionManager.Instance.GetSession().CreateSQLQuery(SQLCommand); query.SetParameter("DepartmentId", infoProxy.DepartmentID); query.SetParameter("operationGUID", operationGUID); query.ExecuteUpdate(); temprepository.DeleteTempList(operationGUID); } } } catch (Exception ex) { BaseBusiness <Entity> .LogException(ex, "BChangeOrganicInfo", "UpdateUnderManagement"); throw ex; } }
public bool ChangeInfo(decimal personId, OrganicInfoProxy infoProxy, out IList <ChangeInfoErrorProxy> errorList) { Person prs = new BPerson().GetByID(personId); IList <Person> list = new List <Person>(); list.Add(prs); bool result = this.ChangeInfo(list, infoProxy, out errorList); if (!result) { foreach (ChangeInfoErrorProxy error in errorList) { BaseBusiness <Entity> .LogException(new Exception(error.ToString())); } } return(result); }
/// <summary> /// تغییر مشخصات سازمانی /// </summary> /// <param name="personId">کلید پرسنل</param> /// <param name="infoProxy">پروکسی مشخصات سازمانی</param> /// <param name="errorList">خروجی لیست خطاها</param> /// <returns>وضعیت انجام عملیات</returns> public bool ChangeInfo(decimal personId, OrganicInfoProxy infoProxy, out IList <ChangeInfoErrorProxy> errorList) { //Person prs = new BPerson().GetByID(personId); //NHibernateSessionManager.Instance.ClearSession(); //Person prs = new Person() { ID = personId, PersonTASpec = (new BPerson()).GetPersonTASpecByID(personId)}; PersonAdvanceSearchProxy proxy = new PersonAdvanceSearchProxy(); proxy.PersonId = personId; //IList<Person> list = new List<Person>(); //list.Add(prs); bool result = this.ChangeInfo(proxy, infoProxy, out errorList); //if (!result) // foreach (ChangeInfoErrorProxy error in errorList) // { // BaseBusiness<Entity>.LogException(new Exception(error.ToString())); // } return(result); }
public string[] UpdatePersonnelOrganizationFeature_PersonnelOrganizationFeaturesChangePage(string PersonnelLoadState, string PersonnelID, string SearchTerm, string StrObjPersonnelOrganizationFeaturesTarget) { this.InitializeCulture(); string[] retMessage = new string[4]; try { bool OperationState = false; LoadState Ls = (LoadState)Enum.Parse(typeof(LoadState), this.StringBuilder.CreateString(PersonnelLoadState)); decimal personnelID = decimal.Parse(this.StringBuilder.CreateString(PersonnelID)); SearchTerm = this.StringBuilder.CreateString(SearchTerm); OrganicInfoProxy PersonnelOrganizationFeaturesTargetProxy = this.CreatePersonnelOrganizationFeaturesTarget(this.StringBuilder.CreateString(StrObjPersonnelOrganizationFeaturesTarget)); IList <ChangeInfoErrorProxy> PersonnelProblemsList = null; if (personnelID == -1) { switch (Ls) { case LoadState.Normal: retMessage = this.exceptionHandler.HandleException(this.Page, ExceptionTypes.Exception, new Exception(GetLocalResourceObject("NoPersonnelSelected").ToString()), retMessage); break; case LoadState.Search: OperationState = this.PersonnelOrganizationFeaturesBusiness.ChangeInfo(SearchTerm, PersonnelOrganizationFeaturesTargetProxy, out PersonnelProblemsList); break; case LoadState.AdvancedSearch: OperationState = this.PersonnelOrganizationFeaturesBusiness.ChangeInfo(this.APSProv.CreateAdvancedPersonnelSearchProxy(SearchTerm), PersonnelOrganizationFeaturesTargetProxy, out PersonnelProblemsList); break; } } else { OperationState = this.PersonnelOrganizationFeaturesBusiness.ChangeInfo(personnelID, PersonnelOrganizationFeaturesTargetProxy, out PersonnelProblemsList); } if (OperationState) { retMessage[0] = GetLocalResourceObject("RetSuccessType").ToString(); retMessage[1] = GetLocalResourceObject("OperationComplete").ToString(); retMessage[2] = "success"; } else { retMessage[0] = GetLocalResourceObject("RetErrorType").ToString(); retMessage[1] = GetLocalResourceObject("OperationNotComplete").ToString(); retMessage[2] = "error"; } retMessage[3] = OperationState.ToString().ToLower(); return(retMessage); } catch (UIValidationExceptions ex) { retMessage = this.exceptionHandler.HandleException(this.Page, ExceptionTypes.UIValidationExceptions, ex, retMessage); return(retMessage); } catch (UIBaseException ex) { retMessage = this.exceptionHandler.HandleException(this.Page, ExceptionTypes.UIBaseException, ex, retMessage); return(retMessage); } catch (Exception ex) { retMessage = this.exceptionHandler.HandleException(this.Page, ExceptionTypes.Exception, ex, retMessage); return(retMessage); } }
/// <summary> /// تغییر مشخصات سازمانی /// </summary> /// <param name="personList">لیست پرسنل</param> /// <param name="infoProxy">پروکسی مشخصات سازمانی</param> /// <param name="errorList">خروجی لیست خطاها</param> /// <returns>وضعیت انجام عملیات</returns> private bool ChangeInfo(IList <Person> personList, OrganicInfoProxy infoProxy, out IList <ChangeInfoErrorProxy> errorList) { IList <PersonRuleCatAssignment> ruleAssgnList = new List <PersonRuleCatAssignment>(); IList <PersonRangeAssignment> rangeAssgnList = new List <PersonRangeAssignment>(); IList <AssignWorkGroup> workGroupAssgnList = new List <AssignWorkGroup>(); IList <PersonContractAssignment> contractAssgnList = new List <PersonContractAssignment>(); #region Validate DateTime workGroupFromDate, ruleGroupFromDate, ruleGroupToDate, DateRangeFromDate, contractFromDate, contractToDate; if (BLanguage.CurrentSystemLanguage == LanguagesName.Parsi) { workGroupFromDate = Utility.ToMildiDate(infoProxy.WorkGroupFromDate); ruleGroupFromDate = Utility.ToMildiDate(infoProxy.RuleGroupFromDate); ruleGroupToDate = Utility.ToMildiDate(infoProxy.RuleGroupToDate); DateRangeFromDate = Utility.ToMildiDate(infoProxy.DateRangeFromDate); contractFromDate = Utility.ToMildiDate(infoProxy.ContractFromDate); contractToDate = Utility.ToMildiDate(infoProxy.ContractToDate); } else { workGroupFromDate = Utility.ToMildiDateTime(infoProxy.WorkGroupFromDate); ruleGroupFromDate = Utility.ToMildiDateTime(infoProxy.RuleGroupFromDate); ruleGroupToDate = Utility.ToMildiDateTime(infoProxy.RuleGroupToDate); DateRangeFromDate = Utility.ToMildiDateTime(infoProxy.DateRangeFromDate); contractFromDate = Utility.ToMildiDateTime(infoProxy.ContractFromDate); contractToDate = Utility.ToMildiDateTime(infoProxy.ContractToDate); } errorList = new List <ChangeInfoErrorProxy>(); foreach (Person prs in personList) { string errorMessage = ""; if (infoProxy.WorkGroupID > 0) { workGroupAssgnList = new BAssignWorkGroup(BLanguage.CurrentSystemLanguage).GetAllByWorkGroupId(infoProxy.WorkGroupID); ValidateWorkGroupAssignment(prs, workGroupFromDate, ref errorMessage); } if (infoProxy.RuleGroupID > 0) { ruleAssgnList = new BAssignRule(BLanguage.CurrentSystemLanguage).GetAllByRuleGroupId(infoProxy.RuleGroupID); ValidateRuleGroupAssignment(prs, ruleGroupFromDate, ruleGroupToDate, ref errorMessage); } if (infoProxy.DateRangeID > 0) { rangeAssgnList = new BAssignDateRange(BLanguage.CurrentSystemLanguage).GetAllByRangeId(infoProxy.DateRangeID); ValidateDateRangeAssignment(prs, DateRangeFromDate, ref errorMessage); } if (infoProxy.ContractID > 0) { contractAssgnList = new BPersonContractAssignment(BLanguage.CurrentSystemLanguage).GetAllByContractId(infoProxy.ContractID); ValidateContractAssignment(prs, contractFromDate, contractToDate, ref errorMessage); } if (!Utility.IsEmpty(errorMessage)) { errorList.Add(new ChangeInfoErrorProxy() { ErrorMessage = errorMessage, PersonCode = prs.PersonCode, PersonName = prs.Name }); if (errorList.Count > 50) { break; } } } if (errorList.Count > 0) { return(false); } #endregion using (NHibernateSessionManager.Instance.BeginTransactionOn()) { try { UnderManagmentRepository underMngRep = new UnderManagmentRepository(false); List <decimal> personIdList = new List <decimal>(); IList <OrganizationFeatureProxy> organizationFeatureList = new List <OrganizationFeatureProxy>(); IList <FlowPersonsProxy> flowPersonList = new List <FlowPersonsProxy>(); List <decimal> PersonnelsDepartmentChange = new List <decimal>(); bool cfpUpdateRequierd = false; DateTime minDate = DateTime.Now; int counter = 0; foreach (Person prs in personList) { counter++; bool updatePrs = false; personIdList.Add(prs.ID); IList <OrganizationFeatureProxy> organizationFeatureExist = new List <OrganizationFeatureProxy>(); UnderManagment underMng = new UnderManagment(); #region Department if (infoProxy.DepartmentID > 0) { if (prs.Department.ID != infoProxy.DepartmentID) { PersonnelsDepartmentChange.Add(prs.ID); } if (organizationFeatureList.Count != 0) { organizationFeatureExist = organizationFeatureList.Where(x => x.DepartmentId == prs.Department.ID).ToList(); } if (organizationFeatureExist.Count == 0) { IList <decimal> FlowIds = underMngRep.GetDepartmentFlows(prs.Department.ID); foreach (decimal flowId in FlowIds) { OrganizationFeatureProxy orgFeatureProxy = new OrganizationFeatureProxy(); FlowPersonsProxy flowPerson = new FlowPersonsProxy(); orgFeatureProxy.FlowId = flowId; orgFeatureProxy.DepartmentId = prs.Department.ID; organizationFeatureList.Add(orgFeatureProxy); flowPerson.FlowId = flowId; flowPerson.PersonId = prs.ID; flowPersonList.Add(flowPerson); } } else { IList <decimal> FlowIds = organizationFeatureExist.Select(x => x.FlowId) .ToList <decimal>(); foreach (decimal flowId in FlowIds) { FlowPersonsProxy flowPerson = new FlowPersonsProxy(); flowPerson.FlowId = flowId; flowPerson.PersonId = prs.ID; flowPersonList.Add(flowPerson); } } prs.Department = new GTS.Clock.Model.Charts.Department() { ID = infoProxy.DepartmentID }; updatePrs = true; } #endregion #region Employment Type if (infoProxy.EmploymentTypeID > 0) { prs.EmploymentType = new GTS.Clock.Model.BaseInformation.EmploymentType() { ID = infoProxy.EmploymentTypeID }; updatePrs = true; } #endregion if (updatePrs) { prsRepository.WithoutTransactUpdate(prs); } #region Rule Category if (infoProxy.RuleGroupID > 0) { cfpUpdateRequierd = true; PersonRuleCatAssignment ruleAssign = new PersonRuleCatAssignment(); BAssignRule ruleAsgnBus = new BAssignRule(); ruleAssgnList = ruleAsgnBus.GetAll(prs.ID); IList <PersonRuleCatAssignment> confilictList = ruleAssgnList.Where(x => ((Utility.ToMildiDateTime(x.FromDate) <= ruleGroupToDate && Utility.ToMildiDateTime(x.ToDate) >= ruleGroupToDate)) || ((Utility.ToMildiDateTime(x.FromDate) <= ruleGroupFromDate && Utility.ToMildiDateTime(x.ToDate) >= ruleGroupFromDate)) || ((Utility.ToMildiDateTime(x.FromDate) >= ruleGroupFromDate && Utility.ToMildiDateTime(x.FromDate) <= ruleGroupToDate)) ).ToList(); if (confilictList != null && confilictList.Count > 0) { Range range = new Range() { From = ruleGroupFromDate, To = ruleGroupToDate, AditionalField = 0 }; var confilictRanges = from o in confilictList select new Range() { From = Utility.ToMildiDateTime(o.FromDate), To = Utility.ToMildiDateTime(o.ToDate), AditionalField = o.RuleCategory.ID }; IList <Range> breakedList = Utility.Differance(confilictRanges.ToList(), range); #region Delete //foreach (PersonRuleCatAssignment asgn in ruleAssgnList) //{ // ruleAsgnBus.SaveChanges(asgn, UIActionType.DELETE); //} foreach (PersonRuleCatAssignment asgn in confilictList) { ruleAsgnBus.SaveChanges(asgn, UIActionType.DELETE); } #endregion #region add first ruleAssign.FromDate = Utility.ToString(ruleGroupFromDate); ruleAssign.ToDate = Utility.ToString(ruleGroupToDate); ruleAssign.Person = prs; ruleAssign.RuleCategory = new RuleCategory() { ID = infoProxy.RuleGroupID }; busRule.InsertWithoutTransaction(ruleAssign); #endregion #region add breaked List foreach (Range r in breakedList) { if (r.From == range.To) { r.From = r.From.AddDays(1); } if (r.To == range.From) { r.To = r.To.AddDays(-1); } ruleAssign = new PersonRuleCatAssignment(); ruleAssign.FromDate = Utility.ToString(r.From); ruleAssign.ToDate = Utility.ToString(r.To); ruleAssign.Person = prs; ruleAssign.RuleCategory = new RuleCategory() { ID = r.AditionalField }; busRule.InsertWithoutTransaction(ruleAssign); } #endregion } else { ruleAssign.FromDate = Utility.ToString(ruleGroupFromDate); ruleAssign.ToDate = Utility.ToString(ruleGroupToDate); ruleAssign.Person = prs; ruleAssign.RuleCategory = new RuleCategory() { ID = infoProxy.RuleGroupID }; busRule.InsertWithoutTransaction(ruleAssign); } if (minDate > ruleGroupFromDate) { minDate = ruleGroupFromDate; } } #endregion #region Contract if (infoProxy.ContractID > 0) { cfpUpdateRequierd = true; PersonContractAssignment contractAssign = new PersonContractAssignment(); contractAssign.Person = prs; contractAssign.Contract = new Contract() { ID = infoProxy.ContractID }; contractAssign.FromDate = contractFromDate; contractAssign.ToDate = contractToDate; BPersonContractAssignment contractAsgnBus = new BPersonContractAssignment(); contractAssgnList = contractAsgnBus.GetAll(prs.ID); PersonContractAssignment PersonContractAssignmentAlias = null; Person PersonAlias = null; IList <PersonContractAssignment> personContractAssignmentList = NHSession.QueryOver <PersonContractAssignment>(() => PersonContractAssignmentAlias) .JoinAlias(() => PersonContractAssignmentAlias.Person, () => PersonAlias) .Where(() => !PersonContractAssignmentAlias.IsDeleted && PersonAlias.ID == prs.ID ) .List <PersonContractAssignment>(); if (personContractAssignmentList != null && personContractAssignmentList.Count > 0) { personContractAssignmentList.ToList() .ForEach(x => { if (x.ToDate == Utility.GTSMinStandardDateTime) { x.ToDate = DateTime.MaxValue.Date; } } ); } if (contractAssign.ToDate == Utility.GTSMinStandardDateTime) { contractAssign.ToDate = DateTime.MaxValue.Date; } if (contractAsgnBus.CheckPersonContractAssignmentConfilct(personContractAssignmentList.ToList(), contractAssign)) { errorList.Add(new ChangeInfoErrorProxy() { ErrorMessage = "تاریخ انتساب قرارداد با تاریخ های قبلی همپوشانی دارد", PersonCode = prs.PersonCode, PersonName = prs.Name }); } else { if (prs != null && prs.ID != 0 && contractAssign.FromDate < prs.EmploymentDate) { errorList.Add(new ChangeInfoErrorProxy() { ErrorMessage = "تاریخ انتساب ابتدای قرارداد نباید از تاریخ استخدام کوچکتر باشد", PersonCode = prs.PersonCode, PersonName = prs.Name }); } else { if (contractAssign.ToDate == DateTime.MaxValue.Date) { contractAssign.ToDate = Utility.GTSMinStandardDateTime; } busAssignContract.InsertWithoutTransaction(contractAssign); if (minDate > contractFromDate) { minDate = contractFromDate; } } } } #endregion #region Date Range if (infoProxy.DateRangeID > 0) { cfpUpdateRequierd = true; PersonRangeAssignment prsRangeAssignment = new PersonRangeAssignment(); rangeAssgnList = new BAssignDateRange(BLanguage.CurrentSystemLanguage).GetAll(prs.ID); prsRangeAssignment = rangeAssgnList.Where(x => x.FromDate == DateRangeFromDate).FirstOrDefault(); if (prsRangeAssignment != null) { prsRangeAssignment.FromDate = DateRangeFromDate; prsRangeAssignment.CalcDateRangeGroup = new CalculationRangeGroup() { ID = infoProxy.DateRangeID }; } else { prsRangeAssignment = new PersonRangeAssignment(); prsRangeAssignment.Person = prs; prsRangeAssignment.FromDate = DateRangeFromDate; prsRangeAssignment.CalcDateRangeGroup = new CalculationRangeGroup() { ID = infoProxy.DateRangeID }; } bussDateRange.InsertWithoutTransaction(prsRangeAssignment); if (minDate > DateRangeFromDate) { minDate = DateRangeFromDate; } } #endregion #region Work Group if (infoProxy.WorkGroupID > 0) { cfpUpdateRequierd = true; AssignWorkGroup prsWorkGroupAssignment = new AssignWorkGroup(); workGroupAssgnList = new BAssignWorkGroup(BLanguage.CurrentSystemLanguage).GetAll(prs.ID); prsWorkGroupAssignment = workGroupAssgnList.Where(x => x.FromDate == workGroupFromDate).FirstOrDefault(); if (prsWorkGroupAssignment != null) { prsWorkGroupAssignment.Person = prs; prsWorkGroupAssignment.FromDate = workGroupFromDate; prsWorkGroupAssignment.WorkGroup = new WorkGroup() { ID = infoProxy.WorkGroupID }; } else { prsWorkGroupAssignment = new AssignWorkGroup(); prsWorkGroupAssignment.Person = prs; prsWorkGroupAssignment.FromDate = workGroupFromDate; prsWorkGroupAssignment.WorkGroup = new WorkGroup() { ID = infoProxy.WorkGroupID }; } busWorkGroup.InsertWithoutTransaction(prsWorkGroupAssignment); if (minDate > workGroupFromDate) { minDate = workGroupFromDate; } } #endregion } if (infoProxy.DepartmentID > 0) { IList <decimal> FlowIDs = organizationFeatureList.Select(x => x.FlowId).Distinct().ToList <decimal>(); if (FlowIDs.Count != 0) { IList <UnderManagment> UnderManagmentList = underMngRep.GetAllPersonelparticularFlows(FlowIDs); foreach (decimal flowid in FlowIDs) { IList <decimal> PersonIds = flowPersonList.Where(x => x.FlowId == flowid && !UnderManagmentList.Where(y => y.Flow.ID == flowid).Select(y => y.Person.ID).ToList <decimal>().Contains(x.PersonId) ).Select(x => x.PersonId).ToList <decimal>(); if (PersonIds.Count != 0) { underMngRep.DeleteUnderManagmentPersonsWithOrganicInfo(flowid, PersonIds); } } } IList <decimal> NewDepertmentFlowsList = underMngRep.GetDepartmentFlows(personList[0].Department.ID); if (NewDepertmentFlowsList.Count != 0) { underMngRep.InsertUnderManagmentPersons(personIdList, NewDepertmentFlowsList); } BRequestSubstitute rSubstitute = new BRequestSubstitute(); if (PersonnelsDepartmentChange.Count != 0) { rSubstitute.UpdateRequestSubstituteOfOrganicInfo(PersonnelsDepartmentChange); } } if (cfpUpdateRequierd) { this.UpdateCFP(personList, minDate); } NHibernateSessionManager.Instance.CommitTransactionOn(); } catch (Exception ex) { BaseBusiness <Entity> .LogException(ex, "BChangeOrganicInfo", "ChangeInfo"); NHibernateSessionManager.Instance.RollbackTransactionOn(); throw ex; } } return(true); }
private bool ChangeInfo(IList <Person> personList, OrganicInfoProxy infoProxy, out IList <ChangeInfoErrorProxy> errorList) { IList <PersonRuleCatAssignment> ruleAssgnList = new List <PersonRuleCatAssignment>(); IList <PersonRangeAssignment> rangeAssgnList = new List <PersonRangeAssignment>(); IList <AssignWorkGroup> workGroupAssgnList = new List <AssignWorkGroup>(); #region Validate DateTime workGroupFromDate, ruleGroupFromDate, ruleGroupToDate, DateRangeFromDate; if (BLanguage.CurrentSystemLanguage == LanguagesName.Parsi) { workGroupFromDate = Utility.ToMildiDate(infoProxy.WorkGroupFromDate); ruleGroupFromDate = Utility.ToMildiDate(infoProxy.RuleGroupFromDate); ruleGroupToDate = Utility.ToMildiDate(infoProxy.RuleGroupToDate); DateRangeFromDate = Utility.ToMildiDate(infoProxy.DateRangeFromDate); } else { workGroupFromDate = Utility.ToMildiDateTime(infoProxy.WorkGroupFromDate); ruleGroupFromDate = Utility.ToMildiDateTime(infoProxy.RuleGroupFromDate); ruleGroupToDate = Utility.ToMildiDateTime(infoProxy.RuleGroupToDate); DateRangeFromDate = Utility.ToMildiDateTime(infoProxy.DateRangeFromDate); } errorList = new List <ChangeInfoErrorProxy>(); foreach (Person prs in personList) { string errorMessage = ""; if (infoProxy.WorkGroupID > 0) { workGroupAssgnList = new BAssignWorkGroup(BLanguage.CurrentSystemLanguage).GetAllByWorkGroupId(infoProxy.WorkGroupID); ValidateWorkGroupAssignment(prs, workGroupFromDate, ref errorMessage); } if (infoProxy.RuleGroupID > 0) { ruleAssgnList = new BAssignRule(BLanguage.CurrentSystemLanguage).GetAllByRuleGroupId(infoProxy.RuleGroupID); ValidateRuleGroupAssignment(prs, ruleGroupFromDate, ruleGroupToDate, ref errorMessage); } if (infoProxy.DateRangeID > 0) { rangeAssgnList = new BAssignDateRange(BLanguage.CurrentSystemLanguage).GetAllByRangeId(infoProxy.DateRangeID); ValidateDateRangeAssignment(prs, DateRangeFromDate, ref errorMessage); } if (!Utility.IsEmpty(errorMessage)) { errorList.Add(new ChangeInfoErrorProxy() { ErrorMessage = errorMessage, PersonCode = prs.PersonCode, PersonName = prs.Name }); if (errorList.Count > 50) { break; } } } if (errorList.Count > 0) { return(false); } #endregion using (NHibernateSessionManager.Instance.BeginTransactionOn()) { try { bool cfpUpdateRequierd = false; DateTime minDate = DateTime.Now; int counter = 0; foreach (Person prs in personList) { counter++; bool updatePrs = false; #region Department if (infoProxy.DepartmentID > 0) { prs.Department = new GTS.Clock.Model.Charts.Department() { ID = infoProxy.DepartmentID }; updatePrs = true; } #endregion #region Employment Type if (infoProxy.EmploymentTypeID > 0) { prs.EmploymentType = new GTS.Clock.Model.BaseInformation.EmploymentType() { ID = infoProxy.EmploymentTypeID }; updatePrs = true; } #endregion if (updatePrs) { prsRepository.WithoutTransactUpdate(prs); } #region Rule Category if (infoProxy.RuleGroupID > 0) { cfpUpdateRequierd = true; PersonRuleCatAssignment ruleAssign = new PersonRuleCatAssignment(); BAssignRule ruleAsgnBus = new BAssignRule(); ruleAssgnList = ruleAsgnBus.GetAll(prs.ID); IList <PersonRuleCatAssignment> confilictList = ruleAssgnList.Where(x => ((Utility.ToMildiDateTime(x.FromDate) <= ruleGroupToDate && Utility.ToMildiDateTime(x.ToDate) >= ruleGroupToDate)) || ((Utility.ToMildiDateTime(x.FromDate) <= ruleGroupFromDate && Utility.ToMildiDateTime(x.ToDate) >= ruleGroupFromDate)) || ((Utility.ToMildiDateTime(x.FromDate) >= ruleGroupFromDate && Utility.ToMildiDateTime(x.FromDate) <= ruleGroupToDate)) ).ToList(); if (confilictList != null && confilictList.Count > 0) { Range range = new Range() { From = ruleGroupFromDate, To = ruleGroupToDate, AditionalField = 0 }; var confilictRanges = from o in confilictList select new Range() { From = Utility.ToMildiDateTime(o.FromDate), To = Utility.ToMildiDateTime(o.ToDate), AditionalField = o.RuleCategory.ID }; IList <Range> breakedList = Utility.Differance(confilictRanges.ToList(), range); #region Delete foreach (PersonRuleCatAssignment asgn in ruleAssgnList) { ruleAsgnBus.SaveChanges(asgn, UIActionType.DELETE); } #endregion #region add first ruleAssign.FromDate = Utility.ToString(ruleGroupFromDate); ruleAssign.ToDate = Utility.ToString(ruleGroupToDate); ruleAssign.Person = prs; ruleAssign.RuleCategory = new RuleCategory() { ID = infoProxy.RuleGroupID }; busRule.InsertWithoutTransaction(ruleAssign); #endregion #region add breaked List foreach (Range r in breakedList) { if (r.From == range.To) { r.From = r.From.AddDays(1); } if (r.To == range.From) { r.To = r.To.AddDays(-1); } ruleAssign = new PersonRuleCatAssignment(); ruleAssign.FromDate = Utility.ToString(r.From); ruleAssign.ToDate = Utility.ToString(r.To); ruleAssign.Person = prs; ruleAssign.RuleCategory = new RuleCategory() { ID = r.AditionalField }; busRule.InsertWithoutTransaction(ruleAssign); } #endregion } else { ruleAssign.FromDate = Utility.ToString(ruleGroupFromDate); ruleAssign.ToDate = Utility.ToString(ruleGroupToDate); ruleAssign.Person = prs; ruleAssign.RuleCategory = new RuleCategory() { ID = infoProxy.RuleGroupID }; busRule.InsertWithoutTransaction(ruleAssign); } if (minDate > ruleGroupFromDate) { minDate = ruleGroupFromDate; } } #endregion #region Date Range if (infoProxy.DateRangeID > 0) { cfpUpdateRequierd = true; PersonRangeAssignment prsRangeAssignment = new PersonRangeAssignment(); rangeAssgnList = new BAssignDateRange(BLanguage.CurrentSystemLanguage).GetAll(prs.ID); prsRangeAssignment = rangeAssgnList.Where(x => x.FromDate == DateRangeFromDate).FirstOrDefault(); if (prsRangeAssignment != null) { prsRangeAssignment.FromDate = DateRangeFromDate; prsRangeAssignment.CalcDateRangeGroup = new CalculationRangeGroup() { ID = infoProxy.DateRangeID }; } else { prsRangeAssignment = new PersonRangeAssignment(); prsRangeAssignment.Person = prs; prsRangeAssignment.FromDate = DateRangeFromDate; prsRangeAssignment.CalcDateRangeGroup = new CalculationRangeGroup() { ID = infoProxy.DateRangeID }; } bussDateRange.InsertWithoutTransaction(prsRangeAssignment); if (minDate > DateRangeFromDate) { minDate = DateRangeFromDate; } } #endregion #region Work Group if (infoProxy.WorkGroupID > 0) { cfpUpdateRequierd = true; AssignWorkGroup prsWorkGroupAssignment = new AssignWorkGroup(); workGroupAssgnList = new BAssignWorkGroup(BLanguage.CurrentSystemLanguage).GetAll(prs.ID); prsWorkGroupAssignment = workGroupAssgnList.Where(x => x.FromDate == workGroupFromDate).FirstOrDefault(); if (prsWorkGroupAssignment != null) { prsWorkGroupAssignment.Person = prs; prsWorkGroupAssignment.FromDate = workGroupFromDate; prsWorkGroupAssignment.WorkGroup = new WorkGroup() { ID = infoProxy.WorkGroupID }; } else { prsWorkGroupAssignment = new AssignWorkGroup(); prsWorkGroupAssignment.Person = prs; prsWorkGroupAssignment.FromDate = workGroupFromDate; prsWorkGroupAssignment.WorkGroup = new WorkGroup() { ID = infoProxy.WorkGroupID }; } busWorkGroup.InsertWithoutTransaction(prsWorkGroupAssignment); if (minDate > workGroupFromDate) { minDate = workGroupFromDate; } } #endregion } if (cfpUpdateRequierd) { this.UpdateCFP(personList, minDate); } NHibernateSessionManager.Instance.CommitTransactionOn(); } catch (Exception ex) { BaseBusiness <Entity> .LogException(ex, "BChangeOrganicInfo", "ChangeInfo"); NHibernateSessionManager.Instance.RollbackTransactionOn(); throw ex; } } return(true); }