public object Run(int agentId, int taskId, [System.Web.Http.FromBody] Dictionary <string, string> parameters) { var id = User.Identity.GetUserId(); var user = db.Query <UserDto>().Single(x => x.Id == id); if (!user.ConfigurationManager && !user.Administrator) { return(new { Success = false, Error = "Only an administrator or configuration manager can execute tasks" }); } using (var session = WebApiApplication.Store.OpenSession()) { var deploy = new MaintenanceTask() { TemplatedTaskId = taskId, AgentId = agentId, Status = Status.Queud, StartDate = System.DateTime.UtcNow, UserId = User.Identity.GetUserId() }; session.Save(deploy); session.Flush(); BackgroundJob.Enqueue(() => MaintenanceJob.Execute(deploy.Id, parameters)); return(new { Success = true }); }; }
public void Finish_Should_Finish_An_Existing_Job() { // arrange MaintenanceJobBuilder maintenanceJobBuilder = new MaintenanceJobBuilder(); MaintenanceJob sut = maintenanceJobBuilder .Build(); DateTime actualStartTime = maintenanceJobBuilder.StartTime.AddMinutes(30); DateTime actualEndTime = maintenanceJobBuilder.EndTime.AddMinutes(15); string notes = $"Mechanic notes {maintenanceJobBuilder.JobId}"; // act sut.Finish(actualStartTime, actualEndTime, notes); // assert Assert.Equal(maintenanceJobBuilder.JobId, sut.Id); Assert.Equal(maintenanceJobBuilder.StartTime, sut.StartTime); Assert.Equal(maintenanceJobBuilder.EndTime, sut.EndTime); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.Id, sut.Customer.Id); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.Name, sut.Customer.Name); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.TelephoneNumber, sut.Customer.TelephoneNumber); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.LicenseNumber, sut.Vehicle.Id); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.Brand, sut.Vehicle.Brand); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.Type, sut.Vehicle.Type); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.OwnerId, sut.Vehicle.OwnerId); Assert.Equal(maintenanceJobBuilder.Description, sut.Description); Assert.Equal(actualStartTime, sut.ActualStartTime.Value); Assert.Equal(actualEndTime, sut.ActualEndTime.Value); Assert.Equal(notes, sut.Notes); Assert.Equal("Completed", sut.Status); }
public static void FinishedMaintenanceJobCanNotBeFinished(this MaintenanceJob job) { if (job.Status == "Completed") { throw new BusinessRuleViolationException($"An already finished job can not be finished."); } }
public void Finish_Should_Finish_An_Existing_Job() { // arrange CustomerBuilder customerBuilder = new CustomerBuilder(); VehicleBuilder vehicleBuilder = new VehicleBuilder(); MaintenanceJobBuilder maintenanceJobBuilder = new MaintenanceJobBuilder(); Customer customer = customerBuilder .Build(); Vehicle vehicle = vehicleBuilder .WithCustomerId(customer.CustomerId) .Build(); MaintenanceJob sut = maintenanceJobBuilder .WithCustomer(customer) .WithVehicle(vehicle) .Build(); DateTime actualStartTime = maintenanceJobBuilder.StartTime.AddMinutes(30); DateTime actualEndTime = maintenanceJobBuilder.EndTime.AddMinutes(15); string notes = $"Mechanic notes {maintenanceJobBuilder.Id}"; // act sut.Finish(actualStartTime, actualEndTime, notes); // assert Assert.Equal(maintenanceJobBuilder.Id, sut.Id); Assert.Equal(maintenanceJobBuilder.StartTime, sut.StartTime); Assert.Equal(maintenanceJobBuilder.EndTime, sut.EndTime); Assert.Equal(customer, sut.Customer); Assert.Equal(vehicle, sut.Vehicle); Assert.Equal(maintenanceJobBuilder.Description, sut.Description); Assert.Equal(actualStartTime, sut.ActualStartTime.Value); Assert.Equal(actualEndTime, sut.ActualEndTime.Value); Assert.Equal(notes, sut.Notes); Assert.Equal("Completed", sut.Status); }
public void Update_Should_Update_Existing_Job() { // arrange MaintenanceJobBuilder maintenanceJobBuilder = new MaintenanceJobBuilder(); MaintenanceJob sut = maintenanceJobBuilder .Build(); var description = "Description has been updated"; // act sut.Update(sut.StartTime, sut.EndTime, sut.Vehicle, sut.Customer, description); // assert Assert.Equal(maintenanceJobBuilder.JobId, sut.Id); Assert.Equal(maintenanceJobBuilder.StartTime, sut.StartTime); Assert.Equal(maintenanceJobBuilder.EndTime, sut.EndTime); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.Id, sut.Customer.Id); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.Name, sut.Customer.Name); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.TelephoneNumber, sut.Customer.TelephoneNumber); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.LicenseNumber, sut.Vehicle.Id); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.Brand, sut.Vehicle.Brand); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.Type, sut.Vehicle.Type); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.OwnerId, sut.Vehicle.OwnerId); Assert.Equal(description, sut.Description); Assert.Null(sut.ActualStartTime); Assert.Null(sut.ActualEndTime); Assert.Null(sut.Notes); Assert.Equal("Planned", sut.Status); }
public void Plan_Should_Create_A_New_Job() { // arrange MaintenanceJobBuilder maintenanceJobBuilder = new MaintenanceJobBuilder(); MaintenanceJob sut = maintenanceJobBuilder .Build(); // act // sut.Plan() is called by the Testdata Builder // assert Assert.Equal(maintenanceJobBuilder.JobId, sut.Id); Assert.Equal(maintenanceJobBuilder.StartTime, sut.StartTime); Assert.Equal(maintenanceJobBuilder.EndTime, sut.EndTime); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.Id, sut.Customer.Id); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.Name, sut.Customer.Name); Assert.Equal(maintenanceJobBuilder.CustomerBuilder.TelephoneNumber, sut.Customer.TelephoneNumber); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.LicenseNumber, sut.Vehicle.Id); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.Brand, sut.Vehicle.Brand); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.Type, sut.Vehicle.Type); Assert.Equal(maintenanceJobBuilder.VehicleBuilder.OwnerId, sut.Vehicle.OwnerId); Assert.Equal(maintenanceJobBuilder.Description, sut.Description); Assert.Null(sut.ActualStartTime); Assert.Null(sut.ActualEndTime); Assert.Null(sut.Notes); Assert.Equal("Planned", sut.Status); }
private void Handle(MaintenanceJobFinished e) { MaintenanceJob job = Jobs.FirstOrDefault(j => j.Id == e.JobId); Timeslot actualTimeslot = Timeslot.Create(e.StartTime, e.EndTime); job.Finish(actualTimeslot, e.Notes); }
public void Plan_Should_Create_A_New_Job() { // arrange CustomerBuilder customerBuilder = new CustomerBuilder(); VehicleBuilder vehicleBuilder = new VehicleBuilder(); MaintenanceJobBuilder maintenanceJobBuilder = new MaintenanceJobBuilder(); Customer customer = customerBuilder .Build(); Vehicle vehicle = vehicleBuilder .WithCustomerId(customer.CustomerId) .Build(); MaintenanceJob sut = maintenanceJobBuilder .WithCustomer(customer) .WithVehicle(vehicle) .Build(); // act // sut.Plan() is called by the Testdata Builder // assert Assert.Equal(maintenanceJobBuilder.Id, sut.Id); Assert.Equal(maintenanceJobBuilder.StartTime, sut.StartTime); Assert.Equal(maintenanceJobBuilder.EndTime, sut.EndTime); Assert.Equal(customer, sut.Customer); Assert.Equal(vehicle, sut.Vehicle); Assert.Equal(maintenanceJobBuilder.Description, sut.Description); Assert.Null(sut.ActualStartTime); Assert.Null(sut.ActualEndTime); Assert.Null(sut.Notes); Assert.Equal("Planned", sut.Status); }
public async Task RegisterMaintenanceJobAsync(MaintenanceJob job) { using (SqlConnection conn = new SqlConnection(_connectionString)) { string sql = "insert into MaintenanceJob(JobId, LicenseNumber, CustomerId, Description, Finished, InvoiceSent) " + "values(@JobId, @LicenseNumber, @CustomerId, @Description, 0, 0);"; await conn.ExecuteAsync(sql, job); } }
private void Handle(MaintenanceJobPlanned e) { MaintenanceJob job = new MaintenanceJob(e.JobId); Customer customer = new Customer(e.CustomerInfo.Id, e.CustomerInfo.Name, e.CustomerInfo.TelephoneNumber); LicenseNumber licenseNumber = LicenseNumber.Create(e.VehicleInfo.LicenseNumber); Vehicle vehicle = new Vehicle(licenseNumber, e.VehicleInfo.Brand, e.VehicleInfo.Type, customer.Id); Timeslot plannedTimeslot = Timeslot.Create(e.StartTime, e.EndTime); job.Plan(plannedTimeslot, vehicle, customer, e.Description); Jobs.Add(job); }
private async Task HandleAsync(MaintenanceJobPlanned mjp) { MaintenanceJob job = new MaintenanceJob { JobId = mjp.JobId.ToString(), CustomerId = mjp.CustomerInfo.Id, LicenseNumber = mjp.VehicleInfo.LicenseNumber, Description = mjp.Description }; await _repo.RegisterMaintenanceJobAsync(job); }
public static MaintenanceJobDTO MapToDTO(this MaintenanceJob source) => new MaintenanceJobDTO { Id = source.Id, StartTime = source.PlannedTimeslot.StartTime, EndTime = source.PlannedTimeslot.EndTime, Vehicle = source.Vehicle.MapToDTO(), Customer = source.Customer.MapToDTO(), Description = source.Description, ActualStartTime = source?.ActualTimeslot?.StartTime, ActualEndTime = source?.ActualTimeslot?.EndTime, Notes = source.Notes };
public async Task UpdateMaintenanceJobAsync(MaintenanceJob job) { using (SqlConnection conn = new SqlConnection(_connectionString)) { var sql = "UPDATE MaintenanceJob SET "; sql += "LicenseNumber = @LicenseNumber, "; sql += "CustomerId = @CustomerId, "; sql += "StartTime = @StartTime, "; sql += "Description = @Description "; sql += "WHERE JobId = @JobId "; await conn.ExecuteAsync(sql, job); } }
private async Task HandleAsync(MaintenanceJobPlanned mjp) { Log.Information("Register Maintenance Job: {Id}, {Description}, {CustomerId}, {VehicleLicenseNumber}", mjp.JobId, mjp.Description, mjp.CustomerInfo.Id, mjp.VehicleInfo.LicenseNumber); MaintenanceJob job = new MaintenanceJob { JobId = mjp.JobId.ToString(), CustomerId = mjp.CustomerInfo.Id, LicenseNumber = mjp.VehicleInfo.LicenseNumber, Description = mjp.Description }; await _repo.RegisterMaintenanceJobAsync(job); }
public async Task <IActionResult> Finish(DateTime planningDate, string jobId) { return(await _resiliencyHelper.ExecuteResilient(async() => { string dateStr = planningDate.ToString("yyyy-MM-dd"); MaintenanceJob job = await _workshopManagementAPI.GetMaintenanceJob(dateStr, jobId); var model = new WorkshopManagementFinishViewModel { Id = job.Id, Date = planningDate, ActualStartTime = job.StartTime, ActualEndTime = job.EndTime }; return View(model); }, View("Offline", new WorkshopManagementOfflineViewModel()))); }
public async Task <IActionResult> Finish(DateTime date, string jobId) { return(await ExecuteWithFallback(async() => { string dateStr = date.ToString("yyyy-MM-dd"); MaintenanceJob job = await _workshopManagementAPI.GetMaintenanceJob(dateStr, jobId); var model = new WorkshopManagementFinishViewModel { Id = job.Id, Date = date, ActualStartTime = job.StartTime, ActualEndTime = job.EndTime }; return View(model); })); }
private async Task HandleAsync(MaintenanceJobPlanned mjp) { MaintenanceJob job = new MaintenanceJob { JobId = mjp.JobId.ToString(), CustomerId = mjp.CustomerInfo.Id, LicenseNumber = mjp.VehicleInfo.LicenseNumber, StartTime = mjp.StartTime, Description = mjp.Description }; Log.Information("Register Maintenance Job: {Id}, {CustomerId}, {VehicleLicenseNumber}, {StartTime}, {Description}", job.JobId, job.CustomerId, job.LicenseNumber, job.StartTime, job.Description); await _repo.RegisterMaintenanceJobAsync(job); }
private async Task HandleAsync(MaintenanceJobUpdated mju) { var job = new MaintenanceJob { JobId = mju.JobId.ToString(), CustomerId = mju.CustomerInfo.Id, LicenseNumber = mju.VehicleInfo.LicenseNumber, StartTime = mju.StartTime, Description = mju.Description }; Log.Information("Update Maintenance Job: {Id}, {CustomerId}, {VehicleLicenseNumber}, {StartTime}, {Description}", job.JobId, job.CustomerId, job.LicenseNumber, job.StartTime, job.Description); await _repo.UpdateMaintenanceJobAsync(job); }
public MaintenanceJob Build() { if (Customer == null) { throw new InvalidOperationException("You must specify a customer using the 'WithCustomer' method."); } if (Vehicle == null) { throw new InvalidOperationException("You must specify a vehicle using the 'WithVehicle' method."); } var job = new MaintenanceJob(); job.Plan(Id, StartTime, EndTime, Vehicle, Customer, Description); return(job); }
public void FinishMaintenanceJob(FinishMaintenanceJob command) { // find job MaintenanceJob job = Jobs.FirstOrDefault(j => j.Id == command.JobId); if (job == null) { throw new MaintenanceJobNotFoundException($"Maintenance job with id {command.JobId} found."); } // check business rules job.FinishedMaintenanceJobCanNotBeFinished(); // handle event MaintenanceJobFinished e = command.MapToMaintenanceJobFinished(); RaiseEvent(e); }
public MaintenanceJob Build() { if (CustomerBuilder == null) { throw new InvalidOperationException("You must specify a customerbuilder using the 'WithCustomerBuilder' method."); } if (VehicleBuilder == null) { throw new InvalidOperationException("You must specify a vehiclebuilder using the 'WithVehicleBuilder' method."); } Customer customer = CustomerBuilder.Build(); Vehicle vehicle = VehicleBuilder.Build(); var job = new MaintenanceJob(); Timeslot plannedTimeslot = Timeslot.Create(StartTime, EndTime); job.Plan(JobId, plannedTimeslot, vehicle, customer, Description); return(job); }