123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media.Imaging;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Wpf;
- using InABox.WPF;
- namespace PRSDesktop;
- public class SupplierBillLineGrid : DynamicOneToManyGrid<Bill, BillLine>
- {
- private static readonly BitmapImage pencil = InABox.Wpf.Resources.pencil.AsBitmapImage();
- public SupplierBillLineGrid()
- {
- AddButton("Import", PRSDesktop.Resources.purchase.AsBitmapImage(), ImportPOLines);
- HiddenColumns.Add(x => x.TaxCode.ID);
- HiddenColumns.Add(x => x.TaxCode.Code);
- HiddenColumns.Add(x => x.TaxCode.Description);
- HiddenColumns.Add(x => x.TaxCode.Rate);
- HiddenColumns.Add(x => x.TaxRate);
- HiddenColumns.Add(x => x.ExTax);
- HiddenColumns.Add(x => x.Tax);
- HiddenColumns.Add(x => x.IncTax);
- HiddenColumns.Add(x => x.Description);
-
- HiddenColumns.Add(x=>x.OrderItem.PurchaseOrderLink.PONumber);
- HiddenColumns.Add(x=>x.OrderItem.Product.Code);
- HiddenColumns.Add(x=>x.OrderItem.Description);
- HiddenColumns.Add(x=>x.OrderItem.Qty);
- HiddenColumns.Add(x=>x.OrderItem.ExTax);
- HiddenColumns.Add(x=>x.OrderItem.TaxCode.ID);
- HiddenColumns.Add(x=>x.OrderItem.Tax);
- HiddenColumns.Add(x=>x.OrderItem.IncTax);
- ActionColumns.Add(new DynamicImageColumn(pencil, BillLineEdit_Click));
- }
- protected override void DoReconfigure(FluentList<DynamicGridOption> options)
- {
- base.DoReconfigure(options);
- options
- .BeginUpdate()
- .Clear()
- .Add(DynamicGridOption.AddRows)
- .Add(DynamicGridOption.DeleteRows)
- .Add(DynamicGridOption.SelectColumns)
- .Add(DynamicGridOption.DirectEdit)
- .Add(DynamicGridOption.DragTarget)
- .EndUpdate();
- }
- public override void Load(object item, Func<Type, CoreTable?>? PageDataHandler)
- {
- Refresh(true, false);
- base.Load(item, type =>
- {
- var data = PageDataHandler?.Invoke(type);
- if(data is null && type == typeof(BillLine))
- {
- data = new Client<BillLine>().Query(
- new Filter<BillLine>(x => x.BillLink.ID).IsEqualTo(Item.ID),
- DynamicGridUtils.LoadEditorColumns(DataColumns()),
- LookupFactory.DefineSort<BillLine>());
- }
- return data;
- });
- }
- private bool BillLineEdit_Click(CoreRow? row)
- {
- if(row is null)
- {
- return false;
- }
- var item = LoadItem(row);
- if (EditItems(new BillLine[] { item }))
- {
- SaveItem(item);
- return true;
- }
- return false;
- }
- public override void ConfigureColumns(DynamicGridColumns columns)
- {
- base.ConfigureColumns(columns);
- // var orderItemColumn = columns.Find(x => x.ColumnName == $"{nameof(BillLine.OrderItem)}.{nameof(BillLine.OrderItem.ID)}");
- // if (orderItemColumn != null)
- // {
- // orderItemColumn.Editor.Editable = Editable.DisabledOnDirectEdit;
- // }
- }
- private bool ImportPOLines(Button arg1, CoreRow[] arg2)
- {
- MultiSelectDialog<PurchaseOrderItem> dlg = new MultiSelectDialog<PurchaseOrderItem>(
- new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.SupplierLink.ID).IsEqualTo(Item.SupplierLink.ID)
- .And(x => x.BillLine.ID).IsEqualTo(Guid.Empty),
- new Columns<PurchaseOrderItem>
- (
- x => x.ID,
- x => x.Description,
- x => x.Product.Code,
- x => x.ReceivedDate,
- x => x.Consignment.Number,
- x => x.PurchaseOrderLink.PONumber,
- x => x.PurchaseOrderLink.ID,
- x => x.Consignment.ID,
- x => x.Qty,
- x => x.ExTax,
- x => x.TaxRate,
- x => x.IncTax
- ));
- if (dlg.ShowDialog() == true)
- {
- var imports = dlg.Items();
- var poids = imports.Select(x => x.PurchaseOrderLink.ID).Distinct().ToArray();
- var consids = imports.Select(x => x.Consignment.ID).Distinct().ToArray();
- MultiQuery query = new MultiQuery();
-
- query.Add<PurchaseOrderItem>(
- new Filter<PurchaseOrderItem>(x => x.ID).InList(dlg.IDs()),
- new Columns<PurchaseOrderItem>(x => x.ID)
- .Add(x => x.Description)
- .Add(x => x.TaxCode.ID)
- .Add(x => x.TaxCode.Code)
- .Add(x => x.TaxCode.Description)
- .Add(x => x.TaxCode.Rate)
- .Add(x => x.Qty)
- .Add(x => x.TaxRate)
- .Add(x => x.ExTax)
- .Add(x => x.Tax)
- .Add(x => x.IncTax)
- .Add(x => x.Created)
- .Add(x => x.PurchaseOrderLink.ID)
- .Add(x => x.PurchaseOrderLink.PONumber)
- .Add(x => x.Consignment.ID)
- .Add(x => x.Product.ID)
- .Add(x => x.Product.Code)
- .Add(x => x.Product.Name)
- .Add(x => x.PurchaseGL.ID)
- .Add(x => x.CostCentre.ID)
- );
-
- query.Add<PurchaseOrderDocument>(
- new Filter<PurchaseOrderDocument>(x=>x.EntityLink.ID).InList(poids));
- query.Add<ConsignmentDocument>(
- new Filter<ConsignmentDocument>(x => x.EntityLink.ID).InList(consids));
-
- query.Query();
-
- var items = query.Get<PurchaseOrderItem>();
- foreach (var row in items.Rows)
- {
- var line = CreateItem();
- line.OrderItem.ID = row.Get<PurchaseOrderItem, Guid>(x => x.ID);
- line.OrderItem.PurchaseOrderLink.ID = row.Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.ID);
- line.OrderItem.PurchaseOrderLink.PONumber = row.Get<PurchaseOrderItem, String>(x => x.PurchaseOrderLink.PONumber);
- line.OrderItem.Product.ID = row.Get<PurchaseOrderItem, Guid>(x => x.Product.ID);
- line.OrderItem.Product.Code = row.Get<PurchaseOrderItem, string>(x => x.Product.Code);
- line.OrderItem.Product.Name = row.Get<PurchaseOrderItem, string>(x => x.Product.Name);
-
- line.OrderItem.Description = row.Get<PurchaseOrderItem, string>(x => x.Description);
- line.OrderItem.Qty = row.Get<PurchaseOrderItem, double>(x => x.Qty);
- line.OrderItem.ExTax = row.Get<PurchaseOrderItem, double>(x => x.ExTax);
- line.OrderItem.TaxCode.ID = row.Get<PurchaseOrderItem, Guid>(x => x.TaxCode.ID);
- line.OrderItem.TaxCode.Code = row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Code);
- line.OrderItem.TaxCode.Description = row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Description);
- line.OrderItem.TaxCode.Rate = row.Get<PurchaseOrderItem, double>(x => x.TaxCode.Rate);
- line.OrderItem.PurchaseGL.ID = row.Get<PurchaseOrderItem, Guid>(x => x.PurchaseGL.ID);
- line.OrderItem.CostCentre.ID = row.Get<PurchaseOrderItem, Guid>(x => x.CostCentre.ID);
-
- line.ExTax = row.Get<PurchaseOrderItem, double>(x => x.ExTax);
- line.TaxCode.ID = row.Get<PurchaseOrderItem, Guid>(x => x.TaxCode.ID);
- line.TaxCode.Code = row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Code);
- line.TaxCode.Description = row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Description);
- line.TaxCode.Rate = row.Get<PurchaseOrderItem, double>(x => x.TaxCode.Rate);
- line.TaxRate = row.Get<PurchaseOrderItem, double>(x => x.TaxRate);
- line.Tax = row.Get<PurchaseOrderItem, double>(x => x.Tax);
- line.IncTax = row.Get<PurchaseOrderItem, double>(x => x.IncTax);
- line.PurchaseGL.ID = row.Get<PurchaseOrderItem, Guid>(x => x.PurchaseGL.ID);
- line.CostCentre.ID = row.Get<PurchaseOrderItem, Guid>(x => x.CostCentre.ID);
-
-
- Items.Add(line);
- }
-
-
- var docpage = EditorGrid.Pages.FirstOrDefault(x=>x is BillDocumentGrid) as BillDocumentGrid;
- if (!docpage.Ready)
- docpage.Load(Item,null);
-
- if (docpage != null)
- {
- var podocs = query.Get<PurchaseOrderDocument>();
- foreach (var row in podocs.Rows)
- {
- var podoc = new BillDocument();
- podoc.EntityLink.ID = Item.ID;
- podoc.DocumentLink.ID = row.Get<PurchaseOrderDocument, Guid>(x => x.DocumentLink.ID);
- podoc.DocumentLink.FileName = row.Get<PurchaseOrderDocument, String>(x => x.DocumentLink.FileName);
- podoc.Thumbnail = row.Get<PurchaseOrderDocument, byte[]>(x => x.Thumbnail);
- docpage.SaveItem(podoc);
- }
- var consdocs = query.Get<ConsignmentDocument>();
- foreach (var row in consdocs.Rows)
- {
- var consdoc = new BillDocument();
- consdoc.EntityLink.ID = Item.ID;
- consdoc.DocumentLink.ID = row.Get<ConsignmentDocument, Guid>(x => x.DocumentLink.ID);
- consdoc.DocumentLink.FileName = row.Get<ConsignmentDocument, String>(x => x.DocumentLink.FileName);
- consdoc.Thumbnail = row.Get<ConsignmentDocument, byte[]>(x => x.Thumbnail);
- docpage.SaveItem(consdoc);
- }
- docpage.Refresh(false,true);
- }
- DoChanged();
- return true;
- }
- return false;
- }
- protected override void HandleDragOver(object sender, DragEventArgs e)
- {
- base.HandleDragOver(sender, e);
- if (e.Data.GetDataPresent(typeof(Product)))
- {
- if (e.Data.GetData(typeof(Product)) is Product product)
- {
- if (!Security.CanEdit<Bill>() || !Security.CanEdit<BillLine>())
- {
- e.Effects = DragDropEffects.None;
- }
- }
- }
- }
- protected override void HandleDragDrop(object sender, DragEventArgs e)
- {
- base.HandleDragDrop(sender, e);
- if (e.Data.GetDataPresent(typeof(Product)))
- {
- if (e.Data.GetData(typeof(Product)) is Product product)
- {
- if (Security.CanEdit<Bill>() && Security.CanEdit<BillLine>())
- {
- var item = CreateItem();
- item.Product.ID = product.ID;
- item.Product.Synchronise(product);
- item.Description = product.Name;
- SaveItem(item);
- DoChanged();
- Refresh(false, true);
- }
- }
- }
- }
- }
|