public ActionResult RemoveProduct(long eventId, long customerId) { var order = _orderRepository.GetOrder(customerId, eventId); var customer = _customerRepository.GetCustomer(customerId); var model = new ProductOrderItemEditModel() { CustomerId = customerId, EventId = eventId, CustomerName = customer.NameAsString, Order = order, RefundRequest = new RefundRequestEditModel() { OrderId = order.Id, RefundType = (int)RefundRequestType.CDRemoval }, Payments = new PaymentEditModel() { PaymentFlow = PaymentFlow.Out, AllowedPaymentTypes = new[] { new OrderedPair <long, string>(PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name) } } }; CompleteModel(model); return(View(model)); }
private void SaveOrderforProductRemove(ProductOrderItemEditModel model) { var order = model.Order; _orderController.NegateOrderLineItems(model.ProductOrderDetailIds, order, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId); model.Order = order; }
private void CompleteModel(ProductOrderItemEditModel model) { if (model.Payments != null) { model.Payments = new PaymentEditModel { PaymentFlow = PaymentFlow.Out, AllowedPaymentTypes = new[] { new OrderedPair <long, string>( PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name) } } } ; else { model.Payments.PaymentFlow = PaymentFlow.Out; model.Payments.AllowedPaymentTypes = new[] { new OrderedPair <long, string>( PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name) }; } var order = model.Order; if (order.PaymentsApplied != null && order.PaymentsApplied.Count > 0 && order.PaymentsApplied.Where(pa => pa.PaymentType == PaymentType.CreditCard && pa.Amount > 0).Count() > 0) { var cardPayment = (ChargeCardPayment)order.PaymentsApplied.Where(pa => pa.PaymentType == PaymentType.CreditCard).OrderByDescending( pa => pa.DataRecorderMetaData.DateCreated).FirstOrDefault(); string reasonForFailure; if (IoC.Resolve <IChargeCardService>().IsCardValidforRefund(cardPayment, 0, out reasonForFailure)) { model.Payments.ChargeCardonFile = new ChargeCardPaymentEditModel() { ChargeCardPayment = cardPayment, ChargeCard = _chargeCardRepository.GetById(cardPayment.ChargeCardId) }; model.Payments.AllowedPaymentTypes = model.Payments.AllowedPaymentTypes.Concat(new[] { new OrderedPair <long, string>( PaymentType.CreditCardOnFile_Value, PaymentType.CreditCardOnFile_Text) }); } } model.Payments.ExistingBillingAddress = Mapper.Map <Address, AddressEditModel>(_customerRepository.GetCustomer(model.CustomerId).BillingAddress) ?? new AddressEditModel(); }
private bool IsModelValid(ProductOrderItemEditModel model) { var amount = model.Order.OrderDetails.Where( od => od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess && model.ProductOrderDetailIds.Contains(od.Id)).Sum(od => od.Price); if (_settings.IsRefundQueueEnabled) { if ((model.Order.DiscountedTotal - amount) < model.Order.TotalAmountPaid) { var validator = IoC.Resolve <IValidator <RefundRequestEditModel> >(); var result = ValidateModel(validator, model.RefundRequest); if (!string.IsNullOrEmpty(result)) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(result); return(false); } } } else { if ((model.Order.DiscountedTotal - amount) < model.Order.TotalAmountPaid) { var validator = IoC.Resolve <IValidator <PaymentEditModel> >(); var result = ValidateModel(validator, model.Payments); if (!string.IsNullOrEmpty(result)) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(result); return(false); } if (model.Payments.Payments == null || model.Payments.Payments.Count() < 1 || model.Payments.Payments.Sum(p => p.Amount) < model.Payments.Amount) { result = "Please provide the complete payment information"; model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(result); return(false); } } } return(true); }
public ActionResult RemoveProduct(ProductOrderItemEditModel model, PaymentEditModel paymentModel) { try { model.Order = _orderRepository.GetOrder(model.CustomerId, model.EventId); model.Payments = paymentModel; var result = IsModelValid(model); if (!result) { CompleteModel(model); return(View(model)); } if (_settings.IsRefundQueueEnabled) { using (var scope = new TransactionScope()) { SaveOrderforProductRemove(model); CheckEventCustomerResultStateAndDeleteCdGenTrackRecord(model.EventId, model.CustomerId); if (model.RefundRequest != null && model.RefundRequest.RequestedRefundAmount > 0) { _refundRequestService.SaveRequest(model.RefundRequest); } scope.Complete(); } } else { if (paymentModel != null && paymentModel.Payments != null && paymentModel.Payments.Count() > 0) { try { _paymentController.ManagePayment(paymentModel, model.CustomerId, Request.UserHostAddress, "Product_Removal_" + model.CustomerId + "_" + model.ProductOrderDetailIds.FirstOrDefault()); } catch (Exception) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage( "System Failure! Payments were not processed for Customer: " + model.CustomerName + " [Id = " + model.CustomerId + "]. Please contact system administrator at " + _settings.SupportEmail); return(View(model)); } } using (var scope = new TransactionScope()) { SaveOrderforProductRemove(model); if (paymentModel != null && paymentModel.Payments != null && paymentModel.Payments.Count() > 0) { var paymentId = _paymentController.SavePayment(paymentModel, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId); _orderRepository.ApplyPaymentToOrder(model.Order.Id, paymentId); } CheckEventCustomerResultStateAndDeleteCdGenTrackRecord(model.EventId, model.CustomerId); scope.Complete(); } } } catch (Exception ex) { model.Order = _orderRepository.GetOrder(model.CustomerId, model.EventId); CompleteModel(model); model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("System Failure! " + ex.Message); return(View(model)); } model.FeedbackMessage = FeedbackMessageModel.CreateSuccessMessage("Product removed from order successfully!"); return(View(model)); }