diff --git a/MP.FileData/Controllers/FileController.cs b/MP.FileData/Controllers/FileController.cs index f06561ae..0b992f02 100644 --- a/MP.FileData/Controllers/FileController.cs +++ b/MP.FileData/Controllers/FileController.cs @@ -80,9 +80,11 @@ namespace MP.FileData.Controllers { bool answ = false; DirectoryInfo dirInfo = new DirectoryInfo(path); - FileInfo[] fileList = dirInfo.GetFiles("*.*"); + FileInfo[] fileList = dirInfo.GetFiles(searchPattern); List fileNew = new List(); - List fileMod = new List(); + List fileChecked = new List(); + List fileMod = new List(); + DateTime adesso = DateTime.Now; // recupera elenco file nel DB var archivedFile = FileGetByPath(path, true); @@ -92,8 +94,9 @@ namespace MP.FileData.Controllers foreach (var file in fileList) { // cerca nel DB... - var currRecord = archivedFile - .Where(x => x.Path == file.FullName) + FileModel currRecord = archivedFile + .Where(x => x.Active && x.Path == file.FullName) + .OrderByDescending(y => y.Rev) .FirstOrDefault(); // se NON trova lo crea if (currRecord == null) @@ -111,8 +114,16 @@ namespace MP.FileData.Controllers var newMD5 = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); if (newMD5 != currRecord.MD5) { - fileMod.Add(file); + fileMod.Add(currRecord); } + else + { + fileChecked.Add(currRecord); + } + } + else + { + fileChecked.Add(currRecord); } } } @@ -126,7 +137,12 @@ namespace MP.FileData.Controllers // aggiorno i file modificati if (fileMod != null && fileMod.Count > 0) { - FileUpdate(idxMacchina, fileMod); + FileSetUpdated(fileMod); + } + // segno data-ora ultimo controllo x file invariati + if (fileChecked != null && fileChecked.Count > 0) + { + FileSetChecked(fileChecked); } return answ; @@ -334,6 +350,59 @@ namespace MP.FileData.Controllers return done; } + /// + /// Effettua update di un record in archivio da lista (SOLO STATUS) + /// + /// + /// + public bool FileSetChecked(List updFiles) + { + bool answ = false; + DateTime adesso = DateTime.Now; + + using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) + { + foreach (var item in updFiles) + { + item.LastCheck = adesso; + localDbCtx.Entry(item).State = EntityState.Modified; + } + + // salvo + localDbCtx.SaveChanges(); + answ = true; + } + + return answ; + } + + /// + /// Effettua update di un record in archivio da lista (SOLO STATUS) + /// + /// + /// + public bool FileSetUpdated(List updFiles) + { + bool answ = false; + DateTime adesso = DateTime.Now; + + using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) + { + foreach (var item in updFiles) + { + item.DiskStatus = FileState.Changed; + item.LastCheck = adesso; + localDbCtx.Entry(item).State = EntityState.Modified; + } + + // salvo + localDbCtx.SaveChanges(); + answ = true; + } + + return answ; + } + /// /// Aggiorna un Ordine /// @@ -431,58 +500,6 @@ namespace MP.FileData.Controllers } #endif - /// - /// effettua inserimento di un record in archivio come NUOVO documento tracciato - /// - /// - /// - /// - public bool FileUpdate(string idxMacchina, List updFiles) - { - bool answ = false; - DateTime adesso = DateTime.Now; - // MD5 hash - using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) - { - using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) - { - // converto - List newRec = updFiles.Select(o => new DatabaseModels.FileModel() - { - Active = true, - DiskStatus = FileState.Changed, - CodArticolo = "ND", - FileContent = File.ReadAllBytes(o.FullName), - IdxMacchina = idxMacchina, - LastCheck = adesso, - LastMod = o.LastWriteTime, - MimeType = o.Extension, - Name = o.Name, - Path = o.FullName, - Rev = 0, - Size = o.Length - }).ToList(); - - // calcolo MD5 - foreach (var item in newRec) - { - var hash = md5.ComputeHash(item.FileContent); - item.MD5 = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); - } - - // aggiungo in blocco - localDbCtx - .DbSetProgFile - .UpdateRange(newRec); - - // salvo - localDbCtx.SaveChanges(); - answ = true; - } - } - return answ; - } - /// /// Elenco tabella Macchine /// diff --git a/MP.Prog/Data/FileArchDataService.cs b/MP.Prog/Data/FileArchDataService.cs index a29e5bb9..0f1d2a5c 100644 --- a/MP.Prog/Data/FileArchDataService.cs +++ b/MP.Prog/Data/FileArchDataService.cs @@ -102,11 +102,21 @@ namespace MP.Prog.Data #region Internal Methods + internal Task FileApprove(FileData.DatabaseModels.FileModel currItem) + { + return Task.FromResult(dbController.FileModApprove(currItem)); + } + internal Task FileDelete(FileData.DatabaseModels.FileModel currItem) { return Task.FromResult(dbController.FileDelete(currItem)); } + internal Task FileReject(FileData.DatabaseModels.FileModel currItem) + { + return Task.FromResult(dbController.FileModReject(currItem)); + } + internal Task FileUpdate(FileData.DatabaseModels.FileModel updItem) { return Task.FromResult(dbController.FileUpdate(updItem)); @@ -212,9 +222,9 @@ namespace MP.Prog.Data return Task.FromResult(dbController.FileGetByKey(FileId)); } - public Task> FileGetFilt(string IdxMacchina, string CodArticolo, bool OnlyMod, string SearchVal) + public Task> FileGetFilt(string IdxMacchina, string CodArticolo, bool OnlyActive, bool OnlyMod, string SearchVal) { - return Task.FromResult(dbController.FileGetFilt(IdxMacchina, CodArticolo, OnlyMod, SearchVal).ToList()); + return Task.FromResult(dbController.FileGetFilt(IdxMacchina, CodArticolo, OnlyActive, OnlyMod, SearchVal).ToList()); } public Task> MacchineGetAll() diff --git a/MP.Prog/Data/SelectData.cs b/MP.Prog/Data/SelectData.cs index 0c6a9f65..5c2cb00c 100644 --- a/MP.Prog/Data/SelectData.cs +++ b/MP.Prog/Data/SelectData.cs @@ -13,6 +13,7 @@ namespace MP.Prog.Data public DateTime DateEnd { get; set; } = DateTime.Now.AddMinutes(1); public DateTime DateStart { get; set; } = DateTime.Now.AddDays(-7); public string IdxMacchina { get; set; } = ""; + public bool OnlyActive { get; set; } = false; public bool OnlyMod { get; set; } = false; #endregion Public Properties @@ -42,6 +43,8 @@ namespace MP.Prog.Data { if (!(obj is SelectData item)) return false; + if (OnlyActive != item.OnlyActive) + return false; if (OnlyMod != item.OnlyMod) return false; if (CodArticolo != item.CodArticolo) diff --git a/MP.Prog/Pages/Archive.razor b/MP.Prog/Pages/Archive.razor index 89144f0e..efa91e4d 100644 --- a/MP.Prog/Pages/Archive.razor +++ b/MP.Prog/Pages/Archive.razor @@ -20,12 +20,22 @@
- - + +
-
+
+
+
+
+
+ + +
+
+
+
@@ -43,29 +53,6 @@
-
-
-
- - - -
- - -
- -
-
- -
@@ -100,7 +87,7 @@ File Rev Size - Ok + State Macchina Articolo Modificato @@ -136,16 +123,18 @@
@((((double)record.Size)/1024).ToString("N2")) k
- - - @if (@record.DiskState != MP.FileData.FileState.Unchanged) - { - - } - else - { - - } + + + @record.DiskStatus + + @*@if (record.DiskStatus == MP.FileData.FileState.Unchanged) + { + + } + else + { + + }*@ diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs index a5593f95..da5610b6 100644 --- a/MP.Prog/Pages/Archive.razor.cs +++ b/MP.Prog/Pages/Archive.razor.cs @@ -66,6 +66,28 @@ namespace MP.Prog.Pages } } + private bool OnlyActive + { + get + { + bool answ = false; + if (AppMService.File_Filter != null) + { + answ = AppMService.File_Filter.OnlyActive; + } + return answ; + } + set + { + if (!AppMService.File_Filter.OnlyActive.Equals(value)) + { + AppMService.File_Filter.OnlyActive = value; + var pUpd = Task.Run(async () => await ReloadData()); + pUpd.Wait(); + } + } + } + private bool OnlyMod { get @@ -192,10 +214,35 @@ namespace MP.Prog.Pages #region Private Methods + private string cssStatusByCod(MP.FileData.FileState currStatus) + { + string answ = "badge"; + switch (currStatus) + { + case FileData.FileState.Changed: + answ += " badge-warning"; + break; + + case FileData.FileState.Deleted: + answ += " badge-danger"; + break; + + case FileData.FileState.Unchanged: + answ += " badge-success"; + break; + + case FileData.FileState.ND: + default: + answ += " badge-light"; + break; + } + return answ; + } + private async Task ReloadData() { isLoading = true; - SearchRecords = await DataService.FileGetFilt(AppMService.File_Filter.IdxMacchina, AppMService.File_Filter.CodArticolo, AppMService.File_Filter.OnlyMod, AppMService.SearchVal); + SearchRecords = await DataService.FileGetFilt(AppMService.File_Filter.IdxMacchina, AppMService.File_Filter.CodArticolo, AppMService.File_Filter.OnlyActive, AppMService.File_Filter.OnlyMod, AppMService.SearchVal); ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList(); isLoading = false; }