public void GivenCustomerShipment_WhenAddingAndRemovingPackages_ThenPackageSequenceNumberIsRecalculated() { var shipment = new CustomerShipmentBuilder(this.DatabaseSession) .WithShipToAddress(new PostalAddresses(this.DatabaseSession).Extent().First) .WithShipToParty(new Organisations(this.DatabaseSession).Extent().First) .WithShipmentMethod(new ShipmentMethods(this.DatabaseSession).Boat) .Build(); var package1 = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package1); this.DatabaseSession.Derive(true); Assert.AreEqual(1, package1.SequenceNumber); var package2 = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package2); this.DatabaseSession.Derive(true); Assert.AreEqual(2, package2.SequenceNumber); var package3 = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package3); this.DatabaseSession.Derive(true); Assert.AreEqual(3, package3.SequenceNumber); shipment.RemoveShipmentPackage(package1); this.DatabaseSession.Derive(true); Assert.AreEqual(2, package2.SequenceNumber); Assert.AreEqual(3, package3.SequenceNumber); var package4 = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package4); this.DatabaseSession.Derive(true); Assert.AreEqual(2, package2.SequenceNumber); Assert.AreEqual(3, package3.SequenceNumber); Assert.AreEqual(4, package4.SequenceNumber); shipment.RemoveShipmentPackage(package4); this.DatabaseSession.Derive(true); var package5 = new ShipmentPackageBuilder(this.DatabaseSession).Build(); shipment.AddShipmentPackage(package5); this.DatabaseSession.Derive(true); Assert.AreEqual(2, package2.SequenceNumber); Assert.AreEqual(3, package3.SequenceNumber); Assert.AreEqual(4, package5.SequenceNumber); }
public void GivenShipmentItem_WhenProcessed_ThenDeleteIsNotAllowed() { var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var shipToAddress = new PostalAddressBuilder(this.Session).WithPostalAddressBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var good1 = new NonUnifiedGoods(this.Session).FindBy(M.Good.Name, "good1"); new InventoryItemTransactionBuilder(this.Session).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).PhysicalCount).WithPart(good1.Part).Build(); User user = this.Administrator; this.Session.SetUser(user); var customer = new PersonBuilder(this.Session).WithLastName("customer").Build(); var shipment = new CustomerShipmentBuilder(this.Session) .WithShipToParty(customer) .WithShipToAddress(shipToAddress) .WithShipmentMethod(new ShipmentMethods(this.Session).Ground) .Build(); var shipmentItem = new ShipmentItemBuilder(this.Session).WithGood(good1).WithQuantity(10).Build(); shipment.AddShipmentItem(shipmentItem); this.Session.Derive(); shipment.Pick(); this.Session.Derive(); var acl = new AccessControlLists(this.Session.GetUser())[shipmentItem]; Assert.Equal(new ShipmentItemStates(this.Session).Picking, shipmentItem.ShipmentItemState); Assert.False(acl.CanExecute(M.ShipmentItem.Delete)); var pickList = shipment.ShipmentItems[0].ItemIssuancesWhereShipmentItem[0].PickListItem.PickListWherePickListItem; pickList.Picker = this.OrderProcessor; pickList.SetPicked(); this.Session.Derive(); acl = new AccessControlLists(this.Session.GetUser())[shipmentItem]; Assert.Equal(new ShipmentItemStates(this.Session).Picked, shipmentItem.ShipmentItemState); Assert.False(acl.CanExecute(M.ShipmentItem.Delete)); var package = new ShipmentPackageBuilder(this.Session).Build(); shipment.AddShipmentPackage(package); foreach (ShipmentItem item in shipment.ShipmentItems) { package.AddPackagingContent(new PackagingContentBuilder(this.Session).WithShipmentItem(item).WithQuantity(shipmentItem.Quantity).Build()); } this.Session.Derive(); shipment.SetPacked(); this.Session.Derive(); acl = new AccessControlLists(this.Session.GetUser())[shipmentItem]; Assert.Equal(new ShipmentItemStates(this.Session).Packed, shipmentItem.ShipmentItemState); Assert.False(acl.CanExecute(M.ShipmentItem.Delete)); shipment.Ship(); this.Session.Derive(); acl = new AccessControlLists(this.Session.GetUser())[shipmentItem]; Assert.Equal(new ShipmentItemStates(this.Session).Shipped, shipmentItem.ShipmentItemState); Assert.False(acl.CanExecute(M.ShipmentItem.Delete)); }
public void BaseShip(SalesOrderShip method) { if (this.CanShip) { var addresses = this.ShipToAddresses(); var shipments = new List <Shipment>(); if (addresses.Count > 0) { foreach (var address in addresses) { var pendingShipment = address.Value.BaseGetPendingCustomerShipmentForStore(address.Key, this.Store, this.ShipmentMethod); if (pendingShipment == null) { pendingShipment = new CustomerShipmentBuilder(this.Strategy.Session) .WithShipFromParty(this.TakenBy) .WithShipFromAddress(this.ShipFromAddress) .WithShipToAddress(address.Key) .WithShipToParty(address.Value) .WithStore(this.Store) .WithShipmentMethod(this.ShipmentMethod) .WithPaymentMethod(this.PaymentMethod) .Build(); if (this.Store.AutoGenerateShipmentPackage) { pendingShipment.AddShipmentPackage(new ShipmentPackageBuilder(this.Strategy.Session).Build()); } } foreach (SalesOrderItem orderItem in this.ValidOrderItems) { var orderItemDerivedRoles = (SalesOrderItemDerivedRoles)orderItem; if (orderItem.ExistProduct && orderItem.ShipToAddress.Equals(address.Key) && orderItem.QuantityRequestsShipping > 0) { var good = orderItem.Product as Good; var nonUnifiedGood = orderItem.Product as NonUnifiedGood; var unifiedGood = orderItem.Product as UnifiedGood; var inventoryItemKind = unifiedGood?.InventoryItemKind ?? nonUnifiedGood?.Part.InventoryItemKind; var part = unifiedGood ?? nonUnifiedGood?.Part; ShipmentItem shipmentItem = null; foreach (ShipmentItem item in pendingShipment.ShipmentItems) { if (inventoryItemKind != null && inventoryItemKind.Equals(new InventoryItemKinds(this.Session()).NonSerialised) && item.Good.Equals(good) && !item.ItemIssuancesWhereShipmentItem.Any(v => v.PickListItem.PickListWherePickListItem.PickListState.Equals(new PickListStates(this.Session()).Picked))) { shipmentItem = item; break; } } if (shipmentItem != null) { shipmentItem.ContentsDescription = $"{shipmentItem.Quantity} * {good.Name}"; } else { shipmentItem = new ShipmentItemBuilder(this.Strategy.Session) .WithGood(good) .WithContentsDescription($"{orderItem.QuantityRequestsShipping} * {good}") .Build(); if (orderItem.ExistSerialisedItem) { shipmentItem.SerialisedItem = orderItem.SerialisedItem; } if (orderItem.ExistNextSerialisedItemAvailability) { shipmentItem.NextSerialisedItemAvailability = orderItem.NextSerialisedItemAvailability; } if (orderItem.ExistReservedFromNonSerialisedInventoryItem) { shipmentItem.AddReservedFromInventoryItem(orderItem.ReservedFromNonSerialisedInventoryItem); } if (orderItem.ExistReservedFromSerialisedInventoryItem) { shipmentItem.AddReservedFromInventoryItem(orderItem.ReservedFromSerialisedInventoryItem); } pendingShipment.AddShipmentItem(shipmentItem); } foreach (SalesOrderItem featureItem in orderItem.OrderedWithFeatures) { shipmentItem.AddProductFeature(featureItem.ProductFeature); } new OrderShipmentBuilder(this.Strategy.Session) .WithOrderItem(orderItem) .WithShipmentItem(shipmentItem) .WithQuantity(orderItem.QuantityRequestsShipping) .Build(); shipmentItem.Quantity = shipmentItem.OrderShipmentsWhereShipmentItem.Sum(v => v.Quantity); orderItemDerivedRoles.QuantityRequestsShipping = 0; orderItemDerivedRoles.CostOfGoodsSold = orderItem.QuantityOrdered * part.PartWeightedAverage.AverageCost; } } shipments.Add(pendingShipment); this.AddDeniedPermission(new Permissions(this.Strategy.Session).Get(this.Meta.Class, this.Meta.Ship, Operations.Execute)); } } } }