public static Case ToCrmCase(ComplaintDetailsFormBuilder model, IOptions <ComplaintsListConfiguration> complaintsConfig)
        {
            model.CouncilDepartmentSub = CouncilDepartmentSubMapper.SetComplaintCouncilDepartmentSub(model.RevsBensDept, model.EnvironmentDept, model.PlanningDept);
            var events = complaintsConfig.Value.ComplaintsConfigurations;

            var eventCode = string.IsNullOrEmpty(model.CouncilDepartmentSub)
                ? events.FirstOrDefault(_ => _.EventName == model.CouncilDepartment)?.EventCode ?? events.FirstOrDefault(_ => _.EventName == "none")?.EventCode
                : events.FirstOrDefault(_ => _.EventName == model.CouncilDepartmentSub)?.EventCode ?? events.FirstOrDefault(_ => _.EventName == "none")?.EventCode;

            var eventTitle = $"Complaint - {model.ComplaintAbout}";

            var crmCase = new Case
            {
                EventCode   = (int)eventCode,
                EventTitle  = eventTitle,
                Description = GenerateDescription(model.ComplaintAbout, model.ComplaintAboutDetails),
                Customer    = new Customer {
                    Forename  = model.FirstName,
                    Surname   = model.LastName,
                    Email     = model.EmailAddress,
                    Telephone = model.PhoneNumber,
                }
            };

            if (!string.IsNullOrEmpty(model.CustomersAddress.PlaceRef))
            {
                crmCase.Customer.Address = new Address
                {
                    Postcode    = model.CustomersAddress.Postcode,
                    Reference   = model.CustomersAddress.PlaceRef,
                    UPRN        = model.CustomersAddress.PlaceRef,
                    Description = model.CustomersAddress.ToString()
                };
            }
            else
            {
                crmCase.Customer.Address = new Address
                {
                    AddressLine1 = model.CustomersAddress.AddressLine1,
                    AddressLine2 = model.CustomersAddress.AddressLine2,
                    AddressLine3 = model.CustomersAddress.Town,
                    Postcode     = model.CustomersAddress.Postcode,
                    Description  = model.CustomersAddress.ToString()
                };
            }


            return(crmCase);
        }
        private void SendUserSuccessEmailFormBuilder(ComplaintDetailsFormBuilder model, string caseResponse)
        {
            var submissionDetails = new ComplaintsMailModel()
            {
                Subject          = "We've received your formal complaint",
                Reference        = caseResponse,
                FirstName        = model.FirstName,
                LastName         = model.LastName,
                RecipientAddress = model.EmailAddress
            };

            _mailingServiceGateway.Send(new Mail
            {
                Payload  = JsonConvert.SerializeObject(submissionDetails),
                Template = EMailTemplate.ComplaintsSuccess
            });
        }
        public async Task <string> CreateComplaintCaseFormBuilder(ComplaintDetailsFormBuilder model)
        {
            var crmCase = ComplaintModelMapper.ToCrmCase(model, _complaintsConfig);

            try
            {
                _logger.LogWarning($"ComplaintsService.CreateComplaintCase: Attempting to create verint case. {JsonConvert.SerializeObject(crmCase)}");
                var response = await _verintServiceGateway.CreateCase(crmCase);

                SendUserSuccessEmailFormBuilder(model, response.ResponseContent);
                return(response.ResponseContent);
            }
            catch (Exception ex)
            {
                throw new Exception($"ComplimentsComplaintsService CreateComplimentCase an exception has occured while creating the case in verint service", ex);
            }
        }
예제 #4
0
        public async Task <IActionResult> CreateCaseUsingFormBuilder([FromBody] ComplaintDetailsFormBuilder model)
        {
            var result = await _caseService.CreateComplaintCaseFormBuilder(model);

            return(Ok(result));
        }