/// <summary> /// Get details of Hospitality Product groups and its Fixtures /// </summary> /// <param name="inputModel">The given hospitality product group list input model</param> /// <returns>Hospitality Product groups and its fixtures list</returns> public HospitalityProductGroupViewModel GetHospitalityProductGroups(HospitalityProductGroupInputModel inputModel) { HospitalityProductGroupViewModel viewModel = new HospitalityProductGroupViewModel(getContentAndAttributes: true); DataSet dsProductGroupList = new DataSet(); DataSet dsProductGroupFixturesList = new DataSet(); ErrorObj err = new ErrorObj(); DEProductDetails de = new DEProductDetails(); DESettings settings = Environment.Settings.DESettings; List <ProductGroupDetails> productGroupDetailsList = new List <ProductGroupDetails>(); List <ProductDetails> productGroupFixturesList = new List <ProductDetails>(); dsProductGroupList = retrieveProductGroups(); viewModel.Error = Data.PopulateErrorObject(err, dsProductGroupList, settings, GlobalConstants.STATUS_RESULTS_TABLE_NAME, 2); if (!viewModel.Error.HasError) { productGroupDetailsList = Data.PopulateObjectListFromTable <ProductGroupDetails>(dsProductGroupList.Tables["ProductGroupsDetails"]); foreach (ProductGroupDetails productGroup in productGroupDetailsList) { HospitalityProductGroupInputModel inputModelProductGroup = new HospitalityProductGroupInputModel(); inputModelProductGroup.ProductGroupCode = productGroup.GroupId; dsProductGroupFixturesList = retrieveProductGroupFixtures(inputModelProductGroup.ProductGroupCode); viewModel.Error = Data.PopulateErrorObject(err, dsProductGroupFixturesList, settings, GlobalConstants.STATUS_RESULTS_TABLE_NAME, 2); if (!viewModel.Error.HasError) { productGroup.ProductGroupFixturesList = new List <ProductDetails>(); productGroup.ProductGroupFixturesList = Data.PopulateObjectListFromTable <ProductDetails>(dsProductGroupFixturesList.Tables["ProductGroupFixturesDeatils"]); } } viewModel.ProductGroupDetailsList = productGroupDetailsList; } return(viewModel); }
/// <summary> /// Call the functions of creating the HospitalityProductListViewModel and HospitalityProductGroupViewModel /// then use the HospitalityProductGroupViewModel to filter HospitalityProductListViewModel based on ProductCode /// </summary> /// <param name="inputModelProductList">The given hospitality product list input model</param> /// <param name="inputModelProductGroup">The given hospitality product group input model</param> /// <returns>The formed hospitality product group view model</returns> public HospitalityProductGroupViewModel GetHospitalityProductListByProductGroup(HospitalityProductListInputModel inputModelProductList, HospitalityProductGroupInputModel inputModelProductGroup) { HospitalityProductListViewModel productListViewModel = new HospitalityProductListViewModel(getContentAndAttributes: true); HospitalityProductGroupViewModel productGroupViewModel = new HospitalityProductGroupViewModel(getContentAndAttributes: true); productListViewModel = GetHospitalityProductList(inputModelProductList); if (productListViewModel.Error != null && productListViewModel.Error.HasError) { productGroupViewModel.Error.HasError = true; } else { productGroupViewModel = GetHospitalityProductGroups(inputModelProductGroup); if (productGroupViewModel.Error == null || !productGroupViewModel.Error.HasError) { productGroupViewModel.ProductGroupDetailsList = productGroupViewModel.ProductGroupDetailsList.Where(a => a.GroupId.Equals(inputModelProductGroup.ProductGroupCode)).ToList(); if (productGroupViewModel.ProductGroupDetailsList.Count > 0) { productGroupViewModel.ProductGroupFixturesList = new List <ProductDetails>(); productGroupViewModel.ProductGroupFixturesList = productListViewModel.ProductListDetailByPackageId.Where(a => productGroupViewModel.ProductGroupDetailsList[0].ProductGroupFixturesList.Any(b => b.ProductCode.Trim().Equals(a.ProductCode.Trim()))).ToList(); } else { productGroupViewModel.Error.HasError = true; } } } return(productGroupViewModel); }
/// <summary> /// Retrieve the list of corporate hospitality packages /// </summary> /// <param name="inputModel">The given hospitality package list input model</param> /// <returns>The formed hospitality package list view model</returns> public HospitalityPackageListViewModel GetHospitalityPackageList(HospitalityPackageListInputModel inputModel) { _packageListViewModel = new HospitalityPackageListViewModel(true); _packageListViewModel.FormattedPackagePrice = _packageListViewModel.GetPageText("packagePriceFormat"); _packageListViewModel.FormattedPackageGroupSizeDescription = _packageListViewModel.GetPageText("packageGroupSizeFormat"); if (string.IsNullOrEmpty(inputModel.ProductCode) && string.IsNullOrEmpty(inputModel.ProductGroupCode)) { //No product code or product group code is passed in DataTable dtProductListHome = buildProductListDataTable(GlobalConstants.HOMEPRODUCTTYPE); DataTable dtProductListSeason = buildProductListDataTable(GlobalConstants.SEASONTICKETPRODUCTTYPE); List <PackageDetails> packageListHome = buildPackageList(dtProductListHome); List <PackageDetails> packageListSeason = buildPackageList(dtProductListSeason); _packageListViewModel.PackageListDetailsHome = packageListHome; _packageListViewModel.PackageListDetailsSeason = packageListSeason; //Calculate Min and Max values for filters on other pages if (packageListHome.Count > 0) { _packageListViewModel.MinGroupSizeHome = packageListHome.OrderBy((x) => x.GroupSize).Select((x) => x.GroupSize).First(); _packageListViewModel.MaxGroupSizeHome = packageListHome.OrderBy((x) => x.GroupSize).Select((x) => x.GroupSize).Last(); _packageListViewModel.MinBudgetHome = packageListHome.OrderBy((x) => x.Price).Select((x) => x.Price).First(); _packageListViewModel.MaxBudgetHome = packageListHome.OrderBy((x) => x.Price).Select((x) => x.Price).Last(); foreach (PackageDetails package in _packageListViewModel.PackageListDetailsHome) { string price = TDataObjects.PaymentSettings.FormatCurrency(package.Price, Environment.Settings.BusinessUnit, Environment.Settings.Partner); package.DisplayPrice = _packageListViewModel.FormattedPackagePrice.Replace("<<PackagePrice>>", price); package.HasSoldOutProducts = false; } } if (packageListSeason.Count > 0) { _packageListViewModel.MinGroupSizeSeason = packageListSeason.OrderBy((x) => x.GroupSize).Select((x) => x.GroupSize).First(); _packageListViewModel.MaxGroupSizeSeason = packageListSeason.OrderBy((x) => x.GroupSize).Select((x) => x.GroupSize).Last(); _packageListViewModel.MinBudgetSeason = packageListSeason.OrderBy((x) => x.Price).Select((x) => x.Price).First(); _packageListViewModel.MaxBudgetSeason = packageListSeason.OrderBy((x) => x.Price).Select((x) => x.Price).Last(); foreach (PackageDetails package in _packageListViewModel.PackageListDetailsSeason) { string price = TDataObjects.PaymentSettings.FormatCurrency(package.Price, Environment.Settings.BusinessUnit, Environment.Settings.Partner); package.DisplayPrice = _packageListViewModel.FormattedPackagePrice.Replace("<<PackagePrice>>", price); package.HasSoldOutProducts = false; } } } else if (!string.IsNullOrEmpty(inputModel.ProductCode)) { //A product code has been passed into the viewmodel List <PackageDetails> packageListProduct = new List <PackageDetails>(); DataTable dtProduct = new DataTable(); dtProduct.Columns.Add("ProductCode", typeof(string)); dtProduct.Rows.Add(inputModel.ProductCode); packageListProduct = buildPackageList(dtProduct); //If the user has selected a package then it should be removed from the list before bound to the view model //This is used to show the related packages for the current fixture that relate to the current package being selected packageListProduct = packageListProduct.Where(x => x.PackageID != inputModel.PackageId).ToList(); _packageListViewModel.PackageListDetailsByProductCode = packageListProduct; if (packageListProduct.Count > 0) { foreach (PackageDetails package in _packageListViewModel.PackageListDetailsByProductCode) { string price = TDataObjects.PaymentSettings.FormatCurrency(package.Price, Environment.Settings.BusinessUnit, Environment.Settings.Partner); package.DisplayPrice = _packageListViewModel.FormattedPackagePrice.Replace("<<PackagePrice>>", price); package.HasSoldOutProducts = false; } } } else if (!string.IsNullOrEmpty(inputModel.ProductGroupCode)) { //A product group code has been passed into the viewmodel HospitalityProductGroupViewModel viewModel = new HospitalityProductGroupViewModel(getContentAndAttributes: true); DataSet dsProductGroupPackageList = new DataSet(); DataSet dsProductGroupFixtures; DataSet dsSoldOutFixturesList = new DataSet(); ErrorObj err = new ErrorObj(); DEProductDetails de = new DEProductDetails(); DESettings settings = Environment.Settings.DESettings; List <PackageDetails> packageListProductGroup = new List <PackageDetails>(); List <ProductDetails> productGroupFixturesList = new List <ProductDetails>(); List <ComponentDetails> componentsList = new List <ComponentDetails>(); List <ComponentDetails> filteredComponentsList; List <ComponentDetails> filteredComponentsListPackage; dsProductGroupPackageList = retrivePackagesByProductGroup(inputModel.ProductGroupCode); viewModel.Error = Data.PopulateErrorObject(err, dsProductGroupPackageList, settings, GlobalConstants.STATUS_RESULTS_TABLE_NAME, 4); if (!viewModel.Error.HasError) { packageListProductGroup = Data.PopulateObjectListFromTable <PackageDetails>(dsProductGroupPackageList.Tables["PackageList"]); componentsList = Data.PopulateObjectListFromTable <ComponentDetails>(dsProductGroupPackageList.Tables["ComponentList"]); //retrieve fixtures for product group dsProductGroupFixtures = new DataSet(); dsProductGroupFixtures = retrieveProductGroupFixtures(inputModel.ProductGroupCode); viewModel.Error = Data.PopulateErrorObject(err, dsProductGroupFixtures, settings, GlobalConstants.STATUS_RESULTS_TABLE_NAME, 2); if (!viewModel.Error.HasError) { productGroupFixturesList = Data.PopulateObjectListFromTable <ProductDetails>(dsProductGroupFixtures.Tables["ProductGroupFixturesDeatils"]).Where(s => (Convert.ToDateTime(s.ProductDate)) > DateTime.Now).ToList(); foreach (PackageDetails package in packageListProductGroup) { package.SoldOutProducts = string.Empty; package.ProductGroupCode = inputModel.ProductGroupCode; //get package group size filteredComponentsListPackage = new List <ComponentDetails>(); filteredComponentsListPackage = componentsList.Where(x => (x.PackageID == package.PackageID && x.ProductCode == productGroupFixturesList.Select(s => s.ProductCode).Distinct().FirstOrDefault().Trim() && x.ComponentType == "A")).ToList(); if (filteredComponentsListPackage.Count > 0) { package.AvailabilityComponentID = filteredComponentsListPackage[0].ComponentID; package.GroupSize = Int32.Parse(filteredComponentsListPackage.Select(x => x.NumberOfUnits).FirstOrDefault().ToString()); } else { package.GroupSize = 1; } if (package.GroupSize == 1) { package.GroupSizeDescription = _packageListViewModel.GetPageText("packageGroupSizePerPersonText"); } else { package.GroupSizeDescription = _packageListViewModel.FormattedPackageGroupSizeDescription.Replace("<<GroupSize>>", Convert.ToString(package.GroupSize)); } //get sold out products foreach (ProductDetails product in productGroupFixturesList) { filteredComponentsList = new List <ComponentDetails>(); filteredComponentsList = componentsList.Where(x => (x.PackageID == package.PackageID && x.ProductCode == product.ProductCode)).ToList(); product.AvailabilityDetail = getAvailabilityDetails(package, filteredComponentsList); if (product.AvailabilityDetail.AvailabilityText.Replace("-", "").Replace(" ", "").ToUpper() == GlobalConstants.HOSPITALITY_FIXTURE_NOT_AVAILABLE) { if (string.IsNullOrEmpty(package.SoldOutProducts)) { package.SoldOutProducts = product.ProductCode.Trim(); } else { package.SoldOutProducts = package.SoldOutProducts + ", " + product.ProductCode; } } } if (package.SoldOutProducts.Length > 0) { package.HasSoldOutProducts = true; } else { package.HasSoldOutProducts = false; } } } } _packageListViewModel.PackageListDetailsByProductGroup = packageListProductGroup; } return(_packageListViewModel); }