public void GivenFinishedGoodWithSerializedInventory_WhenDeriving_ThenQuantityOnHandUpdated() { // Arrange var available = new SerialisedInventoryItemStates(this.Session).Available; var warehouse = new Facilities(this.Session).FindBy(M.Facility.FacilityType, new FacilityTypes(this.Session).Warehouse); var kinds = new InventoryItemKinds(this.Session); var unitsOfMeasure = new UnitsOfMeasure(this.Session); var unknown = new InventoryTransactionReasons(this.Session).Unknown; var vatRate21 = new VatRateBuilder(this.Session).WithRate(21).Build(); var category = new ProductCategoryBuilder(this.Session).WithName("category").Build(); var serialPart = CreatePart("FG1", kinds.Serialised); var serialItem1 = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); var serialItem2 = new SerialisedItemBuilder(this.Session).WithSerialNumber("2").Build(); var serialItem3 = new SerialisedItemBuilder(this.Session).WithSerialNumber("3").Build(); serialPart.AddSerialisedItem(serialItem1); serialPart.AddSerialisedItem(serialItem2); serialPart.AddSerialisedItem(serialItem3); var good = CreateGood("10101", vatRate21, "good1", unitsOfMeasure.Piece, category, serialPart); // Act this.Session.Derive(true); CreateInventoryTransaction(1, unknown, serialPart, serialItem1); CreateInventoryTransaction(1, unknown, serialPart, serialItem2); CreateInventoryTransaction(1, unknown, serialPart, serialItem3); this.Session.Derive(true); // Assert Assert.Equal(3, serialPart.QuantityOnHand); }
/* * Create PurchaseOrder with both Serialized & NonSerialized PurchaseOrder Items */ public static PurchaseOrder CreatePurchaseOrderWithBothItems(this Organisation @this, Faker faker) { var serializedPart = new UnifiedGoodBuilder(@this.Session()).WithSerialisedDefaults(@this).Build(); var serializedItem = new SerialisedItemBuilder(@this.Session()).WithDefaults(@this).Build(); serializedPart.AddSerialisedItem(serializedItem); var nonSerializedPart = new NonUnifiedPartBuilder(@this.Session()).WithNonSerialisedDefaults(@this).Build(); var purchaseOrder = new PurchaseOrderBuilder(@this.Session()).WithDefaults(@this).Build(); new SupplierOfferingBuilder(@this.Session()) .WithPart(nonSerializedPart) .WithSupplier(purchaseOrder.TakenViaSupplier) .WithFromDate(@this.Session().Now().AddMinutes(-1)) .WithUnitOfMeasure(new UnitsOfMeasure(@this.Session()).Piece) .WithPrice(faker.Random.Decimal(0, 10)) .Build(); var nonSerializedPartItem = new PurchaseOrderItemBuilder(@this.Session()).WithNonSerializedPartDefaults(nonSerializedPart).Build(); var serializedPartItem = new PurchaseOrderItemBuilder(@this.Session()).WithSerializedPartDefaults(serializedPart, serializedItem).Build(); purchaseOrder.AddPurchaseOrderItem(nonSerializedPartItem); purchaseOrder.AddPurchaseOrderItem(serializedPartItem); return(purchaseOrder); }
public void GivenSerializedItem_WhenDerived_ThenSuppliedByPartyNameIsSetFromSupplierOffering() { var supplier = this.InternalOrganisation.ActiveSuppliers.First; var unifiedGood = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(this.InternalOrganisation).Build(); this.Session.Derive(); new SupplierOfferingBuilder(this.Session) .WithSupplier(supplier) .WithPart(unifiedGood) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(1) .Build(); this.Session.Derive(); var newItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.InternalOrganisation).Build(); unifiedGood.AddSerialisedItem(newItem); this.Session.Derive(); Assert.Equal(supplier.PartyName, newItem.SuppliedByPartyName); }
public void GivenSerializedInventoryItems_WhenVarianceContainsInvalidQuantity_ThenDerivationExceptionRaised() { // Arrange var kinds = new InventoryItemKinds(this.Session); var unitsOfMeasure = new UnitsOfMeasure(this.Session); var unknown = new InventoryTransactionReasons(this.Session).Unknown; var vatRegime = new VatRegimes(this.Session).BelgiumStandard; var category = new ProductCategoryBuilder(this.Session).WithName("category").Build(); var finishedGood = this.CreatePart("FG1", kinds.Serialised); var good = this.CreateGood("10101", vatRegime, "good1", unitsOfMeasure.Piece, category, finishedGood); var serialItem = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); var variance = this.CreateInventoryTransaction(10, unknown, finishedGood, serialItem); // Act var derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Contains(M.InventoryItemTransaction.Quantity, derivation.Errors.SelectMany(e => e.RoleTypes)); // Re-Arrange variance.Quantity = -10; // Act derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Contains(M.InventoryItemTransaction.Quantity, derivation.Errors.SelectMany(e => e.RoleTypes)); }
public static PurchaseOrderItemBuilder WithSerializedProductDefaults(this PurchaseOrderItemBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var serializedProduct = new UnifiedGoodBuilder(@this.Session).WithSerialisedDefaults(internalOrganisation).Build(); var serializedItem = new SerialisedItemBuilder(@this.Session).WithDefaults(internalOrganisation).Build(); var quoteItem = new QuoteItemBuilder(@this.Session).WithSerializedDefaults(internalOrganisation).Build(); var customer = faker.Random.ListItem(internalOrganisation.ActiveCustomers); /*@this.WithDescription(faker.Lorem.Sentences(2)); * @this.WithComment(faker.Lorem.Sentence()); * @this.WithInternalComment(faker.Lorem.Sentence()); * @this.WithInvoiceItemType(new InvoiceItemTypes(@this.Session).ProductItem); * @this.WithProduct(serializedProduct); * @this.WithSerialisedItem(serializedItem); * @this.WithQuantityOrdered(faker.Random.UInt(5, 15)); * @this.WithQuoteItem(quoteItem); * @this.WithAssignedDeliveryDate(@this.Session.Now().AddDays(5)); * @this.WithShippingInstruction(faker.Lorem.Sentences(3)); * @this.WithMessage(faker.Lorem.Sentence()); * @this.WithShipFromAddress(customer.ShippingAddress); * @this.WithAssignedShipToAddress(customer.ShippingAddress); * @this.WithQuantityReturned(faker.Random.Decimal()); * @this.WithAssignedShipToParty(customer);*/ return(@this); }
public void BaseQuickReceive(PurchaseOrderItemQuickReceive method) { var session = this.Session(); var order = this.PurchaseOrderWherePurchaseOrderItem; if (this.ExistPart) { var shipment = new PurchaseShipmentBuilder(session) .WithShipmentMethod(new ShipmentMethods(session).Ground) .WithShipToParty(order.OrderedBy) .WithShipFromParty(order.TakenViaSupplier) .WithShipToFacility(order.StoredInFacility) .Build(); var shipmentItem = new ShipmentItemBuilder(session) .WithPart(this.Part) .WithStoredInFacility(this.StoredInFacility) .WithQuantity(this.QuantityOrdered) .WithUnitPurchasePrice(this.UnitPrice) .WithContentsDescription($"{this.QuantityOrdered} * {this.Part.Name}") .Build(); shipment.AddShipmentItem(shipmentItem); new OrderShipmentBuilder(session) .WithOrderItem(this) .WithShipmentItem(shipmentItem) .WithQuantity(this.QuantityOrdered) .Build(); if (this.Part.InventoryItemKind.IsSerialised) { var serialisedItem = this.SerialisedItem; if (!this.ExistSerialisedItem) { serialisedItem = new SerialisedItemBuilder(session) .WithSerialNumber(this.SerialNumber) .Build(); this.Part.AddSerialisedItem(serialisedItem); } shipmentItem.SerialisedItem = serialisedItem; } if (shipment.ShipToParty is InternalOrganisation internalOrganisation) { if (internalOrganisation.IsAutomaticallyReceived) { shipment.Receive(); } } } else { this.QuantityReceived = 1; } }
public static SerialisedItemBuilder WithDefaults(this SerialisedItemBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var availability = faker.Random.ListItem(@this.Session.Extent <SerialisedItemAvailability>()); var serviceDate = faker.Date.Past(refDate: @this.Session.Now()); var acquiredDate = faker.Date.Past(refDate: serviceDate); var replacementValue = Convert.ToDecimal(faker.Commerce.Price()); var expectedSalesPrice = Convert.ToDecimal(faker.Commerce.Price(replacementValue + 1000, replacementValue + 10000)); @this.WithName(faker.Lorem.Word()); @this.WithSerialisedItemAvailability(availability); @this.WithSerialisedItemState(faker.Random.ListItem(@this.Session.Extent <SerialisedItemState>())); @this.WithDescription(faker.Lorem.Sentence()); @this.WithKeywords(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithAcquiredDate(acquiredDate); @this.WithLastServiceDate(serviceDate); @this.WithNextServiceDate(faker.Date.Future(refDate: serviceDate)); @this.WithSerialNumber(faker.Random.AlphaNumeric(12)); @this.WithOwnership(faker.Random.ListItem(@this.Session.Extent <Ownership>())); @this.WithManufacturingYear(serviceDate.Year - 5); @this.WithAssignedPurchasePrice(Convert.ToDecimal(faker.Commerce.Price(replacementValue))); @this.WithExpectedSalesPrice(expectedSalesPrice); @this.WithPrimaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); if (@this.SecondaryPhotos != null) { @this.WithSecondaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithSecondaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); } @this.WithAdditionalPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAdditionalPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAdditionalPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithPrivatePhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAvailableForSale(faker.Random.Bool()); @this.WithBuyer(internalOrganisation); @this.WithSeller(internalOrganisation); @this.OwnedBy = (availability.IsSold ? new Organisations(@this.Session).FindBy(M.Organisation.IsInternalOrganisation, false) : internalOrganisation) ?? internalOrganisation; if (availability.IsInRent) { @this.WithRentedBy(new Organisations(@this.Session).FindBy(M.Organisation.IsInternalOrganisation, false)); @this.WithRentalFromDate(faker.Date.Between(start: acquiredDate, end: acquiredDate.AddDays(10))); @this.WithRentalThroughDate(faker.Date.Future(refDate: acquiredDate.AddYears(2))); @this.WithExpectedReturnDate(faker.Date.Between(start: acquiredDate.AddYears(2).AddDays(1), end: acquiredDate.AddYears(2).AddDays(10))); } foreach (Locale additionalLocale in @this.Session.GetSingleton().AdditionalLocales) { @this.WithLocalisedName(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Word()).WithLocale(additionalLocale).Build()); @this.WithLocalisedDescription(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); @this.WithLocalisedKeyword(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); } return(@this); }
public void GivenSerializedItem_WhenDerived_ThenSuppliedByPartyNameIsSet() { var supplier = this.InternalOrganisation.ActiveSuppliers.First; var newItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.InternalOrganisation).WithAssignedSuppliedBy(supplier).Build(); this.Session.Derive(); Assert.Equal(supplier.PartyName, newItem.SuppliedByPartyName); }
public void GivenSerializedItem_WhenDerived_ThenOwnershipByOwnershipNameIsSet() { var newItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.InternalOrganisation).Build(); newItem.Ownership = new Ownerships(this.Session).Own; this.Session.Derive(); Assert.Equal(newItem.Ownership.Name, newItem.OwnershipByOwnershipName); }
public void GivenSerializedItem_WhenDerived_ThenOwnedByPartyNameIsSet() { var customer = this.InternalOrganisation.ActiveCustomers.First; var newItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.InternalOrganisation).Build(); newItem.OwnedBy = customer; this.Session.Derive(); Assert.Equal(customer.PartyName, newItem.OwnedByPartyName); }
public void GivenSerializedItem_WhenAddingWithSameSerialNumber_ThenError() { var good = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(this.InternalOrganisation).Build(); var serialNumber = good.SerialisedItems.First.SerialNumber; var newItem = new SerialisedItemBuilder(this.Session).WithSerialNumber(serialNumber).Build(); good.AddSerialisedItem(newItem); var expectedErrorMessage = ErrorMessages.SameSerialNumber; var errors = new List <string>(this.Session.Derive(false).Errors.Select(v => v.Message)); Assert.Contains(expectedErrorMessage, errors); }
/* * Create PurchaseOrder with Serialized PurchaseOrderItem */ public static PurchaseOrder CreatePurchaseOrderWithSerializedItem(this Organisation @this) { var serializedPart = new UnifiedGoodBuilder(@this.Session()).WithSerialisedDefaults(@this).Build(); var serializedItem = new SerialisedItemBuilder(@this.Session()).WithDefaults(@this).Build(); serializedPart.AddSerialisedItem(serializedItem); var purchaseOrder = new PurchaseOrderBuilder(@this.Session()).WithDefaults(@this).Build(); var item = new PurchaseOrderItemBuilder(@this.Session()).WithSerializedPartDefaults(serializedPart, serializedItem).Build(); purchaseOrder.AddPurchaseOrderItem(item); return(purchaseOrder); }
public void GivenSerializedItem_WhenDerived_ThenAvailabilityIsSet() { var available = new SerialisedItemAvailabilities(this.Session).Available; var notAvailable = new SerialisedItemAvailabilities(this.Session).NotAvailable; var newItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.InternalOrganisation).Build(); this.Session.Derive(); Assert.Equal(available, newItem.SerialisedItemAvailability); newItem.SerialisedItemAvailability = notAvailable; this.Session.Derive(); Assert.Equal(notAvailable, newItem.SerialisedItemAvailability); }
public static UnifiedGood CreateUnifiedWithGoodInventoryAvailableForSale(this Organisation @this, Faker faker) { var unifiedGood = new UnifiedGoodBuilder(@this.Session()).WithSerialisedDefaults(@this).Build(); var serialisedItem = new SerialisedItemBuilder(@this.Session()).WithForSaleDefaults(@this).Build(); unifiedGood.AddSerialisedItem(serialisedItem); new InventoryItemTransactionBuilder(@this.Session()) .WithSerialisedItem(serialisedItem) .WithFacility(@this.FacilitiesWhereOwner.First) .WithQuantity(1) .WithReason(new InventoryTransactionReasons(@this.Session()).IncomingShipment) .WithSerialisedInventoryItemState(new SerialisedInventoryItemStates(@this.Session()).Good) .Build(); return(unifiedGood); }
public static SerialisedItemBuilder WithForSaleDefaults(this SerialisedItemBuilder @this, Organisation internalOrganisation) { var faker = @this.Session.Faker(); var serviceDate = faker.Date.Past(refDate: @this.Session.Now()); var acquiredDate = faker.Date.Past(refDate: serviceDate); var replacementValue = Convert.ToDecimal(faker.Commerce.Price()); var expectedSalesPrice = Convert.ToDecimal(faker.Commerce.Price(replacementValue + 1000, replacementValue + 10000)); @this.WithName(faker.Lorem.Word()); @this.WithSerialisedItemAvailability(new SerialisedItemAvailabilities(@this.Session).Available); @this.WithSerialisedItemState(faker.Random.ListItem(@this.Session.Extent <SerialisedItemState>())); @this.WithDescription(faker.Lorem.Sentence()); @this.WithKeywords(faker.Lorem.Sentence()); @this.WithInternalComment(faker.Lorem.Sentence()); @this.WithAcquiredDate(acquiredDate); @this.WithLastServiceDate(serviceDate); @this.WithNextServiceDate(faker.Date.Future(refDate: serviceDate)); @this.WithSerialNumber(faker.Random.AlphaNumeric(12)); @this.WithOwnership(faker.Random.ListItem(@this.Session.Extent <Ownership>())); @this.WithManufacturingYear(serviceDate.Year - 5); @this.WithAssignedPurchasePrice(Convert.ToDecimal(faker.Commerce.Price(replacementValue))); @this.WithExpectedSalesPrice(expectedSalesPrice); @this.WithPrimaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithSecondaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithSecondaryPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAdditionalPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAdditionalPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAdditionalPhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithPrivatePhoto(new MediaBuilder(@this.Session).WithInDataUri(faker.Image.DataUri(width: 800, height: 600)).Build()); @this.WithAvailableForSale(true); @this.WithOwnedBy(internalOrganisation); foreach (Locale additionalLocale in @this.Session.GetSingleton().AdditionalLocales) { @this.WithLocalisedName(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Word()).WithLocale(additionalLocale).Build()); @this.WithLocalisedDescription(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); @this.WithLocalisedKeyword(new LocalisedTextBuilder(@this.Session).WithText(faker.Lorem.Sentence()).WithLocale(additionalLocale).Build()); } return(@this); }
public void GivenInventoryItem_WhenBuild_ThenPostBuildRelationsMustExist() { // Arrange var available = new SerialisedInventoryItemStates(this.Session).Available; var warehouse = new Facilities(this.Session).FindBy(M.Facility.FacilityType, new FacilityTypes(this.Session).Warehouse); var kinds = new InventoryItemKinds(this.Session); var serialItem = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); var finishedGood = CreatePart("1", kinds.Serialised); finishedGood.AddSerialisedItem(serialItem); var serialInventoryItem = new SerialisedInventoryItemBuilder(this.Session).WithSerialisedItem(serialItem).WithPart(finishedGood).Build(); // Act this.Session.Derive(true); // Assert Assert.Equal(available, serialInventoryItem.SerialisedInventoryItemState); Assert.Equal(warehouse, serialInventoryItem.Facility); }
public void GivenSerializedItemInMultipleFacilities_WhenDeriving_ThenMultipleQuantityOnHandTracked() { // Arrange var warehouseType = new FacilityTypes(this.Session).Warehouse; var warehouse1 = CreateFacility("WH1", warehouseType, this.InternalOrganisation); var warehouse2 = CreateFacility("WH2", warehouseType, this.InternalOrganisation); var serialized = new InventoryItemKinds(this.Session).Serialised; var piece = new UnitsOfMeasure(this.Session).Piece; var unknown = new InventoryTransactionReasons(this.Session).Unknown; var vatRate21 = new VatRateBuilder(this.Session).WithRate(21).Build(); var category = new ProductCategoryBuilder(this.Session).WithName("category").Build(); var finishedGood = CreatePart("FG1", serialized); var serialItem1 = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); var serialItem2 = new SerialisedItemBuilder(this.Session).WithSerialNumber("2").Build(); finishedGood.AddSerialisedItem(serialItem1); finishedGood.AddSerialisedItem(serialItem2); var good = CreateGood("10101", vatRate21, "good1", piece, category, finishedGood); // Act this.Session.Derive(true); CreateInventoryTransaction(1, unknown, finishedGood, serialItem1, warehouse1); CreateInventoryTransaction(1, unknown, finishedGood, serialItem2, warehouse2); this.Session.Derive(true); // Assert var item1 = (SerialisedInventoryItem) new InventoryItems(this.Session).Extent().First(i => i.Facility.Equals(warehouse1)); Assert.Equal(1, item1.QuantityOnHand); var item2 = (SerialisedInventoryItem) new InventoryItems(this.Session).Extent().First(i => i.Facility.Equals(warehouse2)); Assert.Equal(1, item2.QuantityOnHand); Assert.Equal(2, finishedGood.QuantityOnHand); }
public void CreateCustomerShipmentItemForSerialisedUnifiedGood() { var before = customerShipment.ShipmentItems.ToArray(); var goods = new UnifiedGoods(this.Session).Extent(); goods.Filter.AddEquals(M.UnifiedGood.InventoryItemKind.RoleType, new InventoryItemKinds(this.Session).Serialised); var serializedGood = goods.First; var serialisedItem = new SerialisedItemBuilder(this.Session).WithForSaleDefaults(this.internalOrganisation).Build(); serializedGood.AddSerialisedItem(serialisedItem); this.Session.Derive(); this.Session.Commit(); this.shipmentListPage.Table.DefaultAction(customerShipment); var shipmentOverview = new CustomerShipmentOverviewComponent(this.shipmentListPage.Driver); var shipmentItemOverview = shipmentOverview.ShipmentitemOverviewPanel.Click(); var shipmentItemCreate = shipmentItemOverview.CreateShipmentItem(); shipmentItemCreate .Good.Select(serializedGood.Name) .ShipmentItemSerialisedItem_1.Select(serialisedItem) .NextSerialisedItemAvailability.Select(new SerialisedItemAvailabilities(this.Session).Sold) .SAVE.Click(); this.Driver.WaitForAngular(); this.Session.Rollback(); var after = customerShipment.ShipmentItems.ToArray(); Assert.Equal(after.Length, before.Length + 1); var actual = after.Except(before).First(); Assert.Equal(serializedGood.Name, actual.Good.Name); Assert.Equal(serialisedItem.Name, actual.SerialisedItem.Name); Assert.Equal(1, actual.Quantity); }
public void GivenInventoryItem_WhenDeriving_ThenRequiredRelationsMustExist() { // Arrange var serialItem = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); var part = new NonUnifiedPartBuilder(this.Session).WithName("part") .WithInventoryItemKind(new InventoryItemKinds(this.Session).Serialised) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .WithSerialisedItem(serialItem) .Build(); this.Session.Derive(true); this.Session.Commit(); var builder = new SerialisedInventoryItemBuilder(this.Session).WithPart(part); builder.Build(); // Act var derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); // Re-arrange this.Session.Rollback(); builder.WithSerialisedItem(serialItem); builder.Build(); // Act derivation = this.Session.Derive(false); // Assert Assert.False(derivation.HasErrors); }
public void Execute() { var singleton = this.Session.GetSingleton(); var dutchLocale = new Locales(this.Session).DutchNetherlands; singleton.AddAdditionalLocale(dutchLocale); var euro = new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR"); var be = new Countries(this.Session).FindBy(M.Country.IsoCode, "BE"); var us = new Countries(this.Session).FindBy(M.Country.IsoCode, "US"); var email2 = new EmailAddressBuilder(this.Session) .WithElectronicAddressString("*****@*****.**") .Build(); var allorsLogo = this.DataPath + @"\www\admin\images\logo.png"; var allors = Organisations.CreateInternalOrganisation( session: this.Session, name: "Allors BVBA", address: "Kleine Nieuwedijkstraat 4", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 335 2335", phone1Purpose: new ContactMechanismPurposes(this.Session).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.allors.com", taxNumber: "BE 0476967014", bankName: "ING", facilityName: "Allors warehouse 1", bic: "BBRUBEBB", iban: "BE89 3200 1467 7685", currency: euro, logo: allorsLogo, storeName: "Allors Store", billingProcess: new BillingProcesses(this.Session).BillingForOrderItems, outgoingShipmentNumberPrefix: "a-CS", salesInvoiceNumberPrefix: "a-SI", salesOrderNumberPrefix: "a-SO", requestNumberPrefix: "a-RFQ", quoteNumberPrefix: "a-Q", productNumberPrefix: "A-", requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, invoiceCounterValue: 1); var dipu = Organisations.CreateInternalOrganisation( session: this.Session, name: "Dipu BVBA", address: "Kleine Nieuwedijkstraat 2", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 15 49 49 49", phone1Purpose: new ContactMechanismPurposes(this.Session).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.dipu.com", taxNumber: "BE 0445366489", bankName: "ING", facilityName: "Dipu Facility", bic: "BBRUBEBB", iban: "BE23 3300 6167 6391", currency: euro, logo: allorsLogo, storeName: "Dipu Store", billingProcess: new BillingProcesses(this.Session).BillingForOrderItems, outgoingShipmentNumberPrefix: "d-CS", salesInvoiceNumberPrefix: "d-SI", salesOrderNumberPrefix: "d-SO", requestNumberPrefix: "d-RFQ", quoteNumberPrefix: "d-Q", productNumberPrefix: "D-", requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, invoiceCounterValue: 1); singleton.Settings.DefaultFacility = allors.FacilitiesWhereOwner.First; this.SetupUser(allors, "*****@*****.**", "first", "allors employee", "letmein"); this.SetupUser(allors, "*****@*****.**", "second", "allors employee", "letmein"); this.SetupUser(dipu, "*****@*****.**", "first", "dipu employee", "letmein"); new FacilityBuilder(this.Session) .WithName("Allors warehouse 2") .WithFacilityType(new FacilityTypes(this.Session).Warehouse) .WithOwner(allors) .Build(); var manufacturer = new OrganisationBuilder(this.Session).WithName("Gizmo inc.").WithIsManufacturer(true).Build(); var productType = new ProductTypeBuilder(this.Session) .WithName($"Gizmo Serialized") .WithSerialisedItemCharacteristicType(new SerialisedItemCharacteristicTypeBuilder(this.Session) .WithName("Size") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Afmeting").WithLocale(dutchLocale).Build()) .Build()) .WithSerialisedItemCharacteristicType(new SerialisedItemCharacteristicTypeBuilder(this.Session) .WithName("Weight") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Gewicht").WithLocale(dutchLocale).Build()) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Kilogram) .Build()) .Build(); var vatRate = new VatRateBuilder(this.Session).WithRate(21).Build(); var brand = new BrandBuilder(this.Session) .WithName("brand1") .WithModel(new ModelBuilder(this.Session).WithName("model1").Build()) .Build(); var finishedGood = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new SkuIdentificationBuilder(this.Session) .WithIdentification("10101") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Sku).Build()) .WithName("finished good") .WithBrand(brand) .WithModel(brand.Models[0]) .WithManufacturedBy(manufacturer) .WithInventoryItemKind(new InventoryItemKinds(this.Session).NonSerialised) .Build(); var good1 = new NonUnifiedGoodBuilder(this.Session) .WithName("Tiny blue round gizmo") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Zeer kleine blauwe ronde gizmo").WithLocale(dutchLocale).Build()) .WithDescription("Perfect blue with nice curves") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Perfect blauw met mooie rondingen").WithLocale(dutchLocale).Build()) .WithVatRate(vatRate) .WithPart(finishedGood) .Build(); new InventoryItemTransactionBuilder(this.Session).WithPart(finishedGood).WithQuantity(100).WithReason(new InventoryTransactionReasons(this.Session).Unknown).Build(); var finishedGood2 = new NonUnifiedPartBuilder(this.Session) .WithName("finished good2") .WithInventoryItemKind(new InventoryItemKinds(this.Session).Serialised) .WithProductType(productType) .WithProductIdentification(new SkuIdentificationBuilder(this.Session) .WithIdentification("10102") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Sku).Build()) .WithManufacturedBy(manufacturer) .Build(); var good2 = new NonUnifiedGoodBuilder(this.Session) .WithName("Tiny red round gizmo") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Zeer kleine rode ronde gizmo").WithLocale(dutchLocale).Build()) .WithDescription("Perfect red with nice curves") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Perfect rood met mooie rondingen").WithLocale(dutchLocale).Build()) .WithVatRate(vatRate) .WithPart(finishedGood2) .Build(); var serialisedItem = new SerialisedItemBuilder(this.Session).WithSerialNumber("1").Build(); finishedGood2.AddSerialisedItem(serialisedItem); new SerialisedInventoryItemBuilder(this.Session).WithPart(finishedGood2).WithSerialisedItem(serialisedItem).WithFacility(allors.StoresWhereInternalOrganisation.First.DefaultFacility).Build(); var finishedGood3 = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new SkuIdentificationBuilder(this.Session) .WithIdentification("10103") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Sku).Build()) .WithName("finished good3") .WithInventoryItemKind(new InventoryItemKinds(this.Session).NonSerialised) .WithManufacturedBy(manufacturer) .Build(); var good3 = new NonUnifiedGoodBuilder(this.Session) .WithName("Tiny green round gizmo") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Zeer kleine groene ronde gizmo").WithLocale(dutchLocale).Build()) .WithDescription("Perfect red with nice curves") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Perfect groen met mooie rondingen").WithLocale(dutchLocale).Build()) .WithVatRate(vatRate) .WithPart(finishedGood3) .Build(); var productCategory1 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Best selling gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Meest verkochte gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory2 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Big Gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Grote Gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory3 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Small gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Kleine gizmo's").WithLocale(dutchLocale).Build()) .WithProduct(good1) .WithProduct(good2) .WithProduct(good3) .Build(); new CatalogueBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("New gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Nieuwe gizmo's").WithLocale(dutchLocale).Build()) .WithDescription("Latest in the world of Gizmo's") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Laatste in de wereld van Gizmo's").WithLocale(dutchLocale).Build()) .WithProductCategory(productCategory1) .Build(); this.Session.Derive(); for (int i = 0; i < 1; i++) { var acmePostalAddress = new PostalAddressBuilder(this.Session) .WithAddress1($"Acme{i} address 1") .WithPostalBoundary(new PostalBoundaryBuilder(this.Session).WithLocality($"Acme{i} city").WithPostalCode("1111").WithCountry(us).Build()) .Build(); var acmeBillingAddress = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(acmePostalAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).GeneralCorrespondence) .WithUseAsDefault(true) .Build(); var acmeInquiries = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(new TelecommunicationsNumberBuilder(this.Session).WithCountryCode("+1").WithContactNumber("111 222 333").Build()) .WithContactPurpose(new ContactMechanismPurposes(this.Session).GeneralPhoneNumber) .WithContactPurpose(new ContactMechanismPurposes(this.Session).OrderInquiriesPhone) .WithUseAsDefault(true) .Build(); var acme = new OrganisationBuilder(this.Session) .WithName($"Acme{i}") .WithLocale(new Locales(this.Session).EnglishUnitedStates) .WithPartyContactMechanism(acmeBillingAddress) .WithPartyContactMechanism(acmeInquiries) .Build(); var contact1Email = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(new EmailAddressBuilder(this.Session).WithElectronicAddressString($"employee1@acme{i}.com").Build()) .WithContactPurpose(new ContactMechanismPurposes(this.Session).PersonalEmailAddress) .WithUseAsDefault(true) .Build(); var contact2PhoneNumber = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(new TelecommunicationsNumberBuilder(this.Session).WithCountryCode("+1").WithAreaCode("123").WithContactNumber("456").Build()) .WithContactPurpose(new ContactMechanismPurposes(this.Session).GeneralPhoneNumber) .WithUseAsDefault(true) .Build(); var contact1 = new PersonBuilder(this.Session) .WithFirstName($"John{i}") .WithLastName($"Doe{i}") .WithGender(new GenderTypes(this.Session).Male) .WithLocale(new Locales(this.Session).EnglishUnitedStates) .WithPartyContactMechanism(contact1Email) .Build(); var contact2 = new PersonBuilder(this.Session) .WithFirstName($"Jane{i}") .WithLastName($"Doe{i}") .WithGender(new GenderTypes(this.Session).Male) .WithLocale(new Locales(this.Session).EnglishUnitedStates) .WithPartyContactMechanism(contact2PhoneNumber) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(acme) .WithInternalOrganisation(allors) .WithFromDate(DateTime.UtcNow) .Build(); new SupplierRelationshipBuilder(this.Session) .WithSupplier(acme) .WithInternalOrganisation(allors) .WithFromDate(DateTime.UtcNow) .Build(); new OrganisationContactRelationshipBuilder(this.Session) .WithOrganisation(acme) .WithContact(contact1) .WithContactKind(new OrganisationContactKinds(this.Session).FindBy(M.OrganisationContactKind.Description, "General contact")) .WithFromDate(DateTime.UtcNow) .Build(); new OrganisationContactRelationshipBuilder(this.Session) .WithOrganisation(acme) .WithContact(contact2) .WithContactKind(new OrganisationContactKinds(this.Session).FindBy(M.OrganisationContactKind.Description, "General contact")) .WithFromDate(DateTime.UtcNow) .Build(); var administrator = (Person) new UserGroups(this.Session).Administrators.Members.First; new FaceToFaceCommunicationBuilder(this.Session) .WithDescription($"Meeting {i}") .WithSubject($"meeting {i}") .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithFromParty(contact1) .WithToParty(contact2) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new EmailCommunicationBuilder(this.Session) .WithDescription($"Email {i}") .WithSubject($"email {i}") .WithFromEmail(email2) .WithToEmail(email2) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new LetterCorrespondenceBuilder(this.Session) .WithDescription($"Letter {i}") .WithSubject($"letter {i}") .WithFromParty(administrator) .WithToParty(contact1) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new PhoneCommunicationBuilder(this.Session) .WithDescription($"Phone {i}") .WithSubject($"phone {i}") .WithFromParty(administrator) .WithToParty(contact1) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); var salesOrderItem1 = new SalesOrderItemBuilder(this.Session) .WithDescription("first item") .WithProduct(good1) .WithActualUnitPrice(3000) .WithQuantityOrdered(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesOrderItem2 = new SalesOrderItemBuilder(this.Session) .WithDescription("second item") .WithActualUnitPrice(2000) .WithQuantityOrdered(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesOrderItem3 = new SalesOrderItemBuilder(this.Session) .WithDescription("Fee") .WithActualUnitPrice(100) .WithQuantityOrdered(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Fee) .Build(); var order = new SalesOrderBuilder(this.Session) .WithTakenBy(allors) .WithBillToCustomer(acme) .WithBillToEndCustomerContactMechanism(acmeBillingAddress.ContactMechanism) .WithSalesOrderItem(salesOrderItem1) .WithSalesOrderItem(salesOrderItem2) .WithSalesOrderItem(salesOrderItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithVatRegime(new VatRegimes(this.Session).Assessable) .Build(); var salesInvoiceItem1 = new SalesInvoiceItemBuilder(this.Session) .WithDescription("first item") .WithProduct(good1) .WithActualUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesInvoiceItem2 = new SalesInvoiceItemBuilder(this.Session) .WithDescription("second item") .WithActualUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var salesInvoiceItem3 = new SalesInvoiceItemBuilder(this.Session) .WithDescription("Fee") .WithActualUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Fee) .Build(); var salesInvoice = new SalesInvoiceBuilder(this.Session) .WithBilledFrom(allors) .WithInvoiceNumber("1") .WithBillToCustomer(acme) .WithBillToContactMechanism(acme.PartyContactMechanisms[0].ContactMechanism) .WithBillToEndCustomerContactMechanism(acmeBillingAddress.ContactMechanism) .WithSalesInvoiceItem(salesInvoiceItem1) .WithSalesInvoiceItem(salesInvoiceItem2) .WithSalesInvoiceItem(salesInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithSalesInvoiceType(new SalesInvoiceTypes(this.Session).SalesInvoice) .WithVatRegime(new VatRegimes(this.Session).Assessable) .Build(); var purchaseInvoiceItem1 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("first item") .WithProduct(good1) .WithActualUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem2 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("second item") .WithActualUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem3 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("Fee") .WithActualUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Fee) .Build(); var purchaseInvoice = new PurchaseInvoiceBuilder(this.Session) .WithBilledTo(allors) .WithInvoiceNumber("1") .WithBilledFrom(acme) .WithPurchaseInvoiceItem(purchaseInvoiceItem1) .WithPurchaseInvoiceItem(purchaseInvoiceItem2) .WithPurchaseInvoiceItem(purchaseInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Purchase of 1 used Aircraft Towbar") .WithPurchaseInvoiceType(new PurchaseInvoiceTypes(this.Session).PurchaseInvoice) .WithVatRegime(new VatRegimes(this.Session).Assessable) .Build(); } this.Session.Derive(); }
public void BaseQuickReceive(PurchaseOrderItemQuickReceive method) { var session = this.Session(); var order = this.PurchaseOrderWherePurchaseOrderItem; if (this.ExistPart) { var shipment = new PurchaseShipmentBuilder(session) .WithShipmentMethod(new ShipmentMethods(session).Ground) .WithShipToParty(order.OrderedBy) .WithShipFromParty(order.TakenViaSupplier) .WithShipToFacility(order.Facility) .Build(); var shipmentItem = new ShipmentItemBuilder(session) .WithPart(this.Part) .WithQuantity(this.QuantityOrdered) .WithUnitPurchasePrice(this.UnitPrice) .WithContentsDescription($"{this.QuantityOrdered} * {this.Part.Name}") .Build(); shipment.AddShipmentItem(shipmentItem); new OrderShipmentBuilder(session) .WithOrderItem(this) .WithShipmentItem(shipmentItem) .WithQuantity(this.QuantityOrdered) .Build(); new ShipmentReceiptBuilder(session) .WithQuantityAccepted(this.QuantityOrdered) .WithShipmentItem(shipmentItem) .WithOrderItem(this) .Build(); if (this.Part.InventoryItemKind.Serialised) { var serialisedItem = this.SerialisedItem; if (!this.ExistSerialisedItem) { serialisedItem = new SerialisedItemBuilder(session) .WithSerialNumber(this.SerialNumber) .Build(); this.Part.AddSerialisedItem(serialisedItem); } shipmentItem.SerialisedItem = serialisedItem; // HACK: DerivedRoles (WIP) var serialisedItemDeriveRoles = (SerialisedItemDerivedRoles)serialisedItem; serialisedItemDeriveRoles.PurchaseOrder = order; serialisedItemDeriveRoles.SuppliedBy = order.TakenViaSupplier; serialisedItem.RemoveAssignedPurchasePrice(); serialisedItemDeriveRoles.PurchasePrice = this.TotalExVat; serialisedItem.OwnedBy = order.OrderedBy; serialisedItem.Buyer = order.OrderedBy; serialisedItem.SerialisedItemAvailability = new SerialisedItemAvailabilities(this.Session()).Available; var inventoryItem = serialisedItem.SerialisedInventoryItemsWhereSerialisedItem .FirstOrDefault(v => v.SerialisedItem.Equals(serialisedItem) && v.Facility.Equals(order.Facility)); if (inventoryItem == null) { new SerialisedInventoryItemBuilder(this.Session()) .WithSerialisedItem(serialisedItem) .WithSerialisedInventoryItemState(new SerialisedInventoryItemStates(this.Session()).Good) .WithPart(this.Part) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session()).Piece) .WithFacility(order.Facility) .Build(); } } if (shipment.ShipToParty is InternalOrganisation internalOrganisation) { if (internalOrganisation.IsAutomaticallyReceived) { shipment.Receive(); } } } else { this.QuantityReceived = 1; } }
public void BaseQuickReceive(PurchaseOrderQuickReceive method) { var session = this.Session(); if (this.ValidOrderItems.Any(v => ((PurchaseOrderItem)v).IsReceivable)) { var shipment = new PurchaseShipmentBuilder(session) .WithShipmentMethod(new ShipmentMethods(session).Ground) .WithShipToParty(this.OrderedBy) .WithShipToAddress(this.DerivedShipToAddress) .WithShipFromParty(this.TakenViaSupplier) .WithShipToFacility(this.StoredInFacility) .Build(); foreach (PurchaseOrderItem orderItem in this.ValidOrderItems) { ShipmentItem shipmentItem = null; if (orderItem.PurchaseOrderItemShipmentState.IsNotReceived && orderItem.ExistPart) { shipmentItem = new ShipmentItemBuilder(session) .WithPart(orderItem.Part) .WithStoredInFacility(orderItem.StoredInFacility) .WithQuantity(orderItem.QuantityOrdered) .WithUnitPurchasePrice(orderItem.UnitPrice) .WithContentsDescription($"{orderItem.QuantityOrdered} * {orderItem.Part.Name}") .Build(); shipment.AddShipmentItem(shipmentItem); new OrderShipmentBuilder(session) .WithOrderItem(orderItem) .WithShipmentItem(shipmentItem) .WithQuantity(orderItem.QuantityOrdered) .Build(); if (orderItem.Part.InventoryItemKind.IsSerialised) { var serialisedItem = orderItem.SerialisedItem; if (!orderItem.ExistSerialisedItem) { serialisedItem = new SerialisedItemBuilder(session) .WithSerialNumber(orderItem.SerialNumber) .Build(); orderItem.Part.AddSerialisedItem(serialisedItem); } shipmentItem.SerialisedItem = serialisedItem; serialisedItem.AcquiredDate = orderItem.PurchaseOrderWherePurchaseOrderItem.OrderDate; if (serialisedItem.ExistAcquiredDate && serialisedItem.ExistAcquisitionYear) { serialisedItem.RemoveAcquisitionYear(); } if (this.OrderedBy.SerialisedItemSoldOns.Contains(new SerialisedItemSoldOns(this.Session()).PurchaseshipmentReceive)) { serialisedItem.Buyer = this.OrderedBy; serialisedItem.OwnedBy = this.OrderedBy; serialisedItem.Ownership = new Ownerships(this.Session()).Own; } } } } if (shipment.ShipToParty is InternalOrganisation internalOrganisation) { if (internalOrganisation.IsAutomaticallyReceived) { shipment.Receive(); } } } }
public static void Full(this Singleton @this, DirectoryInfo dataPath, Faker faker) { var dutchLocale = new Locales(@this.Session()).DutchNetherlands; @this.AddAdditionalLocale(dutchLocale); var administrator = new PersonBuilder(@this.Session()).WithUserName("administrator").Build(); new UserGroups(@this.Session()).Administrators.AddMember(administrator); new UserGroups(@this.Session()).Creators.AddMember(administrator); @this.Session().Derive(); var euro = new Currencies(@this.Session()).FindBy(M.Currency.IsoCode, "EUR"); var be = new Countries(@this.Session()).FindBy(M.Country.IsoCode, "BE"); var us = new Countries(@this.Session()).FindBy(M.Country.IsoCode, "US"); var allorsLogo = dataPath + @"\www\admin\images\logo.png"; var allors = Organisations.CreateInternalOrganisation( session: @this.Session(), name: "Allors BVBA", address: "Kleine Nieuwedijkstraat 4", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 335 2335", phone1Purpose: new ContactMechanismPurposes(@this.Session()).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.allors.com", taxNumber: "BE 0476967014", bankName: "ING", facilityName: "Allors Warehouse 1", bic: "BBRUBEBB", iban: "BE89 3200 1467 7685", currency: euro, logo: allorsLogo, storeName: "Allors Store", billingProcess: new BillingProcesses(@this.Session()).BillingForOrderItems, outgoingShipmentNumberPrefix: "a-CS", salesInvoiceNumberPrefix: "a-SI", salesOrderNumberPrefix: "a-SO", purchaseOrderNumberPrefix: "a-PO", purchaseInvoiceNumberPrefix: "a-PI", requestNumberPrefix: "a-RFQ", quoteNumberPrefix: "a-Q", productNumberPrefix: "A-", workEffortPrefix: "a-WO-", creditNoteNumberPrefix: "a-CN-", isImmediatelyPicked: true, autoGenerateShipmentPackage: true, isImmediatelyPacked: true, isAutomaticallyShipped: true, autoGenerateCustomerShipment: true, isAutomaticallyReceived: false, autoGeneratePurchaseShipment: false, useCreditNoteSequence: true, requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, purchaseOrderCounterValue: 1, invoiceCounterValue: 1, purchaseInvoiceCounterValue: 1, purchaseOrderNeedsApproval: true, purchaseOrderApprovalThresholdLevel1: 1000M, purchaseOrderApprovalThresholdLevel2: 5000M, serialisedItemSoldOn: new SerialisedItemSoldOns(@this.Session()).CustomerShipmentShip, collectiveWorkEffortInvoice: true); var dipu = Organisations.CreateInternalOrganisation( session: @this.Session(), name: "Dipu BVBA", address: "Kleine Nieuwedijkstraat 2", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 15 49 49 49", phone1Purpose: new ContactMechanismPurposes(@this.Session()).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.dipu.com", taxNumber: "BE 0445366489", bankName: "ING", facilityName: "Dipu Facility", bic: "BBRUBEBB", iban: "BE23 3300 6167 6391", currency: euro, logo: allorsLogo, storeName: "Dipu Store", billingProcess: new BillingProcesses(@this.Session()).BillingForOrderItems, outgoingShipmentNumberPrefix: "d-CS", salesInvoiceNumberPrefix: "d-SI", salesOrderNumberPrefix: "d-SO", purchaseOrderNumberPrefix: "d-PO", purchaseInvoiceNumberPrefix: "d-PI", requestNumberPrefix: "d-RFQ", quoteNumberPrefix: "d-Q", productNumberPrefix: "D-", workEffortPrefix: "a-WO-", creditNoteNumberPrefix: "d-CN-", isImmediatelyPicked: true, autoGenerateShipmentPackage: true, isImmediatelyPacked: true, isAutomaticallyShipped: true, autoGenerateCustomerShipment: true, isAutomaticallyReceived: false, autoGeneratePurchaseShipment: false, useCreditNoteSequence: true, requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, purchaseOrderCounterValue: 1, purchaseInvoiceCounterValue: 1, invoiceCounterValue: 1, purchaseOrderNeedsApproval: false, purchaseOrderApprovalThresholdLevel1: null, purchaseOrderApprovalThresholdLevel2: null, serialisedItemSoldOn: new SerialisedItemSoldOns(@this.Session()).CustomerShipmentShip, collectiveWorkEffortInvoice: true); // Give Administrator access new EmploymentBuilder(@this.Session()).WithEmployee(administrator).WithEmployer(allors).Build(); @this.Settings.DefaultFacility = allors.FacilitiesWhereOwner.First; var allorsEmployee1 = allors.CreateEmployee("letmein", faker); var allorsEmployee2 = allors.CreateEmployee("letmein", faker); var allorsProductQuoteApprover = allors.CreateEmployee("letmein", faker); var allorsPurchaseInvoiceApprover = allors.CreateEmployee("letmein", faker); var allorsPurchaseOrderApproverLevel1 = allors.CreateEmployee("letmein", faker); var allorsPurchaseOrderApproverLevel2 = allors.CreateEmployee("letmein", faker); var dipuEmployee = dipu.CreateEmployee("letmein", faker); var dipuProductQuoteApprover = dipu.CreateEmployee("letmein", faker); var dipuPurchaseInvoiceApprover = dipu.CreateEmployee("letmein", faker); new FacilityBuilder(@this.Session()) .WithName("Allors warehouse 2") .WithFacilityType(new FacilityTypes(@this.Session()).Warehouse) .WithOwner(allors) .Build(); var vatRate = new VatRateBuilder(@this.Session()).WithRate(21).Build(); var manufacturer = new OrganisationBuilder(@this.Session()).WithManufacturerDefaults(faker).Build(); allors.CreateSupplier(faker); allors.CreateSupplier(faker); allors.CreateSubContractor(faker); allors.CreateSubContractor(faker); @this.Session().Derive(); var nonSerialisedPart1 = allors.CreateNonSerialisedNonUnifiedPart(faker); var nonSerialisedPart2 = allors.CreateNonSerialisedNonUnifiedPart(faker); var serialisedPart1 = allors.CreateSerialisedNonUnifiedPart(faker); var serialisedPart2 = allors.CreateSerialisedNonUnifiedPart(faker); var good1 = new NonUnifiedGoodBuilder(@this.Session()).WithNonSerialisedPartDefaults(allors).Build(); var good2 = new NonUnifiedGoodBuilder(@this.Session()).WithSerialisedPartDefaults(allors).Build(); var serialisedItem = new SerialisedItemBuilder(@this.Session()).WithDefaults(allors).Build(); serialisedPart1.AddSerialisedItem(serialisedItem); new InventoryItemTransactionBuilder(@this.Session()) .WithSerialisedItem(serialisedItem) .WithFacility(allors.FacilitiesWhereOwner.First) .WithQuantity(1) .WithReason(new InventoryTransactionReasons(@this.Session()).IncomingShipment) .WithSerialisedInventoryItemState(new SerialisedInventoryItemStates(@this.Session()).Good) .Build(); var good3 = new NonUnifiedGoodBuilder(@this.Session()).WithNonSerialisedPartDefaults(allors).Build(); var good4 = new NonUnifiedGoodBuilder(@this.Session()).WithSerialisedPartDefaults(allors).Build(); var productCategory1 = new ProductCategoryBuilder(@this.Session()) .WithInternalOrganisation(allors) .WithName("Best selling gizmo's") .WithLocalisedName(new LocalisedTextBuilder(@this.Session()).WithText("Meest verkochte gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory2 = new ProductCategoryBuilder(@this.Session()) .WithInternalOrganisation(allors) .WithName("Big Gizmo's") .WithLocalisedName(new LocalisedTextBuilder(@this.Session()).WithText("Grote Gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory3 = new ProductCategoryBuilder(@this.Session()) .WithInternalOrganisation(allors) .WithName("Small gizmo's") .WithLocalisedName(new LocalisedTextBuilder(@this.Session()).WithText("Kleine gizmo's").WithLocale(dutchLocale).Build()) .WithProduct(good1) .WithProduct(good2) .WithProduct(good3) .WithProduct(good4) .Build(); new CatalogueBuilder(@this.Session()) .WithInternalOrganisation(allors) .WithName("New gizmo's") .WithLocalisedName(new LocalisedTextBuilder(@this.Session()).WithText("Nieuwe gizmo's").WithLocale(dutchLocale).Build()) .WithDescription("Latest in the world of Gizmo's") .WithLocalisedDescription(new LocalisedTextBuilder(@this.Session()).WithText("Laatste in de wereld van Gizmo's").WithLocale(dutchLocale).Build()) .WithProductCategory(productCategory1) .Build(); @this.Session().Derive(); var email2 = new EmailAddressBuilder(@this.Session()) .WithElectronicAddressString("*****@*****.**") .Build(); for (var i = 0; i < 10; i++) { var b2BCustomer = allors.CreateB2BCustomer(faker); @this.Session().Derive(); new FaceToFaceCommunicationBuilder(@this.Session()) .WithDescription($"Meeting {i}") .WithSubject($"meeting {i}") .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithFromParty(allors.CurrentContacts.First) .WithToParty(b2BCustomer.CurrentContacts.First) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); new EmailCommunicationBuilder(@this.Session()) .WithDescription($"Email {i}") .WithSubject($"email {i}") .WithFromParty(allors.CurrentContacts.First) .WithToParty(b2BCustomer.CurrentContacts.First) .WithFromEmail(allors.GeneralEmail) .WithToEmail(email2) .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); new LetterCorrespondenceBuilder(@this.Session()) .WithDescription($"Letter {i}") .WithSubject($"letter {i}") .WithFromParty(administrator) .WithToParty(b2BCustomer.CurrentContacts.First) .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); new PhoneCommunicationBuilder(@this.Session()) .WithDescription($"Phone {i}") .WithSubject($"phone {i}") .WithFromParty(administrator) .WithToParty(b2BCustomer.CurrentContacts.First) .WithEventPurpose(new CommunicationEventPurposes(@this.Session()).Meeting) .WithOwner(administrator) .WithActualStart(@this.Session().Now()) .Build(); var requestForQuote = new RequestForQuoteBuilder(@this.Session()) .WithEmailAddress($"customer{i}@acme.com") .WithTelephoneNumber("+1 234 56789") .WithRecipient(allors) .Build(); var requestItem = new RequestItemBuilder(@this.Session()) .WithSerialisedItem(serialisedItem) .WithProduct(serialisedItem.PartWhereSerialisedItem.NonUnifiedGoodsWherePart.FirstOrDefault()) .WithComment($"Comment {i}") .WithQuantity(1) .Build(); requestForQuote.AddRequestItem(requestItem); var quote = new ProductQuoteBuilder(@this.Session()).WithSerializedDefaults(allors).Build(); var salesOrderItem1 = new SalesOrderItemBuilder(@this.Session()) .WithDescription("first item") .WithProduct(good1) .WithAssignedUnitPrice(3000) .WithQuantityOrdered(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesOrderItem2 = new SalesOrderItemBuilder(@this.Session()) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantityOrdered(2) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesOrderItem3 = new SalesOrderItemBuilder(@this.Session()) .WithDescription("Fee") .WithAssignedUnitPrice(100) .WithQuantityOrdered(1) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).Fee) .Build(); var order = new SalesOrderBuilder(@this.Session()) .WithTakenBy(allors) .WithBillToCustomer(b2BCustomer) .WithBillToEndCustomerContactMechanism(b2BCustomer.BillingAddress) .WithSalesOrderItem(salesOrderItem1) .WithSalesOrderItem(salesOrderItem2) .WithSalesOrderItem(salesOrderItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithVatRegime(new VatRegimes(@this.Session()).Assessable) .Build(); var salesInvoiceItem1 = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("first item") .WithProduct(good1) .WithAssignedUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesInvoiceItem2 = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).ProductItem) .Build(); var salesInvoiceItem3 = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("Fee") .WithAssignedUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).Fee) .Build(); var exw = new IncoTermTypes(@this.Session()).Exw; var incoTerm = new IncoTermBuilder(@this.Session()).WithTermType(exw).WithTermValue("XW").Build(); var salesInvoice = new SalesInvoiceBuilder(@this.Session()) .WithBilledFrom(allors) .WithBillToCustomer(b2BCustomer) .WithBillToContactPerson(b2BCustomer.CurrentContacts.First) .WithBillToContactMechanism(b2BCustomer.BillingAddress) .WithSalesInvoiceItem(salesInvoiceItem1) .WithSalesInvoiceItem(salesInvoiceItem2) .WithSalesInvoiceItem(salesInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Sale of 1 used Aircraft Towbar") .WithSalesInvoiceType(new SalesInvoiceTypes(@this.Session()).SalesInvoice) .WithSalesTerm(incoTerm) .WithVatRegime(new VatRegimes(@this.Session()).Assessable) .Build(); for (var j = 0; j < 3; j++) { var salesInvoiceItem = new SalesInvoiceItemBuilder(@this.Session()) .WithDescription("Extra Charge") .WithAssignedUnitPrice(100 + j) .WithQuantity(j) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).MiscCharge) .Build(); salesInvoice.AddSalesInvoiceItem(salesInvoiceItem); } } @this.Session().Derive(); for (var i = 0; i < 4; i++) { var supplier = faker.Random.ListItem(allors.CurrentSuppliers); var purchaseInvoiceItem1 = new PurchaseInvoiceItemBuilder(@this.Session()) .WithDescription("first item") .WithPart(nonSerialisedPart1) .WithAssignedUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).PartItem) .Build(); var purchaseInvoiceItem2 = new PurchaseInvoiceItemBuilder(@this.Session()) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantity(2) .WithPart(nonSerialisedPart2) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).PartItem) .Build(); var purchaseInvoiceItem3 = new PurchaseInvoiceItemBuilder(@this.Session()) .WithDescription("Fee") .WithAssignedUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(@this.Session()).Fee) .Build(); var purchaseInvoice = new PurchaseInvoiceBuilder(@this.Session()) .WithBilledTo(allors) .WithBilledFrom(supplier) .WithPurchaseInvoiceItem(purchaseInvoiceItem1) .WithPurchaseInvoiceItem(purchaseInvoiceItem2) .WithPurchaseInvoiceItem(purchaseInvoiceItem3) .WithCustomerReference("a reference number") .WithDescription("Purchase of 1 used Aircraft Towbar") .WithPurchaseInvoiceType(new PurchaseInvoiceTypes(@this.Session()).PurchaseInvoice) .WithVatRegime(new VatRegimes(@this.Session()).Assessable) .Build(); var purchaseOrderItem1 = new PurchaseOrderItemBuilder(@this.Session()) .WithDescription("first purchase order item") .WithPart(nonSerialisedPart1) .WithQuantityOrdered(1) .Build(); var purchaseOrder = new PurchaseOrderBuilder(@this.Session()) .WithOrderedBy(allors) .WithTakenViaSupplier(supplier) .WithPurchaseOrderItem(purchaseOrderItem1) .WithCustomerReference("reference " + i) .Build(); } var anOrganisation = new Organisations(@this.Session()).FindBy(M.Organisation.IsInternalOrganisation, false); var item = new SerialisedItemBuilder(@this.Session()) .WithSerialNumber("112") .WithSerialisedItemAvailability(new SerialisedItemAvailabilities(@this.Session()).Sold) .WithAvailableForSale(false) .WithOwnedBy(anOrganisation) .Build(); nonSerialisedPart2.AddSerialisedItem(item); var workTask = new WorkTaskBuilder(@this.Session()) .WithTakenBy(allors) .WithCustomer(anOrganisation) .WithName("maintenance") .Build(); new WorkEffortFixedAssetAssignmentBuilder(@this.Session()) .WithFixedAsset(item) .WithAssignment(workTask) .Build(); var workOrderPart1 = allors.CreateNonSerialisedNonUnifiedPart(faker); var workOrderPart2 = allors.CreateNonSerialisedNonUnifiedPart(faker); var workOrderPart3 = allors.CreateNonSerialisedNonUnifiedPart(faker); @this.Session().Derive(); var workOrder = new WorkTaskBuilder(@this.Session()) .WithName("Task") .WithTakenBy(allors) .WithFacility(new Facilities(@this.Session()).Extent().First) .WithCustomer(anOrganisation) .WithWorkEffortPurpose(new WorkEffortPurposes(@this.Session()).Maintenance) .WithSpecialTerms("Net 45 Days") .Build(); new WorkEffortFixedAssetAssignmentBuilder(@this.Session()) .WithFixedAsset(item) .WithAssignment(workOrder) .WithComment("Busted tailpipe") .Build(); workOrder.CreateInventoryAssignment(workOrderPart1, 11); workOrder.CreateInventoryAssignment(workOrderPart2, 12); workOrder.CreateInventoryAssignment(workOrderPart3, 13); //// Work Effort Time Entries var yesterday = DateTimeFactory.CreateDateTime(@this.Session().Now().AddDays(-1)); var laterYesterday = DateTimeFactory.CreateDateTime(yesterday.AddHours(3)); var today = DateTimeFactory.CreateDateTime(@this.Session().Now()); var laterToday = DateTimeFactory.CreateDateTime(today.AddHours(4)); var tomorrow = DateTimeFactory.CreateDateTime(@this.Session().Now().AddDays(1)); var laterTomorrow = DateTimeFactory.CreateDateTime(tomorrow.AddHours(6)); var standardRate = new RateTypes(@this.Session()).StandardRate; var overtimeRate = new RateTypes(@this.Session()).OvertimeRate; var frequencies = new TimeFrequencies(@this.Session()); var timeEntryYesterday1 = workOrder.CreateTimeEntry(yesterday, laterYesterday, frequencies.Day, standardRate); var timeEntryToday1 = workOrder.CreateTimeEntry(today, laterToday, frequencies.Hour, standardRate); var timeEntryTomorrow1 = workOrder.CreateTimeEntry(tomorrow, laterTomorrow, frequencies.Minute, overtimeRate); allorsEmployee1.TimeSheetWhereWorker.AddTimeEntry(timeEntryYesterday1); allorsEmployee1.TimeSheetWhereWorker.AddTimeEntry(timeEntryToday1); allorsEmployee1.TimeSheetWhereWorker.AddTimeEntry(timeEntryTomorrow1); var timeEntryYesterday2 = workOrder.CreateTimeEntry(yesterday, laterYesterday, frequencies.Day, standardRate); var timeEntryToday2 = workOrder.CreateTimeEntry(today, laterToday, frequencies.Hour, standardRate); var timeEntryTomorrow2 = workOrder.CreateTimeEntry(tomorrow, laterTomorrow, frequencies.Minute, overtimeRate); allorsEmployee2.TimeSheetWhereWorker.AddTimeEntry(timeEntryYesterday2); allorsEmployee2.TimeSheetWhereWorker.AddTimeEntry(timeEntryToday2); allorsEmployee2.TimeSheetWhereWorker.AddTimeEntry(timeEntryTomorrow2); var po = new PurchaseOrders(@this.Session()).Extent().First; foreach (PurchaseOrderItem purchaseOrderItem in po.PurchaseOrderItems) { new WorkEffortPurchaseOrderItemAssignmentBuilder(@this.Session()) .WithPurchaseOrderItem(purchaseOrderItem) .WithAssignment(workOrder) .WithQuantity(1) .Build(); } @this.Session().Derive(); }
public void Execute() { var singleton = this.Session.GetSingleton(); var dutchLocale = new Locales(this.Session).DutchNetherlands; singleton.AddAdditionalLocale(dutchLocale); var euro = new Currencies(this.Session).FindBy(M.Currency.IsoCode, "EUR"); var be = new Countries(this.Session).FindBy(M.Country.IsoCode, "BE"); var us = new Countries(this.Session).FindBy(M.Country.IsoCode, "US"); var email2 = new EmailAddressBuilder(this.Session) .WithElectronicAddressString("*****@*****.**") .Build(); var allorsLogo = this.DataPath + @"\www\admin\images\logo.png"; var serialisedItemSoldOns = new SerialisedItemSoldOn[] { new SerialisedItemSoldOns(this.Session).SalesInvoiceSend, new SerialisedItemSoldOns(this.Session).PurchaseInvoiceConfirm }; var allors = Organisations.CreateInternalOrganisation( session: this.Session, name: "Allors BVBA", address: "Kleine Nieuwedijkstraat 4", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 335 2335", phone1Purpose: new ContactMechanismPurposes(this.Session).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.allors.com", taxNumber: "BE 0476967014", bankName: "ING", facilityName: "Allors warehouse 1", bic: "BBRUBEBB", iban: "BE89 3200 1467 7685", currency: euro, logo: allorsLogo, storeName: "Allors Store", billingProcess: new BillingProcesses(this.Session).BillingForOrderItems, outgoingShipmentNumberPrefix: "a-CS", salesInvoiceNumberPrefix: "a-SI", salesOrderNumberPrefix: "a-SO", purchaseOrderNumberPrefix: "a-PO", purchaseInvoiceNumberPrefix: "a-PI", requestNumberPrefix: "a-RFQ", quoteNumberPrefix: "a-Q", productNumberPrefix: "A-", workEffortPrefix: "a-WO-", creditNoteNumberPrefix: "a-CN-", isImmediatelyPicked: true, autoGenerateShipmentPackage: true, isImmediatelyPacked: true, isAutomaticallyShipped: true, autoGenerateCustomerShipment: true, isAutomaticallyReceived: false, autoGeneratePurchaseShipment: false, useCreditNoteSequence: true, requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, purchaseOrderCounterValue: 1, purchaseInvoiceCounterValue: 1, invoiceCounterValue: 1, purchaseOrderNeedsApproval: true, purchaseOrderApprovalThresholdLevel1: 1000M, purchaseOrderApprovalThresholdLevel2: 5000M, serialisedItemSoldOns: serialisedItemSoldOns, collectiveWorkEffortInvoice: true); var dipu = Organisations.CreateInternalOrganisation( session: this.Session, name: "Dipu BVBA", address: "Kleine Nieuwedijkstraat 2", postalCode: "2800", locality: "Mechelen", country: be, phone1CountryCode: "+32", phone1: "2 15 49 49 49", phone1Purpose: new ContactMechanismPurposes(this.Session).GeneralPhoneNumber, phone2CountryCode: string.Empty, phone2: string.Empty, phone2Purpose: null, emailAddress: "*****@*****.**", websiteAddress: "www.dipu.com", taxNumber: "BE 0445366489", bankName: "ING", facilityName: "Dipu Facility", bic: "BBRUBEBB", iban: "BE23 3300 6167 6391", currency: euro, logo: allorsLogo, storeName: "Dipu Store", billingProcess: new BillingProcesses(this.Session).BillingForOrderItems, outgoingShipmentNumberPrefix: "d-CS", salesInvoiceNumberPrefix: "d-SI", salesOrderNumberPrefix: "d-SO", purchaseOrderNumberPrefix: "d-PO", purchaseInvoiceNumberPrefix: "d-PI", requestNumberPrefix: "d-RFQ", quoteNumberPrefix: "d-Q", productNumberPrefix: "D-", workEffortPrefix: "d-WO-", creditNoteNumberPrefix: "d-CN-", isImmediatelyPicked: true, autoGenerateShipmentPackage: true, isImmediatelyPacked: true, isAutomaticallyShipped: true, autoGenerateCustomerShipment: true, isAutomaticallyReceived: false, autoGeneratePurchaseShipment: false, useCreditNoteSequence: true, requestCounterValue: 1, quoteCounterValue: 1, orderCounterValue: 1, purchaseOrderCounterValue: 1, purchaseInvoiceCounterValue: 1, invoiceCounterValue: 1, purchaseOrderNeedsApproval: false, purchaseOrderApprovalThresholdLevel1: null, purchaseOrderApprovalThresholdLevel2: null, serialisedItemSoldOns: serialisedItemSoldOns, collectiveWorkEffortInvoice: true); singleton.Settings.DefaultFacility = allors.FacilitiesWhereOwner.First; var faker = this.Session.Faker(); allors.CreateEmployee("letmein", faker); allors.CreateAdministrator("letmein", faker); var allorsB2BCustomer = allors.CreateB2BCustomer(this.Session.Faker()); var allorsB2CCustomer = allors.CreateB2CCustomer(this.Session.Faker()); allors.CreateSupplier(this.Session.Faker()); allors.CreateSubContractor(this.Session.Faker()); new CustomerRelationshipBuilder(this.Session) .WithCustomer(allorsB2BCustomer) .WithInternalOrganisation(dipu) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(allorsB2CCustomer) .WithInternalOrganisation(dipu) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(dipu) .WithInternalOrganisation(allors) .WithFromDate(this.Session.Now()) .Build(); dipu.CreateEmployee("letmein", faker); dipu.CreateAdministrator("letmein", faker); var dipuB2BCustomer = dipu.CreateB2BCustomer(this.Session.Faker()); var dipuB2CCustomer = dipu.CreateB2CCustomer(this.Session.Faker()); dipu.CreateSupplier(this.Session.Faker()); dipu.CreateSubContractor(this.Session.Faker()); new CustomerRelationshipBuilder(this.Session) .WithCustomer(dipuB2BCustomer) .WithInternalOrganisation(allors) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(dipuB2CCustomer) .WithInternalOrganisation(allors) .WithFromDate(this.Session.Now()) .Build(); new CustomerRelationshipBuilder(this.Session) .WithCustomer(allors) .WithInternalOrganisation(dipu) .WithFromDate(this.Session.Now()) .Build(); this.Session.Derive(); var facility = new FacilityBuilder(this.Session) .WithName("Allors warehouse 2") .WithFacilityType(new FacilityTypes(this.Session).Warehouse) .WithOwner(allors) .Build(); var store = new StoreBuilder(this.Session).WithName("store") .WithInternalOrganisation(allors) .WithDefaultFacility(facility) .WithDefaultShipmentMethod(new ShipmentMethods(this.Session).Ground) .WithDefaultCarrier(new Carriers(this.Session).Fedex) .Build(); var productType = new ProductTypeBuilder(this.Session) .WithName($"Gizmo Serialised") .WithSerialisedItemCharacteristicType(new SerialisedItemCharacteristicTypeBuilder(this.Session) .WithName("Size") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Afmeting").WithLocale(dutchLocale).Build()) .Build()) .WithSerialisedItemCharacteristicType(new SerialisedItemCharacteristicTypeBuilder(this.Session) .WithName("Weight") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Gewicht").WithLocale(dutchLocale).Build()) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Kilogram) .Build()) .Build(); var vatRate = new VatRateBuilder(this.Session).WithRate(21).Build(); var brand = new BrandBuilder(this.Session).WithDefaults().Build(); var good_1 = new UnifiedGoodBuilder(this.Session).WithNonSerialisedDefaults(allors).Build(); this.Session.Derive(); new InventoryItemTransactionBuilder(this.Session) .WithPart(good_1) .WithQuantity(100) .WithReason(new InventoryTransactionReasons(this.Session).Unknown) .Build(); var good_2 = new NonUnifiedGoodBuilder(this.Session) .WithSerialisedPartDefaults(allors) .Build(); var serialisedItem1 = new SerialisedItemBuilder(this.Session).WithDefaults(allors).Build(); good_2.Part.AddSerialisedItem(serialisedItem1); this.Session.Derive(); new SerialisedInventoryItemBuilder(this.Session) .WithPart(good_2.Part) .WithSerialisedItem(serialisedItem1) .WithFacility(allors.StoresWhereInternalOrganisation.First.DefaultFacility) .Build(); var good_3 = new NonUnifiedGoodBuilder(this.Session) .WithNonSerialisedPartDefaults(allors) .Build(); var good_4 = new UnifiedGoodBuilder(this.Session).WithSerialisedDefaults(allors).Build(); var productCategory_1 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Best selling gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Meest verkochte gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory_2 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Big Gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Grote Gizmo's").WithLocale(dutchLocale).Build()) .Build(); var productCategory_3 = new ProductCategoryBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("Small gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Kleine gizmo's").WithLocale(dutchLocale).Build()) .WithProduct(good_1) .WithProduct(good_2) .WithProduct(good_3) .WithProduct(good_4) .Build(); new CatalogueBuilder(this.Session) .WithInternalOrganisation(allors) .WithName("New gizmo's") .WithLocalisedName(new LocalisedTextBuilder(this.Session).WithText("Nieuwe gizmo's").WithLocale(dutchLocale).Build()) .WithDescription("Latest in the world of Gizmo's") .WithLocalisedDescription(new LocalisedTextBuilder(this.Session).WithText("Laatste in de wereld van Gizmo's").WithLocale(dutchLocale).Build()) .WithProductCategory(productCategory_1) .Build(); this.Session.Derive(); var administrator = (Person) new UserGroups(this.Session).Administrators.Members.First; new FaceToFaceCommunicationBuilder(this.Session) .WithDescription($"Meeting") .WithSubject($"meeting") .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithFromParty(allors.ActiveEmployees.First) .WithToParty(allors.ActiveCustomers.First) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new EmailCommunicationBuilder(this.Session) .WithDescription($"Email") .WithSubject($"email") .WithFromParty(allors.ActiveEmployees.First) .WithToParty(allors.ActiveCustomers.First) .WithFromEmail(allors.ActiveEmployees.First.GeneralEmail) .WithToEmail(allors.ActiveCustomers.First.GeneralEmail) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new LetterCorrespondenceBuilder(this.Session) .WithDescription($"Letter") .WithSubject($"letter") .WithFromParty(administrator) .WithToParty(allors.ActiveCustomers.First) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new PhoneCommunicationBuilder(this.Session) .WithDescription($"Phone") .WithSubject($"phone") .WithFromParty(administrator) .WithToParty(allors.ActiveCustomers.First) .WithEventPurpose(new CommunicationEventPurposes(this.Session).Meeting) .WithOwner(administrator) .WithActualStart(DateTime.UtcNow) .Build(); new SalesOrderBuilder(this.Session).WithOrganisationInternalDefaults(allors).Build(); new SalesOrderBuilder(this.Session).WithOrganisationExternalDefaults(allors).Build(); new SalesOrderBuilder(this.Session).WithPersonInternalDefaults(allors).Build(); new SalesOrderBuilder(this.Session).WithPersonExternalDefaults(allors).Build(); new SalesInvoiceBuilder(this.Session).WithSalesExternalB2BInvoiceDefaults(allors).Build(); new SupplierOfferingBuilder(this.Session) .WithPart(good_1) .WithSupplier(allors.ActiveSuppliers.First) .WithFromDate(this.Session.Now().AddMinutes(-1)) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session).Piece) .WithPrice(7) .WithCurrency(euro) .Build(); var purchaseInvoiceItem_1 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("first item") .WithPart(good_1) .WithAssignedUnitPrice(3000) .WithQuantity(1) .WithMessage(@"line1 line2") .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem_2 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("second item") .WithAssignedUnitPrice(2000) .WithQuantity(2) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).ProductItem) .Build(); var purchaseInvoiceItem_3 = new PurchaseInvoiceItemBuilder(this.Session) .WithDescription("Service") .WithAssignedUnitPrice(100) .WithQuantity(1) .WithInvoiceItemType(new InvoiceItemTypes(this.Session).Service) .Build(); var purchaseInvoice = new PurchaseInvoiceBuilder(this.Session) .WithBilledTo(allors) .WithInvoiceNumber("1") .WithBilledFrom(allors.ActiveSuppliers.First) .WithPurchaseInvoiceItem(purchaseInvoiceItem_1) .WithPurchaseInvoiceItem(purchaseInvoiceItem_2) .WithPurchaseInvoiceItem(purchaseInvoiceItem_3) .WithCustomerReference("a reference number") .WithDescription("Purchase of 1 used Aircraft Towbar") .WithPurchaseInvoiceType(new PurchaseInvoiceTypes(this.Session).PurchaseInvoice) .WithVatRegime(new VatRegimes(this.Session).Assessable21) .Build(); var purchaseOrderItem_1 = new PurchaseOrderItemBuilder(this.Session) .WithDescription("first purchase order item") .WithPart(good_1) .WithQuantityOrdered(1) .Build(); var purchaseOrder = new PurchaseOrderBuilder(this.Session) .WithOrderedBy(allors) .WithTakenViaSupplier(allors.ActiveSuppliers.First) .WithPurchaseOrderItem(purchaseOrderItem_1) .WithCustomerReference("reference 123") .WithStoredInFacility(facility) .Build(); var workTask = new WorkTaskBuilder(this.Session) .WithTakenBy(allors) .WithCustomer(allors.ActiveCustomers.First) .WithName("maintenance") .Build(); new PositionTypeBuilder(this.Session) .WithTitle("Mechanic") .WithUniqueId(new Guid("E62A8F4B-8045-472E-AB18-E39C51A02696")) .Build(); new PositionTypeRateBuilder(this.Session) .WithRate(100) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFrequency(new TimeFrequencies(this.Session).Hour) .Build(); this.Session.Derive(); // Serialized RFQ with Serialized Unified-Good var serializedRFQ = new RequestForQuoteBuilder(this.Session).WithSerializedDefaults(allors).Build(); // NonSerialized RFQ with NonSerialized Unified-Good var nonSerializedRFQ = new RequestForQuoteBuilder(this.Session).WithNonSerializedDefaults(allors).Build(); var quote = new ProductQuoteBuilder(this.Session) .WithIssuer(allors) .WithDescription("quote") .WithReceiver(allors.ActiveCustomers.First) .WithFullfillContactMechanism(allors.ActiveCustomers.First.GeneralCorrespondence) .Build(); this.Session.Derive(); var quoteItem = new QuoteItemBuilder(this.Session) .WithProduct(new Goods(this.Session).Extent().First) .WithQuantity(1) .WithAssignedUnitPrice(10) .Build(); quote.AddQuoteItem(quoteItem); this.Session.Derive(); var salesOrder = new SalesOrderBuilder(this.Session) .WithTakenBy(allors) .WithShipToCustomer(allors.ActiveCustomers.First) .Build(); this.Session.Derive(); var salesOrderItem = new SalesOrderItemBuilder(this.Session) .WithProduct(good_1) .WithQuantityOrdered(1) .WithAssignedUnitPrice(10) .Build(); salesOrder.AddSalesOrderItem(salesOrderItem); this.Session.Derive(); new CustomerShipmentBuilder(this.Session).WithDefaults(allors).Build(); this.Session.Derive(); new PurchaseShipmentBuilder(this.Session).WithDefaults(allors).Build(); this.Session.Derive(); }
public void BaseQuickReceive(PurchaseOrderQuickReceive method) { var session = this.Session(); if (this.ValidOrderItems.Any(v => ((PurchaseOrderItem)v).ExistPart)) { var shipment = new PurchaseShipmentBuilder(session) .WithShipmentMethod(new ShipmentMethods(session).Ground) .WithShipToParty(this.OrderedBy) .WithShipToAddress(this.ShipToAddress) .WithShipFromParty(this.TakenViaSupplier) .WithShipToFacility(this.Facility) .Build(); foreach (PurchaseOrderItem orderItem in this.ValidOrderItems) { ShipmentItem shipmentItem = null; if (orderItem.PurchaseOrderItemShipmentState.IsNotReceived && orderItem.ExistPart) { shipmentItem = new ShipmentItemBuilder(session) .WithPart(orderItem.Part) .WithQuantity(orderItem.QuantityOrdered) .WithUnitPurchasePrice(orderItem.UnitPrice) .WithContentsDescription($"{orderItem.QuantityOrdered} * {orderItem.Part.Name}") .Build(); shipment.AddShipmentItem(shipmentItem); new OrderShipmentBuilder(session) .WithOrderItem(orderItem) .WithShipmentItem(shipmentItem) .WithQuantity(orderItem.QuantityOrdered) .Build(); new ShipmentReceiptBuilder(session) .WithQuantityAccepted(orderItem.QuantityOrdered) .WithShipmentItem(shipmentItem) .WithOrderItem(orderItem) .Build(); if (orderItem.Part.InventoryItemKind.Serialised) { var serialisedItem = orderItem.SerialisedItem; if (!orderItem.ExistSerialisedItem) { serialisedItem = new SerialisedItemBuilder(session) .WithSerialNumber(orderItem.SerialNumber) .Build(); orderItem.Part.AddSerialisedItem(serialisedItem); } shipmentItem.SerialisedItem = serialisedItem; // HACK: DerivedRoles (WIP) var serialisedItemDeriveRoles = (SerialisedItemDerivedRoles)serialisedItem; serialisedItemDeriveRoles.PurchaseOrder = this; serialisedItemDeriveRoles.SuppliedBy = this.TakenViaSupplier; serialisedItem.RemoveAssignedPurchasePrice(); serialisedItemDeriveRoles.PurchasePrice = orderItem.TotalExVat; serialisedItem.AcquiredDate = orderItem.PurchaseOrderWherePurchaseOrderItem.OrderDate; if (serialisedItem.ExistAcquiredDate && serialisedItem.ExistAcquisitionYear) { serialisedItem.RemoveAcquisitionYear(); } serialisedItem.OwnedBy = this.OrderedBy; serialisedItem.Buyer = this.OrderedBy; serialisedItem.Ownership = new Ownerships(this.Session()).Own; serialisedItem.SerialisedItemAvailability = new SerialisedItemAvailabilities(this.Session()).Available; var inventoryItem = serialisedItem.SerialisedInventoryItemsWhereSerialisedItem .FirstOrDefault(v => v.SerialisedItem.Equals(serialisedItem) && v.Facility.Equals(this.Facility)); if (inventoryItem == null) { new SerialisedInventoryItemBuilder(this.Session()) .WithSerialisedItem(serialisedItem) .WithSerialisedInventoryItemState(new SerialisedInventoryItemStates(this.Session()).Good) .WithPart(orderItem.Part) .WithUnitOfMeasure(new UnitsOfMeasure(this.Session()).Piece) .WithFacility(this.Facility) .Build(); } } } } if (shipment.ShipToParty is InternalOrganisation internalOrganisation) { if (internalOrganisation.IsAutomaticallyReceived) { shipment.Receive(); } } } foreach (PurchaseOrderItem orderItem in this.ValidOrderItems.Where(v => !((PurchaseOrderItem)v).ExistPart)) { var orderItemDerivedRoles = (PurchaseOrderItemDerivedRoles)orderItem; orderItemDerivedRoles.QuantityReceived = 1; } }