Ejemplo n.º 1
0
        public FeedSubmissionInfo GetFeedSubmissionList(string submissionId)
        {
            try
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Stage, null, null, AmazonApiSection.Feeds,
                                      "GetFeedSubmissionList", null, null, null, "Getting result for Amazon Submission #" + submissionId);
                _amazonAnalyticsService.TrackNewApiCall(AmazonApiSection.Feeds, "GetFeedSubmissionList");
                var service = _amazonApiService.GetFeedsApiService();
                var request = _amazonApiService.GetFeedSubmissionListRequest(submissionId);

                var result = service.GetFeedSubmissionList(request);

                if (result != null && result.IsSetGetFeedSubmissionListResult() &&
                    result.GetFeedSubmissionListResult != null)
                {
                    return(result.GetFeedSubmissionListResult.FeedSubmissionInfo.First());
                }
            }
            catch (MarketplaceWebServiceException ex)
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Error, ex, null, AmazonApiSection.Feeds, "GetFeedSubmissionList", null, null, null);
            }
            catch (Exception ex)
            {
                CurrentRequestData.ErrorSignal.Raise(ex);
            }
            return(null);
        }
        public Product GetMatchingProductForId(string sku)
        {
            try
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Stage, null, null, AmazonApiSection.Products,
                                      "GetMatchingProductForId", null, null, null, "Getting Amazon Product details with SKU:" + sku);
                _amazonAnalyticsService.TrackNewApiCall(AmazonApiSection.Feeds, "GetFeedSubmissionList");
                var service = _amazonApiService.GetProductsApiService();
                var request = _amazonApiService.GetMatchingProductForIdRequest(sku);

                var result = service.GetMatchingProductForId(request);

                if (result != null && result.IsSetGetMatchingProductForIdResult() &&
                    result.GetMatchingProductForIdResult != null && result.GetMatchingProductForIdResult.Any() &&
                    result.GetMatchingProductForIdResult.First().status == "Success" &&
                    result.GetMatchingProductForIdResult.First().Products.Product.Any())
                {
                    return(result.GetMatchingProductForIdResult.First().Products.Product.First());
                }
            }
            catch (MarketplaceWebServiceException ex)
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Error,
                                      ex, null, AmazonApiSection.Feeds, "GetFeedSubmissionList", null, null, null,
                                      "Error happened during operation of getting Amazon Product details with SKU:" + sku);
            }
            catch (Exception ex)
            {
                CurrentRequestData.ErrorSignal.Raise(ex);
            }
            return(null);
        }
        public void Save(AmazonListing item)
        {
            var id = item.Id;

            _session.Transact(session => session.SaveOrUpdate(item));
            _amazonLogService.Add(AmazonLogType.Listings, id > 0 ? AmazonLogStatus.Update : AmazonLogStatus.Insert,
                                  null, null, null, null, null, item, null);
        }
Ejemplo n.º 4
0
        public void SettingsController_AppPOST_ShouldCallAddLog()
        {
            var model = new AmazonAppSettings();

            var result = _settingsController.App_POST(model);

            A.CallTo(() => _amazonLogService.Add(AmazonLogType.AppSettings, AmazonLogStatus.Update,
                                                 null, null, null, null, null, null, null, string.Empty, string.Empty)).MustHaveHappened();
        }
        public void AmazonListingGroupService_Save_ShouldCallAddLog()
        {
            var item = new AmazonListingGroup();

            _amazonListingGroupService.Save(item);

            A.CallTo(() => _amazonLogService.Add(AmazonLogType.ListingGroups, AmazonLogStatus.Insert,
                                                 null, null, null, null, null, null, item, string.Empty, string.Empty)).MustHaveHappened();
        }
        private AmazonServiceStatus GetServiceStatus(AmazonApiSection apiSection)
        {
            try
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Stage, null, null, apiSection,
                                      "GetServiceStatus", null, null, null, "Getting Api Service Status");
                _amazonAnalyticsService.TrackNewApiCall(apiSection, "GetServiceStatus");
                switch (apiSection)
                {
                case AmazonApiSection.Orders:
                    var ordersApiRequest = new GetServiceStatusRequest {
                        SellerId = _amazonSellerSettings.SellerId
                    };
                    var ordersApiResult = GetOrdersApiService().GetServiceStatus(ordersApiRequest);
                    if (ordersApiResult != null && ordersApiResult.GetServiceStatusResult != null)
                    {
                        return(ordersApiResult.GetServiceStatusResult.Status.GetEnumByValue <AmazonServiceStatus>());
                    }
                    break;

                case AmazonApiSection.Products:
                    var productsApiRequest = new MarketplaceWebServiceProducts.Model.GetServiceStatusRequest
                    {
                        SellerId = _amazonSellerSettings.SellerId
                    };
                    var productsApiResult = GetProductsApiService().GetServiceStatus(productsApiRequest);
                    if (productsApiResult != null && productsApiResult.GetServiceStatusResult != null)
                    {
                        return(productsApiResult.GetServiceStatusResult.Status.GetEnumByValue <AmazonServiceStatus>());
                    }
                    break;
                }
            }
            catch (MarketplaceWebServiceProductsException ex)
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Error, ex, null, apiSection, "GetServiceStatus",
                                      null, null, null);
            }
            catch (MarketplaceWebServiceOrdersException ex)
            {
                _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Error, ex, null, apiSection, "GetServiceStatus",
                                      null, null, null);
            }
            catch (Exception ex)
            {
                CurrentRequestData.ErrorSignal.Raise(ex);
            }
            return(AmazonServiceStatus.RED);
        }
Ejemplo n.º 7
0
        public AmazonOrder GetByAmazonOrderId(string id)
        {
            var orders = _session.QueryOver <AmazonOrder>().Where(item => item.AmazonOrderId == id).Cacheable().List();

            if (orders != null && orders.Count > 1)
            {
                _amazonLogService.Add(AmazonLogType.Orders, AmazonLogStatus.Error,
                                      null, null, null, null, null, null, null, "Duplicate Amazon orders detected with #" + orders.First().AmazonOrderId);
                return(orders.First());
            }
            if (orders != null && orders.Count == 1)
            {
                return(orders.First());
            }
            return(null);
        }
Ejemplo n.º 8
0
        public void AmazonOrderService_Update_ShouldCallAddLog()
        {
            var item = new AmazonOrder()
            {
                AmazonOrderId = "1"
            };

            Session.Transact(session => session.Save(item));

            _amazonOrderService.Update(item);

            A.CallTo(() => _amazonLogService.Add(AmazonLogType.Orders, AmazonLogStatus.Update,
                                                 null, null, null, null, item, null, null,
                                                 "Amazon Order #" + item.AmazonOrderId, string.Empty)
                     ).MustHaveHappened();
        }
        private List <Order> GetOrder(GetOrderRequest request)
        {
            _amazonLogService.Add(AmazonLogType.Api, AmazonLogStatus.Stage, null, null, AmazonApiSection.Orders,
                                  "GetOrder", null, null, null, "Listing Specific Amazon Orders (" + request.AmazonOrderId.Id.ToTokenizedString(", ") + ")");
            _amazonAnalyticsService.TrackNewApiCall(AmazonApiSection.Orders, "GetOrder");
            var result = _marketplaceWebServiceOrders.GetOrder(request);
            var orders = new List <Order>();

            if (result == null || !result.IsSetGetOrderResult())
            {
                return(orders);
            }
            if (result.GetOrderResult.IsSetOrders() && result.GetOrderResult.Orders.IsSetOrder())
            {
                orders.AddRange(result.GetOrderResult.Orders.Order);
            }

            return(orders);
        }
Ejemplo n.º 10
0
        public AmazonOrder ScheduleSync(Order order)
        {
            switch (order.OrderStatus)
            {
            case OrderStatusEnum.Unshipped:
            case OrderStatusEnum.PartiallyShipped:
            case OrderStatusEnum.Shipped:
            case OrderStatusEnum.Canceled:
            {
                if (!_importAmazonOrderService.IsCurrencyValid(order))
                {
                    _amazonLogService.Add(AmazonLogType.Orders, AmazonLogStatus.Stage, null, null,
                                          AmazonApiSection.Orders,
                                          null, null, null, null,
                                          string.Format(
                                              "Amazon Order #{0} uses different currency than current MrCMS Site.",
                                              order.AmazonOrderId));
                }
                else
                {
                    var amazonOrder     = _amazonOrderService.GetByAmazonOrderId(order.AmazonOrderId);
                    var amazonOrderData = _amazonOrderSyncInfoService.GetByAmazonOrderId(order.AmazonOrderId).ToList();

                    if (order.OrderStatus == OrderStatusEnum.Canceled)
                    {
                        return(amazonOrder);
                    }

                    var newAmazonOrderData = new AmazonOrderSyncData
                    {
                        OrderId   = order.AmazonOrderId,
                        Operation = (amazonOrder == null
                                            ? (amazonOrderData.Any(x => x.Operation == SyncAmazonOrderOperation.Add) ? SyncAmazonOrderOperation.Update : SyncAmazonOrderOperation.Add) : SyncAmazonOrderOperation.Update),
                        Status = SyncAmazonOrderStatus.Pending,
                        Data   = AmazonAppHelper.SerializeToJson(order),
                        Site   = CurrentRequestData.CurrentSite
                    };

                    if (amazonOrder != null)
                    {
                        newAmazonOrderData.AmazonOrder = amazonOrder;
                    }

                    _amazonOrderSyncInfoService.Add(newAmazonOrderData);

                    return(amazonOrder);
                }
            }
            break;
            }
            return(null);
        }
        public void CloseAmazonListings(AmazonSyncModel model, AmazonListingGroup amazonListingGroup)
        {
            var feedContent = _amazonFeedsApiService.GetProductsDeleteFeeds(amazonListingGroup);

            var submissionId = _amazonRequestService.SubmitCloseRequest(model, feedContent);

            var isUploaded   = false;
            var retryCounter = 0;

            while (!isUploaded)
            {
                retryCounter++;
                retryCounter++;
                if (retryCounter == 3)
                {
                    AmazonProgressBarHelper.Update(model.Task, "Error",
                                                   "Request timed out. Please check logs for potential errors and try again later.", 100,
                                                   100);
                    break;
                }

                try
                {
                    AmazonProgressBarHelper.Update(model.Task, "Push", "Checking if request was processed...", 100, 75);
                    if (_amazonFeedsApiService.GetFeedSubmissionList(submissionId).FeedProcessingStatus == "_DONE_")
                    {
                        AmazonProgressBarHelper.Update(model.Task, "Push", "Request was processed", 100, 90);
                        foreach (var amazonListing in amazonListingGroup.Items)
                        {
                            AmazonProgressBarHelper.Update(model.Task, "Push", "Updating local status of Amazon Listing #" + amazonListing.SellerSKU, 100, 90);
                            _amazonListingService.UpdateAmazonListingStatus(amazonListing);
                        }

                        isUploaded = true;
                    }
                    else
                    {
                        AmazonProgressBarHelper.Update(model.Task, "Push", "Nothing yet, we will wait 2 min. more and try again...", 100, 75);
                        Thread.Sleep(120000);
                    }
                }
                catch (Exception ex)
                {
                    _amazonLogService.Add(AmazonLogType.Listings, AmazonLogStatus.Error, ex, null,
                                          AmazonApiSection.Feeds, null, null, null, null, "Closing Amazon Listings");

                    AmazonProgressBarHelper.Update(model.Task, "Push", "Amazon Api is busy, we will need to wait additional 2 min. and try again", 100, 75);
                    Thread.Sleep(120000);
                }
            }
        }
Ejemplo n.º 12
0
        public string SubmitCloseRequest(AmazonSyncModel model, FileStream productFeedContent)
        {
            var submissionId  = String.Empty;
            var uploadSuccess = false;
            var retryCount    = 0;

            while (!uploadSuccess)
            {
                retryCount++;
                if (retryCount == 3)
                {
                    AmazonProgressBarHelper.Update(model.Task, "Error",
                                                   "Request timed out. Please check logs for potential errors and try again later.", 100,
                                                   100);
                    break;
                }

                try
                {
                    AmazonProgressBarHelper.Update(model.Task, "Push", "Pushing request to Amazon", 100, 0);
                    var feedResponse = _amazonFeedsApiService.SubmitFeed(AmazonFeedType._POST_PRODUCT_DATA_, productFeedContent);
                    submissionId = feedResponse.FeedSubmissionId;
                    AmazonProgressBarHelper.Update(model.Task, "Push", "Request pushed to Amazon", 100, 75);

                    uploadSuccess = true;
                }
                catch (Exception ex)
                {
                    _amazonLogService.Add(AmazonLogType.Listings, AmazonLogStatus.Error, ex, null,
                                          AmazonApiSection.Feeds, null, null, null, null, "Error during push of product delete request to Amazon");

                    Thread.Sleep(120000);
                }
            }
            return(submissionId);
        }
Ejemplo n.º 13
0
        public void SyncAmazonListing(AmazonSyncModel model)
        {
            AmazonProgressBarHelper.Clean(model.Task);

            var amazonListing = _amazonListingService.Get(model.Id);

            if (amazonListing != null)
            {
                _amazonLogService.Add(AmazonLogType.Listings, AmazonLogStatus.Stage, null, null, AmazonApiSection.Feeds, null, null, amazonListing, null,
                                      "Preparing listing for Amazon");
                AmazonProgressBarHelper.Update(model.Task, "Push", "Preparing listing for Amazon", 100, 0);

                _exportAmazonListingService.SubmitSingleProductFeed(model, amazonListing);

                AmazonProgressBarHelper.Update(model.Task, "Push", "Amazon Listing successfully synced", 100, 100);
            }

            else
            {
                AmazonProgressBarHelper.Update(model.Task, "Push", "No listing to sync", null, null);
            }

            AmazonProgressBarHelper.Update(model.Task, "Completed", "Completed", 100, 100);
        }
        public AmazonOrderSyncData Add(AmazonOrderSyncData item)
        {
            _session.Transact(session =>
            {
                if (item.AmazonOrder != null)
                {
                    item.AmazonOrder = session.Get <AmazonOrder>(item.AmazonOrder.Id);
                    item.Site        = session.Get <Site>(item.AmazonOrder.Site.Id);
                }
                //sanity check there are no orders already in the table as we were getting duplicates
                var itemInTable =
                    session.QueryOver <AmazonOrderSyncData>()
                    .Where(x => x.OrderId == item.OrderId && x.Operation == SyncAmazonOrderOperation.Add)
                    .RowCount();

                if (itemInTable == 0)
                {
                    session.Save(item);
                }
            });
            _amazonLogService.Add(AmazonLogType.OrdersSyncData, AmazonLogStatus.Insert,
                                  null, null, null, null, null, null, null, "Amazon Order #" + item.OrderId);
            return(item);
        }
 public ActionResult App_POST(AmazonAppSettings amazonAppSettings)
 {
     _amazonLogService.Add(AmazonLogType.AppSettings, AmazonLogStatus.Update, null, null, null, null, null, null, null);
     _configurationProvider.SaveSettings(amazonAppSettings);
     return(View(amazonAppSettings));
 }
 public ActionResult DeleteAllLogs_POST()
 {
     _amazonLogService.DeleteAllLogs();
     _amazonLogService.Add(AmazonLogType.Logs, AmazonLogStatus.Delete, null, null, null, null, null, null, null, null);
     return(RedirectToAction("Index"));
 }
Ejemplo n.º 17
0
        public void LogsController_DeleteAllLogsPOST_ShouldCallAddLog()
        {
            var result = _logsController.DeleteAllLogs_POST();

            A.CallTo(() => _amazonLogService.Add(AmazonLogType.Logs, AmazonLogStatus.Delete, null, null, null, null, null, null, null, null, string.Empty)).MustHaveHappened();
        }