123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Media;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- namespace PRSDesktop.Panels.Requisitions;
- public class JobJRISummary : BaseObject
- {
- public JobRequisitionItemLink JRI { get; set; }
- [DoubleEditor(Editable = Editable.Disabled)]
- public double Required { get; set; }
-
- [DoubleEditor(Editable = Editable.Disabled)]
- public double Issued { get; set; }
-
- [DoubleEditor]
- public double Quantity { get; set; }
- }
- public class RequisitionItemJobRequitionPage : DynamicItemsListGrid<JobJRISummary>, ISpecificGrid
- {
-
- public RequisitionItem Item { get; set; }
-
- private class RequisitionItemJobRequisitionPageUI : DynamicGridGridUIComponent<JobJRISummary>
- {
- protected override Brush? GetCellBackground(CoreRow row, DynamicColumnBase column)
- {
- if (!row.Get<JobJRISummary, double>(c => c.Quantity).IsEffectivelyEqual(0.0))
- return new SolidColorBrush(Colors.LightGreen);
- return base.GetCellBackground(row, column);
- }
- }
- protected override IDynamicGridUIComponent<JobJRISummary> CreateUIComponent() => new RequisitionItemJobRequisitionPageUI() { Parent = this };
- protected override void Init()
- {
- base.Init();
- HiddenColumns.Add(x =>x.JRI.ID);
- HiddenColumns.Add(x=>x.JRI.Product.ID);
- HiddenColumns.Add(x => x.JRI.Product.Group.ID);
- HiddenColumns.Add(x=>x.JRI.Style.ID);
- HiddenColumns.Add(x=>x.JRI. Dimensions.Unit.ID);
- HiddenColumns.Add(x=>x.JRI.Dimensions.UnitSize);
- HiddenColumns.Add(x => x.JRI.Qty);
- HiddenColumns.Add(x=>x.Quantity);
- }
- protected override void DoReconfigure(FluentList<DynamicGridOption> options)
- {
- base.DoReconfigure(options);
- options.BeginUpdate()
- .Clear()
- .Add(DynamicGridOption.FilterRows)
- .Add(DynamicGridOption.DirectEdit)
- .Add(DynamicGridOption.HideDirectEditButton)
- .EndUpdate();
- }
- protected override void Reload(Filters<JobJRISummary> criteria, Columns<JobJRISummary> columns, ref SortOrder<JobJRISummary>? sort, Action<CoreTable?, Exception?> action)
- {
- Items.Clear();
- var table = new CoreTable();
- table.LoadColumns(columns);
- Filters<JobRequisitionItem> itemfilters = new Filters<JobRequisitionItem>();
- itemfilters.Add(
- new Filter<JobRequisitionItem>(x => x.Job.ID).IsEqualTo(Item.RequisitionLink.JobLink.ID));
- foreach (var filter in criteria.Items)
- {
- var itemfilter = Serialization.Deserialize<Filter<JobRequisitionItem>>(Serialization.Serialize(filter));
- if (itemfilter is not null)
- itemfilters.Add(itemfilter);
- }
- Columns<JobRequisitionItem> itemcolumns = new Columns<JobRequisitionItem>();
- foreach (var column in columns)
- itemcolumns.Add(column.Property.Replace("JRI.",""));
-
- SortOrder<JobRequisitionItem>? itemsort =
- Serialization.Deserialize<SortOrder<JobRequisitionItem>>(Serialization.Serialize(sort));
- MultiQuery query = new();
- query.Add<JobRequisitionItem>(
- itemfilters.Combine(),
- itemcolumns,
- itemsort
- );
- query.Add<StockMovement>(
- new Filter<StockMovement>(x=>x.Job.ID).IsEqualTo(Item.RequisitionLink.JobLink.ID)
- .And(x=>x.Type).IsEqualTo(StockMovementType.Issue),
- new Columns<StockMovement>(x=>x.JobRequisitionItem.ID).Add(x=>x.Issued)
- );
-
- query.Query(q =>
- {
- try
- {
- var mvmts = q.Get<StockMovement>()?.Rows.Select(r => r.ToObject<StockMovement>()).ToArray();
- var _jobRequisitionItems = q.Get<JobRequisitionItem>()?.Rows.Select(r => r.ToObject<JobRequisitionItem>()).ToArray();
- if (mvmts is not null && _jobRequisitionItems is not null)
- {
- foreach (var item in _jobRequisitionItems)
- {
- JobJRISummary summary = new JobJRISummary();
- summary.JRI.ID = item.ID;
- summary.JRI.Synchronise(item);
-
- summary.Required = item.Qty;
-
- var issues = mvmts.Where(x => x.JobRequisitionItem.ID == item.ID);
- summary.Issued = issues.Sum(x => x.Issued);
- if (summary.JRI.ID == Item.JobRequisitionItem.ID)
- summary.Quantity = Item.Quantity;
-
- Items.Add(summary);
- }
-
- table.LoadRows(Items);
- }
- action(table, null);
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
-
- });
-
- }
- private bool bFirst = true;
- protected override void OnAfterRefresh()
- {
- base.OnAfterRefresh();
- if (!bFirst)
- return;
- bFirst = false;
-
- SelectedRows = Data.Rows.Where(r =>
- r.Get<JobJRISummary, Guid>(c => c.JRI.ID) == Item.JobRequisitionItem.ID
- ).ToArray();
- if (SelectedRows.Any())
- ScrollIntoView(SelectedRows.First());
- }
-
- protected override DynamicGridColumns LoadColumns()
- {
- var columns = new DynamicGridColumns();
- columns.Add<JobJRISummary, int>(x => x.JRI.Requisition.Number, 50, "#", "", Alignment.MiddleCenter);
- columns.Add<JobJRISummary, string>(x => x.JRI.Requisition.Description, 200, "Requisition", "", Alignment.MiddleLeft);
- columns.Add<JobJRISummary, string>(x => x.JRI.Product.Code, 120, "Code", "", Alignment.MiddleCenter);
- columns.Add<JobJRISummary, string>(x => x.JRI.Product.Name, 0, "Name", "", Alignment.MiddleLeft);
- columns.Add<JobJRISummary, string>(x => x.JRI.Dimensions.UnitSize, 120, "Size", "", Alignment.MiddleCenter);
- columns.Add<JobJRISummary, string>(x => x.JRI.Style.Description, 150, "Style", "", Alignment.MiddleCenter);
- columns.Add<JobJRISummary, double>(x => x.Required, 100, "Required", "F2", Alignment.MiddleCenter);
- columns.Add<JobJRISummary, double>(x => x.Issued, 100, "Issued", "F2", Alignment.MiddleCenter);
- columns.Add<JobJRISummary, double>(x => x.Quantity, 100, "Quantity", "F2", Alignment.MiddleCenter);
- return columns;
- }
- protected override void Changed()
- {
- base.Changed();
- if (Item.ID != Guid.Empty && SelectedRows.Any())
- {
- foreach (var row in Data.Rows.Where(x=>x.Index != SelectedRows[0].Index))
- {
- if (!Items[row.Index].Quantity.IsEffectivelyEqual(0.0))
- {
- row.Set<JobJRISummary, double>(x => x.Quantity, 0.0);
- Items[row.Index].Quantity = 0.0;
- }
- }
- InvalidateGrid();
- }
- }
- }
|