123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- 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;
- namespace PRSDesktop
- {
- internal class SupplierPurchaseOrderItems : DynamicDataGrid<PurchaseOrderItem>
- {
- private readonly Button bill;
- private readonly Button consign;
- private readonly Button receive;
- private readonly Button viewconsign;
-
- public Guid OrderID { get; set; }
- public Guid SupplierID { get; set; }
- public bool Closed { get; set; }
- public SupplierPurchaseOrderItems()
- {
- Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns, DynamicGridOption.MultiSelect,
- DynamicGridOption.FilterRows);
- HiddenColumns.Add(x => x.PurchaseOrderLink.SupplierLink.ID);
- HiddenColumns.Add(x => x.PurchaseOrderLink.Category.ID);
- HiddenColumns.Add(x => x.ID);
- HiddenColumns.Add(x => x.Product.ID);
- HiddenColumns.Add(x => x.Product.Code);
- HiddenColumns.Add(x => x.Product.Name);
- HiddenColumns.Add(x => x.Description);
- 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.BillLine.ID);
- HiddenColumns.Add(x => x.BillLine.Deleted);
- HiddenColumns.Add(x => x.Consignment.ID);
- HiddenColumns.Add(x => x.Product.DigitalForm.ID);
- HiddenColumns.Add(x => x.Product.DigitalForm.Description);
- HiddenColumns.Add(x => x.Product.Image.ID);
- HiddenColumns.Add(x => x.Product.Image.FileName);
- ActionColumns.Add(new DynamicImagePreviewColumn<PurchaseOrderItem>(this, x => x.Product.Image, true)
- { Position = DynamicActionColumnPosition.Start });
- HiddenColumns.Add(x => x.FormCount);
- HiddenColumns.Add(x => x.OpenForms);
- ActionColumns.Add(new DynamicMenuColumn(BuildMenu) { Position = DynamicActionColumnPosition.Start });
- ActionColumns.Add(new DynamicImageColumn(FormsImage) { Position = DynamicActionColumnPosition.Start, ToolTip = FormsToolTip });
- if (Security.IsAllowed<CanViewConsignmentModule>())
- {
- consign = AddButton("Create Consignment", null, CreateConsignment);
- consign.IsEnabled = false;
- viewconsign = AddButton("View Consignment", null, ViewConsignment);
- viewconsign.Visibility = Visibility.Collapsed;
- }
- receive = AddButton("Receive Items", null, ReceiveItems);
- receive.IsEnabled = false;
- bill = AddButton("Enter Bill", null, EnterBill);
- bill.IsEnabled = false;
- }
- private void BuildMenu(DynamicMenuColumn column, CoreRow? row)
- {
- if (row == null) return;
- var formsItem = column.AddItem("Digital Forms", PRSDesktop.Resources.kanban, null);
- DynamicGridUtils.PopulateFormMenu<PurchaseOrderItemForm, PurchaseOrderItem, PurchaseOrderItemLink>(formsItem, row.Get<PurchaseOrderItem, Guid>(x => x.ID), () => row.ToObject<PurchaseOrderItem>());
- }
- private FrameworkElement FormsToolTip(DynamicActionColumn arg1, CoreRow arg2)
- {
- var text = arg2 == null || arg2.Get<PurchaseOrderItem, Guid>(x => x.Product.DigitalForm.ID) == Guid.Empty
- ? ""
- : arg2.Get<PurchaseOrderItem, int>(c => c.FormCount) == 0
- ? "No forms found for this item"
- : arg2.Get<PurchaseOrderItem, int>(c => c.OpenForms) > 0
- ? "Incomplete forms found"
- : "All forms completed";
- return string.IsNullOrWhiteSpace(text) ? null : arg1.TextToolTip(text);
- }
- private BitmapImage? FormsImage(CoreRow? arg)
- {
- if (arg == null)
- return PRSDesktop.Resources.quality.AsBitmapImage();
- return arg.Get<PurchaseOrderItem, Guid>(x => x.Product.DigitalForm.ID) == Guid.Empty
- ? null
- : arg.Get<PurchaseOrderItem, int>(c => c.FormCount) == 0
- ? PRSDesktop.Resources.warning.AsBitmapImage()
- : arg.Get<PurchaseOrderItem, int>(c => c.OpenForms) > 0
- ? PRSDesktop.Resources.warning.AsBitmapImage()
- : PRSDesktop.Resources.quality.AsBitmapImage();
- }
- //private bool ViewQAForm(Button arg1, CoreRow[] arg2)
- //{
- // var item = DynamicFormWindow.LoadDigitalForm<PurchaseOrderItem>(arg2[0].Get<PurchaseOrderItem, Guid>(x => x.ID));
- // if (item.Form.ID == Guid.Empty)
- // {
- // item.Form.ID = arg2[0].Get<PurchaseOrderItem, Guid>(x => x.ProductLink.DigitalForm.ID);
- // item.Form.Description = arg2[0].Get<PurchaseOrderItem, String>(x => x.ProductLink.DigitalForm.Description);
- // }
- // var result = DynamicFormWindow.EditDigitalForm<PurchaseOrderItem>(item);
- // if (result)
- // SaveItem(item);
- // return result;
- //}
- //private void ViewQAForm2(object sender, object item)
- //{
- //}
- //public override void LoadEditorButtons(PurchaseOrderItem item, DynamicEditorButtons buttons)
- //{
- // base.LoadEditorButtons(item, buttons);
- // buttons.Add(new DynamicEditorButton("QA Form", null, item, ViewQAForm2));
- //}
- protected override void SelectItems(CoreRow[] rows)
- {
- if (consign != null && viewconsign != null)
- {
- consign.IsEnabled =
- rows != null
- && !rows.Any(r => Entity.IsEntityLinkValid<PurchaseOrderItem, ConsignmentLink>(x => x.Consignment, r))
- && !rows.Any(r => r.Get<PurchaseOrderItem, DateTime>(c => c.ReceivedDate).IsEmpty() == false);
- viewconsign.Visibility =
- rows == null || consign.IsEnabled || rows.Select(r => r.Get<PurchaseOrderItem, Guid>(x => x.Consignment.ID)).Distinct().Count() != 1
- ? Visibility.Collapsed
- : Visibility.Visible;
- consign.Visibility = viewconsign.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
- }
- receive.IsEnabled =
- rows != null
- && !rows.Any(r => Entity.IsEntityLinkValid<PurchaseOrderItem, ConsignmentLink>(x => x.Consignment, r))
- && !rows.Any(r => r.Get<PurchaseOrderItem, DateTime>(c => c.ReceivedDate).IsEmpty() == false);
- bill.IsEnabled =
- rows != null
- && !rows.Any(r => r.IsEntityLinkValid<PurchaseOrderItem, BillLineLink>(x => x.BillLine));
- base.SelectItems(rows);
- }
- protected override void Reload(Filters<PurchaseOrderItem> criteria, Columns<PurchaseOrderItem> columns, ref SortOrder<PurchaseOrderItem> sort,
- Action<CoreTable, Exception> action)
- {
- criteria.Add(new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.ID).IsEqualTo(OrderID));
- base.Reload(criteria, columns, ref sort, action);
- }
-
- protected override PurchaseOrderItem CreateItem()
- {
- var result = base.CreateItem();
- result.PurchaseOrderLink.ID = OrderID;
- return result;
- }
- public override bool EditItems(PurchaseOrderItem[] items, Func<Type, CoreTable> PageDataHandler, bool PreloadPages = false)
- {
- if (OrderID.Equals(Guid.Empty))
- {
- MessageBox.Show("Please select a Purchase Order first!");
- return false;
- }
- if (Closed)
- {
- MessageBox.Show("Cannot Modify a Closed Purchase Order");
- return false;
- }
- return base.EditItems(items, PageDataHandler, true);
- }
- protected override Dictionary<string, object> EditorValueChanged(DynamicEditorForm editor, PurchaseOrderItem[] items, string name,
- object value)
- {
- var results = base.EditorValueChanged(editor, items, name, value);
- if (name.Equals("Product.ID") || name.Equals("Job.ID"))
- {
- PurchaseOrder.UpdateCosts(
- items,
- SupplierID,
- (name,value) => DynamicGridUtils.UpdateEditorValue(items, name, value, results)
- );
- }
- else if (name.Equals("ProductLink.TaxCode.ID"))
- {
- DynamicGridUtils.UpdateEditorValue(items, "TaxCode.ID", (Guid)value, results);
- }
- return results;
- }
- private bool CheckPOStatus(Func<bool> basefunction)
- {
- if (OrderID.Equals(Guid.Empty) || (OrderID.Equals(CoreUtils.FullGuid)))
- {
- MessageBox.Show("Please select a Purchase Order first!");
- return false;
- }
- if (Closed)
- {
- MessageBox.Show("Cannot Modify a Closed Purchase Order");
- return false;
- }
- return basefunction();
- }
- protected override bool CanCreateItems() => CheckPOStatus(() => base.CanCreateItems());
- protected override bool CanDeleteItems(CoreRow[] rows) => CheckPOStatus(() => base.CanDeleteItems(rows));
-
- private bool CreateConsignment(Button sender, CoreRow[] rows)
- {
- if (!rows.Any())
- {
- MessageBox.Show("Please select a row first");
- return false;
- }
- var consign = new Consignment();
- consign.Supplier.ID = rows.First().Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.SupplierLink.ID);
- consign.Category.ID = rows.First().Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.Category.ID);
- return new DynamicDataGrid<Consignment>().EditItems(new[] { consign }, LoadConsignmentLines, true);
- }
- private bool ViewConsignment(Button sender, CoreRow[] rows)
- {
- if (!rows.Any())
- {
- MessageBox.Show("Please select a row first");
- return false;
- }
- var consign = new Consignment();
- consign.Supplier.ID = rows.First().Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.SupplierLink.ID);
- consign.Category.ID = rows.First().Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.Category.ID);
- return new DynamicDataGrid<Consignment>().EditItems(new[] { consign }, LoadConsignmentLines, true);
- }
- private CoreTable LoadConsignmentLines(Type arg)
- {
- var result = new CoreTable();
- result.LoadColumns(typeof(PurchaseOrderItem));
- result.LoadRows(SelectedRows);
- return result;
- }
- private bool ReceiveItems(Button sender, CoreRow[] rows)
- {
- if (!rows.Any())
- {
- MessageBox.Show("Please select a row first");
- return false;
- }
- var now = DateTime.Now;
- using (new WaitCursor())
- {
- var items = LoadItems(rows);
- foreach (var item in items)
- item.ReceivedDate = now;
- new Client<PurchaseOrderItem>().Save(items, "Consignment Items Received");
- }
- return true;
- }
- private bool EnterBill(Button sender, CoreRow[] rows)
- {
- if (!rows.Any())
- {
- MessageBox.Show("Please select a row first");
- return false;
- }
- var bill = new Bill();
- bill.SupplierLink.ID = rows.First().Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.SupplierLink.ID);
- bill.Date = DateTime.Today;
- return new DynamicDataGrid<Bill>().EditItems(new[] { bill }, LoadBillLines);
- }
- private CoreTable LoadBillLines(Type type)
- {
- var result = new CoreTable();
- result.LoadColumns(typeof(BillLine));
- foreach (var row in SelectedRows)
- {
- var billrow = result.NewRow();
- billrow.Set<BillLine, Guid>(x => x.OrderItem.ID, row.Get<PurchaseOrderItem, Guid>(x => x.ID));
- var description = new List<string>();
- if (row.Get<PurchaseOrderItem, Guid>(x => x.Product.ID) != Guid.Empty)
- description.Add(string.Format("{0} : {1}", row.Get<PurchaseOrderItem, string>(x => x.Product.Code),
- row.Get<PurchaseOrderItem, string>(x => x.Product.Name)));
- var Description = row.Get<PurchaseOrderItem, string>(x => x.Description);
- if (!string.IsNullOrEmpty(Description))
- description.Add(Description);
- billrow.Set<BillLine, string>(x => x.Description, string.Join("\n", description));
- billrow.Set<BillLine, Guid>(x => x.TaxCode.ID, row.Get<PurchaseOrderItem, Guid>(x => x.TaxCode.ID));
- billrow.Set<BillLine, string>(x => x.TaxCode.Code, row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Code));
- billrow.Set<BillLine, string>(x => x.TaxCode.Description, row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Description));
- billrow.Set<BillLine, double>(x => x.TaxCode.Rate, row.Get<PurchaseOrderItem, double>(x => x.TaxCode.Rate));
- billrow.Set<BillLine, double>(x => x.TaxRate, row.Get<PurchaseOrderItem, double>(x => x.TaxRate));
- billrow.Set<BillLine, double>(x => x.ExTax, row.Get<PurchaseOrderItem, double>(x => x.ExTax));
- billrow.Set<BillLine, double>(x => x.Tax, row.Get<PurchaseOrderItem, double>(x => x.Tax));
- billrow.Set<BillLine, double>(x => x.IncTax, row.Get<PurchaseOrderItem, double>(x => x.IncTax));
- result.Rows.Add(billrow);
- }
- return result;
- }
- }
- }
|