예제 #1
0
        public ActionResult Evaluate(string asin)
        {
            LookupProductRequest lookupProductRequest = new LookupProductRequest
            {
                ItemId        = asin,
                IdType        = IdType.ASIN,
                ResponseGroup = ResponseGroup.Medium
            };

            LookupProductResponse lookupProductResponse = m_productAdvertisingApi.LookupProduct(lookupProductRequest);

            ProductProfitabilityMetadata dimensions = null;

            if (lookupProductResponse != null)
            {
                Product product = lookupProductResponse.Product;

                ProductMetadata productMetadata = lookupProductResponse.ProductMetadata;

                dimensions = new ProductProfitabilityMetadata
                {
                    ASIN        = asin,
                    Length      = product.Length,
                    Width       = product.Width,
                    Height      = product.Height,
                    Weight      = product.Weight,
                    SellersRank = productMetadata.SalesRank
                };
            }

            return(View(dimensions));
        }
예제 #2
0
        public ActionResult Report(string asin)
        {
            if (asin == null)
            {
                throw new ArgumentNullException("asin");
            }

            LookupProductRequest lookupProductRequest = new LookupProductRequest
            {
                ItemId        = asin,
                IdType        = IdType.ASIN,
                ResponseGroup = ResponseGroup.Medium
            };

            Task <LookupProductResponse> productTask = Task.Factory.StartNew(() => m_productAdvertisingApi.LookupProduct(lookupProductRequest));
            Task <Data.PriceHistory>     mostRecentPriceHistoryTask = Task.Factory.StartNew(() => m_amazonMwSdbService.GetMostRecentAsinPrice(asin));
            Task <FeePreview>            feePreviewTask             = Task.Factory.StartNew(() => m_amazonMwSdbService.GetFeePreviewForAsin(asin).FirstOrDefault());
            Task <decimal?> itemPriceTask = Task.Factory.StartNew(() => m_amazonMwSdbService.GetCostOfProductForAsin(asin));

            Task.WaitAll(new Task[] { productTask, mostRecentPriceHistoryTask, feePreviewTask, itemPriceTask, itemPriceTask });

            LookupProductResponse lookupProductResponse = productTask.Result;

            ProductPageViewModel viewModel = new ProductPageViewModel
            {
                Product         = lookupProductResponse.Product,
                ProductMetadata = lookupProductResponse.ProductMetadata
            };

            viewModel.Product.ASIN = asin;

            viewModel.CurrentPriceBreakdownData = GetPriceBreakdown(asin, lookupProductResponse.Product, mostRecentPriceHistoryTask.Result, feePreviewTask.Result, itemPriceTask.Result);

            return(View(viewModel));
        }
        public void GetShipmentData(GetShipmentRequest getShipmentRequest)
        {
            InboundShipmentContainer inboundShipmentContainer = m_mwsProductsApi
                                                                .GetInboundShipments(shipmentId: getShipmentRequest.ShipmentId)
                                                                .FirstOrDefault();

            if (inboundShipmentContainer == null)
            {
                throw new InvalidOperationException("ShipmentId not found.");
            }

            List <InboundShipmentItemAndDetails> inboundShipmentItemAndDetailses = new List <InboundShipmentItemAndDetails>();

            foreach (InboundShipmentItem inboundShipmentItem in inboundShipmentContainer.InboundShipmentItems)
            {
                LookupProductRequest lookupProductRequest = new LookupProductRequest
                {
                    ItemId        = inboundShipmentItem.FulfillmentNetworkSKU,
                    IdType        = IdType.ASIN,
                    ResponseGroup = ResponseGroup.Medium
                };

                LookupProductResponse response = m_productAdvertisingApi.LookupProduct(lookupProductRequest);

                Product product = response != null
                                        ? response.Product
                                        : null;

                InboundShipmentItemAndDetails inboundShipmentItemAndDetails = new InboundShipmentItemAndDetails(
                    inboundShipmentItem.FulfillmentNetworkSKU,
                    inboundShipmentItem.QuantityInCase,
                    inboundShipmentItem.QuantityReceived,
                    inboundShipmentItem.QuantityShipped,
                    inboundShipmentItem.SellerSKU,
                    product != null ? product.Name : string.Empty,
                    product != null ? product.ItemNumber : string.Empty,
                    product != null ? product.UPC : string.Empty);

                inboundShipmentItemAndDetailses.Add(inboundShipmentItemAndDetails);
            }

            int       lineNumberCounter = 0;
            DataTable shipmentItems     = inboundShipmentItemAndDetailses
                                          .OrderBy(o => o.SKU)
                                          .Select(s =>
            {
                lineNumberCounter++;
                s.LineNumber = lineNumberCounter;

                return(s);
            })
                                          .ToDataTable();

            using (ExcelPackage excel = new ExcelPackage())
            {
                ExcelWorksheet worksheet = excel.Workbook.Worksheets.Add(getShipmentRequest.ShipmentId);

                worksheet.Cells["A1"].LoadFromDataTable(shipmentItems, true);

                ExcelUtility.CreateExcelResponse(Response, excel, string.Format("Shipment_{0}", getShipmentRequest.ShipmentId));
            }
        }
        public LookupProductResponse LookupProduct(LookupProductRequest lookupProductRequest)
        {
            LookupProductResponse lookProductResponse = null;
            ProductAdvApiResponse response;

            Dictionary <string, string> optionalParameters = new Dictionary <string, string>();

            if (lookupProductRequest.IdType == IdType.ItemNumber)
            {
                optionalParameters["Keywords"]    = lookupProductRequest.ItemId;
                optionalParameters["SearchIndex"] = lookupProductRequest.SearchIndex.ToString();

                if (lookupProductRequest.ParameterType.HasValue && lookupProductRequest.ParameterString != null)
                {
                    optionalParameters[lookupProductRequest.ParameterType.Value.ToString()] = lookupProductRequest.ParameterString;
                }

                optionalParameters["Operation"]     = Operation.ItemSearch.ToString();
                optionalParameters["SearchIndex"]   = lookupProductRequest.SearchIndex.ToString();
                optionalParameters["ResponseGroup"] = lookupProductRequest.ResponseGroup.ToString();

                response = SignAndIssueRequest(optionalParameters);

                if (!response.Errored)
                {
                    Product product = ItemSearchUtility.ReadItemSearchResponse(response.Nodes, lookupProductRequest.ItemId);
                    lookProductResponse = new LookupProductResponse(product, ProductSearchMethod.ItemNumber);
                }
            }
            else if (lookupProductRequest.IdType == IdType.ASIN)
            {
                optionalParameters["ItemId"]        = lookupProductRequest.ItemId;
                optionalParameters["IdType"]        = lookupProductRequest.IdType.ToString();
                optionalParameters["Operation"]     = Operation.ItemLookup.ToString();
                optionalParameters["ResponseGroup"] = lookupProductRequest.ResponseGroup.ToString();

                response = SignAndIssueRequest(optionalParameters);

                if (!response.Errored)
                {
                    ProductAndProductMetadata productAndProductMetadata = ItemLookupUtility.ReadAsinLookupResponse(response.Nodes);
                    lookProductResponse = new LookupProductResponse(productAndProductMetadata.Product, ProductSearchMethod.ASIN, productAndProductMetadata.ProductMetadata);
                }
            }
            else
            {
                optionalParameters["ItemId"]        = lookupProductRequest.ItemId;
                optionalParameters["IdType"]        = lookupProductRequest.IdType.ToString();
                optionalParameters["Operation"]     = Operation.ItemLookup.ToString();
                optionalParameters["SearchIndex"]   = lookupProductRequest.SearchIndex.ToString();
                optionalParameters["ResponseGroup"] = ResponseGroup.Medium.ToString();

                response = SignAndIssueRequest(optionalParameters);

                if (response != null && !response.Errored)
                {
                    ProductAndProductMetadata productAndProductMetadata = ItemLookupUtility.ReadAsinLookupResponse(response.Nodes);
                    lookProductResponse = new LookupProductResponse(productAndProductMetadata.Product, ProductSearchMethod.UPC, productAndProductMetadata.ProductMetadata);
                }
            }

            return(lookProductResponse);
        }
예제 #5
0
        public void EvaluatePriceList(PriceListFile priceListFile)
        {
            DataTable dt = ExcelUtility.ConvertExcelFileToDataTable(priceListFile.File);

            List <ManufacturerPriceListRowInput> manufacturerPriceListRowsInputs = dt.FromDataTableToList <ManufacturerPriceListRowInput>();

            // Price is always required.
            if (manufacturerPriceListRowsInputs.Any(a => !a.Price.HasValue))
            {
                throw new ArgumentException("Price must be set for all rows.");
            }

            // Need either UPC or ASIN.
            if (manufacturerPriceListRowsInputs.Any(a => a.ASIN == null && a.UPC == null))
            {
                throw new ArgumentException("ASIN or UPC must be set for all rows.");
            }

            List <ManufacturerPriceListRowOutput> manufacturerPriceListRowsOutputs = new List <ManufacturerPriceListRowOutput>();

            // Only lookup rows where either ASIN or UPC is set.
            foreach (ManufacturerPriceListRowInput manufacturerPriceListRow in manufacturerPriceListRowsInputs
                     .Where(w => !w.ASIN.IsNullOrEmptyTrimmed() || !w.UPC.IsNullOrEmptyTrimmed()))
            {
                LookupProductRequest lookupProductRequest = new LookupProductRequest
                {
                    SearchIndex   = priceListFile.SearchIndex,
                    ResponseGroup = ResponseGroup.Medium
                };

                if (manufacturerPriceListRow.ASIN != null)
                {
                    lookupProductRequest.IdType = IdType.ASIN;
                    lookupProductRequest.ItemId = manufacturerPriceListRow.ASIN;
                }
                else
                {
                    lookupProductRequest.IdType = IdType.UPC;
                    lookupProductRequest.ItemId = manufacturerPriceListRow.UPC;
                }

                LookupProductResponse lookupProductResponse = m_productAdvertisingApi.LookupProduct(lookupProductRequest);

                if (lookupProductResponse != null)
                {
                    Product product = lookupProductResponse.Product;

                    Listing listing = m_amazonApiClient.GetAllListingsForAsin(new[] { product.ASIN }).FirstOrDefault();

                    decimal?breakEven           = null;
                    decimal?profitMargin        = null;
                    decimal?lowestPrice         = null;
                    string  sellersRankCategory = null;

                    if (listing != null)
                    {
                        lowestPrice         = listing.LowestPrice;
                        sellersRankCategory = listing.SellersRankCategory;
                    }

                    if (product.Length.HasValue && product.Width.HasValue && product.Height.HasValue && product.Weight.HasValue)
                    {
                        DimensionContainer dimensionContainer = new DimensionContainer(
                            product.Length.Value,
                            product.Width.Value,
                            product.Height.Value,
                            product.Weight.Value);

                        breakEven = FeeStructureUtility.CalculateBreakEven(
                            dimensionContainer,
                            priceListFile.FeeCategory,
                            manufacturerPriceListRow.Price.Value);

                        if (lowestPrice.HasValue && lowestPrice.Value > 0)
                        {
                            profitMargin = FeeStructureUtility.CalculateProfitMargin(
                                dimensionContainer,
                                priceListFile.FeeCategory,
                                lowestPrice.Value,
                                manufacturerPriceListRow.Price.Value);
                        }
                    }

                    ManufacturerPriceListRowOutput manufacturerPriceListRowOutput = new ManufacturerPriceListRowOutput
                    {
                        ASIN                = product.ASIN,
                        UPC                 = manufacturerPriceListRow.UPC,
                        ProductName         = product.Name,
                        SellersRank         = lookupProductResponse.ProductMetadata.SalesRank,
                        SellersRankCategory = sellersRankCategory,
                        Category            = lookupProductResponse.ProductMetadata.ProductGroup,
                        Price               = manufacturerPriceListRow.Price.Value,
                        BreakEven           = breakEven.HasValue
                                                        ? breakEven.Value.ToString("F", CultureInfo.InvariantCulture)
                                                        : null,
                        LowestPrice = lowestPrice.HasValue
                                                        ? lowestPrice.Value.ToString("F", CultureInfo.InvariantCulture)
                                                        : null,
                        ProfitMargin = profitMargin.HasValue
                                                        ? string.Format("{0:0.00%}", profitMargin.Value)
                                                        : null
                    };

                    manufacturerPriceListRowsOutputs.Add(manufacturerPriceListRowOutput);
                }
            }

            ExcelUtility.WriteExcelFileToResponse(Response, manufacturerPriceListRowsOutputs, c_worksheetName, priceListFile.File.FileName);
        }