public async Task Handle(AddNewContractorCommand command, IMessageHandlerContext messageContext)
        {
            try
            {
                var contractorDto       = command.Contractor;
                ContractorStatus status = ContractorStatus.Open;
                var contractDuration    = new DateTimeRange(contractorDto.ContractStartDate, contractorDto.ContractEndDate);
                var contact             = new Contact(new Name(contractorDto.ContactFirstName, contractorDto.ContactLastName), contractorDto.ContactPhoneNumber, contractorDto.ContactAlternatePhoneNumber, contractorDto.ContactEmail);

                var            contractrorAddress = new VO.Address(contractorDto.AddressLine1, contractorDto.AddressLine2, contractorDto.City, contractorDto.StateCode, contractorDto.ZipCode);
                ContractorType type             = contractorDto.Type;
                var            contractorSuffix = _contractorSuffixGenerator.GetContractorSuffixForNewContractor(contractorDto.EinNumber, type);
                //TODO: User should be sending the GUIDs, leaving it for testing to do auto generated guid
                var contractor = new Entities.Contractor(contractorDto.EinNumber + contractorSuffix, contractorDto.ContractorName, contractorDto.DoingBusinessAs, status, type, contractDuration,
                                                         contractorDto.PhoneNumber, contact, contractrorAddress, contractorDto.Email);
                _contractorRepository.AddContractor(contractor);
                await _contractorRepository.SaveAsync();

                await Task.WhenAll(messageContext.Publish(new CommandCompletedEvent(command.Id, DateTime.UtcNow)),
                                   messageContext.Publish(new ContractorAdded(DateTime.Now, contractor.Id, contractor.EinNumber)
                {
                    ContractorEin = contractor.EinNumber
                }));
            }
            catch (Exception ex)
            {
                //TODO: Global Exception logging
                await messageContext.Publish(new CommandFailedEvent(command.Id, ex, DateTime.UtcNow));

                throw;
            }
        }
예제 #2
0
 public void AddContractor(Entities.Contractor contractor)
 {
     contractor.DbState.FirstInsertedBy       = "TODO";
     contractor.DbState.FirstInsertedDateTime = DateTime.UtcNow;
     contractor.DbState.LastSavedBy           = "TODO";
     contractor.DbState.LastSavedDateTime     = DateTime.UtcNow;
     _dbContext.Add(contractor.DbState);
     _eventBus.Publish(new ContractorAdded(DateTime.UtcNow, contractor.Id, contractor.EinNumber));
 }
예제 #3
0
 private void UpdateContractor(Entities.Contractor contractor, UpdateContractorModel updatedModel)
 {
     contractor.UpdateName(updatedModel.ContractorName);
     contractor.UpdateDointBusinessAsName(updatedModel.DoingBusinessAs);
     contractor.UpdateContactDetails(updatedModel.ContactFirstName, updatedModel.ContactLastName, updatedModel.Email, updatedModel.PhoneNumber, updatedModel.AlternatePhoneNumber);
     contractor.UpdateAddress(updatedModel.AddressLine1, updatedModel.AddressLine2, updatedModel.City, updatedModel.StateCode, updatedModel.ZipCode);
     contractor.UpdatePhoneDetails(updatedModel.PhoneNumber, updatedModel.AlternatePhoneNumber);
     contractor.UpdateEmail(updatedModel.Email);
     contractor.RenewContract(updatedModel.ContractStartDate, updatedModel.ContractEndDate);
 }