| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | using System.Linq;using Comal.Classes;using InABox.Core;using System;namespace Comal.Stores{    internal class BillLineStore : BaseStore<BillLine>    {        protected override void AfterSave(BillLine entity)        {            base.BeforeSave(entity);                        if (entity.OrderItem.HasOriginalValue(x => x.ID))            {                Filter<PurchaseOrderItem> filter = (entity.OrderItem.ID != Guid.Empty)                    ? new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.OrderItem.ID)                    : new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.OrderItem.GetOriginalValue(x => x.ID));                                var items = Provider.Query(                    filter,                    Columns.Required<PurchaseOrderItem>().Add(x => x.ID).Add(x=>x.BillLine.ID)                ).Rows.Select(x=>x.ToObject<PurchaseOrderItem>()).ToArray();                foreach (var item in items)                    item.BillLine.ID = entity.ID;                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<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.OrderItem.ID),            //     new Columns<PurchaseOrderItem>(            //         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<PurchaseOrderItem>()).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<PurchaseOrderItem>().Save(pitems.Where(x => x.IsChanged()), "Updated by Bill Modification");        }    }}
 |