Esempio n. 1
0
        public async Task <BillViewModel> StoreBillAsync(BillViewModel model, string userId)
        {
            //驗證表單
            int planId       = model.PlanId;
            var selectedPlan = await _plansService.GetByIdAsync(planId);

            if (selectedPlan == null)
            {
                throw new EntityNotFoundException(new Plan {
                    Id = planId
                });
            }

            int payWayId       = model.PayWayId;
            var selectedPayWay = _paysService.GetPayWayById(payWayId);

            if (selectedPayWay == null || !selectedPayWay.Active)
            {
                throw new EntityNotFoundException(new PayWay {
                    Id = payWayId
                });
            }

            //取得訂閱紀錄
            var indexModel = await GetSubscribesIndexViewAsync(userId);

            var selectedPlanView = selectedPlan.MapViewModel(_mapper);
            //核對方案與金額
            var activePlanView = await CheckForExceptionsAsync(userId, indexModel, selectedPlanView);

            //進行到這裡表示通過驗證. 開始建立Bill
            var bill = new Bill
            {
                UserId      = userId,
                PlanId      = activePlanView.Id,
                Amount      = activePlanView.Price,
                HasDiscount = activePlanView.HasDiscount,
                PayWayId    = payWayId,
                DeadLine    = DateTime.Today.AddDays(_subscribesSettings.BillDaysToExpire).ToEndDate()
            };

            bill = await _billsService.CreateAsync(bill);

            return(bill.MapViewModel(_mapper));
        }