Beispiel #1
0
        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);
        }
Beispiel #2
0
        private void AddProduct(long customerId, Order order, OrganizationRoleUser organizationRoleUser)
        {
            var product = _electronicProductRepository.GetById((long)Product.UltraSoundImages);

            product.Price = 0;

            var orderables = new List <IOrderable> {
                product
            };

            foreach (var orderable in orderables)
            {
                _orderController.AddItem(orderable, 1, customerId, organizationRoleUser.Id, OrderStatusState.FinalSuccess);
            }

            _orderController.PlaceProductOrder(order);
        }
Beispiel #3
0
        public void UndoCdRemoveRequest(RefundRequest refundRequest)
        {
            var order             = _orderRepository.GetOrder(refundRequest.OrderId);
            var activeOrderDetail = _orderController.GetActiveOrderDetail(order);

            var cancelledProductDetail = order.OrderDetails.Where(od => od.DetailType == OrderItemType.ProductItem && !od.IsCompleted)
                                         .Select(od => od).OrderByDescending(od => od.Id).FirstOrDefault();

            if (cancelledProductDetail == null)
            {
                throw new Exception("No CD Removal item found in the order.");
            }

            var eventCustomer          = _eventCustomerRepository.GetById(activeOrderDetail.EventCustomerOrderDetail.EventCustomerId);
            var isExclusivelyRequested = _shippingDetailService.CheckShippingIsExclusivelyRequested(eventCustomer.EventId, eventCustomer.CustomerId);

            var product = _productRepository.GetById(cancelledProductDetail.OrderItem.ItemId);

            product.Price = refundRequest.RequestedRefundAmount;

            var forOrganizationRoleUser     = new OrganizationRoleUser(cancelledProductDetail.ForOrganizationRoleUserId);
            var creatorOrganizationRoleUser = new OrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);

            _orderController.AddItem(product, 1, forOrganizationRoleUser.Id, creatorOrganizationRoleUser.Id, OrderStatusState.FinalSuccess);
            _orderController.PlaceProductOrder(order);

            SaveProductShipping(cancelledProductDetail, activeOrderDetail, isExclusivelyRequested);

            var repository = ((IRepository <RefundRequest>)_refundRequestRepository);

            refundRequest.RequestStatus       = (long)RequestStatus.Reverted;
            refundRequest.RefundRequestResult = new RefundRequestResult
            {
                ProcessedOn = DateTime.Now,
                ProcessedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId
            };
            repository.Save(refundRequest);
        }
        public void ChangePackage(CustomerOrderDetail customerOrderDetail)
        {
            using (var scope = new TransactionScope())
            {
                if (customerOrderDetail.PaymentModel != null)
                {
                    try
                    {
                        _customerPaymentService.ProcessPayment(customerOrderDetail.PaymentModel);
                    }
                    catch (Exception exception)
                    {
                        throw new Exception(exception.Message, exception);
                    }
                }

                try
                {
                    var eventid    = customerOrderDetail.EventId;
                    var customerid = customerOrderDetail.CustomerId;
                    //var eventCustomer = _eventCustomerRepository.Get(eventid, customerid);
                    var order = GetOrder(customerid, eventid);

                    SourceCode sourceCode = null;

                    if (customerOrderDetail.SourceCode != null)
                    {
                        sourceCode = new SourceCode
                        {
                            Id          = customerOrderDetail.SourceCode.SourceCodeId,
                            CouponCode  = customerOrderDetail.SourceCode.SourceCode,
                            CouponValue = customerOrderDetail.SourceCode.DiscountApplied
                        }
                    }
                    ;

                    IOrderController orderController = new OrderController();
                    var orderDetail = orderController.GetActiveOrderDetail(order);

                    if (order == null || order.OrderDetails.IsEmpty())
                    {
                        return;
                    }

                    ShippingDetail shippingDetails = null;

                    if (customerOrderDetail.IsShippingPurchased && customerOrderDetail.ShippingOptions != null && customerOrderDetail.ShippingOptions.Any())
                    {
                        shippingDetails = _patientShippingDetailFactory.GetShippingDetailData(customerOrderDetail);
                    }

                    var orderables      = new List <IOrderable>();
                    var selectedTestIds = new List <long>();

                    if (customerOrderDetail.AlaCarteTests != null && customerOrderDetail.AlaCarteTests.Any())
                    {
                        selectedTestIds = customerOrderDetail.AlaCarteTests.Select(x => x.TestId).ToList();
                    }

                    long packageId = 0;

                    if (customerOrderDetail.PackageModel != null && customerOrderDetail.PackageModel.PackageId > 0)
                    {
                        packageId = customerOrderDetail.PackageModel.PackageId;

                        orderables.Add(_eventPackageRepository.GetByEventAndPackageIds(eventid, packageId));
                        selectedTestIds = RemoveTestsAlreadyInPackage(selectedTestIds, eventid, packageId);
                    }

                    if (!selectedTestIds.IsNullOrEmpty())
                    {
                        var eventTests = _eventTestRepository.GetByEventAndTestIds(eventid, selectedTestIds);
                        if (packageId > 0)
                        {
                            foreach (var eventTest in eventTests)
                            {
                                eventTest.Price = eventTest.WithPackagePrice;
                            }
                        }

                        orderables.AddRange(eventTests);
                    }

                    ElectronicProduct product = null;
                    if (customerOrderDetail.ProductId.HasValue && customerOrderDetail.ProductId.Value > 0)
                    {
                        var productIsAlreadyPurchased =
                            order.OrderDetails.Any(
                                x =>
                                x.DetailType == OrderItemType.ProductItem &&
                                x.OrderItem.ItemId == customerOrderDetail.ProductId.Value);

                        if (!productIsAlreadyPurchased)
                        {
                            product = _electronicProductRepository.GetById(customerOrderDetail.ProductId.Value);
                            orderables.Add(product);
                        }
                    }

                    if (customerOrderDetail.IsShippingPurchased && shippingDetails != null)
                    {
                        IShippingController shippingController = new ShippingController();
                        var shippingDetail = shippingController.OrderShipping(shippingDetails);

                        var shippingDetailOrderDetail = new ShippingDetailOrderDetail
                        {
                            Amount           = shippingDetail.ActualPrice,
                            IsActive         = true,
                            OrderDetailId    = orderDetail.Id,
                            ShippingDetailId = shippingDetail.Id
                        };

                        _shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);
                    }

                    var indentedLineItemsAdded = false;

                    // TODO: applying hook to the system all the indented line items will be attached to the first order item.
                    foreach (var orderable in orderables)
                    {
                        if (!indentedLineItemsAdded && (orderable.OrderItemType == OrderItemType.EventPackageItem || orderable.OrderItemType == OrderItemType.EventTestItem))
                        {
                            _orderController.AddItem(orderable, 1, customerid, _creatorOrganizationRoleUser, sourceCode, null, null, OrderStatusState.FinalSuccess);
                            indentedLineItemsAdded = true;
                        }
                        else
                        {
                            _orderController.AddItem(orderable, 1, customerid, _creatorOrganizationRoleUser, OrderStatusState.FinalSuccess);
                        }
                    }

                    _orderController.PlaceOrder(order);

                    if (shippingDetails != null)
                    {
                        SaveProductShippingDetail(product, orderDetail, shippingDetails);
                    }
                    scope.Complete();
                }
                catch (Exception exception)
                {
                    if (customerOrderDetail.PaymentModel == null)
                    {
                        throw new Exception("An Exception caused while saving the Order.", exception);
                    }

                    var paymentInstruments = customerOrderDetail.PaymentModel.Payments;
                    var chargeCardPayment  = paymentInstruments.ChargeCard ?? null;

                    if (chargeCardPayment == null || paymentInstruments.Amount <= 0)
                    {
                        throw new Exception("An Exception caused while saving the Order.", exception);
                    }

                    var paymentGateway = IoC.Resolve <IPaymentProcessor>();

                    paymentGateway.VoidRequestforaPreviousResponse(chargeCardPayment.ChargeCardPayment.ProcessorResponse);
                    throw new Exception("An Exception caused while saving the Order.", exception);
                }
            }
        }