using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; using EveryThing.Data; using EveryThing.Models; using EveryThing.Models.CodeTable; using EveryThing.Models.Vehicle; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using EveryThing.Models.Invoice; using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Rendering; namespace EveryThing.Pages.CodeTableVehicles { [Authorize(Roles = "Administrator,TransportThingUser")] public class IndexModel : PageModel { private readonly ApplicationDbContext _context; private readonly UserManager _userManager; public class AddEditCodeTableVehicle { public Vehicle Vehicle { get; set; } public bool Edit { get; set; } public int IdCodeTableVehicle { get; set; } public SelectList FuelTypes { get; set; } public SelectList Departments { get; set; } public SelectList VehicleGroups { get; set; } public SelectList VehicleMakes{ get; set; } public SelectList VehicleTypes { get; set; } //public IList Files { get; set; } } public IndexModel(ApplicationDbContext context, UserManager userManager) { _context = context; _userManager = userManager; } public IList Vehicles { get;set; } public async Task OnGetAsync(string searchString, string inactiveVehicles) { var user = _userManager.GetUserAsync(User).Result; ViewData["SearchString"] = searchString; ViewData["InactiveVehicles"] = inactiveVehicles == "on" ? "checked" : ""; Vehicles = await _context.Vehicles .Where(x => x.IdCompanyFk == user.IdCompanyFk) .OrderBy(x => x.Active) .ThenBy(x => x.Title) .ToListAsync(); // Search string if (!string.IsNullOrEmpty(searchString)) { Vehicles = Vehicles.Where(s => s.Title.Contains(searchString)).ToList(); } } public IActionResult OnGetCodeTableVehicleModal([CanBeNull] string title, bool edit, int idCodeTableVehicle) { var user = _userManager.GetUserAsync(User).Result; Vehicle vehicle = null; if (edit) { vehicle = _context.Vehicles .Where(x => x.IdCompanyFk == user.IdCompanyFk) .FirstOrDefault(x => x.IdVehicle == idCodeTableVehicle); //files = _context.Files // .Where(x => x.IdCompanyFk == user.IdCompanyFk // && x.IdReferenceFk == item.IdItem // && x.FileType == FileType.CodeTableItem) // .ToList(); } if (vehicle == null) { vehicle = new Vehicle(); if (title != null) vehicle.Title = title; vehicle.Active = true; } var departments = new SelectList(_context.CodeTableDepartements.Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active), "IdDepartement", "Title"); var fuelTypes = new SelectList(_context.VehicleFuelTypes.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdVehicleFuelType", "Title"); var groups = new SelectList(_context.VehicleGroups.Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active), "IdVehicleGroup", "Title"); var makes = new SelectList(_context.VehicleMakes.Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active), "IdVehicleMake", "Title"); var types = new SelectList(_context.VehicleTypes.Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active), "IdVehicleType", "Title"); return Partial("AddEditVehicleModal", new CodeTableVehicles.IndexModel.AddEditCodeTableVehicle { Vehicle = vehicle, Edit = edit, IdCodeTableVehicle = idCodeTableVehicle, Departments = departments, FuelTypes = fuelTypes, VehicleGroups = groups, VehicleMakes = makes, VehicleTypes = types //Files = files, }); } public IActionResult OnPostCodeTableVehicle(bool edit, Vehicle vehicleData) { var user = _userManager.GetUserAsync(User).Result; var successful = true; var error = ""; if (edit) { var vehicle = _context.Vehicles .Where(x => x.IdCompanyFk == user.IdCompanyFk) .FirstOrDefault(x => x.IdVehicle == vehicleData.IdVehicle); if (vehicle != null) { vehicle.Title = vehicleData.Title; vehicle.IdVehicleTypeFk = vehicleData.IdVehicleTypeFk; vehicle.IdMakeFk = vehicleData.IdMakeFk; vehicle.Model = vehicleData.Model; vehicle.Year = vehicleData.Year; vehicle.VinNumber = vehicleData.VinNumber; vehicle.EngineNumber = vehicleData.EngineNumber; vehicle.IdFuelTypeFk = vehicleData.IdFuelTypeFk; vehicle.IdDepartementFk = vehicleData.IdDepartementFk; vehicle.IdVehicleGroupFk = vehicleData.IdVehicleGroupFk; vehicle.VehicleMeterType = vehicleData.VehicleMeterType; vehicle.Note = vehicleData.Note; vehicle.RegistrationNumber = vehicleData.RegistrationNumber; vehicle.Active = vehicleData.Active; _context.SaveChanges(); } else { successful = false; error = $"Codetable vehicle with ID: {vehicleData.IdVehicle} not found"; } } else { var vehicle = new Vehicle { IdCompanyFk = user.IdCompanyFk, Title = vehicleData.Title, IdVehicleTypeFk = vehicleData.IdVehicleTypeFk, IdMakeFk = vehicleData.IdMakeFk, Model = vehicleData.Model, Year = vehicleData.Year, VinNumber = vehicleData.VinNumber, EngineNumber = vehicleData.EngineNumber, IdFuelTypeFk = vehicleData.IdFuelTypeFk, IdDepartementFk = vehicleData.IdDepartementFk, IdVehicleGroupFk = vehicleData.IdVehicleGroupFk, VehicleMeterType = vehicleData.VehicleMeterType, Note = vehicleData.Note, RegistrationNumber = vehicleData.RegistrationNumber, Active = vehicleData.Active }; _context.Vehicles.Add(vehicle); _context.SaveChanges(); vehicleData.IdVehicle = vehicle.IdVehicle; } return new JsonResult(new { idCodeTableVehicle = vehicleData.IdVehicle, error = error, successful = successful }); } public IActionResult OnDeleteCodeTableVehicle(int idCodeTableVehicle) { var user = _userManager.GetUserAsync(User).Result; var successful = true; var error = ""; var vehicle = _context.Vehicles .Where(x => x.IdCompanyFk == user.IdCompanyFk) .FirstOrDefault(x => x.IdVehicle == idCodeTableVehicle); if (vehicle != null) { _context.Vehicles.Remove(vehicle); _context.SaveChanges(); } else { successful = false; error = $"Codetable vehicle with ID: {idCodeTableVehicle} not found"; } return new JsonResult(new { idCodeTableItem = idCodeTableVehicle, error = error, successful = successful }); } public IActionResult OnGetCodeTableVehicle(int idCodeTableVehicle) { var user = _userManager.GetUserAsync(User).Result; var successful = true; var error = ""; var vehicleInUse = false; var vehicle = _context.Vehicles .Where(x => x.IdCompanyFk == user.IdCompanyFk) .Include(x => x.VehicleVehicleFueling) .Include(x => x.VehicleVehicleIncident) .Include(x => x.VehicleVehicleIssue) .Include(x => x.VehicleNote) .Include(x => x.VehicleVehicleDriver) .Include(x => x.VehicleVehicleMeterReading) .Include(x => x.VehicleVehicleDrive) .Include(x => x.VehicleTransportLoadingOrder) .FirstOrDefault(x => x.IdVehicle == idCodeTableVehicle); if (vehicle == null) { successful = false; error = $"Codetable vehicle with ID: {idCodeTableVehicle} not found"; } else { vehicleInUse = vehicle.VehicleVehicleFueling.Count > 0 || vehicle.VehicleVehicleIncident.Count > 0 || vehicle.VehicleVehicleIssue.Count > 0 || vehicle.VehicleVehicleDriver.Count > 0 || vehicle.VehicleVehicleMeterReading.Count > 0 || vehicle.VehicleVehicleDrive.Count > 0 || vehicle.VehicleTransportLoadingOrder.Count > 0 || vehicle.VehicleNote.Count > 0; vehicle.VehicleVehicleFueling = null; vehicle.VehicleVehicleIncident = null; vehicle.VehicleVehicleIssue = null; vehicle.VehicleNote = null; vehicle.VehicleVehicleDriver = null; vehicle.VehicleVehicleMeterReading = null; vehicle.VehicleVehicleDrive = null; vehicle.VehicleTransportLoadingOrder = null; } return new JsonResult(new { vehicle, error, successful, vehicleInUse }); } public IActionResult OnGetCodeTableVehiclesSelect() { var user = _userManager.GetUserAsync(User).Result; var vehicles = _context.Vehicles .Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active) .OrderBy(x => x.Title); return new JsonResult(new { vehicles = new SelectList(vehicles, "IdVehicle", "Title") }); } } }