private void CompleteEditModel(RefundRequestResultEditModel model, long customerId) { string value = _configurationSettingRepository.GetConfigurationValue(ConfigurationSettingName.CancellationFee); if (!string.IsNullOrEmpty(value)) { decimal fee; Decimal.TryParse(value.Trim(), out fee); model.CancellationFee = fee; } if (model.PaymentEditModel == null) { model.PaymentEditModel = new PaymentEditModel { PaymentFlow = PaymentFlow.Out }; } if (_isEccEnabled) { model.PaymentEditModel.AllowedPaymentTypes = new[] { new OrderedPair <long, string>(PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name), new OrderedPair <long, string>(PaymentType.Cash.PersistenceLayerId, PaymentType.Cash.Name), new OrderedPair <long, string>(PaymentType.CreditCard.PersistenceLayerId, PaymentType.CreditCard.Name) } } ; else { model.PaymentEditModel.AllowedPaymentTypes = new[] { new OrderedPair <long, string>(PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name), new OrderedPair <long, string>(PaymentType.Cash.PersistenceLayerId, PaymentType.Cash.Name) } }; var order = _orderRepository.GetOrder(model.OrderId); var validCardPayment = order.PaymentsApplied.Where(pi => pi.PaymentType == PaymentType.CreditCard).OrderBy( pi => pi.DataRecorderMetaData.DateCreated).Select(pi => (ChargeCardPayment)pi).LastOrDefault(); if (validCardPayment != null && (_isEccEnabled || (validCardPayment.Amount > 0 && validCardPayment.DataRecorderMetaData.DateCreated > DateTime.Now.Date.AddDays(-120) && ProcessorResponse.IsValidResponseString(validCardPayment.ProcessorResponse)))) { model.PaymentEditModel.ChargeCardonFile = new ChargeCardPaymentEditModel() { ChargeCardPayment = validCardPayment, ChargeCard = _chargeCardRepository.GetById(validCardPayment.ChargeCardId) }; model.PaymentEditModel.AllowedPaymentTypes = model.PaymentEditModel.AllowedPaymentTypes.Concat(new[] { new OrderedPair <long, string>(PaymentType.CreditCardOnFile_Value, PaymentType.CreditCardOnFile_Text) }); } model.PaymentEditModel.ExistingBillingAddress = Mapper.Map <Address, AddressEditModel>(_customerRepository.GetCustomer(customerId).BillingAddress) ?? new AddressEditModel(); }
private void ManagePaymentsbeforeDataSave(RefundRequestResultEditModel model) { switch (model.RequestResultType) { case RequestResultType.IssueRefund: _paymentController.ManagePayment(model.PaymentEditModel, model.CustomerId, Request.UserHostAddress, "Pr_Rq_IR_" + model.RequestId); break; case RequestResultType.OfferFreeAddonsAndDiscounts: _paymentController.ManagePayment(model.PaymentEditModel, model.CustomerId, Request.UserHostAddress, "Pr_Rq_DiscAdOn_" + model.RequestId); break; } }
public void ManageOrderforRefundRequestwithFreeDiscountandProduct(RefundRequestResultEditModel model, long orderId, long customerId, long processedbyOrgRoleUserId) { var order = _orderRepository.GetOrder(orderId); if (order == null) { return; } var dataRecorder = new DataRecorderMetaData(processedbyOrgRoleUserId, DateTime.Now, null); var productsAvailed = model.OfferFreeProduct.Where(fp => fp.ProductAvailed); foreach (var product in productsAvailed) { long orderItemId = product.OrderItemId; if (orderItemId < 1) { orderItemId = _orderItemRepository.SaveOrderItem(product.ProductId, OrderItemType.ProductItem).Id; var orderDetail = new OrderDetail() { DataRecorderMetaData = dataRecorder, Description = "Offered free product while Resolving Request", DetailType = OrderItemType.ProductItem, ForOrganizationRoleUserId = customerId, OrderId = orderId, OrderItemId = orderItemId, OrderItemStatus = (new OrderItemStatusFactory()).CreateOrderItemStatus( OrderItemType.ProductItem, ProductItemStatus.Availed.StatusCode), Price = 0.00m, Quantity = 1 }; order.OrderDetails.Add(orderDetail); } else { var eproduct = _electronicProductRepository.GetById(product.ProductId); order.OrderDetails.Add(GetRefunTypeOrderLineItem(product.ProductPriceinOrder.Value, "Issuing Refund for Product " + eproduct.Name + " in Order [Id:" + orderId + "]", orderId, customerId, processedbyOrgRoleUserId)); } } if (model.OfferDiscount) { order.OrderDetails.Add(GetRefunTypeOrderLineItem(model.DiscountAmount, "Offered Discount while Resolving Request", orderId, customerId, processedbyOrgRoleUserId)); } order = _orderRepository.SaveOrder(order); }
private static bool IsModelValid(RefundRequestResultEditModel model, IEnumerable <PaymentInstrumentEditModel> Payments) { bool isPaymentsValid = true; bool isModelValid = true; string result = ValidateModel(IoC.Resolve <IValidator <RefundRequestResultEditModel> >(), model); if (!string.IsNullOrEmpty(result)) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(result); isModelValid = false; } if (Payments != null && Payments.Count() > 0) { var validator = IoC.Resolve <IValidator <PaymentInstrumentEditModel> >(); foreach (var payment in Payments) { result = ValidateModel(validator, payment); if (!string.IsNullOrEmpty(result)) { isPaymentsValid = false; payment.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(result); } } } else { if ((model.RequestResultType == RequestResultType.IssueRefund || model.RequestResultType == RequestResultType.OfferFreeAddonsAndDiscounts) && model.RefundAmount > 0) { result = result + " Please provide some payment information.<br />"; model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(result); isModelValid = false; } } return(isPaymentsValid && isModelValid); }
public ActionResult Edit(RefundRequestResultEditModel model, IEnumerable <PaymentInstrumentEditModel> payments) { var request = ((IRefundRequestRepository)_repository).Get(model.RequestId); try { model.PaymentEditModel.Payments = payments; model.PreviousProcessingNotes = request.RefundRequestResult != null ? request.RefundRequestResult.Notes : string.Empty; if (!IsModelValid(model, payments)) { CompleteEditModel(model, model.CustomerId); model.RequestedRefundAmount = request.RequestedRefundAmount; return(View(model)); } var notesToSave = PrepareProcessorNotesHtml(model.Notes, model.PreviousProcessingNotes); var requestResult = Mapper.Map <RefundRequestResultEditModel, RefundRequestResult>(model); requestResult.Notes = notesToSave; requestResult.ProcessedOn = DateTime.Now; requestResult.ProcessedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId; request.RefundRequestResult = requestResult; request.RequestStatus = (long)RequestStatus.Resolved; var currentOrgRole = _sessionContext.UserSession.CurrentOrganizationRole; ManagePaymentsbeforeDataSave(model); bool isPaymentRefunded = false; decimal amountRefunded = 0; if (model.RefundAmount > 0) { isPaymentRefunded = true; amountRefunded = model.RefundAmount; } using (var scope = new TransactionScope()) { long paymentId = 0; switch (model.RequestResultType) { case RequestResultType.AdjustOrder: // Can't do it for Cancelled appointment Record ((IRefundRequestRepository)_repository).SaveProcessorNotes(model.RequestId, notesToSave); scope.Complete(); var guid = Guid.NewGuid(); if (currentOrgRole.CheckRole((long)Roles.FranchisorAdmin)) { Response.RedirectUser("/App/Common/ChangePackage.aspx?" + RefundRequest.ProcessRequestId + "=" + model.RequestId + "&EventId=" + request.EventId + "&CustomerId=" + request.CustomerId + "&" + RefundRequest.ProcessRequest + "=true&guid=" + guid); } else { Response.RedirectUser("/App/CallCenter/CallCenterRep/CallCenterRepChangePackage.aspx?Call=No&" + RefundRequest.ProcessRequestId + "=" + model.RequestId + "&EventId=" + request.EventId + "&CustomerId=" + request.CustomerId + "&" + RefundRequest.ProcessRequest + "=true"); } return(null); case RequestResultType.RescheduleAppointment: ((IRefundRequestRepository)_repository).SaveProcessorNotes(model.RequestId, notesToSave); scope.Complete(); if (currentOrgRole.CheckRole((long)Roles.FranchisorAdmin)) { Response.RedirectUser("/App/Franchisor/FranchisorRescheduleCustomerAppointment.aspx?resolve=true&" + RefundRequest.ProcessRequestId + "=" + model.RequestId + "&EventId=" + request.EventId + "&CustomerId=" + request.CustomerId + "&" + RefundRequest.ProcessRequest + "=true"); } else { Response.RedirectUser("/App/CallCenter/CallCenterRep/CallCenterRepRescheduleCustomerAppointment.aspx?resolve=true&Call=No&" + RefundRequest.ProcessRequestId + "=" + model.RequestId + "&EventID=" + request.EventId + "&CustomerID=" + request.CustomerId + "&" + RefundRequest.ProcessRequest + "=true"); } return(null); case RequestResultType.IssueRefund: if (model.RefundType == RefundRequestType.CustomerCancellation) { var eventCustomerRepository = IoC.Resolve <IEventCustomerRepository>(); var eventCustomer = eventCustomerRepository.GetCancelledEventForUser(request.CustomerId, request.EventId); var customerService = IoC.Resolve <ICustomerService>(); customerService.UnMarkProspectCustomerConverted(eventCustomer.Id, ProspectCustomerTag.Cancellation); _eventCustomerService.CancelAppointment(request.EventId, request.CustomerId, model.PaymentEditModel, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId, model.ChargeCancellationFee); } else { paymentId = _paymentController.SavePayment(model.PaymentEditModel, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId); _orderRepository.ApplyPaymentToOrder(model.OrderId, paymentId); } break; case RequestResultType.OfferFreeAddonsAndDiscounts: _orderController.ManageOrderforRefundRequestwithFreeDiscountandProduct(model, model.OrderId, request.CustomerId, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId); paymentId = _paymentController.SavePayment(model.PaymentEditModel, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId); _orderRepository.ApplyPaymentToOrder(model.OrderId, paymentId); break; case RequestResultType.IssueGiftCertificate: Session[RefundRequest.ProcessRequestId] = request.Id; ((IRefundRequestRepository)_repository).SaveProcessorNotes(model.RequestId, notesToSave); scope.Complete(); Response.RedirectUser("/App/CallCenter/CallCenterRep/GiftCertificate/Details.aspx?Call=No&Amount=" + model.RequestedRefundAmount); return(null); } _repository.Save(request); scope.Complete(); } try { if (isPaymentRefunded) { SendRefundNotification(model.CustomerId, amountRefunded); } } catch (Exception ex) { _logger.Error("Refund Request: Failed to send notification. Message:" + ex.Message + "\n\tStackTrace:" + ex.StackTrace); } Response.RedirectUser("/Finance/RefundRequest"); return(null); } catch (Exception ex) { _logger.Error("Refund Request: Message:" + ex.Message + "\n\tStackTrace:" + ex.StackTrace); model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("System Failure while Processing Request. Message : " + ex.Message); _paymentController.VoidCreditCardGatewayRequests(model.PaymentEditModel); CompleteEditModel(model, model.CustomerId); model.RequestedRefundAmount = request.RequestedRefundAmount; } return(View(model)); }