public static void BaseOnDerivePartyFinancialRelationships(this Party @this, IDerivation derivation) { var internalOrganisations = new Organisations(@this.Strategy.Session).InternalOrganisations(); if (!internalOrganisations.Contains(@this)) { foreach (var internalOrganisation in internalOrganisations) { var partyFinancial = @this.PartyFinancialRelationshipsWhereParty.FirstOrDefault(v => Equals(v.InternalOrganisation, internalOrganisation)); if (partyFinancial == null) { partyFinancial = new PartyFinancialRelationshipBuilder(@this.Strategy.Session) .WithParty(@this) .WithInternalOrganisation(internalOrganisation) .Build(); } if (partyFinancial.SubAccountNumber == 0) { partyFinancial.SubAccountNumber = internalOrganisation.NextSubAccountNumber(); } } } }
public static void BaseOnDerive(this Request @this, ObjectOnDerive method) { var session = @this.Strategy.Session; if ([email protected]) { var internalOrganisations = new Organisations(session).InternalOrganisations(); if (internalOrganisations.Count() == 1) { @this.Recipient = internalOrganisations.Single(); } } if (@this.ExistRecipient && [email protected]) { @this.RequestNumber = @this.Recipient.NextRequestNumber(session.Now().Year); ((RequestDerivedRoles)@this).SortableRequestNumber = @this.Session().GetSingleton().SortableNumber(@this.Recipient.RequestNumberPrefix, @this.RequestNumber, @this.RequestDate.Year.ToString()); } @this.DeriveInitialObjectState(); @this.AddSecurityToken(new SecurityTokens(session).DefaultSecurityToken); }
public static void BaseOnDerive(this Request @this, ObjectOnDerive method) { var session = @this.Strategy.Session; if ([email protected]) { var internalOrganisations = new Organisations(session).InternalOrganisations(); if (internalOrganisations.Count() == 1) { @this.Recipient = internalOrganisations.Single(); } } if (@this.ExistRecipient && [email protected]) { var year = @this.RequestDate.Year; @this.RequestNumber = @this.Recipient.NextRequestNumber(year); var fiscalYearInternalOrganisationSequenceNumbers = @this.Recipient.FiscalYearsInternalOrganisationSequenceNumbers.FirstOrDefault(v => v.FiscalYear == year); var prefix = @this.Recipient.RequestSequence.IsEnforcedSequence ? @this.Recipient.RequestNumberPrefix : fiscalYearInternalOrganisationSequenceNumbers.RequestNumberPrefix; ((RequestDerivedRoles)@this).SortableRequestNumber = @this.Session().GetSingleton().SortableNumber(prefix, @this.RequestNumber, year.ToString()); } @this.DeriveInitialObjectState(); @this.AddSecurityToken(new SecurityTokens(session).DefaultSecurityToken); }
public void BaseOnInit(ObjectOnInit method) { this.OrderDate = this.Session().Now(); this.PurchaseOrderState ??= new PurchaseOrderStates(this.Strategy.Session).Created; this.PurchaseOrderShipmentState ??= new PurchaseOrderShipmentStates(this.Strategy.Session).NotReceived; this.PurchaseOrderPaymentState ??= new PurchaseOrderPaymentStates(this.Strategy.Session).NotPaid; if (!this.ExistEntryDate) { this.EntryDate = this.Session().Now(); } if (!this.ExistOrderedBy) { var internalOrganisations = new Organisations(this.Strategy.Session).InternalOrganisations(); if (internalOrganisations.Count() == 1) { this.OrderedBy = internalOrganisations.First(); } } if (!this.ExistCurrency) { this.Currency = this.OrderedBy?.PreferredCurrency; } if (!this.ExistStoredInFacility && this.OrderedBy?.StoresWhereInternalOrganisation.Count == 1) { this.StoredInFacility = this.OrderedBy.StoresWhereInternalOrganisation.Single().DefaultFacility; } }
protected override void BaseSetup(Setup setup) { var employeeUserGroup = new UserGroups(this.Session).Employees; var internalOrganisations = new Organisations(this.Session).InternalOrganisations(); var people = new People(this.Session).Extent(); var employeesByEmployer = new Employments(this.Session).Extent() .GroupBy(v => v.Employer) .ToDictionary(v => v.Key, v => new HashSet <Person>(v.Select(w => w.Employee).ToArray())); foreach (Person person in people) { foreach (var internalOrganisation in internalOrganisations) { employeeUserGroup.AddMember(person); if (employeesByEmployer.TryGetValue(internalOrganisation, out var employees)) { if (employees.Contains(person)) { break; } } new EmploymentBuilder(this.Session).WithEmployer(internalOrganisation).WithEmployee(person).Build(); } } }
public static void BaseOnDerive(this WorkEffort @this, ObjectOnDerive method) { var derivation = method.Derivation; var internalOrganisations = new Organisations(@this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if ([email protected] && internalOrganisations.Count() == 1) { @this.TakenBy = internalOrganisations.First(); } if ([email protected] && @this.ExistTakenBy) { @this.DerivedRoles.WorkEffortNumber = @this.TakenBy.NextWorkEffortNumber(); } if ([email protected] && @this.ExistTakenBy) { @this.ExecutedBy = @this.TakenBy; } @this.VerifyWorkEffortPartyAssignments(derivation); @this.DeriveActualHoursAndDates(); @this.DeriveCanInvoice(); if (@this.ExistActualStart && @this.WorkEffortState.IsCreated) { @this.WorkEffortState = new WorkEffortStates(@this.Strategy.Session).InProgress; } }
public static void BaseOnDerive(this Quote @this, ObjectOnDerive method) { var session = @this.Strategy.Session; var derivation = method.Derivation; if ([email protected]) { var internalOrganisations = new Organisations(session).InternalOrganisations(); if (internalOrganisations.Count() == 1) { @this.Issuer = internalOrganisations.First(); } } if ([email protected] && @this.ExistIssuer) { @this.QuoteNumber = @this.Issuer.NextQuoteNumber(session.Now().Year); } @this.Currency ??= @this.Receiver?.PreferredCurrency ?? @this.Issuer?.PreferredCurrency; foreach (QuoteItem quoteItem in @this.QuoteItems) { var quoteItemDerivedRoles = (QuoteItemDerivedRoles)quoteItem; quoteItemDerivedRoles.VatRegime = quoteItem.AssignedVatRegime ?? @this.VatRegime; quoteItemDerivedRoles.VatRate = quoteItem.VatRegime?.VatRate ?? quoteItem.Product?.VatRate; } @this.AddSecurityToken(new SecurityTokens(session).DefaultSecurityToken); @this.Sync(derivation); }
public void WorkTask_StateCompleted() { var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workTask = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); this.Session.Derive(); workTask.Complete(); this.Session.Derive(); Assert.Equal(new WorkEffortStates(this.Session).Completed, workTask.WorkEffortState); User user = this.Administrator; this.Session.SetUser(user); var acl = new AccessControlLists(this.Administrator)[workTask]; Assert.True(acl.CanExecute(M.WorkEffort.Invoice)); Assert.False(acl.CanExecute(M.WorkEffort.Cancel)); Assert.False(acl.CanExecute(M.WorkEffort.Reopen)); Assert.False(acl.CanExecute(M.WorkEffort.Complete)); }
public void GivenWorkEffort_WhenAddingRates_ThenRateForPartyIsNotAllowed() { var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); // Calculating rates per party is not implemented yet var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(internalOrganisation).Build(); var assignedParty = new WorkEffortPartyAssignmentBuilder(this.Session).WithAssignment(workOrder).WithParty(employee).Build(); this.Session.Derive(true); var assignedRate = new WorkEffortAssignmentRateBuilder(this.Session) .WithWorkEffort(workOrder) .WithRate(1) .WithRateType(new RateTypes(this.Session).StandardRate) .Build(); Assert.False(this.Session.Derive(false).HasErrors); assignedParty.AddAssignmentRate(assignedRate); var derivation = this.Session.Derive(false); Assert.True(derivation.HasErrors); Assert.Contains(derivation.Errors.SelectMany(e => e.Relations), r => r.RoleType.Equals(M.WorkEffortPartyAssignment.AssignmentRates)); }
public void AppsOnDerive(ObjectOnDerive method) { var derivation = method.Derivation; var internalOrganisations = new Organisations(this.strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistBilledTo && internalOrganisations.Count() == 1) { this.BilledTo = internalOrganisations.First(); } if (!this.ExistInvoiceNumber) { this.InvoiceNumber = this.BilledTo.NextPurchaseInvoiceNumber(); } Organisation supplier = this.BilledFrom as Organisation; if (supplier != null) { if (!this.BilledTo.ActiveSuppliers.Contains(supplier)) { derivation.Validation.AddError(this, this.Meta.BilledFrom, ErrorMessages.PartyIsNotASupplier); } } this.AppsOnDeriveInvoiceItems(derivation); this.AppsOnDeriveInvoiceTotals(); }
public static void BaseOnDerive(this WorkEffort @this, ObjectOnDerive method) { var derivation = method.Derivation; if ([email protected]) { @this.DerivationTrigger = Guid.NewGuid(); } var internalOrganisations = new Organisations(@this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if ([email protected] && internalOrganisations.Count() == 1) { @this.TakenBy = internalOrganisations.First(); } if ([email protected] && @this.ExistTakenBy) { var year = @this.CreationDate.Value.Year; @this.DerivedRoles.WorkEffortNumber = @this.TakenBy.NextWorkEffortNumber(year); var fiscalYearInternalOrganisationSequenceNumbers = @this.TakenBy.FiscalYearsInternalOrganisationSequenceNumbers.FirstOrDefault(v => v.FiscalYear == year); var prefix = @this.TakenBy.WorkEffortSequence.IsEnforcedSequence ? @this.TakenBy.WorkEffortNumberPrefix : fiscalYearInternalOrganisationSequenceNumbers.WorkEffortNumberPrefix; @this.DerivedRoles.SortableWorkEffortNumber = @this.Session().GetSingleton().SortableNumber(prefix, @this.WorkEffortNumber, year.ToString()); } if ([email protected] && @this.ExistTakenBy) { @this.ExecutedBy = @this.TakenBy; } @this.VerifyWorkEffortPartyAssignments(derivation); @this.DeriveActualHoursAndDates(); if (@this.ExistActualStart && @this.WorkEffortState.IsCreated) { @this.WorkEffortState = new WorkEffortStates(@this.Strategy.Session).InProgress; } @this.DeriveCanInvoice(); if (@this.WorkEffortState.IsFinished && @this.CanInvoice) { @this.WorkEffortState = new WorkEffortStates(@this.Strategy.Session).Completed; } foreach (WorkEffortInventoryAssignment inventoryAssignment in @this.WorkEffortInventoryAssignmentsWhereAssignment) { foreach (InventoryTransactionReason createReason in @this.WorkEffortState.InventoryTransactionReasonsToCreate) { inventoryAssignment.SyncInventoryTransactions(derivation, inventoryAssignment.InventoryItem, inventoryAssignment.Quantity, createReason, false); } foreach (InventoryTransactionReason cancelReason in @this.WorkEffortState.InventoryTransactionReasonsToCancel) { inventoryAssignment.SyncInventoryTransactions(derivation, inventoryAssignment.InventoryItem, inventoryAssignment.Quantity, cancelReason, true); } } }
public void AppsOnDerive(ObjectOnDerive method) { var derivation = method.Derivation; var internalOrganisations = new Organisations(this.strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistOrderedBy && internalOrganisations.Count() == 1) { this.OrderedBy = internalOrganisations.First(); } if (!this.ExistOrderNumber) { this.OrderNumber = this.OrderedBy.NextPurchaseOrderNumber(); } if (!this.ExistCurrency) { this.Currency = this.OrderedBy.PreferredCurrency; } if (!this.ExistFacility && this.OrderedBy.StoresWhereInternalOrganisation.Count == 1) { this.Facility = this.OrderedBy.StoresWhereInternalOrganisation.Single().DefaultFacility; } Organisation supplier = this.TakenViaSupplier as Organisation; if (supplier != null) { if (!this.OrderedBy.ActiveSuppliers.Contains(supplier)) { derivation.Validation.AddError(this, this.Meta.TakenViaSupplier, ErrorMessages.PartyIsNotASupplier); } } if (!this.ExistShipToAddress) { this.ShipToAddress = this.OrderedBy.ShippingAddress; } if (!this.ExistBillToContactMechanism) { this.BillToContactMechanism = this.OrderedBy.ExistBillingAddress? this.OrderedBy.BillingAddress : this.OrderedBy.GeneralCorrespondence; } if (!this.ExistTakenViaContactMechanism && this.ExistTakenViaSupplier) { this.TakenViaContactMechanism = this.TakenViaSupplier.OrderAddress; } this.Locale = this.Strategy.Session.GetSingleton().DefaultLocale; this.AppsOnDeriveOrderItems(derivation); this.AppsOnDerivePurchaseOrderState(derivation); this.AppsOnDeriveOrderTotals(derivation); this.PreviousTakenViaSupplier = this.TakenViaSupplier; }
public void GivenTimeEntryWithFromAndThroughDates_WhenDeriving_ThenAmountOfTimeDerived() { // Arrange var frequencies = new TimeFrequencies(this.Session); var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(internalOrganisation).Build(); this.Session.Derive(true); var now = DateTimeFactory.CreateDateTime(this.Session.Now()); var later = DateTimeFactory.CreateDateTime(now.AddHours(4)); var timeEntry = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(now) .WithThroughDate(later) .WithTimeFrequency(frequencies.Hour) .WithWorkEffort(workOrder) .Build(); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry); // Act this.Session.Derive(true); // Assert Assert.Equal(4.00M, timeEntry.AmountOfTime); Assert.Equal(4.00M, timeEntry.ActualHours); //// Re-arrange ((TimeEntryDerivedRoles)timeEntry).RemoveAmountOfTime(); timeEntry.TimeFrequency = frequencies.Day; // Act this.Session.Derive(true); // Assert Assert.Equal(Math.Round(4.0M / 24.0M, M.TimeEntry.AmountOfTime.Scale ?? 2), timeEntry.AmountOfTime); Assert.Equal(4.00M, timeEntry.ActualHours); //// Re-arrange ((TimeEntryDerivedRoles)timeEntry).RemoveAmountOfTime(); timeEntry.TimeFrequency = frequencies.Minute; // Act this.Session.Derive(true); // Assert Assert.Equal(4.0M * 60.0M, timeEntry.AmountOfTime); Assert.Equal(4.00M, timeEntry.ActualHours); }
public void GivenTimeEntry_WhenDeriving_ThenRequiredRelationsMustExist() { // Arrange var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var timeEntry = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .Build(); // Act var derivation = this.Session.Derive(false); var originalCount = derivation.Errors.Count(); // Assert Assert.True(derivation.HasErrors); //// Re-arrange var tomorrow = this.Session.Now().AddDays(1); timeEntry.ThroughDate = tomorrow; // Act derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Equal(originalCount, derivation.Errors.Count()); //// Re-arrange var workOrder = new WorkTaskBuilder(this.Session).WithName("Work").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); timeEntry.WorkEffort = workOrder; // Act derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Equal(originalCount - 1, derivation.Errors.Count()); //// Re-arrange var worker = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); new EmploymentBuilder(this.Session).WithEmployee(worker).WithEmployer(internalOrganisation).Build(); derivation = this.Session.Derive(false); worker.TimeSheetWhereWorker.AddTimeEntry(timeEntry); // Act derivation = this.Session.Derive(false); // Assert Assert.False(derivation.HasErrors); }
public void WorkTask_StateFinished() { var mechelen = new CityBuilder(this.Session).WithName("Mechelen").Build(); var mechelenAddress = new PostalAddressBuilder(this.Session).WithPostalAddressBoundary(mechelen).WithAddress1("Haverwerf 15").Build(); var billToMechelen = new PartyContactMechanismBuilder(this.Session) .WithContactMechanism(mechelenAddress) .WithContactPurpose(new ContactMechanismPurposes(this.Session).BillingAddress) .WithUseAsDefault(true) .Build(); var customer = new OrganisationBuilder(this.Session).WithName("Org1").WithPartyContactMechanism(billToMechelen).Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(internalOrganisation).Build(); this.Session.Derive(); var workTask = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var timeEntry = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(DateTimeFactory.CreateDateTime(this.Session.Now())) .WithThroughDate(DateTimeFactory.CreateDateTime(this.Session.Now().AddHours(1))) .WithTimeFrequency(new TimeFrequencies(this.Session).Hour) .WithWorkEffort(workTask) .Build(); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry); this.Session.Derive(); workTask.Complete(); this.Session.Derive(); workTask.Invoice(); this.Session.Derive(); Assert.Equal(new WorkEffortStates(this.Session).Finished, workTask.WorkEffortState); User user = this.Administrator; this.Session.SetUser(user); var acl = new AccessControlLists(this.Administrator)[workTask]; Assert.False(acl.CanExecute(M.WorkEffort.Invoice)); Assert.False(acl.CanExecute(M.WorkEffort.Cancel)); Assert.False(acl.CanExecute(M.WorkEffort.Reopen)); Assert.False(acl.CanExecute(M.WorkEffort.Complete)); }
public static void Daily(ISession session) { var organisations = new Organisations(session).Extent(); foreach (Organisation organisation in organisations) { organisation.DeriveRelationships(); } }
public void BaseOnInit(ObjectOnInit method) { var internalOrganisations = new Organisations(this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistContractor && internalOrganisations.Count() == 1) { this.Contractor = internalOrganisations.First(); } }
public void GivenWorkEffortAndTimeEntries_WhenDeriving_ThenActualHoursDerived() { // Arrange var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(internalOrganisation).Build(); this.Session.Derive(true); 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 timeEntry1 = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(yesterday) .WithThroughDate(laterYesterday) .WithWorkEffort(workOrder) .Build(); var timeEntry2 = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(today) .WithThroughDate(laterToday) .WithWorkEffort(workOrder) .Build(); var timeEntry3 = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(tomorrow) .WithThroughDate(laterTomorrow) .WithWorkEffort(workOrder) .Build(); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry1); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry2); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry3); // Act this.Session.Derive(true); // Assert Assert.Equal(13.0M, workOrder.ActualHours); }
public void BaseOnBuild(ObjectOnBuild method) { var internalOrganisations = new Organisations(this.Strategy.Session).Extent() .Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistTakenBy && internalOrganisations.Count() == 1) { this.TakenBy = internalOrganisations.First(); } }
public void BaseOnDerive(ObjectOnDerive method) { var derivation = method.Derivation; var internalOrganisations = new Organisations(this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistInternalOrganisation && internalOrganisations.Count() == 1) { this.InternalOrganisation = internalOrganisations.First(); } }
public void BaseOnPostBuild(ObjectOnPostBuild method) { // TODO: Don't extent for InternalOrganisations var internalOrganisations = new Organisations(this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistInternalOrganisation && internalOrganisations.Length == 1) { this.InternalOrganisation = internalOrganisations.First(); } }
public void GivenWorkEffort_WhenAddingInventoryAssignment_ThenInventoryConsumptionCreated() { // Arrange var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var reasons = new InventoryTransactionReasons(this.Session); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var part = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); this.Session.Derive(true); new InventoryItemTransactionBuilder(this.Session) .WithPart(part) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(11) .Build(); // Act this.Session.Derive(true); // Assert Assert.Empty(workEffort.WorkEffortInventoryAssignmentsWhereAssignment); Assert.True(workEffort.WorkEffortState.IsCreated); // Re-arrange var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); // Act this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions; Assert.Single(transactions); var transaction = transactions[0]; Assert.Equal(part, transaction.Part); Assert.Equal(10, transaction.Quantity); Assert.Equal(reasons.Consumption, transaction.Reason); Assert.Equal(0, part.QuantityCommittedOut); Assert.Equal(1, part.QuantityOnHand); }
public ActionResult Employees() { try { var responseBuilder = new ResponseBuilder(); var organisation = new Organisations(this.AllorsSession).FindBy(Organisations.Meta.Owner, this.AuthenticatedUser); responseBuilder.AddObject("root", organisation, OrganisationClass.Instance.AngularEmployees); return JsonSuccess(responseBuilder.Build()); } catch (Exception e) { return JsonError(e.Message); } }
public void BaseOnInit(ObjectOnInit method) { this.DerivedCurrency = this.BilledTo?.PreferredCurrency; var internalOrganisations = new Organisations(this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistBilledTo && internalOrganisations.Count() == 1) { this.BilledTo = internalOrganisations.First(); } }
public void GivenTimeEntryWithRequiredAssignmentOrganisation_WhenDeriving_ThenWorkEffortPartyAssignmentSynced() { // Arrange var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(internalOrganisation).Build(); internalOrganisation.RequireExistingWorkEffortPartyAssignment = true; this.Session.Derive(true); var today = DateTimeFactory.CreateDateTime(this.Session.Now()); var tomorrow = DateTimeFactory.CreateDateTime(this.Session.Now().AddDays(1)); var hour = new TimeFrequencies(this.Session).Hour; var timeEntry = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(today) .WithThroughDate(tomorrow) .WithTimeFrequency(hour) .WithWorkEffort(workOrder) .Build(); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry); // Act var derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Contains(derivation.Errors.SelectMany(e => e.Relations), r => r.AssociationType.Equals(M.WorkEffort.WorkEffortPartyAssignmentsWhereAssignment)); //// Re-Arrange employee.TimeSheetWhereWorker.RemoveTimeEntries(); var assignment = new WorkEffortPartyAssignmentBuilder(this.Session) .WithAssignment(workOrder) .WithParty(employee) .Build(); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry); // Act derivation = this.Session.Derive(false); // Assert Assert.False(derivation.HasErrors); }
public static void AppsOnDerive(this PriceComponent @this, ObjectOnDerive method) { var derivation = method.Derivation; var internalOrganisations = new Organisations(@this.Strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if ([email protected] && internalOrganisations.Count() == 1) { @this.PricedBy = internalOrganisations.First(); } }
public void GivenWorkEffortWithInventoryAssignment_WhenCompletingThenCancelling_ThenInventoryTransactionsCancelled() { // Arrange var reasons = new InventoryTransactionReasons(this.Session); var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); var part = new NonUnifiedPartBuilder(this.Session) .WithProductIdentification(new PartNumberBuilder(this.Session) .WithIdentification("P1") .WithProductIdentificationType(new ProductIdentificationTypes(this.Session).Part).Build()) .Build(); this.Session.Derive(true); new InventoryItemTransactionBuilder(this.Session) .WithPart(part) .WithReason(new InventoryTransactionReasons(this.Session).IncomingShipment) .WithQuantity(10) .Build(); this.Session.Derive(true); var inventoryAssignment = new WorkEffortInventoryAssignmentBuilder(this.Session) .WithAssignment(workEffort) .WithInventoryItem(part.InventoryItemsWherePart.First) .WithQuantity(10) .Build(); this.Session.Derive(true); // Act workEffort.Complete(); this.Session.Derive(true); workEffort.Cancel(); this.Session.Derive(true); // Assert var transactions = inventoryAssignment.InventoryItemTransactions; var consumption = transactions.First(t => t.Reason.Equals(reasons.Consumption) && (t.Quantity > 0)); var consumptionCancellation = transactions.First(t => t.Reason.Equals(reasons.Consumption) && (t.Quantity < 0)); Assert.Equal(2, transactions.Count); Assert.Equal(10, consumption.Quantity); Assert.Equal(-10, consumptionCancellation.Quantity); Assert.Equal(10, part.QuantityOnHand); }
public void GivenInventoryItemForUnifiedGood_WhenQuantityOnHandIsRaised_ThenSalesOrderItemWithQuantityShortFalledIsUpdated() { var internalOrganisation = new Organisations(this.Session).Extent().First(v => Equals(v.Name, "internalOrganisation")); var unifiedGood = new UnifiedGoodBuilder(this.Session).WithNonSerialisedDefaults(internalOrganisation).Build(); var customer = internalOrganisation.CreateB2BCustomer(this.Session.Faker()); this.Session.Derive(); this.CreateInventoryTransaction(5, new InventoryTransactionReasons(this.Session).Unknown, unifiedGood); this.Session.Derive(); var order = this.CreateSalesOrder(customer, customer, this.Session.Now()); var salesItem1 = this.CreateSalesOrderItem("item1", unifiedGood, 10, 15); order.AddSalesOrderItem(salesItem1); this.Session.Derive(); order.SetReadyForPosting(); this.Session.Derive(true); order.Post(); this.Session.Derive(); order.Accept(); this.Session.Derive(); Assert.Equal(0, salesItem1.ReservedFromNonSerialisedInventoryItem.AvailableToPromise); Assert.Equal(5, salesItem1.ReservedFromNonSerialisedInventoryItem.QuantityOnHand); Assert.Equal(0, salesItem1.QuantityRequestsShipping); Assert.Equal(5, salesItem1.QuantityPendingShipment); Assert.Equal(10, salesItem1.QuantityReserved); Assert.Equal(5, salesItem1.QuantityShortFalled); Assert.Equal(0, salesItem1.ReservedFromNonSerialisedInventoryItem.AvailableToPromise); Assert.Equal(5, salesItem1.ReservedFromNonSerialisedInventoryItem.QuantityOnHand); // Re-arrange this.CreateInventoryTransaction(15, new InventoryTransactionReasons(this.Session).Unknown, unifiedGood); // Act this.Session.Derive(true); Assert.Equal(0, salesItem1.QuantityRequestsShipping); Assert.Equal(10, salesItem1.QuantityPendingShipment); Assert.Equal(10, salesItem1.QuantityReserved); Assert.Equal(0, salesItem1.QuantityShortFalled); Assert.Equal(10, salesItem1.ReservedFromNonSerialisedInventoryItem.AvailableToPromise); Assert.Equal(20, salesItem1.ReservedFromNonSerialisedInventoryItem.QuantityOnHand); }
public void GivenWorkTask_WhenBuild_ThenPreviousObjectStateIsNull() { var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); this.Session.Derive(); Assert.Null(workEffort.PreviousWorkEffortState); }
public void GivenWorkTask_WhenBuild_ThenLastObjectStateEqualsCurrencObjectState() { var customer = new OrganisationBuilder(this.Session).WithName("Org1").Build(); var internalOrganisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var workEffort = new WorkTaskBuilder(this.Session).WithName("Activity").WithCustomer(customer).WithTakenBy(internalOrganisation).Build(); this.Session.Derive(); Assert.Equal(new WorkEffortStates(this.Session).Created, workEffort.WorkEffortState); Assert.Equal(workEffort.LastWorkEffortState, workEffort.WorkEffortState); }
public void AppsOnBuild(ObjectOnBuild method) { if (!this.ExistSalesOrderState) { this.SalesOrderState = new SalesOrderStates(this.Strategy.Session).Provisional; } if (!this.ExistOrderDate) { this.OrderDate = DateTime.UtcNow; } if (!this.ExistEntryDate) { this.EntryDate = DateTime.UtcNow; } if (!this.ExistPartiallyShip) { this.PartiallyShip = true; } var internalOrganisations = new Organisations(this.strategy.Session).Extent().Where(v => Equals(v.IsInternalOrganisation, true)).ToArray(); if (!this.ExistTakenBy && internalOrganisations.Count() == 1) { this.TakenBy = internalOrganisations.First(); } if (!this.ExistStore && this.ExistTakenBy) { var store = new Stores(this.strategy.Session).Extent().FirstOrDefault(v => Equals(v.InternalOrganisation, this.TakenBy)); if (store != null) { this.Store = store; } } if (!this.ExistOriginFacility) { this.OriginFacility = this.ExistStore ? this.Store.DefaultFacility : this.strategy.Session.GetSingleton().Settings.DefaultFacility; } if (!this.ExistOrderNumber && this.ExistStore) { this.OrderNumber = this.Store.DeriveNextSalesOrderNumber(); } }
public void Default() { var existingOrganisation = new OrganisationBuilder(this.DatabaseSession).WithName("existing organisation").Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var sessions = new ISession[] { this.DatabaseSession, this.CreateWorkspaceSession() }; foreach (var session in sessions) { session.Commit(); var cachedOrganisation = new Organisations(session).Cache.Get(existingOrganisation.UniqueId); Assert.AreEqual(existingOrganisation.UniqueId, cachedOrganisation.UniqueId); Assert.AreSame(session, cachedOrganisation.Strategy.Session); var newOrganisation = new OrganisationBuilder(session).WithName("new organisation").Build(); cachedOrganisation = new Organisations(session).Cache.Get(newOrganisation.UniqueId); Assert.AreEqual(newOrganisation.UniqueId, cachedOrganisation.UniqueId); Assert.AreSame(session, cachedOrganisation.Strategy.Session); session.Rollback(); } }
public void GivenSalesInvoiceCreatedBySalesRep_WhenCurrentUserInAdministratorRole_ThenAccessIsGranted() { var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var contactMechanism = new PostalAddressBuilder(this.DatabaseSession) .WithAddress1("Haverwerf 15") .WithPostalBoundary(new PostalBoundaryBuilder(this.DatabaseSession) .WithLocality("Mechelen") .WithCountry(new Countries(this.DatabaseSession).FindBy(Countries.Meta.IsoCode, "BE")) .Build()) .Build(); var administrator = new PersonBuilder(this.DatabaseSession).WithFirstName("Koen").WithUserName("admin").Build(); var administrators = new UserGroups(this.DatabaseSession).Administrators; administrators.AddMember(administrator); this.DatabaseSession.Derive(true); var supplierContact = new PersonBuilder(this.DatabaseSession).WithUserName("suppliercontact").WithLastName("suppliercontact").Build(); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithSupplier(supplier) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithFromDate(DateTime.UtcNow) .Build(); new OrganisationContactRelationshipBuilder(this.DatabaseSession).WithContact(supplierContact).WithOrganisation(supplier).WithFromDate(DateTime.UtcNow).Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep", "Forms"), new string[0]); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceNumber("1") .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .WithBilledFromInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); this.DatabaseSession.Derive(true); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("admin", "Forms"), new string[0]); var acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(SalesInvoices.Meta.Comment)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.Comment)); Assert.IsTrue(acl.CanExecute(SalesInvoices.Meta.Send)); }
public void GivenSalesInvoiceCreatedBySalesRep_WhenCurrentUserInSameSalesRepUserGroup_ThenAccessIsGranted() { var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var contactMechanism = new PostalAddressBuilder(this.DatabaseSession) .WithAddress1("Haverwerf 15") .WithPostalBoundary(new PostalBoundaryBuilder(this.DatabaseSession) .WithLocality("Mechelen") .WithCountry(new Countries(this.DatabaseSession).FindBy(Countries.Meta.IsoCode, "BE")) .Build()) .Build(); var salesRep2 = new PersonBuilder(this.DatabaseSession).WithUserName("salesRep2").WithLastName("salesRep2").Build(); new EmploymentBuilder(this.DatabaseSession) .WithEmployee(salesRep2) .WithEmployer(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithFromDate(DateTime.UtcNow) .Build(); new SalesRepRelationshipBuilder(this.DatabaseSession) .WithSalesRepresentative(salesRep2) .WithCustomer(customer) .WithFromDate(DateTime.UtcNow) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep", "Forms"), new string[0]); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithBilledFromInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); this.DatabaseSession.Derive(true); var acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(SalesInvoices.Meta.Comment)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.Comment)); Assert.IsTrue(acl.CanExecute(SalesInvoices.Meta.Send)); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep2", "Forms"), new string[0]); acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(SalesInvoices.Meta.Comment)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.Comment)); Assert.IsTrue(acl.CanExecute(SalesInvoices.Meta.Send)); }
public void GivenSalesInvoiceCreatedBySalesRep_WhenCurrentUserIsSupplier_ThenAccessIsDenied() { var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var contactMechanism = new PostalAddressBuilder(this.DatabaseSession) .WithAddress1("Haverwerf 15") .WithPostalBoundary(new PostalBoundaryBuilder(this.DatabaseSession) .WithLocality("Mechelen") .WithCountry(new Countries(this.DatabaseSession).FindBy(Countries.Meta.IsoCode, "BE")) .Build()) .Build(); var supplierContact = new PersonBuilder(this.DatabaseSession).WithUserName("suppliercontact").WithLastName("suppliercontact").Build(); var supplier = new OrganisationBuilder(this.DatabaseSession).WithName("supplier").Build(); new SupplierRelationshipBuilder(this.DatabaseSession) .WithSupplier(supplier) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithFromDate(DateTime.UtcNow) .Build(); new OrganisationContactRelationshipBuilder(this.DatabaseSession).WithContact(supplierContact).WithOrganisation(supplier).WithFromDate(DateTime.UtcNow).Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep", "Forms"), new string[0]); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithBilledFromInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation).Build(); this.DatabaseSession.Derive(true); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("suppliercontact", "Forms"), new string[0]); var acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.HasReadOperation); }
public void GivenSalesInvoice_WhenBillToCustomerChangesValue_ThenAccessPreviousCustomerIsDenied() { var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var customer2 = new OrganisationBuilder(this.DatabaseSession).WithName("customer2").Build(); var customerContact = new PersonBuilder(this.DatabaseSession).WithUserName("customercontact").WithLastName("customercontact").Build(); var customerContact2 = new PersonBuilder(this.DatabaseSession).WithUserName("customercontact2").WithLastName("customercontact2").Build(); var contactMechanism = new PostalAddressBuilder(this.DatabaseSession) .WithAddress1("Haverwerf 15") .WithPostalBoundary(new PostalBoundaryBuilder(this.DatabaseSession) .WithLocality("Mechelen") .WithCountry(new Countries(this.DatabaseSession).FindBy(Countries.Meta.IsoCode, "BE")) .Build()) .Build(); new CustomerRelationshipBuilder(this.DatabaseSession) .WithCustomer(customer2) .WithInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithFromDate(DateTime.UtcNow.Date) .Build(); new OrganisationContactRelationshipBuilder(this.DatabaseSession).WithContact(customerContact).WithOrganisation(customer).WithFromDate(DateTime.UtcNow).Build(); new OrganisationContactRelationshipBuilder(this.DatabaseSession).WithContact(customerContact2).WithOrganisation(customer2).WithFromDate(DateTime.UtcNow).Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep", "Forms"), new string[0]); var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithBilledFromInternalOrganisation(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .Build(); this.DatabaseSession.Derive(true); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("customercontact", "Forms"), new string[0]); var acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.CanWrite(SalesInvoices.Meta.InvoiceDate)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.InvoiceDate)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.InvoiceNumber)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.TotalExVat)); Assert.IsFalse(acl.CanExecute(SalesInvoices.Meta.Send)); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("customercontact2", "Forms"), new string[0]); acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.HasReadOperation); invoice.BillToCustomer = customer2; this.DatabaseSession.Derive(true); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("customercontact", "Forms"), new string[0]); acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.HasReadOperation); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("customercontact2", "Forms"), new string[0]); acl = new AccessControlList(invoice, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.CanWrite(SalesInvoices.Meta.InvoiceDate)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.InvoiceDate)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.InvoiceNumber)); Assert.IsTrue(acl.CanRead(SalesInvoices.Meta.TotalExVat)); Assert.IsFalse(acl.CanExecute(SalesInvoices.Meta.Send)); }
public void GivenSalesInvoice_WhenDerived_ThenTotalExVatIsAddedToPartyPackageRevenueHistory() { var productItem = new SalesInvoiceItemTypes(this.DatabaseSession).ProductItem; var contactMechanism = new ContactMechanisms(this.DatabaseSession).Extent().First; var euro = new Currencies(this.DatabaseSession).FindBy(Currencies.Meta.IsoCode, "EUR"); var vatRate21 = new VatRateBuilder(this.DatabaseSession).WithRate(21).Build(); var package1 = new PackageBuilder(this.DatabaseSession).WithName("package1").Build(); var cat1 = new ProductCategoryBuilder(this.DatabaseSession).WithDescription("cat for good1").WithPackage(package1).Build(); var good1 = new GoodBuilder(this.DatabaseSession) .WithSku("10101") .WithVatRate(vatRate21) .WithName("good1") .WithInventoryItemKind(new InventoryItemKinds(this.DatabaseSession).NonSerialized) .WithUnitOfMeasure(new UnitsOfMeasure(this.DatabaseSession).Piece) .WithPrimaryProductCategory(cat1) .Build(); var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var internalOrganisation = new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation"); internalOrganisation.PreferredCurrency = euro; this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var date = DateTime.UtcNow.AddYears(-1).AddMonths(-1); decimal revenuePastTwelveMonths = 0; for (var i = 1; i <= 13; i++) { var invoice = new SalesInvoiceBuilder(this.DatabaseSession) .WithInvoiceDate(date) .WithBillToCustomer(customer) .WithBillToContactMechanism(contactMechanism) .WithSalesChannel(new SalesChannels(this.DatabaseSession).WebChannel) .WithSalesInvoiceType(new SalesInvoiceTypes(this.DatabaseSession).SalesInvoice) .Build(); var item = new SalesInvoiceItemBuilder(this.DatabaseSession).WithProduct(good1).WithQuantity(1).WithActualUnitPrice(i * 10M).WithSalesInvoiceItemType(productItem).Build(); invoice.AddSalesInvoiceItem(item); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var history = customer.PartyPackageRevenueHistoriesWhereParty.First; //// first iteration is too old if (i > 1) { revenuePastTwelveMonths += i * 10M; } ////date in first iteration is too old, no history yet. if (history != null) { Assert.AreEqual(revenuePastTwelveMonths, history.Revenue); } date = date.AddMonths(1); } }
public ActionResult Index() { var model = new Index(); this.MapFilter(model, null); var organisations = new Organisations(this.AllorsSession).Extent(); this.Map(model, organisations); return this.View(model); }
public void GivenSalesOrderCreatedByCustomer_WhenCurrentUserIsSalesRepOfOrganisationThatTakesTheOrder_ThenAccessIsGranted() { var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var customerContact = new PersonBuilder(this.DatabaseSession).WithFirstName("Koen").WithUserName("customerContact").Build(); new OrganisationContactRelationshipBuilder(this.DatabaseSession) .WithContact(customerContact) .WithOrganisation(new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer")) .Build(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("customerContact", "Forms"), new string[0]); var order = new SalesOrderBuilder(this.DatabaseSession) .WithTakenByInternalOrganisation(internalOrganisation) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); this.DatabaseSession.Derive(true); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep", "Forms"), new string[0]); var acl = new AccessControlList(order, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(SalesOrders.Meta.Comment)); Assert.IsTrue(acl.CanRead(SalesOrders.Meta.Comment)); Assert.IsTrue(acl.CanExecute(SalesOrders.Meta.Confirm)); }
public void GivenSalesOrderCreatedByEmployee_WhenCurrentUserInAnotherEmployeeUserGroup_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("BE23 3300 6167 6391") .WithBankAccount(new BankAccountBuilder(this.DatabaseSession).WithBank(bank).WithCurrency(euro).WithIban("BE23 3300 6167 6391").WithNameOnAccount("Koen").Build()) .Build(); var customer = new Organisations(this.DatabaseSession).FindBy(Organisations.Meta.Name, "customer"); var internalOrganisation = Singleton.Instance(this.DatabaseSession).DefaultInternalOrganisation; new CustomerRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithInternalOrganisation(internalOrganisation).Build(); var mechelen = new CityBuilder(this.DatabaseSession).WithName("Mechelen").Build(); var salesRep2 = new PersonBuilder(this.DatabaseSession).WithLastName("SalesRep2").WithUserName("salesRep2").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 employer2 = new InternalOrganisationBuilder(this.DatabaseSession) .WithName("employer2") .WithLocale(new Locales(this.DatabaseSession).EnglishGreatBritain) .WithEmployeeRole(new Roles(this.DatabaseSession).Administrator) .WithPreferredCurrency(euro) .WithDefaultPaymentMethod(ownBankAccount) .WithPartyContactMechanism(billingAddress) .Build(); new EmploymentBuilder(this.DatabaseSession).WithEmployee(salesRep2).WithEmployer(employer2).WithFromDate(DateTime.UtcNow).Build(); new SalesRepRelationshipBuilder(this.DatabaseSession).WithFromDate(DateTime.UtcNow).WithCustomer(customer).WithSalesRepresentative(salesRep2).WithInternalOrganisation(employer2).Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep", "Forms"), new string[0]); var order = new SalesOrderBuilder(this.DatabaseSession) .WithTakenByInternalOrganisation(internalOrganisation) .WithBillToCustomer(customer) .WithShipToCustomer(customer) .WithShipToAddress(new PostalAddressBuilder(this.DatabaseSession).WithGeographicBoundary(mechelen).WithAddress1("Haverwerf 15").Build()) .Build(); this.DatabaseSession.Derive(true); this.DatabaseSession.Commit(); var acl = new AccessControlList(order, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsTrue(acl.CanWrite(SalesOrders.Meta.Comment)); Assert.IsTrue(acl.CanRead(SalesOrders.Meta.Comment)); Assert.IsTrue(acl.CanExecute(SalesOrders.Meta.Confirm)); Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("salesRep2", "Forms"), new string[0]); acl = new AccessControlList(order, new Users(this.DatabaseSession).GetCurrentUser()); Assert.IsFalse(acl.HasReadOperation); }
private void GetFilter(IFilter model, out Extent<Organisation> filterOrganisations, out string filterName) { filterName = model.FilterName; filterOrganisations = new Organisations(this.AllorsSession).Extent(); var filter = filterOrganisations.Filter; if (!string.IsNullOrWhiteSpace(filterName)) { filter.AddLike(Organisations.Meta.Name, "%" + filterName + "%"); } }
public void then_the_organisation_is_added() { var acme = new Organisations(this.Session).FindBy(Organisation.Meta.Name, "Acme"); acme.ShouldNotBeNull(); }