internal async Task <CommunicationMethod> SendInvite(SaveCustomerVehicleRequest request, DealerConfigurationResponse dealerConfigResponse, CommunicationMethod method) { var dealerInvitationResponse = await _dealerConfigurationService.GetDealerInvitationContent(dealerConfigResponse.RooftopId, dealerConfigResponse.CommunityId); if (dealerInvitationResponse == null) { throw new DealerInvitationContentException(); } switch (method) { case CommunicationMethod.Email: // Send invitation via email. return(await SendEmailWithOtherOption(request, dealerConfigResponse, dealerInvitationResponse)); case CommunicationMethod.SmsOrEmail: { if (!string.IsNullOrEmpty(request.PhoneNumber)) { return(await SendSmsWithOtherOption(request, dealerConfigResponse, dealerInvitationResponse, true)); } return(await SendEmailWithOtherOption(request, dealerConfigResponse, dealerInvitationResponse)); } case CommunicationMethod.EmailOrSms: return(await SendEmailWithOtherOption(request, dealerConfigResponse, dealerInvitationResponse, true)); case CommunicationMethod.Sms: // Send invitation via sms. return(await SendSmsWithOtherOption(request, dealerConfigResponse, dealerInvitationResponse)); default: return(CommunicationMethod.None); } }
public async Task <CommunicationMethod> Invite(SaveCustomerVehicleRequest saveCustomerVehicleRequest, DealerConfigurationResponse dealerConfigResponse, CommunicationMethod method) { if (saveCustomerVehicleRequest == null) { throw new ArgumentNullException(nameof(saveCustomerVehicleRequest)); } return(await SendInvite(saveCustomerVehicleRequest, dealerConfigResponse, method)); }
internal CustomerVehicle MapCustomerVehicle(SaveCustomerVehicleRequest request, Customer customer) { var customerVehicle = _mapper.Map <SaveCustomerVehicleRequest, CustomerVehicle>(request); customerVehicle.InvitationTime = DateTime.Now; if (customer != null) { customerVehicle.Id = customer.Id; } return(customerVehicle); }
internal async Task <(bool, Exception)> SendSmsOrEmail(SaveCustomerVehicleRequest request, DealerConfigurationResponse dealerResponse, DealerInvitationContentResponse dealerInvitationResponse, bool sendEmail = false) { if (sendEmail) { return(await _emailGatewayClient.SendHtmlEmail(dealerResponse.EmailAddress, request.CustomerEmail, dealerInvitationResponse.EmailSubject, GetInvitationText(dealerResponse.DealerId, request.CustomerNo, request.VehicleNo, request.RegistrationNo, dealerInvitationResponse.EmailContent))); } var phoneNumber = FormatInternationalMobileNumber(request.PhoneNumber); return(_smsGatewayClient.SendMessage(_invitationFromPhone, phoneNumber, GetInvitationText(dealerResponse.DealerId, request.CustomerNo, request.VehicleNo, request.RegistrationNo, dealerInvitationResponse.SmsContent))); }
internal Invitation MapInvitation(SaveCustomerVehicleRequest request, int dealerId, int method, CommunicationMethod inviteCommunicationMethod) { var invitation = _mapper.Map <SaveCustomerVehicleRequest, Invitation>(request); invitation.Method = method; invitation.Timestamp = DateTime.Now; invitation.DealerId = dealerId; switch (inviteCommunicationMethod) { case CommunicationMethod.Email: invitation.ContactDetail = request.CustomerEmail; break; case CommunicationMethod.Sms: invitation.ContactDetail = request.PhoneNumber; break; } return(invitation); }
public async Task SaveCustomerVehicle(SaveCustomerVehicleRequest request, DealerConfigurationResponse dealerConfigResponse) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (dealerConfigResponse == null) { throw new ArgumentNullException(nameof(dealerConfigResponse)); } var customer = MapCustomer(request); var customerVehicle = MapCustomerVehicle(request, customer); var existingCustomer = _customerVehicleDal.GetCustomer(request.CustomerNo, request.RooftopId, request.CommunityId); if (existingCustomer == null) { //register customer if could not find in database // not handlerd if cdk autoline give customer already registered. await _customerRegistrationService.Register(customer, customerVehicle); } var customerId = await _customerVehicleDal.SaveCustomer(customer); customerVehicle.CustomerId = customerId; await _customerVehicleDal.SaveCustomerVehicle(customerVehicle); var communicationMethod = GetCommunicationMethod(dealerConfigResponse.CommunicationMethod); var inviteCommunicationMethod = await _customerInvitationService.Invite(request, dealerConfigResponse, communicationMethod); var invitation = MapInvitation(request, dealerConfigResponse.DealerId, dealerConfigResponse.CommunicationMethod, inviteCommunicationMethod); invitation.CustomerId = customer.Id; await _customerVehicleDal.LogInvitationDetail(invitation); }
internal async Task <CommunicationMethod> SendSmsWithOtherOption(SaveCustomerVehicleRequest request, DealerConfigurationResponse dealerResponse, DealerInvitationContentResponse dealerInvitationResponse, bool sendEmailAsSecondOption = false) { (bool smsResponse, Exception ex) = await SendSmsOrEmail(request, dealerResponse, dealerInvitationResponse); if (!smsResponse) { if (sendEmailAsSecondOption) { _telemetryClient?.TrackException(ex); (bool emailResponse, Exception emailEx) = await SendSmsOrEmail(request, dealerResponse, dealerInvitationResponse, true); if (!emailResponse) { throw emailEx; } return(CommunicationMethod.Email); } throw ex; } return(CommunicationMethod.Sms); }
internal Customer MapCustomer(SaveCustomerVehicleRequest request) { var customer = _mapper.Map <SaveCustomerVehicleRequest, Customer>(request); return(customer); }