using BusinessERP.ConHelper; using BusinessERP.Data; using BusinessERP.Helpers; using BusinessERP.Models; using BusinessERP.Models.CommonViewModel; using BusinessERP.Models.ExpenseSummaryViewModel; using BusinessERP.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using System; using System.Linq; using System.Linq.Dynamic.Core; using System.Threading.Tasks; namespace BusinessERP.Controllers { [Authorize] [Route("[controller]/[action]")] public class ExpenseSummaryController : Controller { private readonly ApplicationDbContext _context; private readonly ICommon _iCommon; private readonly IDBOperation _iDBOperation; public ExpenseSummaryController(ApplicationDbContext context, ICommon iCommon, IDBOperation iDBOperation) { _context = context; _iCommon = iCommon; _iDBOperation = iDBOperation; } [Authorize(Roles = Pages.MainMenu.ExpenseSummary.RoleName)] [HttpGet] public IActionResult Index() { return View(); } [HttpPost] public IActionResult GetDataTabelData() { try { var draw = HttpContext.Request.Form["draw"].FirstOrDefault(); var start = Request.Form["start"].FirstOrDefault(); var length = Request.Form["length"].FirstOrDefault(); var sortColumn = Request.Form["columns[" + Request.Form["order[0][column]"].FirstOrDefault() + "][name]"].FirstOrDefault(); var sortColumnAscDesc = Request.Form["order[0][dir]"].FirstOrDefault(); var searchValue = Request.Form["search[value]"].FirstOrDefault(); int pageSize = length != null ? Convert.ToInt32(length) : 0; int skip = start != null ? Convert.ToInt32(start) : 0; int resultTotal = 0; var _GetGridItem = _iCommon.GetExpenseSummaryGridItem(); //Sorting if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnAscDesc))) { _GetGridItem = _GetGridItem.OrderBy(sortColumn + " " + sortColumnAscDesc); } //Search if (!string.IsNullOrEmpty(searchValue)) { searchValue = searchValue.ToLower(); _GetGridItem = _GetGridItem.Where(obj => obj.Id.ToString().Contains(searchValue) || obj.GrandTotal.ToString().ToLower().Contains(searchValue) || obj.PaidAmount.ToString().ToLower().Contains(searchValue) || obj.DueAmount.ToString().ToLower().Contains(searchValue) || obj.CurrencyCode.ToString().ToLower().Contains(searchValue) || obj.CreatedDate.ToString().ToLower().Contains(searchValue) || obj.ModifiedDate.ToString().ToLower().Contains(searchValue) || obj.CreatedDate.ToString().Contains(searchValue)); } resultTotal = _GetGridItem.Count(); var result = _GetGridItem.Skip(skip).Take(pageSize).ToList(); return Json(new { draw = draw, recordsFiltered = resultTotal, recordsTotal = resultTotal, data = result }); } catch (Exception) { throw; } } [HttpGet] public async Task Details(long? id) { if (id == null) return NotFound(); ExpenseSummaryCRUDViewModel vm = await _iCommon.GetExpenseSummaryGridItem().Where(m => m.Id == id).SingleOrDefaultAsync(); vm.listExpenseDetails = _iCommon.GetExpenseDetailsList().Where(x => x.ExpenseSummaryId == id).ToList(); if (vm == null) return NotFound(); return PartialView("_Details", vm); } [HttpGet] public async Task AddEdit(int id) { try { ExpenseSummaryCRUDViewModel vm = new(); ExpenseSummary _ExpenseSummary = new(); ViewBag.LoadddlExpenseType = new SelectList(_iCommon.LoadddlExpenseType(), "Id", "Name"); ViewBag.ddlCurrency = new SelectList(_iCommon.LoadddlCurrencyItem(), "Id", "Name"); ViewBag.ddlBranch = new SelectList(_iCommon.GetTableData(_context).ToList(), "Id", "Name"); if (id > 0) { vm = await _context.ExpenseSummary.Where(x => x.Id == id).SingleOrDefaultAsync(); _ExpenseSummary.Action = DBOperationType.Edit; vm.listExpenseDetails = _iCommon.GetExpenseDetailsList().Where(x => x.ExpenseSummaryId == id).ToList(); } else { //Set Branch By User var _UserName = User.Identity.Name; _ExpenseSummary.BranchId = await _iCommon.GetBranchIdByUserName(_UserName); _ExpenseSummary.Title = "Regular"; _ExpenseSummary.Action = DBOperationType.Add; _ExpenseSummary.CreatedDate = DateTime.Now; _ExpenseSummary.ModifiedDate = DateTime.Now; _ExpenseSummary.CreatedBy = HttpContext.User.Identity.Name; _ExpenseSummary.ModifiedBy = HttpContext.User.Identity.Name; var result = _context.Add(_ExpenseSummary); var result2 = await _context.SaveChangesAsync(); vm = _ExpenseSummary; } return PartialView("_AddEdit", vm); } catch (Exception ex) { throw ex; } } [HttpPost] public async Task AddEdit(ExpenseSummaryCRUDViewModel vm) { JsonResultViewModel _JsonResultViewModel = new(); try { ExpenseSummary _ExpenseSummary = new ExpenseSummary(); _ExpenseSummary = await _context.ExpenseSummary.FindAsync(vm.Id); vm.CreatedDate = _ExpenseSummary.CreatedDate; vm.CreatedBy = _ExpenseSummary.CreatedBy; vm.ModifiedDate = DateTime.Now; vm.ModifiedBy = HttpContext.User.Identity.Name; _context.Entry(_ExpenseSummary).CurrentValues.SetValues(vm); await _context.SaveChangesAsync(); _JsonResultViewModel.AlertMessage = "Expense Updated Successfully. ID: " + _ExpenseSummary.Id; _JsonResultViewModel.IsSuccess = true; _JsonResultViewModel.Id = _ExpenseSummary.Id; return new JsonResult(_JsonResultViewModel); } catch (DbUpdateConcurrencyException ex) { _JsonResultViewModel.IsSuccess = false; _JsonResultViewModel.AlertMessage = ex.Message + "Operation Failed."; return new JsonResult(_JsonResultViewModel); throw; } } [HttpPost] public async Task Delete(Int64 id) { try { var _ExpenseSummary = await _context.ExpenseSummary.FindAsync(id); _ExpenseSummary.ModifiedDate = DateTime.Now; _ExpenseSummary.ModifiedBy = HttpContext.User.Identity.Name; _ExpenseSummary.Cancelled = true; _context.Update(_ExpenseSummary); await _context.SaveChangesAsync(); return new JsonResult(_ExpenseSummary); } catch (Exception) { throw; } } [HttpPost] public async Task AddExpenseDetails(ExpenseDetailsCRUDViewModel vm) { var _ExpenseSummaryCRUDViewModel = vm.ExpenseSummaryCRUDViewModel; vm.UserName = HttpContext.User.Identity.Name; vm = await _iDBOperation.AddExpenseDetails(vm); vm.ExpenseSummaryCRUDViewModel = await _iDBOperation.UpdateExpenseSummary(_ExpenseSummaryCRUDViewModel); return new JsonResult(vm); } [HttpPost] public async Task UpdateExpenseDetails(ExpenseDetailsCRUDViewModel vm) { var _ExpenseSummaryCRUDViewModel = vm.ExpenseSummaryCRUDViewModel; vm.UserName = HttpContext.User.Identity.Name; vm = await _iDBOperation.UpdateExpenseDetails(vm); vm.ExpenseSummaryCRUDViewModel = await _iDBOperation.UpdateExpenseSummary(_ExpenseSummaryCRUDViewModel); return new JsonResult(vm); } [HttpDelete] public async Task DeleteExpenseDetails(ExpenseDetailsCRUDViewModel vm) { try { var _ExpenseDetails = await _context.ExpenseDetails.Where(x => x.Id == vm.Id).SingleOrDefaultAsync(); _ExpenseDetails.ModifiedDate = DateTime.Now; _ExpenseDetails.ModifiedBy = HttpContext.User.Identity.Name; _ExpenseDetails.Cancelled = true; _context.Update(_ExpenseDetails); await _context.SaveChangesAsync(); vm.ExpenseSummaryCRUDViewModel = await _iDBOperation.UpdateExpenseSummary(vm.ExpenseSummaryCRUDViewModel); return new JsonResult(vm); } catch (Exception) { throw; } } } }