コード例 #1
0
        /// <summary>
        /// Negating a provided certain order item ids
        /// </summary>
        /// <param name="orderDetailIds"></param>
        /// <param name="order"></param>
        /// <param name="dataRecorderCreatorId"></param>
        public void NegateOrderLineItems(IEnumerable <long> orderDetailIds, Order order, long dataRecorderCreatorId)
        {
            if (order == null)
            {
                throw new InvalidOperationException("The order can not be null.");
            }

            var orderDetailsToBeCancelled = new List <OrderDetail>();

            orderDetailsToBeCancelled.AddRange(order.OrderDetails.Where(od => orderDetailIds.Contains(od.Id)));
            order.OrderDetails.RemoveAll(od => orderDetailIds.Contains(od.Id));
            var  shippingDetailsToCancelled = new List <ShippingDetail>();
            long orderDetailId = 0;

            foreach (var detailsToBeCancelled in orderDetailsToBeCancelled)
            {
                var cancelledOrderDetail = _orderDetailFactory.CreateNewOrderDetail(detailsToBeCancelled,
                                                                                    detailsToBeCancelled.ForOrganizationRoleUserId,
                                                                                    dataRecorderCreatorId);
                order.OrderDetails.Add(detailsToBeCancelled);
                order.OrderDetails.Add(cancelledOrderDetail);

                if (detailsToBeCancelled.DetailType == OrderItemType.ProductItem)
                {
                    OrderDetail orderDetail = GetActiveOrderDetail(order);
                    orderDetailId = orderDetail.Id;
                    var shippingDetails = _shippingDetailRepository.GetProductShippingDetailsForCancellation(orderDetail.Id).ToList();
                    shippingDetails = shippingDetails.Where(sd => sd.Status == ShipmentStatus.Processing).Select(sd => sd).ToList();
                    var shippingDetail = shippingDetails.FirstOrDefault();

                    if (shippingDetail != null)
                    {
                        shippingDetailsToCancelled.Add(shippingDetail);
                        shippingDetails.Remove(shippingDetail);
                    }
                }
            }

            //var lineItem = _lineItems.FirstOrDefault();
            //OrderItem orderItem = _orderItemRepository.SaveOrderItem(lineItem.SecondValue.Id, lineItem.SecondValue.OrderItemType);
            //lineItem.FirstValue.OrderItemId = orderItem.Id;
            //lineItem.FirstValue.OrderId = order.Id;

            //order.OrderDetails.Add(lineItem.FirstValue);

            order = _orderRepository.SaveOrder(order);

            if (shippingDetailsToCancelled.Count > 0)
            {
                IShippingDetailOrderDetailRepository shippingDetailOrderDetailRepository =
                    new ShippingDetailOrderDetailRepository();
                foreach (var shippingDetail in shippingDetailsToCancelled)
                {
                    shippingDetailOrderDetailRepository.UpdateStatus(shippingDetail.Id, orderDetailId, false);
                    var shipping = _shippingDetailRepository.GetById(shippingDetail.Id);
                    shipping.Status = ShipmentStatus.Cancelled;
                    _shippingDetailRepository.Save(shipping);
                }
            }
        }
コード例 #2
0
        private void SaveProductShipping(OrderDetail productDetail, OrderDetail activeOrderDetail, bool isExclusivelyRequested)
        {
            if (productDetail == null || activeOrderDetail == null)
            {
                return;
            }
            var shippingOption = _shippingOptionRepository.GetShippingOptionByProductId(productDetail.OrderItem.ItemId);

            if (shippingOption != null)
            {
                var resultShippingDetails = _shippingDetailRepository.GetShippingDetailsForCancellation(activeOrderDetail.Id);
                var cdShippingDetails     = _shippingDetailRepository.GetProductShippingDetailsForCancellation(activeOrderDetail.Id);

                if (!resultShippingDetails.IsNullOrEmpty() && (cdShippingDetails == null || (cdShippingDetails.Count() < resultShippingDetails.Count())))
                {
                    var address = _addressRepository.GetAddress(resultShippingDetails.First().ShippingAddress.Id);
                    address.Id = 0;
                    var productShippingDetail = new ShippingDetail
                    {
                        ShippingAddress = address,
                        Status          = ShipmentStatus.Processing,
                        ActualPrice     = shippingOption.Price,
                        ShippingOption  = new ShippingOption {
                            Id = shippingOption.Id
                        },
                        IsExclusivelyRequested = isExclusivelyRequested,
                        DataRecorderMetaData   = new DataRecorderMetaData
                        {
                            DataRecorderCreator = _organizationRoleUserRepository.GetOrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                            DateCreated         = DateTime.Now,
                            DateModified        = DateTime.Now
                        }
                    };
                    IShippingController shippingController = new ShippingController();
                    productShippingDetail = shippingController.OrderShipping(productShippingDetail);

                    IRepository <ShippingDetailOrderDetail> shippingDetailOrderDetailRepository = new ShippingDetailOrderDetailRepository();

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

                    shippingDetailOrderDetailRepository.Save(shippingDetailOrderDetail);
                }
            }
        }
コード例 #3
0
        protected void SaveButton_Click(object sender, EventArgs e)
        {
            if (BillingAddressSameRadio.Checked)
            {
                ListItem itemAlreadySelectedState = StateDropDown.Items.FindByValue(StateIdHidden.Value);
                if (itemAlreadySelectedState != null)
                {
                    itemAlreadySelectedState.Selected = true;
                }
                CityText.Text     = CityHidden.Value;
                ZipText.Text      = ZipHidden.Value;
                Address1Text.Text = Address1Hidden.Value;
            }

            bool isStatusUpdated = false;

            TotalAmountPayable = 0.0m;
            var selectedRows = GetSelectedRows();

            try
            {
                using (var transaction = new TransactionScope())
                {
                    if (PaymentMode.SelectedValue != PaymentType.CreditCard.PersistenceLayerId.ToString() ||
                        AddressValidation())
                    {
                        foreach (var row in selectedRows)
                        {
                            if (row == null)
                            {
                                continue;
                            }

                            var orderDetailIdLiteral    = row.FindControl("OrderDetailIdLiteral") as Literal;
                            var shippingDetailIdLiteral = row.FindControl("ShippingDetailIdLiteral") as Literal;
                            var actualPrice             = row.FindControl("PriceLabel") as Label;

                            if (orderDetailIdLiteral != null && shippingDetailIdLiteral != null)
                            {
                                var orderDetailId    = Convert.ToInt64(orderDetailIdLiteral.Text);
                                var shippingDetailId = Convert.ToInt64(shippingDetailIdLiteral.Text);

                                isStatusUpdated = _shippingDetailOrderDetailRepository.UpdateStatus(shippingDetailId, orderDetailId, false);

                                var shippingDetail = _shippingDetailRepository.GetById(shippingDetailId);
                                shippingDetail.Status = ShipmentStatus.Cancelled;
                                _shippingDetailRepository.Save(shippingDetail);

                                var resultShippingDetails  = _shippingDetailRepository.GetShippingDetailsForCancellation(orderDetailId).ToList();
                                var productShippingDetails = _shippingDetailRepository.GetProductShippingDetailsForCancellation(orderDetailId).ToList();
                                if (productShippingDetails.Count > resultShippingDetails.Count)
                                {
                                    var productShippingDetail = productShippingDetails.FirstOrDefault();
                                    if (productShippingDetail != null)
                                    {
                                        _shippingDetailOrderDetailRepository.UpdateStatus(productShippingDetail.Id, orderDetailId, false);
                                        productShippingDetail.Status = ShipmentStatus.Cancelled;
                                        _shippingDetailRepository.Save(productShippingDetail);
                                        CheckEventCustomerResultStateAndDeleteCdGenTrackRecord();
                                    }
                                }

                                if (actualPrice != null && !string.IsNullOrEmpty(actualPrice.Text))
                                {
                                    TotalAmountPayable += Convert.ToDecimal(actualPrice.Text);
                                }
                            }
                        }

                        if (AmountPaid < (DiscountedTotal - TotalAmountPayable))
                        {
                            TotalAmountPayable = 0;
                        }
                        else
                        {
                            TotalAmountPayable = AmountPaid - (DiscountedTotal - TotalAmountPayable);
                        }

                        var isRefundQueueEnabled = IoC.Resolve <ISettings>().IsRefundQueueEnabled;

                        if (PaymentMode.SelectedValue == PaymentType.CreditCard.PersistenceLayerId.ToString() &&
                            BillingAddressDifferentRadio.Checked && !isRefundQueueEnabled)
                        {
                            var creatorOrganizationRoleUser = GetCreatorOrganizationRoleUser();
                            UpdateCustomerBillingAddress(creatorOrganizationRoleUser.Id);
                        }

                        if (isStatusUpdated)
                        {
                            if (TotalAmountPayable > 0)
                            {
                                if (isRefundQueueEnabled)
                                {
                                    var refundRequest          = PrepareRefundRequestObject();
                                    var refundRequestValidator = IoC.Resolve <RefundRequestEditModelValidator>();
                                    var result = refundRequestValidator.Validate(refundRequest);
                                    if (result.IsValid)
                                    {
                                        IoC.Resolve <IRefundRequestService>().SaveRequest(refundRequest);
                                    }
                                    else
                                    {
                                        var propertyNames = result.Errors.Select(er => er.PropertyName).Distinct();
                                        var htmlString    = propertyNames.Aggregate("", (current, property) => current + (result.Errors.Where(er => er.PropertyName == property).FirstOrDefault().ErrorMessage + "&nbsp;&nbsp;"));
                                        MessageBox.ShowErrorMessage(htmlString);
                                        return;
                                    }
                                }
                                else
                                {
                                    var creatorOrganizationRoleUser = GetCreatorOrganizationRoleUser();
                                    var paymentInstrument           = RefundPayment(creatorOrganizationRoleUser,
                                                                                    OrderId + "_" + CustomerId);
                                    if (paymentInstrument != null &&
                                        ApplyPaymentToOrder(creatorOrganizationRoleUser, CurrentOrder, paymentInstrument))
                                    {
                                        transaction.Complete();
                                        Response.RedirectUser(ReturnUrl);
                                    }
                                    else
                                    {
                                        SetAndDisplayErrorMessage("Oops some error occured in the system please try again later.");
                                    }
                                }
                            }
                            transaction.Complete();
                            if (UrlValidator.IsUrlLocalToHost(Request, ReturnUrl))
                            {
                                Response.RedirectUser(ReturnUrl);
                            }
                        }
                        else
                        {
                            SetAndDisplayErrorMessage("Oops some error occured in the system please try again later.");
                        }
                    }
                }
            }
            catch (InvalidOperationException)
            {
            }
            catch { SetAndDisplayErrorMessage("Oops some error occured in the system please try again later."); }
        }