Пример #1
0
        /// <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;
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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;
                }
            }
        }
Пример #4
0
        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");
            }
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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;
            }
        }