private void UpdateAddress(Job2Dto tempJobDto) { var addressEntityList = _dbContext.Address .Where(x => tempJobDto.JobInfo.Addresses.Select(a => a.Id).Contains(x.Id)).ToList(); //TODO: Regular mapping from automapper didn't work. It would constantly break when saving. //_mapper.Map(tempJobDto.MoveInfo.Addresses, addressEntityList); AddressDto addressDto = null; foreach (var entity in addressEntityList) { addressDto = tempJobDto.JobInfo.Addresses.FirstOrDefault(p => p.Id == entity.Id); entity.Address1 = addressDto.Address1; entity.Address2 = addressDto.Address2; entity.Address3 = addressDto.Address3; entity.AdditionalAddressInfo = addressDto.AdditionalAddressInfo; entity.City = addressDto.City; entity.Country = addressDto.Country; entity.Display = addressDto.Display; entity.Latitude = addressDto.Latitude; entity.Longitude = addressDto.Longitude; entity.PostalCode = addressDto.PostalCode; entity.State = addressDto.State; entity.Type = addressDto.Type; entity.AdditionalAddressInfo = (entity.Type == "Origin") ? tempJobDto.JobInfo.OriginAddressAdditionalInfo : (entity.Type == "Destination") ? tempJobDto.JobInfo.DestinationAddressAdditionalInfo : null; } _dbContext.Address.UpdateRange(addressEntityList); _dbContext.SaveChanges(); _logger.LogInformation("Address updated"); }
public async Task UpdateJobAsync(Job2Dto dto) { var jobEntity = _dbContext.Job.FirstOrDefault(x => x.Id == dto.Job.JobId); _mapper.Map(dto.Job, jobEntity); jobEntity.DateModified = DateTime.UtcNow; jobEntity.ModifiedBy = GetCurrentUserEmail(); JobCreatedIntegrationEvent jobUpdatedEvent = null; //TODO: Verify when we change the BillTo from Vendor to Account.. bill to Type is being changed. await ResilientTransaction.New(_dbContext).ExecuteAsync(async() => { _dbContext.Job.Update(jobEntity); await _dbContext.SaveChangesAsync(); UpdateTransferee(dto); UpdatePhone(dto); UpdateTransfereeEmail(dto); UpdateAddress(dto); jobUpdatedEvent = jobEntity.FromJob <JobCreatedIntegrationEvent>(); jobUpdatedEvent.UserId = GetCurrentUserEmail(); await _eventLogService.SaveEventAsync(jobUpdatedEvent); }); // Publish the integration event through the event bus _eventBus.Publish(jobUpdatedEvent); await _eventLogService.MarkEventAsPublishedAsync(jobUpdatedEvent.Id); _logger.LogInformation("Job object updated"); }
public async Task <int> AddJobAsync(Job2Dto job2Dto) { _logger.LogInformation("Incoming Dto {0}", job2Dto); string currentUsername = GetCurrentUserEmail(); var job = _mapper.Map <Job>(job2Dto.Job); if (job != null) { JobCreatedIntegrationEvent jobCreatedEvent = null; await ResilientTransaction.New(_dbContext).ExecuteAsync(async() => { job.TransfereeId = SaveTransferee(job2Dto.Transferee); job.AccountEntity = _dbContext.AccountEntity.FirstOrDefault(a => a.Id == job.AccountEntityId); var dateTimeAdded = DateTime.UtcNow; job.DateCreated = dateTimeAdded; job.DateModified = dateTimeAdded; job.CreatedBy = GetCurrentUserEmail(); job.ModifiedBy = GetCurrentUserEmail(); if (job2Dto.Job.IsSurveyAndBid) { job.JobStatus = JobStatusIdentifier.SURVEY_BID; } _dbContext.Job.Attach(job); _dbContext.Entry(job).State = EntityState.Added; await _dbContext.SaveChangesAsync(); //update the fks in the job table var kvp = await SaveAddresses(job2Dto.JobInfo); job.OriginAddressId = kvp.FirstOrDefault(s => s.Key == AddressType.ORIGIN).Value; job.DestinationAddressId = kvp.FirstOrDefault(s => s.Key == AddressType.DESTINATION).Value; await _dbContext.SaveChangesAsync(); jobCreatedEvent = job.FromJob <JobCreatedIntegrationEvent>(); jobCreatedEvent.Transferee = job2Dto.ToTransfereeIntegrationEvent <TransfereeCreatedIntegrationEvent>(); jobCreatedEvent.UserId = GetJobsMoveConsultantEmail(job.Id); await _eventLogService.SaveEventAsync(jobCreatedEvent); }); // Publish the integration event through the event bus _eventBus.Publish(jobCreatedEvent); await _eventLogService.MarkEventAsPublishedAsync(jobCreatedEvent.Id); _logger.LogInformation("Job added {0}", job.Id); } return(job.Id); }
private void UpdateTransferee(Job2Dto tempJobDto) { var transfereeEntity = _dbContext.Transferee.FirstOrDefault(x => x.Id == tempJobDto.Transferee.Id); _mapper.Map(tempJobDto.Transferee, transfereeEntity); _dbContext.Transferee.Update(transfereeEntity); _dbContext.SaveChanges(); _logger.LogInformation("Transferee object updated"); }
private void UpdateTransfereeEmail(Job2Dto tempJobDto) { var emailEntityList = _dbContext.Job .Include(m => m.Transferee.Email) .FirstOrDefault(x => tempJobDto.Job.JobId == x.Id).Transferee.Email.ToList(); tempJobDto.Transferee.Emails.ToList().ForEach(e => e.TransfereeId = tempJobDto.Transferee.Id); //TODO: I got the update and Add working on the list by marking the entity list retrieval as no tracking // and then later adding the list after automapper directly to the context. But Delete isn't working //_mapper.Map(tempJobDto.Transferee.Emails, emailEntityList); var entityToRemove = new List <Email>(); foreach (var entity in emailEntityList) { var dto = tempJobDto.Transferee.Emails.FirstOrDefault(e => e.Id == entity.Id); if (dto == null) { //we need to delete the record because it was deleted from the dto entityToRemove.Add(entity); continue; } entity.Value = dto.Value; entity.Type = dto.EmailType; } //check if any emails need to be added foreach (var emailToBeAdded in tempJobDto.Transferee.Emails.ToList().Where(e => e.Id == 0)) { emailEntityList.Add(new Email { TransfereeId = tempJobDto.Transferee.Id.Value, Type = emailToBeAdded.EmailType, Value = emailToBeAdded.Value }); } emailEntityList.RemoveAll(e => entityToRemove.Select(er => er.Id).Contains(e.Id)); _dbContext.Email.UpdateRange(emailEntityList); _dbContext.Email.RemoveRange(entityToRemove); _dbContext.SaveChanges(); _logger.LogInformation("Email object updated"); }
public static T ToTransfereeIntegrationEvent <T>(this Job2Dto job2Dto) { return(Mapper.Map <T>(job2Dto)); }
private void UpdatePhone(Job2Dto tempJobDto) { //TODO: this made it work. make it better next var phoneDtoList = tempJobDto.Transferee.OriginPhones.ToList(); phoneDtoList.ForEach(p => p.LocationType = "Origin"); var destPhoneList = tempJobDto.Transferee.DestinationPhones.ToList(); destPhoneList.ForEach(p => p.LocationType = "Destination"); phoneDtoList.AddRange(destPhoneList); //Get the list of all Phone Entities and Transferee Phone Entities var transfereePhones = _dbContext.Job .Include(x => x.Transferee.TransfereePhone) .ThenInclude(x => x.Phone) .FirstOrDefault(x => x.Id == tempJobDto.Job.JobId).Transferee.TransfereePhone.ToList(); var phoneEntityList = new List <Phone>(); transfereePhones.ForEach(tp => phoneEntityList.Add(tp.Phone)); //TODO: Regular mapping from automapper didn't work. It would constantly break when saving. //_mapper.Map(tempJobDto.Transferee.OriginPhones, phoneEntityList); var entityToRemove = new List <Phone>(); foreach (var entity in phoneEntityList) { var phoneDto = phoneDtoList.FirstOrDefault(p => p.Id == entity.Id); if (phoneDto == null) { //we need to delete the record because it was deleted from the dto entityToRemove.Add(entity); continue; } entity.Extension = phoneDto.Extension; entity.CountryCode = phoneDto.CountryCode; entity.Primary = phoneDto.Primary; entity.Type = phoneDto.PhoneType; entity.NationalNumber = phoneDto.NationalNumber; entity.DialCode = phoneDto.DialCode; foreach (var transfereePhone in entity.TransfereePhone.Where(tp => tp.TransfereeId == tempJobDto.Transferee.Id)) { transfereePhone.Type = phoneDto.LocationType; } } //Check to see if anything needs to be added foreach (var phoneToBeAdded in phoneDtoList.Where(p => p.Id == 0)) { phoneEntityList.Add(new Phone { CountryCode = phoneToBeAdded.CountryCode, Extension = phoneToBeAdded.Extension, Primary = phoneToBeAdded.Primary, Type = phoneToBeAdded.PhoneType, NationalNumber = phoneToBeAdded.NationalNumber, TransfereePhone = new List <TransfereePhone> { new TransfereePhone { TransfereeId = tempJobDto.Transferee.Id.Value, Type = phoneToBeAdded.LocationType } } }); } phoneEntityList.RemoveAll(e => entityToRemove.Select(er => er.Id).Contains(e.Id)); _dbContext.Phone.UpdateRange(phoneEntityList); List <TransfereePhone> transfereePhonesToRemove = new List <TransfereePhone>(); foreach (var phoneEntity in entityToRemove) { transfereePhonesToRemove.AddRange(phoneEntity.TransfereePhone.ToList()); } _dbContext.TransfereePhone.RemoveRange(transfereePhonesToRemove); _dbContext.Phone.RemoveRange(entityToRemove); _dbContext.SaveChanges(); _logger.LogInformation("Phone and TransfereePhone objects updated"); }