public void GivenWorkEffort_WhenAddingInventoryAssignment_ThenInventoryConsumptionCreated() { // Arrange var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var reasons = new InventoryTransactionReasons(this.Session); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var part = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); this.Session.Derive(true); new InventoryItemTransactionBuilder(this.Session) .WithPart(part) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(11) .Build(); // Act this.Session.Derive(true); // Assert Assert.Empty(workEffort.WorkEffortInventoryAssignmentsWhereAssignment); Assert.True(workEffort.WorkEffortState.IsCreated); // Re-arrange var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); // Act this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions; Assert.Single(transactions); var transaction = transactions[0]; Assert.Equal(part, transaction.Part); Assert.Equal(10, transaction.Quantity); Assert.Equal(reasons.Consumption, transaction.Reason); Assert.Equal(0, part.QuantityCommittedOut); Assert.Equal(1, part.QuantityOnHand); }
public void GivenWorkEffortWithInventoryAssignment_WhenCompletingThenCancelling_ThenInventoryTransactionsCancelled() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var part = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); this.Session.Derive(true); new InventoryItemTransactionBuilder(this.Session) .WithPart(part) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); this.Session.Derive(true); // Act workEffort.Complete(); this.Session.Derive(true); workEffort.Cancel(); this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions; var consumption = transactions.First(t => t.Reason.Equals(reasons.Consumption) && (t.Quantity > 0)); var consumptionCancellation = transactions.First(t => t.Reason.Equals(reasons.Consumption) && (t.Quantity < 0)); Assert.Equal(2, transactions.Count); Assert.Equal(10, consumption.Quantity); Assert.Equal(-10, consumptionCancellation.Quantity); Assert.Equal(10, part.QuantityOnHand); }
public void GivenWorkEffortWithInventoryAssignment_WhenCancelling_ThenInventoryReservationCancelled() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").Build(); var part = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); this.Session.Derive(true); // Act workEffort.Cancel(); this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions; Assert.Equal(2, transactions.Count); var reservation = transactions.First(t => t.Reason.Equals(reasons.Reservation) && (t.Quantity > 0)); var reservationCancellation = transactions.First(t => t.Reason.Equals(reasons.Reservation) && (t.Quantity < 0)); Assert.Equal(10, reservation.Quantity); Assert.Equal(-10, reservationCancellation.Quantity); Assert.Equal(0, part.QuantityCommittedOut); }
public void GivenSupplierOffering_WhenCalculatingUnitSellingPrice_ThenConsiderHighestHistoricalPurchaseRate() { var settings = this.Session.GetSingleton().Settings; var supplier_1 = new OrganisationBuilder(this.Session).WithName("supplier uno").Build(); var supplier_2 = new OrganisationBuilder(this.Session).WithName("supplier dos").Build(); var supplier_3 = new OrganisationBuilder(this.Session).WithName("supplier tres").Build(); var supplier_4 = new OrganisationBuilder(this.Session).WithName("supplier cuatro").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(v => Equals(v.Name, "internalOrganisation")); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier_1) .WithInternalOrganisation(internalOrganisation) .WithFromDate(this.Session.Now().AddYears(-3)) .Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier_2) .WithInternalOrganisation(internalOrganisation) .WithFromDate(this.Session.Now().AddYears(-2)) .Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier_3) .WithInternalOrganisation(internalOrganisation) .WithFromDate(this.Session.Now().AddYears(-1)) .Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(supplier_4) .WithInternalOrganisation(internalOrganisation) .WithFromDate(this.Session.Now().AddMonths(-6)) .Build(); var finishedGood = new NonUnifiedPartBuilder(this.Session) .WithNonSerialisedDefaults(internalOrganisation) .Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session).WithQuantity(10).WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment).WithPart(finishedGood).Build(); this.Session.Derive(); var euro = new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR"); var piece = new UnitsOfMeasure(this.Session).Piece; new BasePriceBuilder(this.Session) .WithPart(finishedGood) .WithFromDate(this.Session.Now()) .WithPrice(100) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(finishedGood) .WithSupplier(supplier_1) .WithFromDate(this.Session.Now().AddMonths(-6)) .WithThroughDate(this.Session.Now().AddMonths(-3)) .WithUnitOfMeasure(piece) .WithPrice(100) .WithCurrency(euro) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(finishedGood) .WithSupplier(supplier_2) .WithFromDate(this.Session.Now().AddYears(-1)) .WithThroughDate(this.Session.Now().AddDays(-1)) .WithUnitOfMeasure(piece) .WithPrice(120) .WithCurrency(euro) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(finishedGood) .WithSupplier(supplier_3) .WithFromDate(this.Session.Now()) .WithUnitOfMeasure(piece) .WithPrice(99) .WithCurrency(euro) .Build(); new SupplierOfferingBuilder(this.Session) .WithPart(finishedGood) .WithSupplier(supplier_4) .WithFromDate(this.Session.Now().AddDays(7)) .WithThroughDate(this.Session.Now().AddDays(30)) .WithUnitOfMeasure(piece) .WithPrice(135) .WithCurrency(euro) .Build(); this.Session.Derive(); var customer = internalOrganisation.CreateB2BCustomer(this.Session.Faker()); var workEffort = new WorkTaskBuilder(this.Session) .WithName("Activity") .WithCustomer(customer) .WithTakenBy(internalOrganisation) .Build(); var workEffortInventoryAssignement = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(finishedGood.InventoryItemsWherePart.First()) .WithQuantity(1) .Build(); this.Session.Derive(); /*Purchase price times InternalSurchargePercentage * var sellingPrice = Math.Round(135 * (1 + (this.Session.GetSingleton().Settings.PartSurchargePercentage / 100)), 2);*/ Assert.Equal(100, workEffortInventoryAssignement.UnitSellingPrice); }
public void GivenWorkEffortWithInventoryAssignment_WhenChangingPart_ThenInventoryConsumptionChange() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var part1 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); var part2 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P2") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); this.Session.Derive(true); new InventoryItemTransactionBuilder(this.Session) .WithPart(part1) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part2) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part1.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); // Act this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions.ToArray(); Assert.Single(transactions); Assert.Equal(part1, transactions[0].Part); Assert.Equal(10, transactions[0].Quantity); Assert.Equal(reasons.Consumption, transactions[0].Reason); // Re-arrange inventoryAssignment.InventoryItem = part2.InventoryItemsWherePart.First; // Act this.Session.Derive(true); // Assert var part1Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part1)).ToArray(); var part2Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part2)).ToArray(); Assert.Equal(0, part1Transactions.Sum(t => t.Quantity)); Assert.Equal(10, part2Transactions.Sum(t => t.Quantity)); Assert.Equal(10, part1.QuantityOnHand); Assert.Equal(0, part2.QuantityOnHand); }
public void GivenWorkEffortWithInventoryAssignment_WhenChangingPartAndQuantityAndReopening_ThenOldInventoryCancelledAndNewInventoryCreated() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var part1 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); var part2 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P2") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); this.Session.Derive(true); new InventoryItemTransactionBuilder(this.Session) .WithPart(part1) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part2) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(5) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part1.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); this.Session.Derive(true); workEffort.Complete(); this.Session.Derive(true); workEffort.Reopen(); this.Session.Derive(true); // Act inventoryAssignment.InventoryItem = part2.InventoryItemsWherePart.First; inventoryAssignment.Quantity = 4; this.Session.Derive(true); // Assert var part1Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part1)).ToArray(); var part2Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part2)).ToArray(); var part1Consumptions = part1Transactions.Where(t => t.Reason.Equals(reasons.Consumption)); var part2Consumptions = part2Transactions.Where(t => t.Reason.Equals(reasons.Consumption)); Assert.Equal(0, part1Consumptions.Sum(c => c.Quantity)); Assert.Equal(4, part2Consumptions.Sum(r => r.Quantity)); Assert.Equal(10, part1.QuantityOnHand); Assert.Equal(1, part2.QuantityOnHand); }
public void GivenNonSerialisedNonUnifiedPart_WhenPurchased_ThenAverageCostIsCalculated() { this.InternalOrganisation.IsAutomaticallyReceived = true; var secondFacility = new FacilityBuilder(this.Session) .WithFacilityType(new FacilityTypes(this.Session).Warehouse) .WithName("second facility") .WithOwner(this.InternalOrganisation) .Build(); var supplier = this.InternalOrganisation.ActiveSuppliers.First; var customer = this.InternalOrganisation.ActiveCustomers.First; var part = new NonUnifiedPartBuilder(this.Session).WithNonSerialisedDefaults(this.InternalOrganisation).Build(); var good = new NonUnifiedGoodBuilder(this.Session) .WithName(part.Name) .WithPart(part) .WithVatRate(new VatRates(this.Session).Zero) .Build(); this.Session.Derive(); var purchaseOrder1 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); // Beginning inventory: 150 items at 8 euro received in 2 facilities var purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(100).WithAssignedUnitPrice(8M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); var purchaseOrder2 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithFacility(secondFacility) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); // Beginning inventory: 150 items at 8 euro purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(50).WithAssignedUnitPrice(8M).Build(); purchaseOrder2.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder2.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder2.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(150, part.QuantityOnHand); Assert.Equal(8, part.PartWeightedAverage.AverageCost); purchaseOrder1.Revise(); this.Session.Derive(); // Purchase: 75 items at 8.1 euro purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(75).WithAssignedUnitPrice(8.1M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(225, part.QuantityOnHand); Assert.Equal(8.03M, part.PartWeightedAverage.AverageCost); var salesOrder = new SalesOrderBuilder(this.Session) .WithTakenBy(this.InternalOrganisation) .WithShipToCustomer(customer) .Build(); this.Session.Derive(); // Sell 50 items for 20 euro var salesItem1 = new SalesOrderItemBuilder(this.Session).WithProduct(good).WithQuantityOrdered(50).WithAssignedUnitPrice(20M).Build(); salesOrder.AddSalesOrderItem(salesItem1); this.Session.Derive(); salesOrder.SetReadyForPosting(); this.Session.Derive(); salesOrder.Post(); this.Session.Derive(); salesOrder.Accept(); this.Session.Derive(); salesOrder.Ship(); this.Session.Derive(); var customerShipment = salesItem1.OrderShipmentsWhereOrderItem.First.ShipmentItem.ShipmentWhereShipmentItem as CustomerShipment; customerShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); var package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in customerShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); customerShipment.Ship(); this.Session.Derive(); Assert.Equal(175, part.QuantityOnHand); Assert.Equal(8.03M, part.PartWeightedAverage.AverageCost); Assert.Equal(401.5M, salesItem1.CostOfGoodsSold); // Again Sell 50 items for 20 euro salesOrder.Revise(); this.Session.Derive(); var salesItem2 = new SalesOrderItemBuilder(this.Session).WithProduct(good).WithQuantityOrdered(50).WithAssignedUnitPrice(20M).Build(); salesOrder.AddSalesOrderItem(salesItem2); this.Session.Derive(); salesOrder.SetReadyForPosting(); this.Session.Derive(); salesOrder.Post(); this.Session.Derive(); salesOrder.Accept(); this.Session.Derive(); salesOrder.Ship(); this.Session.Derive(); var customerShipment2 = salesItem2.OrderShipmentsWhereOrderItem.First.ShipmentItem.ShipmentWhereShipmentItem as CustomerShipment; customerShipment2.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); var package2 = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package2); foreach (ShipmentItem shipmentItem in customerShipment2.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); customerShipment2.Ship(); this.Session.Derive(); Assert.Equal(125, part.QuantityOnHand); Assert.Equal(8.03M, part.PartWeightedAverage.AverageCost); Assert.Equal(401.5M, salesItem1.CostOfGoodsSold); // Purchase: 50 items at 8.25 euro purchaseOrder1.Revise(); this.Session.Derive(); purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(50).WithAssignedUnitPrice(8.25M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(175, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); // Use 65 items in a workorder var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(this.InternalOrganisation).Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(65) .Build(); this.Session.Derive(true); Assert.Equal(110, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); Assert.Equal(525.85M, inventoryAssignment.CostOfGoodsSold); // Cancel workeffort inventory assignment inventoryAssignment.Delete(); this.Session.Derive(true); Assert.Equal(175, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); // Use 35 items in a workorder inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(35) .Build(); this.Session.Derive(true); this.Session.Derive(true); Assert.Equal(140, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); Assert.Equal(283.15M, inventoryAssignment.CostOfGoodsSold); // Use 30 items in a workorder form second facility inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First(v => v.Facility.Equals(secondFacility))) .WithQuantity(30) .Build(); this.Session.Derive(true); Assert.Equal(110, part.QuantityOnHand); Assert.Equal(8.09M, part.PartWeightedAverage.AverageCost); Assert.Equal(242.7M, inventoryAssignment.CostOfGoodsSold); // Purchase: 90 items at 8.35 euro var purchaseOrder3 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(90).WithAssignedUnitPrice(8.35M).Build(); purchaseOrder3.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder3.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder3.Send(); this.Session.Derive(); purchaseOrder3.QuickReceive(); this.Session.Derive(); // Purchase: 50 items at 8.45 euro var purchaseOrder4 = new PurchaseOrderBuilder(this.Session) .WithTakenViaSupplier(supplier) .WithDeliveryDate(this.Session.Now()) .Build(); this.Session.Derive(); purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(50).WithAssignedUnitPrice(8.45M).Build(); purchaseOrder4.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder4.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder4.Send(); this.Session.Derive(); purchaseOrder4.QuickReceive(); this.Session.Derive(); Assert.Equal(250, part.QuantityOnHand); Assert.Equal(8.26M, part.PartWeightedAverage.AverageCost); // Ship 10 items to customer (without sales order) var outgoingShipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipToAddress(customer.ShippingAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); this.Session.Derive(true); var outgoingItem = new ShipmentItemBuilder(this.Session).WithGood(good).WithQuantity(10).Build(); outgoingShipment.AddShipmentItem(outgoingItem); this.Session.Derive(true); outgoingShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in outgoingShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); outgoingShipment.Ship(); this.Session.Derive(); Assert.Equal(240, part.QuantityOnHand); Assert.Equal(8.26M, part.PartWeightedAverage.AverageCost); // Receive 10 items at 8.55 from supplier (without purchase order) var incomingShipment = new PurchaseShipmentBuilder(this.Session) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithShipFromParty(supplier) .Build(); this.Session.Derive(); var incomingItem = new ShipmentItemBuilder(this.Session).WithPart(part).WithQuantity(10).WithUnitPurchasePrice(8.55M).Build(); incomingShipment.AddShipmentItem(incomingItem); this.Session.Derive(); incomingShipment.Receive(); this.Session.Derive(); Assert.Equal(250, part.QuantityOnHand); Assert.Equal(8.27M, part.PartWeightedAverage.AverageCost); // Receive 100 items at 7.9 from supplier (without purchase order) incomingShipment = new PurchaseShipmentBuilder(this.Session) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithShipFromParty(supplier) .Build(); this.Session.Derive(); incomingItem = new ShipmentItemBuilder(this.Session).WithPart(part).WithQuantity(100).WithUnitPurchasePrice(7.9M).Build(); incomingShipment.AddShipmentItem(incomingItem); this.Session.Derive(); incomingShipment.Receive(); this.Session.Derive(); Assert.Equal(350, part.QuantityOnHand); Assert.Equal(8.17M, part.PartWeightedAverage.AverageCost); // Ship all items to customer (without sales order) outgoingShipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipFromFacility(part.DefaultFacility) .WithShipToAddress(customer.ShippingAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); this.Session.Derive(true); outgoingItem = new ShipmentItemBuilder(this.Session).WithGood(good).WithQuantity(330).Build(); outgoingShipment.AddShipmentItem(outgoingItem); this.Session.Derive(true); outgoingShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in outgoingShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); outgoingShipment.Ship(); this.Session.Derive(); // Ship all items to customer (without sales order) outgoingShipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipFromFacility(secondFacility) .WithShipToAddress(customer.ShippingAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); this.Session.Derive(true); outgoingItem = new ShipmentItemBuilder(this.Session).WithGood(good).WithQuantity(20).Build(); outgoingShipment.AddShipmentItem(outgoingItem); this.Session.Derive(true); outgoingShipment.Pick(); this.Session.Derive(); customer.PickListsWhereShipToParty.First(v => v.PickListState.Equals(new PickListStates(this.Session).Created)).SetPicked(); package = new ShipmentPackageBuilder(this.Session).Build(); customerShipment2.AddShipmentPackage(package); foreach (ShipmentItem shipmentItem in outgoingShipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(shipmentItem).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); outgoingShipment.Ship(); this.Session.Derive(); Assert.Equal(0, part.QuantityOnHand); Assert.Equal(8.17M, part.PartWeightedAverage.AverageCost); purchaseOrder1.Revise(); this.Session.Derive(); // Purchase 150 items at 8 euro purchaseItem = new PurchaseOrderItemBuilder(this.Session).WithPart(part).WithQuantityOrdered(150).WithAssignedUnitPrice(8M).Build(); purchaseOrder1.AddPurchaseOrderItem(purchaseItem); this.Session.Derive(); purchaseOrder1.SetReadyForProcessing(); this.Session.Derive(); purchaseOrder1.Send(); this.Session.Derive(); purchaseItem.QuickReceive(); this.Session.Derive(); Assert.Equal(150, part.QuantityOnHand); Assert.Equal(8, part.PartWeightedAverage.AverageCost); }
public void GivenWorkEffortWithInventoryAssignment_WhenChangingPart_ThenInventoryReservationsChange() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").Build(); var part1 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); var part2 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P2") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part1) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part2) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part1.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); // Act this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions.ToArray(); Assert.Single(transactions); Assert.Equal(part1, transactions[0].Part); Assert.Equal(10, transactions[0].Quantity); Assert.Equal(reasons.Reservation, transactions[0].Reason); // Re-arrange inventoryAssignment.InventoryItem = part2.InventoryItemsWherePart.First; // Act this.Session.Derive(true); // Assert var part1Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part1)).ToArray(); var part2Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part2)).ToArray(); Assert.Equal(0, part1Transactions.Sum(t => t.Quantity)); Assert.Equal(10, part2Transactions.Sum(t => t.Quantity)); Assert.Equal(0, part1.QuantityCommittedOut); Assert.Equal(10, part2.QuantityCommittedOut); }
public void GivenWorkEffortWithInventoryAssignment_WhenChangingQuantity_ThenInventoryTransactionsCreated() { // Arrage var reasons = new InventoryTransactionReasons(this.Session); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").Build(); var part = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(20) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(5) .Build(); // Act this.Session.Derive(true); // Assert var reservation = inventoryAssignment.InventoryItemTransactions.First(t => t.Reason.Equals(reasons.Reservation) && (t.Quantity > 0)); Assert.Equal(5, reservation.Quantity); // Re-arrange inventoryAssignment.Quantity = 10; // Act this.Session.Derive(true); // Assert var reservations = inventoryAssignment.InventoryItemTransactions.Where(t => t.Reason.Equals(reasons.Reservation)); Assert.Equal(10, reservations.Sum(r => r.Quantity)); // Re-arrange workEffort.Complete(); // Act this.Session.Derive(true); // Assert reservations = inventoryAssignment.InventoryItemTransactions.Where(t => t.Reason.Equals(reasons.Reservation)); var consumption = inventoryAssignment.InventoryItemTransactions.First(t => t.Reason.Equals(reasons.Consumption)); Assert.Equal(3, inventoryAssignment.InventoryItemTransactions.Count); Assert.Equal(10, reservations.Sum(r => r.Quantity)); Assert.Equal(10, consumption.Quantity); Assert.Equal(0, part.QuantityCommittedOut); Assert.Equal(10, part.QuantityOnHand); }
public void GivenWorkEffortWithInventoryAssignment_WhenChangingPartAndQuantityAndFinishing_ThenOldInventoryCancelledAndNewInventoryCreated() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").Build(); var part1 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); var part2 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P2") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part1) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); new InventoryItemTransactionBuilder(this.Session) .WithPart(part2) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part1.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); this.Session.Derive(true); // Act inventoryAssignment.InventoryItem = part2.InventoryItemsWherePart.First; inventoryAssignment.Quantity = 5; workEffort.Complete(); this.Session.Derive(true); // Assert var part1Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part1)).ToArray(); var part2Transactions = inventoryAssignment.InventoryItemTransactions.Where(t => t.Part.Equals(part2)).ToArray(); var part1Reservations = part1Transactions.Where(t => t.Reason.Equals(reasons.Reservation)); var part2Reservations = part2Transactions.Where(t => t.Reason.Equals(reasons.Reservation)); var part2Consumption = part2Transactions.Where(t => t.Reason.Equals(reasons.Consumption)); Assert.Equal(0, part1Reservations.Sum(r => r.Quantity)); Assert.Equal(5, part2Reservations.Sum(r => r.Quantity)); Assert.Equal(5, part2Consumption.Sum(c => c.Quantity)); Assert.Equal(0, part1.QuantityCommittedOut); Assert.Equal(10, part1.QuantityOnHand); Assert.Equal(0, part2.QuantityCommittedOut); Assert.Equal(5, part2.QuantityOnHand); }