|
@@ -16,6 +16,34 @@ using Result = ZXing.Result;
|
|
|
namespace PRS.Mobile
|
|
|
{
|
|
|
|
|
|
+ public class HoldingUnitCalculator : AbstractConverter<StockHoldingShell, double>
|
|
|
+ {
|
|
|
+
|
|
|
+ public RequisitionItemModel RequisitionItems { get; set; }
|
|
|
+
|
|
|
+ protected override double Convert(StockHoldingShell shell, object? parameter = null)
|
|
|
+ {
|
|
|
+ return Calculate(shell, RequisitionItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static double Calculate(StockHoldingShell holding, RequisitionItemModel? items)
|
|
|
+ {
|
|
|
+ var instock = holding.Units;
|
|
|
+ var picked = items?.Items.Where(x =>
|
|
|
+ x.LocationID == holding.LocationID
|
|
|
+ && x.ProductID == holding.ProductID
|
|
|
+ && x.StyleID == holding.StyleID
|
|
|
+ && x.JobID == holding.JobID
|
|
|
+ && x.DimensionsLength == holding.DimensionsLength
|
|
|
+ && x.DimensionsWidth == holding.DimensionsWidth
|
|
|
+ && x.DimensionsHeight == holding.DimensionsHeight
|
|
|
+ && x.DimensionsWeight == holding.DimensionsWeight
|
|
|
+ && holding.DimensionsQuantity == x.DimensionsQuantity)
|
|
|
+ .Sum(x => x.ActualQuantity) ?? 0.0;
|
|
|
+ return instock - picked;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public class QuickPickViewModel : BindableObject
|
|
|
{
|
|
|
public bool HasItems { get; set; }
|
|
@@ -38,6 +66,7 @@ namespace PRS.Mobile
|
|
|
public QuickPickModule()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
+ UnitCalculator.RequisitionItems = _viewModel.RequisitionItems;
|
|
|
var options = new ZXing.Mobile.MobileBarcodeScanningOptions()
|
|
|
{
|
|
|
PossibleFormats = new List<ZXing.BarcodeFormat>() { ZXing.BarcodeFormat.QR_CODE },
|
|
@@ -124,38 +153,43 @@ namespace PRS.Mobile
|
|
|
return;
|
|
|
ShowPopup(() =>
|
|
|
{
|
|
|
- var editor = new SelectFromHoldingView(holding, holding.Units);
|
|
|
+
|
|
|
+ var qty = HoldingUnitCalculator.Calculate(holding, _viewModel.RequisitionItems);
|
|
|
+ var editor = new SelectFromHoldingView(holding, qty, _viewModel.RequisitionItems);
|
|
|
editor.OnSave += (o, args) =>
|
|
|
{
|
|
|
- var requiItem = _viewModel.RequisitionItems.CreateItem();
|
|
|
- requiItem.LocationID = args.Holding.LocationID;
|
|
|
- requiItem.ProductID = args.Holding.ProductID;
|
|
|
- requiItem.ProductCode = args.Holding.ProductCode;
|
|
|
- requiItem.ProductName = args.Holding.ProductName;
|
|
|
- requiItem.StyleID = args.Holding.StyleID;
|
|
|
- requiItem.StyleCode = args.Holding.StyleCode;
|
|
|
- requiItem.StyleDescription = args.Holding.StyleDescription;
|
|
|
- requiItem.JobID = args.Holding.JobID;
|
|
|
- requiItem.DimensionsUnitID = args.Holding.DimensionsUnitID;
|
|
|
- requiItem.DimensionsHeight = args.Holding.DimensionsHeight;
|
|
|
- requiItem.DimensionsWidth = args.Holding.DimensionsWidth;
|
|
|
- requiItem.DimensionsLength = args.Holding.DimensionsLength;
|
|
|
- requiItem.DimensionsQuantity = args.Holding.DimensionsQuantity;
|
|
|
- requiItem.DimensionsWeight = args.Holding.DimensionsWeight;
|
|
|
- requiItem.DimensionsValue = args.Holding.DimensionsValue;
|
|
|
- requiItem.DimensionsUnitSize = args.Holding.DimensionsUnitSize;
|
|
|
- requiItem.ImageID = args.Holding.ImageID;
|
|
|
- if (args.Holding.Parent.Images.TryGetValue(args.Holding.ImageID, out var _image))
|
|
|
- _viewModel.RequisitionItems.Images[args.Holding.ImageID] = _image;
|
|
|
- requiItem.SourceJRI = args.JobRequisitionItemID;
|
|
|
- requiItem.TargetJRI = args.JobRequisitionItemID;
|
|
|
- requiItem.Quantity = args.Quantity;
|
|
|
- requiItem.ActualQuantity = args.Quantity;
|
|
|
- requiItem.Cost = args.Holding.AverageCost;
|
|
|
- requiItem.Done = true;
|
|
|
- _viewModel.RequisitionItems.CommitItem(requiItem);
|
|
|
- _viewModel.Holdings.Refresh(false);
|
|
|
- DismissPopup();
|
|
|
+ if (args.Quantity.IsEffectivelyGreaterThan(0.0))
|
|
|
+ {
|
|
|
+ var requiItem = _viewModel.RequisitionItems.CreateItem();
|
|
|
+ requiItem.LocationID = args.Holding.LocationID;
|
|
|
+ requiItem.ProductID = args.Holding.ProductID;
|
|
|
+ requiItem.ProductCode = args.Holding.ProductCode;
|
|
|
+ requiItem.ProductName = args.Holding.ProductName;
|
|
|
+ requiItem.StyleID = args.Holding.StyleID;
|
|
|
+ requiItem.StyleCode = args.Holding.StyleCode;
|
|
|
+ requiItem.StyleDescription = args.Holding.StyleDescription;
|
|
|
+ requiItem.JobID = args.Holding.JobID;
|
|
|
+ requiItem.DimensionsUnitID = args.Holding.DimensionsUnitID;
|
|
|
+ requiItem.DimensionsHeight = args.Holding.DimensionsHeight;
|
|
|
+ requiItem.DimensionsWidth = args.Holding.DimensionsWidth;
|
|
|
+ requiItem.DimensionsLength = args.Holding.DimensionsLength;
|
|
|
+ requiItem.DimensionsQuantity = args.Holding.DimensionsQuantity;
|
|
|
+ requiItem.DimensionsWeight = args.Holding.DimensionsWeight;
|
|
|
+ requiItem.DimensionsValue = args.Holding.DimensionsValue;
|
|
|
+ requiItem.DimensionsUnitSize = args.Holding.DimensionsUnitSize;
|
|
|
+ requiItem.ImageID = args.Holding.ImageID;
|
|
|
+ if (args.Holding.Parent.Images.TryGetValue(args.Holding.ImageID, out var _image))
|
|
|
+ _viewModel.RequisitionItems.Images[args.Holding.ImageID] = _image;
|
|
|
+ requiItem.SourceJRI = args.JobRequisitionItemID;
|
|
|
+ requiItem.TargetJRI = args.JobRequisitionItemID;
|
|
|
+ requiItem.Quantity = args.Quantity;
|
|
|
+ requiItem.ActualQuantity = args.Quantity;
|
|
|
+ requiItem.Cost = args.Holding.AverageCost;
|
|
|
+ requiItem.Done = true;
|
|
|
+ _viewModel.RequisitionItems.CommitItem(requiItem);
|
|
|
+ _viewModel.Holdings.Refresh(false);
|
|
|
+ DismissPopup();
|
|
|
+ }
|
|
|
};
|
|
|
editor.OnCancel += (o, args) => DismissPopup();
|
|
|
return editor;
|
|
@@ -236,6 +270,15 @@ namespace PRS.Mobile
|
|
|
Navigation.PopAsync();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ private async void DeleteRequisitionItem(object sender, MobileMenuButtonClickedEventArgs args)
|
|
|
+ {
|
|
|
+ var shell = ((sender as MobileMenuButton)?.BindingContext as RequisitionItemShell);
|
|
|
+ if (shell == null)
|
|
|
+ return;
|
|
|
+ if (await MaterialDialog.Instance.ConfirmAsync("Delete Picked Item?", "Confirm") == true)
|
|
|
+ {
|
|
|
+ _viewModel.RequisitionItems.DeleteItem(shell);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|