905 lines
42 KiB
C#
905 lines
42 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Data.OleDb;
|
||
using System.Data.SQLite;
|
||
using System.Drawing;
|
||
using System.Drawing.Drawing2D;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Runtime.InteropServices;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using Elfisa.UI.Theming;
|
||
using Электронная_Фармация.Classes;
|
||
using Электронная_Фармация.Properties;
|
||
using Электронная_Фармация.Forms;
|
||
using Электронная_Фармация.HelpForms;
|
||
using Электронная_Фармация.UserControls;
|
||
|
||
namespace Электронная_Фармация
|
||
{
|
||
public partial class ElectroPharmacy : Form
|
||
{
|
||
partial void InitializeModernShell();
|
||
partial void FinalizeModernShell();
|
||
partial void RefreshOpenPriceLists();
|
||
|
||
partial void ShowShellLoading(string message);
|
||
partial void HideShellLoading();
|
||
|
||
public string ConsigneeName { get; private set; } = string.Empty;
|
||
|
||
public ElectroPharmacy()
|
||
{
|
||
InitializeComponent();
|
||
InitializeModernShell();
|
||
}
|
||
|
||
private void tsItemContractors_Click(object sender, EventArgs e)
|
||
{
|
||
var fContractors = new FContractors();
|
||
UiThemeHelper.ApplyToControlTree(fContractors);
|
||
fContractors.ShowDialog();
|
||
}
|
||
|
||
private void tsItemExit_Click(object sender, EventArgs e)
|
||
{
|
||
Application.Exit();
|
||
}
|
||
|
||
private void ElectroPharmacy_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
DialogResult drExitFromApplication = UiDialogs.ConfirmYesNo("Завершить работу программы?", "Предупреждение", this);
|
||
if (drExitFromApplication == DialogResult.Yes)
|
||
{
|
||
e.Cancel = false;
|
||
}
|
||
else
|
||
{
|
||
e.Cancel = true;
|
||
}
|
||
}
|
||
|
||
private void ElectroPharmacy_Load(object sender, EventArgs e)
|
||
{
|
||
FinalizeModernShell();
|
||
|
||
// Принудительное обновление: если на Gitea есть более новый Release — не пускаем в работу.
|
||
// При недоступной сети не блокируем (офлайн-аптека должна открываться).
|
||
try
|
||
{
|
||
var update = UpdateChecker.CheckForUpdate();
|
||
if (update != null && update.UpdateRequired)
|
||
{
|
||
using (var dlg = new HF_UpdateAvailable(update))
|
||
{
|
||
UiThemeHelper.ApplyToControlTree(dlg);
|
||
dlg.ShowDialog(this);
|
||
}
|
||
|
||
// Жёстко завершаем процесс, чтобы updater смог заменить exe.
|
||
Environment.Exit(0);
|
||
return;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
AppDebugLog.Info("App", $"Проверка обновлений пропущена: {ex.Message}");
|
||
}
|
||
|
||
FCheckDatabaseIntegrary fCheckDatabaseIntegrary = new FCheckDatabaseIntegrary();
|
||
UiThemeHelper.ApplyToControlTree(fCheckDatabaseIntegrary);
|
||
fCheckDatabaseIntegrary.ShowDialog();
|
||
|
||
var hasToken = !string.IsNullOrWhiteSpace(Settings.Default.stringToken);
|
||
|
||
// Окно выбора грузополучателя открываем только после авторизации.
|
||
// Если аптек одна — не открываем окно вообще.
|
||
int consigneeCount = 0;
|
||
using (var con = new SQLiteConnection(AppConfig.SqliteConnectionString))
|
||
{
|
||
con.Open();
|
||
using (var cmd = new SQLiteCommand("SELECT COUNT(*) FROM Consignees", con))
|
||
{
|
||
consigneeCount = Convert.ToInt32(cmd.ExecuteScalar());
|
||
}
|
||
}
|
||
|
||
if (hasToken && consigneeCount > 1)
|
||
{
|
||
var consigneeDialog = new HFConsignees { ParentForm = this };
|
||
UiThemeHelper.ApplyToControlTree(consigneeDialog);
|
||
consigneeDialog.ShowDialog();
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(ConsigneeName))
|
||
{
|
||
var defaultName = ConsigneeHelper.GetDefaultConsigneeName();
|
||
if (!string.IsNullOrWhiteSpace(defaultName))
|
||
{
|
||
ConsigneeName = defaultName;
|
||
ConsigneeHelper.SetActiveConsignee(defaultName);
|
||
}
|
||
}
|
||
|
||
if (!HasDocumentTabs())
|
||
{
|
||
loadDefaultPriceList();
|
||
}
|
||
|
||
RefreshCurrentUserStatus();
|
||
}
|
||
|
||
void loadDefaultPriceList()
|
||
{
|
||
var consignee = !string.IsNullOrWhiteSpace(ConsigneeName)
|
||
? ConsigneeName
|
||
: ConsigneeHelper.GetDefaultConsigneeName();
|
||
if (string.IsNullOrWhiteSpace(consignee))
|
||
{
|
||
consignee = "Прайс-Лист";
|
||
}
|
||
else
|
||
{
|
||
ConsigneeName = consignee;
|
||
}
|
||
|
||
var title = consignee == "Прайс-Лист"
|
||
? "Прайс-лист"
|
||
: $"Прайс-лист ({consignee})";
|
||
|
||
// На смене аптеки не должно появляться много вкладок прайса.
|
||
// Поэтому перед открытием закрываем все вкладки с navKey="price".
|
||
ConsigneeHelper.SyncCartToPriceList(consignee);
|
||
foreach (var tab in _documentTabStrip.Tabs.Where(t => t.NavKey == "price").ToList())
|
||
{
|
||
CloseDocumentTab(tab.Id);
|
||
}
|
||
|
||
var ucPriceList = new UCPriceList(consignee);
|
||
OpenDocumentTab(title, "price", ucPriceList, allowDuplicate: false);
|
||
ucPriceList.dgvPriceList.Focus();
|
||
RefreshCurrentUserStatus();
|
||
}
|
||
|
||
#region загрузкаПрайсЛиста_старая версия
|
||
//void loadDefaultPriceList()
|
||
//{
|
||
// string defaultConsignee = string.Empty;
|
||
// string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
// using (SQLiteConnection conShowMeDefaultPriceList = new SQLiteConnection(connectionStringToLocalDB))
|
||
// {
|
||
// string qShowMeDefaultPriceList = "select ConsigneesName as [Грузополучатель] from Consignees where ConsigneesUseAsDefault = '1'";
|
||
|
||
// try
|
||
// {
|
||
// conShowMeDefaultPriceList.Open();
|
||
|
||
// SQLiteCommand cmdShowMeDefaultPriceList = new SQLiteCommand(qShowMeDefaultPriceList, conShowMeDefaultPriceList);
|
||
// defaultConsignee = cmdShowMeDefaultPriceList.ExecuteScalar().ToString();
|
||
|
||
// string tabPageName = $"Прайс-лист ({defaultConsignee})";
|
||
|
||
// TabPage pagePriceList = new TabPage(tabPageName);
|
||
// UCPriceList UCPriceList = new UCPriceList(defaultConsignee);
|
||
|
||
// pagePriceList.SuspendLayout();
|
||
// pagePriceList.ResumeLayout();
|
||
// tabContent.TabPages.Add(pagePriceList);
|
||
|
||
|
||
// pagePriceList.Controls.Add(UCPriceList);
|
||
|
||
// UCPriceList.Dock = DockStyle.Fill;
|
||
|
||
|
||
|
||
// tabContent.SelectTab(pagePriceList);
|
||
|
||
// UCPriceList.dgvPriceList.Focus();
|
||
// }
|
||
// catch(Exception ex)
|
||
// {
|
||
// MessageBox.Show($"Возникла ошибка при загрузке прайс-листа по умолчанию. Текст ошибки:\n{ex.ToString()}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
// }
|
||
// finally
|
||
// {
|
||
// conShowMeDefaultPriceList.Close();
|
||
// }
|
||
// }
|
||
|
||
|
||
//}
|
||
#endregion
|
||
|
||
private void tsConsignee_Click(object sender, EventArgs e)
|
||
{
|
||
var hasToken = !string.IsNullOrWhiteSpace(Settings.Default.stringToken);
|
||
if (!hasToken)
|
||
{
|
||
UiDialogs.ShowInfo("Сначала выполните авторизацию, чтобы выбрать грузополучателя.", "Авторизация", this);
|
||
return;
|
||
}
|
||
|
||
var fConsignees = new FConsignees();
|
||
UiThemeHelper.ApplyToControlTree(fConsignees);
|
||
var dr = fConsignees.ShowDialog(this);
|
||
if (dr == DialogResult.OK &&
|
||
!string.IsNullOrWhiteSpace(fConsignees.SelectedConsigneeNameAfterSave))
|
||
{
|
||
showMePriceList(fConsignees.SelectedConsigneeNameAfterSave);
|
||
}
|
||
}
|
||
|
||
private void tsItemInvoices_Click(object sender, EventArgs e)
|
||
{
|
||
OpenInvoicesTab();
|
||
}
|
||
|
||
private void tsItemPriceList_Click(object sender, EventArgs e)
|
||
{
|
||
loadDefaultPriceList();
|
||
|
||
|
||
//HFConsignees hfConsignees = new HFConsignees();
|
||
//hfConsignees.ParentForm = this;
|
||
//hfConsignees.ShowDialog();
|
||
}
|
||
|
||
|
||
|
||
public void showMePriceList(string consignee)
|
||
{
|
||
ConsigneeName = consignee ?? string.Empty;
|
||
if (!string.IsNullOrWhiteSpace(ConsigneeName))
|
||
{
|
||
ConsigneeHelper.SetActiveConsignee(ConsigneeName);
|
||
}
|
||
|
||
// Перед открытием прайс-листа синхронизируем Zakaz/SummaZakaza с корзиной активной аптеки.
|
||
ConsigneeHelper.SyncCartToPriceList(ConsigneeName);
|
||
|
||
var ucPriceList = new UCPriceList(consignee);
|
||
foreach (var tab in _documentTabStrip.Tabs.Where(t => t.NavKey == "price").ToList())
|
||
{
|
||
CloseDocumentTab(tab.Id);
|
||
}
|
||
|
||
OpenDocumentTab($"Прайс-лист ({consignee})", "price", ucPriceList, allowDuplicate: false);
|
||
ucPriceList.dgvPriceList.Focus();
|
||
RefreshCurrentUserStatus();
|
||
}
|
||
|
||
private void SwitchConsignee()
|
||
{
|
||
var hasToken = !string.IsNullOrWhiteSpace(Settings.Default.stringToken);
|
||
if (!hasToken)
|
||
{
|
||
UiDialogs.ShowInfo("Сначала выполните авторизацию, чтобы сменить грузополучателя.", "Авторизация", this);
|
||
return;
|
||
}
|
||
|
||
var consigneeDialog = new HFConsignees { ParentForm = this };
|
||
UiThemeHelper.ApplyToControlTree(consigneeDialog);
|
||
consigneeDialog.ShowDialog(this);
|
||
RefreshCurrentUserStatus();
|
||
}
|
||
|
||
private void tsDebug_Click(object sender, EventArgs e)
|
||
{
|
||
var fDebug = new FDebug();
|
||
UiThemeHelper.ApplyToControlTree(fDebug);
|
||
fDebug.Show();
|
||
}
|
||
|
||
private void tsItemOrders_Click(object sender, EventArgs e)
|
||
{
|
||
OpenOrdersTab();
|
||
}
|
||
|
||
private void tsExchangeLoad_Click(object sender, EventArgs e)
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
var consigneeSafe = (string.IsNullOrWhiteSpace(ConsigneeName) ? ConsigneeHelper.GetDefaultConsigneeName() : ConsigneeName)
|
||
?.Replace("'", "''");
|
||
string qShowMeCoountDataFromTempOrder = $"select count(*) from TempOrderItems where ConsigneeName = '{consigneeSafe}'";
|
||
int countDataTempOrder = 0;
|
||
|
||
using (SQLiteConnection sqlCon = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
sqlCon.Open();
|
||
SQLiteCommand cmdCountOfDataTempOrder = new SQLiteCommand(qShowMeCoountDataFromTempOrder, sqlCon);
|
||
countDataTempOrder = Convert.ToInt32(cmdCountOfDataTempOrder.ExecuteScalar());
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
UiDialogs.ShowError($"При получении данных из локальных базы данных произошла ошибка. Возможно БД повреждена. Текст ошибки:{ex.ToString()}", "Не удалось получить данные", this);
|
||
}
|
||
finally
|
||
{
|
||
sqlCon.Close();
|
||
}
|
||
}
|
||
|
||
ClearDocumentTabs();
|
||
|
||
HF_DownloadDataFromServer hF_DownloadDataFromServer = new HF_DownloadDataFromServer();
|
||
hF_DownloadDataFromServer.ActiveConsigneeName =
|
||
string.IsNullOrWhiteSpace(ConsigneeName) ? ConsigneeHelper.GetDefaultConsigneeName() : ConsigneeName;
|
||
UiThemeHelper.ApplyToControlTree(hF_DownloadDataFromServer);
|
||
DialogResult downloadResult = DialogResult.Cancel;
|
||
if (countDataTempOrder > 0)
|
||
{
|
||
DialogResult drShowDataDownload = UiDialogs.ConfirmYesNoCancel("В корзине найдены товары. При обновлении прайса она будет очищена.\nПродолжить?", "ТОВАРЫ В КОРЗИНЕ", this);
|
||
if(drShowDataDownload == DialogResult.Yes)
|
||
{
|
||
downloadResult = hF_DownloadDataFromServer.ShowDialog();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
downloadResult = hF_DownloadDataFromServer.ShowDialog();
|
||
}
|
||
|
||
if (downloadResult == DialogResult.OK)
|
||
{
|
||
RefreshOpenPriceLists();
|
||
}
|
||
else if (!HasDocumentTabs())
|
||
{
|
||
loadDefaultPriceList();
|
||
}
|
||
}
|
||
|
||
#region старая кнопка загрузки данных
|
||
/*
|
||
private void tsExchangeLoad_Click(object sender, EventArgs e)
|
||
{
|
||
|
||
string fileName = "0027379.dbf";
|
||
string filePath = @"C:\!ElectroPharmacy\ElectoPharmacyOrder\";
|
||
string connectionToDbf = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={filePath};Extended Properties=dBASE IV;User ID=Admin;Password=;";
|
||
|
||
using (OleDbConnection oleCon = new OleDbConnection(connectionToDbf))
|
||
{
|
||
var sql = $"select '{DateTime.Now.ToShortDateString()}' as [DatePriceList], '2' as [ConsigneesCode], '3' as [SupplierCode], CODE, PRODUCT, PRODUCER, 'Поставщик 2' as [SupplierName], EXP, VTIMPORT, REGCOST, QUANTITY, COST, COUNTRY, NDS, PRODCOST, '0' as [Marked] from {fileName}";
|
||
OleDbCommand cmd = new OleDbCommand(sql, oleCon);
|
||
oleCon.Open();
|
||
OleDbDataAdapter daDbfReader = new OleDbDataAdapter(cmd);
|
||
DataTable tablePriceFromDbf = new DataTable();
|
||
daDbfReader.Fill(tablePriceFromDbf);
|
||
|
||
|
||
string qDbfPriceListDate = $"select '{DateTime.Now.ToString()}' as [DatePriceList] from {fileName}";
|
||
string qDbfConsigneesCode = $"select '2' as [ConsigneesCode] from {fileName}";
|
||
string qDbfSupplierCode = $"select '3' as [CodeSuppliers] from {fileName}";
|
||
|
||
OleDbCommand cmdPriceListDate = new OleDbCommand(qDbfPriceListDate, oleCon);
|
||
OleDbCommand cmdConsigneesCode = new OleDbCommand(qDbfConsigneesCode, oleCon);
|
||
OleDbCommand cmdSupplierCode = new OleDbCommand(qDbfSupplierCode, oleCon);
|
||
|
||
string dbfPriceListDate = cmdPriceListDate.ExecuteScalar().ToString();
|
||
string dbfConsigneesCode = cmdConsigneesCode.ExecuteScalar().ToString();
|
||
string dbfSupplierCode = cmdSupplierCode.ExecuteScalar().ToString();
|
||
|
||
|
||
string dbPriceListDate = string.Empty;
|
||
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
using (SQLiteConnection conShowMePriceListDateFromPriceListSuppliers = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
string qShowMeLastDateOfPriceList = $"select PriceListDate from PriceListFromSuppliers where ConsigneesCode = '{dbfConsigneesCode}' and CodeSuppliers = '{dbfSupplierCode}'";
|
||
|
||
|
||
string qShowMeCountOfPriceListForThisConsigneeFromThisSupplier = $"select Count(PriceListDate) from PriceListFromSuppliers where ConsigneesCode = '{dbfConsigneesCode}' and CodeSuppliers = '{dbfSupplierCode}'";
|
||
try
|
||
{
|
||
conShowMePriceListDateFromPriceListSuppliers.Open();
|
||
|
||
SQLiteCommand cmdShowMeCountPriceListFromThisSupplierForThisConsignee = new SQLiteCommand(qShowMeCountOfPriceListForThisConsigneeFromThisSupplier, conShowMePriceListDateFromPriceListSuppliers);
|
||
|
||
Int32 countPriceLists = Convert.ToInt32(cmdShowMeCountPriceListFromThisSupplierForThisConsignee.ExecuteScalar().ToString());
|
||
|
||
if (countPriceLists != 0)
|
||
{
|
||
SQLiteCommand cmdShowMeLastPriceListDate = new SQLiteCommand(qShowMeLastDateOfPriceList, conShowMePriceListDateFromPriceListSuppliers);
|
||
dbPriceListDate = cmdShowMeLastPriceListDate.ExecuteScalar().ToString();
|
||
}
|
||
else
|
||
{
|
||
string qCreateNewPriceList = $"insert into PriceListFromSuppliers (ConsigneesCode, CodeSuppliers, PriceListDate) values('{dbfConsigneesCode}', '{dbfSupplierCode}', (select strftime('%Y-%m-%d','{Convert.ToDateTime(dbfPriceListDate).ToString("yyyy-MM-dd")}')))";
|
||
SQLiteCommand cmdCreatePriceList = new SQLiteCommand(qCreateNewPriceList, conShowMePriceListDateFromPriceListSuppliers);
|
||
|
||
cmdCreatePriceList.ExecuteNonQuery();
|
||
|
||
|
||
SQLiteCommand cmdShowMeLastPriceListDate = new SQLiteCommand(qShowMeLastDateOfPriceList, conShowMePriceListDateFromPriceListSuppliers);
|
||
dbPriceListDate = cmdShowMeLastPriceListDate.ExecuteScalar().ToString();
|
||
}
|
||
}
|
||
catch(Exception ex)
|
||
{
|
||
MessageBox.Show(ex.ToString());
|
||
}
|
||
finally
|
||
{
|
||
conShowMePriceListDateFromPriceListSuppliers.Close();
|
||
}
|
||
}
|
||
|
||
|
||
|
||
// SQLiteCommand cmdShowMeLastPriceListDate = new SQLiteCommand(qShowMeLastDateOfPriceList, conFillPriceListByNewData);
|
||
|
||
//DateTime dateLastPriceListDate = Convert.ToDateTime(cmdShowMeLastPriceListDate.ExecuteScalar().ToString());
|
||
|
||
|
||
if (Convert.ToDateTime(dbfPriceListDate) > Convert.ToDateTime(dbPriceListDate))
|
||
{
|
||
using (SQLiteConnection conPriceListFromSupplier = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
conPriceListFromSupplier.Open();
|
||
|
||
|
||
string qShowMeIdPriceListFromSupplier = $"select idPriceListSuppliers from PriceListFromSuppliers where ConsigneesCode = '{dbfConsigneesCode}' and CodeSuppliers = '{dbfSupplierCode}'";
|
||
|
||
SQLiteCommand cmdShowMeIdPriceListSupplier = new SQLiteCommand(qShowMeIdPriceListFromSupplier, conPriceListFromSupplier);
|
||
string IdPriceListFromSupplier = cmdShowMeIdPriceListSupplier.ExecuteScalar().ToString();
|
||
|
||
string qUpdatePriceListFromSupplier = $"update PriceListFromSuppliers set PriceListDate = (select strftime('%Y-%m-%d','{Convert.ToDateTime(dbfPriceListDate).ToString("yyyy-MM-dd")}')) where idPriceListSuppliers = '{IdPriceListFromSupplier}'";
|
||
string qDeletePriceListItems = $"delete from PriceList where idPriceListSupplier = '{IdPriceListFromSupplier}'";
|
||
|
||
SQLiteCommand cmdUpdatePriceListFromSuppliers = new SQLiteCommand(qUpdatePriceListFromSupplier, conPriceListFromSupplier);
|
||
SQLiteCommand cmdDeletePriceListItems = new SQLiteCommand(qDeletePriceListItems, conPriceListFromSupplier);
|
||
|
||
cmdUpdatePriceListFromSuppliers.ExecuteNonQuery();
|
||
|
||
|
||
string qShowMeCountOfItemFromPriceList = $"select count(idPriceListSupplier) from PriceList where idPriceListSupplier = '{IdPriceListFromSupplier}'";
|
||
SQLiteCommand cmdShowMeCountItemsFromPriceList = new SQLiteCommand(qShowMeCountOfItemFromPriceList, conPriceListFromSupplier);
|
||
Int32 countItemsFromPriceList = Convert.ToInt32(cmdShowMeCountItemsFromPriceList.ExecuteScalar().ToString());
|
||
|
||
if(countItemsFromPriceList < 1)
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
cmdDeletePriceListItems.ExecuteNonQuery();
|
||
}
|
||
|
||
foreach (DataRow dr in tablePriceFromDbf.Rows)
|
||
{
|
||
//string dbfPriceListDate = dr["DatePriceList"].ToString();
|
||
//string dbfConsigneesCode = dr["ConsigneesCode"].ToString();
|
||
string dbfCode = dr["CODE"].ToString();
|
||
string dbfGood = dr["PRODUCT"].ToString().ToLower();
|
||
string dbfProducer = dr["PRODUCER"].ToString();
|
||
string dbfSupplierName = dr["SupplierName"].ToString();
|
||
string dbfBestBefore = Convert.ToDateTime(dr["EXP"]).ToShortDateString();
|
||
string dbfJNVLS = dr["VTIMPORT"].ToString();
|
||
string dbfPriceReestr = dr["REGCOST"].ToString();
|
||
string dbfQuantity = dr["QUANTITY"].ToString();
|
||
string dbfPriceSupplierWithNds = dr["COST"].ToString();
|
||
string dbfCountry = dr["COUNTRY"].ToString();
|
||
string dbfNDS = dr["NDS"].ToString();
|
||
string dbfPriceProducer = dr["PRODCOST"].ToString();
|
||
string dbfMarked = dr["Marked"].ToString();
|
||
|
||
dbfGood = dbfGood.Replace("'", "");
|
||
dbfProducer = dbfProducer.Replace("'", "");
|
||
//dbfSupplierName = dbfSupplierName.Replace("'", "");
|
||
dbfCountry = dbfCountry.Replace("'", "");
|
||
|
||
|
||
string qInsertDataInLocalDB = $@"insert into PriceList (idPriceListSupplier, ConsigneesCode, GoodCode, GoodName, ProducerName, SupplierName, BestBefore, JNVLS, PriceReestr, AvaibleCount, PriceSupplierWithNDS, NDS , Marked)
|
||
values ('{IdPriceListFromSupplier}', '{dbfConsigneesCode}', '{dbfCode}','{dbfGood}','{dbfProducer}', (select SuppliersName from Suppliers where codeSuppliers = '{dbfSupplierCode}'),'{dbfBestBefore}','{dbfJNVLS}','{dbfPriceReestr}', '{dbfQuantity}', '{dbfPriceSupplierWithNds}', '{dbfNDS}', '{dbfMarked}')
|
||
";
|
||
//MessageBox.Show(qInsertDataInLocalDB);
|
||
|
||
SQLiteCommand cmdInsertDataInPriceList = new SQLiteCommand(qInsertDataInLocalDB, conPriceListFromSupplier);
|
||
cmdInsertDataInPriceList.ExecuteNonQuery();
|
||
}
|
||
MessageBox.Show("Загрузка прайса завершена");
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.ToString());
|
||
}
|
||
finally
|
||
{
|
||
conPriceListFromSupplier.Close();
|
||
}
|
||
}
|
||
|
||
|
||
//string IdPriceListFromSupplier = cmdShowMeIdPriceListSupplier.ExecuteScalar().ToString();
|
||
|
||
//string qUpdatePriceListFromSupplier = $"update PriceListFromSuppliers set PriceListDate = '{dbfPriceListDate}' where idPriceListSuppliers = '{IdPriceListFromSupplier}'";
|
||
//string qDeletePriceListItems = $"delete from PriceList where idPriceListSupplier = '{IdPriceListFromSupplier}'";
|
||
|
||
//SQLiteCommand cmdUpdatePriceListFromSuppliers = new SQLiteCommand(qUpdatePriceListFromSupplier, conFillPriceListByNewData);
|
||
//SQLiteCommand cmdDeletePriceListItems = new SQLiteCommand(qDeletePriceListItems, conFillPriceListByNewData);
|
||
|
||
////cmdUpdatePriceListFromSuppliers.ExecuteNonQuery();
|
||
////cmdDeletePriceListItems.ExecuteNonQuery();
|
||
}
|
||
|
||
//string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
//using (SQLiteConnection conFillPriceListByNewData = new SQLiteConnection(connectionStringToLocalDB))
|
||
//{
|
||
// try
|
||
// {
|
||
// conFillPriceListByNewData.Open();
|
||
|
||
|
||
|
||
// foreach (DataRow dr in tablePriceFromDbf.Rows)
|
||
// {
|
||
// string dbfPriceListDate = dr["DatePriceList"].ToString();
|
||
// string dbfConsigneesCode = dr["ConsigneesCode"].ToString();
|
||
// string dbfCode = dr["CODE"].ToString();
|
||
// string dbfGood = dr["PRODUCT"].ToString().ToLower();
|
||
// string dbfProducer = dr["PRODUCER"].ToString();
|
||
// string dbfSupplierCode = dr["SupplierCode"].ToString();
|
||
// string dbfBestBefore = Convert.ToDateTime(dr["EXP"]).ToShortDateString();
|
||
// string dbfJNVLS = dr["VTIMPORT"].ToString();
|
||
// string dbfPriceReestr = dr["REGCOST"].ToString();
|
||
// string dbfQuantity = dr["QUANTITY"].ToString();
|
||
// string dbfPriceSupplierWithNds = dr["COST"].ToString();
|
||
// string dbfCountry = dr["COUNTRY"].ToString();
|
||
// string dbfNDS = dr["NDS"].ToString();
|
||
// string dbfPriceProducer = dr["PRODCOST"].ToString();
|
||
// string dbfMarked = dr["Marked"].ToString();
|
||
|
||
// dbfGood = dbfGood.Replace("'", "");
|
||
// dbfProducer = dbfProducer.Replace("'", "");
|
||
// //dbfSupplierName = dbfSupplierName.Replace("'", "");
|
||
// dbfCountry = dbfCountry.Replace("'", "");
|
||
|
||
|
||
// string qInsertDataInLocalDB = $@"insert into PriceList (PriceListDate, GoodCode, GoodName, ProducerName, SupplierName, BestBefore, JNVLS, PriceReestr, AvaibleCount, PriceSupplierWithNDS, NDS , Marked)
|
||
// values ('{dbfPriceListDate}','{dbfCode}','{dbfGood}','{dbfProducer}', '{dbfSupplierCode}','{dbfBestBefore}','{dbfJNVLS}','{dbfPriceReestr}', '{dbfQuantity}', '{dbfPriceSupplierWithNds}', '{dbfCountry}', '{dbfNDS}', '{dbfPriceProducer}', '{dbfMarked}')
|
||
// ";
|
||
// //MessageBox.Show(qInsertDataInLocalDB);
|
||
|
||
// SQLiteCommand cmdInsertDataInPriceList = new SQLiteCommand(qInsertDataInLocalDB, conFillPriceListByNewData);
|
||
// cmdInsertDataInPriceList.ExecuteNonQuery();
|
||
// }
|
||
// }
|
||
// catch (Exception ex)
|
||
// {
|
||
// MessageBox.Show(ex.ToString());
|
||
// }
|
||
// finally
|
||
// {
|
||
// conFillPriceListByNewData.Close();
|
||
// }
|
||
//}
|
||
}
|
||
}
|
||
*/
|
||
#endregion
|
||
|
||
private void tsmi_CloseTab_Click(object sender, EventArgs e)
|
||
{
|
||
tabContent.TabPages.Remove(tabContent.SelectedTab);
|
||
}
|
||
|
||
private void закрытьВсеToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
ClearDocumentTabs();
|
||
}
|
||
|
||
private void регистрацияToolStripMenuItem_Click(object sender, EventArgs e)
|
||
{
|
||
var hF_Registration = new HF_Registration();
|
||
UiThemeHelper.ApplyToControlTree(hF_Registration);
|
||
hF_Registration.ShowDialog();
|
||
}
|
||
|
||
private async void tsExchangeDeploy_Click(object sender, EventArgs e)
|
||
{
|
||
DialogResult drUpdateData = UiDialogs.ConfirmYesNoCancel("Будут отправлены все сохранённые заказы. Вы уверены?", "Отправка заказов", this);
|
||
|
||
if (drUpdateData == DialogResult.Yes)
|
||
{
|
||
ToastNotification.ShowCustom("Отправляем данные", Color.DarkOrange, Color.White);
|
||
|
||
var uploadData = new DataSender();
|
||
try
|
||
{
|
||
await uploadData.Main();
|
||
//lblDataSent.Text = "ДАННЫЕ ОТПРАВЛЕНЫ";
|
||
//ToastNotification.ShowSuccess($"Данные отправлены");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
AppDebugLog.Error("Form1", "Не удалось отправить данные (меню Обмен)", ex);
|
||
ToastNotification.ShowError($"Не удалось отправить данные. {ex.Message}");
|
||
//MessageBox.Show(ex.ToString(), "Ошибка отправки данных на сервер", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
//MessageBox.Show($"Не удалось отправить данные на сервер. Текст ошибки:\n{ex.ToString()}", "Ошибка отправки данных на сервер", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
|
||
//HF_UploadDataToServer hF_UploadDataToServer = new HF_UploadDataToServer();
|
||
//hF_UploadDataToServer.Visible = false;
|
||
//hF_UploadDataToServer.ShowDialog();
|
||
}
|
||
}
|
||
|
||
private void tsJournal_DropDownOpened(object sender, EventArgs e)
|
||
{
|
||
tsJournal.ForeColor = System.Drawing.Color.Black;
|
||
}
|
||
|
||
private void tsJournal_DropDownClosed(object sender, EventArgs e)
|
||
{
|
||
tsJournal.ForeColor = System.Drawing.Color.White;
|
||
}
|
||
|
||
private void tsDirectory_DropDownOpened(object sender, EventArgs e)
|
||
{
|
||
tsDirectory.ForeColor = System.Drawing.Color.Black;
|
||
}
|
||
|
||
private void tsDirectory_DropDownClosed(object sender, EventArgs e)
|
||
{
|
||
tsDirectory.ForeColor = System.Drawing.Color.White;
|
||
}
|
||
|
||
private void tsExchange_DropDownClosed(object sender, EventArgs e)
|
||
{
|
||
tsExchange.ForeColor = System.Drawing.Color.White;
|
||
}
|
||
|
||
private void tsExchange_DropDownOpened(object sender, EventArgs e)
|
||
{
|
||
tsExchange.ForeColor = System.Drawing.Color.Black;
|
||
}
|
||
|
||
private void tsHelp_DropDownOpened(object sender, EventArgs e)
|
||
{
|
||
tsHelp.ForeColor = System.Drawing.Color.Black;
|
||
}
|
||
|
||
private void tsHelp_DropDownClosed(object sender, EventArgs e)
|
||
{
|
||
tsHelp.ForeColor = System.Drawing.Color.White;
|
||
}
|
||
|
||
private void roundBtnOrders_Click(object sender, EventArgs e)
|
||
{
|
||
OpenOrdersTab();
|
||
}
|
||
|
||
private void RoundBtnPriceList_Click(object sender, EventArgs e)
|
||
{
|
||
loadDefaultPriceList();
|
||
}
|
||
|
||
private void roundBtnRegister_Click(object sender, EventArgs e)
|
||
{
|
||
var hF_Registration = new HF_Registration();
|
||
UiThemeHelper.ApplyToControlTree(hF_Registration);
|
||
hF_Registration.ShowDialog();
|
||
}
|
||
|
||
private void tsBtnPriceList_Click(object sender, EventArgs e)
|
||
{
|
||
loadDefaultPriceList();
|
||
}
|
||
|
||
private void tsBtnOrders_Click(object sender, EventArgs e)
|
||
{
|
||
OpenOrdersTab();
|
||
}
|
||
|
||
private void tsBtnAuth_Click(object sender, EventArgs e)
|
||
{
|
||
var hF_Registration = new HF_Registration();
|
||
UiThemeHelper.ApplyToControlTree(hF_Registration);
|
||
if (hF_Registration.ShowDialog() == DialogResult.OK)
|
||
{
|
||
// После успешной авторизации сначала выбираем грузополучателя,
|
||
// и только потом (если нужно) запрашиваем Location ID.
|
||
int consigneeCount;
|
||
using (var con = new SQLiteConnection(AppConfig.SqliteConnectionString))
|
||
{
|
||
con.Open();
|
||
using (var cmd = new SQLiteCommand("SELECT COUNT(*) FROM Consignees", con))
|
||
{
|
||
consigneeCount = Convert.ToInt32(cmd.ExecuteScalar());
|
||
}
|
||
}
|
||
|
||
if (consigneeCount <= 1)
|
||
{
|
||
var defaultName = ConsigneeHelper.GetDefaultConsigneeName();
|
||
if (!string.IsNullOrWhiteSpace(defaultName))
|
||
{
|
||
ConsigneeName = defaultName;
|
||
ConsigneeHelper.SetActiveConsignee(defaultName);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var consigneeDialog = new HFConsignees { ParentForm = this };
|
||
UiThemeHelper.ApplyToControlTree(consigneeDialog);
|
||
if (consigneeDialog.ShowDialog(this) != DialogResult.OK)
|
||
{
|
||
// Без выбора грузополучателя дальше не идём.
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(AppConfig.LocationId))
|
||
{
|
||
var consigneeName = ConsigneeName ?? string.Empty;
|
||
var consigneeAddress = string.Empty;
|
||
if (!string.IsNullOrWhiteSpace(consigneeName))
|
||
{
|
||
using (var con = new SQLiteConnection(AppConfig.SqliteConnectionString))
|
||
{
|
||
con.Open();
|
||
using (var cmd = new SQLiteCommand(
|
||
@"SELECT ifnull(ConsigneesAddress, '')
|
||
FROM Consignees
|
||
WHERE ConsigneesName = @name
|
||
LIMIT 1",
|
||
con))
|
||
{
|
||
cmd.Parameters.AddWithValue("@name", consigneeName.Trim());
|
||
consigneeAddress = cmd.ExecuteScalar()?.ToString() ?? string.Empty;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!HF_LocationId.PromptAndSave(this, consigneeName, consigneeAddress))
|
||
{
|
||
ToastNotification.ShowCustom(
|
||
"Location ID не указан. Укажите его перед отправкой заказов.",
|
||
Color.DarkOrange,
|
||
Color.White);
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (!string.IsNullOrWhiteSpace(AppConfig.LocationId))
|
||
{
|
||
ConsigneeHelper.ApplyLocationIdToEmptyConsignees(AppConfig.LocationId);
|
||
}
|
||
|
||
RefreshCurrentUserStatus();
|
||
}
|
||
}
|
||
|
||
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)
|
||
{
|
||
var hasToken = !string.IsNullOrWhiteSpace(Settings.Default.stringToken);
|
||
if (!hasToken)
|
||
{
|
||
UiDialogs.ShowInfo("Сначала выполните авторизацию, чтобы отправить заказы.", "Авторизация", this);
|
||
return;
|
||
}
|
||
|
||
DialogResult drUpdateData = UiDialogs.ConfirmYesNoCancel("Будут отправлены все сохранённые заказы. Вы уверены?", "Отправка заказов", this);
|
||
|
||
if (drUpdateData == DialogResult.Yes)
|
||
{
|
||
var nowUtc = DateTime.UtcNow;
|
||
var lastPriceUpdateUtc = Settings.Default.LastPriceUpdateUtc;
|
||
var lastPriceReminderUtc = Settings.Default.LastPriceReminderUtc;
|
||
|
||
var priceIsStale = lastPriceUpdateUtc == DateTime.MinValue ||
|
||
(nowUtc - lastPriceUpdateUtc) > TimeSpan.FromHours(24);
|
||
var canRemind = lastPriceReminderUtc == DateTime.MinValue ||
|
||
(nowUtc - lastPriceReminderUtc) > TimeSpan.FromHours(24);
|
||
|
||
if (priceIsStale && canRemind)
|
||
{
|
||
// Напоминание не блокирует отправку.
|
||
UiDialogs.ShowInfo(
|
||
"Прайс-лист не обновлялся более 24 часов. Рекомендуем обновить прайс перед отправкой заказов.",
|
||
"Прайс-лист",
|
||
this);
|
||
|
||
Settings.Default.LastPriceReminderUtc = nowUtc;
|
||
Settings.Default.Save();
|
||
}
|
||
|
||
ShowShellLoading("Отправка заказов...");
|
||
ToastNotification.ShowCustom("Отправляем данные", Color.DarkOrange, Color.White);
|
||
|
||
var uploadData = new DataSender();
|
||
try
|
||
{
|
||
await uploadData.Main();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
AppDebugLog.Error("Form1", "Не удалось отправить данные (кнопка ОТПРАВИТЬ)", ex);
|
||
ToastNotification.ShowError($"Не удалось отправить данные. {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
HideShellLoading();
|
||
}
|
||
}
|
||
}
|
||
|
||
private void tsBtnDownloadData_Click(object sender, EventArgs e)
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
var consigneeSafe = (string.IsNullOrWhiteSpace(ConsigneeName) ? ConsigneeHelper.GetDefaultConsigneeName() : ConsigneeName)
|
||
?.Replace("'", "''");
|
||
string qShowMeCoountDataFromTempOrder = $"select count(*) from TempOrderItems where ConsigneeName = '{consigneeSafe}'";
|
||
int countDataTempOrder = 0;
|
||
|
||
using (SQLiteConnection sqlCon = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
sqlCon.Open();
|
||
SQLiteCommand cmdCountOfDataTempOrder = new SQLiteCommand(qShowMeCoountDataFromTempOrder, sqlCon);
|
||
countDataTempOrder = Convert.ToInt32(cmdCountOfDataTempOrder.ExecuteScalar());
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
UiDialogs.ShowError($"При получении данных из локальных базы данных произошла ошибка. Возможно БД повреждена. Текст ошибки:{ex.ToString()}", "Не удалось получить данные", this);
|
||
}
|
||
finally
|
||
{
|
||
sqlCon.Close();
|
||
}
|
||
}
|
||
|
||
ClearDocumentTabs();
|
||
|
||
HF_DownloadDataFromServer hF_DownloadDataFromServer = new HF_DownloadDataFromServer();
|
||
hF_DownloadDataFromServer.ActiveConsigneeName =
|
||
string.IsNullOrWhiteSpace(ConsigneeName) ? ConsigneeHelper.GetDefaultConsigneeName() : ConsigneeName;
|
||
UiThemeHelper.ApplyToControlTree(hF_DownloadDataFromServer);
|
||
DialogResult downloadResult = DialogResult.Cancel;
|
||
if (countDataTempOrder > 0)
|
||
{
|
||
DialogResult drShowDataDownload = UiDialogs.ConfirmYesNoCancel("В корзине найдены товары. При обновлении прайса она будет очищена.\nПродолжить?", "ТОВАРЫ В КОРЗИНЕ", this);
|
||
if (drShowDataDownload == DialogResult.Yes)
|
||
{
|
||
downloadResult = hF_DownloadDataFromServer.ShowDialog();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
downloadResult = hF_DownloadDataFromServer.ShowDialog();
|
||
}
|
||
|
||
if (downloadResult == DialogResult.OK)
|
||
{
|
||
RefreshOpenPriceLists();
|
||
}
|
||
else if (!HasDocumentTabs())
|
||
{
|
||
loadDefaultPriceList();
|
||
}
|
||
}
|
||
}
|
||
}
|