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)); }
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); }
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); }