|
@@ -117,15 +117,10 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
|
|
|
.Add(x => x.Product.ID)
|
|
|
.Add(x => x.Job.ID)
|
|
|
.Add(x => x.Style.ID)
|
|
|
- .Add(x => x.Dimensions.Unit.ID)
|
|
|
- .Add(x => x.Dimensions.Length)
|
|
|
- .Add(x => x.Dimensions.Width)
|
|
|
- .Add(x => x.Dimensions.Height)
|
|
|
- .Add(x => x.Dimensions.Quantity)
|
|
|
- .Add(x => x.Dimensions.Value)
|
|
|
- .Add(x => x.Dimensions.UnitSize)
|
|
|
+ .AddDimensionsColumns(x => x.Dimensions, Dimensions.ColumnsType.Local)
|
|
|
.Add(x => x.Units)
|
|
|
.Add(x => x.AverageValue)
|
|
|
+ .Add(x => x.Available)
|
|
|
);
|
|
|
|
|
|
query.Add(
|
|
@@ -134,18 +129,14 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
|
|
|
.Add(x => x.Product.ID)
|
|
|
.Add(x => x.Job.ID)
|
|
|
.Add(x => x.Style.ID)
|
|
|
- .Add(x => x.Dimensions.Unit.ID)
|
|
|
- .Add(x => x.Dimensions.Length)
|
|
|
- .Add(x => x.Dimensions.Width)
|
|
|
- .Add(x => x.Dimensions.Height)
|
|
|
- .Add(x => x.Dimensions.Quantity)
|
|
|
- .Add(x => x.Dimensions.Value)
|
|
|
- .Add(x => x.Dimensions.UnitSize)
|
|
|
+ .AddDimensionsColumns(x => x.Dimensions, Dimensions.ColumnsType.Local)
|
|
|
.Add(x => x.Units)
|
|
|
.Add(x => x.Cost)
|
|
|
+ .Add(x => x.JobRequisitionItem.ID)
|
|
|
);
|
|
|
query.Query();
|
|
|
var holdings = query.Get<StockHolding>().ToObjects<StockHolding>().ToList();
|
|
|
+ var toDelete = new List<StockHolding>();
|
|
|
var movements = query.Get<StockMovement>().ToObjects<StockMovement>().ToList();
|
|
|
|
|
|
progress.Report("Processing");
|
|
@@ -154,35 +145,9 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
|
|
|
while (movements.Any())
|
|
|
{
|
|
|
var first = movements.First();
|
|
|
- var selected = movements.Where(x =>
|
|
|
- x.Product.ID == first.Product.ID
|
|
|
- && x.Job.ID == first.Job.ID
|
|
|
- && x.Style.ID == first.Style.ID
|
|
|
- && x.Dimensions.Unit.ID == first.Dimensions.Unit.ID
|
|
|
- && x.Dimensions.Length.IsEffectivelyEqual(first.Dimensions.Length)
|
|
|
- && x.Dimensions.Width.IsEffectivelyEqual(first.Dimensions.Width)
|
|
|
- && x.Dimensions.Height.IsEffectivelyEqual(first.Dimensions.Height)
|
|
|
- && x.Dimensions.Quantity.IsEffectivelyEqual(first.Dimensions.Quantity)
|
|
|
- && x.Dimensions.Weight.IsEffectivelyEqual(first.Dimensions.Weight)
|
|
|
- && x.Dimensions.Value.IsEffectivelyEqual(first.Dimensions.Value)
|
|
|
- && String.Equals(x.Dimensions.UnitSize, first.Dimensions.UnitSize)
|
|
|
- );
|
|
|
- var units = selected.Aggregate(0.0d, (t, s) => t += s.Units);
|
|
|
- var cost = selected.Aggregate(0.0d, (t, s) => t += (s.Units * s.Cost));
|
|
|
-
|
|
|
- var holding = holdings.FirstOrDefault(x =>
|
|
|
- x.Product.ID == first.Product.ID
|
|
|
- && x.Job.ID == first.Job.ID
|
|
|
- && x.Style.ID == first.Style.ID
|
|
|
- && x.Dimensions.Unit.ID == first.Dimensions.Unit.ID
|
|
|
- && x.Dimensions.Length.IsEffectivelyEqual(first.Dimensions.Length)
|
|
|
- && x.Dimensions.Width.IsEffectivelyEqual(first.Dimensions.Width)
|
|
|
- && x.Dimensions.Height.IsEffectivelyEqual(first.Dimensions.Height)
|
|
|
- && x.Dimensions.Quantity.IsEffectivelyEqual(first.Dimensions.Quantity)
|
|
|
- && x.Dimensions.Weight.IsEffectivelyEqual(first.Dimensions.Weight)
|
|
|
- && x.Dimensions.Length.IsEffectivelyEqual(first.Dimensions.Length)
|
|
|
- && String.Equals(x.Dimensions.UnitSize, first.Dimensions.UnitSize)
|
|
|
- );
|
|
|
+ var selected = movements.Where(x => x.IsEqualTo(first)).ToList();
|
|
|
+
|
|
|
+ var holding = holdings.FirstOrDefault(x => x.IsEqualTo(first));
|
|
|
if (holding == null)
|
|
|
{
|
|
|
holding = new StockHolding();
|
|
@@ -190,22 +155,22 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
|
|
|
holding.Product.ID = first.Product.ID;
|
|
|
holding.Style.ID = first.Style.ID;
|
|
|
holding.Job.ID = first.Job.ID;
|
|
|
- holding.Dimensions.Unit.ID = first.Dimensions.Unit.ID;
|
|
|
- holding.Dimensions.Length = first.Dimensions.Length;
|
|
|
- holding.Dimensions.Width = first.Dimensions.Width;
|
|
|
- holding.Dimensions.Height = first.Dimensions.Height;
|
|
|
- holding.Dimensions.Quantity = first.Dimensions.Quantity;
|
|
|
- holding.Dimensions.Weight = first.Dimensions.Weight;
|
|
|
- holding.Dimensions.Value = first.Dimensions.Value;
|
|
|
- holding.Dimensions.UnitSize = first.Dimensions.UnitSize;
|
|
|
+ holding.Dimensions.CopyFrom(first.Dimensions);
|
|
|
}
|
|
|
- holding.Units = units;
|
|
|
- holding.AverageValue = units.IsEffectivelyEqual(0.0F) ? 0.0d : cost / units;
|
|
|
+ holding.Recalculate(selected);
|
|
|
|
|
|
+ // Removing from the list so that it is not deleted.
|
|
|
if (holdings.Contains(holding))
|
|
|
holdings.Remove(holding);
|
|
|
|
|
|
- if (holding.IsChanged() && !holding.Units.IsEffectivelyEqual(0.0f))
|
|
|
+ if (holding.Units.IsEffectivelyEqual(0.0f))
|
|
|
+ {
|
|
|
+ if(holding.ID != Guid.Empty)
|
|
|
+ {
|
|
|
+ toDelete.Add(holding);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (holding.IsChanged())
|
|
|
{
|
|
|
AddMessage(holding.ID != Guid.Empty ? "updated" : "added");
|
|
|
updates.Add(holding);
|
|
@@ -213,7 +178,9 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
|
|
|
|
|
|
movements.RemoveAll(x => selected.Any(s => s.ID == x.ID));
|
|
|
}
|
|
|
- foreach (var holding in holdings)
|
|
|
+
|
|
|
+ toDelete.AddRange(holdings);
|
|
|
+ foreach (var holding in toDelete)
|
|
|
AddMessage("deleted");
|
|
|
|
|
|
if (updates.Any())
|
|
@@ -222,10 +189,10 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
|
|
|
new Client<StockHolding>().Save(updates.Where(x => x.IsChanged()), "Updated by Recalculation");
|
|
|
}
|
|
|
|
|
|
- if (holdings.Any())
|
|
|
+ if (toDelete.Any())
|
|
|
{
|
|
|
- progress.Report($"Deleting {holdings.Count} Holdings");
|
|
|
- new Client<StockHolding>().Delete(holdings, "Removed by Recalculation");
|
|
|
+ progress.Report($"Deleting {toDelete.Count} Holdings");
|
|
|
+ new Client<StockHolding>().Delete(toDelete, "Removed by Recalculation");
|
|
|
}
|
|
|
|
|
|
});
|