private void UpdateManagerFlowCondition(PrecardAccessGroup obj)
        {
            IList <PrecardAccessGroupDetailProxy> AccessGroupDetailProxy  = new List <PrecardAccessGroupDetailProxy>();
            PrecardAccessGroupDetail         accessGroupDetailAlias       = null;
            ManagerFlowCondition             managerFlowConditionAlias    = null;
            IList <PrecardAccessGroupDetail> precardAccessGroupDetailList = NHSession.QueryOver <PrecardAccessGroupDetail>(() => accessGroupDetailAlias)
                                                                            .Where(() => accessGroupDetailAlias.PrecardAccessGroup.ID == obj.ID)
                                                                            .List <PrecardAccessGroupDetail>();

            foreach (decimal precardId in obj.AccessGroupDetailOld.Keys)
            {
                PrecardAccessGroupDetailProxy accessGroupDetailProxy = new PrecardAccessGroupDetailProxy();
                accessGroupDetailProxy.PrecardAccessGroupDetailOldId = obj.AccessGroupDetailOld[precardId];
                accessGroupDetailProxy.PrecardAccessGroupDetailNewId = precardAccessGroupDetailList.Where(x => x.Precard.ID == precardId).Select(x => x.ID).FirstOrDefault();
                AccessGroupDetailProxy.Add(accessGroupDetailProxy);
            }
            IList <decimal> PrecardAccessGroupDetailIds = NHSession.QueryOver <ManagerFlowCondition>(() => managerFlowConditionAlias)
                                                          .Where(() => managerFlowConditionAlias.PrecardAccessGroupDetail.ID.IsIn(AccessGroupDetailProxy.Select(x => x.PrecardAccessGroupDetailOldId).ToArray()))
                                                          .Select(y => y.PrecardAccessGroupDetail.ID)
                                                          .List <decimal>();

            if (PrecardAccessGroupDetailIds.Count != 0)
            {
                AccessGroupDetailProxy = AccessGroupDetailProxy.Where(x => PrecardAccessGroupDetailIds.Contains(x.PrecardAccessGroupDetailOldId)).ToList();
                foreach (PrecardAccessGroupDetailProxy accessGroupDetailProxy in AccessGroupDetailProxy)
                {
                    FlowRep.UpdateManagerFlowCondition(accessGroupDetailProxy.PrecardAccessGroupDetailOldId, accessGroupDetailProxy.PrecardAccessGroupDetailNewId);
                }
            }
        }
        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;
            }
        }