|
@@ -22,6 +22,8 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
|
|
|
|
private bool _loadedStockHoldings;
|
|
private bool _loadedStockHoldings;
|
|
private bool _loadedProductInstances;
|
|
private bool _loadedProductInstances;
|
|
|
|
+ private bool _loadedBOMItems;
|
|
|
|
+ private bool _loadedJobRequisitionItems;
|
|
private bool _loadedCustom;
|
|
private bool _loadedCustom;
|
|
|
|
|
|
private bool _allowActual;
|
|
private bool _allowActual;
|
|
@@ -37,22 +39,34 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public RequisitionItemEditor(List<Product> products, RequisitionItem requisitionItem, bool allowActual)
|
|
|
|
|
|
+ public RequisitionItemEditor(Func<List<Product>> products, RequisitionItem requisitionItem, bool allowActual)
|
|
{
|
|
{
|
|
_allowActual = allowActual;
|
|
_allowActual = allowActual;
|
|
|
|
|
|
InitializeComponent();
|
|
InitializeComponent();
|
|
|
|
|
|
- StockHoldingProducts.Items = products;
|
|
|
|
- ProductInstancesProducts.Items = products;
|
|
|
|
|
|
+ StockHoldingProducts.ProductsFunction = products;
|
|
|
|
+ ProductInstancesProducts.ProductsFunction = products;
|
|
|
|
+ BOMItems.Item = requisitionItem;
|
|
|
|
+ JobRequisitionItemsGrid.Item = requisitionItem;
|
|
|
|
|
|
|
|
+ HoldingsPage.Visibility = _allowActual ? Visibility.Visible : Visibility.Collapsed;
|
|
|
|
+ InstancesPage.Visibility = _allowActual ? Visibility.Collapsed : Visibility.Visible;
|
|
|
|
+ BOMPage.Visibility = _allowActual
|
|
|
|
+ ? Visibility.Collapsed
|
|
|
|
+ : Visibility.Visible;
|
|
|
|
+ RequisitionPage.Visibility = _allowActual
|
|
|
|
+ ? Visibility.Collapsed
|
|
|
|
+ : Visibility.Visible;
|
|
|
|
+
|
|
Item = requisitionItem;
|
|
Item = requisitionItem;
|
|
TabControl.SelectedItem = requisitionItem.EditType == RequisitionItemEditType.Normal
|
|
TabControl.SelectedItem = requisitionItem.EditType == RequisitionItemEditType.Normal
|
|
- ? HoldingsPage
|
|
|
|
|
|
+ ? _allowActual
|
|
|
|
+ ? HoldingsPage
|
|
|
|
+ : requisitionItem.JobRequisitionItem.ID == Guid.Empty
|
|
|
|
+ ? BOMPage
|
|
|
|
+ : RequisitionPage
|
|
: CustomPage;
|
|
: CustomPage;
|
|
-
|
|
|
|
- InstancesPage.Visibility = _allowActual ? Visibility.Collapsed : Visibility.Visible;
|
|
|
|
-
|
|
|
|
CanSave = false;
|
|
CanSave = false;
|
|
UpdateState();
|
|
UpdateState();
|
|
}
|
|
}
|
|
@@ -68,6 +82,23 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
_loadedStockHoldings = true;
|
|
_loadedStockHoldings = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ else if(TabControl.SelectedTab == BOMPage)
|
|
|
|
+ {
|
|
|
|
+ if (!_loadedBOMItems)
|
|
|
|
+ {
|
|
|
|
+ LoadBOMItems();
|
|
|
|
+ _loadedBOMItems = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ else if(TabControl.SelectedTab == RequisitionPage)
|
|
|
|
+ {
|
|
|
|
+ if (!_loadedJobRequisitionItems)
|
|
|
|
+ {
|
|
|
|
+ LoadJobRequisitionItems();
|
|
|
|
+ _loadedJobRequisitionItems = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
else if(TabControl.SelectedTab == InstancesPage)
|
|
else if(TabControl.SelectedTab == InstancesPage)
|
|
{
|
|
{
|
|
if (!_loadedProductInstances)
|
|
if (!_loadedProductInstances)
|
|
@@ -91,6 +122,10 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
{
|
|
{
|
|
if (TabControl.SelectedTab == HoldingsPage)
|
|
if (TabControl.SelectedTab == HoldingsPage)
|
|
CanSave = CanSaveStockHoldings();
|
|
CanSave = CanSaveStockHoldings();
|
|
|
|
+ else if (TabControl.SelectedTab == BOMPage)
|
|
|
|
+ CanSave = CanSaveBOMItems();
|
|
|
|
+ else if (TabControl.SelectedTab == RequisitionPage)
|
|
|
|
+ CanSave = CanSaveJobRequisitionItems();
|
|
else if (TabControl.SelectedTab == InstancesPage)
|
|
else if (TabControl.SelectedTab == InstancesPage)
|
|
CanSave = CanSaveProductInstances();
|
|
CanSave = CanSaveProductInstances();
|
|
else if (TabControl.SelectedTab == CustomPage)
|
|
else if (TabControl.SelectedTab == CustomPage)
|
|
@@ -101,6 +136,10 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
{
|
|
{
|
|
if (TabControl.SelectedTab == HoldingsPage)
|
|
if (TabControl.SelectedTab == HoldingsPage)
|
|
SaveStockHoldings();
|
|
SaveStockHoldings();
|
|
|
|
+ else if (TabControl.SelectedTab == BOMPage)
|
|
|
|
+ SaveBOMItems();
|
|
|
|
+ else if (TabControl.SelectedTab == RequisitionPage)
|
|
|
|
+ SaveJobRequisitionItems();
|
|
else if (TabControl.SelectedTab == InstancesPage)
|
|
else if (TabControl.SelectedTab == InstancesPage)
|
|
SaveProductInstances();
|
|
SaveProductInstances();
|
|
else if (TabControl.SelectedTab == CustomPage)
|
|
else if (TabControl.SelectedTab == CustomPage)
|
|
@@ -398,6 +437,123 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
|
|
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
|
|
+ #region BOM Items
|
|
|
|
+
|
|
|
|
+ private void LoadBOMItems()
|
|
|
|
+ {
|
|
|
|
+ BOMItems.Refresh(true,true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private bool CanSaveBOMItems()
|
|
|
|
+ {
|
|
|
|
+ return BOMItems.Data.Rows.Any(r =>!r.Get<JobBOMSummary,double>(x=>x.Quantity).IsEffectivelyEqual(0.0));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void SaveBOMItems()
|
|
|
|
+ {
|
|
|
|
+ var result = new List<RequisitionItem>() { Item };
|
|
|
|
+
|
|
|
|
+ var bomItems = BOMItems.Data.Rows
|
|
|
|
+ .Where(r => !r.Get<JobBOMSummary, double>(x => x.Quantity).IsEffectivelyEqual(0.0))
|
|
|
|
+ .Select(r => r.ToObject<JobBOMSummary>()).ToArray();
|
|
|
|
+
|
|
|
|
+ var first = bomItems.FirstOrDefault();
|
|
|
|
+ if (first is null)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ Item.Product.CopyFrom(first.Product);
|
|
|
|
+ Item.Style.CopyFrom(first.Style);
|
|
|
|
+ Item.Dimensions.CopyFrom(first.Dimensions, true);
|
|
|
|
+ Item.EditType = RequisitionItemEditType.Normal;
|
|
|
|
+ Item.Quantity = first.Quantity;
|
|
|
|
+
|
|
|
|
+ foreach (var item in bomItems.Skip(1).ToArray())
|
|
|
|
+ {
|
|
|
|
+ var newItem = new RequisitionItem();
|
|
|
|
+ newItem.RequisitionLink.ID = Item.RequisitionLink.ID;
|
|
|
|
+ newItem.Done = false;
|
|
|
|
+ newItem.Description = item.Product.Name;
|
|
|
|
+ newItem.Product.CopyFrom(item.Product);
|
|
|
|
+ newItem.Style.CopyFrom(item.Style);
|
|
|
|
+ newItem.Dimensions.CopyFrom(item.Dimensions, true);
|
|
|
|
+ newItem.EditType = RequisitionItemEditType.Normal;
|
|
|
|
+ newItem.Quantity = item.Quantity;
|
|
|
|
+ result.Add(newItem);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Client.Save(result, "Edited by user.");
|
|
|
|
+
|
|
|
|
+ Result = result.ToArray();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void BOMItems_OnOnChanged(object? sender, EventArgs e)
|
|
|
|
+ {
|
|
|
|
+ CheckCanSave();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ #region Job Requisition Items
|
|
|
|
+
|
|
|
|
+ private void LoadJobRequisitionItems()
|
|
|
|
+ {
|
|
|
|
+ JobRequisitionItemsGrid.Refresh(true,true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private bool CanSaveJobRequisitionItems()
|
|
|
|
+ {
|
|
|
|
+ return JobRequisitionItemsGrid.Data.Rows.Any(r =>!r.Get<JobJRISummary,double>(x=>x.Quantity).IsEffectivelyEqual(0.0));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void SaveJobRequisitionItems()
|
|
|
|
+ {
|
|
|
|
+ var result = new List<RequisitionItem>() { Item };
|
|
|
|
+
|
|
|
|
+ var items = JobRequisitionItemsGrid.Data.Rows
|
|
|
|
+ .Where(r => !r.Get<JobJRISummary, double>(x => x.Quantity).IsEffectivelyEqual(0.0))
|
|
|
|
+ .Select(r => r.ToObject<JobJRISummary>()).ToArray();
|
|
|
|
+
|
|
|
|
+ var first = items.FirstOrDefault();
|
|
|
|
+ if (first is null)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ Item.Product.CopyFrom(first.JRI.Product);
|
|
|
|
+ Item.Style.CopyFrom(first.JRI.Style);
|
|
|
|
+ Item.Dimensions.CopyFrom(first.JRI.Dimensions, true);
|
|
|
|
+ Item.JobRequisitionItem.CopyFrom(first.JRI);
|
|
|
|
+ Item.EditType = RequisitionItemEditType.Normal;
|
|
|
|
+ Item.Quantity = first.Quantity;
|
|
|
|
+
|
|
|
|
+ foreach (var item in items.Skip(1).ToArray())
|
|
|
|
+ {
|
|
|
|
+ var newItem = new RequisitionItem();
|
|
|
|
+ newItem.RequisitionLink.ID = Item.RequisitionLink.ID;
|
|
|
|
+ newItem.Done = false;
|
|
|
|
+ newItem.Description = item.JRI.Product.Name;
|
|
|
|
+ newItem.Product.CopyFrom(item.JRI.Product);
|
|
|
|
+ newItem.Style.CopyFrom(item.JRI.Style);
|
|
|
|
+ newItem.Dimensions.CopyFrom(item.JRI.Dimensions, true);
|
|
|
|
+ newItem.JobRequisitionItem.CopyFrom(item.JRI);
|
|
|
|
+ newItem.EditType = RequisitionItemEditType.Normal;
|
|
|
|
+ newItem.Quantity = item.Quantity;
|
|
|
|
+ result.Add(newItem);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Client.Save(result, "Edited by user.");
|
|
|
|
+
|
|
|
|
+ Result = result.ToArray();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void JobRequisitionItems_OnOnChanged(object? sender, EventArgs e)
|
|
|
|
+ {
|
|
|
|
+ CheckCanSave();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+
|
|
#region Product Instances
|
|
#region Product Instances
|
|
|
|
|
|
private ProductInstance? SelectedProductInstance;
|
|
private ProductInstance? SelectedProductInstance;
|
|
@@ -418,7 +574,8 @@ public partial class RequisitionItemEditor : INotifyPropertyChanged
|
|
Dispatcher.BeginInvoke(() =>
|
|
Dispatcher.BeginInvoke(() =>
|
|
{
|
|
{
|
|
ProductInstancesProducts.SelectedRows = ProductInstancesProducts.Data.Rows.Where(x => x.Get<Product, Guid>(x => x.ID) == Item.Product.ID).ToArray();
|
|
ProductInstancesProducts.SelectedRows = ProductInstancesProducts.Data.Rows.Where(x => x.Get<Product, Guid>(x => x.ID) == Item.Product.ID).ToArray();
|
|
- ProductInstancesProducts.ScrollIntoView(StockHoldingProducts.SelectedRows[0]);
|
|
|
|
|
|
+ if (ProductInstancesProducts.SelectedRows.Any())
|
|
|
|
+ ProductInstancesProducts.ScrollIntoView(ProductInstancesProducts.SelectedRows[0]);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|