Exemple #1
0
 public Task <Guid> CreateAsync(
     StockRoom room,
     Dictionary <string, string> headers = default,
     CancellationToken ct = default)
 {
     return(_factory.PostAsync <Guid>(_host + "/Stock/Rooms/v1/Create", null, room, headers, ct));
 }
Exemple #2
0
        public void AddSalesToStockAndDecrementProducts(SaleDto saleDto)
        {
            var newSale = new Sale()
            {
                SellingDate = saleDto.SellingDate,
                ClientId    = saleDto.ClientId
            };

            _shoesDataEntities.Sales.Add(newSale);
            foreach (var saleProductDto in saleDto.SalesProducts)
            {
                var currentProduct = _productServices.FindProduct(
                    saleProductDto.ModelId, saleProductDto.ColorId, saleProductDto.Size);
                var newSaleProduct = new SaleProduct
                {
                    ProductId    = currentProduct.Id,
                    SaleId       = newSale.Id,
                    Quantity     = saleProductDto.Quantity,
                    SellingPrice = saleProductDto.Price
                };
                _shoesDataEntities.SaleProducts.Add(newSaleProduct);
                var lastStockRoom = _stockRoomDataServices.GetLastStockRoomByProductId(currentProduct.Id);
                var newStockRoom  = new StockRoom()
                {
                    ProductId     = currentProduct.Id,
                    StockValue    = lastStockRoom.StockValue - saleProductDto.Quantity,
                    EntryValue    = -saleProductDto.Quantity,
                    EntryDate     = saleDto.SellingDate,
                    OperationType = OperationType.OUT.ToString()
                };
                _shoesDataEntities.StockRooms.Add(newStockRoom);
                SaveChanges();
            }
        }
Exemple #3
0
 public Task UpdateAsync(
     StockRoom room,
     Dictionary <string, string> headers = default,
     CancellationToken ct = default)
 {
     return(_factory.PatchAsync(_host + "/Stock/Rooms/v1/Update", null, room, headers, ct));
 }
Exemple #4
0
        public InventoryKafkaService(CafeKafkaSettings cafeKafkaSettings)
        {
            _stockRoom = new StockRoom();
            try
            {
                _consumerConfig = new ConsumerConfig()
                {
                    GroupId               = cafeKafkaSettings.GroupId,
                    BootstrapServers      = cafeKafkaSettings.BootstrapServers,
                    AutoOffsetReset       = AutoOffsetReset.Earliest,
                    SocketKeepaliveEnable = true,
                    AllowAutoCreateTopics = true
                };

                _producerConfig = new ProducerConfig()
                {
                    BootstrapServers = cafeKafkaSettings.BootstrapServers
                };

                Console.WriteLine("Read Kafka Bootstrap: " + cafeKafkaSettings.BootstrapServers);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception in kafka settings: " + ex);
            }
        }
Exemple #5
0
        static void Main(string[] args)
        {
            var stockroom = new StockRoom();
            new Setup().Execute(stockroom);

            var joe = new Customer();

            var order = new OrderPlacedEvent();
            order.Items.Add(new MillerLite());
            order.Items.Add(new BaconCheeseBurger());

            var kitchen = new Kitchen();

            EventManager.Register<OrderPlacedEvent>(joe.PlaceOrder);
            EventManager.Register<OrderPlacedEvent>(stockroom.OrderPlaced);
            EventManager.Register<ItemMovedToKitchenEvent>(kitchen.Cook);
            EventManager.Register<OrderReadyEvent>(joe.ReceiveOrder);

            EventManager.Raise(order);

            //customer places order
            //stockroom moves order to kitchen
            //kithcen prepared order
            //waitstaff delivers order
            //waitstaff checks on customer
            //waitstaff delivers bill
            //customer pasys
            //marketing sends a thanks a lot email
            //waitstaff delivers reciept
            //Done!
        }
        private StockRoom AddNewStockRoomUpdatingTotal(StockRoomDto newStockRoomDto)
        {
            var currentProduct = _productServices.FindProduct(
                newStockRoomDto.ModelId,
                newStockRoomDto.SelectedColor.ColorId,
                newStockRoomDto.Size);

            var lastStockRoom = GetLastStockRoomByProductId(currentProduct.Id);
            var stocks        = newStockRoomDto.Quantity;

            if (lastStockRoom != null)
            {
                stocks += lastStockRoom.StockValue;
            }

            var newStockRoom = new StockRoom
            {
                ProductId     = currentProduct.Id,
                StockValue    = stocks,
                EntryValue    = newStockRoomDto.Quantity,
                EntryDate     = newStockRoomDto.EntryDate,
                OperationType = OperationType.IN.ToString(),
                SupplierId    = newStockRoomDto.SupplierId
            };

            _shoesDataEntities.StockRooms.Add(newStockRoom);
            return(newStockRoom);
        }
Exemple #7
0
        public async Task <ActionResult <Guid> > Create(StockRoom room, CancellationToken ct = default)
        {
            room.AccountId = _userContext.AccountId;

            var id = await _stockRoomsService.CreateAsync(_userContext.UserId, room, ct);

            return(Created(nameof(Get), id));
        }
        public void WhenAnOrderIsPlacedInventoryIsDepleted()
        {
            var sw = new StockRoom();
            sw.AddDish(1, new Cheeseburger());
            sw.AddDish(1, new CrabFries());
            sw.OrderPlaced(new OrderPlacedEvent{ Items = new List<Dish> { new Cheeseburger(), new CrabFries()}});

            Assert.AreEqual(0, sw.GetStockLevel<Cheeseburger>());
            Assert.AreEqual(0, sw.GetStockLevel<CrabFries>());
        }
        public static StockRoomChange CreateWithLog(this StockRoom room, Guid userId, Action <StockRoom> action)
        {
            action(room);

            return(new StockRoomChange
            {
                StockRoomId = room.Id,
                ChangerUserId = userId,
                CreateDateTime = DateTime.UtcNow,
                OldValueJson = string.Empty,
                NewValueJson = room.ToJsonString()
            });
        }
Exemple #10
0
 public StockRoomBuilder(
     IDefaultRequestHeadersService defaultRequestHeadersService,
     IStockRoomsClient orderTypesClient)
 {
     _orderTypesClient             = orderTypesClient;
     _defaultRequestHeadersService = defaultRequestHeadersService;
     _room = new StockRoom
     {
         Id        = Guid.NewGuid(),
         Name      = "Test".WithGuid(),
         IsDeleted = false
     };
 }
Exemple #11
0
        public async Task <ActionResult> Update(StockRoom room, CancellationToken ct = default)
        {
            var oldType = await _stockRoomsService.GetAsync(room.Id, true, ct);

            if (oldType == null)
            {
                return(NotFound(room.Id));
            }

            return(await ActionIfAllowed(
                       () => _stockRoomsService.UpdateAsync(_userContext.UserId, oldType, room, ct),
                       Roles.Orders,
                       oldType.AccountId));
        }
Exemple #12
0
        public void WhenAnOrderIsPlacedInventoryIsDepleted()
        {
            var sw = new StockRoom();

            sw.AddDish(1, new Cheeseburger());
            sw.AddDish(1, new CrabFries());
            sw.OrderPlaced(new OrderPlacedEvent {
                Items = new List <Dish> {
                    new Cheeseburger(), new CrabFries()
                }
            });

            Assert.AreEqual(0, sw.GetStockLevel <Cheeseburger>());
            Assert.AreEqual(0, sw.GetStockLevel <CrabFries>());
        }
        public InventoryKafkaService(CafeKafkaSettings cafeKafkaSettings)
        {
            _stockRoom = new StockRoom();
            try
            {
                _consumerConfig = KafkaConfig.CreateConsumerConfig(cafeKafkaSettings);

                _producerConfig = KafkaConfig.CreateProducerConfig(cafeKafkaSettings);

                Console.WriteLine("Read Kafka Bootstrap: " + cafeKafkaSettings.BootstrapServers);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception in kafka settings: " + ex);
            }
        }
Exemple #14
0
        public async Task UpdateAsync(
            Guid userId,
            StockRoom oldRoom,
            StockRoom newRoom,
            CancellationToken ct)
        {
            var change = oldRoom.UpdateWithLog(userId, x =>
            {
                x.Name           = newRoom.Name;
                x.IsDeleted      = newRoom.IsDeleted;
                x.ModifyDateTime = DateTime.UtcNow;
            });

            _storage.Update(oldRoom);
            await _storage.AddAsync(change, ct);

            await _storage.SaveChangesAsync(ct);
        }
Exemple #15
0
 public void Execute(StockRoom stockRoom)
 {
     stockRoom.AddDish(10, new Cheeseburger());
     stockRoom.AddDish(10, new BaconCheeseBurger());
     stockRoom.AddDish(10, new PotPie());
     stockRoom.AddDish(10, new CheeseSteak());
     stockRoom.AddDish(10, new CrabFries());
     stockRoom.AddDish(10, new HotWings());
     stockRoom.AddDish(10, new Fries());
     stockRoom.AddDish(10, new MillerLite());
     stockRoom.AddDish(10, new CoorsLite());
     stockRoom.AddDish(10, new Soda());
     stockRoom.AddDish(10, new IcedTea());
     stockRoom.AddDish(10, new Nachos());
     stockRoom.AddDish(10, new BlackenedChickenSandwich());
     stockRoom.AddDish(10, new Pizza());
     stockRoom.AddDish(10, new Calzone());
     stockRoom.AddDish(10, new VealScallopini());
 }
Exemple #16
0
 public void Execute(StockRoom stockRoom)
 {
     stockRoom.AddDish(10, new Cheeseburger());
     stockRoom.AddDish(10, new BaconCheeseBurger());
     stockRoom.AddDish(10, new PotPie());
     stockRoom.AddDish(10, new CheeseSteak());
     stockRoom.AddDish(10, new CrabFries());
     stockRoom.AddDish(10, new HotWings());
     stockRoom.AddDish(10, new Fries());
     stockRoom.AddDish(10, new MillerLite());
     stockRoom.AddDish(10, new CoorsLite());
     stockRoom.AddDish(10, new Soda());
     stockRoom.AddDish(10, new IcedTea());
     stockRoom.AddDish(10, new Nachos());
     stockRoom.AddDish(10, new BlackenedChickenSandwich());
     stockRoom.AddDish(10, new Pizza());
     stockRoom.AddDish(10, new Calzone());
     stockRoom.AddDish(10, new VealScallopini());
 }
Exemple #17
0
        public async Task <Guid> CreateAsync(Guid userId, StockRoom room, CancellationToken ct)
        {
            var newRoom = new StockRoom();
            var change  = newRoom.CreateWithLog(userId, x =>
            {
                x.Id             = room.Id;
                x.AccountId      = room.AccountId;
                x.Name           = room.Name;
                x.IsDeleted      = room.IsDeleted;
                x.CreateDateTime = DateTime.UtcNow;
            });

            var entry = await _storage.AddAsync(newRoom, ct);

            await _storage.AddAsync(change, ct);

            await _storage.SaveChangesAsync(ct);

            return(entry.Entity.Id);
        }
Exemple #18
0
        public async Task WhenCreate_ThenSuccess()
        {
            var headers = await _defaultRequestHeadersService.GetAsync();

            var room = new StockRoom
            {
                Id        = Guid.NewGuid(),
                Name      = "Test".WithGuid(),
                IsDeleted = false
            };

            var createdTypeId = await _stockRoomsClient.CreateAsync(room, headers);

            var createdType = await _stockRoomsClient.GetAsync(createdTypeId, headers);

            Assert.NotNull(createdType);
            Assert.Equal(createdTypeId, createdType.Id);
            Assert.Equal(room.Name, createdType.Name);
            Assert.Equal(room.IsDeleted, createdType.IsDeleted);
            Assert.True(createdType.CreateDateTime.IsMoreThanMinValue());
        }
Exemple #19
0
        static void Main(string[] args)
        {
            var stockroom = new StockRoom();

            new Setup().Execute(stockroom);


            var joe = new Customer();


            var order = new OrderPlacedEvent();

            order.Items.Add(new MillerLite());
            order.Items.Add(new BaconCheeseBurger());

            var kitchen = new Kitchen();


            EventManager.Register <OrderPlacedEvent>(joe.PlaceOrder);
            EventManager.Register <OrderPlacedEvent>(stockroom.OrderPlaced);
            EventManager.Register <ItemMovedToKitchenEvent>(kitchen.Cook);
            EventManager.Register <OrderReadyEvent>(joe.ReceiveOrder);



            EventManager.Raise(order);

            //customer places order
            //stockroom moves order to kitchen
            //kithcen prepared order
            //waitstaff delivers order
            //waitstaff checks on customer
            //waitstaff delivers bill
            //customer pasys
            //marketing sends a thanks a lot email
            //waitstaff delivers reciept
            //Done!
        }
        private StockRoom AddNewStockRoomAndProduct(StockRoomDto newStockRoomDto, int colorId)
        {
            var currentProduct = new Product
            {
                ModelId = newStockRoomDto.ModelId,
                ColorId = colorId,
                Size    = newStockRoomDto.Size,
            };

            _shoesDataEntities.Products.Add(currentProduct);
            var newStockRoom = new StockRoom
            {
                ProductId     = currentProduct.Id,
                StockValue    = newStockRoomDto.Quantity,
                EntryValue    = newStockRoomDto.Quantity,
                EntryDate     = newStockRoomDto.EntryDate,
                OperationType = OperationType.IN.ToString(),
                SupplierId    = newStockRoomDto.SupplierId
            };

            _shoesDataEntities.StockRooms.Add(newStockRoom);
            return(newStockRoom);
        }
        public void SupplyStoreStockRoom(StoreStockRoomDto storeStockRoomDto)
        {
            if (storeStockRoomDto.ColorId == null)
            {
                throw new InvalidOperationException("Error: No enter new Store StockRoom if Color is null");
            }
            if (storeStockRoomDto.Size == null)
            {
                throw new InvalidOperationException("Error: No enter new Store StockRoom if Shoes Size is null");
            }

            var modelId        = storeStockRoomDto.ModelId;
            var colorId        = storeStockRoomDto.ColorId.Value;
            var size           = storeStockRoomDto.Size.Value;
            var currentProduct = _productServices.FindProduct(modelId, colorId, size);

            if (currentProduct == null)
            {
                throw new StockRoomOperationException("No Found a product item to supply Store StockRoom");
            }

            var lastStockRoom = _stockRoomDataServices.GetLastStockRoomByProductId(currentProduct.Id);

            if (lastStockRoom == null)
            {
                throw new StockRoomOperationException("No Found any stock room to execute the operation");
            }
            if (lastStockRoom.StockValue < storeStockRoomDto.Quantity)
            {
                throw new StockRoomOperationException(
                          "It is not possible to move requested quantity to selected store");
            }

            var newStockRoom = new StockRoom()
            {
                ProductId     = lastStockRoom.ProductId,
                StockValue    = lastStockRoom.StockValue - storeStockRoomDto.Quantity,
                EntryDate     = storeStockRoomDto.DateOfSupplier,
                EntryValue    = -storeStockRoomDto.Quantity,
                StoreId       = storeStockRoomDto.StoreId,
                OperationType = OperationType.OUT.ToString()
            };

            _shoesDataEntities.StockRooms.Add(newStockRoom);
            var lastStoreStockRoom = GetLastStoreStockRoomByProductId(storeStockRoomDto.StoreId, currentProduct.Id);
            var storeStocks        = storeStockRoomDto.Quantity;

            if (lastStoreStockRoom != null)
            {
                storeStocks += lastStoreStockRoom.StockValue;
            }
            var newStoreStockRoom = new StoreStockRoom
            {
                ProductId     = currentProduct.Id,
                StockValue    = storeStocks,
                EntryDate     = storeStockRoomDto.DateOfSupplier,
                EntryValue    = storeStockRoomDto.Quantity,
                StoreId       = storeStockRoomDto.StoreId,
                OperationType = OperationType.IN.ToString()
            };

            _shoesDataEntities.StoreStockRooms.Add(newStoreStockRoom);
            SaveChanges();
        }