예제 #1
0
        public void AmazonGenerateFeedService_GetProduct_ShouldSetValues()
        {
            var listing = new AmazonListing()
            {
                SellerSKU             = "S1",
                Manafacturer          = "M",
                Brand                 = "B",
                StandardProductId     = "SP",
                StandardProductIDType = StandardProductIDType.EAN,
                Condition             = ConditionType.New,
                ConditionNote         = "CN",
                Title                 = "T",
                ReleaseDate           = CurrentRequestData.Now,
                MfrPartNumber         = "MPN1"
            };
            var results = _amazonGenerateFeedService.GetProduct(listing);

            results.As <Product>().Condition.ConditionType.Should().Be(listing.Condition);
            results.As <Product>().Condition.ConditionNote.Should().Be(listing.ConditionNote);
            results.As <Product>().SKU.Should().Be(listing.SellerSKU);
            results.As <Product>().StandardProductID.Type.Should().Be(listing.StandardProductIDType);
            results.As <Product>().StandardProductID.Value.Should().Be(listing.StandardProductId);
            results.As <Product>().DescriptionData.Brand.Should().Be(listing.Brand);
            results.As <Product>().DescriptionData.Title.Should().Be(listing.Title);
            results.As <Product>().DescriptionData.Manufacturer.Should().Be(listing.Manafacturer);
            results.As <Product>().DescriptionData.MfrPartNumber.Should().Be(listing.MfrPartNumber);
            results.As <Product>().ReleaseDate.Should().Be(listing.ReleaseDate.Value);
        }
예제 #2
0
        public Product GetProduct(AmazonListing listing)
        {
            var product = new Product
            {
                Condition = new ConditionInfo {
                    ConditionType = listing.Condition, ConditionNote = listing.ConditionNote
                },
                SKU = listing.SellerSKU,
                StandardProductID = new StandardProductID()
                {
                    Type  = listing.StandardProductIDType,
                    Value = listing.StandardProductId
                },
                DescriptionData = new ProductDescriptionData()
                {
                    Brand         = listing.Brand,
                    Title         = listing.Title,
                    Manufacturer  = listing.Manafacturer,
                    MfrPartNumber = listing.MfrPartNumber
                }
            };

            if (listing.ReleaseDate.HasValue)
            {
                product.ReleaseDate = listing.ReleaseDate.Value;
            }
            return(product);
        }
        public AmazonListing UpdateAmazonListing(AmazonListing amazonListing)
        {
            var productVariant = _productVariantService.GetProductVariantBySKU(amazonListing.ProductVariant.SKU);

            amazonListing.ProductVariant = productVariant;
            amazonListing.Brand          = productVariant.Product.Brand != null ? productVariant.Product.Brand.Name : String.Empty;
            amazonListing.Condition      = ConditionType.New;
            var currency = _ecommerceSettings.Currency();

            amazonListing.Currency      = (currency != null && !String.IsNullOrWhiteSpace(currency.Code))?currency.Code:CurrencyCode.GBP.GetDescription();
            amazonListing.Manafacturer  = productVariant.Product.Brand != null ? productVariant.Product.Brand.Name : String.Empty;
            amazonListing.MfrPartNumber = productVariant.ManufacturerPartNumber;
            amazonListing.Quantity      = productVariant.TrackingPolicy == TrackingPolicy.Track
                                          ? _getStockRemainingQuantity.Get(productVariant)
                                          : 1000;
            amazonListing.Price                 = _productPricingMethod.GetUnitPrice(productVariant, 0m, 0m);
            amazonListing.SellerSKU             = productVariant.SKU;
            amazonListing.Title                 = productVariant.DisplayName;
            amazonListing.StandardProductIDType = _amazonSellerSettings.BarcodeIsOfType;
            amazonListing.StandardProductId     = productVariant.Barcode.Trim();

            amazonListing.FulfillmentChannel = amazonListing.AmazonListingGroup.FulfillmentChannel ?? AmazonFulfillmentChannel.MFN;

            _amazonListingService.Save(amazonListing);

            return(amazonListing);
        }
        public void PrepareForSyncAmazonListingService_UpdateAmazonListing_ShouldReturnAmazonListingType()
        {
            var mockingKernel = new MockingKernel();

            MrCMSKernel.OverrideKernel(mockingKernel);
            mockingKernel.Bind <ISession>().ToMethod(context => A.Fake <ISession>());

            var product        = new Product();
            var productVariant = new ProductVariant()
            {
                Product = product, SKU = "S1", Barcode = ""
            };
            var model = new AmazonListing()
            {
                ProductVariant = productVariant, AmazonListingGroup = new AmazonListingGroup()
                {
                    FulfillmentChannel = AmazonFulfillmentChannel.MFN
                }
            };

            A.CallTo(() => _productVariantService.GetProductVariantBySKU(model.ProductVariant.SKU)).Returns(productVariant);

            var results = _prepareForSyncAmazonListingService.UpdateAmazonListing(model);

            results.Should().BeOfType <AmazonListing>();
        }
        public async Task <IActionResult> Create([Bind("AmazonProductColorID,AmazonProductID,DesignURL,AmazonDesignID,Top,Left,Right,Bot")] AmazonListing amazonListing)
        {
            if (ModelState.IsValid)
            {
                _context.Add(amazonListing);
                _context.SaveChanges();

                AmazonProductColor amazonProductColor = await _context.AmazonProductColors.SingleOrDefaultAsync(e => e.AmazonProductColorID == amazonListing.AmazonProductColorID);

                AmazonDesign amazonDesign = await _context.AmazonDesigns.SingleOrDefaultAsync(e => e.AmazonDesignID == amazonListing.AmazonDesignID);

                var baseImage   = Path.Combine(_environment.WebRootPath, amazonProductColor.DesignURL);
                var opacity     = amazonProductColor.Opacity;
                var coverImage  = Path.Combine(_environment.WebRootPath, amazonDesign.DesignURL);
                var designURL   = Path.Combine(COLOR_DIR, amazonListing.AmazonListingID + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg");
                var outputImage = Path.Combine(_environment.WebRootPath, designURL);

                if (amazonListing.Left == null || amazonListing.Left == 0)
                {
                    amazonListing.Left = amazonProductColor.Left;
                }
                if (amazonListing.Top == null || amazonListing.Top == 0)
                {
                    amazonListing.Top = amazonProductColor.Top;
                }
                if (amazonListing.Right == null || amazonListing.Right == 0)
                {
                    amazonListing.Right = amazonProductColor.Right;
                }
                if (amazonListing.Bot == null || amazonListing.Bot == 0)
                {
                    amazonListing.Bot = amazonProductColor.Bot;
                }

                Point topLeft  = new Point((int)amazonListing.Left, (int)amazonListing.Top);
                Point topRight = new Point((int)amazonListing.Right, (int)amazonListing.Top);
                Point botLeft  = new Point((int)amazonListing.Left, (int)amazonListing.Bot);
                Point botRight = new Point((int)amazonListing.Right, (int)amazonListing.Bot);

                using (FileStream savePic = System.IO.File.OpenWrite(outputImage))
                {
                    T_generator.Services.Amazon.ImageCollider.MergeImages(
                        new BackPicture(baseImage, topLeft, topRight, botLeft, botRight),
                        new FrontPicture(coverImage, (int)(opacity * 100)))
                    //.DrawLines(new Color(1, 1, 1), 1, new Vector2[] { new Vector2(topLeft.X, 0), new Vector2(topLeft.X, 1000) })
                    //.DrawLines(new Color(1, 1, 1), 1, new Vector2[] { new Vector2(0, topLeft.Y), new Vector2(1000, topLeft.Y) })
                    .Save(savePic);
                    amazonListing.DesignURL = designURL;
                }
                // _context.Add(amazonDesign);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Edit", new { id = amazonListing.AmazonListingID }));
            }
            ViewData["AmazonProductID"]      = new SelectList(_context.AmazonProducts, "AmazonProductID", "Name");
            ViewData["AmazonProductColorID"] = new SelectList(_context.AmazonProductColors, "AmazonProductColorID", "Name");
            ViewData["AmazonDesignID"]       = new SelectList(_context.AmazonDesigns, "AmazonDesignID", "Name");
            return(View(amazonListing));
        }
예제 #6
0
        public void ListingController_CloseOne_ShouldCallGetAmazonCloseModel()
        {
            var model = new AmazonListing();

            var result = _listingController.CloseOne(model);

            A.CallTo(() => _amazonListingSyncManager.GetAmazonSyncModel(model)).MustHaveHappened();
        }
예제 #7
0
        public void ListingController_CloseOne_ShouldCallUpdateAmazonListing()
        {
            var listing = new AmazonListing();

            var result = _listingController.CloseOne(listing);

            A.CallTo(() => _prepareForSyncAmazonListingService.UpdateAmazonListing(listing)).MustHaveHappened();
        }
예제 #8
0
        public void ListingController_AddManyPOST_ShouldRedirectToSyncOneIfValuesProvided()
        {
            var listing = new AmazonListing();

            var result = _listingController.AddOne_POST(listing);

            result.As <RedirectToRouteResult>().RouteValues["action"].Should().Be("SyncOne");
        }
예제 #9
0
        public void ListingController_AddOnePOST_ShouldCallSave()
        {
            var listing = new AmazonListing();

            var result = _listingController.AddOne_POST(listing);

            A.CallTo(() => _amazonListingService.Save(listing)).MustHaveHappened();
        }
        public void CloseAmazonListing(AmazonSyncModel syncModel, AmazonListing amazonListing)
        {
            var feedContent = _amazonFeedsApiService.GetSingleProductDeleteFeed(amazonListing);

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

            _amazonRequestService.CheckIfDeleteRequestWasProcessed(syncModel, amazonListing, submissionId);
        }
예제 #11
0
        public void SubmitSingleProductFeed(AmazonSyncModel model, AmazonListing item)
        {
            var feeds = _amazonFeedsApiService.GetSingleProductMainFeeds(item);

            var submissionIds = _amazonRequestService.SubmitMainFeeds(model, feeds);

            _amazonRequestService.CheckIfRequestWasProcessed(model, item, submissionIds);
        }
예제 #12
0
        public void AmazonListingService_Delete_ShouldCallAddLog()
        {
            var item = new AmazonListing();

            _amazonListingService.Delete(item);

            A.CallTo(() => _amazonLogService.Add(AmazonLogType.Listings, AmazonLogStatus.Delete, null, null, null, null, null, item, null, string.Empty, string.Empty)).MustHaveHappened();
        }
        public void AmazonListingSyncManager_GetAmazonSyncModel_ShouldReturnAmazonSyncModelTypeSecondMethod()
        {
            var model = new AmazonListing();

            var results = _amazonListingSyncManager.GetAmazonSyncModel(model);

            results.Should().BeOfType <AmazonSyncModel>();
        }
        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);
        }
예제 #15
0
        public FileStream GetSingleProductDeleteFeed(AmazonListing listing)
        {
            var product = new Product {
                SKU = listing.SellerSKU
            };

            return(_amazonGenerateFeedContentService.GetSingleFeed(product, AmazonEnvelopeMessageType.Product, AmazonEnvelopeMessageOperationType.Delete));
        }
 public ActionResult Details(AmazonListing amazonListing)
 {
     if (amazonListing != null)
     {
         return(View(amazonListing));
     }
     return(RedirectToAction("Index", "ListingGroup"));
 }
        // GET: AmazonProducts/Create
        public IActionResult Create()
        {
            var amazonListing = new AmazonListing();

            ViewData["AmazonProductID"]      = new SelectList(_context.AmazonProducts, "AmazonProductID", "Name");
            ViewData["AmazonProductColorID"] = new SelectList(_context.AmazonProductColors, "AmazonProductColorID", "Name");
            ViewData["AmazonDesignID"]       = new SelectList(_context.AmazonDesigns, "AmazonDesignID", "Name");
            return(View());
        }
        public void PrepareForSyncAmazonListingService_InitAmazonListingFromProductVariant_ShouldCallSave()
        {
            var item = new Currency()
            {
                Code = "GBP", Id = 1
            };

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

            var mockingKernel = new MockingKernel();

            MrCMSKernel.OverrideKernel(mockingKernel);
            mockingKernel.Bind <ISession>().ToMethod(context => A.Fake <ISession>());
            mockingKernel.Bind <EcommerceSettings>().ToMethod(context => new EcommerceSettings()
            {
                CurrencyId = 1
            });

            var product = new Product()
            {
                BrandPage = new Brand()
                {
                    Name = "B"
                }
            };
            var productVariant = new ProductVariant()
            {
                Product                = product,
                SKU                    = "S1",
                BasePrice              = 1,
                StockRemaining         = 2,
                Name                   = "P",
                ManufacturerPartNumber = "MPN1",
                Barcode                = ""
            };
            var amazonListingGroup = new AmazonListingGroup()
            {
                Id = 1,
                FulfillmentChannel = AmazonFulfillmentChannel.MFN
            };
            var model = new AmazonListing()
            {
                ProductVariant        = productVariant,
                StandardProductId     = "1P",
                StandardProductIDType = StandardProductIDType.EAN,
                AmazonListingGroup    = amazonListingGroup
            };

            A.CallTo(() => _amazonListingGroupService.Get(amazonListingGroup.Id)).Returns(amazonListingGroup);

            A.CallTo(() => _productVariantService.GetProductVariantBySKU(model.ProductVariant.SKU)).Returns(productVariant);

            var results = _prepareForSyncAmazonListingService.InitAmazonListingFromProductVariant(model, model.ProductVariant.SKU, amazonListingGroup.Id);

            A.CallTo(() => _amazonListingGroupService.Save(amazonListingGroup)).MustHaveHappened();
        }
예제 #19
0
 public AmazonSyncModel GetAmazonSyncModel(AmazonListing amazonListing)
 {
     return(new AmazonSyncModel()
     {
         Id = amazonListing.Id,
         Title = amazonListing.Title,
         Description = amazonListing.ASIN,
         AmazonListingGroup = amazonListing.AmazonListingGroup
     });
 }
예제 #20
0
        public void AmazonGenerateFeedService_GetProductImage_ShouldReturnNullIfProductVariantNull()
        {
            var model = new AmazonListing()
            {
                SellerSKU = "S1"
            };
            var results = _amazonGenerateFeedService.GetProductImage(model);

            results.Should().BeNull();
        }
예제 #21
0
        public void AmazonGenerateFeedService_GetProduct_ShouldReturnProductType()
        {
            var model = new AmazonListing()
            {
                SellerSKU = "S1"
            };
            var results = _amazonGenerateFeedService.GetProduct(model);

            results.Should().BeOfType <Product>();
        }
예제 #22
0
        public void AmazonListingService_Delete_ShouldRemoveItemFromTheSession()
        {
            var item = new AmazonListing();

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

            _amazonListingService.Delete(item);

            Session.QueryOver <AmazonListing>().RowCount().Should().Be(0);
        }
 public ActionResult CloseOne(AmazonListing amazonListing)
 {
     if (amazonListing != null)
     {
         ViewData["AmazonManageInventoryUrl"] = _amazonAppSettings.AmazonManageInventoryUrl;
         _prepareForSyncAmazonListingService.UpdateAmazonListing(amazonListing);
         return(View(_amazonListingSyncManager.GetAmazonSyncModel(amazonListing)));
     }
     return(RedirectToAction("Index", "ListingGroup"));
 }
예제 #24
0
        public void AmazonListingService_Get_ShouldReturnPersistedEntryFromSession()
        {
            var item = new AmazonListing();

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

            var results = _amazonListingService.Get(1);

            results.As <AmazonListing>().Id.Should().Be(1);
        }
예제 #25
0
        public void CheckIfRequestWasProcessed(AmazonSyncModel model, AmazonListing amazonListing, List <string> submissionIds)
        {
            var uploadSuccess = false;
            var retryCount    = 0;

            var feedContent = _amazonFeedsApiService.GetSingleProductImageFeed(amazonListing);

            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", "Checking if request was processed...", 100, 75);
                    var amazonProduct = _amazonProductsApiService.GetMatchingProductForId(amazonListing.SellerSKU);
                    if (amazonProduct != null)
                    {
                        AmazonProgressBarHelper.Update(model.Task, "Push", "Request was processed", 100, 75);
                        AmazonProgressBarHelper.Update(model.Task, "Push", "Updating local status of Amazon Listing with SKU:" + amazonListing.SellerSKU, 100, 85);
                        _amazonListingService.UpdateAmazonListingStatusAndAsin(amazonListing, amazonProduct);

                        if (feedContent != null)
                        {
                            SubmitProductImageFeed(model, feedContent, ref submissionIds);
                        }

                        uploadSuccess = 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)
                {
                    CurrentRequestData.ErrorSignal.Raise(ex);

                    AmazonProgressBarHelper.Update(model.Task, "Push",
                                                   "Amazon Api is busy, we will wait additional 2 min. and try again...", 100,
                                                   75);
                    Thread.Sleep(120000);
                }
            }
        }
예제 #26
0
        public void AmazonListingService_Save_ShouldUpdateInSession()
        {
            var item = new AmazonListing();

            Session.Transact(session => session.Save(item));
            item.SellerSKU = "T1";

            _amazonListingService.Save(item);
            Session.Evict(item);

            Session.Get <AmazonListing>(1).SellerSKU.Should().Be("T1");
        }
        public AmazonListingModel()
        {
            Listing = new AmazonListing();

            Name     = String.Empty;
            Page     = 1;
            PageSize = 10;

            CategoryId      = 0;
            Categories      = new List <SelectListItem>();
            ProductVariants = new PagedList <ProductVariant>(new List <ProductVariant>(), Page, PageSize);
        }
 public ActionResult AddOne_POST(AmazonListing amazonListing)
 {
     if (amazonListing != null)
     {
         if (ModelState.IsValid)
         {
             _amazonListingService.Save(amazonListing);
             return(RedirectToAction("SyncOne", new { id = amazonListing.Id }));
         }
         return(View(amazonListing));
     }
     return(RedirectToAction("Index", "ListingGroup"));
 }
예제 #29
0
        public void AmazonListingService_GetByProductVariantSku_ShouldReturnPersistedEntryFromSession()
        {
            var item = new AmazonListing()
            {
                SellerSKU = "T1"
            };

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

            var results = _amazonListingService.GetByProductVariantSku("T1");

            results.As <AmazonListing>().Id.Should().Be(1);
        }
        public void PrepareForSyncAmazonListingService_InitAmazonListingFromProductVariant_ShouldReturnAmazonListingType()
        {
            var mockingKernel = new MockingKernel();

            MrCMSKernel.OverrideKernel(mockingKernel);
            mockingKernel.Bind <ISession>().ToMethod(context => A.Fake <ISession>());

            var model = new AmazonListing();

            var results = _prepareForSyncAmazonListingService.InitAmazonListingFromProductVariant(model, "S1", 1);

            results.Should().BeOfType <AmazonListing>();
        }