using System.Linq; using Comal.Classes; using InABox.Core; using System; namespace Comal.Stores { internal class BillLineStore : BaseStore { protected override void AfterSave(BillLine entity) { base.BeforeSave(entity); if (entity.OrderItem.HasOriginalValue(x => x.ID)) { Filter filter = (entity.OrderItem.ID != Guid.Empty) ? new Filter(x => x.ID).IsEqualTo(entity.OrderItem.ID) : new Filter(x => x.ID).IsEqualTo(entity.OrderItem.GetOriginalValue(x => x.ID)); var items = Provider.Query( filter, Columns.Required().Add(x => x.ID).Add(x=>x.BillLine.ID) ).Rows.Select(x=>x.ToObject()).ToArray(); foreach (var item in items) item.BillLine.ID = entity.OrderItem.ID != Guid.Empty ? entity.ID : Guid.Empty; Provider.Save(items); } // Actually, we don't want to do this, because we will lose the ability to do a delta between // Order values and Bill values (to identify price creep) // A more useful idea would be to update linked product/stock costings when receiving a bill, // although we need to be careful about how we manage side effects for average costs etc.. // var pitems = Provider.Query( // new Filter(x => x.ID).IsEqualTo(entity.OrderItem.ID), // new Columns( // x => x.ID, // x => x.ExTax, // x => x.TaxCode.ID, // x => x.TaxRate, // x => x.IncTax, // x => x.Balance, // x => x.ReceivedDate // ) // ).Rows.Select(x => x.ToObject()).ToArray(); // foreach (var pitem in pitems) // { // pitem.ExTax = entity.ExTax; // pitem.TaxCode.ID = entity.TaxCode.ID; // pitem.TaxRate = entity.TaxRate; // pitem.IncTax = entity.IncTax; // pitem.Balance = pitem.ReceivedDate.IsEmpty() ? pitem.IncTax : 0.00F; // } // // FindSubStore().Save(pitems.Where(x => x.IsChanged()), "Updated by Bill Modification"); } } }