|
|
@@ -4,8 +4,11 @@ using System.Windows;
|
|
|
using Comal.Classes;
|
|
|
using InABox.Clients;
|
|
|
using InABox.Configuration;
|
|
|
+using InABox.Core;
|
|
|
using InABox.DynamicGrid;
|
|
|
+using InABox.Wpf;
|
|
|
using InABox.WPF;
|
|
|
+using NPOI.Util;
|
|
|
|
|
|
namespace PRSDesktop;
|
|
|
|
|
|
@@ -34,6 +37,14 @@ public partial class ReservationManagementSubstitutionWindow : Window
|
|
|
var _holding = substitutions.SelectedRows?.FirstOrDefault()?.ToObject<StockHolding>();
|
|
|
if (_holding == null || substitutions.JRI == null)
|
|
|
return;
|
|
|
+
|
|
|
+ Substitute(_holding, Guid.NewGuid());
|
|
|
+
|
|
|
+ DialogResult = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Substitute(StockHolding _holding, Guid transaction)
|
|
|
+ {
|
|
|
Progress.ShowModal("Substitution Item", progress =>
|
|
|
{
|
|
|
substitutions.JRI.Dimensions.CopyFrom(_holding.Dimensions, true);
|
|
|
@@ -44,7 +55,7 @@ public partial class ReservationManagementSubstitutionWindow : Window
|
|
|
var _xferout = _holding.CreateMovement();
|
|
|
_xferout.Issued = Math.Min(_holding.Available, substitutions.JRI.Qty);
|
|
|
_xferout.Notes = "Substituted by Requisition Management Screen";
|
|
|
- _xferout.Transaction = Guid.NewGuid();
|
|
|
+ _xferout.Transaction = transaction;
|
|
|
_xferout.Type = StockMovementType.TransferOut;
|
|
|
_xferout.Employee.ID = App.EmployeeID;
|
|
|
_xferout.Cost = _holding.AverageValue;
|
|
|
@@ -54,15 +65,13 @@ public partial class ReservationManagementSubstitutionWindow : Window
|
|
|
_xferin.Job.CopyFrom(substitutions.JRI.Job);
|
|
|
_xferin.Received = Math.Min(_holding.Available, substitutions.JRI.Qty);
|
|
|
_xferin.Notes = "Substituted by Requisition Management Screen";
|
|
|
- _xferin.Transaction = _xferout.Transaction;
|
|
|
+ _xferin.Transaction = transaction;
|
|
|
_xferin.Type = StockMovementType.TransferIn;
|
|
|
_xferin.Employee.ID = App.EmployeeID;
|
|
|
_xferin.Cost = _holding.AverageValue;
|
|
|
|
|
|
Client.Save(new[] { _xferout, _xferin}, "Substituted by Requisition Management Screen");
|
|
|
});
|
|
|
-
|
|
|
- DialogResult = true;
|
|
|
}
|
|
|
|
|
|
private void Cancel_Click(object sender, RoutedEventArgs e)
|
|
|
@@ -89,4 +98,81 @@ public partial class ReservationManagementSubstitutionWindow : Window
|
|
|
new UserConfiguration<ReservationManagementUserSettings>().Save(settings);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private void Add_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ if (substitutions?.JRI == null)
|
|
|
+ {
|
|
|
+ MessageWindow.ShowMessage("No JRI Set!","Error");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var movement = new StockMovement();
|
|
|
+ movement.Date = DateTime.Now;
|
|
|
+ movement.Product.CopyFrom(substitutions.JRI.Product);
|
|
|
+ movement.Style.CopyFrom(substitutions.JRI.Style);
|
|
|
+ movement.Dimensions.CopyFrom(substitutions.JRI.Dimensions);
|
|
|
+ movement.Received = substitutions.JRI.Qty;
|
|
|
+ movement.Employee.ID = App.EmployeeID;
|
|
|
+ movement.Cost = 0.0;
|
|
|
+ movement.Type = StockMovementType.StockTake;
|
|
|
+ movement.Notes = "Ad Hoc holding created by Requisition Management Substitution Screen";
|
|
|
+ movement.Transaction = Guid.NewGuid();
|
|
|
+ movement.System = true;
|
|
|
+ var grid = new StockMovementGrid();
|
|
|
+ grid.OnCustomiseEditor += (form, items, column, editor) =>
|
|
|
+ {
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.Product.ID,".")))
|
|
|
+ editor.Editable = Editable.Disabled;
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.JobRequisitionItem.ID,".")))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.JobScope.ID,".")))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.Job.ID,".")))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,StockMovementType>(x=>x.Type,".")))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,double>(x=>x.Received,".")))
|
|
|
+ editor.Caption = "On Hand Qty";
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,double>(x=>x.Issued,".")))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+ if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,double>(x=>x.Balance,".")))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+ if (column.ColumnName.StartsWith( CoreUtils.GetFullPropertyName<StockMovement,ActualCharge>(x=>x.Charge,".")+"."))
|
|
|
+ editor.Editable = Editable.Hidden;
|
|
|
+
|
|
|
+ };
|
|
|
+ grid.OnValidate += (dynamicGrid, items, errors) =>
|
|
|
+ {
|
|
|
+ if (movement.Location.ID == Guid.Empty)
|
|
|
+ errors.Add("Location may not be empty!");
|
|
|
+ };
|
|
|
+ if (grid.EditItems([movement]))
|
|
|
+ {
|
|
|
+
|
|
|
+ var holding = new Client<StockHolding>().Query(
|
|
|
+ new Filter<StockHolding>(x => x.Location.ID).IsEqualTo(movement.Location.ID)
|
|
|
+ .And(x => x.Product.ID).IsEqualTo(movement.Product.ID)
|
|
|
+ .And(x => x.Style.ID).IsEqualTo(movement.Style.ID)
|
|
|
+ .And(x => x.Dimensions).DimensionEquals(movement.Dimensions)
|
|
|
+ .And(x=>x.Job.ID).IsEqualTo(movement.Job.ID),
|
|
|
+ Columns.Required<StockHolding>()
|
|
|
+ .Add(x=>x.Product.ID)
|
|
|
+ .Add(x=>x.Location.ID)
|
|
|
+ .Add(x=>x.Style.ID)
|
|
|
+ .AddDimensionsColumns(x=>x.Dimensions)
|
|
|
+ .Add(x=>x.Available)
|
|
|
+ .Add(x=>x.AverageValue)
|
|
|
+ ).Rows.FirstOrDefault()?.ToObject<StockHolding>();
|
|
|
+ if (holding != null)
|
|
|
+ {
|
|
|
+ Substitute(holding, movement.Transaction);
|
|
|
+ DialogResult = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageWindow.ShowMessage("Unable to locate new holding!", "Error");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|