Esempio n. 1
0
        public async Task <BillEditForm> GetEditBillFormAsync(int billId, string userId)
        {
            var bill = _billsService.GetById(billId);

            if (bill == null)
            {
                throw null;
            }
            if (bill.Payed)
            {
                return(null);            //已經支付, 應該去Details
            }
            var form = new BillEditForm()
            {
                Bill = bill.MapViewModel(_mapper)
            };

            bool canPay = !bill.Expired;

            if (canPay)
            {
                var bills = await _billsService.FetchByUserAsync(new User { Id = userId }, new Plan { Id = bill.PlanId });

                if (bills.HasItems())
                {
                    //查看是否已經有同方案, 已支付的帳單
                    var payedBill = bills.Where(x => x.Payed).FirstOrDefault();
                    if (payedBill != null)
                    {
                        canPay = false;
                    }
                }
            }

            if (canPay)
            {
                var payways = (await _paysService.FetchPayWaysAsync()).GetOrdered();
                form.PayWays = payways.MapViewModelList(_mapper);
            }

            return(form);
        }
        public async Task <ActionResult> Edit(int id)
        {
            var bill = _billsService.GetById(id);

            if (bill == null)
            {
                return(NotFound());
            }
            if (bill.Payed)
            {
                return(NotFound());                        //已經支付, 應該去Details
            }
            var form = new BillEditForm()
            {
                Bill = bill.MapViewModel(_mapper)
            };

            bool canPay = !bill.Expired;

            if (canPay)
            {
                var bills = await _billsService.FetchByUserAsync(new User { Id = CurrentUserId }, new Plan { Id = bill.PlanId });

                if (bills.HasItems())
                {
                    //查看是否已經有同方案, 已支付的帳單
                    var payedBill = bills.Where(x => x.Payed).FirstOrDefault();
                    if (payedBill != null)
                    {
                        canPay = false;
                    }
                }
            }

            if (canPay)
            {
                var payways = (await _paysService.FetchPayWaysAsync()).GetOrdered();
                form.PayWays = payways.MapViewModelList(_mapper);
            }

            return(Ok(form));
        }
Esempio n. 3
0
        public async Task <BillEditForm> GetCreateBillFormAsync(string userId)
        {
            var indexModel = await GetSubscribesIndexViewAsync(userId);

            var model = new BillEditForm();

            var plan = indexModel.Plan;

            if (plan == null)
            {
                return(model);              //正在訂閱期內或無方案可訂閱
            }
            //查看是否已經有帳單未繳(同方案)
            var bills = await _billsService.FetchByUserAsync(new User { Id = userId }, new Plan { Id = plan.Id });

            if (bills.HasItems())
            {
                //帳單有繳的話, 應該在訂閱期內
                //所以應該只會有未繳的
                var unPayedBills = bills.Where(x => !x.Payed).ToList();
                if (unPayedBills.IsNullOrEmpty())
                {
                    //沒有未繳帳單,異常
                    //例外
                    _logger.LogException(new BillPayedButNoCurrentSubscribe(new User {
                        Id = userId
                    }, new Plan {
                        Id = plan.Id
                    }));
                    return(model);
                }
                else
                {
                    //有未繳帳單, 找沒過期的
                    var canPayBill = unPayedBills.Where(x => !x.Expired).FirstOrDefault();
                    if (canPayBill != null)
                    {
                        model.Bill = canPayBill.MapViewModel(_mapper);
                    }
                }
            }

            //只有進行到這裡,才可建立新訂單
            model.Plan = plan;

            var payways = (await _paysService.FetchPayWaysAsync()).GetOrdered();

            model.PayWays = payways.MapViewModelList(_mapper);

            if (model.Bill == null)
            {
                model.Bill = new BillViewModel()
                {
                    PayWayId = payways.FirstOrDefault().Id
                }
            }
            ;


            return(model);
        }