Esempio n. 1
0
 public async Task UpdateCase([FromBody] PostPaymentUpdateRequest parkingPermitUpdateRequest)
 => await _parkingPermitsService.UpdateCase(parkingPermitUpdateRequest);
        public async Task UpdateCase(PostPaymentUpdateRequest update)
        {
            HttpResponse <Case> response = await _verintServiceGateway.GetCase(update.Reference);

            if (!response.IsSuccessStatusCode || response.ResponseContent is null)
            {
                throw new HttpResponseException(HttpStatusCode.FailedDependency,
                                                $"{nameof(ParkingPermitsService)}: {nameof(UpdateCase)}: " +
                                                $"{nameof(_verintServiceGateway)} {nameof(_verintServiceGateway.GetCase)} " +
                                                $"returned {response.StatusCode}");
            }

            var paymentMessage = update.PaymentStatus.ToPaymentString();

            Case crmCase = response.ResponseContent;

            string cachedResponse = await _distributedCache.GetStringAsync(update.Reference);

            if (string.IsNullOrEmpty(cachedResponse))
            {
                throw new HttpResponseException(HttpStatusCode.FailedDependency,
                                                $"{nameof(ParkingPermitsService)}: {nameof(UpdateCase)}: " +
                                                $"{nameof(_distributedCache)}: Verint Reference = {update.Reference}, " +
                                                $"{nameof(cachedResponse)} {nameof(string.IsNullOrEmpty)}");
            }

            ParkingPermitsRequest parkingPermitsRequest = JsonSerializer.Deserialize <ParkingPermitsRequest>(cachedResponse);

            crmCase.CaseTitle = parkingPermitsRequest.WhatApplication switch
            {
                PermitConstants.NEW_RESIDENT_PERMIT_VALUE => $"{PermitConstants.NEW_RESIDENT_PERMIT_TEXT} - {paymentMessage}",
                PermitConstants.NEW_VISITOR_PERMIT_VALUE => $"{PermitConstants.NEW_VISITOR_PERMIT_TEXT} - {paymentMessage}",
                PermitConstants.RENEW_RESIDENT_PERMIT_VALUE => $"{PermitConstants.RENEW_RESIDENT_PERMIT_TEXT} - {paymentMessage}",
                PermitConstants.RENEW_VISITOR_PERMIT_VALUE => $"{PermitConstants.RENEW_VISITOR_PERMIT_TEXT} - {paymentMessage}",
                _ => string.Empty
            };

            if (update.PaymentStatus.Equals(EPaymentStatus.Success))
            {
                int amountTakenPostion = crmCase.Description.IndexOf("Amount taken:");
                if (amountTakenPostion >= 0)
                {
                    crmCase.Description = $"{crmCase.Description.Substring(0, amountTakenPostion)} Amount taken: £{parkingPermitsRequest.CalculatedCost}";
                }

                var updateCasedescription = await _verintServiceGateway.UpdateCaseDescription(crmCase);

                if (!updateCasedescription.IsSuccessStatusCode)
                {
                    _logger.LogError($"{nameof(ParkingPermitsService.UpdateCase)}: " +
                                     $"{nameof(_verintServiceGateway)} {nameof(_verintServiceGateway.UpdateCaseDescription)} " +
                                     $"{crmCase.CaseReference} failed");
                }

                _mailHelper.SendParkingPermitEmail(EMailTemplate.GenericReport, update.Reference, parkingPermitsRequest);
            }

            var updateCaseTitle = await _verintServiceGateway.UpdateCaseTitle(crmCase);

            if (!updateCaseTitle.IsSuccessStatusCode)
            {
                _logger.LogError($"{nameof(ParkingPermitsService.UpdateCase)}: " +
                                 $"{nameof(_verintServiceGateway)} {nameof(_verintServiceGateway.UpdateCaseTitle)} " +
                                 $"{crmCase.CaseReference} failed");
            }
        }