Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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");
        }
Ejemplo n.º 5
0
        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");
        }
Ejemplo n.º 6
0
 public static T ToTransfereeIntegrationEvent <T>(this Job2Dto job2Dto)
 {
     return(Mapper.Map <T>(job2Dto));
 }
Ejemplo n.º 7
0
        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");
        }