using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using EveryThing.Data; using EveryThing.Models; using EveryThing.Models.Transport; using DocumentFormat.OpenXml.Spreadsheet; using EveryThing.Models.CodeTable; using NuGet.Packaging; namespace EveryThing.Pages.TransportLoadingOrder { [Authorize(Roles = "Administrator,TransportThingUser")] public class AddEditModel : PageModel { private readonly ApplicationDbContext _context; private readonly UserManager _userManager; public AddEditModel(ApplicationDbContext context, UserManager userManager) { _context = context; _userManager = userManager; } [BindProperty] public Models.Transport.TransportLoadingOrder TransportLoadingOrder { get; set; } [BindProperty] public TransportLoadingOrderLoadUnload TransportLoadingOrderLoadUnload { get; set; } [BindProperty] public List Vehicles { get; set; } public async Task OnGetAsync(int? id) { var user = _userManager.GetUserAsync(User).Result; ViewData["IdPartnerFk"] = new SelectList(_context.CodeTablePartners .Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active && x.Transporter), "IdPartner", "Title"); SetVehiclesBag(user.IdCompanyFk); ViewData["IdLoadingFk"] = new SelectList(_context.CodeTablePartners .Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active && x.LoadingOrderLoadUnload), "IdPartner", "Title"); ViewData["IdUnloadingFk"] = new SelectList(_context.CodeTablePartners .Where(x => x.IdCompanyFk == user.IdCompanyFk && x.Active && x.LoadingOrderLoadUnload), "IdPartner", "Title"); ViewData["States"] = new SelectList(Enum.GetValues(typeof(Models.Transport.TransportLoadingOrder.TransportLoadingOrderState)) .Cast() .Select(x => new { Name = Classes.Global.GetAttribute(x).Name, Value = x.ToString() }) .ToList(), "Value", "Name"); if (id == null) { var prePostTexts = _context.CodeTablePrePostTextLink .Include(x => x.CodeTablePrePostText) .Where(x => x.CodeTablePrePostText.IdCompanyFk == user.IdCompanyFk && x.Link == CodeTablePrePostTextLink.LinkEnum.TransportLoadingOrder); TransportLoadingOrder = new Models.Transport.TransportLoadingOrder { OrderCity = _context.CodeTableCompanies.Single(x => x.IdCompany == user.IdCompanyFk).City, OrderDate = DateTime.Now.Date, PreText = string.Join("
", prePostTexts.Where(x => x.Type == CodeTablePrePostTextLink.TypeEnum.PreText).Select(x => x.CodeTablePrePostText.Content)), PostText = string.Join("
", prePostTexts.Where(x => x.Type == CodeTablePrePostTextLink.TypeEnum.PostText).Select(x => x.CodeTablePrePostText.Content)) }; TransportLoadingOrderLoadUnload = new TransportLoadingOrderLoadUnload(); return Page(); } TransportLoadingOrder = await _context.TransportLoadingOrders .Include(t => t.Partner) .Include(t => t.Vehicle).FirstOrDefaultAsync(m => m.IdTransportLoadingOrder == id && m.IdCompanyFk == user.IdCompanyFk); TransportLoadingOrderLoadUnload = new TransportLoadingOrderLoadUnload(); if (TransportLoadingOrder == null) { return NotFound(); } return Page(); } public async Task OnPostOrderAsync() { var user = _userManager.GetUserAsync(User).Result; if (!ModelState.IsValid) { System.Diagnostics.Debug.WriteLine("OnPostOrderAsync:Invalid"); //ViewData["IdPartnerFk"] = new SelectList(_context.CodeTablePartners.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdPartner", "Title"); //SetVehiclesBag(user.IdCompanyFk); return new JsonResult(new { successful = false, error = string.Join(", ", ModelState.Values.Where(x => x.Errors.Any()).Select(x=> string.Join(", ", x.Errors.Select(y => y.ErrorMessage)))) }); } if (TransportLoadingOrder.IdVehicleFk != null) { TransportLoadingOrder.VehicleText = ""; } TransportLoadingOrder.PostText = TransportLoadingOrder.PostText.Replace("

", ""); TransportLoadingOrder.PreText = TransportLoadingOrder.PreText.Replace("

", ""); if (TransportLoadingOrder.IdTransportLoadingOrder > 0) { _context.Attach(TransportLoadingOrder).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TransportLoadingOrderExists(TransportLoadingOrder.IdTransportLoadingOrder)) { return NotFound(); } else { throw; } } TransportLoadingOrderLoadUnload = new TransportLoadingOrderLoadUnload(); return new JsonResult(new { successful = true, id = TransportLoadingOrder.IdTransportLoadingOrder }); } // OrderNumber and OrderYear var orderNumber = _context.TransportLoadingOrders.Where(x => x.IdCompanyFk == user.IdCompanyFk && x.OrderYear == DateTime.Now.Year).Max(x => x.OrderNumber) + 1; TransportLoadingOrder.IdCompanyFk = user.IdCompanyFk; TransportLoadingOrder.OrderYear = DateTime.Now.Year; TransportLoadingOrder.OrderNumber = orderNumber; _context.TransportLoadingOrders.Add(TransportLoadingOrder); await _context.SaveChangesAsync(); return new JsonResult(new { successful = true, id = TransportLoadingOrder .IdTransportLoadingOrder}); } public async Task OnPostPositionAddAsync() { TransportLoadingOrderLoadUnload.IdTransportLoadingOrderFk = TransportLoadingOrder.IdTransportLoadingOrder; TransportLoadingOrderLoadUnload.CargoDescription = TransportLoadingOrderLoadUnload.CargoDescription.Replace("

", ""); _context.TransportLoadingOrderLoadUnloads.Add(TransportLoadingOrderLoadUnload); await _context.SaveChangesAsync(); return Page(); } public async Task OnGetPositionRemoveAsync(int idTransportLoadingOrder, int id) { var user = _userManager.GetUserAsync(User).Result; TransportLoadingOrder = await _context.TransportLoadingOrders .Include(t => t.Partner) .Include(t => t.Vehicle).FirstOrDefaultAsync(m => m.IdTransportLoadingOrder == idTransportLoadingOrder && m.IdCompanyFk == user.IdCompanyFk); TransportLoadingOrderLoadUnload = new TransportLoadingOrderLoadUnload(); if (TransportLoadingOrder != null) { var transportLoadingOrderLoadUnload = await _context.TransportLoadingOrderLoadUnloads.FirstOrDefaultAsync(x => x.IdTransportLoadingOrderFk == TransportLoadingOrder.IdTransportLoadingOrder && x.IdTransportLoadingOrderLoadUnload == id); if (transportLoadingOrderLoadUnload != null) { _context.TransportLoadingOrderLoadUnloads.Remove(transportLoadingOrderLoadUnload); await _context.SaveChangesAsync(); } return Page(); } return NotFound(); } public async Task OnGetIndexLoadUnloadAsync(int id) { var user = _userManager.GetUserAsync(User).Result; var transportLoadingOrder = await _context.TransportLoadingOrders.FirstOrDefaultAsync(x => x.IdTransportLoadingOrder == id && x.IdCompanyFk == user.IdCompanyFk); if (transportLoadingOrder != null) { var transportLoadingOrderLoadUnloadList = await _context.TransportLoadingOrderLoadUnloads .Where(x => x.IdTransportLoadingOrderFk == transportLoadingOrder.IdTransportLoadingOrder) .Include(x => x.Loading) .Include(x => x.Unloading).ToListAsync(); return Partial("IndexLoadUnload", transportLoadingOrderLoadUnloadList); } return NotFound(); } private bool TransportLoadingOrderExists(int id) { return _context.TransportLoadingOrders.Any(e => e.IdTransportLoadingOrder == id); } private void SetVehiclesBag(int idCompany) { Vehicles = new List { new ("Izberi vozilo", "") }; Vehicles.AddRange(_context.Vehicles.Where(x => x.IdCompanyFk == idCompany).Select(x => new SelectListItem(x.DisplayName, x.IdVehicle.ToString()))); //Vehicles = new SelectList(tmpList, "Text", "Value"); } public IActionResult OnGetLoadingUnloadingText(int idPartner) { var user = _userManager.GetUserAsync(User).Result; var partner = _context.CodeTablePartners .Include(x => x.Country) .FirstOrDefault(x => x.IdCompanyFk == user.IdCompanyFk && x.IdPartner == idPartner); return partner == null ? new JsonResult(new { successful = false, error = $"Partner with ID: {idPartner} not exists!" }) : new JsonResult(new { successful = true, text = $"{partner.Street} {partner.HouseNumber}\n{partner.PostNumber} {partner.Post}\n{partner.Country.Title}" }); } } }