public void GivenPickListBuilder_WhenBuild_ThenPostBuildRelationsMustExist() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; var pickList = new PickListBuilder(this.Session).Build(); this.Session.Derive(); Assert.Equal(new PickListStates(this.Session).Created, pickList.PickListState); }
private void CreateNegativePickList(IDerivation derivation, CustomerShipment shipment, SalesOrderItem orderItem, decimal quantity) { if (this.ExistShipToParty) { var pickList = new PickListBuilder(this.Strategy.Session) .WithCustomerShipmentCorrection(shipment) .WithShipToParty(this.ShipToParty) .WithStore(this.Store) .Build(); pickList.AddPickListItem(new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(orderItem.ReservedFromNonSerialisedInventoryItem) .WithRequestedQuantity(0 - quantity) .Build()); } }
public void GivenPickList_WhenObjectStateIsCreated_ThenCheckTransitions() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; this.SetIdentity("orderProcessor"); var pickList = new PickListBuilder(this.Session).Build(); this.Session.Derive(); var acl = new AccessControlList(pickList, this.Session.GetUser()); Assert.True(acl.CanExecute(M.PickList.Cancel)); }
public void GivenPickList_WhenObjectStateIsCreated_ThenCheckTransitions() { var store = this.Session.Extent <Store>().First; store.IsImmediatelyPicked = false; User user = this.Administrator; this.Session.SetUser(user); var pickList = new PickListBuilder(this.Session).Build(); this.Session.Derive(); var acl = new AccessControlLists(this.Session.GetUser())[pickList]; Assert.True(acl.CanExecute(M.PickList.Cancel)); }
private void CreatePickList() { if (this.ExistShipmentItems && this.ExistShipToParty) { var pickList = new PickListBuilder(this.Strategy.Session).WithShipToParty(this.ShipToParty).WithStore(this.Store).Build(); foreach (var shipmentItem in this.ShipmentItems .Where(v => v.ShipmentItemState.Equals(new ShipmentItemStates(this.Session()).Created) || v.ShipmentItemState.Equals(new ShipmentItemStates(this.Session()).Picking))) { var quantityIssued = 0M; foreach (ItemIssuance itemIssuance in shipmentItem.ItemIssuancesWhereShipmentItem) { quantityIssued += itemIssuance.Quantity; } var quantityToIssue = shipmentItem.Quantity - quantityIssued; if (quantityToIssue == 0) { return; } var unifiedGood = shipmentItem.Good as UnifiedGood; var nonUnifiedGood = shipmentItem.Good as NonUnifiedGood; var serialized = unifiedGood?.InventoryItemKind.Equals(new InventoryItemKinds(this.Session()).Serialised); var part = unifiedGood ?? nonUnifiedGood?.Part; var facilities = ((InternalOrganisation)this.ShipFromParty).FacilitiesWhereOwner; var inventoryItems = part.InventoryItemsWherePart.Where(v => facilities.Contains(v.Facility)); SerialisedInventoryItem issuedFromSerializedInventoryItem = null; foreach (InventoryItem inventoryItem in shipmentItem.ReservedFromInventoryItems) { // shipment item originates from sales order. Sales order item has only 1 ReservedFromInventoryItem. // Foreach loop wil execute once. var pickListItem = new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(inventoryItem) .WithQuantity(quantityToIssue) .Build(); new ItemIssuanceBuilder(this.Strategy.Session) .WithInventoryItem(pickListItem.InventoryItem) .WithShipmentItem(shipmentItem) .WithQuantity(pickListItem.Quantity) .WithPickListItem(pickListItem) .Build(); pickList.AddPickListItem(pickListItem); if (serialized.HasValue && serialized.Value) { issuedFromSerializedInventoryItem = (SerialisedInventoryItem)inventoryItem; } } // shipment item is not linked to sales order item if (!shipmentItem.ExistReservedFromInventoryItems) { var quantityLeftToIssue = quantityToIssue; foreach (var inventoryItem in inventoryItems) { if (serialized.HasValue && serialized.Value && quantityLeftToIssue > 0) { var serializedInventoryItem = (SerialisedInventoryItem)inventoryItem; if (serializedInventoryItem.AvailableToPromise == 1) { var pickListItem = new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(inventoryItem) .WithQuantity(quantityLeftToIssue) .Build(); new ItemIssuanceBuilder(this.Strategy.Session) .WithInventoryItem(inventoryItem) .WithShipmentItem(shipmentItem) .WithQuantity(pickListItem.Quantity) .WithPickListItem(pickListItem) .Build(); pickList.AddPickListItem(pickListItem); quantityLeftToIssue = 0; issuedFromSerializedInventoryItem = serializedInventoryItem; } } else if (quantityLeftToIssue > 0) { var nonSerializedInventoryItem = (NonSerialisedInventoryItem)inventoryItem; var quantity = quantityLeftToIssue > nonSerializedInventoryItem.AvailableToPromise ? nonSerializedInventoryItem.AvailableToPromise : quantityLeftToIssue; if (quantity > 0) { var pickListItem = new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(inventoryItem) .WithQuantity(quantity) .Build(); new ItemIssuanceBuilder(this.Strategy.Session) .WithInventoryItem(inventoryItem) .WithShipmentItem(shipmentItem) .WithQuantity(pickListItem.Quantity) .WithPickListItem(pickListItem) .Build(); shipmentItem.AddReservedFromInventoryItem(inventoryItem); pickList.AddPickListItem(pickListItem); quantityLeftToIssue -= pickListItem.Quantity; } } } } } } }
private void CreatePickList(IDerivation derivation) { if (this.ExistShipToParty) { var pendingPickList = this.PendingPickList; if (pendingPickList != null) { foreach (PickListItem pickListItem in pendingPickList.PickListItems) { foreach (ItemIssuance itemIssuance in pickListItem.ItemIssuancesWherePickListItem) { itemIssuance.Delete(); } pendingPickList.RemovePickListItem(pickListItem); pickListItem.Delete(); } } foreach (ShipmentItem shipmentItem in this.ShipmentItems) { var quantityIssued = 0M; foreach (ItemIssuance itemIssuance in shipmentItem.ItemIssuancesWhereShipmentItem) { quantityIssued += itemIssuance.Quantity; } if (!shipmentItem.ExistItemIssuancesWhereShipmentItem || shipmentItem.Quantity > quantityIssued) { var salesOrderItem = shipmentItem.OrderShipmentsWhereShipmentItem[0].OrderItem as SalesOrderItem; if (this.PendingPickList == null) { pendingPickList = new PickListBuilder(this.Strategy.Session).WithShipToParty(this.ShipToParty).Build(); } PickListItem pickListItem = null; foreach (PickListItem item in pendingPickList.PickListItems) { if (salesOrderItem != null && item.InventoryItem.Equals(salesOrderItem.ReservedFromNonSerialisedInventoryItem)) { pickListItem = item; break; } } if (pickListItem != null) { pickListItem.RequestedQuantity += shipmentItem.Quantity; var itemIssuances = pickListItem.ItemIssuancesWherePickListItem; itemIssuances.Filter.AddEquals(M.ItemIssuance.ShipmentItem, shipmentItem); itemIssuances.First.Quantity = shipmentItem.Quantity; } else { var quantity = shipmentItem.Quantity - quantityIssued; pickListItem = new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(salesOrderItem.ReservedFromNonSerialisedInventoryItem) .WithRequestedQuantity(quantity) .WithActualQuantity(quantity) .Build(); if (salesOrderItem.ExistReservedFromNonSerialisedInventoryItem) { pickListItem.InventoryItem = salesOrderItem.ReservedFromNonSerialisedInventoryItem; } if (salesOrderItem.ExistReservedFromSerialisedInventoryItem) { pickListItem.InventoryItem = salesOrderItem.ReservedFromSerialisedInventoryItem; } if (salesOrderItem.ExistSerialisedItem) { salesOrderItem.ReservedFromSerialisedInventoryItem.SerialisedItem.AvailableForSale = false; if (salesOrderItem.ExistNewSerialisedItemState) { salesOrderItem.ReservedFromSerialisedInventoryItem.SerialisedItem.SerialisedItemState = salesOrderItem.NewSerialisedItemState; } if (salesOrderItem.NewSerialisedItemState.Equals( new SerialisedItemStates(this.strategy.Session).Sold)) { salesOrderItem.SerialisedItem.OwnedBy = this.ShipToParty; } } new ItemIssuanceBuilder(this.Strategy.Session) .WithInventoryItem(pickListItem.InventoryItem) .WithShipmentItem(shipmentItem) .WithQuantity(quantity) .WithPickListItem(pickListItem) .Build(); } pendingPickList.AddPickListItem(pickListItem); } } if (pendingPickList != null) { pendingPickList.OnDerive(x => x.WithDerivation(derivation)); } } }
private void CreatePickList(IDerivation derivation) { if (this.ExistShipToParty) { var pendingPickList = this.PendingPickList; if (pendingPickList != null) { foreach (PickListItem pickListItem in pendingPickList.PickListItems) { foreach (ItemIssuance itemIssuance in pickListItem.ItemIssuancesWherePickListItem) { itemIssuance.Delete(); } pendingPickList.RemovePickListItem(pickListItem); pickListItem.Delete(); } } foreach (ShipmentItem shipmentItem in this.ShipmentItems) { var quantityIssued = 0M; foreach (ItemIssuance itemIssuance in shipmentItem.ItemIssuancesWhereShipmentItem) { quantityIssued += itemIssuance.Quantity; } if (!shipmentItem.ExistItemIssuancesWhereShipmentItem || shipmentItem.Quantity > quantityIssued) { var orderItem = shipmentItem.OrderShipmentsWhereShipmentItem[0].SalesOrderItem; if (pendingPickList == null) { pendingPickList = new PickListBuilder(this.Strategy.Session).WithShipToParty(this.ShipToParty).Build(); } PickListItem pickListItem = null; foreach (PickListItem item in pendingPickList.PickListItems) { if (item.InventoryItem.Equals(orderItem.ReservedFromInventoryItem)) { pickListItem = item; break; } } if (pickListItem != null) { pickListItem.RequestedQuantity += shipmentItem.Quantity; var itemIssuances = pickListItem.ItemIssuancesWherePickListItem; itemIssuances.Filter.AddEquals(ItemIssuances.Meta.ShipmentItem, shipmentItem); itemIssuances.First.Quantity = shipmentItem.Quantity; } else { var quantity = shipmentItem.Quantity - quantityIssued; pickListItem = new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(orderItem.ReservedFromInventoryItem) .WithRequestedQuantity(quantity) .WithActualQuantity(quantity) .Build(); new ItemIssuanceBuilder(this.Strategy.Session) .WithInventoryItem(orderItem.ReservedFromInventoryItem) .WithShipmentItem(shipmentItem) .WithQuantity(quantity) .WithPickListItem(pickListItem) .Build(); } pendingPickList.AddPickListItem(pickListItem); } } if (pendingPickList != null) { pendingPickList.OnDerive(x=>x.WithDerivation(derivation)); } } }
private void CreateNegativePickList(IDerivation derivation, CustomerShipment shipment, Allors.Domain.SalesOrderItem orderItem, decimal quantity) { if (this.ExistShipToParty) { var pickList = new PickListBuilder(this.Strategy.Session) .WithCustomerShipmentCorrection(shipment) .WithShipToParty(this.ShipToParty) .WithStore(this.Store) .Build(); pickList.AddPickListItem(new PickListItemBuilder(this.Strategy.Session) .WithInventoryItem(orderItem.ReservedFromInventoryItem) .WithRequestedQuantity(0 - quantity) .Build()); } }
public void GivenPickList_WhenObjectStateIsPicked_ThenCheckTransitions() { Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("orderProcessor", "Forms"), new string[0]); var pickList = new PickListBuilder(this.DatabaseSession).Build(); this.DatabaseSession.Derive(true); pickList.SetPicked(); this.DatabaseSession.Derive(true); var acl = new AccessControlList(pickList, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.CanExecute(PickLists.Meta.Cancel)); Assert.IsFalse(acl.CanExecute(PickLists.Meta.SetPicked)); }
public void GivenPickListCreatedByOrderProcessor_WhenCurrentUserInSameOrderProcessorUserGroup_ThenAccessIsGranted() { var orderProcessor2 = new PersonBuilder(this.DatabaseSession).WithLastName("orderProcessor2").WithUserName("orderProcessor2").Build(); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); var usergroups = internalOrganisation.UserGroupsWhereParty; usergroups.Filter.AddEquals(UserGroups.Meta.Parent, new Roles(this.DatabaseSession).Operations.UserGroupWhereRole); var orderProcessorUserGroup = usergroups.First; new EmploymentBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithEmployee(orderProcessor2) .WithEmployer(internalOrganisation) .Build(); orderProcessorUserGroup.AddMember(orderProcessor2); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("orderProcessor", "Forms"), new string[0]); var pickList = new PickListBuilder(this.DatabaseSession).Build(); this.DatabaseSession.Derive(true); var acl = new AccessControlList(pickList, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(PickLists.Meta.Picker)); Assert.IsTrue(acl.CanRead(PickLists.Meta.Picker)); Assert.IsTrue(acl.CanExecute(PickLists.Meta.Cancel)); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("orderProcessor2", "Forms"), new string[0]); acl = new AccessControlList(pickList, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(PickLists.Meta.Picker)); Assert.IsTrue(acl.CanRead(PickLists.Meta.Picker)); Assert.IsTrue(acl.CanExecute(PickLists.Meta.Cancel)); }
public void GivenPickListCreatedByOrderProcessor_WhenCurrentUserInAnotherOrderProcessorUserGroup_ThenAccessIsDenied() { var belgium = new Countries(this.DatabaseSession).CountryByIsoCode["BE"]; var euro = belgium.Currency; var bank = new BankBuilder(this.DatabaseSession).WithCountry(belgium).WithName("ING België").WithBic("BBRUBEBB").Build(); var ownBankAccount = new OwnBankAccountBuilder(this.DatabaseSession) .WithDescription("own account") .WithBankAccount(new BankAccountBuilder(this.DatabaseSession).WithBank(bank).WithCurrency(euro).WithIban("BE23 3300 6167 6391").WithNameOnAccount("Koen").Build()) .Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var address1 = new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var billingAddress = new PartyContactMechanismBuilder(this.DatabaseSession) .WithContactMechanism(address1) .WithContactPurpose(new ContactMechanismPurposes(this.DatabaseSession).BillingAddress) .WithUseAsDefault(true) .Build(); var orderProcessor2 = new PersonBuilder(this.DatabaseSession).WithLastName("orderProcessor2").WithUserName("orderProcessor2").Build(); var internalOrganisation = new InternalOrganisationBuilder(this.DatabaseSession) .WithName("employer2") .WithLocale(new Locales(this.DatabaseSession).EnglishGreatBritain) .WithEmployeeRole(new Roles(this.DatabaseSession).Administrator) .WithEmployeeRole(new Roles(this.DatabaseSession).Operations) .WithDefaultPaymentMethod(ownBankAccount) .WithPreferredCurrency(euro) .WithPartyContactMechanism(billingAddress) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var usergroups = internalOrganisation.UserGroupsWhereParty; usergroups.Filter.AddEquals(UserGroups.Meta.Parent, new Roles(this.DatabaseSession).Operations.UserGroupWhereRole); var orderProcessorUserGroup = usergroups.First; new EmploymentBuilder(this.DatabaseSession) .WithFromDate(DateTime.UtcNow) .WithEmployee(orderProcessor2) .WithEmployer(internalOrganisation) .Build(); orderProcessorUserGroup.AddMember(orderProcessor2); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("orderProcessor", "Forms"), new string[0]); var pickList = new PickListBuilder(this.DatabaseSession).Build(); this.DatabaseSession.Derive(true); var acl = new AccessControlList(pickList, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(PickLists.Meta.Picker)); Assert.IsTrue(acl.CanRead(PickLists.Meta.Picker)); Assert.IsTrue(acl.CanExecute(PickLists.Meta.Cancel)); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("orderProcessor2", "Forms"), new string[0]); acl = new AccessControlList(pickList, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.HasReadOperation); }
public void GivenPickListBuilder_WhenBuild_ThenPostBuildRelationsMustExist() { var pickList = new PickListBuilder(this.DatabaseSession).Build(); this.DatabaseSession.Derive(true); Assert.AreEqual(new PickListObjectStates(this.DatabaseSession).Created, pickList.CurrentObjectState); Assert.AreEqual(pickList.CurrentPickListStatus.StartDateTime.Date, pickList.CreationDate.Date); }