public void GivenWorkEffortAndTimeEntry_WhenDeriving_ThenWorkEffortPartyAssignmentSynced() { // Arrange var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var employment = new EmploymentBuilder(this.Session).WithEmployee(employee).Build(); this.Session.Derive(true); var today = DateTimeFactory.CreateDateTime(DateTime.UtcNow); var tomorrow = DateTimeFactory.CreateDateTime(DateTime.UtcNow.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 this.Session.Derive(true); // Assert var partyAssignment = workOrder.WorkEffortPartyAssignmentsWhereAssignment.First; Assert.Equal(workOrder, partyAssignment.Assignment); Assert.Equal(employee, partyAssignment.Party); Assert.False(partyAssignment.ExistFromDate); Assert.False(partyAssignment.ExistThroughDate); }
public void GivenTimeEntryWithFromDateAndAmountOfTime_WhenDeriving_ThenThroughDateDerived() { // Arrange var frequencies = new TimeFrequencies(this.Session); var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var employment = new EmploymentBuilder(this.Session).WithEmployee(employee).Build(); this.Session.Derive(true); var now = DateTimeFactory.CreateDateTime(this.Session.Now()); var hour = frequencies.Hour; var timeEntry = new TimeEntryBuilder(this.Session) .WithRateType(new RateTypes(this.Session).StandardRate) .WithFromDate(now) .WithAmountOfTime(4.0M) .WithTimeFrequency(hour) .WithWorkEffort(workOrder) .Build(); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntry); // Act this.Session.Derive(true); // Assert var timeSpan = timeEntry.ThroughDate - timeEntry.FromDate; Assert.Equal(4.00, timeSpan.Value.TotalHours); Assert.Equal(4.0M, timeEntry.ActualHours); //// Re-arrange timeEntry.RemoveThroughDate(); timeEntry.TimeFrequency = frequencies.Minute; // Act this.Session.Derive(true); // Assert timeSpan = timeEntry.ThroughDate - timeEntry.FromDate; Assert.Equal(4.00, timeSpan.Value.TotalMinutes); Assert.Equal(Math.Round(4.0M / 60.0M, M.TimeEntry.AmountOfTime.Scale ?? 2), timeEntry.ActualHours); //// Re-arrange timeEntry.RemoveThroughDate(); timeEntry.TimeFrequency = frequencies.Day; // Act this.Session.Derive(true); // Assert timeSpan = timeEntry.ThroughDate - timeEntry.FromDate; Assert.Equal(4.00, timeSpan.Value.TotalDays); Assert.Equal(4.00M * 24.00M, timeEntry.ActualHours); }
public void GivenPerson_WhenEmployed_ThenIsEmployeeEqualsTrue() { var employment = new EmploymentBuilder(this.Session) .WithEmployee(this.Purchaser) .WithFromDate(this.Session.Now()) .Build(); this.Session.Derive(); Assert.True(this.Purchaser.BaseIsActiveEmployee(this.Session.Now())); }
public void GivenTimeEntry_WhenDeriving_ThenRequiredRelationsMustExist() { // Arrange 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 = DateTime.UtcNow.AddDays(1); timeEntry.ThroughDate = tomorrow; // Act derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Equal(originalCount - 1, derivation.Errors.Count()); //// Re-arrange var workOrder = new WorkTaskBuilder(this.Session).WithName("Work").Build(); timeEntry.WorkEffort = workOrder; // Act derivation = this.Session.Derive(false); // Assert Assert.True(derivation.HasErrors); Assert.Equal(originalCount - 2, derivation.Errors.Count()); //// Re-arrange var worker = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var organisation = new InternalOrganisations(this.Session).Extent().First; var employment = new EmploymentBuilder(this.Session).WithEmployee(worker).WithEmployer(organisation).Build(); derivation = this.Session.Derive(false); worker.TimeSheetWhereWorker.AddTimeEntry(timeEntry); // Act derivation = this.Session.Derive(false); // Assert Assert.False(derivation.HasErrors); }
public void GivenPerson_WhenEmployed_ThenIsEmployeeEqualsTrue() { var salesRep = new PersonBuilder(this.Session).WithLastName("salesRep").Build(); var employment = new EmploymentBuilder(this.Session) .WithEmployee(salesRep) .WithFromDate(DateTime.UtcNow) .Build(); this.Session.Derive(); Assert.True(salesRep.AppsIsActiveEmployee(DateTime.UtcNow)); }
public void GivenWorkEffortAndTimeEntries_WhenDeriving_ThenActualHoursDerived() { // Arrange var frequencies = new TimeFrequencies(this.Session); var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").Build(); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var employment = new EmploymentBuilder(this.Session).WithEmployee(employee).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 Edit() { var employer = new Organisations(this.Session).FindBy(M.Organisation.Name, "Allors BVBA"); var employee = new PersonBuilder(this.Session).WithLastName("employee").Build(); // Delete all existing for the new one to be in the first page of the list. foreach (PartyRelationship partyRelationship in employer.PartyRelationshipsWhereParty) { partyRelationship.Delete(); } this.Session.Derive(); this.Session.Commit(); var editPartyRelationship = new EmploymentBuilder(this.Session) .WithEmployee(employee) .WithEmployer(employer) .Build(); this.Session.Derive(); this.Session.Commit(); var before = new Employments(this.Session).Extent().ToArray(); this.organisationListPage.Table.DefaultAction(employer); var organisationOverview = new OrganisationOverviewComponent(this.organisationListPage.Driver); var partyRelationshipOverview = organisationOverview.PartyrelationshipOverviewPanel.Click(); partyRelationshipOverview.Table.DefaultAction(editPartyRelationship); var partyRelationshipEdit = new EmploymentEditComponent(organisationOverview.Driver); partyRelationshipEdit .FromDate.Set(DateTimeFactory.CreateDate(2018, 12, 22)) .ThroughDate.Set(DateTimeFactory.CreateDate(2018, 12, 22).AddYears(1)) .SAVE.Click(); this.Driver.WaitForAngular(); this.Session.Rollback(); var after = new Employments(this.Session).Extent().ToArray(); Assert.Equal(after.Length, before.Length); // Assert.Equal(DateTimeFactory.CreateDate(2018, 12, 22).Date, this.editPartyRelationship.FromDate.Date.ToUniversalTime().Date); // Assert.Equal(DateTimeFactory.CreateDate(2018, 12, 22).AddYears(1).Date, this.editPartyRelationship.ThroughDate.Value.Date.ToUniversalTime().Date); Assert.Equal(employer, editPartyRelationship.Employer); Assert.Equal(employee, editPartyRelationship.Employee); }
public void GivenPerson_WhenEmployed_ThenTimeSheetSynced() { var person = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Employee").Build(); var employer = new InternalOrganisations(this.Session).Extent().First; var employment = new EmploymentBuilder(this.Session) .WithEmployee(person) .WithFromDate(DateTime.UtcNow) .Build(); this.Session.Derive(); Assert.NotNull(person.TimeSheetWhereWorker); }
public void GivenTimeEntryWithRequiredAssignmentOrganisation_WhenDeriving_ThenWorkEffortPartyAssignmentSynced() { // Arrange var workOrder = new WorkTaskBuilder(this.Session).WithName("Task").Build(); var organisation = new InternalOrganisations(this.Session).Extent().First; var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var employment = new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(organisation).Build(); organisation.RequireExistingWorkEffortPartyAssignment = true; this.Session.Derive(true); var today = DateTimeFactory.CreateDateTime(DateTime.UtcNow); var tomorrow = DateTimeFactory.CreateDateTime(DateTime.UtcNow.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.True(derivation.HasErrors); }
public void GivenPerson_WhenEmploymentIsCreated_ThenNoOtherActiveEmploymentMayExist() { var secondEmployment = new EmploymentBuilder(this.DatabaseSession) .WithEmployee(this.employee) .WithEmployer(new InternalOrganisations(this.DatabaseSession).FindBy(InternalOrganisations.Meta.Name, "internalOrganisation")) .WithFromDate(DateTime.UtcNow) .Build(); Assert.IsTrue(this.DatabaseSession.Derive().HasErrors); this.DatabaseSession.Rollback(); this.employment.ThroughDate = DateTime.UtcNow; Assert.IsFalse(this.DatabaseSession.Derive().HasErrors); }
public void GivenWorkEffortPrintDocument_WhenPrinting_ThenMediaCreated() { // Arrange var frequencies = new TimeFrequencies(this.Session); var purposes = new ContactMechanismPurposes(this.Session); //// Customer Contact and Address Data var customer = new OrganisationBuilder(this.Session).WithName("Customer").Build(); var customerContact = new PersonBuilder(this.Session).WithFirstName("Customer").WithLastName("Contact").Build(); var organisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); var customerRelation = new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(organisation).Build(); var usa = new Countries(this.Session).Extent().First(c => c.IsoCode.Equals("US")); var michigan = new StateBuilder(this.Session).WithName("Michigan").WithCountry(usa).Build(); var northville = new CityBuilder(this.Session).WithName("Northville").WithState(michigan).Build(); var postalCode = new PostalCodeBuilder(this.Session).WithCode("48167").Build(); var billingAddress = this.CreatePostalAddress("Billing Address", "123 Street", "Suite S1", northville, postalCode); var shippingAddress = this.CreatePostalAddress("Shipping Address", "123 Street", "Dock D1", northville, postalCode); var phone = new TelecommunicationsNumberBuilder(this.Session).WithCountryCode("1").WithAreaCode("616").WithContactNumber("774-2000").Build(); customer.AddPartyContactMechanism(this.CreatePartyContactMechanism(purposes.BillingAddress, billingAddress)); customer.AddPartyContactMechanism(this.CreatePartyContactMechanism(purposes.ShippingAddress, shippingAddress)); customerContact.AddPartyContactMechanism(this.CreatePartyContactMechanism(purposes.GeneralPhoneNumber, phone)); //// Work Effort Data var salesPerson = new PersonBuilder(this.Session).WithFirstName("Sales").WithLastName("Person").Build(); var salesRepRelation = new SalesRepRelationshipBuilder(this.Session).WithCustomer(customer).WithSalesRepresentative(salesPerson).Build(); var salesOrder = this.CreateSalesOrder(customer, organisation); var workOrder = this.CreateWorkEffort(organisation, customer, customerContact, salesOrder.SalesOrderItems.First); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var employment = new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(organisation).Build(); var salesOrderItem = salesOrder.SalesOrderItems.First; salesOrder.AddValidOrderItem(salesOrderItem); //// Work Effort Inventory Assignmets var part1 = this.CreatePart("P1"); var part2 = this.CreatePart("P2"); var part3 = this.CreatePart("P3"); this.Session.Derive(true); var inventoryAssignment1 = this.CreateInventoryAssignment(workOrder, part1, 11); var inventoryAssignment2 = this.CreateInventoryAssignment(workOrder, part2, 12); var inventoryAssignment3 = this.CreateInventoryAssignment(workOrder, part3, 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 timeEntryYesterday = this.CreateTimeEntry(yesterday, laterYesterday, frequencies.Day, workOrder); var timeEntryToday = this.CreateTimeEntry(today, laterToday, frequencies.Hour, workOrder); var timeEntryTomorrow = this.CreateTimeEntry(tomorrow, laterTomorrow, frequencies.Minute, workOrder); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntryYesterday); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntryToday); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntryTomorrow); this.Session.Derive(true); // Act workOrder.Print(); this.Session.Derive(); this.Session.Commit(); // Assert Assert.True(workOrder.PrintDocument.ExistMedia); var desktopDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); var outputFile = System.IO.File.Create(System.IO.Path.Combine(desktopDir, "workTask.odt")); var stream = new System.IO.MemoryStream(workOrder.PrintDocument.Media.MediaContent.Data); stream.CopyTo(outputFile); stream.Close(); }
public void GivenWorkEffort_WhenCreatingModel_ThenValuesAreSet() { // Arrange var frequencies = new TimeFrequencies(this.Session); var purposes = new ContactMechanismPurposes(this.Session); //// Customer Contact and Address Data var customer = new OrganisationBuilder(this.Session).WithName("Customer").Build(); var customerContact = new PersonBuilder(this.Session).WithFirstName("Customer").WithLastName("Contact").Build(); var organisation = new Organisations(this.Session).Extent().First(o => o.IsInternalOrganisation); var customerRelation = new CustomerRelationshipBuilder(this.Session).WithCustomer(customer).WithInternalOrganisation(organisation).Build(); var usa = new Countries(this.Session).Extent().First(c => c.IsoCode.Equals("US")); var michigan = new StateBuilder(this.Session).WithName("Michigan").WithCountry(usa).Build(); var northville = new CityBuilder(this.Session).WithName("Northville").WithState(michigan).Build(); var postalCode = new PostalCodeBuilder(this.Session).WithCode("48167").Build(); var billingAddress = this.CreatePostalAddress("Billing Address", "123 Street", "Suite S1", northville, postalCode); var shippingAddress = this.CreatePostalAddress("Shipping Address", "123 Street", "Dock D1", northville, postalCode); var phone = new TelecommunicationsNumberBuilder(this.Session).WithCountryCode("1").WithAreaCode("616").WithContactNumber("774-2000").Build(); customer.AddPartyContactMechanism(this.CreatePartyContactMechanism(purposes.BillingAddress, billingAddress)); customer.AddPartyContactMechanism(this.CreatePartyContactMechanism(purposes.ShippingAddress, shippingAddress)); customerContact.AddPartyContactMechanism(this.CreatePartyContactMechanism(purposes.GeneralPhoneNumber, phone)); //// Work Effort Data var salesPerson = new PersonBuilder(this.Session).WithFirstName("Sales").WithLastName("Person").Build(); var salesOrder = this.CreateSalesOrder(customer, organisation); var workOrder = this.CreateWorkEffort(organisation, customer, customerContact, salesOrder.SalesOrderItems.First); var employee = new PersonBuilder(this.Session).WithFirstName("Good").WithLastName("Worker").Build(); var employment = new EmploymentBuilder(this.Session).WithEmployee(employee).WithEmployer(organisation).Build(); var salesOrderItem = salesOrder.SalesOrderItems.First; ((SalesOrderDerivedRoles)salesOrder).AddValidOrderItem(salesOrderItem); //// Work Effort Inventory Assignmets var part1 = this.CreatePart("P1"); var part2 = this.CreatePart("P2"); var part3 = this.CreatePart("P3"); this.Session.Derive(true); var inventoryAssignment1 = this.CreateInventoryAssignment(workOrder, part1, 11); var inventoryAssignment2 = this.CreateInventoryAssignment(workOrder, part2, 12); var inventoryAssignment3 = this.CreateInventoryAssignment(workOrder, part3, 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 timeEntryYesterday = this.CreateTimeEntry(yesterday, laterYesterday, frequencies.Day, workOrder, standardRate); var timeEntryToday = this.CreateTimeEntry(today, laterToday, frequencies.Hour, workOrder, standardRate); var timeEntryTomorrow = this.CreateTimeEntry(tomorrow, laterTomorrow, frequencies.Minute, workOrder, overtimeRate); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntryYesterday); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntryToday); employee.TimeSheetWhereWorker.AddTimeEntry(timeEntryTomorrow); this.Session.Derive(true); // Act var model = new WorkTaskModel.Model(workOrder); // Assert Assert.Equal(3, model.TimeEntries.Length); Assert.Single(model.TimeEntriesByBillingRate); }