Ejemplo n.º 1
0
        public async Task <ActionResult> Edit(string id)
        {
            var manager = new UserManager();
            var user    = await manager.FindByIdAsync(id);

            var customerUserEditViewModel = new CustomerUserEditViewModel(user);
            var discountRateManager       = new DiscountRateManager();
            var discountRate = await discountRateManager.GetCustomerDiscountRateAsync(user.Id);

            if (discountRate != null)
            {
                customerUserEditViewModel.PriceOfWorkDiscountRate = discountRate.PriceOfWork;
                customerUserEditViewModel.SideStoneDiscountRate   = discountRate.SideStone;
                customerUserEditViewModel.StoneSetterDiscountRate = discountRate.StoneSetter;
                customerUserEditViewModel.Loss18KRate             = discountRate.Loss18K;
                customerUserEditViewModel.LossPtRate = discountRate.LossPt;
            }

            var customerInfoManager = new CustomerInfoManager(User);
            var customerInfo        = await customerInfoManager.GetCustomerInfoAsync(user.Id);

            if (customerInfo != null)
            {
                customerUserEditViewModel.Address = customerInfo.Address;
            }

            return(View(customerUserEditViewModel));
        }
Ejemplo n.º 2
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));
        }
Ejemplo n.º 3
0
        private async Task SaveCustomerDiscountRate(CustomerUserEditViewModel model)
        {
            var manager      = new DiscountRateManager();
            var discountRate = await manager.GetCustomerDiscountRateAsync(model.Id);

            discountRate.CreatorId   = User.Id;
            discountRate.Created     = DateTime.Now;
            discountRate.CustomerId  = model.Id;
            discountRate.PriceOfWork = model.PriceOfWorkDiscountRate;
            discountRate.SideStone   = model.SideStoneDiscountRate;
            discountRate.StoneSetter = model.StoneSetterDiscountRate;
            discountRate.LossPt      = model.LossPtRate;
            discountRate.Loss18K     = model.Loss18KRate;

            await manager.SaveDiscountRateAsync(discountRate);
        }
Ejemplo n.º 4
0
        public async Task <ActionResult> List(CustomerQueryRequest request)
        {
            if (!Request.IsAjaxRequest())
            {
                return(View());
            }

            var manager = new UserManager();
            var paging  = await manager.GetCustomersAsync(request.Start, request.Take, request.GetCustomerListQueryFilter(User));

            var customerIds = paging.List.Select(c => c.Id);

            var dicountRateManager = new DiscountRateManager();
            var dicountRates       = await dicountRateManager.GetCustomerDiscountRatesAsync(customerIds);

            var customerInfoManager = new CustomerInfoManager(User);
            var customerInfos       = await customerInfoManager.GetCustomerInfosRatesAsync(customerIds);

            var customers = paging.List.Select(u =>
            {
                var customerViewModel = new CustomerViewModel(u);
                var dicountRate       = dicountRates.FirstOrDefault(r => r.CustomerId == u.Id);
                if (dicountRate != null)
                {
                    customerViewModel.PriceOfWorkDiscountRate = dicountRate.PriceOfWork;
                    customerViewModel.SideStoneDiscountRate   = dicountRate.SideStone;
                    customerViewModel.StoneSetterDiscountRate = dicountRate.StoneSetter;
                    customerViewModel.Loss18KRate             = dicountRate.Loss18K;
                    customerViewModel.LossPtRate = dicountRate.LossPt;
                }

                var customerInfo = customerInfos.FirstOrDefault(r => r.UserId == u.Id);
                if (customerInfo != null)
                {
                    customerViewModel.Address = customerInfo.Address;
                }

                return(customerViewModel);
            });

            return(Json(true, string.Empty, new
            {
                paging.Total,
                List = customers,
            }));
        }
Ejemplo n.º 5
0
        public async Task <ActionResult> Detail(string id)
        {
            var manager       = new ShipmentManager(User);
            var shipmentOrder = await manager.GetShipmentOrderAsync(id);


            var discountRateManager = new DiscountRateManager();
            var discountRate        = await discountRateManager.GetCustomerDiscountRateAsync(shipmentOrder.CustomerId);

            var shipmentOrderViewModel = Mapper.Map <ShipmentOrder, ShipmentOrderViewModel>(shipmentOrder);

            shipmentOrderViewModel.SideStoneRate   = (double)discountRate.SideStone / 100;
            shipmentOrderViewModel.StoneSetterRate = (double)discountRate.StoneSetter / 100;

            shipmentOrderViewModel.ShipmentOrderInfos.Each(f => f.Hhz = Math.Round(f.GoldWeight * (1 + f.LossRate / 100), 2));

            shipmentOrderViewModel.TotalArrearage =
                await new ReconciliationManager(User).GetTotalSurplusArrearageAsync(shipmentOrder.CustomerId);
            return(View(shipmentOrderViewModel));
        }
Ejemplo n.º 6
0
        public async Task <ActionResult> Edit(string id)
        {
            var manager       = new ShipmentManager(User);
            var shipmentOrder = await manager.GetShipmentOrderAsync(id);

            var shipmentOrderViewModel = Mapper.Map <ShipmentOrder, ShipmentOrderViewModel>(shipmentOrder);

            var discountRateManager = new DiscountRateManager();
            var discountRate        = await discountRateManager.GetCustomerDiscountRateAsync(shipmentOrder.CustomerId);

            shipmentOrderViewModel.SideStoneRate = (double)discountRate.SideStone / 100;
            shipmentOrderViewModel.ShipmentOrderInfos.Each(f =>
            {
                f.Hhz        = Math.Round(f.GoldWeight * (1 + f.LossRate / 100), 2);
                f.GoldAmount = f.GoldPrice * f.Hhz;
                f.TotalSetStoneWorkingCost = f.OrderSetStoneInfos.Sum(r => r.SetStoneWorkingCost) * ((double)discountRate.StoneSetter / 100);
                f.SideStoneNumber          = f.OrderSetStoneInfos.Sum(r => r.Number);
                f.SideStoneTotalAmount     = f.OrderSetStoneInfos.Sum(r => r.TotalAmount) * ((double)discountRate.SideStone / 100);
                f.SideStoneWeight          = f.OrderSetStoneInfos.Sum(r => r.Weight);
            }
                                                           );
            return(View("create", shipmentOrderViewModel));
        }