private void TestAsta(int daysElapsed, double originalAsta, int expectedAsta) { var result = AstaCalculator.CalculateAsta(originalAsta, startingDate, startingDate, startingDate.AddDays(daysElapsed)); if (result != expectedAsta) { Assert.Fail("Expected '{0}' but received '{1}' on originalAsta of '{2}' after '{3}' daysElapsed.", expectedAsta, result, originalAsta, daysElapsed); } }
private IEnumerable<tblBatchItem> CreateBatchItems(ProductionBatch batch, IDictionary<int, tblBOM> daBOMs) { var lotNumber = LotNumberParser.BuildLotNumber(batch); foreach(var pickedItem in batch.Production.PickedInventory.Items) { var availableQuantity = pickedItem.Quantity; var inventory = _unitOfWork.InventoryRepository.FindByKey(new InventoryKey(pickedItem)); if(inventory != null) { availableQuantity += inventory.Quantity; } var weight = pickedItem.PackagingProduct.Weight; var avaiableWeight = availableQuantity * weight; int? astaCalc = null; var asta = pickedItem.Lot.Attributes.FirstOrDefault(a => a.AttributeShortName == StaticAttributeNames.Asta.ShortName); if(asta != null) { var productionDate = asta.AttributeDate; if(batch.Production.Results != null) { productionDate = batch.Production.Results.ProductionEnd; } astaCalc = AstaCalculator.CalculateAsta(asta.AttributeValue, asta.AttributeDate, productionDate, DateTime.UtcNow); } yield return new tblBatchItem { EntryDate = pickedItem.PickedInventory.TimeStamp.ConvertUTCToLocal(), Lot = LotNumberParser.BuildLotNumber(pickedItem), TTypeID = (int?)TransType.Batching, PkgID = int.Parse(pickedItem.Lot.LotTypeEnum == LotTypeEnum.Packaging ? pickedItem.Lot.PackagingLot.PackagingProduct.Product.ProductCode : pickedItem.PackagingProduct.Product.ProductCode), Tote = pickedItem.ToteKey, Quantity = pickedItem.Quantity, NetWgt = (decimal?)weight, TtlWgt = (decimal?)(pickedItem.Quantity * weight), LocID = pickedItem.FromLocation.LocID.Value, TrtmtID = pickedItem.TreatmentId, EmployeeID = pickedItem.PickedInventory.EmployeeId, NewLot = lotNumber, BatchLot = lotNumber, AstaCalc = astaCalc, AvgAsta = asta == null ? null : (decimal?)asta.AttributeValue, //ODetail = PackSchID = batch.PackSchedule.PackSchID, AQ = availableQuantity, AW = (decimal?)avaiableWeight, LoBac = batch.Production.ResultingChileLot.AllAttributesAreLoBac, tblBOM = GetDaBOM(daBOMs, pickedItem) }; } }
public void CalculateAsta_value_is_as_expected_when_value_would_have_been_entered_several_days_after_production() { var productionDate = new DateTime(2012, 3, 29); const int testedAsta = 73; var testedDate = productionDate.AddDays(1000); const int expectedCurrentAsta = 10; var currentDate = productionDate.AddDays(5000); Assert.AreEqual(expectedCurrentAsta, AstaCalculator.CalculateAsta(testedAsta, testedDate, productionDate, currentDate)); }
public void Returns_PickedInventoryItems_with_AstaCalc_properties_as_expected_on_success() { //Arrange StartStopwatch(); const double originalAsta = 120.0; var now = DateTime.UtcNow; var productionEnd = now.AddDays(-200); var expectedAstaCalc = AstaCalculator.CalculateAsta(originalAsta, productionEnd, productionEnd, now); var asta = StaticAttributeNames.Asta; var lot = TestHelper.CreateObjectGraphAndInsertIntoDatabase <Lot>(l => l.EmptyLot()); var chileLot = TestHelper.CreateObjectGraphAndInsertIntoDatabase <ChileLot>(c => c.Lot.EmptyLot()); var astaChileLot = TestHelper.CreateObjectGraphAndInsertIntoDatabase <ChileLot>(c => c.Lot.EmptyLot(), c => c.Production.Results.EmptyItems().ProductionEnd = productionEnd); TestHelper.CreateObjectGraphAndInsertIntoDatabase <LotAttribute>(a => a.SetValues(astaChileLot, asta, originalAsta).AttributeDate = productionEnd); var parentRecord = CreateParentRecord(); var pickedInventory = GetPickedInventoryRecordFromParent(parentRecord); var picked0 = TestHelper.CreateObjectGraphAndInsertIntoDatabase <PickedInventoryItem>(i => i.ConstrainByKeys(pickedInventory, lot)); var picked1 = TestHelper.CreateObjectGraphAndInsertIntoDatabase <PickedInventoryItem>(i => i.ConstrainByKeys(pickedInventory, chileLot)); var picked2 = TestHelper.CreateObjectGraphAndInsertIntoDatabase <PickedInventoryItem>(i => i.ConstrainByKeys(pickedInventory, astaChileLot)); TestHelper.ResetContext(); StopWatchAndWriteTime("Arrange"); //Act var result = TimedExecution(() => MethodUnderTest(parentRecord)); //Assert result.AssertSuccess(); var items = GetPickedInventoryItemsFromResult(result.ResultingObject); var pickedKey0 = new PickedInventoryItemKey(picked0); var pickedKey1 = new PickedInventoryItemKey(picked1); var pickedKey2 = new PickedInventoryItemKey(picked2); Assert.IsNull(items.Single(i => i.PickedInventoryItemKey == pickedKey0.KeyValue).AstaCalc); Assert.IsNull(items.Single(i => i.PickedInventoryItemKey == pickedKey1.KeyValue).AstaCalc); Assert.AreEqual(expectedAstaCalc, items.Single(i => i.PickedInventoryItemKey == pickedKey2.KeyValue).AstaCalc); }
private static Expression <Func <LotAttribute, DateTime?, int?> > CalculateAsta(DateTime currentDate) { var astaCalc = AstaCalculator.CalculateAsta(); return((a, d) => astaCalc.Invoke(a.AttributeValue, a.AttributeDate, d ?? a.AttributeDate, currentDate)); }
private void SyncPickedItems(tblOrder tblOrder, SalesOrderItem orderItem, ref DateTime lastEntryDate, tblOrderDetail detail) { var stagedToDelete = detail.tblStagedFGs.ToDictionary(s => s.EntryDate); foreach (var picked in orderItem.PickedItems ?? new List <SalesOrderPickedItem>()) { tblStagedFG staged; if (picked.PickedInventoryItem.DetailID != null && stagedToDelete.TryGetValue(picked.PickedInventoryItem.DetailID.Value, out staged)) { stagedToDelete.Remove(staged.EntryDate); } else { lastEntryDate = lastEntryDate.AddSeconds(1); staged = new tblStagedFG { EntryDate = lastEntryDate, s_GUID = Guid.NewGuid() }; detail.tblStagedFGs.Add(staged); picked.PickedInventoryItem.DetailID = staged.EntryDate; _commitNewContext = true; } var packaging = OldContextHelper.GetPackaging(picked.PickedInventoryItem.PackagingProduct); var treatment = OldContextHelper.GetTreatment(picked.PickedInventoryItem); staged.OrderNum = tblOrder.OrderNum; staged.ODetail = detail.ODetail; staged.Lot = LotNumberParser.BuildLotNumber(picked.PickedInventoryItem); staged.TTypeID = (int?)TransType.Batching; //To match logic found in Access (apnd_PickProdTemp) - RI 2016-3-15 staged.PkgID = packaging.PkgID; staged.Quantity = picked.PickedInventoryItem.Quantity; staged.NetWgt = packaging.NetWgt; staged.TtlWgt = picked.PickedInventoryItem.Quantity * packaging.NetWgt; staged.LocID = picked.PickedInventoryItem.CurrentLocation.LocID.Value; staged.TrtmtID = treatment.TrtmtID; staged.EmployeeID = picked.PickedInventoryItem.PickedInventory.EmployeeId; staged.CustProductCode = picked.PickedInventoryItem.CustomerProductCode; staged.CustLot = picked.PickedInventoryItem.CustomerLotCode; staged.AstaCalc = null; var asta = picked.PickedInventoryItem.Lot.Attributes.FirstOrDefault(a => a.AttributeShortName == GlobalKeyHelpers.AstaAttributeNameKey.AttributeNameKey_ShortName); if (asta != null) { var productionEnd = asta.AttributeDate; if (picked.PickedInventoryItem.Lot.ChileLot != null && picked.PickedInventoryItem.Lot.ChileLot.Production != null && picked.PickedInventoryItem.Lot.ChileLot.Production.Results != null) { productionEnd = picked.PickedInventoryItem.Lot.ChileLot.Production.Results.ProductionEnd; } staged.AstaCalc = AstaCalculator.CalculateAsta(asta.AttributeValue, asta.AttributeDate, productionEnd, DateTime.UtcNow); } staged.LoBac = false; if (picked.PickedInventoryItem.Lot.ChileLot != null) { staged.LoBac = picked.PickedInventoryItem.Lot.ChileLot.AllAttributesAreLoBac; } } foreach (var staged in stagedToDelete.Values) { OldContext.tblStagedFGs.DeleteObject(staged); } }