Пример #1
0
        public async Task <ActionResult> Create([NamedModelBinder(typeof(CommaSeparatedModelBinder), "orderIds")] string[] orderIds)
        {
            if (!orderIds.Any())
            {
                return(Error("订单号不能为空"));
            }

            var orderManager = new OrderManager(User);
            var orders       = await orderManager.GetOrdersAsync(orderIds);

            //if (!orders.All(r => r.OrderStatus == OrderStatus.ToBeShip))
            //    return Error("订单号状态不是待出货");

            var customers = orders.Select(r => r.Customer).Distinct().ToList();

            if (customers.Count > 1)
            {
                return(Error("生成出货单不能选择了多个公司"));
            }

            var customer = customers.FirstOrDefault();

            var discountRateManager = new DiscountRateManager();
            var discountRate        = await discountRateManager.GetCustomerDiscountRateAsync(customer.Id);

            var shipmentOrderViewModel = new ShipmentOrderViewModel()
            {
                SideStoneRate   = (double)discountRate.SideStone / 100,
                StoneSetterRate = (double)discountRate.StoneSetter / 100
            };

            shipmentOrderViewModel.ShipmentOrderInfos = await Task.WhenAll(orders.Select(async o =>
            {
                var dailyGoldPriceManager      = new DailyGoldPriceManager();
                var dailyGoldPrice             = await dailyGoldPriceManager.GetNewDailyGoldPriceAsync(o.ColorFormId);
                var shipmentOrderInfoViewModel = new ShipmentOrderInfoViewModel(o)
                {
                    GoldPrice = dailyGoldPrice == null ? 0 : dailyGoldPrice.Price,
                    LossRate  = o.ColorForm.Name.ToLower().Contains("pt") ? discountRate.LossPt : discountRate.Loss18K,
                };

                shipmentOrderInfoViewModel.Hhz        = Math.Round(shipmentOrderInfoViewModel.GoldWeight * (1 + shipmentOrderInfoViewModel.LossRate / 100), 2);
                shipmentOrderInfoViewModel.GoldAmount = shipmentOrderInfoViewModel.GoldPrice *shipmentOrderInfoViewModel.Hhz;
                shipmentOrderInfoViewModel.TotalSetStoneWorkingCost = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.SetStoneWorkingCost) * ((double)discountRate.StoneSetter / 100);
                shipmentOrderInfoViewModel.SideStoneNumber          = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.Number);
                shipmentOrderInfoViewModel.SideStoneWeight          = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.Weight);
                shipmentOrderInfoViewModel.SideStoneTotalAmount     = shipmentOrderInfoViewModel.OrderSetStoneInfos.Sum(r => r.TotalAmount) * ((double)discountRate.SideStone / 100);;
                shipmentOrderInfoViewModel.RushCost = GetOrderRushCost(o);
                shipmentOrderInfoViewModel.RiskFee  = o.IsInsure ? GetRiskFee(o.Insurance, o.RiskType) : 0;
                return(shipmentOrderInfoViewModel);
            }));

            shipmentOrderViewModel.CustomerName = customer.Name;
            shipmentOrderViewModel.CustomerId   = customer.Id;
            shipmentOrderViewModel.TotalNumber  = shipmentOrderViewModel.ShipmentOrderInfos.Sum(r => r.Number);

            return(View(shipmentOrderViewModel));
        }
Пример #2
0
        public async Task <JsonResult> Delete(int id)
        {
            if (id <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(id));
            }

            var manager = new DailyGoldPriceManager(User);
            var result  = await manager.DeleteDailyGoldPriceAsync(id);

            return(Json(result));
        }
Пример #3
0
        public async Task <ActionResult> List(PagingRequest request)
        {
            if (!Request.IsAjaxRequest())
            {
                return(View());
            }

            var manager = new DailyGoldPriceManager(User);
            var paging  = await manager.GetDailyGoldPrices(request.Start, request.Take);

            var users = paging.List.Select(u =>
                                           new DailyGoldPriceViewModel(u));

            return(Json(true, string.Empty, new
            {
                paging.Total,
                List = users,
            }));
        }
Пример #4
0
        public async Task <JsonResult> Edit(DailyGoldPriceViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(Json(false, data: ErrorToDictionary()));
            }

            var dailyGoldPrice = new DailyGoldPrice()
            {
                Id          = viewModel.Id,
                ColorFormId = viewModel.ColorFormId,
                CompanyId   = User.CompanyId,
                CreatorId   = User.Id,
                Price       = viewModel.Price,
                Date        = Convert.ToDateTime(viewModel.Date)
            };
            var manager = new DailyGoldPriceManager(User);
            var result  = await manager.SaveDailyGoldPrice(dailyGoldPrice);

            return(Json(result));
        }
Пример #5
0
        public async Task <ActionResult> Edit(int id = 0)
        {
            var manager = new DailyGoldPriceManager(User);
            var dailyGoldPriceViewModel = new DailyGoldPriceViewModel();

            if (id > 0)
            {
                var dailyGoldPrice = await manager.GetDailyGoldPriceAsync(id);

                if (dailyGoldPrice != null)
                {
                    dailyGoldPriceViewModel = new DailyGoldPriceViewModel(dailyGoldPrice);
                }
            }

            var colorFormManager = new BasicDataManager(User);

            dailyGoldPriceViewModel.ColorForms = await colorFormManager.GetColorFormsAsync();

            return(View(dailyGoldPriceViewModel));
        }
Пример #6
0
        public async Task <IHttpActionResult> SpotGoods(SpotGoodsQueryRequest request)
        {
            var manager   = new SpotGoodsManager();
            var spotGoods = await manager.GetSpotGoodsAsync(request.GetSpotGoodsListQueryFilter());

            if (spotGoods == null)
            {
                return(NotFound("现货不存在"));
            }

            var spotGoodsViewModel    = new SpotGoodListItemViewModel(spotGoods);
            var dailyGoldPriceManager = new DailyGoldPriceManager();
            var dailyGoldPrice        = await dailyGoldPriceManager.GetNewDailyGoldPriceAsync(spotGoodsViewModel.ColorFormId);

            spotGoodsViewModel.DailyGoldPrice = dailyGoldPrice.Price;
            if (spotGoodsViewModel.Price == 0)
            {
                var goldCost = dailyGoldPrice.Price * spotGoodsViewModel.GoldWeight * (1 + (double)spotGoodsViewModel.Loss18KRate / 100);
                spotGoodsViewModel.Price = decimal.Round(((decimal)(spotGoodsViewModel.BasicCost + goldCost + spotGoods.SetStoneInfos.Sum(r => r.Price * r.Weight + r.Number * r.WorkingCost))), 2);
            }
            return(Ok(spotGoodsViewModel));
        }
Пример #7
0
        public async Task <JsonResult> Add(IEnumerable <DailyGoldPriceViewModel> dailyGoldPriceViewModels)
        {
            if (!ModelState.IsValid)
            {
                return(Json(false, data: ErrorToDictionary()));
            }

            var dailyGoldPrices = dailyGoldPriceViewModels.Select(r =>
            {
                return(new DailyGoldPrice
                {
                    ColorFormId = r.ColorFormId,
                    CompanyId = User.CompanyId,
                    Date = Convert.ToDateTime(r.Date),
                    Price = r.Price,
                    CreatorId = User.Id
                });
            });
            var manager = new DailyGoldPriceManager(User);
            var result  = await manager.SaveDailyGoldPrices(dailyGoldPrices);

            return(Json(true));
        }