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));
 }
Exemple #3
0
        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)));
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #8
0
        internal Customer MapCustomer(SaveCustomerVehicleRequest request)
        {
            var customer = _mapper.Map <SaveCustomerVehicleRequest, Customer>(request);

            return(customer);
        }