| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Windows.Controls;
- using com.sun.xml.@internal.ws.api.config.management;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Wpf;
- using InABox.WPF;
- using net.sf.mpxj.MpxjUtilities;
- namespace PRSDesktop.Panels.Jobs
- {
- public class JobStockGrid : DynamicDataGrid<StockHolding>, IMasterDetailControl<Job,StockHolding>, IBasePanel
- {
- public Job? Master
- {
- get => _master;
- set
- {
- _master = value;
- _releaseStock.IsEnabled = value?.JobStatus.Active == false && SelectedRows?.Any() == true;
- }
- }
- private Button _releaseStock;
- private Job? _master;
- public JobStockGrid()
- {
- _releaseStock = AddButton("Release Stock", PRSDesktop.Resources.archive.AsBitmapImage(), ReleaseStock);
- HiddenColumns.Add(x => x.Location.ID);
- HiddenColumns.Add(x => x.Product.ID);
- HiddenColumns.Add(x => x.Style.ID);
- HiddenColumns.Add(x=>x.Dimensions.Unit.ID);
- HiddenColumns.Add(x=>x.Dimensions.Height);
- HiddenColumns.Add(x=>x.Dimensions.Length);
- HiddenColumns.Add(x=>x.Dimensions.Width);
- HiddenColumns.Add(x=>x.Dimensions.Quantity);
- HiddenColumns.Add(x=>x.Dimensions.Weight);
- HiddenColumns.Add(x => x.Job.ID);
- }
- protected override void Init()
- {
- base.Init();
- }
- protected override void SelectItems(CoreRow[]? rows)
- {
- base.SelectItems(rows);
- _releaseStock.IsEnabled = Master?.JobStatus.Active == false && SelectedRows?.Any() == true;
- }
- private bool ReleaseStock(object sender, CoreRow[] rows)
- {
- if(MessageWindow.ShowYesNoCancel("Are you sure you wish to do this? This will release the selected holdings from this job.", "Confirm") != MessageWindowResult.Yes)
- return false;
- var toSave = new List<StockMovement>();
- foreach (var row in SelectedRows)
- {
- StockHolding holding = row.ToObject<StockHolding>();
- var movements = new Client<StockMovement>().Query(
- StockHolding.GetFilter(holding),
- new Columns<StockMovement>(x => x.Units)
- .Add(x => x.Location.ID)
- .Add(x => x.Product.ID)
- .Add(x => x.Style.ID)
- .AddDimensionsColumns(x => x.Dimensions)
- .Add(x => x.Cost)
- .Add(x => x.OrderItem.ID)
- .Add(x => x.JobRequisitionItem.ID))
- .ToObjects<StockMovement>()
- .GroupBy(x => new
- {
- Location = x.Location.ID,
- Product = x.Product.ID,
- Style = x.Style.ID,
- x.Dimensions,
- x.Cost,
- OrderItem = x.OrderItem.ID,
- JobRequisitionItem = x.JobRequisitionItem.ID
- })
- .Select(x => new
- {
- x.Key,
- Units = x.Sum(x => x.Units)
- }
- );
- foreach (var group in movements)
- {
- var from = holding.CreateMovement();
- from.OrderItem.ID = group.Key.OrderItem;
- from.JobRequisitionItem.ID = group.Key.JobRequisitionItem;
- from.Cost = group.Key.Cost;
- from.Type = StockMovementType.TransferOut;
- from.Job.ID = Master.ID;
- from.Issued = group.Units;
- var to = holding.CreateMovement();
- to.Cost = group.Key.Cost;
- to.OrderItem.ID = group.Key.OrderItem;
- to.JobRequisitionItem.ID = group.Key.JobRequisitionItem;
- to.Type = StockMovementType.TransferIn;
- to.Transaction = from.Transaction;
- to.Units = group.Units;
- toSave.Add(from);
- toSave.Add(to);
- }
- }
- new Client<StockMovement>().Save(toSave, "Released job stock.");
- Refresh(false,true);
- MessageWindow.ShowMessage("All job stock reserves released.", "Success");
- return true;
- }
- public Filter<StockHolding> MasterDetailFilter => (Master?.ID ?? Guid.Empty) != Guid.Empty
- ? new Filter<StockHolding>(x => x.Job.ID).IsEqualTo(Master.ID)
- : new Filter<StockHolding>().None();
-
- protected override void DoReconfigure(FluentList<DynamicGridOption> options)
- {
- base.DoReconfigure(options);
- options
- .BeginUpdate()
- .Clear()
- .Add(DynamicGridOption.FilterRows)
- .Add(DynamicGridOption.RecordCount)
- .Add(DynamicGridOption.SelectColumns)
- .Add(DynamicGridOption.ExportData)
- .EndUpdate();
- }
-
- protected override void Reload(Filters<StockHolding> criteria, Columns<StockHolding> columns, ref SortOrder<StockHolding>? sort, Action<CoreTable?, Exception?> action)
- {
- criteria.Add(MasterDetailFilter);
- base.Reload(criteria, columns, ref sort, action);
- }
- public void Setup()
- {
- Refresh(true,false);
- }
- public void Shutdown(CancelEventArgs? cancel)
- {
-
- }
- public void Refresh()
- {
- Refresh(false,true);
- }
- public string SectionName => "Stock Holdings";
- public DataModel DataModel(Selection selection)
- {
- return new AutoDataModel<StockHolding>(
- new Filter<StockHolding>(x => x.Job.ID).IsEqualTo(Master?.ID ?? CoreUtils.FullGuid));
- }
- public event DataModelUpdateEvent? OnUpdateDataModel;
- public bool IsReady { get; set; }
- public void CreateToolbarButtons(IPanelHost host)
- {
- }
- public Dictionary<string, object[]> Selected()
- {
- return new Dictionary<string, object[]>();
- }
- public void Heartbeat(TimeSpan time)
- {
-
- }
- }
- }
|