From 7e7fecc59f6bcaac0bb0396ac15b16ccdd0d5e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20=C5=A0taleker?= Date: Mon, 3 Jul 2023 16:23:10 +0200 Subject: [PATCH] partnerji na modal --- EveryThing/Models/Vehicle/Vehicle.cs | 4 +- .../AddEditPartnerModal.cshtml | 119 ++++++++++ .../Pages/CodeTablePartners/Index.cshtml | 36 ++- .../Pages/CodeTablePartners/Index.cshtml.cs | 172 ++++++++++++++ .../Pages/CodeTableVehicles/CreateEdit.cshtml | 1 + .../Pages/CodeTableVehicles/Index.cshtml | 2 +- .../TransportLoadingOrder/AddEdit.cshtml | 43 +++- .../TransportLoadingOrder/AddEdit.cshtml.cs | 34 ++- .../wwwroot/js/codeTablePartnerHelper.js | 214 ++++++++++++++++++ 9 files changed, 603 insertions(+), 22 deletions(-) create mode 100644 EveryThing/Pages/CodeTablePartners/AddEditPartnerModal.cshtml create mode 100644 EveryThing/wwwroot/js/codeTablePartnerHelper.js diff --git a/EveryThing/Models/Vehicle/Vehicle.cs b/EveryThing/Models/Vehicle/Vehicle.cs index 6e932e1..2848d35 100644 --- a/EveryThing/Models/Vehicle/Vehicle.cs +++ b/EveryThing/Models/Vehicle/Vehicle.cs @@ -81,8 +81,10 @@ namespace EveryThing.Models.Vehicle [Display(Name = "Registrska številka")] public string RegistrationNumber { get; set; } + [NotMapped] public string DisplayName => $"{Title} ({RegistrationNumber})"; + //TODO: Manjkajo polja - + //[Required] //[Display(Name = "Datum veljavnosti registracije")] //public DateTime RegistrationExpiry { get; set; } diff --git a/EveryThing/Pages/CodeTablePartners/AddEditPartnerModal.cshtml b/EveryThing/Pages/CodeTablePartners/AddEditPartnerModal.cshtml new file mode 100644 index 0000000..466e2b9 --- /dev/null +++ b/EveryThing/Pages/CodeTablePartners/AddEditPartnerModal.cshtml @@ -0,0 +1,119 @@ +@model EveryThing.Pages.CodeTablePartners.IndexModel.AddEditCodeTablePartner + + diff --git a/EveryThing/Pages/CodeTablePartners/Index.cshtml b/EveryThing/Pages/CodeTablePartners/Index.cshtml index 42f7c3a..3e0648a 100644 --- a/EveryThing/Pages/CodeTablePartners/Index.cshtml +++ b/EveryThing/Pages/CodeTablePartners/Index.cshtml @@ -5,6 +5,7 @@ ViewData["Title"] = "Partnerji"; Layout = "~/Pages/Layouts/_Layout.cshtml"; } +

@@ -69,7 +70,7 @@ @foreach (var item in Model.Partner) { - + @Html.DisplayFor(modelItem => item.Title) @if (!item.Active) @@ -91,7 +92,8 @@ @Html.DisplayFor(modelItem => item.Email) - + + } @@ -99,12 +101,40 @@ +
+@Html.AntiForgeryToken() @section Scripts { + + + } \ No newline at end of file diff --git a/EveryThing/Pages/CodeTablePartners/Index.cshtml.cs b/EveryThing/Pages/CodeTablePartners/Index.cshtml.cs index 404cccc..b21a580 100644 --- a/EveryThing/Pages/CodeTablePartners/Index.cshtml.cs +++ b/EveryThing/Pages/CodeTablePartners/Index.cshtml.cs @@ -11,12 +11,24 @@ using EveryThing.Data; using EveryThing.Models; using EveryThing.Models.CodeTable; using Microsoft.AspNetCore.Authorization; +using System.Globalization; +using Microsoft.AspNetCore.Mvc.Rendering; namespace EveryThing.Pages.CodeTablePartners { [Authorize(Roles = "Administrator,InvoicingUser,ProjecThingUser,TransportThingUser")] public class IndexModel : PageModel { + + public class AddEditCodeTablePartner + { + public CodeTablePartner Partner { get; set; } + public bool Edit { get; set; } + public int IdCodeTablePartner { get; set; } + public SelectList Countries { get; set; } + //public IList Files { get; set; } + } + private readonly EveryThing.Data.ApplicationDbContext _context; private readonly UserManager _userManager; @@ -49,5 +61,165 @@ namespace EveryThing.Pages.CodeTablePartners .ToList(); } } + + public IActionResult OnGetCodeTablePartnerModal(bool edit, int idCodeTablePartner) + { + //TODO input izbrane + var user = _userManager.GetUserAsync(User).Result; + + var countries = new SelectList(_context.CodeTableCountries, "IdCountry", "TranslationSlovenian"); + CodeTablePartner partner = null; + + if (edit) + { + partner = _context.CodeTablePartners + .Where(x => x.IdCompanyFk == user.IdCompanyFk) + .FirstOrDefault(x => x.IdPartner == idCodeTablePartner); + + //files = _context.Files + // .Where(x => x.IdCompanyFk == user.IdCompanyFk + // && x.IdReferenceFk == item.IdItem + // && x.FileType == FileType.CodeTableItem) + // .ToList(); + } + + if (partner == null) + { + var sloCountry = _context.CodeTableCountries.FirstOrDefault(x => x.Code == "SI"); + partner = new CodeTablePartner(); + if (sloCountry != null) + partner.IdCountryFk = sloCountry.IdCountry; + partner.Active = true; + //TODO kljukice + //partner.CodeTableItemType = (CodeTableItemType)codeTableItemType; + } + + return Partial("AddEditPartnerModal", new AddEditCodeTablePartner + { + Partner = partner, + Edit = edit, + IdCodeTablePartner = idCodeTablePartner, + Countries = countries + //Files = files, + }); + } + + public IActionResult OnPostCodeTablePartner(bool edit, CodeTablePartner partnerData) + { + var user = _userManager.GetUserAsync(User).Result; + var successful = true; + var error = ""; + + if (edit) + { + var partner = _context.CodeTablePartners + .Where(x => x.IdCompanyFk == user.IdCompanyFk) + .FirstOrDefault(x => x.IdPartner == partnerData.IdPartner); + if (partner != null) + { + partner.Title = partnerData.Title; + partner.IdCountryFk = partnerData.IdCountryFk; + partner.City = partnerData.City; + partner.PostNumber = partnerData.PostNumber; + partner.Post = partnerData.Post; + partner.Street = partnerData.Street; + partner.TaxNumber = partnerData.TaxNumber; + partner.RegistrationNumber = partnerData.RegistrationNumber; + partner.Buyer = partnerData.Buyer; + partner.Supplier = partnerData.Supplier; + partner.Active = partnerData.Active; + partner.Email = partnerData.Email; + _context.SaveChanges(); + } + else + { + successful = false; + error = $"Codetable partner with ID: {partnerData.IdPartner} not found"; + } + } + else + { + var partner = new CodeTablePartner + { + Title = partnerData.Title, + IdCountryFk = partnerData.IdCountryFk, + City = partnerData.City, + PostNumber = partnerData.PostNumber, + Post = partnerData.Post, + Street = partnerData.Street, + Buyer = partnerData.Buyer, + Supplier = partnerData.Supplier, + Active = partnerData.Active, + TaxNumber = partnerData.TaxNumber, + RegistrationNumber = partnerData.RegistrationNumber, + Email = partnerData.Email + }; + _context.CodeTablePartners.Add(partner); + _context.SaveChanges(); + + partnerData.IdPartner = partner.IdPartner; + } + + return new JsonResult(new { idCodeTablePartner = partnerData.IdPartner, error = error, successful = successful }); + } + + public IActionResult OnDeleteCodeTableItem(int idCodeTablePartner) + { + var user = _userManager.GetUserAsync(User).Result; + var successful = true; + var error = ""; + + var partner = _context.CodeTablePartners + .Where(x => x.IdCompanyFk == user.IdCompanyFk) + .FirstOrDefault(x => x.IdPartner == idCodeTablePartner); + if (partner != null) + { + _context.CodeTablePartners.Remove(partner); + _context.SaveChanges(); + } + else + { + successful = false; + error = $"Codetable partner with ID: {idCodeTablePartner} not found"; + } + + return new JsonResult(new { idCodeTableItem = idCodeTablePartner, error = error, successful = successful }); + } + + public IActionResult OnGetCodeTablePartner(int idCodeTablePartner) + { + var user = _userManager.GetUserAsync(User).Result; + + var successful = true; + var error = ""; + var partnerInUse = false; + + var partner = _context.CodeTablePartners + .Where(x => x.IdCompanyFk == user.IdCompanyFk) + .Include(x => x.PartnerTransportLoadingOrder) + .Include(x => x.PartnerTransportLoadingOrderLoad) + .Include(x => x.PartnerTransportLoadingOrderUnload) + .Include(x => x.Invoice) + .FirstOrDefault(x => x.IdPartner == idCodeTablePartner); + + if (partner == null) + { + successful = false; + error = $"Codetable partner with ID: {idCodeTablePartner} not found"; + } + else + { + partnerInUse = partner.PartnerTransportLoadingOrder.Count > 0 + || partner.PartnerTransportLoadingOrderLoad.Count > 0 + || partner.PartnerTransportLoadingOrderUnload.Count > 0 + || partner.Invoice.Count > 0; + partner.PartnerTransportLoadingOrder = null; + partner.PartnerTransportLoadingOrderLoad = null; + partner.PartnerTransportLoadingOrderUnload = null; + partner.Invoice = null; + } + + return new JsonResult(new { partner, error, successful, partnerInUse }); + } } } diff --git a/EveryThing/Pages/CodeTableVehicles/CreateEdit.cshtml b/EveryThing/Pages/CodeTableVehicles/CreateEdit.cshtml index c7496c5..87721f2 100644 --- a/EveryThing/Pages/CodeTableVehicles/CreateEdit.cshtml +++ b/EveryThing/Pages/CodeTableVehicles/CreateEdit.cshtml @@ -30,6 +30,7 @@
+
diff --git a/EveryThing/Pages/CodeTableVehicles/Index.cshtml b/EveryThing/Pages/CodeTableVehicles/Index.cshtml index 624490f..2202feb 100644 --- a/EveryThing/Pages/CodeTableVehicles/Index.cshtml +++ b/EveryThing/Pages/CodeTableVehicles/Index.cshtml @@ -69,7 +69,7 @@ @Html.DisplayFor(modelItem => item.Active) - + diff --git a/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml b/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml index 612e273..7c61973 100644 --- a/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml +++ b/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml @@ -41,7 +41,7 @@
-
+
@@ -51,10 +51,15 @@
- +
-
+
+ + +
+

@@ -89,12 +94,8 @@

- - - - - +
@@ -321,15 +322,39 @@ $(document).ready(function () { $('.select2').select2(); + $('.select2-vehicle').select2({ + allowClear: true, + placeholder: "Izberi vozilo" + }).on('change', function() { + if ($(".select2-vehicle").val() !== '') { + $('.vehicle-text').val(''); + } + }); + + if ($('.select2-vehicle').val() === '') { + $('.select2-vehicle').val(null); + } editorPreText = new Quill('#editor-pretext', { modules: { toolbar: [['bold', 'italic', 'underline'], ['color'], [{ 'list': 'ordered' }, { 'list': 'bullet' }], ['align'], ['clean']] }, theme: 'snow' }); editorPostText = new Quill('#editor-posttext', { modules: { toolbar: [['bold', 'italic', 'underline'], ['color'], [{ 'list': 'ordered' }, { 'list': 'bullet' }], ['align'], ['clean']] }, theme: 'snow' }); editorCargoDescription = new Quill('#editor-cargodescription', { modules: { toolbar: [['bold', 'italic', 'underline'], ['color'], [{ 'list': 'ordered' }, { 'list': 'bullet' }], ['align'], ['clean']] }, theme: 'snow' }); loadPosition(); }); + function beforeOrderPost() { + if ($('.select2-vehicle').val() === '') { + $('.select2-vehicle').val(null); + } + handleEditors(); + } + orderPostCompleted = function (xhr) { laddaSaveOrder.stop(); - location.replace('AddEdit?Id=' + xhr.responseJSON.id); + if (xhr.responseJSON.successful) { + location.replace('AddEdit?Id=' + xhr.responseJSON.id); + } else { + alert(xhr.responseJSON.error); + } + }; } \ No newline at end of file diff --git a/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml.cs b/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml.cs index 8d4e46b..9b55807 100644 --- a/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml.cs +++ b/EveryThing/Pages/TransportLoadingOrder/AddEdit.cshtml.cs @@ -15,6 +15,7 @@ using EveryThing.Models; using EveryThing.Models.Transport; using DocumentFormat.OpenXml.Spreadsheet; using EveryThing.Models.CodeTable; +using NuGet.Packaging; namespace EveryThing.Pages.TransportLoadingOrder { @@ -36,12 +37,15 @@ namespace EveryThing.Pages.TransportLoadingOrder [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), "IdPartner", "Title"); - ViewData["IdVehicleFk"] = new SelectList(_context.Vehicles.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdVehicle", "RegistrationNumber"); + SetVehiclesBag(user.IdCompanyFk); ViewData["IdLoadingFk"] = new SelectList(_context.CodeTablePartners.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdPartner", "Title"); ViewData["IdUnloadingFk"] = new SelectList(_context.CodeTablePartners.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdPartner", "Title"); ViewData["States"] = new SelectList(Enum.GetValues(typeof(Models.Transport.TransportLoadingOrder.TransportLoadingOrderState)) @@ -85,15 +89,19 @@ namespace EveryThing.Pages.TransportLoadingOrder public async Task OnPostOrderAsync() { - System.Diagnostics.Debug.WriteLine("OnPostOrderAsync"); - var user = _userManager.GetUserAsync(User).Result; if (!ModelState.IsValid) { - ViewData["IdPartnerFk"] = new SelectList(_context.CodeTablePartners.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdPartner", "Title"); - ViewData["IdVehicleFk"] = new SelectList(_context.Vehicles.Where(x => x.IdCompanyFk == user.IdCompanyFk), "IdVehicle", "RegistrationNumber"); - return Page(); + 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("

", ""); @@ -121,7 +129,7 @@ namespace EveryThing.Pages.TransportLoadingOrder TransportLoadingOrderLoadUnload = new TransportLoadingOrderLoadUnload(); - return Page(); + return new JsonResult(new { successful = true, id = TransportLoadingOrder.IdTransportLoadingOrder }); } // OrderNumber and OrderYear @@ -136,7 +144,7 @@ namespace EveryThing.Pages.TransportLoadingOrder await _context.SaveChangesAsync(); - return new JsonResult(new { id = TransportLoadingOrder .IdTransportLoadingOrder}); + return new JsonResult(new { successful = true, id = TransportLoadingOrder .IdTransportLoadingOrder}); } public async Task OnPostPositionAddAsync() @@ -200,5 +208,15 @@ namespace EveryThing.Pages.TransportLoadingOrder { 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"); + } } } diff --git a/EveryThing/wwwroot/js/codeTablePartnerHelper.js b/EveryThing/wwwroot/js/codeTablePartnerHelper.js new file mode 100644 index 0000000..7ff2793 --- /dev/null +++ b/EveryThing/wwwroot/js/codeTablePartnerHelper.js @@ -0,0 +1,214 @@ +//ce jamra da ne najde post je treba dati @Html.AntiForgeryToken() v page +function codeTablePartnerAddEdit(placeholderSelector, edit, idCodeTablePartner, onAddEdit, onCancel, codeTablePartnerType){ + if (isNaN(codeTablePartnerType)) { + codeTablePartnerType = 0; + } + + $.blockUI(); + $.ajax({ + type: "GET", + // beforeSend: function(xhr) { + // xhr.setRequestHeader("XSRF-TOKEN", + // $('input:hidden[name="__RequestVerificationToken"]').val()); + // }, + url: "/CodeTablePartners/Index/?handler=CodeTablePartnerModal", + data: { edit: edit, idCodeTablePartner: edit ? idCodeTablePartner : -1, codeTablePartnerType }, + success: function(data) { + $.unblockUI(); + $(placeholderSelector).html(data); + if (edit){ + $('#modalAddEditCodeTablePartnerTitle').html(`Urejanje partnerja: ${$('#inpModalAddEditCodeTablePartnerTitle').val()}`); + //$('#btnModalAddEditCodeTablePartnerAddFile').css('display', ''); + $('#btnModalAddEditCodeTablePartnerConfirm').html('Shrani'); + } else { + $('#modalAddEditCodeTablePartnerTitle').html('Dodajanje novega partnerja'); + //$('#btnModalAddEditCodeTablePartnerAddFile').css('display', 'none'); + $('#btnModalAddEditCodeTablePartnerConfirm').html('Dodaj'); + } + $('#btnModalAddEditCodeTablePartnerConfirm').off(); + $('#btnModalAddEditCodeTablePartnerCancel').off(); + + //Save to db + $('#btnModalAddEditCodeTablePartnerConfirm').on('click', () =>{ + let title = $('#inpModalAddEditCodeTablePartnerTitle').val(); + let country = parseInt($('#selModalAddEditCodeTablePartnerCountry').val()); + let city = $('#inpModalAddEditCodeTablePartnerCity').val(); + let street = $('#inpModalAddEditCodeTablePartnerStreet').val(); + let houseNumber = $('#inpModalAddEditCodeTablePartnerHouseNumber').val(); + let postNumber = $('#inpModalAddEditCodeTablePartnerPostNumber').val(); + let post = $('#inpModalAddEditCodeTablePartnerPost').val(); + let taxNumber = $('#inpModalAddEditCodeTablePartnerTaxNumber').val(); + let registrationNumber = $('#inpModalAddEditCodeTablePartnerRegistrationNumber').val(); + let email = $('#inpModalAddEditCodeTablePartnerEmail').val(); + + let buyer = $('#inpModalAddEditCodeTablePartnerBuyer').is(':checked'); + let supplier = $('#inpModalAddEditCodeTablePartnerSupplier').is(':checked'); + let active = $('#inpModalAddEditCodeTablePartnerActive').is(':checked'); + let edit = $('#inpModalAddEditCodeTablePartnerEdit').val() === 'true'; + let idCodeTablePartner = parseInt($('#inpModalAddEditCodeTablePartnerIdCodeTablePartner').val()); + + if (title === '' || title === null){ + Swal.fire('Zahtevano polje naziv!'); + return; + } + + // if (description === '' || description === null){ + // Swal.fire('Zahtevano polje naziv!'); + // return; + // } + $.blockUI(); + $.ajax({ + type: "POST", + beforeSend: function(xhr) { + xhr.setRequestHeader("XSRF-TOKEN", + $('input:hidden[name="__RequestVerificationToken"]').val()); + }, + url: "/CodeTablePartners/Index/?handler=CodeTablePartner", + data: { + edit, + partnerData : { + title, + IdCountryFk: country, + city, + street, + houseNumber, + postNumber, + post, + taxNumber, + registrationNumber, + email, + buyer, + supplier, + active, + idPartner: idCodeTablePartner + } + }, + success: function(data) { + $.unblockUI(); + if (data.successful){ + $("#divModalAddEditCodeTablePartner").modal('hide'); + if (onAddEdit != null){ + onAddEdit(data.idCodeTablePartner); + } + } else { + Swal.fire('Napaka pri dodajanju/posodabljanju', + data.error, + 'error'); + } + + }, + error: function (xhr, ajaxOptions, thrownError) { + console.log(xhr); + alert(xhr.responseText); + $.unblockUI(); + } + }); + }); + + //Cancel + $('#btnModalAddEditCodeTablePartnerCancel').on('click', () =>{ + $("#divModalAddEditCodeTablePartner").modal('hide'); + if (onCancel != null){ + onCancel(); + } + }); + + $("#divModalAddEditCodeTablePartner").modal('show'); + + $('.select2-partner-add-edit').select2({ + dropdownParent: $("#divModalAddEditCodeTablePartner") + }); + }, + error: function (xhr, ajaxOptions, thrownError) { + alert(xhr.responseText); + $.unblockUI(); + } + }); +} + +function codeTablePartnerDelete(idCodeTablePartner, onDelete, onCancel){ + $.blockUI(); + $.ajax({ + type: "GET", + url: "/CodeTablePartners/Index/?handler=CodeTablePartner", + data: { + idCodeTablePartner + }, + success: function(data) { + $.unblockUI(); + if (data.successful){ + if (data.partnerInUse){ + Swal.fire('Partner je v uporabi!', + 'Brisanje ni možno!', + 'warning'); + return; + } + Swal.fire({ + title: `Izbrišem partnerja ${data.partner.title}?`, + text: "Tega dejanja ni možno razveljaviti!", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Da, izbriši!', + cancelButtonText: 'Prekliči!' + }).then((result) => { + if (result.isConfirmed) { + $.blockUI(); + $.ajax({ + type: "DELETE", + beforeSend: function(xhr) { + xhr.setRequestHeader("XSRF-TOKEN", + $('input:hidden[name="__RequestVerificationToken"]').val()); + }, + url: "/CodeTablePartners/Index/?handler=CodeTablePartner", + data: { + idCodeTablePartner + }, + success: function(data) { + $.unblockUI(); + if (data.successful){ + if (onDelete != null){ + onDelete(data.idCodeTablePartner); + } + } else { + Swal.fire('Napaka pri brisanju partnerja', + data.error, + 'error'); + } + + }, + error: function (xhr, ajaxOptions, thrownError) { + console.log(xhr); + alert(xhr.responseText); + $.unblockUI(); + } + }); + } else{ + if (onCancel != null){ + onCancel(); + } + } + }); + } else { + Swal.fire('Napaka pri branju partnerja', + data.error, + 'error'); + } + }, + error: function (xhr, ajaxOptions, thrownError) { + console.log(xhr); + alert(xhr.responseText); + $.unblockUI(); + } + }); +} + +function codeTablePartnerDeleteFile(element) { + let row = $(element).parent(); + let idFile = parseInt(row.attr('data-idfile')); + + fileDelete(idFile, (idFile) => { + row.remove(); + }); +} \ No newline at end of file