コード例 #1
0
 public IHttpActionResult CreateSaleRMA([FromBody] RMARequest request, [UserId] int uid)
 {
     return(DoAction(() =>
     {
         _saleRmaService.UserId = uid;
         _saleRmaService.CreateSaleRMA(uid, request);
     }, "生成销售退货单失败"));
 }
コード例 #2
0
        public void TestCreateSaleRma()
        {
            RMARequest request = new RMARequest();

            request.CustomFee = 123123;
            request.StoreFee  = 123;
            request.ReturnProducts.Add(new KeyValuePair <int, int>(7, 1));
            request.ReturnProducts.Add(new KeyValuePair <int, int>(6, 13));
            request.RealRMASumMoney = 123123;

            request.OrderNo = "11420140507925";  //OrderNo=
            request.Remark  = "unitTest";

            Service.CreateSaleRMA(1, request);
        }
コード例 #3
0
        public async Task <IActionResult> OnGetAsync(string id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            RMARequest = await _context.RMARequests.Include(x => x.RMACases).FirstOrDefaultAsync(m => m.Id == id);

            if (RMARequest == null)
            {
                return(NotFound());
            }

            return(Page());
        }
コード例 #4
0
        public async Task <IActionResult> OnPostAsync(string id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            RMARequest = await _context.RMARequests.FindAsync(id);

            if (RMARequest != null)
            {
                _context.RMARequests.Remove(RMARequest);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./RMARequestsIndex").WithSuccess("You are redirected!", string.Format("RMA Number: {0} with Id: {1} deleted.", RMARequest.RMANumber, RMARequest.Id)));
        }
コード例 #5
0
        public async Task <IActionResult> OnPostSaveRequestAsync([FromBody] RMARequestViewModel data)
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.FindByNameAsync(User.Identity.Name);

            var rmaRequest = new RMARequest
            {
                CustomerERPId        = data.CustomerERPId,
                CustomerName         = data.CustomerName,
                CustomerContactEmail = data.CustomerContactEmail,
                CustomerContact      = data.CustomerContact,
                DefectPhenomenon     = data.DefectPhenomenon,
                Remark            = data.Remark,
                InvoiceNumber     = data.InvoiceNumber,
                SalesPersonUserId = data.SalesPersonUserId,
                Status            = data.Status,
                RMAReport         = data.RMAReport,
                RMANumber         = data.RMANumber,
                Attachments       = new List <FileAttachment>(),
                SubmittedByUserId = user.Id,
                SubmittedDate     = DateTime.UtcNow,
                RMACases          = new List <RMACase>(),
            };

            // prepare partnumbers & serialnumbers
            foreach (var item in data.RMARequestItems)
            {
                if (!string.IsNullOrEmpty(item.PartNumber) && !string.IsNullOrEmpty(item.SerialNumber))
                {
                    rmaRequest.PartSerialNumbers += item.PartNumber + "," + item.SerialNumber + ";";
                }
            }

            if (data.RMANumber != null)
            {
                if (data.RMAIssueDate == null)
                {
                    rmaRequest.RMAIssueDate = DateTime.UtcNow;
                }
            }

            _context.RMARequests.Add(rmaRequest);
            _context.SaveChangesAsync().Wait();

            // Set TempData for notification manually
            AlertViewModel alert = new AlertViewModel
            {
                AlertType  = "success",
                AlertTitle = "You are redirected!",
                AlertBody  = string.Format("RMAId: {0} created.", rmaRequest.Id)
            };

            TempData.Put <AlertViewModel>("alert", alert);
            return(new JsonResult(string.Format("RMAId: {0} created.", rmaRequest.Id)));
            //return RedirectToPage("./RMARequestsIndex")
            //    .WithSuccess("You are redirected!",
            //    string.Format("RMAId: {0} created.", rmaRequest.Id));
        }
コード例 #6
0
 public void CreateSaleRmaAuto(int user, RMARequest request)
 {
     CreateSaleRmaSub(user, request, "网络自助退货");
 }
コード例 #7
0
        private void CreateSaleRmaSub(int userId, RMARequest rma, string saleSource)
        {
            if (string.Empty == rma.Remark)
            {
                throw new RmaException(string.Format("没有退货备注,订单明细号:{0}", rma.OrderNo));
            }

            List <OPC_SaleDetail> saleDetails =
                _saleDetailRepository.GetByOrderNo(rma.OrderNo, 1, 1000).Result.Where(t => !t.BackNumber.HasValue || t.BackNumber.Value < t.SaleCount).OrderByDescending(t => t.SaleCount).ToList();
            List <OPC_Sale> sales =
                _saleRepository.GetByOrderNo(rma.OrderNo, -1).OrderByDescending(t => t.SalesCount).ToList();
            IList <OrderItem> orderItems =
                _orderItemRepository.GetByIDs(rma.ReturnProducts.Select(t => t.Key));

            using (var db = new YintaiHZhouContext())
                using (var ts = new TransactionScope())
                {
                    IList <RmaConfig> rmaInfos = new List <RmaConfig>();
                    foreach (var kv in rma.ReturnProducts)
                    {
                        var orderItemId = kv.Key;
                        var rmaCount    = kv.Value;
                        var item        = db.Set <OrderItem>().FirstOrDefault(x => x.Id == orderItemId);
                        if (item == null)
                        {
                            throw new RmaException(string.Format("无效的商品明细记录({0})或商品ID({1})", kv.Key, kv.Value));
                        }

                        var items = from i in db.Set <RMAItem>()
                                    from r in db.Set <RMA>()
                                    from o in db.Set <Order>()
                                    where
                                    i.RMANo == r.RMANo &&
                                    r.OrderNo == o.OrderNo &&
                                    i.ProductId == item.ProductId &&
                                    o.OrderNo == rma.OrderNo &&
                                    !InvalidRmaStatus.Contains(r.Status)

                                    select i;

                        int countOfItems = items.Any() ? items.Sum(i => i.Quantity) : 0;

                        if (item.Quantity - countOfItems < rmaCount)
                        {
                            throw new RmaException("退货数量大于可退货数量");
                        }

                        OrderItem oItem = orderItems.FirstOrDefault(t => t.Id == kv.Key);

                        List <OPC_SaleDetail> details =
                            saleDetails.Where(t => t.OrderItemId == kv.Key).OrderByDescending(t => t.SaleCount).ToList();
                        int            returnCount = kv.Value;
                        OPC_SaleDetail detail      = details.FirstOrDefault();
                        if (detail == null)
                        {
                            //没有销售明细
                            throw new RmaException(string.Format("没有销售明细不存在,订单明细号:{0}", kv.Key));
                        }

                        while (detail != null && returnCount > CalculateRmaCount(detail))
                        {
                            RmaConfig opcRma = rmaInfos.FirstOrDefault(t => t.SaleOrderNo == detail.SaleOrderNo);
                            if (opcRma == null)
                            {
                                opcRma = new RmaConfig(userId)
                                {
                                    SaleRmaSource = saleSource,
                                    RmaNo         = CreateRmaNo(),
                                    SaleOrderNo   = detail.SaleOrderNo,
                                    RefundAmount  = rma.RealRMASumMoney,
                                    StoreFee      = rma.StoreFee,
                                    CustomFee     = rma.CustomFee
                                };
                                rma.RealRMASumMoney = 0;
                                rma.StoreFee        = 0;
                                rma.CustomFee       = 0;

                                opcRma.OpcSale = sales.FirstOrDefault(t => t.SaleOrderNo == opcRma.SaleOrderNo);
                                opcRma.StoreID = _sectionRepository.GetByID(opcRma.OpcSale.SectionId.Value).StoreId.Value;
                                rmaInfos.Add(opcRma);
                            }

                            int countCanRMA = CalculateRmaCount(detail);

                            var opcRmaDetail = new SubRmaConfig
                            {
                                OpcSaleDetail = detail,
                                OrderItem     = oItem,
                                OrderDetailId = kv.Key,
                                ReturnCount   = countCanRMA
                            };
                            opcRma.Details.Add(opcRmaDetail);
                            rmaInfos.Add(opcRma);

                            //更新退货数量
                            UpdateSaleDetailOfBackNum(detail, countCanRMA, db);

                            returnCount = returnCount - countCanRMA;
                            details.Remove(detail);
                            detail = details.FirstOrDefault();
                        }

                        if (returnCount > 0)
                        {
                            RmaConfig config = rmaInfos.FirstOrDefault(t => t.SaleOrderNo == detail.SaleOrderNo);
                            if (config == null)
                            {
                                config = new RmaConfig(userId)
                                {
                                    SaleRmaSource = saleSource,
                                    Reason        = rma.Remark,
                                    SaleOrderNo   = detail.SaleOrderNo,
                                    RefundAmount  = rma.RealRMASumMoney,
                                    StoreFee      = rma.StoreFee,
                                    CustomFee     = rma.CustomFee
                                };

                                config.OpcSale = sales.FirstOrDefault(t => t.SaleOrderNo == config.SaleOrderNo);
                                config.StoreID = _sectionRepository.GetByID(config.OpcSale.SectionId.Value).StoreId.Value;
                                config.RmaNo   = CreateRmaNo();
                                rmaInfos.Add(config);
                            }
                            var subConfig = new SubRmaConfig
                            {
                                OpcSaleDetail = detail,
                                OrderItem     = oItem,
                                OrderDetailId = kv.Key,
                                ReturnCount   = returnCount
                            };
                            config.Details.Add(subConfig);
                            //更新退货数量
                            UpdateSaleDetailOfBackNum(detail, returnCount, db);
                        }
                    }
                    Save(rmaInfos);
                    ts.Complete();
                }
        }
コード例 #8
0
 public void CreateSaleRMA(int userId, RMARequest rma)
 {
     CreateSaleRmaSub(userId, rma, "客服退货");
 }