private async Task <AllowanceViewModel> GetCreateViewModel()
        {
            var user = await userManager.GetUserAsync(HttpContext.User);

            var viewModel = new AllowanceViewModel();
            List <AllowanceType> allowanceTypes = _context.AllowanceType.Where(e => e.IsActive).ToList();

            viewModel.ExistingAllowances = _context.Allowance.Where(e => e.AssignedById == user.Id && e.CreatedOn > DateTime.Now.AddMonths(-3)).ToList();
            List <AllowanceType> tempAllowanceTypes = new List <AllowanceType>();

            allowanceTypes.ForEach(model =>
            {
                model.catagoriesList = model.Categories != null ? JsonConvert.DeserializeObject <List <Category> >(model.Categories) : null;
                if (model.catagoriesList != null && model.catagoriesList.Exists(e => e.CategoryId == user.CategoryId))
                {
                    tempAllowanceTypes.Add(model);
                }
            });

            viewModel.AllowanceTypes = tempAllowanceTypes.Select(e => new SelectListItem
            {
                Text  = e.AllowanceTypeName,
                Value = e.AllowanceTypeId.ToString()
            }).ToList();

            viewModel.AllowanceTypesDetails = _context.AllowanceType.Where(e => e.IsActive).ToList();
            if (User.IsInRole(Constants.ADMIN))
            {
                viewModel.AssignedToItems = _context.User.Where(e => e.IsActive).Select(e => new SelectListItem
                {
                    Text  = e.Name,
                    Value = e.Id
                }).ToList();
            }
            else if (User.IsInRole(Constants.TL))
            {
                viewModel.AssignedToItems = _context.User.Where(e => e.CategoryId == user.CategoryId).Select(e => new SelectListItem
                {
                    Text  = e.Name,
                    Value = e.Id
                }).ToList();
            }

            viewModel.AllowanceTypes.Add(new SelectListItem {
                Text = "Select Allowance Type", Value = string.Empty, Selected = true
            });

            if (viewModel.AssignedToItems != null && viewModel.AssignedToItems.Count > 0)
            {
                viewModel.AssignedToItems.Add(new SelectListItem {
                    Text = "Assign to", Value = string.Empty, Selected = true
                });
            }
            return(viewModel);
        }
        public async Task <IActionResult> Create(AllowanceViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                var user = await userManager.GetUserAsync(HttpContext.User);

                var allowance = new Allowance();
                allowance.Description      = viewModel.Comments;
                allowance.ApprovedStatus   = ApprovedStatus.PENDING;
                allowance.AllowanceType    = _context.AllowanceType.SingleOrDefault(e => e.AllowanceTypeId.ToString() == viewModel.AllowanceTypeId);
                allowance.AllowanceDates   = JsonConvert.SerializeObject(AllowanceDates);
                allowance.NumberOfDays     = AllowanceDates.Count();
                allowance.Price            = viewModel.Price;
                allowance.CreatedOn        = DateTime.Now;
                allowance.CreatedBy        = user;
                allowance.AssignedBy       = user;
                allowance.AssignedCategory = _context.Category.SingleOrDefault(e => e.CategoryId == user.CategoryId);
                allowance.Month            = Convert.ToDateTime(AllowanceDates.FirstOrDefault());
                _context.Add(allowance);
                await _context.SaveChangesAsync();

                if (user.Category.CategoryName == "PROCUREMENT")
                {
                    ApplicationUser teamLeader = (from tl in _context.User
                                                  join role in _context.UserRoles
                                                  on tl.Id equals role.UserId
                                                  where tl.CategoryId == user.CategoryId
                                                  select tl).FirstOrDefault();

                    if (teamLeader?.Id != null)
                    {
                        await Task.Run(() => emailService.SendEmailAsync(teamLeader.Email, "Allowance " + allowance.ApprovedStatus,
                                                                         GetProcurementAllowanceHtml(allowance, user.Name)));
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            viewModel.AllowanceTypes = _context.AllowanceType.Where(e => e.IsActive).Select(e => new SelectListItem
            {
                Text     = e.AllowanceTypeName,
                Value    = e.AllowanceTypeId.ToString(),
                Selected = e.AllowanceTypeId.ToString() == viewModel.AllowanceTypeId ? true : false
            }).ToList();
            viewModel.ApprovedStatus = Enum.GetValues(typeof(ApprovedStatus)).Cast <ApprovedStatus>().Select(v => new SelectListItem
            {
                Text     = v.ToString(),
                Value    = ((int)v).ToString(),
                Selected = ((int)v).ToString() == viewModel.ApprovedStatusId ? true : false
            }).ToList();
            return(View(viewModel));
        }
Beispiel #3
0
        public ActionResult Index(AllowanceViewModel Model)
        {
            //1. 設定開立折讓資訊
            Allowance invc = new Allowance();

            invc.MerchantID      = Model.MerchantID;
            invc.InvoiceNo       = Model.InvoiceNo;
            invc.allowanceNotify = Model.AllowanceNotify;
            invc.CustomerName    = Model.CustomerName;
            invc.NotifyPhone     = Model.NotifyPhone;
            invc.NotifyMail      = Model.NotifyMail;
            invc.AllowanceAmount = Model.AllowanceAmount;
            invc.Items.Add(new Item()
            {
                ItemName   = Model.ItemName,
                ItemPrice  = Model.ItemPrice,
                ItemCount  = Model.ItemCount,
                ItemWord   = Model.ItemWord,
                ItemAmount = Model.ItemAmount
            });

            //2. 初始化發票Service物件
            Invoice <Allowance> inv = new Invoice <Allowance>();

            //3. 指定測試環境, 上線時請記得改Prod
            inv.Environment = EInvoice.Integration.Enumeration.EnvironmentEnum.Stage;

            //4. 設定歐付寶提供的 Key 和 IV
            inv.HashIV  = "q9jcZX8Ib9LM8wYk";
            inv.HashKey = "ejCk326UnaZWKisg";

            //5. 執行API的回傳結果(JSON)字串
            string json = inv.post(invc);

            //6. 解序列化,還原成物件使用
            //AllowanceReturn obj = new AllowanceReturn();
            //obj = JsonConvert.DeserializeObject<AllowanceReturn>(json);
            //obj.XXX;
            // ...

            ViewBag.message = json;

            return(View());
        }
        // GET: Allowances/Delete/5
        public async Task <IActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var allowance = await _context.Allowance
                            .Include(a => a.AllowanceType).Include(e => e.CreatedBy).Include(e => e.AssignedCategory)
                            .FirstOrDefaultAsync(m => m.AllowanceID == id);

            if (allowance == null)
            {
                return(NotFound());
            }
            AllowanceViewModel viewModel = GetAllowance(allowance);

            viewModel.IsFromFilter = _viewModel.IsFromFilter;
            return(View(viewModel));
        }
        private Expression <Func <Models.Allowance, bool> > GetWhere(AllowanceViewModel model)
        {
            Expression <Func <Models.Allowance, bool> > where = c => true;

            if (!string.IsNullOrEmpty(model.MonthId))
            {
                var prefix = where.Compile();
                where = c => prefix(c) && c.Month.Month.ToString() == model.MonthId;
            }
            else
            {
                var prefix = where.Compile();
                where = c => prefix(c) && c.Month > DateTime.Today.AddMonths(-6);
            }
            if (!string.IsNullOrEmpty(model.CategoryID))
            {
                var prefix = where.Compile();
                where = c => prefix(c) && c.AssignedCategoryId.ToString() == model.CategoryID;
            }
            if (!string.IsNullOrEmpty(model.AllowanceTypeId))
            {
                var prefix = where.Compile();
                where = c => prefix(c) && c.AllowanceTypeId.ToString() == model.AllowanceTypeId;
            }
            if (!string.IsNullOrEmpty(model.ApprovedStatusId))
            {
                var prefix = where.Compile();
                where = c => prefix(c) && c.ApprovedStatus == (ApprovedStatus)Enum.Parse(typeof(ApprovedStatus), model.ApprovedStatusId, true);
            }
            if (!string.IsNullOrEmpty(model.UserID))
            {
                var prefix = where.Compile();
                where = c => prefix(c) && c.CreatedById.ToString() == model.UserID;
            }

            return(where);
        }
        private AllowanceViewModel GetAllowance(Allowance allowance)
        {
            AllowanceViewModel ViewModel = new AllowanceViewModel()
            {
                AllowanceDate             = allowance.CreatedOn,
                AllowanceID               = allowance.AllowanceID,
                AllowanceType             = allowance.AllowanceType,
                Status                    = allowance.ApprovedStatus,
                AssignedBy                = allowance.AssignedBy,
                CreatedBy                 = allowance.CreatedBy,
                Comments                  = allowance.Description,
                Price                     = allowance.Price,
                CreatedOn                 = allowance.CreatedOn,
                AssignedCategory          = allowance.AssignedCategory,
                AllowanceTypeId           = allowance.AllowanceTypeId.ToString(),
                AllownanceDates           = JsonConvert.DeserializeObject <List <string> >(allowance.AllowanceDates),
                AllownanceDatesjsonResult = allowance.AllowanceDates,
                NumberOfDays              = allowance.NumberOfDays,
                Month                     = allowance.Month,
                UserID                    = allowance.CreatedById
            };

            return(ViewModel);
        }
        public async Task <IActionResult> Edit(int id, AllowanceViewModel viewModel)
        {
            AllowancesFilterViewModel filter = _viewModel;
            var user = await userManager.GetUserAsync(HttpContext.User);

            if (id != viewModel.AllowanceID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var allowance = await _context.Allowance.FindAsync(id);

                    allowance.ModifiedOn     = DateTime.Now;
                    allowance.Description    = viewModel.Comments;
                    allowance.NumberOfDays   = AllowanceDates.Count();
                    allowance.AllowanceDates = JsonConvert.SerializeObject(AllowanceDates);
                    allowance.Price          = viewModel.Price;
                    allowance.Month          = viewModel.Month;
                    if (!string.IsNullOrEmpty(viewModel.ApprovedStatusId) && ((int)allowance.ApprovedStatus).ToString() != viewModel.ApprovedStatusId)
                    {
                        allowance.ApprovedStatus = Enum.GetValues(typeof(ApprovedStatus)).Cast <ApprovedStatus>().SingleOrDefault(e => ((int)e).ToString() == viewModel.ApprovedStatusId);
                    }
                    allowance.AllowanceType = _context.AllowanceType.SingleOrDefault(e => e.AllowanceTypeId.ToString() == viewModel.AllowanceTypeId);
                    allowance.Description   = viewModel.Comments;
                    allowance.Month         = Convert.ToDateTime(AllowanceDates.FirstOrDefault());
                    _context.Update(allowance);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!AllowanceExists(viewModel.AllowanceID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                if (_viewModel.IsFromFilter || viewModel.IsFromFilter)
                {
                    return(await Filter(_viewModel));
                }
                return(RedirectToAction(nameof(Index)));
            }

            List <AllowanceType> allowanceTypes = _context.AllowanceType.Where(e => e.IsActive).ToList();

            List <AllowanceType> tempAllowanceTypes = new List <AllowanceType>();

            allowanceTypes.ForEach(model =>
            {
                model.catagoriesList = model.Categories != null ? JsonConvert.DeserializeObject <List <Category> >(model.Categories) : null;
                if (model.catagoriesList != null && model.catagoriesList.Exists(e => e.CategoryId == user.CategoryId))
                {
                    tempAllowanceTypes.Add(model);
                }
            });

            viewModel.AllowanceTypes = tempAllowanceTypes.Select(e => new SelectListItem
            {
                Text     = e.AllowanceTypeName,
                Value    = e.AllowanceTypeId.ToString(),
                Selected = e.AllowanceTypeId.ToString() == viewModel.AllowanceTypeId ? true : false
            }).ToList();
            viewModel.AllowanceTypesDetails = _context.AllowanceType.Where(e => e.IsActive).ToList();
            viewModel.ApprovedStatus        = Enum.GetValues(typeof(ApprovedStatus)).Cast <ApprovedStatus>().Select(v => new SelectListItem
            {
                Text     = v.ToString(),
                Value    = ((int)v).ToString(),
                Selected = ((int)v).ToString() == viewModel.ApprovedStatusId ? true : false
            }).ToList();
            return(View(viewModel));
        }