Example #1
0
        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));
        }
Example #2
0
        private void SaveOrderforProductRemove(ProductOrderItemEditModel model)
        {
            var order = model.Order;

            _orderController.NegateOrderLineItems(model.ProductOrderDetailIds, order, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);
            model.Order = order;
        }
Example #3
0
        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();
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }