public static IList GetInstructionsList(IDalSession session, int assetManagerId, int modelPortfolioId, string accountNumber, string accountName, DateTime dateFrom, DateTime dateTo, ActivityReturnFilter activeStatus, WithdrawalInstructionsTypeReturnEnum returnType, int[] instructionIds, string sortColumn, bool ascending, bool keysOnly) { string where = ""; if (assetManagerId > 0) where += string.Format(" and A.AccountOwner = {0} ", assetManagerId); if (modelPortfolioId > 0) where += string.Format(" and M.Key = {0}", modelPortfolioId); if (accountNumber != null && accountNumber.Length > 0) where += string.Format(" and A.Number LIKE '%{0}%'", accountNumber); if (accountName != null && accountName.Length > 0) where += string.Format(" and A.ShortName LIKE '%{0}%'", accountName); if (dateFrom != DateTime.MinValue || dateTo != DateTime.MinValue) { if (dateFrom != DateTime.MinValue && dateTo != DateTime.MinValue) where += string.Format(" and I.WithdrawalDate between '{0}' and '{1}'", dateFrom.ToString("yyyy-MM-dd"), dateTo.ToString("yyyy-MM-dd")); if (dateFrom != DateTime.MinValue) where += string.Format(" and I.WithdrawalDate >= '{0}'", dateFrom.ToString("yyyy-MM-dd")); if (dateTo != DateTime.MinValue) where += string.Format(" and I.WithdrawalDate <= '{0}'", dateTo.ToString("yyyy-MM-dd")); } if (activeStatus == ActivityReturnFilter.Active) where += string.Format(" and (I.IsActive = 1 or (I.IsActive = 0 and I.CloseDate >= '{0}'))", DateTime.Today.ToString("yyyy-MM-dd")); else if (activeStatus == ActivityReturnFilter.InActive) where += " and (I.IsActive = 0)"; if (returnType != WithdrawalInstructionsTypeReturnEnum.All) where += string.Format(" and I.IsPeriodic = {0}", (returnType == WithdrawalInstructionsTypeReturnEnum.Periodic ? 1 : 0)); if (instructionIds != null) where += string.Format(" and I.Key IN ({0})", (instructionIds.Length == 0 ? "0" : string.Join(", ", Array.ConvertAll<int, string>(instructionIds, id => id.ToString())))); string orderBy = "order by A.Key", contactsJoin = ""; if (keysOnly && sortColumn != "") { string ascendingStr = (ascending ? "ASC" : "DESC"); sortColumn = sortColumn.ToUpper(); string sortProperty = ""; switch (sortColumn) { case "KEY": sortProperty = "A.Key"; break; case "ACCOUNT_NUMBER": sortProperty = "A.Number"; break; case "ACCOUNT_SHORTNAME": sortProperty = "CN.Name"; contactsJoin = @"left join A.bagOfAccountHolders AH left join AH.Contact C left join C.CurrentNAW CN"; where += " and AH.IsPrimaryAccountHolder = true"; break; case "STATUS": sortProperty = "I.Status"; break; case "DONOTCHARGECOMMISSION": sortProperty = "I.DoNotChargeCommission"; break; case "MESSAGE": sortProperty = "I.Message"; break; case "WITHDRAWALDATE": sortProperty = "I.WithdrawalDate"; break; case "EXECUTIONDATE": sortProperty = "I.ExecutionDate"; break; case "CREATIONDATE": sortProperty = "I.CreationDate"; break; case "AMOUNT_QUANTITY": sortProperty = "I.Amount.Quantity"; break; case "ISACTIVE": sortProperty = "I.IsActive"; break; case "REGULARITY": sortProperty = "R.Regularity"; break; } if (sortProperty != "") orderBy = string.Format("order by {0} {1}", sortProperty, ascendingStr); } string hql = string.Format(@"{0}from CashWithdrawalInstruction I left join {1} I.Account A left join {1} A.ModelPortfolio M left join {1} I.Rule R {2} where (I.ExecutionDate <= '{3}') {4} {5}", (keysOnly ? "select I.Key, I.IsActive " : ""), (keysOnly ? "" : "fetch"), contactsJoin, DateTime.Today.ToString("yyyy-MM-dd"), where, orderBy); return session.GetListByHQL(hql, null); }
public static DataSet GetInstructions(int assetManagerId, int modelPortfolioId, string accountNumber, string accountName, DateTime dateFrom, DateTime dateTo, ActivityReturnFilter activeStatus, WithdrawalInstructionsTypeReturnEnum returnType, int maximumRows, int pageIndex, string sortColumn) { const string propertyList = "Key, Account.Key, Account.Number, Account.ShortName, Status, DisplayStatus, Message, Warning, WithdrawalDate, LatestPossibleFreeUpCashDate, Amount.Quantity, Amount.DisplayString, DisplayRegularity, HasOrders, MoneyTransferOrder.Key, IsEditable, IsActive, CreationDate, DoNotChargeCommission, IsCancellable"; string bareSortColumn = sortColumn.Split(' ')[0]; bool ascending = !(sortColumn.Split(' ').Length == 2 && sortColumn.Split(' ')[1] == "DESC"); IDalSession session = NHSessionFactory.CreateSession(); DataSet ds = null; IList allInstructions; if (isHqlSortingNeeded(bareSortColumn)) { allInstructions = GetInstructionsList(session, assetManagerId, modelPortfolioId, accountNumber, accountName, dateFrom, dateTo, activeStatus, returnType, null, bareSortColumn, ascending, true); ds = DataSetBuilder.CreateDataSetFromHibernateList(allInstructions, "Key, IsActive"); } else { allInstructions = GetInstructionsList(session, assetManagerId, modelPortfolioId, accountNumber, accountName, dateFrom, dateTo, activeStatus, returnType, null, bareSortColumn, ascending, false); ds = DataSetBuilder.CreateDataSetFromBusinessObjectList(allInstructions, "Key, " + bareSortColumn.Replace('_', '.')); Util.SortDataTable(ds.Tables[0], sortColumn); session.Close(); session = NHSessionFactory.CreateSession(); } int[] instructionIds = Util.GetPageKeys(ds.Tables[0], maximumRows, pageIndex, "Key"); IList pageInstructions = GetInstructionsList(session, 0, 0, null, null, DateTime.MinValue, DateTime.MinValue, ActivityReturnFilter.All, WithdrawalInstructionsTypeReturnEnum.All, instructionIds, bareSortColumn, ascending, false); DataSetBuilder.MergeDataTableWithBusinessObjectList(ds.Tables[0], pageInstructions, "Key", propertyList); session.Close(); return ds; }