public async Task <bool> UpdateJob(Jobs.Model.Job job) { if (job == null) { throw new ArgumentNullException(); } using (IJobQueueDataContext context = _contextFactory()) { Job entity = await context.Job.SingleOrDefaultAsync(x => x.JobId == job.JobId); if (entity == null) { throw new ArgumentException($"Job id {job.JobId} does not exist"); } bool statusChanged = entity.Status != (short)job.Status; JobConverter.Convert(job, entity); entity.DateTimeUpdatedUtc = _dateTimeProvider.GetNowUtc(); context.Entry(entity).Property("RowVersion").OriginalValue = job.RowVersion == null ? null : Convert.FromBase64String(job.RowVersion); context.Entry(entity).State = EntityState.Modified; if (job.Status == JobStatusType.Ready) { context.JobSubmission.Add(new JobSubmission() { DateTimeUtc = _dateTimeProvider.GetNowUtc(), JobId = job.JobId }); } try { await context.SaveChangesAsync(); if (statusChanged) { await SendEmailNotification(job); } return(true); } catch (DbUpdateConcurrencyException exception) { throw new Exception( "Save failed. Job details have been changed. Reload the job object and try save again"); } } }
public async Task <long> AddJob(FileUploadJob job) { if (job == null) { throw new ArgumentNullException(); } using (var context = _contextFactory()) { var entity = new Job { DateTimeSubmittedUtc = _dateTimeProvider.GetNowUtc(), JobType = (short)job.JobType, Priority = job.Priority, Status = (short)job.Status, SubmittedBy = job.SubmittedBy, NotifyEmail = job.NotifyEmail, CrossLoadingStatus = (await IsCrossLoadingEnabled(job.JobType)) ? (short)JobStatusType.Ready : (short?)null }; var metaEntity = new FileUploadJobMetaData() { FileName = job.FileName, FileSize = job.FileSize, IsFirstStage = true, StorageReference = job.StorageReference, Job = entity, CollectionName = job.CollectionName, PeriodNumber = job.PeriodNumber, Ukprn = job.Ukprn, TermsAccepted = job.TermsAccepted, CollectionYear = job.CollectionYear }; context.Job.Add(entity); context.FileUploadJobMetaData.Add(metaEntity); await context.SaveChangesAsync(); //send email on create for esf and eas if (job.JobType != JobType.IlrSubmission) { await SendEmailNotification(entity.JobId); } return(entity.JobId); } }
public async Task <long> AddJob(Jobs.Model.Job job) { if (job == null) { throw new ArgumentNullException(); } using (IJobQueueDataContext context = _contextFactory()) { var entity = new Job { DateTimeSubmittedUtc = _dateTimeProvider.GetNowUtc(), JobType = (short)job.JobType, Priority = job.Priority, Status = (short)job.Status, SubmittedBy = job.SubmittedBy, NotifyEmail = job.NotifyEmail, CrossLoadingStatus = (await IsCrossLoadingEnabled(job.JobType)) ? (short)JobStatusType.Ready : (short?)null }; context.Job.Add(entity); context.SaveChanges(); return(entity.JobId); } }