123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using System;
- using System.Linq;
- using System.Reflection;
- using System.Windows;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- namespace PRSDesktop
- {
- internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IJobControl, IDataModelSource
- {
- public JobSummaryGrid() : base()
- {
- Options.AddRange(
- DynamicGridOption.RecordCount,
- DynamicGridOption.SelectColumns,
- DynamicGridOption.FilterRows,
- DynamicGridOption.ExportData
- );
- HiddenColumns.Add(x => x.Product.ID);
- HiddenColumns.Add(x => x.Style.ID);
- HiddenColumns.Add(x => x.Dimensions.UnitSize);
- HiddenColumns.Add(x => x.BillOfMaterials);
- HiddenColumns.Add(x => x.TotalRequired);
- HiddenColumns.Add(x => x.BalanceRequired);
- HiddenColumns.Add(x => x.ReservedStock);
- HiddenColumns.Add(x => x.OnOrder);
- HiddenColumns.Add(x => x.Issued);
- HiddenColumns.Add(x => x.Received);
- HiddenColumns.Add(x => x.Product.Image.ID);
- HiddenColumns.Add(x => x.Product.Image.FileName);
- ActionColumns.Add(new DynamicImageColumn<JobMaterial>(this, x => x.Product.Image, false)
- { Position = DynamicActionColumnPosition.Start });
- OnCellDoubleClick += JobSummaryGrid_OnCellDoubleClick;
- }
- private void JobSummaryGrid_OnCellDoubleClick(object sender, DynamicGridCellClickEventArgs args)
- {
- if(args.Column.ColumnName == "BillOfMaterials"
- || args.Column.ColumnName == "TotalRequired"
- || args.Column.ColumnName == "ReservedStock"
- || args.Column.ColumnName == "OnOrder"
- || args.Column.ColumnName == "Issued"
- || args.Column.ColumnName == "Received"
- || args.Column.ColumnName == "FreeStock")
- {
- if(DatabaseSchema.Property(typeof(JobMaterial), args.Column.ColumnName) is StandardProperty property)
- {
- var aggregate = property.Property.GetCustomAttribute<AggregateAttribute>();
- if(aggregate is not null)
- {
- var entityType = aggregate.Source;
- var filter = Filter.Create(entityType).All();
-
- var aggFilter = aggregate.Filter;
- if (aggFilter is not null)
- filter.And(aggFilter);
- var links = aggregate.Links;
- foreach (var (pLeft, pJobMaterial) in aggregate.Links)
- {
- var value = pJobMaterial == "Job.ID"
- ? JobID
- : args.Row[pJobMaterial];
- filter.And(pLeft).IsEqualTo(value);
- }
- var grid = (Activator.CreateInstance(typeof(DynamicDataGrid<>).MakeGenericType(entityType)) as IDynamicDataGrid)!;
- grid.ColumnsTag = $"JobSummaryAggregate.{args.Column.ColumnName}";
- //DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), entityType);
- grid.Options.BeginUpdate().Clear().AddRange(DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns).EndUpdate();
- grid.OnDefineFilter += (o, type) =>
- {
- return filter;
- };
- var window = DynamicGridUtils.CreateGridWindow($"Viewing {CoreUtils.Neatify(args.Column.ColumnName)} Calculation", (grid as BaseDynamicGrid)!);
- window.ShowDialog();
- }
- }
- }
- else if(args.Column.ColumnName == "BalanceRequired")
- {
- var totalRequired = (double)(args.Row["TotalRequired"] ?? 0.0);
- var issued = (double)(args.Row["Issued"] ?? 0.0);
- var balance = (double)(args.Row["BalanceRequired"] ?? 0.0);
- MessageBox.Show($"BalanceRequired\n = TotalRequired - Issued\n = {totalRequired:F2} - {issued:F2} = {balance:F2}");
- }
- }
- public event DataModelUpdateEvent OnUpdateDataModel;
- public string SectionName => "Job Summary";
- public DataModel DataModel(Selection selection)
- {
- return new AutoDataModel<JobMaterial>(new Filter<JobMaterial>(x => x.Job.ID).IsEqualTo(JobID));
- }
- public Guid JobID { get; set; }
- protected override JobMaterial CreateItem()
- {
- var result = base.CreateItem();
- result.Job.ID = JobID;
- return result;
- }
- protected override void Reload(Filters<JobMaterial> criteria, Columns<JobMaterial> columns, ref SortOrder<JobMaterial>? sort,
- Action<CoreTable?, Exception?> action)
- {
- if (JobID == Guid.Empty)
- criteria.Add(new Filter<JobMaterial>().None());
- else
- criteria.Add(new Filter<JobMaterial>(x => x.Job.ID).IsEqualTo(JobID)
- .And(x=>x.Product.ID).IsNotEqualTo(Guid.Empty));
- base.Reload(criteria, columns, ref sort, action);
- }
- protected override bool FilterRecord(CoreRow row)
- {
- var result = base.FilterRecord(row);
- if (result)
- result = (result && row.Get<JobMaterial, double>(x => x.BillOfMaterials) != 0.0F) ||
- row.Get<JobMaterial, double>(x => x.TotalRequired) != 0.0F ||
- row.Get<JobMaterial, double>(x => x.BalanceRequired) != 0.0F ||
- row.Get<JobMaterial, double>(x => x.OnOrder) != 0.0F ||
- row.Get<JobMaterial, double>(x => x.Issued) != 0.0F ||
- row.Get<JobMaterial, double>(x => x.Received) != 0.0F ||
- row.Get<JobMaterial, double>(x => x.ReservedStock) != 0.0F;
- return result;
- }
- }
- }
|