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); }
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(); }
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); }
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); } }
void AnnounceInsideFactory(CarProduced e) { _producedCars.Add(e.Model); }
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; } }
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); }
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); } }
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); }