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)); }
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)); }
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, })); }
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)); }
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)); }
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)); }
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)); }