From 2ec0254e4c79ca648fe41b054df5150c5f1e239f Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 24 Nov 2022 15:48:35 +0100 Subject: [PATCH] Fix gestione filtro completo x ODL --- MP.Data/Controllers/MpSpecController.cs | 44 +++++++++++--- MP.Data/DatabaseModels/Gruppi2MaccModel.cs | 34 +++++++++++ MP.Data/DatabaseModels/ODLExpModel.cs | 70 ++++++++++++++++++++++ MP.Data/MoonProContext.cs | 7 +++ MP.SPEC/Components/ListODL.razor | 4 +- MP.SPEC/Components/ListODL.razor.cs | 16 ++--- MP.SPEC/Components/SelFilterXDL.razor.cs | 50 ++++++++++++++-- MP.SPEC/Data/MpDataService.cs | 46 ++++++++++++-- MP.SPEC/Data/SelectOdlParams.cs | 15 +++-- MP.SPEC/MP.SPEC.csproj | 2 +- MP.SPEC/NLog.config | 2 +- MP.SPEC/Pages/ODL.razor | 2 +- MP.SPEC/Pages/ODL.razor.cs | 61 ++++++++++++------- MP.SPEC/Resources/ChangeLog.html | 2 +- MP.SPEC/Resources/VersNum.txt | 2 +- MP.SPEC/Resources/manifest.xml | 2 +- 16 files changed, 297 insertions(+), 62 deletions(-) create mode 100644 MP.Data/DatabaseModels/Gruppi2MaccModel.cs create mode 100644 MP.Data/DatabaseModels/ODLExpModel.cs diff --git a/MP.Data/Controllers/MpSpecController.cs b/MP.Data/Controllers/MpSpecController.cs index 76ebdebf..a9522894 100644 --- a/MP.Data/Controllers/MpSpecController.cs +++ b/MP.Data/Controllers/MpSpecController.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using MP.Data.DatabaseModels; using NLog; +using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; @@ -546,22 +547,47 @@ namespace MP.Data.Controllers /// Stato ODL: true=in corso/completato /// Cod articolo /// KeyRich (parziale) da cercare (es cod stato x yacht) + /// Reparto selezionato + /// Macchina selezionata /// Data inizio /// Data fine /// - public List ListODLFilt(bool inCorso, string codArt, string keyRichPart, string IdxMacchina, DateTime startDate, DateTime endDate) + public List ListODLFilt(bool inCorso, string codArt, string keyRichPart, string Reparto, string IdxMacchina, DateTime startDate, DateTime endDate) { - List dbResult = new List(); + List dbResult = new List(); using (var dbCtx = new MoonProContext(_configuration)) { + + var InCorso = new SqlParameter("@InCorso", inCorso); + var CodArt = new SqlParameter("@CodArt", codArt); + var KeyRich = new SqlParameter("@KeyRich", keyRichPart); + var CodGruppo = new SqlParameter("@CodGruppo", Reparto); + var IdxMacc = new SqlParameter("@IdxMacchina", IdxMacchina); + var DataFrom = new SqlParameter("@DataFrom", startDate); + var DataTo = new SqlParameter("@DataTo", endDate); + dbResult = dbCtx - .DbSetODL - .Where(x => ((inCorso && x.DataFine == null) || ((!inCorso && x.DataFine != null) && x.DataInizio >= startDate && x.DataInizio <= endDate)) && (x.KeyRichiesta.Contains(keyRichPart) || keyRichPart == "*") && (x.IdxMacchina.Contains(IdxMacchina) || IdxMacchina == "*") && (codArt == "*" || x.CodArticolo.Contains(codArt))) - .AsNoTracking() - .Include(m => m.MachineNav) - .Include(a => a.ArticoloNav) - .OrderByDescending(x => x.IdxOdl) - .ToList(); + .DbSetODLExp + .FromSqlRaw("EXEC stp_ODL_getByFiltSpec @InCorso, @CodArt, @KeyRich, @CodGruppo, @IdxMacchina, @DataFrom, @DataTo", InCorso, CodArt, KeyRich, CodGruppo, IdxMacc, DataFrom, DataTo) + .AsNoTracking() + //.AsEnumerable() + .ToList(); + +#if false + dbResult = dbCtx + .DbSetODL + .Where(x => ((inCorso && x.DataFine == null) || ((!inCorso && x.DataFine != null) + && x.DataInizio >= startDate && x.DataInizio <= endDate)) + && (x.KeyRichiesta.Contains(keyRichPart) || keyRichPart == "*") + //&& (x.MachineNav.Contains(IdxMacchina) || Reparto == "*") + && (x.IdxMacchina.Contains(IdxMacchina) || IdxMacchina == "*") + && (codArt == "*" || x.CodArticolo.Contains(codArt))) + .AsNoTracking() + .Include(m => m.MachineNav) + .Include(a => a.ArticoloNav) + .OrderByDescending(x => x.IdxOdl) + .ToList(); +#endif } return dbResult; } diff --git a/MP.Data/DatabaseModels/Gruppi2MaccModel.cs b/MP.Data/DatabaseModels/Gruppi2MaccModel.cs new file mode 100644 index 00000000..5ea94ddb --- /dev/null +++ b/MP.Data/DatabaseModels/Gruppi2MaccModel.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +#nullable disable +// +// This is here so CodeMaid doesn't reorganize this document +// +namespace MP.Data.DatabaseModels +{ + [Table("Gruppi2Macchine")] + public partial class Gruppi2MaccModel + { + #region Public Properties + public string IdxMacchina { get; set; } + + public string CodGruppo { get; set; } + + /// + /// Navigazione oggetto Machine + /// + [ForeignKey("IdxMacchina")] + public virtual Macchine MachineNav { get; set; } = null!; + + /// + /// Navigazione oggetto Machine + /// + [ForeignKey("CodGruppo")] + public virtual AnagGruppi GruppiNav { get; set; } = null!; + + #endregion Public Properties + } +} \ No newline at end of file diff --git a/MP.Data/DatabaseModels/ODLExpModel.cs b/MP.Data/DatabaseModels/ODLExpModel.cs new file mode 100644 index 00000000..4975200d --- /dev/null +++ b/MP.Data/DatabaseModels/ODLExpModel.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + + +#nullable disable +// +// This is here so CodeMaid doesn't reorganize this document +// +namespace MP.Data.DatabaseModels +{ + public partial class ODLExpModel + { + #region Public Properties + + [Key] + public int IdxOdl { get; set; } + public string CodArticolo { get; set; } = ""; + public string IdxMacchina { get; set; } + public int NumPezzi { get; set; } + public decimal Tcassegnato { get; set; } + public DateTime? DataInizio { get; set; } + public DateTime? DataFine { get; set; } + [MaxLength(2500)] + public string Note { get; set; } = ""; + public string KeyRichiesta { get; set; } + public int PzPallet { get; set; } = 1; + public string CodCli { get; set; } = ""; + + [NotMapped] + public string DurataMinuti + { + get + { + string answ = ""; + DateTime end = DataFine != null ? (DateTime)DataFine : DateTime.Now; + var tsDurata = (end).Subtract((DateTime)DataInizio); + if (tsDurata.TotalDays < 1) + { + answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'"; + } + else + { + answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h"; + } + return answ; + } + } + + /// + /// Navigazione oggetto Machine + /// + [ForeignKey("IdxMacchina")] + public virtual Macchine MachineNav { get; set; } = null!; + /// + /// Navigazione oggetto Articolo + /// + [ForeignKey("CodArticolo")] + public virtual AnagArticoli ArticoloNav { get; set; } = null!; + + public string DescArticolo { get; set; } = ""; + public string CodMacchina { get; set; } = ""; + public string Nome { get; set; } = ""; + + public string OperSetup { get; set; } + + #endregion Public Properties + } +} \ No newline at end of file diff --git a/MP.Data/MoonProContext.cs b/MP.Data/MoonProContext.cs index fcfb0a25..df436012 100644 --- a/MP.Data/MoonProContext.cs +++ b/MP.Data/MoonProContext.cs @@ -45,6 +45,7 @@ namespace MP.Data public virtual DbSet DbSetListValues { get; set; } public virtual DbSet DbSetLinkMenu { get; set; } public virtual DbSet DbSetODL { get; set; } + public virtual DbSet DbSetODLExp { get; set; } public virtual DbSet DbSetPODL { get; set; } public virtual DbSet DbSetFluxLog { get; set; } public virtual DbSet DbSetDossiers { get; set; } @@ -53,6 +54,7 @@ namespace MP.Data public virtual DbSet DbSetEvList { get; set; } public virtual DbSet DbSetVocabolario { get; set; } public virtual DbSet DbOperatori { get; set; } + public virtual DbSet DbSetGrp2Macc { get; set; } #endregion Public Properties @@ -312,6 +314,11 @@ namespace MP.Data { entity.HasKey(e => new { e.Lingua, e.Lemma }); + }); + modelBuilder.Entity(entity => + { + entity.HasKey(e => new { e.CodGruppo, e.IdxMacchina}); + }); OnModelCreatingPartial(modelBuilder); diff --git a/MP.SPEC/Components/ListODL.razor b/MP.SPEC/Components/ListODL.razor index f5e4b7ba..f1a244f4 100644 --- a/MP.SPEC/Components/ListODL.razor +++ b/MP.SPEC/Components/ListODL.razor @@ -83,7 +83,7 @@ else @record.CodArticolo -
@record.ArticoloNav.DescArticolo
+
@record.DescArticolo
@@ -99,7 +99,7 @@ else @record.IdxMacchina -
@record.MachineNav.Descrizione
+
@record.Nome
N° pezzi: @record.NumPezzi
diff --git a/MP.SPEC/Components/ListODL.razor.cs b/MP.SPEC/Components/ListODL.razor.cs index 7e776432..63a6533b 100644 --- a/MP.SPEC/Components/ListODL.razor.cs +++ b/MP.SPEC/Components/ListODL.razor.cs @@ -162,7 +162,7 @@ namespace MP.SPEC.Components await reloadData(); } - protected async Task selectStatRecord(ODLModel? currRec) + protected async Task selectStatRecord(ODLExpModel? currRec) { showStats = true; await Task.Delay(1); @@ -178,7 +178,7 @@ namespace MP.SPEC.Components } } - protected async Task selRecord(ODLModel? currRec) + protected async Task selRecord(ODLExpModel? currRec) { await Task.Delay(1); selDtFine = DateTime.Now; @@ -210,19 +210,19 @@ namespace MP.SPEC.Components private static Logger Log = LogManager.GetCurrentClassLogger(); - private ODLModel? currRecord = null; + private ODLExpModel? currRecord = null; private List? ListOdlStats; private List? ListOdlStatsNetto; - private List? ListRecords; + private List? ListRecords; private List? ListStati; - private List? SearchRecords; + private List? SearchRecords; - private ODLModel? statRecord = null; + private ODLExpModel? statRecord = null; #endregion Private Fields @@ -409,7 +409,7 @@ namespace MP.SPEC.Components private async Task reloadData() { isLoading = true; - SearchRecords = await MDService.ListODLFilt(currFilter.IsActive, currFilter.SearchVal, currFilter.CodStato, currFilter.IdxMacchina, currFilter.DtStart, currFilter.DtEnd); + SearchRecords = await MDService.ListODLFilt(currFilter.IsActive, currFilter.SearchVal, currFilter.CodStato, currFilter.CodReparto, currFilter.IdxMacchina, currFilter.DtStart, currFilter.DtEnd); totalCount = SearchRecords.Count; ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList(); await Task.Delay(1); @@ -417,7 +417,7 @@ namespace MP.SPEC.Components isLoading = false; } - private async Task reloadStatsData(ODLModel? currRec) + private async Task reloadStatsData(ODLExpModel? currRec) { showStats = true; if (currRec != null) diff --git a/MP.SPEC/Components/SelFilterXDL.razor.cs b/MP.SPEC/Components/SelFilterXDL.razor.cs index c48621e8..3cfd8408 100644 --- a/MP.SPEC/Components/SelFilterXDL.razor.cs +++ b/MP.SPEC/Components/SelFilterXDL.razor.cs @@ -11,6 +11,9 @@ namespace MP.SPEC.Components [Parameter] public SelectOdlParams currFilter { get; set; } = new SelectOdlParams(); + [Parameter] + public EventCallback FilterChanged { get; set; } + [Parameter] public List? ListGruppiFase { get; set; } = null; @@ -18,7 +21,7 @@ namespace MP.SPEC.Components public List? ListMacchine { get; set; } = null; [Parameter] - public List? ListStati { get; set; } = null; + public List? ListStati { get; set; } = null; #endregion Public Properties @@ -27,7 +30,6 @@ namespace MP.SPEC.Components protected bool isActive { get => currFilter.IsActive; - set => currFilter.IsActive = value; } protected DateTime selDtEnd @@ -38,6 +40,8 @@ namespace MP.SPEC.Components if (currFilter.DtEnd != value) { currFilter.DtEnd = value; + Task.Delay(1); + reportChange(); } } } @@ -50,6 +54,8 @@ namespace MP.SPEC.Components if (currFilter.DtStart != value) { currFilter.DtStart = value; + Task.Delay(1); + reportChange(); } } } @@ -61,20 +67,54 @@ namespace MP.SPEC.Components private string selMacchina { get => currFilter.IdxMacchina; - set => currFilter.IdxMacchina = value; + set + { + if (currFilter.IdxMacchina != value) + { + currFilter.IdxMacchina = value; + Task.Delay(1); + reportChange(); + } + } } private string selReparto { get => currFilter.CodReparto; - set => currFilter.CodReparto = value; + set + { + if (currFilter.CodReparto != value) + { + currFilter.CodReparto = value; + Task.Delay(1); + reportChange(); + } + } } + private string selStato { get => currFilter.CodStato; - set => currFilter.CodStato = value; + set + { + if (currFilter.CodStato != value) + { + currFilter.CodStato = value; + Task.Delay(1); + reportChange(); + } + } } #endregion Private Properties + + #region Private Methods + + private void reportChange() + { + FilterChanged.InvokeAsync(currFilter); + } + + #endregion Private Methods } } \ No newline at end of file diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs index 366df473..99265065 100644 --- a/MP.SPEC/Data/MpDataService.cs +++ b/MP.SPEC/Data/MpDataService.cs @@ -651,11 +651,43 @@ namespace MP.SPEC.Data /// Stato ODL: true=in corso/completato /// Cod articolo /// KeyRich (parziale) da cercare (es cod stato x yacht) - /// id macchina da cercare + /// Reparto selezionato + /// Macchina selezionata + /// Data inizio + /// Data fine /// - public async Task> ListODLFilt(bool inCorso, string codArt, string keyRichPart, string IdxMacchina, DateTime startDate, DateTime endDate) + public async Task> ListODLFilt(bool inCorso, string codArt, string keyRichPart, string Reparto, string IdxMacchina, DateTime startDate, DateTime endDate) { - return await Task.FromResult(dbController.ListODLFilt(inCorso, codArt, keyRichPart, IdxMacchina, startDate, endDate)); + List? result = new List(); + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + string readType = "DB"; + string currKey = $"{redisOdlList}:{inCorso}:{codArt}:{keyRichPart}:{Reparto}:{IdxMacchina}:{startDate:yyyyMMdd_HHmmss}:{endDate:yyyyMMdd_HHmmss}"; + // cerco in redis dato valore sel macchina... + RedisValue rawData = redisDb.StringGet(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + readType = "REDIS"; + } + else + { + result = await Task.FromResult(dbController.ListODLFilt(inCorso, codArt, keyRichPart, Reparto, IdxMacchina, startDate, endDate)); + // serializzo e salvo... + rawData = JsonConvert.SerializeObject(result); + redisDb.StringSet(currKey, rawData, TimeSpan.FromSeconds(redisShortTimeCache)); + } + if (result == null) + { + result = new List(); + } + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Debug($"ListODLFilt | Read from {readType}: {ts.TotalMilliseconds}ms"); + return result; + + + //return await Task.FromResult(dbController.ListODLFilt(inCorso, codArt, keyRichPart, Reparto, IdxMacchina, startDate, endDate)); } /// @@ -683,7 +715,7 @@ namespace MP.SPEC.Data result = await Task.FromResult(dbController.ListPODLFilt(codArt, keyRichPart)); // serializzo e salvo... rawData = JsonConvert.SerializeObject(result); - redisDb.StringSet(currKey, rawData, TimeSpan.FromSeconds(3)); + redisDb.StringSet(currKey, rawData, TimeSpan.FromSeconds(redisShortTimeCache)); } if (result == null) { @@ -961,7 +993,7 @@ namespace MP.SPEC.Data } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"PODL_getByKey | Read from {readType}: {ts.TotalMilliseconds}ms"); + Log.Trace($"PODL_getByKey | Read from {readType}: {ts.TotalMilliseconds}ms"); } else { @@ -1004,7 +1036,7 @@ namespace MP.SPEC.Data } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; - Log.Debug($"PODL_getByOdl | Read from {readType}: {ts.TotalMilliseconds}ms"); + Log.Trace($"PODL_getByOdl | Read from {readType}: {ts.TotalMilliseconds}ms"); } else { @@ -1200,6 +1232,7 @@ namespace MP.SPEC.Data private const string redisMacList = redisBaseAddr + "SPEC:Cache:MacList"; private const string redisOdlCurrByMac = redisBaseAddr + "SPEC:Cache:OdlByMac"; + private const string redisOdlList = redisBaseAddr + "SPEC:Cache:OdlList"; private const string redisPOdlByOdl = redisBaseAddr + "SPEC:Cache:POdlByOdl"; private const string redisPOdlByPOdl = redisBaseAddr + "SPEC:Cache:POdlByPOdl"; @@ -1238,6 +1271,7 @@ namespace MP.SPEC.Data private IDatabase redisDb = null!; private int redisLongTimeCache = 5; + private int redisShortTimeCache = 4; #endregion Private Fields diff --git a/MP.SPEC/Data/SelectOdlParams.cs b/MP.SPEC/Data/SelectOdlParams.cs index 89742f21..522eba5b 100644 --- a/MP.SPEC/Data/SelectOdlParams.cs +++ b/MP.SPEC/Data/SelectOdlParams.cs @@ -13,17 +13,17 @@ namespace MP.SPEC.Data #region Public Properties + public bool IsActive { get; set; } = true; public string CodReparto { get; set; } = "*"; public string CodStato { get; set; } = "*"; public string IdxMacchina { get; set; } = "*"; - public int CurrPage { get; set; } = 1; - public int NumRec { get; set; } = 10; - public int TotCount { get; set; } = 0; - public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 5); - public DateTime DtStart { get; set; } = Utils.InitDatetime(DateTime.Now, 5).AddDays(-10); public int MaxRecord { get; set; } = 100; - public bool IsActive { get; set; } = true; + public int NumRec { get; set; } = 10; + public DateTime DtStart { get; set; } = Utils.InitDatetime(DateTime.Now, 5).AddDays(-10); + public DateTime DtEnd { get; set; } = Utils.InitDatetime(DateTime.Now, 5); + public int CurrPage { get; set; } = 1; public string SearchVal { get; set; } = "*"; + public int TotCount { get; set; } = 0; #endregion Public Properties @@ -37,6 +37,9 @@ namespace MP.SPEC.Data if (IsActive != item.IsActive) return false; + if (CodReparto != item.CodReparto) + return false; + if (CodStato != item.CodStato) return false; diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj index 21a97290..4acf7c6b 100644 --- a/MP.SPEC/MP.SPEC.csproj +++ b/MP.SPEC/MP.SPEC.csproj @@ -5,7 +5,7 @@ enable enable MP.SPEC - 6.16.2211.2411 + 6.16.2211.2415 diff --git a/MP.SPEC/NLog.config b/MP.SPEC/NLog.config index b32ba10a..3e4185f4 100644 --- a/MP.SPEC/NLog.config +++ b/MP.SPEC/NLog.config @@ -39,7 +39,7 @@ Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f" --> - + diff --git a/MP.SPEC/Pages/ODL.razor b/MP.SPEC/Pages/ODL.razor index a32fd4ae..406a3ea0 100644 --- a/MP.SPEC/Pages/ODL.razor +++ b/MP.SPEC/Pages/ODL.razor @@ -41,7 +41,7 @@
- + @*

FILTRI

diff --git a/MP.SPEC/Pages/ODL.razor.cs b/MP.SPEC/Pages/ODL.razor.cs index f17bc964..46dac323 100644 --- a/MP.SPEC/Pages/ODL.razor.cs +++ b/MP.SPEC/Pages/ODL.razor.cs @@ -72,19 +72,7 @@ namespace MP.SPEC.Pages #endregion Protected Properties #region Protected Methods - private bool filtActive - { - get => selMacchina != "*" || selStato != "*"; - } - protected void resetMacchina() - { - selMacchina = "*"; - } - protected void resetFase() - { - selStato = "*"; - } protected void ForceReload(int newNum) { numRecord = newNum; @@ -95,7 +83,6 @@ namespace MP.SPEC.Pages currPage = newNum; } - private List? ListGruppiFase { get; set; } = null; protected override async Task OnInitializedAsync() { var allGruppiData = await MDService.ElencoGruppiFase(); @@ -120,7 +107,15 @@ namespace MP.SPEC.Pages } } - private string padCodXdl { get; set; } = "00000"; + protected void resetFase() + { + selStato = "*"; + } + + protected void resetMacchina() + { + selMacchina = "*"; + } protected void setDtMax() { @@ -138,9 +133,10 @@ namespace MP.SPEC.Pages #region Private Fields - private List? ListStati; private List? ListMacchine; + private List? ListStati; + #endregion Private Fields #region Private Properties @@ -153,6 +149,11 @@ namespace MP.SPEC.Pages set => currFilter.CurrPage = value; } + private bool filtActive + { + get => selMacchina != "*" || selStato != "*"; + } + private bool isLoading { get; set; } = false; private string leftStringCSS @@ -160,27 +161,32 @@ namespace MP.SPEC.Pages get => isActive ? "text-secondary" : "text-dark fw-bold"; } + private List? ListGruppiFase { get; set; } = null; + private int numRecord { get => currFilter.NumRec; set => currFilter.NumRec = value; } + private string padCodXdl { get; set; } = "00000"; + private string rightStringCSS { get => isActive ? "text-dark fw-bold" : "text-secondary"; } + private string selMacchina + { + get => currFilter.IdxMacchina; + set => currFilter.IdxMacchina = value; + } + private string selStato { get => currFilter.CodStato; set => currFilter.CodStato = value; } - private string selMacchina - { - get => currFilter.IdxMacchina; - set => currFilter.IdxMacchina = value; - } private int totalCount { @@ -189,5 +195,20 @@ namespace MP.SPEC.Pages } #endregion Private Properties + + #region Private Methods + + private async Task updateFilter(SelectOdlParams newParams) + { + isLoading = true; + await Task.Delay(1); + currPage = 1; + await Task.Delay(1); + await InvokeAsync(() => StateHasChanged()); + currFilter = newParams; + isLoading = false; + } + + #endregion Private Methods } } \ No newline at end of file diff --git a/MP.SPEC/Resources/ChangeLog.html b/MP.SPEC/Resources/ChangeLog.html index 722d911f..78514638 100644 --- a/MP.SPEC/Resources/ChangeLog.html +++ b/MP.SPEC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2211.2411

+

Versione: 6.16.2211.2415


Note di rilascio:
  • diff --git a/MP.SPEC/Resources/VersNum.txt b/MP.SPEC/Resources/VersNum.txt index 0e38d7fa..f839c200 100644 --- a/MP.SPEC/Resources/VersNum.txt +++ b/MP.SPEC/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2211.2411 +6.16.2211.2415 diff --git a/MP.SPEC/Resources/manifest.xml b/MP.SPEC/Resources/manifest.xml index 8b5ee031..4aa1ab20 100644 --- a/MP.SPEC/Resources/manifest.xml +++ b/MP.SPEC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2211.2411 + 6.16.2211.2415 https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html false