Base folder always set to internal dir; create rpt view assumes working folder is rpt BaseFolder

This commit is contained in:
2026-04-22 17:16:45 +09:00
parent 8a502ce820
commit 287ef24113
9 changed files with 62 additions and 181 deletions
@@ -46,23 +46,6 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
InitializeProgramLog();
}
// this is the "normal path" into the pdf report view
// pathToLoad is presumably _settings.LastUsedPath but doesn't have to be
// public CreatePDFReportViewModel(string pathToLoad, IChangeViewModel viewModelChanger) : this(viewModelChanger)
// {
// _isPerformingInitialLoad = true;
// if (!string.IsNullOrWhiteSpace(pathToLoad))
// {
// LogInfo("Loading report data at path: {0}", pathToLoad);
// ScanFolder(pathToLoad);
// }
// else
// {
// LogInfo("Choose a receipt folder to begin...");
// }
// _isPerformingInitialLoad = false;
// }
public CreatePDFReportViewModel(PDFReportInfo reportInfo, IChangeViewModel viewModelChanger) : this(viewModelChanger)
{
_isPerformingInitialLoad = true;
@@ -75,15 +58,15 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
}
else
{
// load data file in internal dir + UUID
var path = Path.Combine(Utilities.GetInternalDataPath(), _pdfReport.UUID);
if (Directory.Exists(path))
// load data file in internal data report dir
_pdfReport.BaseFolder = Path.Combine(Utilities.GetInternalDataPath(), _pdfReport.UUID);
if (Directory.Exists(_pdfReport.BaseFolder))
{
ScanFolder(path); // even if points entirely to internal folder, we will be A-OK loading here
ScanFolder(_pdfReport.BaseFolder); // even if points entirely to internal folder, we will be A-OK loading here
}
else
{
LogInfo("Erorr loading report! Folder does not exist: {0}", path);
LogInfo("Erorr loading report! Folder does not exist: {0}", _pdfReport.BaseFolder);
}
}
_isPerformingInitialLoad = false;
@@ -99,7 +82,6 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
_pdfReport = value;
NotifyPropertyChanged(nameof(ReportTitle));
NotifyPropertyChanged(nameof(IsCreatePDFButtonEnabled));
NotifyPropertyChanged(nameof(WorkingFolder));
NotifyPropertyChanged(nameof(ReportFiles));
SetupFileCollectionChangedWatcher();
}
@@ -112,20 +94,14 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
{
_pdfReport.Title = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(IsTitleBoxVisible));
NotifyPropertyChanged(nameof(CanAddItem));
HasUnsavedWork = true;
}
}
public bool IsTitleBoxVisible
{
get => !string.IsNullOrWhiteSpace(WorkingFolder);
}
public bool CanAddItem
{
get => IsTitleBoxVisible && !IsCreatingPDF;
get => !IsCreatingPDF;
}
public bool IsCreatingPDF
@@ -136,7 +112,6 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
_isCreatingPDF = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(IsCreatePDFButtonEnabled));
NotifyPropertyChanged(nameof(HasWorkingFolderAndNotMakingPDF));
NotifyPropertyChanged(nameof(CanAddItem));
}
}
@@ -146,38 +121,6 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
get => !_isCreatingPDF && _pdfReport.Files.Count > 0;
}
public bool HasWorkingFolder
{
get => !string.IsNullOrWhiteSpace(WorkingFolder) && Directory.Exists(WorkingFolder);
}
public bool HasWorkingFolderAndNotMakingPDF
{
get => !string.IsNullOrWhiteSpace(WorkingFolder) && Directory.Exists(WorkingFolder) && !_isCreatingPDF;
}
public string WorkingFolder
{
get
{
if (string.IsNullOrWhiteSpace(_pdfReport.BaseFolder))
{
return Path.Combine(Utilities.GetInternalDataPath(), _pdfReport.UUID);
}
else
{
return _pdfReport.BaseFolder;
}
}
set
{
_pdfReport.BaseFolder = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(HasWorkingFolder));
NotifyPropertyChanged(nameof(HasWorkingFolderAndNotMakingPDF));
}
}
public string ProgramLog
{
get => _programLog;
@@ -269,25 +212,20 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
}
}
private string GetReportSavedDataPath(string workingFolder)
private string GetReportSavedDataPath()
{
var internalPath = Utilities.GetInternalDataPath();
var internalReportDataDir = Path.Combine(internalPath, _pdfReport.UUID);
if (!Directory.Exists(internalReportDataDir))
if (!Directory.Exists(_pdfReport.BaseFolder))
{
Directory.CreateDirectory(internalReportDataDir);
Directory.CreateDirectory(_pdfReport.BaseFolder);
}
return Path.Combine(internalReportDataDir, Constants.ReportSavedDataFileName);
return Path.Combine(_pdfReport.BaseFolder, Constants.ReportSavedDataFileName);
}
private void ScanFolder(string path)
{
if (Directory.Exists(path))
{
WorkingFolder = path;
NotifyPropertyChanged(nameof(IsTitleBoxVisible));
NotifyPropertyChanged(nameof(CanAddItem));
var reportFilePath = GetReportSavedDataPath(path);
var reportFilePath = GetReportSavedDataPath();
var successfullyLoadedPriorReportFile = false;
if (File.Exists(reportFilePath))
{
@@ -307,19 +245,19 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
// Scan folder for files and display in DataGrid
if (path != PDFReport.BaseFolder)
{
// in this case, there is essentially no report existing,
// in this case, there is essentially no existing report,
// so we need to make a new one.
PDFReport = new PDFReport()
{
Title = Path.GetDirectoryName(path) ?? "",
LastSaved = null,
UUID = Utilities.GetUniqueReportGuid(_settings).ToString(),
BaseFolder = path
};
PDFReport.UpdateBaseFolder();
}
ReportFiles.Clear();
ReportTitle = "";
var filePaths = Directory.GetFiles(WorkingFolder);
var filePaths = Directory.GetFiles(path);
foreach (var filePath in filePaths)
{
AddFileBasedOnPath(filePath);
@@ -539,7 +477,7 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
{
try
{
await Task.Run(() => CreatePDF(WorkingFolder));
await Task.Run(() => CreatePDF(outputFolderPath: _pdfReport.BaseFolder));
} catch (Exception e)
{
LogInfo("PDF process failed! Reason: " + e.Message);
@@ -578,14 +516,8 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
private async Task SavePDFReportDataToDisk(PDFReport report)
{
var jsonContext = new SourceGenerationContext(Utilities.GetSerializerOptions());
using var memoryStream = new MemoryStream();
await JsonSerializer.SerializeAsync(memoryStream, report, jsonContext.PDFReport);
memoryStream.Position = 0;
using var reader = new StreamReader(memoryStream);
var json = await reader.ReadToEndAsync();
var savePath = GetReportSavedDataPath(WorkingFolder);
await File.WriteAllTextAsync(savePath, json);
var savePath = GetReportSavedDataPath();
await Utilities.SaveReportDataAsync(report, savePath);
LogInfo("Saved report information to {0}", savePath);
HasUnsavedWork = false;
UpdateRecentlyUsed?.UpdateRecentlyUsed(report);
@@ -602,11 +534,11 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
}
}
private async Task CreatePDF(string folderPath)
private async Task CreatePDF(string outputFolderPath)
{
IsCreatingPDF = true;
var reportCreator = new ReportPDFCreator(this);
var outputPdfFile = await reportCreator.CreatePDF(ReportFiles.ToList(), ReportTitle, folderPath, new PDFFontResolver(_processDir, this), _settings);
var outputPdfFile = await reportCreator.CreatePDF(ReportFiles.ToList(), ReportTitle, outputFolderPath, new PDFFontResolver(_processDir, this), _settings);
if (!string.IsNullOrWhiteSpace(outputPdfFile))
{
await CreateAndSaveReportObjectAfterReportCreation();
@@ -617,8 +549,7 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
public async void ReturnToMainMenu()
{
bool isSafeToReturn = await CheckIsSafeToShutdown();
if (isSafeToReturn)
if (await CheckIsSafeToShutdown())
{
PopViewModel();
}
@@ -626,7 +557,7 @@ class CreatePDFReportViewModel : BaseViewModel, ICanCheckShutdown, ILogger
public async Task<bool> CheckIsSafeToShutdown()
{
if (!HasUnsavedWork || string.IsNullOrWhiteSpace(WorkingFolder))
if (!HasUnsavedWork)
{
return true;
}