public void ArchivethePreviousFiles() { if (_settings.ResultArchiveWaitDays < 1) { return; } var dateForMovingtoArchives = DateTime.Now.Date.AddDays(-1 * _settings.ResultArchiveWaitDays); var filter = new ResultArchiveUploadListModelFilter { ToUploadDate = dateForMovingtoArchives, IsArchived = true }; _logger.Info( "\n\n ****************************************** Result Archive ****************************************"); _logger.Info("\nBatch Started -------------------------------------------------------------------\n"); while (true) { int totalRecords = 0; var records = _resultArchiveUploadRepository.GetByFilter(filter, 1, 100, out totalRecords); if (records == null || records.Count() < 1) { break; } foreach (ResultArchive resultArchive in records) { if (!resultArchive.FileId.HasValue) { continue; } var file = _fileRepository.GetById(resultArchive.FileId.Value); var mediaLocation = _mediaRepository.GetResultArchiveMediaFileLocation(resultArchive.EventId); try { var folder = _settings.ResultArchiveSharedDrivePath + resultArchive.EventId + @"\"; if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } if (System.IO.File.Exists(mediaLocation.PhysicalPath + file.Path)) { _logger.Info("\nMoving File For Event [" + resultArchive.EventId + "] [" + mediaLocation.PhysicalPath + file.Path + "].\n"); var destinationFilePath = folder + file.Path; if (System.IO.File.Exists(destinationFilePath)) { System.IO.File.Delete(destinationFilePath); } System.IO.File.Move(mediaLocation.PhysicalPath + file.Path, destinationFilePath); //Removes inherited source directory permission and sets destination directory permission var fs = System.IO.File.GetAccessControl(destinationFilePath); fs.SetAccessRuleProtection(false, false); System.IO.File.SetAccessControl(destinationFilePath, fs); if (System.IO.File.Exists(mediaLocation.PhysicalPath + file.Path)) { System.IO.File.Delete(mediaLocation.PhysicalPath + file.Path); } } else { _logger.Info("\nFile Not Found For Event [" + resultArchive.EventId + "] [" + mediaLocation.PhysicalPath + file.Path + "]\n"); } var files = Directory.GetFiles(mediaLocation.PhysicalPath, "*.zip"); if (files.Count() < 1) { Directory.Delete(mediaLocation.PhysicalPath, true); } ((IFileRepository)_fileRepository).MarkasArchived(file.Id); } catch (Exception ex) { _logger.Error("\nResult Archive Id = " + resultArchive.Id + ". Path : [" + mediaLocation.PhysicalPath + file.Path + "]. \nMessage: " + ex.Message + "\n\tStack trace:" + ex.StackTrace); } } } _logger.Info("\nBatch Completed -------------------------------------------------------------------\n"); }
public ActionResult Index(ResultArchiveUploadListModelFilter filter, int pageNumber = 1) { var model = new ResultArchiveUploadListModel(); try { int totalRecords; var resultArchives = _resultArchiveUploadRepository.GetByFilter(filter, pageNumber, _pageSize, out totalRecords); if (resultArchives != null && resultArchives.Count() > 0) { var fileIds = resultArchives.Where(r => r.FileId.HasValue).Select(r => r.FileId.Value).ToArray(); var files = _fileRepository.GetByIds(fileIds); var events = _eventRepository.GetEventswithPodbyIds(resultArchives.Select(r => r.EventId).ToArray()); var orgRoleUserIds = resultArchives.Select(r => r.UploadedByOrgRoleUserId).ToArray(); var userIdNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds); var pods = _podRepository.GetPodsForEvents(events.Select(e => e.Id).ToArray()); model.ResultUploads = AutoMapper.Mapper.Map <IEnumerable <ResultArchive>, IEnumerable <ResultArchiveUploadViewModel> >(resultArchives); foreach (var upload in model.ResultUploads) { var theEvent = events.Where(e => e.Id == upload.EventId).SingleOrDefault(); var eventPods = pods.Where(p => theEvent.PodIds.Contains(p.Id)).ToArray(); upload.EventDate = theEvent.EventDate; upload.EventName = theEvent.Name; upload.PodName = string.Join(", ", eventPods.Select(ep => ep.Name)); var userIdNamepair = userIdNamePairs.Where(p => p.FirstValue == resultArchives.Where(r => r.Id == upload.Id).Select(r => r.UploadedByOrgRoleUserId).SingleOrDefault()).SingleOrDefault(); if (userIdNamepair != null) { upload.UploadedBy = userIdNamepair.SecondValue; } if (upload.File == null) { continue; } var file = files.Where(f => f.Id == upload.File.Id).SingleOrDefault(); if (file != null) { upload.File = file; } } } if (filter == null) { filter = new ResultArchiveUploadListModelFilter(); } model.Filter = filter; var currentAction = ControllerContext.RouteData.Values["action"].ToString(); Func <int, string> urlFunc = pn => Url.Action(currentAction, new { pageNumber = pn, filter.EventId, filter.FromEventDate, filter.FromUploadDate, filter.ToEventDate, filter.ToUploadDate, filter.ResultArchiveUploadStatus, filter.UploadedBy, filter.Pod }); model.PagingModel = new PagingModel(pageNumber, _pageSize, totalRecords, urlFunc); return(View(model)); } catch (Exception) { return(View(model)); } }