Example #1
0
        public void When(CarProduced theEvent)
        {
            CreatedCars.Add(theEvent.CarModel);

            foreach (var carPart in theEvent.Parts)
            {
                var removed = carPart.Quantity;

                var quantitied = GetNumberOfAvailablePartsQuantity(carPart.Name);
                if (quantitied > 0)
                {
                    _availableParts[carPart.Name] = quantitied > removed ? quantitied - removed : 0;
                }
            }

            var emptyPartKeys = _availableParts.Where(x => x.Value == 0).Select(x => x.Key).ToList();

            foreach (var emptyPartKey in emptyPartKeys)
            {
                _availableParts.Remove(emptyPartKey);
            }

            // Rule: an employee can only produce one car per day
            // so remember who just did it

            EmployeesWhoHaveProducedACarToday.Add(theEvent.EmployeeName);
        }
Example #2
0
 public void When(CarProduced e)
 {
     foreach (var part in e.Parts)
     {
         Change(part.Name, -part.Quantity);
     }
 }
        string When(CarProduced e)
        {
            var builder = new StringBuilder();
            builder.AppendFormat("produce car {0}:", e.CarModel).AppendLine();
            foreach (var carPart in e.Parts)
                builder.AppendFormat("     {0} {1} pcs", carPart.Name, carPart.Quantity).AppendLine();

            return builder.ToString();
        }
Example #4
0
        void AnnounceInsideFactory(CarProduced theEvent)
        {
            // Reduce the Inventory of parts that were just used to ProduceACar
            // There is a better way to not repeat the hard-coded Model T parts needed but leave it for now

            if (theEvent.CarModel == "Model T")
            {
                // Parts Needed To Build a Model T
                // 6 wheels
                // 1 engine
                // 2 sets of "bits and pieces
                // Reduce Parts Stock Inventory by that Amount

                int currentItemQuantity = 0;
                // TODO:  Rinat, This is atomic and safe right?  I think yes because of Factory Agg boundary but...??
                // TODO:  Negative inventory concerns, check on eventually consistent stuff.
                if (InventoryOfPartsOnShelf.TryGetValue("wheels", out currentItemQuantity))
                {
                    InventoryOfPartsOnShelf["wheels"] = currentItemQuantity - 6;
                }

                currentItemQuantity = 0;
                if (InventoryOfPartsOnShelf.TryGetValue("engine", out currentItemQuantity))
                {
                    InventoryOfPartsOnShelf["engine"] = currentItemQuantity - 1;
                }

                currentItemQuantity = 0;
                if (InventoryOfPartsOnShelf.TryGetValue("bits and pieces", out currentItemQuantity))
                {
                    InventoryOfPartsOnShelf["bits and pieces"] = currentItemQuantity - 2;
                }
            }

            // Rule: an employee can only produce one car per day
            // so remember who just did it

            EmployeesWhoHaveProducedACarToday.Add(theEvent.EmployeeName);
        }
Example #5
0
        void When(CarProduced e)
        {
            CreatedCars.Add(e.CarModel);

            foreach (var carPart in e.Parts)
            {
                var removed = carPart.Quantity;

                var quantitied = GetNumberOfAvailablePartsQuantity(carPart.Name);
                if (quantitied > 0)
                {
                    _availableParts[carPart.Name] = quantitied > removed ? quantitied - removed : 0;
                }
            }

            var emptyPartKeys = _availableParts.Where(x => x.Value == 0).Select(x => x.Key).ToList();

            foreach (var emptyPartKey in emptyPartKeys)
            {
                _availableParts.Remove(emptyPartKey);
            }
        }
Example #6
0
 void AnnounceInsideFactory(CarProduced e)
 {
     _producedCars.Add(e.Model);
 }
Example #7
0
            void AnnounceInsideFactory(CarProduced e)
            {
                var wheelsRemoved = 0;
                var wheelsParts = _shipmentsWaitingToBeUnloaded.SelectMany(x => x).Where (x => x.Name == "wheels");

                foreach(var wheelsPart in wheelsParts)
                {
                    var wheelsToRemove = wheelsPart.Quantity >= 4 - wheelsRemoved ? 4 - wheelsRemoved : wheelsPart.Quantity;
                    wheelsRemoved += wheelsToRemove;

                    wheelsPart.Quantity -= wheelsToRemove;

                    if(wheelsRemoved == 4)
                        break;
                }
            }
Example #8
0
        public void When(CarProduced theEvent)
        {
            CreatedCars.Add(theEvent.CarModel);

            foreach (var carPart in theEvent.Parts)
            {
                var removed = carPart.Quantity;

                var quantitied = GetNumberOfAvailablePartsQuantity(carPart.Name);
                if (quantitied > 0)
                    _availableParts[carPart.Name] = quantitied > removed ? quantitied - removed : 0;
            }

            var emptyPartKeys = _availableParts.Where(x => x.Value == 0).Select(x => x.Key).ToList();

            foreach (var emptyPartKey in emptyPartKeys)
            {
                _availableParts.Remove(emptyPartKey);
            }

            // Rule: an employee can only produce one car per day
            // so remember who just did it

            EmployeesWhoHaveProducedACarToday.Add(theEvent.EmployeeName);

        }
Example #9
0
        void When(CarProduced e)
        {
            CreatedCars.Add(e.CarModel);

            foreach (var carPart in e.Parts)
            {
                var removed = carPart.Quantity;

                var quantitied = GetNumberOfAvailablePartsQuantity(carPart.Name);
                if (quantitied > 0)
                    AvailableParts[carPart.Name] = quantitied > removed ? quantitied - removed : 0;
            }

            var emptyPartKeys = AvailableParts.Where(x => x.Value == 0).Select(x => x.Key).ToList();

            foreach (var emptyPartKey in emptyPartKeys)
            {
                AvailableParts.Remove(emptyPartKey);
            }
        }
Example #10
0
            void AnnounceInsideFactory(CarProduced e)
            {
                // TODO:  Reduce the Inventory of parts that were just used
                // TODO:  But the whole inventory system needs to be revamped I think :)

                // Rule: an employee can only build one car a day
                // so remember who just did it

                _employeesWhoHaveProducedACarToday.Add(e.EmployeeName);
            }