|
|
@@ -6,15 +6,14 @@ using System.Threading.Tasks;
|
|
|
using Xamarin.Essentials;
|
|
|
using Xamarin.Forms;
|
|
|
using Xamarin.Forms.Xaml;
|
|
|
-using comal.timesheets.CustomControls;
|
|
|
using Comal.Classes;
|
|
|
using InABox.Core;
|
|
|
using InABox.Clients;
|
|
|
using System.Threading;
|
|
|
using static comal.timesheets.RequiItems;
|
|
|
using XF.Material.Forms.UI.Dialogs;
|
|
|
-using Plugin.SimpleAudioPlayer;
|
|
|
using comal.timesheets.StoreRequis;
|
|
|
+using ZXing.PDF417.Internal;
|
|
|
|
|
|
namespace comal.timesheets
|
|
|
{
|
|
|
@@ -22,7 +21,7 @@ namespace comal.timesheets
|
|
|
public partial class StoreRequiScannerPage : ContentPage
|
|
|
{
|
|
|
#region Fields / Constructor
|
|
|
- public delegate bool OnScanEvent(object sender, String barcode);
|
|
|
+ public delegate bool OnScanEvent(object sender, string barcode);
|
|
|
public event OnScanEvent OnScan;
|
|
|
List<StoreRequiItemShell> shells = new List<StoreRequiItemShell>();
|
|
|
List<StoreRequiItemShell> oldShells = new List<StoreRequiItemShell>();
|
|
|
@@ -133,38 +132,31 @@ namespace comal.timesheets
|
|
|
(
|
|
|
new Filter<RequisitionItem>(x => x.RequisitionLink.ID).IsEqualTo(requisition.ID),
|
|
|
new Columns<RequisitionItem>(
|
|
|
- x => x.ID, //0
|
|
|
- x => x.Product.ID, //1
|
|
|
- x => x.Product.Name, //2
|
|
|
- x => x.Product.Code, //3
|
|
|
- x => x.Quantity, //4
|
|
|
- x => x.Location.ID, //5
|
|
|
- x => x.Location.Description //6
|
|
|
+ x => x.ID,
|
|
|
+ x => x.Product.ID,
|
|
|
+ x => x.Product.Name,
|
|
|
+ x => x.Product.Code,
|
|
|
+ x => x.Quantity,
|
|
|
+ x => x.Location.ID,
|
|
|
+ x => x.Location.Description,
|
|
|
+ x => x.Picked
|
|
|
)
|
|
|
);
|
|
|
if (table.Rows.Any())
|
|
|
{
|
|
|
- Device.BeginInvokeOnMainThread(() =>{ saveBtn.IsVisible = true; });
|
|
|
- foreach (CoreRow row in table.Rows)
|
|
|
+ Device.BeginInvokeOnMainThread(() => { saveBtn.IsVisible = true; });
|
|
|
+ foreach (CoreRow row in table.Rows)
|
|
|
{
|
|
|
- List<object> list = row.Values;
|
|
|
- if (list[0] == null) { list[0] = Guid.Empty; }
|
|
|
- if (list[1] == null) { list[1] = Guid.Empty; }
|
|
|
- if (list[2] == null) { list[2] = ""; }
|
|
|
- if (list[3] == null) { list[3] = ""; }
|
|
|
- if (list[4] == null) { list[4] = 0.0; }
|
|
|
- if (list[5] == null) { list[5] = Guid.Empty; }
|
|
|
- if (list[6] == null) { list[6] = ""; }
|
|
|
-
|
|
|
StoreRequiItemShell shell = new StoreRequiItemShell()
|
|
|
{
|
|
|
- ID = Guid.Parse(list[0].ToString()),
|
|
|
- ProductID = Guid.Parse(list[1].ToString()),
|
|
|
- ProductName = list[2].ToString(),
|
|
|
- ProductCode = list[3].ToString(),
|
|
|
- Quantity = double.Parse(list[4].ToString()),
|
|
|
- HoldingID = Guid.Parse(list[5].ToString()),
|
|
|
- LocationName = list[6].ToString(),
|
|
|
+ ID = row.Get<RequisitionItem, Guid>(x => x.ID),
|
|
|
+ ProductID = row.Get<RequisitionItem, Guid>(x => x.Product.ID),
|
|
|
+ ProductName = row.Get<RequisitionItem, string>(x => x.Product.Name),
|
|
|
+ ProductCode = row.Get<RequisitionItem, string>(x => x.Product.Code),
|
|
|
+ Quantity = row.Get<RequisitionItem, double>(x => x.Quantity),
|
|
|
+ LocationID = row.Get<RequisitionItem, Guid>(x => x.Location.ID),
|
|
|
+ LocationName = row.Get<RequisitionItem, string>(x => x.Location.Description),
|
|
|
+ Picked = row.Get<RequisitionItem, DateTime>(x => x.Picked),
|
|
|
};
|
|
|
shells.Add(shell);
|
|
|
oldShells.Add(shell);
|
|
|
@@ -289,7 +281,7 @@ namespace comal.timesheets
|
|
|
return tuple;
|
|
|
}
|
|
|
|
|
|
- private async void LoadProduct(Tuple<string, double> processedResultQtyTuple, string rawResult)
|
|
|
+ private void LoadProduct(Tuple<string, double> processedResultQtyTuple, string rawResult)
|
|
|
{
|
|
|
Device.BeginInvokeOnMainThread(async () =>
|
|
|
{
|
|
|
@@ -297,38 +289,28 @@ namespace comal.timesheets
|
|
|
ProductShell product = GlobalVariables.ProductShells.Find(x => x.Code.Equals(processedResultQtyTuple.Item1));
|
|
|
|
|
|
string itemLocation = "";
|
|
|
- Guid holdingID = Guid.Empty;
|
|
|
+ Guid locationID = Guid.Empty;
|
|
|
|
|
|
//lookup holding for product in holdings cache
|
|
|
try
|
|
|
{
|
|
|
List<HoldingsCacheShell> list = holdingsCache.Where(x => x.ProductID.Equals(product.ID)).ToList();
|
|
|
- if (list.Count == 1) //one stockholding - auto choose shelf
|
|
|
- {
|
|
|
- HoldingsCacheShell holding = list.First();
|
|
|
- itemLocation = holding.LocationName;
|
|
|
- holdingID = holding.ID;
|
|
|
- }
|
|
|
- else if (list.Count > 1) //more than one stockholding - choose shelf
|
|
|
+ if (list.Count == 1) //one stockholding - auto choose holding
|
|
|
+ AddShell(list.First(), product, rawResult, processedResultQtyTuple);
|
|
|
+
|
|
|
+ else if (list.Count > 1) //more than one stockholding - user choose shelf
|
|
|
{
|
|
|
- loading = true;
|
|
|
- Dictionary<string, Guid> holdingIDLocations = new Dictionary<string, Guid>();
|
|
|
+ Dictionary<string, Guid> holdingLocationIDs = new Dictionary<string, Guid>();
|
|
|
foreach (HoldingsCacheShell holding in list)
|
|
|
{
|
|
|
- if (!holdingIDLocations.ContainsKey(holding.LocationName + " (Units: " + holding.Units + ")"))
|
|
|
- {
|
|
|
- holdingIDLocations.Add(holding.LocationName + " (Units: " + holding.Units + ")" +
|
|
|
- Environment.NewLine + "Style: " + holding.StyleDescription
|
|
|
- + Environment.NewLine + "Job: " + holding.JobNumber
|
|
|
- + Environment.NewLine + "Size: " + holding.DimensionsUnitSize, holding.ID);
|
|
|
- }
|
|
|
+ if (!holdingLocationIDs.ContainsKey(holding.LocationName))
|
|
|
+ holdingLocationIDs.Add(holding.LocationName, holding.LocationID);
|
|
|
}
|
|
|
- List<string> options = holdingIDLocations.Keys.ToList();
|
|
|
+ List<string> options = holdingLocationIDs.Keys.ToList();
|
|
|
ListSelectionPage page = new ListSelectionPage(options);
|
|
|
- page.OnSimpleListTapped += (s) =>
|
|
|
+ page.OnSimpleListTapped += (locationName) =>
|
|
|
{
|
|
|
- itemLocation = s;
|
|
|
- holdingID = holdingIDLocations[s];
|
|
|
+ AddShell(list.Find(x => x.LocationName == locationName),product, rawResult, processedResultQtyTuple);
|
|
|
};
|
|
|
Navigation.PushAsync(page);
|
|
|
}
|
|
|
@@ -338,6 +320,7 @@ namespace comal.timesheets
|
|
|
loading = false;
|
|
|
return;
|
|
|
}
|
|
|
+ loading = false;
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
@@ -345,38 +328,61 @@ namespace comal.timesheets
|
|
|
loading = false;
|
|
|
return;
|
|
|
}
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- StoreRequiItemShell shell = new StoreRequiItemShell
|
|
|
- {
|
|
|
- ProductID = product.ID,
|
|
|
- ProductName = product.Name,
|
|
|
- ProductCode = product.Code,
|
|
|
- Quantity = 1,
|
|
|
- HoldingID = holdingID,
|
|
|
- LocationName = itemLocation,
|
|
|
- };
|
|
|
- shells.Add(shell);
|
|
|
+ private void AddShell(HoldingsCacheShell holding, ProductShell product, string rawResult, Tuple<string, double> processedResultQtyTuple)
|
|
|
+ {
|
|
|
+ StoreRequiItemShell shell = new StoreRequiItemShell
|
|
|
+ {
|
|
|
+ ProductID = product.ID,
|
|
|
+ ProductName = product.Name,
|
|
|
+ ProductCode = product.Code,
|
|
|
+ Quantity = 1,
|
|
|
+ LocationID = holding.LocationID,
|
|
|
+ LocationName = holding.LocationName,
|
|
|
+ StyleID = holding.StyleID,
|
|
|
+ JobID = holding.StyleID
|
|
|
+ };
|
|
|
+ shell.Dimensions.Unit.ID = holding.Dimensions.Unit.ID;
|
|
|
+ shell.Dimensions.Unit.HasQuantity = holding.Dimensions.Unit.HasQuantity;
|
|
|
+ shell.Dimensions.Unit.HasLength = holding.Dimensions.Unit.HasLength;
|
|
|
+ shell.Dimensions.Unit.HasHeight = holding.Dimensions.Unit.HasHeight;
|
|
|
+ shell.Dimensions.Unit.HasWeight = holding.Dimensions.Unit.HasWeight;
|
|
|
+ shell.Dimensions.Unit.HasWidth = holding.Dimensions.Unit.HasWidth;
|
|
|
|
|
|
- itemRowScannerRawResultPairs.Add(shell, rawResult);
|
|
|
- itemRowScannerProcessedResultPairs.Add(shell, processedResultQtyTuple.Item1);
|
|
|
+ shell.Dimensions.Quantity = holding.Dimensions.Quantity;
|
|
|
+ shell.Dimensions.Length = holding.Dimensions.Length;
|
|
|
+ shell.Dimensions.Height = holding.Dimensions.Height;
|
|
|
+ shell.Dimensions.Weight = holding.Dimensions.Weight;
|
|
|
+ shell.Dimensions.Width = holding.Dimensions.Width;
|
|
|
|
|
|
- requiItemListView.ItemsSource = null;
|
|
|
- requiItemListView.ItemsSource = shells;
|
|
|
+ shell.Dimensions.Unit.Format = holding.Dimensions.Unit.Format;
|
|
|
+ shell.Dimensions.Unit.Formula = holding.Dimensions.Unit.Formula;
|
|
|
|
|
|
- countLbl.IsVisible = true;
|
|
|
+ shell.Dimensions.UnitSize = holding.Dimensions.UnitSize;
|
|
|
|
|
|
- if (containsNotes)
|
|
|
- {
|
|
|
- countLbl.Text = "Number of items: " + (shells.Count - 1);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- countLbl.Text = "Number of items: " + shells.Count;
|
|
|
- }
|
|
|
+ shells.Add(shell);
|
|
|
|
|
|
- saveBtn.IsVisible = true;
|
|
|
- loading = false;
|
|
|
- });
|
|
|
+ itemRowScannerRawResultPairs.Add(shell, rawResult);
|
|
|
+ itemRowScannerProcessedResultPairs.Add(shell, processedResultQtyTuple.Item1);
|
|
|
+
|
|
|
+ requiItemListView.ItemsSource = null;
|
|
|
+ requiItemListView.ItemsSource = shells;
|
|
|
+
|
|
|
+ countLbl.IsVisible = true;
|
|
|
+
|
|
|
+ if (containsNotes)
|
|
|
+ {
|
|
|
+ countLbl.Text = "Number of items: " + (shells.Count - 1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ countLbl.Text = "Number of items: " + shells.Count;
|
|
|
+ }
|
|
|
+
|
|
|
+ saveBtn.IsVisible = true;
|
|
|
+ loading = false;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
@@ -420,7 +426,7 @@ namespace comal.timesheets
|
|
|
default:
|
|
|
return;
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
Navigation.PopAsync();
|
|
|
@@ -434,6 +440,32 @@ namespace comal.timesheets
|
|
|
Navigation.PushAsync(page);
|
|
|
}
|
|
|
|
|
|
+ private async void RequiItem_Tapped(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ var shell = requiItemListView.SelectedItem as StoreRequiItemShell;
|
|
|
+ if (shell == null) return;
|
|
|
+
|
|
|
+ await RequiItemTappedAsync(shell);
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task RequiItemTappedAsync(StoreRequiItemShell shell)
|
|
|
+ {
|
|
|
+ string pickstatus = shell.Picked == DateTime.MinValue ? "not picked" : "picked (" + shell.Picked.ToString("dd MMM yy") + ")";
|
|
|
+ string options = shell.Picked == DateTime.MinValue ? ". Mark as Picked?" : ". Remove Picked status?";
|
|
|
+
|
|
|
+ string chosenOption = await DisplayActionSheet("Line is " + pickstatus + options, "Cancel", null, "Yes", "No");
|
|
|
+
|
|
|
+ if (chosenOption != "Yes")
|
|
|
+ return;
|
|
|
+
|
|
|
+ shell.Picked = shell.Picked == DateTime.MinValue ? DateTime.Today : DateTime.MinValue;
|
|
|
+ shell.Colour = shell.Picked == DateTime.MinValue ? Color.Default : Color.FromHex("#8fbc8f");
|
|
|
+
|
|
|
+ requiItemListView.ItemsSource = null;
|
|
|
+ requiItemListView.ItemsSource = shells;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
void ReduceQtyBtn_Clicked(object sender, EventArgs e)
|
|
|
{
|
|
|
var shell = ((TappedEventArgs)e).Parameter as StoreRequiItemShell;
|
|
|
@@ -472,7 +504,8 @@ namespace comal.timesheets
|
|
|
void IncreaseQtyBtn_Clicked(object sender, EventArgs e)
|
|
|
{
|
|
|
var shell = ((TappedEventArgs)e).Parameter as StoreRequiItemShell;
|
|
|
- if (shell == null) return;
|
|
|
+ if (shell == null)
|
|
|
+ return;
|
|
|
|
|
|
shell.Quantity++;
|
|
|
requiItemListView.ItemsSource = null;
|
|
|
@@ -504,19 +537,24 @@ namespace comal.timesheets
|
|
|
#endregion
|
|
|
}
|
|
|
|
|
|
- public class StoreRequiItemShell
|
|
|
+ [DoNotPersist]
|
|
|
+ public class StoreRequiItemShell : Entity
|
|
|
{
|
|
|
- public Guid ID { get; set; }
|
|
|
public Guid ProductID { get; set; }
|
|
|
public string ProductCode { get; set; }
|
|
|
public string ProductName { get; set; }
|
|
|
public string LocationName { get; set; }
|
|
|
public double Quantity { get; set; }
|
|
|
- public Guid HoldingID { get; set; }
|
|
|
+ public Guid LocationID { get; set; }
|
|
|
public Color BorderColor { get; set; }
|
|
|
public bool IsNotes { get; set; }
|
|
|
public bool IsNotNotes { get; set; }
|
|
|
public string Summary { get; set; }
|
|
|
+ public DateTime Picked { get; set; }
|
|
|
+ public Color Colour { get; set; }
|
|
|
+ public Guid JobID { get; set; }
|
|
|
+ public Guid StyleID { get; set; }
|
|
|
+ public StockDimensions Dimensions { get; set; }
|
|
|
public StoreRequiItemShell()
|
|
|
{
|
|
|
ProductID = Guid.Empty;
|
|
|
@@ -525,10 +563,15 @@ namespace comal.timesheets
|
|
|
LocationName = "";
|
|
|
Quantity = 0;
|
|
|
ID = Guid.Empty;
|
|
|
- HoldingID = Guid.Empty;
|
|
|
+ LocationID = Guid.Empty;
|
|
|
BorderColor = Color.FromHex("#15C7C1");
|
|
|
IsNotes = false;
|
|
|
IsNotNotes = true;
|
|
|
+ Picked = DateTime.MinValue;
|
|
|
+ Colour = Color.Default;
|
|
|
+ JobID = Guid.Empty;
|
|
|
+ StyleID = Guid.Empty;
|
|
|
+ Dimensions = new StockDimensions(() => this);
|
|
|
}
|
|
|
}
|
|
|
}
|