Ejemplo n.º 1
0
        public void CreateSimpleProduct()
        {
            IProduct simpleProduct = new SimpleProduct("Iogurte", 2.40);

            Assert.AreEqual("Iogurte", simpleProduct.Name);
            Assert.AreEqual(2.40, simpleProduct.Price);
        }
        internal List <SimpleProduct> GetChildProducts(int connectorID, int productID, ProductHelper productHelper)
        {
            lock (_childProducts)
            {
                if (_childProducts.Count == 0)
                {
                    LoadChildProducts();
                }
            }

            List <ChildProductData> filteredItems;

            if (_childProducts.ContainsKey(productID))
            {
                filteredItems = _childProducts[productID];
            }
            else
            {
                return(null);
            }

            var result = new List <SimpleProduct>();

            foreach (var product in filteredItems)
            {
                var p = new SimpleProduct();


                productHelper.FillProductWithBaseAttributes(p, product, connectorID, true, true);

                result.Add(p);
            }

            return(result);
        }
Ejemplo n.º 3
0
        public Program()
        {
            ISimpleProduct product = new SimpleProduct();

            product.SetName("printer");
            Console.WriteLine(product.GetName());
        }
        public void AppliesDiscountInTheSimpleProduct()
        {
            IProduct p = new SimpleProduct("Product 1", 4.00);

            //Applies 50% discount in the product p
            DiscountProduct dicountProduct = new DiscountProduct(p, 50.0 / 100.0);

            Assert.AreEqual(2, dicountProduct.Price); //because 4.00/2 = 2.00
        }
Ejemplo n.º 5
0
        public void Init()
        {
            Television  = new SimpleProduct("television", 40.00M);
            Stand       = new SimpleProduct("stand", 20.00M);
            House       = new SimpleProduct("stand", 5000.00M);
            InitiatedAt = new DateTime(2019, 1, 1);

            Subject = new Activity(InitiatedAt);
        }
Ejemplo n.º 6
0
 public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
 {
     if (value is string)
     {
         SimpleProduct product;
         if (SimpleProduct.TryParse((string)value, out product))
         {
             return(product);
         }
     }
     return(base.ConvertFrom(context, culture, value));
 }
Ejemplo n.º 7
0
 public virtual async Task <Response <SimpleProduct> > PutSimpleProductAsync(SimpleProduct simpleBodyProduct = null, CancellationToken cancellationToken = default)
 {
     using var scope = _clientDiagnostics.CreateScope("ServiceClient.PutSimpleProduct");
     scope.Start();
     try
     {
         return(await RestClient.PutSimpleProductAsync(simpleBodyProduct, cancellationToken).ConfigureAwait(false));
     }
     catch (Exception e)
     {
         scope.Failed(e);
         throw;
     }
 }
Ejemplo n.º 8
0
 public virtual Response <SimpleProduct> PutSimpleProduct(SimpleProduct simpleBodyProduct = null, CancellationToken cancellationToken = default)
 {
     using var scope = _clientDiagnostics.CreateScope("ServiceClient.PutSimpleProduct");
     scope.Start();
     try
     {
         return(RestClient.PutSimpleProduct(simpleBodyProduct, cancellationToken));
     }
     catch (Exception e)
     {
         scope.Failed(e);
         throw;
     }
 }
Ejemplo n.º 9
0
        private List <ProductBase> ProcessProducts(int connectorID, IEnumerable <ProductData> products, List <string> includes)
        {
            var counter = 0;
            var result  = new List <ProductBase>();

            var start = DateTime.Now;

            foreach (var product in products)
            {
                counter++;

                ProductBase p;

                if (product.IsConfigurable)
                {
                    p = new ConfigurableProduct();
                    ((ConfigurableProduct)p).ChildProducts = ChildProductHelper.GetChildProducts(connectorID, product.ProductID, this);
                }
                else
                {
                    p = new SimpleProduct();
                    if (includes.Contains("prices"))
                    {
                        ((SimpleProduct)p).Prices = PriceHelper.GetProductPrices(connectorID, product.ProductID);
                    }

                    if (includes.Contains("stock"))
                    {
                        ((SimpleProduct)p).Stock = StockHelper.GetProductStocks(connectorID, product.ProductID);
                    }
                }


                FillProductWithBaseAttributes(p, product, connectorID, true, true);

                result.Add(p);

                if (counter % 100 == 0)
                {
                    System.Diagnostics.Debug.WriteLine("{0} Processed {1} products", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), counter);
                }
            }
            var end = DateTime.Now;

            System.Diagnostics.Debug.WriteLine("Total processingtime: {0} seconds", end.Subtract(start).TotalSeconds);

            return(result);
        }
            /// <summary>
            /// Processes the create cart lines request.
            /// </summary>
            /// <param name="context">The context.</param>
            /// <param name="request">The request.</param>
            /// <param name="transaction">Current transaction.</param>
            /// <param name="returnTransaction">Return transaction.</param>
            /// <param name="productByRecordId">The mapping of products by record identifier.</param>
            private static void ProcessCreateCartLinesRequest(RequestContext context, SaveCartLinesRequest request, SalesTransaction transaction, SalesTransaction returnTransaction, IDictionary <long, SimpleProduct> productByRecordId)
            {
                // Create the new cart lines.
                var salesLines = new List <SalesLine>();

                foreach (CartLine cartLine in request.CartLines)
                {
                    var salesLine = new SalesLine();

                    if (!cartLine.LineData.IsReturnByReceipt)
                    {
                        // Creates a sales line base on the cart line
                        salesLine.CopyPropertiesFrom(cartLine.LineData);

                        // Set ItemId and VariantInventDimId of the sales line, if the cart line is constructed from listing.
                        if (cartLine.LineData.IsProductLine)
                        {
                            long          id      = cartLine.LineData.ProductId;
                            SimpleProduct product = productByRecordId[id];
                            salesLine.ItemId               = product.ItemId;
                            salesLine.ProductId            = id;
                            salesLine.InventoryDimensionId = product.InventoryDimensionId;
                            salesLine.Variant              = ProductVariant.ConvertFrom(product);
                        }
                    }
                    else
                    {
                        // Creates a sales line base on the retuned sales line
                        var returnedSalesLine = CartWorkflowHelper.GetSalesLineByNumber(returnTransaction, cartLine.LineData.ReturnLineNumber);
                        CartWorkflowHelper.SetSalesLineBasedOnReturnedSalesLine(salesLine, returnedSalesLine, returnTransaction, cartLine.LineData.Quantity);

                        // Calculate required reason code lines for return transaction.
                        ReasonCodesWorkflowHelper.CalculateRequiredReasonCodesOnSalesLine(context, transaction, salesLine, ReasonCodeSourceType.ReturnItem);
                    }

                    // Assign sales line Id. Using format 'N' to remove dashes from the GUID.
                    salesLine.LineId = Guid.NewGuid().ToString("N");

                    // Add sales lines to collection.
                    salesLines.Add(salesLine);
                }

                // Set default attributes from order header.
                CartWorkflowHelper.SetDefaultDataOnSalesLines(context, transaction, salesLines);

                // Add sales lines to transation.
                transaction.SalesLines.AddRange(salesLines);
            }
Ejemplo n.º 11
0
            private void ValidateTransactiondata(KitTransaction kitTransaction)
            {
                ThrowIf.Null(kitTransaction.KitTransactionLines, "kitTransaction.KitTransactionLines");

                if (!kitTransaction.KitTransactionLines.Any())
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_RequiredValueNotFound, "Transaction does not contain any kit transaction line.");
                }

                // Validate transaction contains a valid kit variant
                foreach (KitTransactionLine kitline in kitTransaction.KitTransactionLines)
                {
                    if (string.IsNullOrWhiteSpace(kitline.InventoryDimensionId))
                    {
                        throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_RequiredValueNotFound, "InventoryDimensionId is not set for the Kit line transaction.");
                    }

                    var productLookupClauses = new List <ProductLookupClause> {
                        new ProductLookupClause(kitline.ItemId, kitline.InventoryDimensionId)
                    };
                    var request = new GetProductsServiceRequest(this.Context.GetChannelConfiguration().RecordId, productLookupClauses, QueryResultSettings.AllRecords);
                    var results = this.Context.Runtime.Execute <GetProductsServiceResponse>(request, this.Context).Products.Results;

                    if (results == null)
                    {
                        throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToFindListing, string.Format("Kit with itemId {0} and inventoryDimensionId {1} is not found.", kitline.ItemId, kitline.InventoryDimensionId));
                    }

                    if (results.HasMultiple())
                    {
                        throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MultipleItemsForItemId, string.Format("ItemId {0} and inventoryDimensionId {1}  returned multiple kit records. The ids do not represent a single kit product.", kitline.ItemId, kitline.InventoryDimensionId));
                    }

                    SimpleProduct product = results.Single();
                    if (product.ProductType != ProductType.KitVariant)
                    {
                        throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_RequiredValueNotFound, string.Format("ItemId {0} is not a kit product.", kitline.ItemId));
                    }

                    if (!product.Behavior.IsKitDisassemblyAllowed)
                    {
                        throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_RequiredValueNotFound, string.Format("Kit product '{0}' is not allowed to be disassembled at a register.", kitline.ItemId));
                    }
                }
            }
Ejemplo n.º 12
0
 public Task PutModelFlattenCustomBase() => Test(async(host, pipeline) =>
 {
     var value = new SimpleProduct("123")
     {
         Description           = "product description",
         MaxProductDisplayName = "max name",
         Capacity     = "Large",
         OdataValue   = "http://foo",
         GenericValue = "https://generic"
     };
     var result = await new ServiceClient(ClientDiagnostics, pipeline, host).PutSimpleProductAsync(value);
     Assert.AreEqual("123", result.Value.ProductId);
     Assert.AreEqual("product description", result.Value.Description);
     Assert.AreEqual("max name", result.Value.MaxProductDisplayName);
     Assert.AreEqual("Large", result.Value.Capacity);
     Assert.AreEqual("http://foo", result.Value.OdataValue);
     Assert.AreEqual("https://generic", result.Value.GenericValue);
 });
            public async Task <IEnumerable <SimpleProduct> > GetSimpleProducts(IEnumerable <long> productIds)
            {
                if (productIds == null)
                {
                    throw new ArgumentNullException(nameof(productIds));
                }

                ManagerFactory  managerFactory = Utilities.GetManagerFactory(this.EcommerceContext);
                IProductManager productManager = managerFactory.GetManager <IProductManager>();
                long            channelId      = await Utilities.GetChannelId(this.EcommerceContext);

                var distinctProductIds = productIds.Distinct();

                Task <SimpleProduct>[] simpleProductTasks = new Task <SimpleProduct> [distinctProductIds.Count()];

                // Enable batching when batching bug is fixed. Currently, batching fails if the server returns a no-content response.
                //// managerFactory.Context.BeginBatch();

                int index = 0;

                foreach (long productId in distinctProductIds)
                {
                    simpleProductTasks[index++] = productManager.GetById(productId, channelId);
                }

                //// await managerFactory.Context.ExecuteBatchAsync();

                Collection <SimpleProduct> simpleProducts = new Collection <SimpleProduct>();

                foreach (Task <SimpleProduct> simpleProductTask in simpleProductTasks)
                {
                    SimpleProduct simpleProduct = await simpleProductTask;
                    if (simpleProduct != null)
                    {
                        simpleProducts.Add(simpleProduct);
                    }
                }

                IEnumerable <ProductCatalog> productCatalogs = await this.GetProductCatalogs(Utilities.DefaultQuerySettings);

                simpleProducts = await DataAugmenter.GetAugmentedSimpleProducts(this.EcommerceContext, simpleProducts, productCatalogs);

                return(simpleProducts);
            }
Ejemplo n.º 14
0
        private void buildProducts()
        {
            //Simple product construction
            Ram4gb        = new SimpleProduct("RAM 4GB", 750, "KingStone");
            Ram8gb        = new SimpleProduct("RAM 8GB", 1000, "KingStone");
            Disk500gb     = new SimpleProduct("HDD 500GB", 1500, "ACME");
            Disk1tb       = new SimpleProduct("HDD 1TB", 2000, "ACME");
            CpuAMD        = new SimpleProduct("AMD phenon", 4000, "AMD");
            CpuIntel      = new SimpleProduct("Intel i7", 4500, "Intel");
            SmallCabinete = new SimpleProduct("Small cabinet", 2000, "ExCom");
            BigCabinete   = new SimpleProduct("Big Cabinet", 2200, "ExCom");
            Monitor20inch = new SimpleProduct("Display 20'", 1500, "HP");
            Monitor30inch = new SimpleProduct("Display 30'", 2000, "HP");
            SimpleMouse   = new SimpleProduct("Simple mouse", 150, "Genius");
            GammerMouse   = new SimpleProduct("Gammer mouse", 750, "Alien");

            //Gammer pc with 8gb ram,HDD 1tb, Intel i7 processor
            //large cabinet,display 30' and one gammer mouse.
            GammerPC = new CompositeProduct("Gammer PC");
            GammerPC.AddProduct(Ram8gb);
            GammerPC.AddProduct(Disk1tb);
            GammerPC.AddProduct(CpuIntel);
            GammerPC.AddProduct(BigCabinete);
            GammerPC.AddProduct(Monitor30inch);
            GammerPC.AddProduct(GammerMouse);

            //Home PC with RAM 4gb, HDD 500gb, AMD Phenon processor
            //small Cabinet, dsplay 20' and simple mouse.
            HomePC = new CompositeProduct("Home PC");
            HomePC.AddProduct(Ram4gb);//
            HomePC.AddProduct(Disk500gb);
            HomePC.AddProduct(CpuAMD);
            HomePC.AddProduct(SmallCabinete);
            HomePC.AddProduct(Monitor20inch);
            HomePC.AddProduct(SimpleMouse);

            //Package consisting of two packages, Gammer PC + Home PC
            Pc2x1 = new CompositeProduct("Pack PC Gammer + Home PC");
            Pc2x1.AddProduct(GammerPC);
            Pc2x1.AddProduct(HomePC);
        }
Ejemplo n.º 15
0
        static void Main(string[] args)
        {
            var ram       = new SimpleProduct("Memoria RAM GigaBit Módulo de 16GB", 150000);
            var processor = new SimpleProduct("Intel Core i7", 750000);
            var videoCard = new SimpleProduct("nVidia GTX 1050", 1500000);
            var keyBoard  = new SimpleProduct("Keyboard generic 101 keys - Intel", 20000);
            var mouse     = new SimpleProduct("Mouse generic 3 buttons - Intel", 20000);

            var computerGeneric = new CompositeProduct("Computer Gamer Generic");

            computerGeneric.Add(ram);
            computerGeneric.Add(processor);
            computerGeneric.Add(videoCard);
            computerGeneric.Add(keyBoard);
            computerGeneric.Add(mouse);

            Console.WriteLine($"Precio de {ram.Name} es: ${ram.GetPrice().ToString("N2")}");
            Console.WriteLine($"Precio de {computerGeneric.Name} es: ${computerGeneric.GetPrice().ToString("N2")}");

            Console.ReadLine();
        }
Ejemplo n.º 16
0
            /// <summary>
            /// Retrieves the products ids (record ids) for reason codes that trigger upsell.
            /// </summary>
            /// <param name="context">The context.</param>
            /// <param name="reasonCodes">The reason codes.</param>
            private static void SetProductIdsForUpsell(RequestContext context, IEnumerable <ReasonCode> reasonCodes)
            {
                IEnumerable <ReasonSubCode> itemSubCodes = reasonCodes.SelectMany(reasonCode => reasonCode.ReasonSubCodes)
                                                           .Where(subCode => subCode.TriggerFunctionType == TriggerFunctionType.Item);

                if (itemSubCodes.IsNullOrEmpty())
                {
                    return;
                }

                IEnumerable <ProductLookupClause> lookupClauses = itemSubCodes.Where(itemSubCode => !string.IsNullOrWhiteSpace(itemSubCode.TriggerCode)).Select(subCode => new ProductLookupClause(subCode.TriggerCode, inventDimId: null));

                var productSearchRequest = new GetProductsServiceRequest(
                    context.GetPrincipal().ChannelId,
                    lookupClauses,
                    QueryResultSettings.AllRecords);

                PagedResult <SimpleProduct> products = context.Execute <GetProductsServiceResponse>(productSearchRequest).Products;

                foreach (ReasonSubCode itemSubCode in itemSubCodes)
                {
                    if (string.IsNullOrWhiteSpace(itemSubCode.TriggerCode))
                    {
                        RetailLogger.Log.CrtServicesReasonCodeServiceUpsellSubCodeWithEmptyTriggerCode(itemSubCode.ReasonCodeId, itemSubCode.SubCodeId);
                        continue;
                    }

                    SimpleProduct product = products.Results.FirstOrDefault(p => string.Equals(p.ItemId, itemSubCode.TriggerCode, StringComparison.OrdinalIgnoreCase));

                    if (product != null)
                    {
                        itemSubCode.ProductId = product.RecordId;
                    }
                    else
                    {
                        RetailLogger.Log.CrtServicesReasonCodeServiceProductNotFoundForTriggeredUpsell(itemSubCode.ReasonCodeId, itemSubCode.SubCodeId, itemSubCode.TriggerCode);
                    }
                }
            }
Ejemplo n.º 17
0
        //
        // Constructor. Initialises the product database.
        //
        public ProductController() : base()
        {
            // our products will be stored in a dictionary
            products = new ProductDictionaryAdapter();

            // add some test products to the database
            SimpleProduct bookByOtero       = new SimpleProduct(1, "Software Engineering Design book", 80.00M, 0.25M);
            SimpleProduct bookByMillett     = new SimpleProduct(2, "Professional ASP.NET Design Patterns book", 50.00M, 0.50M);
            SimpleProduct notesFromLectures = new SimpleProduct(3, "Lecture slides", 10.00M, 0.00M);
            SimpleProduct notesFromLabs     = new SimpleProduct(4, "Printed lab notes", 10.00M, 0.10M);

            products.Insert(bookByOtero);
            products.Insert(bookByMillett);
            products.Insert(notesFromLectures);
            products.Insert(notesFromLabs);

            // create some product packages
            CompositeProduct bookPack  = new CompositeProduct(10, "Textbook pack", bookByOtero, bookByMillett);
            CompositeProduct notesPack = new CompositeProduct(11, "Notes pack", notesFromLectures, notesFromLabs);

            products.Insert(bookPack);
            products.Insert(notesPack);
        }
Ejemplo n.º 18
0
        public void Run()
        {
            //Productos simples
            SimpleProduct ram4gb        = new SimpleProduct("RAM 4GB", "Kingston", 750);
            SimpleProduct ram8gb        = new SimpleProduct("RAM 8GB", "Adata", 1000);
            SimpleProduct disc500Gb     = new SimpleProduct("Disco duro 500GB", "WesternDigital", 1500);
            SimpleProduct disc1Tb       = new SimpleProduct("Disco duro 1 TB", "Toshiba", 2000);
            SimpleProduct cpuAMD        = new SimpleProduct("Cpu AMD phenom", "AMD", 4000);
            SimpleProduct cpuIntel      = new SimpleProduct("Cpu Intel Lake", "Intel", 4500);
            SimpleProduct bigGabinete   = new SimpleProduct("Gabinete grande", "GabGRande", 2200);
            SimpleProduct pequeGabinete = new SimpleProduct("Gabinete pequenio", "GabPequenio", 2000);
            SimpleProduct monitor20inch = new SimpleProduct("Monitor 20 pulgadas", "DELL", 1500);
            SimpleProduct monitor30inch = new SimpleProduct("Monitor 30 pulgadas", "HP", 2000);
            SimpleProduct simpleMouse   = new SimpleProduct("Mouse sencillo", "Loitech", 150);
            SimpleProduct gamerMouse    = new SimpleProduct("Mouse gamer", "Alien", 750);
            SimpleProduct keyBoard      = new SimpleProduct("Teclado", "Acme", 100);

            //Producots compuestos
            CompositeProduct keyBoardAndMouse = new CompositeProduct("KeyBoard & mouse ", 0);

            keyBoardAndMouse.AddProduct(simpleMouse); //150
            keyBoardAndMouse.AddProduct(keyBoard);    //100

            CompositeProduct package1 = new CompositeProduct("Desktop pc", 0);

            package1.AddProduct(ram4gb);           //750
            package1.AddProduct(disc500Gb);        //1500
            package1.AddProduct(cpuIntel);         //4500
            package1.AddProduct(keyBoardAndMouse); //250

            Orden orden = new Orden(1, "Alex");

            orden.addProduct(package1);
            orden.addProduct(pequeGabinete);
            orden.printOreder();
        }
Ejemplo n.º 19
0
 /// <summary>
 /// Put Simple Product with client flattening true on the model
 /// <see href="http://tempuri.org" />
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='simpleBodyProduct'>
 /// Simple body product to put
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <SimpleProduct> PutSimpleProductAsync(this IAutoRestResourceFlatteningTestService operations, SimpleProduct simpleBodyProduct = default(SimpleProduct), CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.PutSimpleProductWithHttpMessagesAsync(simpleBodyProduct, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
Ejemplo n.º 20
0
 public void Init()
 {
     Television = new SimpleProduct("television", new Money(40.00M, InitiatedAt));
     Stand      = new SimpleProduct("stand", new Money(20.00M, InitiatedAt));
     House      = new SimpleProduct("stand", new Money(5000.00M, InitiatedAt));
 }
Ejemplo n.º 21
0
 /// <summary>
 /// Put Simple Product with client flattening true on the model
 /// <see href="http://tempuri.org" />
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='simpleBodyProduct'>
 /// Simple body product to put
 /// </param>
 public static SimpleProduct PutSimpleProduct(this IAutoRestResourceFlatteningTestService operations, SimpleProduct simpleBodyProduct = default(SimpleProduct))
 {
     return(operations.PutSimpleProductAsync(simpleBodyProduct).GetAwaiter().GetResult());
 }
 /// <summary>
 /// Put Simple Product with client flattening true on the model
 /// <see href="http://tempuri.org" />
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='simpleBodyProduct'>
 /// Simple body product to put
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async System.Threading.Tasks.Task<SimpleProduct> PutSimpleProductAsync(this IAutoRestResourceFlatteningTestService operations, SimpleProduct simpleBodyProduct = default(SimpleProduct), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
 {
     using (var _result = await operations.PutSimpleProductWithHttpMessagesAsync(simpleBodyProduct, null, cancellationToken).ConfigureAwait(false))
     {
         return _result.Body;
     }
 }
 /// <summary>
 /// Put Simple Product with client flattening true on the model
 /// <see href="http://tempuri.org" />
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='simpleBodyProduct'>
 /// Simple body product to put
 /// </param>
 public static SimpleProduct PutSimpleProduct(this IAutoRestResourceFlatteningTestService operations, SimpleProduct simpleBodyProduct = default(SimpleProduct))
 {
     return System.Threading.Tasks.Task.Factory.StartNew(s => ((IAutoRestResourceFlatteningTestService)s).PutSimpleProductAsync(simpleBodyProduct), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }
Ejemplo n.º 24
0
        public IHttpActionResult BindSimpleProductFromUri(SimpleProduct product)
        {
            Debugger.Break();

            return(Ok());
        }
Ejemplo n.º 25
0
        /*
         *  HandlePosEvent is called from _ui_Notify event listener (above).
         *
         *  Most messages are simply turned into .NET events.  A few do more,
         *  especially:
         *      ADD_TO_BASKET : Updates our own Basket object with new items
         *      REMOVE_FROM_BASKET : Removes item from our own Basket
         *      BASKET_COMMITTED : Updates the Basket state; and fetches all the vouchers
         */
        private void HandlePosEvent(PosEvent posEvent)
        {
            if (posEvent == null)
            {
                // Debug.Assert(false);
                return;
            }
            if (_timeoutTimer != null)
            {
                _timeoutTimer.Enabled = false;
                _timeoutTimer         = null;
            }
            switch (posEvent.EventName)
            {
            case PosEventType.READY:
                Ready?.Invoke(this, null);
                _rollbackHandler.ProcessPendingRollbacks(_config.Url);
                break;

            case PosEventType.SHOW_GUI:
                _ui.Show();
                ShowGUI?.Invoke(this, null);
                break;

            case PosEventType.HIDE_GUI:
                _ui.Hide();
                HideGUI?.Invoke(this, null);
                break;

            case PosEventType.ADD_TO_BASKET:
                var addedItem = (AddToBasketEvent)posEvent;
                _basket.Id = addedItem.BasketId;
                _basket.Items.Add(addedItem.BasketItem);
                ItemAdded?.Invoke(this, addedItem.BasketItem);
                break;

            case PosEventType.BASKET_COMMITTED:
                var basketCommittedEvent = (BasketCommittedEvent)posEvent;
                // Check:
                //  (1) Incoming .BasketId is what we expect.  This is just a sanity check, and should never fail.
                //  (2) basketCommittedEvent.Basket.Committed = TRUE
                //  (3) this.FailOnCommit = FALSE.  This may be set to TRUE to test correct processing of a Commit failure.
                if (_basket.Id == basketCommittedEvent.BasketId && basketCommittedEvent.Basket.Committed && !FailOnCommit)
                {
                    _basket.Clear();
                    _basket.Id = basketCommittedEvent.BasketId;
                    foreach (var basketItem in basketCommittedEvent.Basket.basketItems)
                    {
                        _basket.Items.Add(basketItem);     // Now with Touch ID, and Vouchers (we trust!)
                        if (basketItem is PurchaseBasketItem)
                        {
                            var purchase = (PurchaseBasketItem)basketItem;
                            if (purchase.Vouchers?.Count > 0)
                            {
                                GetVoucher(purchase.Vouchers[0].Link);
                            }
                        }
                        else if (basketItem is RefundBasketItem)
                        {
                            var refund = (RefundBasketItem)basketItem;
                            if (refund.RefundVoucher != null)
                            {
                                GetVoucher(refund.RefundVoucher.Link);
                            }
                        }
                    }
                    _basket.Committed = true;
                    BasketCommitted?.Invoke(this, _basket);
                }
                else
                {
                    ProcessFailedCommit();
                }
                // _basket.Clear();
                break;

            case PosEventType.REMOVE_FROM_BASKET:
                var removeFromBasketEvent = (RemoveFromBasketEvent)posEvent;
                foreach (var basketItem in _basket.Items)
                {
                    if (basketItem.Id == removeFromBasketEvent.BasketItemId)
                    {
                        _basket.Items.Remove(basketItem);
                        ItemRemoved?.Invoke(this, basketItem);
                        break;
                    }
                }
                break;

            case PosEventType.PRINT_VOUCHER:     // This is an "unexpected" ad hoc voucher...
                var PrintVoucherEvent = (PrintVoucherEvent)posEvent;
                VoucherAvailable?.Invoke(this, PrintVoucherEvent.Data);
                break;

            case PosEventType.VOUCHER_HTML:     //...whereas this is the response to the BasketGetVoucherEvent message
                var voucherHtmlEvent = (VoucherHtmlEvent)posEvent;
                if (!string.IsNullOrEmpty(voucherHtmlEvent.VoucherHtml))
                {
                    VoucherAvailable?.Invoke(this, voucherHtmlEvent.VoucherHtml);
                }
                break;

            case PosEventType.START_DEVICE:
                var startDeviceEvent = (StartDeviceEvent)posEvent;
                StartDevice?.Invoke(this, startDeviceEvent.Device);
                break;

            case PosEventType.STOP_DEVICE:
                var stopDeviceEvent = (StopDeviceEvent)posEvent;
                StopDevice?.Invoke(this, stopDeviceEvent.Device);
                break;

            case PosEventType.DISPLAY_MESSAGE:
                var displayMessageEvent = (DisplayMessageEvent)posEvent;
                DisplayMessage?.Invoke(this, displayMessageEvent.Message);
                break;

            case PosEventType.SIMPLE_PRODUCT:
                var simpleProductEvent = (SimpleProductEvent)posEvent;
                SimpleProduct?.Invoke(this, new SimpleProductInfo(simpleProductEvent));
                break;

            case PosEventType.SYNC_BASKET:
                var synBasketEvent = (SyncBasketEvent)posEvent;
                SyncBasket?.Invoke(this, null);
                break;

            case PosEventType.ERROR:
                var errorEvent = (ErrorEvent)posEvent;
                if (errorEvent.Method == "BasketCommitBasket")
                {
                    ProcessFailedCommit();
                }
                Error?.Invoke(this, errorEvent.Reason);
                break;

            default:
                Debug.Assert(false);     // Unknown PosEventType
                break;
            }
        }
Ejemplo n.º 26
0
 /// <summary>
 /// Put Simple Product with client flattening true on the model
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='simpleBodyProduct'>
 /// Simple body product to put
 /// </param>
 public static SimpleProduct PutSimpleProduct(this IAutoRestResourceFlatteningTestService operations, SimpleProduct simpleBodyProduct = default(SimpleProduct))
 {
     return(Task.Factory.StartNew(s => ((IAutoRestResourceFlatteningTestService)s).PutSimpleProductAsync(simpleBodyProduct), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }