public void ApplyTo(Order order) { foreach(var line in order.Lines) { line.AddModifier(_factory.CreateModifier(Code, ModifierType.Percentage, Value)); } }
public void RemoveFrom(Order order) { foreach(var line in order.Lines) { var modifiers = line.Modifiers.Where(m => m.Code == Code).ToList(); foreach(var modifier in modifiers) { line.RemoveModifier(modifier); } } }
public void Save(Order order) { var record = _context.Orders.Include(o => o.Lines).FirstOrDefault(o => o.OrderID == order.OrderID); if (record == null) { record = new OrderRecord(); record.Lines = new List<OrderLineRecord>(); _context.Orders.Add(record); } order.MapTo(record); foreach (var line in order.Lines) { // If the line in the order entity has an OrderLineID, just update the existing orderline var lineRecord = record.Lines.FirstOrDefault(l => l.OrderLineID == line.OrderLineID); if (lineRecord != null) { line.MapTo(lineRecord); _context.Entry(lineRecord).State = EntityState.Modified; } else { lineRecord = line.MapTo<OrderLineRecord>(); // lineRecord.ProductOption = line.ProductOption.MapTo<ProductOptionRecord>(); record.Lines.Add(lineRecord); } } var linesToRemove = record.Lines.Where(l => !order.Lines.Any(ol => ol.OrderLineID == l.OrderLineID)).ToList(); _context.OrderLines.RemoveRange(linesToRemove); _context.SaveChanges(); // Populate the primary keys of the orderlines to pick up any new IDs foreach(var line in order.Lines.Where(x => x.OrderLineID == 0)) { var lineRecord = record.Lines.Single(l => l.ProductOption.SKU == line.ProductOption.SKU); line.SetPrivatePropertyValue("Order_OrderID", lineRecord.Order_OrderID); line.SetPrivatePropertyValue("OrderLineID", lineRecord.OrderLineID); } // Populate the primary key of the order in case this is a new record order.SetPrivatePropertyValue("OrderID", record.OrderID); }
public bool AppliesTo(Order order) { return true; }