/// <summary> /// درج جریان کاری /// </summary> /// <param name="personId">شناسه پست سلزمانی مدیر اولیه</param> /// <param name="accessGroup">شناسه گروه دسترسی</param> /// <param name="flowName">نام جریان کاری</param> /// <param name="underMnagList">افراد و بخشهای تحت مدیریت</param> /// <returns></returns> public decimal InsertFlowByOrganization(decimal organizationId, decimal accessGroup, string flowName, IList <UnderManagment> underMnagList) { Flow flow = new Flow(); using (NHibernateSessionManager.Instance.BeginTransactionOn()) { try { flow.FlowName = flowName; flow.AccessGroup = new PrecardAccessGroup() { ID = accessGroup }; flow.ActiveFlow = true; flow.ManagerFlowList = new List <ManagerFlow>(); flow.UnderManagmentList = new List <UnderManagment>(); Manager mng = managerRep.GetManagerByOrganID(organizationId); if (mng == null || mng.ID == 0) { Manager manager = new Manager(); manager.OrganizationUnit = new OrganizationUnit() { ID = organizationId }; manager.Active = true; this.SaveChanges(manager, UIActionType.ADD); mng = manager; } ManagerFlow managerFlow = new ManagerFlow(); managerFlow.Flow = flow; managerFlow.Manager = mng; managerFlow.Level = 1; managerFlow.Active = true; flow.ManagerFlowList.Add(managerFlow); foreach (UnderManagment un in underMnagList) { un.Flow = flow; flow.UnderManagmentList.Add(un); } BFlow bflow = new BFlow(); bflow.SaveChanges(flow, UIActionType.ADD); NHibernateSessionManager.Instance.CommitTransactionOn(); return(flow.ID); } catch (Exception ex) { NHibernateSessionManager.Instance.RollbackTransactionOn(); LogException(ex, "BManager", "InsertFlowByOrganization"); throw ex; } } }
public void Update_InsertTest() { flow_testObject = busflow.GetByID(ADOFlow1.ID); ManagerFlow mf = new ManagerFlow(); mf.Level = 3; mf.Manager = ADOManager2; mf.Flow = flow_testObject; flow_testObject.ManagerFlowList.Add(mf); ClearSession(); busflow.SaveChanges(flow_testObject, UIActionType.EDIT); ClearSession(); flow_testObject = new Flow(); flow_testObject = busflow.GetByID(ADOFlow1.ID); Assert.AreEqual(3, flow_testObject.ManagerFlowList.Count); }
/// <summary> /// بروزرسانی مدیرهای یک جریان خاص /// </summary> /// <param name="flowId">کد جریان</param> /// <param name="activeFlow">وضعیت فعال بودن</param> /// <param name="mngrFlows">مدیران جریان کاری</param> public void UpdateManagerFlows(decimal flowId, bool activeFlow, bool mainFlow, IList <ManagerProxy> mngrFlows) { ManagerRepository managerRep = new ManagerRepository(false); using (NHibernateSessionManager.Instance.BeginTransactionOn()) { try { if (Utility.IsEmpty(mngrFlows)) { UIValidationExceptions exception = new UIValidationExceptions(); exception.Add(new ValidationException(ExceptionResourceKeys.FlowMustHaveOneManagerFlow, "جریان کاری باید حداقل دارای یک مدیر در خود باشد", ExceptionSrc)); throw exception; } BManager bManager = new BManager(); Flow flow = base.GetByID(flowId); flow.ActiveFlow = activeFlow; flow.MainFlow = mainFlow; flow.ManagerFlowList = new List <ManagerFlow>(); flowRep.DeleteManagerFlows(flowId); foreach (ManagerProxy mp in mngrFlows) { ManagerFlow managerFlow = new ManagerFlow(); Manager mng; if (mp.OwnerID == 0) { UIValidationExceptions exception = new UIValidationExceptions(); exception.Add(new ValidationException(ExceptionResourceKeys.FlowPersonOrOrganizationMustSpecified, "یا شخص یا پست سازمانی باید مقداردهی شود", ExceptionSrc)); throw exception; } if (mp.ManagerType == ManagerType.Person) { mng = managerRep.GetManagerByPersonID(mp.OwnerID); if (mng == null || mng.ID == 0) { Manager manager = new Manager(); manager.Person = new Person() { ID = mp.OwnerID }; manager.Active = true; bManager.SaveChanges(manager, UIActionType.ADD); mng = manager; } } else { mng = managerRep.GetManagerByOrganID(mp.OwnerID); if (mng == null || mng.ID == 0) { Manager manager = new Manager(); manager.OrganizationUnit = new OrganizationUnit() { ID = mp.OwnerID }; manager.Active = true; bManager.SaveChanges(manager, UIActionType.ADD); mng = manager; } } managerFlow.Active = true; managerFlow.Manager = mng; managerFlow.Flow = flow; managerFlow.Level = mp.Level; flow.ManagerFlowList.Add(managerFlow); } SaveChanges(flow, UIActionType.EDIT); managerRep.SetManagerActivation(); LogUserAction(flow, "Change Manager Flow Levels"); NHibernateSessionManager.Instance.CommitTransactionOn(); } catch (Exception ex) { NHibernateSessionManager.Instance.RollbackTransactionOn(); LogException(ex); throw ex; } } }
public void UpdateSubstitutePrecardAccessByFlow(IList <decimal> flowIDsList) { try { string SQLCommand = string.Empty; IQuery query = null; Flow flowAlias = null; ManagerFlow managerFlowAlias = null; Manager managerAlias = null; GTS.Clock.Model.Temp.Temp tempAlias = null; string operationGUID = string.Empty; BTemp bTemp = new BTemp(); IList <Manager> managersList = new List <Manager>(); if (flowIDsList.Count() < operationBatchSizeValue && operationBatchSizeValue < 2100) { managersList = this.NHSession.QueryOver <Manager>(() => managerAlias) .JoinAlias(() => managerAlias.ManagerFlowList, () => managerFlowAlias) .JoinAlias(() => managerFlowAlias.Flow, () => flowAlias) .Where(() => flowAlias.ID.IsIn(flowIDsList.ToArray())) .List <Manager>(); } else { operationGUID = bTemp.InsertTempList(flowIDsList); managersList = this.NHSession.QueryOver <Manager>(() => managerAlias) .JoinAlias(() => managerAlias.ManagerFlowList, () => managerFlowAlias) .JoinAlias(() => managerFlowAlias.Flow, () => flowAlias) .JoinAlias(() => flowAlias.TempList, () => tempAlias) .Where(() => tempAlias.OperationGUID == operationGUID) .List <Manager>(); bTemp.DeleteTempList(operationGUID); operationGUID = string.Empty; } if (managersList != null && managersList.Count > 0) { if (managersList.Count() < operationBatchSizeValue && operationBatchSizeValue < 2100) { SQLCommand = @" DELETE FROM dbo.TA_SubstitutePrecardAccess WHERE subaccess_SubstituteId IN ( SELECT sub_ID FROM dbo.TA_Substitute INNER JOIN dbo.TA_SubstitutePrecardAccess ON sub_ID = subaccess_SubstituteId WHERE sub_ManagerId IN (:managerIdsList) )"; query = this.NHSession.CreateSQLQuery(SQLCommand); query.SetParameterList("managerIdsList", managersList.Select(x => x.ID).ToArray()); query.ExecuteUpdate(); SQLCommand = @" INSERT INTO dbo.TA_SubstitutePrecardAccess ( subaccess_PrecardId , subaccess_SubstituteId ) SELECT precard.Precrd_ID, substitute.sub_ID FROM dbo.TA_Manager manager INNER JOIN dbo.TA_Substitute substitute ON manager.MasterMng_ID = substitute.sub_ManagerId INNER JOIN dbo.TA_ManagerFlow managerFlow ON manager.MasterMng_ID = managerFlow.mngrFlow_ManagerID INNER JOIN dbo.TA_Flow flow ON managerFlow.mngrFlow_FlowID = flow.Flow_ID INNER JOIN dbo.TA_PrecardAccessGroup precardAccessGroup ON flow.Flow_AccessGroupID = precardAccessGroup.accessGrp_ID INNER JOIN dbo.TA_PrecardAccessGroupDetail precardAccessGroupDetail ON precardAccessGroup.accessGrp_ID = precardAccessGroupDetail.accessGrpDtl_AccessGrpId INNER JOIN dbo.TA_Precard precard ON precardAccessGroupDetail.accessGrpDtl_PrecardId = precard.Precrd_ID WHERE flow.Flow_Deleted = 0 AND flow.Flow_ActiveFlow = 1 AND manager.MasterMng_Active = 1 AND managerFlow.mngrFlow_Active = 1 AND substitute.sub_ManagerId IN (:managerIdsList)"; query = this.NHSession.CreateSQLQuery(SQLCommand); query.SetParameterList("managerIdsList", managersList.Select(x => x.ID).ToArray()); query.ExecuteUpdate(); } else { operationGUID = bTemp.InsertTempList(managersList.Select(x => x.ID).ToList <decimal>()); SQLCommand = @" DELETE FROM dbo.TA_SubstitutePrecardAccess WHERE subaccess_SubstituteId IN ( SELECT sub_ID FROM dbo.TA_Substitute INNER JOIN dbo.TA_SubstitutePrecardAccess ON sub_ID = subaccess_SubstituteId INNER JOIN dbo.TA_Temp ON sub_ID = temp_ObjectID WHERE temp_OperationGUID = :operationGUID ) "; query = this.NHSession.CreateSQLQuery(SQLCommand); query.SetParameter("operationGUID", operationGUID); query.ExecuteUpdate(); SQLCommand = @" INSERT INTO dbo.TA_SubstitutePrecardAccess ( subaccess_PrecardId , subaccess_SubstituteId ) SELECT precard.Precrd_ID, substitute.sub_ID FROM dbo.TA_Manager manager INNER JOIN dbo.TA_Substitute substitute ON manager.MasterMng_ID = substitute.sub_ManagerId INNER JOIN dbo.TA_ManagerFlow managerFlow ON manager.MasterMng_ID = managerFlow.mngrFlow_ManagerID INNER JOIN dbo.TA_Flow flow ON managerFlow.mngrFlow_FlowID = flow.Flow_ID INNER JOIN dbo.TA_PrecardAccessGroup precardAccessGroup ON flow.Flow_AccessGroupID = precardAccessGroup.accessGrp_ID INNER JOIN dbo.TA_PrecardAccessGroupDetail precardAccessGroupDetail ON precardAccessGroup.accessGrp_ID = precardAccessGroupDetail.accessGrpDtl_AccessGrpId INNER JOIN dbo.TA_Precard precard ON precardAccessGroupDetail.accessGrpDtl_PrecardId = precard.Precrd_ID INNER JOIN dbo.TA_Temp temp ON sub_ID = temp.temp_OperationGUID WHERE flow.Flow_Deleted = 0 AND flow.Flow_ActiveFlow = 1 AND manager.MasterMng_Active = 1 AND managerFlow.mngrFlow_Active = 1 AND temp.temp_OperationGUID = :operationGUID "; query = this.NHSession.CreateSQLQuery(SQLCommand); query.SetParameter("operationGUID", operationGUID); query.ExecuteUpdate(); bTemp.DeleteTempList(operationGUID); } } } catch (Exception ex) { LogException(ex, ExceptionSrc, "UpdateSubstitutePrecardAccessByFlow"); } }
public IList <ManagerFlowConditionProxy> GetAllManagerFlowConditionsByPrecardGroup(decimal flowID, decimal managerFlowID, decimal precardGroupID, Dictionary <ConditionOperators, string> conditionOperatorsDic) { try { Precard precardAlias = null; PrecardGroups precardGroupsAlias = null; PrecardAccessGroupDetail precardAccessGroupDetailAlias = null; ManagerFlow managerFlowAlias = null; ManagerFlowCondition managerFlowConditionAlias = null; IList <ManagerFlowConditionProxy> ManagerFlowConditionProxyList = new List <ManagerFlowConditionProxy>(); IList <ManagerFlowCondition> existingManagerFlowConditionsList = NHSession.QueryOver <ManagerFlowCondition>(() => managerFlowConditionAlias) .JoinAlias(() => managerFlowConditionAlias.PrecardAccessGroupDetail, () => precardAccessGroupDetailAlias) .JoinAlias(() => precardAccessGroupDetailAlias.Precard, () => precardAlias) .JoinAlias(() => precardAlias.PrecardGroup, () => precardGroupsAlias) .JoinAlias(() => managerFlowConditionAlias.ManagerFlow, () => managerFlowAlias) .Where(() => managerFlowAlias.ID == managerFlowID && precardGroupsAlias.ID == precardGroupID && precardAlias.Active ) .List <ManagerFlowCondition>(); foreach (ManagerFlowCondition managerFlowConditionItem in existingManagerFlowConditionsList) { ManagerFlowConditionProxy managerFlowConditionProxy = new ManagerFlowConditionProxy(); managerFlowConditionProxy.State = "View"; managerFlowConditionProxy.ID = managerFlowConditionItem.ID; managerFlowConditionProxy.PrecardAccessGroupDetailID = managerFlowConditionItem.PrecardAccessGroupDetail.ID; managerFlowConditionProxy.PrecardID = managerFlowConditionItem.PrecardAccessGroupDetail.Precard.ID; managerFlowConditionProxy.PrecardName = managerFlowConditionItem.PrecardAccessGroupDetail.Precard.Name; managerFlowConditionProxy.PrecardCode = managerFlowConditionItem.PrecardAccessGroupDetail.Precard.Code; managerFlowConditionProxy.EndFlow = managerFlowConditionItem.EndFlow; managerFlowConditionProxy.Access = true; managerFlowConditionProxy.OperatorKey = ((ConditionOperators)managerFlowConditionItem.Operator).ToString(); managerFlowConditionProxy.OperatorTitle = conditionOperatorsDic[(ConditionOperators)managerFlowConditionItem.Operator]; managerFlowConditionProxy.Value = managerFlowConditionItem.Value; managerFlowConditionProxy.ValueType = this.SetManagerFlowConditionValueType(managerFlowConditionItem.PrecardAccessGroupDetail.Precard); managerFlowConditionProxy.Description = managerFlowConditionItem.Description; ManagerFlowConditionProxyList.Add(managerFlowConditionProxy); } Flow flow = this.bFlow.GetByID(flowID); IList <PrecardAccessGroupDetail> precardAccessGroupDetailList = flow.AccessGroup.PrecardAccessGroupDetailList.Where(x => x.Precard.PrecardGroup.ID == precardGroupID).ToList <PrecardAccessGroupDetail>(); IList <Precard> flowPrecardGroupPrecards = precardAccessGroupDetailList.Select(x => x.Precard).Where(x => x.Active).ToList <Precard>(); foreach (Precard precardItem in flowPrecardGroupPrecards.Where(x => !ManagerFlowConditionProxyList.Select(y => y.PrecardID).ToList().Contains(x.ID))) { ManagerFlowConditionProxy managerFlowConditionProxy = new ManagerFlowConditionProxy(); managerFlowConditionProxy.State = "View"; managerFlowConditionProxy.ID = 0; managerFlowConditionProxy.PrecardAccessGroupDetailID = precardAccessGroupDetailList.Where(x => x.Precard.ID == precardItem.ID).First().ID; managerFlowConditionProxy.PrecardID = precardItem.ID; managerFlowConditionProxy.PrecardName = precardItem.Name; managerFlowConditionProxy.PrecardCode = precardItem.Code; managerFlowConditionProxy.EndFlow = false; managerFlowConditionProxy.Access = true; managerFlowConditionProxy.OperatorKey = string.Empty; managerFlowConditionProxy.OperatorTitle = string.Empty; managerFlowConditionProxy.Value = string.Empty; managerFlowConditionProxy.ValueType = this.SetManagerFlowConditionValueType(precardItem); managerFlowConditionProxy.Description = string.Empty; ManagerFlowConditionProxyList.Add(managerFlowConditionProxy); } return(ManagerFlowConditionProxyList); } catch (Exception ex) { LogException(ex, "BManagerFlowCondition", "GetAllManagerFlowConditionsByPrecardGroup"); throw; } }
private void DeleteSuspendRequestStatesByFlowCondition(decimal flowID, IList <ManagerFlowConditionPrecardProxy> managerFlowConditionPreacardProxyList) { try { Request requestAlias = null; RequestStatus requestStatusAlias = null; ManagerFlow managerFlowAlias = null; Flow flowAlias = null; GTS.Clock.Model.Temp.Temp precardAccessGroupDetailTempAlias = null; PrecardAccessGroup precardAccessGroupAlias = null; PrecardAccessGroupDetail precardAccessGroupDetailAlias = null; string precardAccessGroupDetailOperationGUID = string.Empty; string requestStatusOperationGUID = string.Empty; List <decimal> requestStatusIdsList = new List <decimal>(); BTemp tempBusiness = new BTemp(); precardAccessGroupDetailOperationGUID = tempBusiness.InsertTempList(managerFlowConditionPreacardProxyList.Select(x => x.ManagerFlowCondition.PrecardAccessGroupDetail.ID).ToList <decimal>()); var EndFlowAndDeletedRequestStatusSubQuery = QueryOver.Of <RequestStatus>(() => requestStatusAlias) .Where(() => requestStatusAlias.EndFlow || !requestStatusAlias.IsDeleted) .And(() => requestStatusAlias.Request.ID == requestAlias.ID) .Select(x => x.ID); IList <Request> requestsList = this.NHSession.QueryOver <Request>(() => requestAlias) .JoinAlias(() => requestAlias.RequestStatusList, () => requestStatusAlias) .JoinAlias(() => requestStatusAlias.ManagerFlow, () => managerFlowAlias) .JoinAlias(() => managerFlowAlias.Flow, () => flowAlias) .JoinAlias(() => flowAlias.AccessGroup, () => precardAccessGroupAlias) .JoinAlias(() => precardAccessGroupAlias.PrecardAccessGroupDetailList, () => precardAccessGroupDetailAlias) .JoinAlias(() => precardAccessGroupDetailAlias.TempList, () => precardAccessGroupDetailTempAlias) .Where(() => !flowAlias.IsDeleted && !requestAlias.EndFlow && flowAlias.ID == flowID && precardAccessGroupDetailTempAlias.OperationGUID == precardAccessGroupDetailOperationGUID ) .WithSubquery .WhereNotExists(EndFlowAndDeletedRequestStatusSubQuery) .List <Request>(); tempBusiness.DeleteTempList(precardAccessGroupDetailOperationGUID); foreach (Request requestItem in requestsList) { ManagerFlowConditionPrecardProxy managerFlowConditionPrecardProxy = managerFlowConditionPreacardProxyList.Where(x => x.PrecardID == requestItem.ID).FirstOrDefault(); if (this.CheckRequestValueAppliedFlowConditionValue(managerFlowConditionPrecardProxy.ManagerFlowCondition, requestItem)) { requestStatusIdsList.AddRange(requestItem.RequestStatusList.Select(x => x.ID).ToList <decimal>()); } } if (requestStatusIdsList.Count > 0) { requestStatusOperationGUID = tempBusiness.InsertTempList(requestStatusIdsList); string SQLCommand = @"delete from TA_RequestStatus inner join TA_Temp on reqStat_ID = temp_OperationGUID where temp_OperationGUID = :operationGUID"; NHSession.CreateSQLQuery(SQLCommand) .SetParameter("operationGUID", requestStatusOperationGUID) .ExecuteUpdate(); tempBusiness.DeleteTempList(requestStatusOperationGUID); } } catch (Exception ex) { LogException(ex, "BManagerFlowCondition", "DeleteSuspendRequestStatesByFlowCondition"); throw; } }