private void RefreshProductsCache()
        {
            List <ProdVendidoPorFranqueado> prodsVendidosPorFranqueado;

            using (ProdVendidoPorFranqueadoSession s = new ProdVendidoPorFranqueadoSession())
            {
                using (var das = s.CreateDataAccessScope(true))
                {
                    IMapperProdVendidoPorFranqueado map = s.CreateMapperProdVendidoPorFranqueado();

                    prodsVendidosPorFranqueado = map.GetAllInFranchisee(franqId).ToList();
                }
            }
            using (ProdutoSession s = new ProdutoSession())
            {
                using (var das = s.CreateDataAccessScope(true))
                {
                    IMapperProduto map = s.CreateMapperProduto();
                    productsCache = map
                                    .GetAll()
                                    .Zip(prodsVendidosPorFranqueado, (p, pvpf) => ProdutoViewInStore.Parse(p, pvpf))
                                    .ToList();
                }
            }
        }
示例#2
0
        public void Execute()
        {
            franqId = WelcomeAndChooseStore();

            if (productsCache.Count == 0)
            {
                RefreshProductsCache();
            }

            bool se = false; //sale ended

            List <ProdutoViewInStore> sale = new List <ProdutoViewInStore>();

            while (!se)
            {
                ShowExistingProducts();

                //Scan product
                Console.WriteLine("Introduza o id do produto que pretende levar");
                int prodId = int.Parse(Console.ReadLine());
                Console.WriteLine("Introduza a quantidade que pretende levar");
                int qty = int.Parse(Console.ReadLine());

                ProdutoViewInStore productInStore = productsCache.Find(p => p.ProdId == prodId);
                //update cache
                productInStore.Quantidade -= qty;

                //add scanned product to sale list
                ProdutoViewInStore boughtProduct = new ProdutoViewInStore(
                    productInStore.ProdId,
                    productInStore.Descricao,
                    qty,
                    productInStore.PrecoUnitario);

                sale.Add(boughtProduct);

                Console.WriteLine("Do you want to continue scanning items? (y/n)");

                if (Console.ReadKey().KeyChar.Equals('n'))
                {
                    se = true;
                }
            }
            UpdateStock(sale);
            //Calc value to be payed
            decimal total = 0;

            sale.ForEach(item => total += item.PrecoUnitario * item.Quantidade);
            Console.WriteLine("Your total is {0} euros ", total);
            //Emission of receipt with shopping list
            Console.WriteLine("Item     Unit Price      Value to Pay");
            sale.ForEach(item => Console.WriteLine("{0}      {1}eur/unit     {2}€", item.Descricao, item.PrecoUnitario, item.PrecoUnitario * item.Quantidade));

            Console.WriteLine("See you next time! Press any key to continue");
            Console.ReadKey();
        }