Exemplo n.º 1
0
            /// <summary>
            /// Get item availabilities by requested item quantities.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns><see cref="Response"/> object.</returns>
            private Response GetItemAvailabilities(GetItemAvailabilitiesDataRequest request)
            {
                var dataManager = new ItemAvailabilityDataManager(request.RequestContext);
                PagedResult <ItemAvailability> itemAvailabilities = null;

                ItemAvailabilitiesQueryCriteria criteria = request.QueryCriteria;

                ThrowIf.Null(criteria, "request.QueryCriteria");

                if (criteria.MaxWarehousesPerItem.HasValue)
                {
                    // Get item availabilities by requested item quantities.
                    itemAvailabilities = dataManager.GetItemAvailabilitiesByItemQuantities(criteria.ItemQuantities, criteria.CustomerAccountNumber, criteria.MaxWarehousesPerItem.Value, request.QueryResultSettings);
                    return(new EntityDataServiceResponse <ItemAvailability>(itemAvailabilities));
                }

                if (criteria.ItemWarehouses != null)
                {
                    // Get item availabilities by item and warehouse combinations.
                    itemAvailabilities = dataManager.GetItemAvailabilitiesByItemWarehouses(criteria.ItemWarehouses, request.QueryResultSettings);
                    return(new EntityDataServiceResponse <ItemAvailability>(itemAvailabilities));
                }

                if (criteria.IncludeQuantities)
                {
                    // Get item available quantities by items.
                    PagedResult <ItemAvailableQuantity> itemAvailableQuantities = dataManager.GetItemAvailableQuantitiesByItems(criteria.Items, criteria.CustomerAccountNumber, request.QueryResultSettings);
                    return(new EntityDataServiceResponse <ItemAvailableQuantity>(itemAvailableQuantities));
                }

                // Get item availabilities by items.
                itemAvailabilities = dataManager.GetItemAvailabilitiesByItems(criteria.Items, criteria.CustomerAccountNumber, request.QueryResultSettings);
                return(new EntityDataServiceResponse <ItemAvailability>(itemAvailabilities));
            }
            private static GetItemAvailabilitiesByItemWarehousesServiceResponse GetItemAvailabilitiesByItemWarehouses(GetItemAvailabilitiesByItemWarehousesServiceRequest request)
            {
                QueryResultSettings            settings           = request.QueryResultSettings ?? QueryResultSettings.AllRecords;
                PagedResult <ItemAvailability> itemAvailabilities = null;

                try
                {
                    var searchCriteria = new ItemAvailabilitiesQueryCriteria(request.ItemWarehouses);
                    var dataRequest    = new GetItemAvailabilitiesDataRequest(searchCriteria, settings);
                    itemAvailabilities = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <ItemAvailability> >(dataRequest, request.RequestContext).PagedEntityCollection;
                }
                catch (StorageException)
                {
                    // supress exception in order not to block the order
                    // raise the notification instead
                    UnableToDetermineQuantityForStoresNotification notification = new UnableToDetermineQuantityForStoresNotification(request.ItemWarehouses);
                    request.RequestContext.Notify(notification);
                }

                return(new GetItemAvailabilitiesByItemWarehousesServiceResponse(itemAvailabilities));
            }
            private static GetItemAvailableQuantitiesByItemsServiceResponse GetItemAvailableQuantitiesByItems(GetItemAvailableQuantitiesByItemsServiceRequest request)
            {
                var settings = request.QueryResultSettings ?? QueryResultSettings.AllRecords;
                PagedResult <ItemAvailableQuantity> itemAvailableQuantities = null;

                try
                {
                    var searchCriteria = new ItemAvailabilitiesQueryCriteria(request.CustomerAccountNumber, request.Items, includeQuantities: true);
                    var dataRequest    = new GetItemAvailabilitiesDataRequest(searchCriteria, settings);
                    itemAvailableQuantities = request.RequestContext.Execute <EntityDataServiceResponse <ItemAvailableQuantity> >(dataRequest).PagedEntityCollection;
                }
                catch (StorageException)
                {
                    // supress exception in order to not block the order
                    // raise the notification instead
                    UnableToDetermineQuantityNotification notification = new UnableToDetermineQuantityNotification(request.Items);
                    request.RequestContext.Notify(notification);
                }

                return(new GetItemAvailableQuantitiesByItemsServiceResponse(itemAvailableQuantities));
            }