Add dedicated settings dialog in main window and keep auth form login-only.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Magomed 2026-07-28 12:24:35 +03:00
parent e35e67849f
commit babc067863
7 changed files with 322 additions and 99 deletions

View File

@ -189,6 +189,12 @@
<Compile Include="HelpForms\HF_Registration.Designer.cs"> <Compile Include="HelpForms\HF_Registration.Designer.cs">
<DependentUpon>HF_Registration.cs</DependentUpon> <DependentUpon>HF_Registration.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="HelpForms\HF_Settings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="HelpForms\HF_Settings.Designer.cs">
<DependentUpon>HF_Settings.cs</DependentUpon>
</Compile>
<Compile Include="HelpForms\HF_UploadDataToServer.cs"> <Compile Include="HelpForms\HF_UploadDataToServer.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

View File

@ -27,6 +27,7 @@ namespace Электронная_Фармация
private Panel _documentHost; private Panel _documentHost;
private Panel _statusFooter; private Panel _statusFooter;
private Label _lblCurrentUser; private Label _lblCurrentUser;
private ModernButton _btnSettings;
private ContextMenuStrip _directoryMenu; private ContextMenuStrip _directoryMenu;
private ContextMenuStrip _documentTabMenu; private ContextMenuStrip _documentTabMenu;
private ToolStripMenuItem _documentCloseTabMenuItem; private ToolStripMenuItem _documentCloseTabMenuItem;
@ -83,10 +84,20 @@ namespace Электронная_Фармация
{ {
Name = "lblCurrentUser", Name = "lblCurrentUser",
Dock = DockStyle.Fill, Dock = DockStyle.Fill,
TextAlign = ContentAlignment.MiddleRight, TextAlign = ContentAlignment.MiddleLeft,
AutoEllipsis = true, AutoEllipsis = true,
Tag = "muted" Tag = "muted"
}; };
_btnSettings = new ModernButton
{
Name = "btnSettings",
Dock = DockStyle.Right,
Width = 150,
Margin = new Padding(0),
Text = "Настройки"
};
_btnSettings.Click += (_, __) => OpenSettingsDialog();
_statusFooter.Controls.Add(_btnSettings);
_statusFooter.Controls.Add(_lblCurrentUser); _statusFooter.Controls.Add(_lblCurrentUser);
Controls.Add(_loadingOverlay); Controls.Add(_loadingOverlay);

View File

@ -589,6 +589,16 @@ namespace Электронная_Фармация
} }
} }
private void OpenSettingsDialog()
{
var settingsForm = new HF_Settings();
UiThemeHelper.ApplyToControlTree(settingsForm);
if (settingsForm.ShowDialog(this) == DialogResult.OK)
{
RefreshCurrentUserStatus();
}
}
private async void tsBtnSentData_Click(object sender, EventArgs e) private async void tsBtnSentData_Click(object sender, EventArgs e)
{ {
DialogResult drUpdateData = UiDialogs.ConfirmYesNoCancel("Будут отправлены все сохранённые заказы. Вы уверены?", "Отправка заказов", this); DialogResult drUpdateData = UiDialogs.ConfirmYesNoCancel("Будут отправлены все сохранённые заказы. Вы уверены?", "Отправка заказов", this);

View File

@ -38,11 +38,6 @@
this.checkTokenGained = new System.Windows.Forms.CheckBox(); this.checkTokenGained = new System.Windows.Forms.CheckBox();
this.panel1 = new System.Windows.Forms.Panel(); this.panel1 = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.txtApiUrl = new Elfisa.UI.Controls.ModernTextBox();
this.labelExportPath = new System.Windows.Forms.Label();
this.txtInvoiceExportPath = new Elfisa.UI.Controls.ModernTextBox();
this.btnBrowseExportPath = new Elfisa.UI.Controls.ModernButton();
this.panel1.SuspendLayout(); this.panel1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -82,55 +77,9 @@
this.txtPassword.Size = new System.Drawing.Size(375, 34); this.txtPassword.Size = new System.Drawing.Size(375, 34);
this.txtPassword.TabIndex = 3; this.txtPassword.TabIndex = 3;
// //
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("Segoe UI", 12F);
this.label5.Location = new System.Drawing.Point(23, 225);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(103, 28);
this.label5.TabIndex = 11;
this.label5.Text = "URL API";
//
// txtApiUrl
//
this.txtApiUrl.Font = new System.Drawing.Font("Segoe UI", 12F);
this.txtApiUrl.Location = new System.Drawing.Point(132, 225);
this.txtApiUrl.Name = "txtApiUrl";
this.txtApiUrl.Size = new System.Drawing.Size(271, 34);
this.txtApiUrl.TabIndex = 12;
//
// labelExportPath
//
this.labelExportPath.AutoSize = true;
this.labelExportPath.Font = new System.Drawing.Font("Segoe UI", 12F);
this.labelExportPath.Location = new System.Drawing.Point(23, 272);
this.labelExportPath.Name = "labelExportPath";
this.labelExportPath.Size = new System.Drawing.Size(280, 28);
this.labelExportPath.TabIndex = 13;
this.labelExportPath.Text = "Папка экспорта накладных";
//
// txtInvoiceExportPath
//
this.txtInvoiceExportPath.Font = new System.Drawing.Font("Segoe UI", 10F);
this.txtInvoiceExportPath.Location = new System.Drawing.Point(28, 304);
this.txtInvoiceExportPath.Name = "txtInvoiceExportPath";
this.txtInvoiceExportPath.Size = new System.Drawing.Size(320, 30);
this.txtInvoiceExportPath.TabIndex = 14;
//
// btnBrowseExportPath
//
this.btnBrowseExportPath.Font = new System.Drawing.Font("Segoe UI Semibold", 10F, System.Drawing.FontStyle.Bold);
this.btnBrowseExportPath.Location = new System.Drawing.Point(354, 304);
this.btnBrowseExportPath.Name = "btnBrowseExportPath";
this.btnBrowseExportPath.Size = new System.Drawing.Size(49, 30);
this.btnBrowseExportPath.TabIndex = 15;
this.btnBrowseExportPath.Text = "...";
this.btnBrowseExportPath.Click += new System.EventHandler(this.btnBrowseExportPath_Click);
//
// btnConfirmRegistration // btnConfirmRegistration
// //
this.btnConfirmRegistration.Location = new System.Drawing.Point(188, 356); this.btnConfirmRegistration.Location = new System.Drawing.Point(188, 244);
this.btnConfirmRegistration.Name = "btnConfirmRegistration"; this.btnConfirmRegistration.Name = "btnConfirmRegistration";
this.btnConfirmRegistration.Size = new System.Drawing.Size(215, 43); this.btnConfirmRegistration.Size = new System.Drawing.Size(215, 43);
this.btnConfirmRegistration.TabIndex = 5; this.btnConfirmRegistration.TabIndex = 5;
@ -139,7 +88,7 @@
// //
// btnCloseThis // btnCloseThis
// //
this.btnCloseThis.Location = new System.Drawing.Point(28, 356); this.btnCloseThis.Location = new System.Drawing.Point(28, 244);
this.btnCloseThis.Name = "btnCloseThis"; this.btnCloseThis.Name = "btnCloseThis";
this.btnCloseThis.Size = new System.Drawing.Size(125, 43); this.btnCloseThis.Size = new System.Drawing.Size(125, 43);
this.btnCloseThis.TabIndex = 6; this.btnCloseThis.TabIndex = 6;
@ -151,7 +100,7 @@
this.checkTokenGained.AutoCheck = false; this.checkTokenGained.AutoCheck = false;
this.checkTokenGained.AutoSize = true; this.checkTokenGained.AutoSize = true;
this.checkTokenGained.Font = new System.Drawing.Font("Segoe UI", 12F); this.checkTokenGained.Font = new System.Drawing.Font("Segoe UI", 12F);
this.checkTokenGained.Location = new System.Drawing.Point(28, 420); this.checkTokenGained.Location = new System.Drawing.Point(28, 304);
this.checkTokenGained.Name = "checkTokenGained"; this.checkTokenGained.Name = "checkTokenGained";
this.checkTokenGained.Size = new System.Drawing.Size(171, 32); this.checkTokenGained.Size = new System.Drawing.Size(171, 32);
this.checkTokenGained.TabIndex = 7; this.checkTokenGained.TabIndex = 7;
@ -186,12 +135,7 @@
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(436, 420); this.ClientSize = new System.Drawing.Size(436, 300);
this.Controls.Add(this.btnBrowseExportPath);
this.Controls.Add(this.txtInvoiceExportPath);
this.Controls.Add(this.labelExportPath);
this.Controls.Add(this.txtApiUrl);
this.Controls.Add(this.label5);
this.Controls.Add(this.panel1); this.Controls.Add(this.panel1);
this.Controls.Add(this.checkTokenGained); this.Controls.Add(this.checkTokenGained);
this.Controls.Add(this.btnCloseThis); this.Controls.Add(this.btnCloseThis);
@ -224,10 +168,5 @@
private System.Windows.Forms.CheckBox checkTokenGained; private System.Windows.Forms.CheckBox checkTokenGained;
private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label5;
private Elfisa.UI.Controls.ModernTextBox txtApiUrl;
private System.Windows.Forms.Label labelExportPath;
private Elfisa.UI.Controls.ModernTextBox txtInvoiceExportPath;
private Elfisa.UI.Controls.ModernButton btnBrowseExportPath;
} }
} }

View File

@ -25,27 +25,6 @@ namespace Электронная_Фармация.HelpForms
Close(); Close();
} }
private void btnBrowseExportPath_Click(object sender, EventArgs e)
{
using (var dialog = new FolderBrowserDialog())
{
dialog.Description = "Выберите папку для экспорта накладных";
dialog.ShowNewFolderButton = true;
if (!string.IsNullOrWhiteSpace(txtInvoiceExportPath.Text)
&& System.IO.Directory.Exists(txtInvoiceExportPath.Text.Trim()))
{
dialog.SelectedPath = txtInvoiceExportPath.Text.Trim();
}
if (dialog.ShowDialog(this) == DialogResult.OK)
{
txtInvoiceExportPath.Text = dialog.SelectedPath;
AppConfig.SetInvoiceExportPath(dialog.SelectedPath);
ToastNotification.ShowSuccess("Папка экспорта накладных сохранена");
}
}
}
private async void btnConfirmRegistration_Click(object sender, EventArgs e) private async void btnConfirmRegistration_Click(object sender, EventArgs e)
{ {
btnConfirmRegistration.Enabled = false; btnConfirmRegistration.Enabled = false;
@ -56,12 +35,9 @@ namespace Электронная_Фармация.HelpForms
if (strLogin.Length > 0 && strPassword.Length > 0) if (strLogin.Length > 0 && strPassword.Length > 0)
{ {
// Адрес API берём из поля и сохраняем ДО входа: иначе логин уходит string apiUrl = string.IsNullOrWhiteSpace(Settings.Default.ApiBaseUrl)
// на старый сохранённый/дефолтный адрес, а не на введённый пользователем. ? AppConfig.DefaultApiBaseUrl
string apiUrl = txtApiUrl.Text.Trim(); : Settings.Default.ApiBaseUrl;
Settings.Default.ApiBaseUrl = apiUrl;
AppConfig.SetInvoiceExportPath(txtInvoiceExportPath.Text);
Settings.Default.Save();
LoginRequest loginRequest = new LoginRequest(); LoginRequest loginRequest = new LoginRequest();
loginRequest.Username = strLogin.Trim(); loginRequest.Username = strLogin.Trim();
@ -78,7 +54,6 @@ namespace Электронная_Фармация.HelpForms
Settings.Default.stringPassword = strPassword; Settings.Default.stringPassword = strPassword;
Settings.Default.stringToken = token; Settings.Default.stringToken = token;
Settings.Default.ApiBaseUrl = client.BaseUrl; Settings.Default.ApiBaseUrl = client.BaseUrl;
AppConfig.SetInvoiceExportPath(txtInvoiceExportPath.Text);
Settings.Default.Save(); Settings.Default.Save();
AppDebugLog.Info("Auth", $"Авторизация успешна. token={AppDebugLog.MaskToken(token)}"); AppDebugLog.Info("Auth", $"Авторизация успешна. token={AppDebugLog.MaskToken(token)}");
@ -124,11 +99,6 @@ namespace Электронная_Фармация.HelpForms
WindowChromeHelper.ApplyDialogChrome(this, panel1, label3); WindowChromeHelper.ApplyDialogChrome(this, panel1, label3);
txtLogin.Text = login; txtLogin.Text = login;
txtPassword.Text = password; txtPassword.Text = password;
txtApiUrl.Text = string.IsNullOrWhiteSpace(Settings.Default.ApiBaseUrl)
? AppConfig.DefaultApiBaseUrl
: Settings.Default.ApiBaseUrl;
txtInvoiceExportPath.Text = AppConfig.InvoiceExportPath;
checkTokenGained.Checked = doWeHaveAToken.Length > 0; checkTokenGained.Checked = doWeHaveAToken.Length > 0;
} }
} }

View File

@ -0,0 +1,192 @@
namespace Электроннаяармация.HelpForms
{
partial class HF_Settings
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.panelHeader = new System.Windows.Forms.Panel();
this.lblTitle = new System.Windows.Forms.Label();
this.lblHint = new System.Windows.Forms.Label();
this.lblLocationId = new System.Windows.Forms.Label();
this.txtLocationId = new Elfisa.UI.Controls.ModernTextBox();
this.lblApiUrl = new System.Windows.Forms.Label();
this.txtApiUrl = new Elfisa.UI.Controls.ModernTextBox();
this.lblInvoiceExportPath = new System.Windows.Forms.Label();
this.txtInvoiceExportPath = new Elfisa.UI.Controls.ModernTextBox();
this.btnBrowseExportPath = new Elfisa.UI.Controls.ModernButton();
this.btnCancel = new Elfisa.UI.Controls.ModernButton();
this.btnSave = new Elfisa.UI.Controls.ModernButton();
this.panelHeader.SuspendLayout();
this.SuspendLayout();
//
// panelHeader
//
this.panelHeader.Controls.Add(this.lblTitle);
this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
this.panelHeader.Location = new System.Drawing.Point(0, 0);
this.panelHeader.Name = "panelHeader";
this.panelHeader.Size = new System.Drawing.Size(560, 56);
this.panelHeader.TabIndex = 0;
//
// lblTitle
//
this.lblTitle.Font = new System.Drawing.Font("Segoe UI Semibold", 13.8F, System.Drawing.FontStyle.Bold);
this.lblTitle.ForeColor = System.Drawing.Color.White;
this.lblTitle.Location = new System.Drawing.Point(12, 10);
this.lblTitle.Name = "lblTitle";
this.lblTitle.Size = new System.Drawing.Size(520, 36);
this.lblTitle.TabIndex = 0;
this.lblTitle.Text = "Настройки";
this.lblTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// lblHint
//
this.lblHint.Font = new System.Drawing.Font("Segoe UI", 10F);
this.lblHint.Location = new System.Drawing.Point(24, 72);
this.lblHint.Name = "lblHint";
this.lblHint.Size = new System.Drawing.Size(512, 46);
this.lblHint.TabIndex = 1;
this.lblHint.Text = "Здесь можно задать торговую точку, адрес API и папку для экспорта накладных.";
//
// lblLocationId
//
this.lblLocationId.AutoSize = true;
this.lblLocationId.Font = new System.Drawing.Font("Segoe UI", 11F);
this.lblLocationId.Location = new System.Drawing.Point(24, 124);
this.lblLocationId.Name = "lblLocationId";
this.lblLocationId.Size = new System.Drawing.Size(100, 25);
this.lblLocationId.TabIndex = 2;
this.lblLocationId.Text = "Location ID";
//
// txtLocationId
//
this.txtLocationId.Font = new System.Drawing.Font("Segoe UI", 11F);
this.txtLocationId.Location = new System.Drawing.Point(28, 152);
this.txtLocationId.Name = "txtLocationId";
this.txtLocationId.Size = new System.Drawing.Size(508, 32);
this.txtLocationId.TabIndex = 3;
//
// lblApiUrl
//
this.lblApiUrl.AutoSize = true;
this.lblApiUrl.Font = new System.Drawing.Font("Segoe UI", 11F);
this.lblApiUrl.Location = new System.Drawing.Point(24, 196);
this.lblApiUrl.Name = "lblApiUrl";
this.lblApiUrl.Size = new System.Drawing.Size(127, 25);
this.lblApiUrl.TabIndex = 4;
this.lblApiUrl.Text = "Адрес сервера";
//
// txtApiUrl
//
this.txtApiUrl.Font = new System.Drawing.Font("Segoe UI", 11F);
this.txtApiUrl.Location = new System.Drawing.Point(28, 224);
this.txtApiUrl.Name = "txtApiUrl";
this.txtApiUrl.Size = new System.Drawing.Size(508, 32);
this.txtApiUrl.TabIndex = 5;
//
// lblInvoiceExportPath
//
this.lblInvoiceExportPath.AutoSize = true;
this.lblInvoiceExportPath.Font = new System.Drawing.Font("Segoe UI", 11F);
this.lblInvoiceExportPath.Location = new System.Drawing.Point(24, 268);
this.lblInvoiceExportPath.Name = "lblInvoiceExportPath";
this.lblInvoiceExportPath.Size = new System.Drawing.Size(228, 25);
this.lblInvoiceExportPath.TabIndex = 6;
this.lblInvoiceExportPath.Text = "Папка экспорта накладных";
//
// txtInvoiceExportPath
//
this.txtInvoiceExportPath.Font = new System.Drawing.Font("Segoe UI", 11F);
this.txtInvoiceExportPath.Location = new System.Drawing.Point(28, 296);
this.txtInvoiceExportPath.Name = "txtInvoiceExportPath";
this.txtInvoiceExportPath.Size = new System.Drawing.Size(448, 32);
this.txtInvoiceExportPath.TabIndex = 7;
//
// btnBrowseExportPath
//
this.btnBrowseExportPath.Font = new System.Drawing.Font("Segoe UI Semibold", 10F, System.Drawing.FontStyle.Bold);
this.btnBrowseExportPath.Location = new System.Drawing.Point(487, 296);
this.btnBrowseExportPath.Name = "btnBrowseExportPath";
this.btnBrowseExportPath.Size = new System.Drawing.Size(49, 32);
this.btnBrowseExportPath.TabIndex = 8;
this.btnBrowseExportPath.Text = "...";
this.btnBrowseExportPath.Click += new System.EventHandler(this.btnBrowseExportPath_Click);
//
// btnCancel
//
this.btnCancel.Location = new System.Drawing.Point(28, 356);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(140, 40);
this.btnCancel.TabIndex = 9;
this.btnCancel.Text = "Отмена";
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// btnSave
//
this.btnSave.Location = new System.Drawing.Point(364, 356);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(172, 40);
this.btnSave.TabIndex = 10;
this.btnSave.Text = "Сохранить";
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// HF_Settings
//
this.AcceptButton = this.btnSave;
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(560, 420);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnBrowseExportPath);
this.Controls.Add(this.txtInvoiceExportPath);
this.Controls.Add(this.lblInvoiceExportPath);
this.Controls.Add(this.txtApiUrl);
this.Controls.Add(this.lblApiUrl);
this.Controls.Add(this.txtLocationId);
this.Controls.Add(this.lblLocationId);
this.Controls.Add(this.lblHint);
this.Controls.Add(this.panelHeader);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "HF_Settings";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Load += new System.EventHandler(this.HF_Settings_Load);
this.panelHeader.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panelHeader;
private System.Windows.Forms.Label lblTitle;
private System.Windows.Forms.Label lblHint;
private System.Windows.Forms.Label lblLocationId;
private Elfisa.UI.Controls.ModernTextBox txtLocationId;
private System.Windows.Forms.Label lblApiUrl;
private Elfisa.UI.Controls.ModernTextBox txtApiUrl;
private System.Windows.Forms.Label lblInvoiceExportPath;
private Elfisa.UI.Controls.ModernTextBox txtInvoiceExportPath;
private Elfisa.UI.Controls.ModernButton btnBrowseExportPath;
private Elfisa.UI.Controls.ModernButton btnCancel;
private Elfisa.UI.Controls.ModernButton btnSave;
}
}

View File

@ -0,0 +1,95 @@
using System;
using System.Windows.Forms;
using Elfisa.UI.Helpers;
using Elfisa.UI.Theming;
using Электроннаяармация.Classes;
using Электроннаяармация.Properties;
namespace Электроннаяармация.HelpForms
{
public partial class HF_Settings : Form
{
public HF_Settings()
{
InitializeComponent();
Shown += (_, __) => WindowChromeHelper.ApplyTitleBarTheme(this, ThemeManager.Colors);
}
private void HF_Settings_Load(object sender, EventArgs e)
{
UiThemeHelper.ApplyToControlTree(this);
WindowChromeHelper.ApplyDialogChrome(this, panelHeader, lblTitle);
txtLocationId.Text = AppConfig.LocationId;
txtApiUrl.Text = string.IsNullOrWhiteSpace(Settings.Default.ApiBaseUrl)
? AppConfig.DefaultApiBaseUrl
: Settings.Default.ApiBaseUrl;
txtInvoiceExportPath.Text = AppConfig.InvoiceExportPath;
}
private void btnBrowseExportPath_Click(object sender, EventArgs e)
{
using (var dialog = new FolderBrowserDialog())
{
dialog.Description = "Выберите папку для экспорта накладных";
dialog.ShowNewFolderButton = true;
if (!string.IsNullOrWhiteSpace(txtInvoiceExportPath.Text) &&
System.IO.Directory.Exists(txtInvoiceExportPath.Text.Trim()))
{
dialog.SelectedPath = txtInvoiceExportPath.Text.Trim();
}
if (dialog.ShowDialog(this) == DialogResult.OK)
{
txtInvoiceExportPath.Text = dialog.SelectedPath;
}
}
}
private void btnSave_Click(object sender, EventArgs e)
{
var locationId = (txtLocationId.Text ?? string.Empty).Trim();
var apiUrl = AppConfig.NormalizeApiBaseUrl(txtApiUrl.Text.Trim());
var invoiceExportPath = (txtInvoiceExportPath.Text ?? string.Empty).Trim();
if (string.IsNullOrWhiteSpace(locationId))
{
UiDialogs.ShowError("Укажите Location ID торговой точки.", "Настройки", this);
txtLocationId.Focus();
return;
}
if (string.IsNullOrWhiteSpace(apiUrl))
{
UiDialogs.ShowError("Укажите адрес API сервера.", "Настройки", this);
txtApiUrl.Focus();
return;
}
if (!string.IsNullOrWhiteSpace(invoiceExportPath) &&
!System.IO.Directory.Exists(invoiceExportPath))
{
UiDialogs.ShowError("Указанная папка для накладных не существует.", "Настройки", this);
txtInvoiceExportPath.Focus();
return;
}
AppConfig.SetLocationId(locationId);
Settings.Default.ApiBaseUrl = apiUrl;
AppConfig.SetInvoiceExportPath(invoiceExportPath);
Settings.Default.Save();
AppDebugLog.Info("Settings", $"Настройки сохранены. ApiBaseUrl={apiUrl}, LocationId={locationId}, InvoiceExportPath={invoiceExportPath}");
ToastNotification.ShowSuccess("Настройки сохранены");
DialogResult = DialogResult.OK;
Close();
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}