Use toolbar-themed background fill, lighter shadow, and remove invalid LinearGradientBrush.WrapMode that caused OnPaint failures. Co-authored-by: Cursor <cursoragent@cursor.com>
1474 lines
62 KiB
C#
1474 lines
62 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using System.Data.SQLite;
|
||
using System.Data.OleDb;
|
||
using System.Data.Common;
|
||
using Электронная_Фармация.Classes;
|
||
using Электронная_Фармация.HelpForms;
|
||
|
||
namespace Электронная_Фармация.UserControls
|
||
{
|
||
public partial class UCPriceList : UserControl
|
||
{
|
||
public UCPriceList(string workWithConsignee)
|
||
{
|
||
InitializeComponent();
|
||
_WorkWithConsignee = workWithConsignee;
|
||
}
|
||
|
||
public string ConsigneeName => txtConsignee?.Text ?? string.Empty;
|
||
|
||
SQLiteDataAdapter daPriceList;
|
||
DataSet dsPriceList;
|
||
BindingSource bsPriceList = new BindingSource();
|
||
DataAdapter daPriceListMain;
|
||
DataTable tablePriceList;
|
||
string _WorkWithConsignee;
|
||
decimal _percentageAsDefault;
|
||
string _selectedSupplierFilter = string.Empty;
|
||
bool _suppressSupplierFilterEvents;
|
||
int _committedSupplierFilterIndex;
|
||
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
public void RefreshFromDatabase()
|
||
{
|
||
loadPriceListV2();
|
||
InitializeSupplierFilter();
|
||
loadTempOrderItems();
|
||
ApplyPriceListFilters();
|
||
}
|
||
|
||
private void UCPriceList_Load(object sender, EventArgs e)
|
||
{
|
||
UiThemeHelper.ApplyToControlTree(this);
|
||
Tag = "chrome-child";
|
||
|
||
btnDeleteGood.Height = 34;
|
||
btnClearSearchInPriceList.Height = 32;
|
||
txtSearchGoodNameInPriceList.Height = 32;
|
||
btnClearSupplierFilter.Height = 32;
|
||
|
||
panel1.SizeChanged += (_, __) => LayoutMarkupRow();
|
||
LayoutMarkupRow();
|
||
|
||
txtConsignee.Enabled = false;
|
||
txtConsignee.Text = _WorkWithConsignee;
|
||
//loadConsignees();
|
||
//loadPriceList(string.Empty);
|
||
loadPriceListV2();
|
||
InitializeSupplierFilter();
|
||
loadTempOrderItems();
|
||
loadInfoAboutDefaultMarkup();
|
||
txtSearchGoodNameInPriceList.Focus();
|
||
}
|
||
|
||
private void LayoutMarkupRow()
|
||
{
|
||
// Keep markup row readable at different DPI/window sizes.
|
||
try
|
||
{
|
||
var paddingLeft = 8;
|
||
var y = 30;
|
||
var gap = 8;
|
||
|
||
label4.Location = new Point(paddingLeft, y + 2);
|
||
|
||
numericPercent.Location = new Point(label4.Right + 6, y);
|
||
numericPercent.Width = 56;
|
||
|
||
checkUsePercentageAsDefault.AutoSize = true;
|
||
checkUsePercentageAsDefault.Location = new Point(
|
||
Math.Max(numericPercent.Right + gap, panel1.ClientSize.Width - checkUsePercentageAsDefault.PreferredSize.Width - 10),
|
||
y + 2);
|
||
|
||
lblPriceForGood.AutoSize = false;
|
||
lblPriceForGood.AutoEllipsis = true;
|
||
lblPriceForGood.Location = new Point(numericPercent.Right + gap, y + 2);
|
||
lblPriceForGood.Height = 22;
|
||
lblPriceForGood.Width = Math.Max(90, checkUsePercentageAsDefault.Left - lblPriceForGood.Left - gap);
|
||
}
|
||
catch
|
||
{
|
||
// best-effort layout; ignore
|
||
}
|
||
}
|
||
|
||
private void InitializeSupplierFilter()
|
||
{
|
||
try
|
||
{
|
||
_suppressSupplierFilterEvents = true;
|
||
comboSupplierFilter.BeginUpdate();
|
||
comboSupplierFilter.Items.Clear();
|
||
comboSupplierFilter.Items.Add("Все поставщики");
|
||
|
||
var suppliers = new List<string>();
|
||
using (var con = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
con.Open();
|
||
using (var cmd = new SQLiteCommand("select SupplierName from PriceList where SupplierName is not null and SupplierName <> '' group by SupplierName order by SupplierName asc;", con))
|
||
{
|
||
using (var reader = cmd.ExecuteReader())
|
||
{
|
||
while (reader.Read())
|
||
{
|
||
var value = reader.GetString(0);
|
||
if (!string.IsNullOrWhiteSpace(value))
|
||
{
|
||
suppliers.Add(value);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
foreach (var s in suppliers)
|
||
{
|
||
comboSupplierFilter.Items.Add(s);
|
||
}
|
||
|
||
comboSupplierFilter.SelectedIndex = 0;
|
||
_selectedSupplierFilter = string.Empty;
|
||
_committedSupplierFilterIndex = comboSupplierFilter.SelectedIndex;
|
||
btnClearSupplierFilter.Visible = false;
|
||
}
|
||
finally
|
||
{
|
||
comboSupplierFilter.EndUpdate();
|
||
_suppressSupplierFilterEvents = false;
|
||
}
|
||
}
|
||
|
||
private void ApplyPriceListFilters()
|
||
{
|
||
var parts = new List<string>();
|
||
|
||
if (!string.IsNullOrWhiteSpace(_selectedSupplierFilter))
|
||
{
|
||
var escapedSupplier = _selectedSupplierFilter.Replace("'", "''");
|
||
parts.Add($"[Поставщик] = '{escapedSupplier}'");
|
||
}
|
||
|
||
if (!string.IsNullOrWhiteSpace(GoodsFilter))
|
||
{
|
||
var escaped = GoodsFilter.Replace("'", "''");
|
||
parts.Add($"[Наименование] like '%{escaped}%'");
|
||
}
|
||
|
||
bsPriceList.Filter = parts.Count == 0 ? null : string.Join(" AND ", parts);
|
||
}
|
||
|
||
private void comboSupplierFilter_SelectionChangeCommitted(object sender, EventArgs e)
|
||
{
|
||
// Defer until the dropdown has fully closed.
|
||
BeginInvoke(new Action(ApplySupplierFilterFromCombo));
|
||
}
|
||
|
||
private void ApplySupplierFilterFromCombo()
|
||
{
|
||
if (_suppressSupplierFilterEvents)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (comboSupplierFilter.SelectedIndex == _committedSupplierFilterIndex)
|
||
{
|
||
return;
|
||
}
|
||
|
||
_committedSupplierFilterIndex = comboSupplierFilter.SelectedIndex;
|
||
|
||
var selected = comboSupplierFilter.SelectedItem as string;
|
||
if (string.IsNullOrWhiteSpace(selected) || selected == "Все поставщики")
|
||
{
|
||
_selectedSupplierFilter = string.Empty;
|
||
btnClearSupplierFilter.Visible = false;
|
||
}
|
||
else
|
||
{
|
||
_selectedSupplierFilter = selected;
|
||
btnClearSupplierFilter.Visible = true;
|
||
}
|
||
|
||
ApplyPriceListFilters();
|
||
}
|
||
|
||
private void btnClearSupplierFilter_Click(object sender, EventArgs e)
|
||
{
|
||
_suppressSupplierFilterEvents = true;
|
||
comboSupplierFilter.SelectedIndex = 0;
|
||
_suppressSupplierFilterEvents = false;
|
||
|
||
_committedSupplierFilterIndex = comboSupplierFilter.SelectedIndex;
|
||
_selectedSupplierFilter = string.Empty;
|
||
btnClearSupplierFilter.Visible = false;
|
||
ApplyPriceListFilters();
|
||
}
|
||
|
||
private DataTable LoadPriceListTable(string supplierName)
|
||
{
|
||
var tablePrice = new DataTable();
|
||
|
||
var q = "select * from PriceList";
|
||
if (!string.IsNullOrWhiteSpace(supplierName))
|
||
{
|
||
q += " where SupplierName = @supplierName";
|
||
}
|
||
|
||
using (var con = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
con.Open();
|
||
using (var cmd = new SQLiteCommand(q, con))
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(supplierName))
|
||
{
|
||
cmd.Parameters.AddWithValue("@supplierName", supplierName);
|
||
}
|
||
|
||
using (var da = new SQLiteDataAdapter(cmd))
|
||
{
|
||
da.Fill(tablePrice);
|
||
}
|
||
}
|
||
}
|
||
|
||
return tablePrice;
|
||
}
|
||
|
||
private void ApplyPriceListTable(DataTable tablePrice)
|
||
{
|
||
// Keep existing logic: just rename columns and re-bind.
|
||
tablePrice.Columns[0].ColumnName = "ИД товара";
|
||
tablePrice.Columns[1].ColumnName = "Код товара";
|
||
tablePrice.Columns[2].ColumnName = "ИД поставщика";
|
||
tablePrice.Columns[3].ColumnName = "Наименование";
|
||
tablePrice.Columns[4].ColumnName = "Поставщик";
|
||
tablePrice.Columns[5].ColumnName = "Цена";
|
||
tablePrice.Columns[6].ColumnName = "Остаток";
|
||
tablePrice.Columns[7].ColumnName = "Срок годности";
|
||
tablePrice.Columns[8].ColumnName = "Описание";
|
||
tablePrice.Columns[9].ColumnName = "Заказ";
|
||
tablePrice.Columns[10].ColumnName = "Сумма";
|
||
tablePrice.Columns[12].ColumnName = "ИДПрайсЛистАйтем";
|
||
|
||
bsPriceList.DataSource = tablePrice;
|
||
dgvPriceList.DataSource = bsPriceList;
|
||
dgvPriceList.AutoGenerateColumns = true;
|
||
dgvPriceList.Font = new Font("Segoe UI", 13, FontStyle.Regular);
|
||
|
||
dgvPriceList.Columns[0].Visible = false;
|
||
dgvPriceList.Columns[1].Visible = false;
|
||
dgvPriceList.Columns[2].Visible = false;
|
||
dgvPriceList.Columns[7].Visible = true;
|
||
dgvPriceList.Columns[8].Visible = false;
|
||
dgvPriceList.Columns[11].Visible = false;
|
||
dgvPriceList.Columns[12].Visible = false;
|
||
|
||
dgvPriceList.Columns[3].Width = 760;
|
||
dgvPriceList.Columns[4].Width = 150;
|
||
dgvPriceList.Columns[5].Width = 120;
|
||
dgvPriceList.Columns[6].Width = 100;
|
||
dgvPriceList.Columns[7].Width = 140;
|
||
dgvPriceList.Columns[9].Width = 100;
|
||
dgvPriceList.Columns[10].Width = 100;
|
||
}
|
||
|
||
|
||
void loadInfoAboutDefaultMarkup()
|
||
{
|
||
decimal percentageMarkupDefault = Convert.ToDecimal(Properties.Settings.Default.IntDefaultPercentMarkup);
|
||
|
||
if (percentageMarkupDefault == 0)
|
||
{
|
||
percentageMarkupDefault = 30;
|
||
}
|
||
|
||
_percentageAsDefault = percentageMarkupDefault;
|
||
numericPercent.Value = Convert.ToDecimal(Properties.Settings.Default.IntDefaultPercentMarkup);
|
||
|
||
}
|
||
|
||
public void loadSupplierTabs(string SupplierName)
|
||
{
|
||
string tabName;
|
||
|
||
if (SupplierName == string.Empty)
|
||
{
|
||
tabName = "Корзина";
|
||
}
|
||
else
|
||
{
|
||
tabName = SupplierName;
|
||
}
|
||
|
||
TabPage pageSupplier = new TabPage($"{tabName}");
|
||
UCOrderItems UCOrderItemsBySuppliers = new UCOrderItems(SupplierName);
|
||
UCOrderItemsBySuppliers.ParentForm = this;
|
||
|
||
pageSupplier.SuspendLayout();
|
||
pageSupplier.ResumeLayout();
|
||
tabOrderItems.TabPages.Add(pageSupplier);
|
||
|
||
|
||
pageSupplier.Controls.Add(UCOrderItemsBySuppliers);
|
||
|
||
UCOrderItemsBySuppliers.Dock = DockStyle.Fill;
|
||
|
||
tabOrderItems.SelectTab(pageSupplier);
|
||
}
|
||
|
||
public void loadTempOrderItems()
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
List<String> SuppliersFromOrder = new List<String>();
|
||
|
||
string qShowMeSuppliersFromOrder = $@"
|
||
select
|
||
[SupplierName]
|
||
from [TempOrderItems]
|
||
group by [SupplierName]
|
||
";
|
||
|
||
tabOrderItems.TabPages.Clear();
|
||
|
||
int tabPagesCount = tabOrderItems.TabCount;
|
||
|
||
loadSupplierTabs(string.Empty);
|
||
|
||
using (SQLiteConnection conSuppliersTempOrderGroup = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
conSuppliersTempOrderGroup.Open();
|
||
SQLiteCommand cmdShowMeSuppliersFromOrder = new SQLiteCommand(qShowMeSuppliersFromOrder, conSuppliersTempOrderGroup);
|
||
SQLiteDataReader dr = cmdShowMeSuppliersFromOrder.ExecuteReader();
|
||
|
||
while (dr.Read())
|
||
{
|
||
loadSupplierTabs(dr.GetString(0));
|
||
}
|
||
}
|
||
catch(Exception ex)
|
||
{
|
||
ToastNotification.ShowError($"Ошибка при создании вкладок: {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
conSuppliersTempOrderGroup.Close();
|
||
}
|
||
}
|
||
dgvPriceList.Focus();
|
||
}
|
||
|
||
|
||
public void loadPriceListV2()
|
||
{
|
||
ApplyPriceListTable(LoadPriceListTable(string.Empty));
|
||
ApplyPriceListFilters();
|
||
}
|
||
|
||
private void loadPriceListV2(string supplierFilter)
|
||
{
|
||
ApplyPriceListTable(LoadPriceListTable(string.Empty));
|
||
_selectedSupplierFilter = supplierFilter ?? string.Empty;
|
||
ApplyPriceListFilters();
|
||
}
|
||
|
||
#region старая загрузка прайсов
|
||
public void loadPriceListV1(string FilterAddon)
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
string qShowMePriceList = $@"
|
||
select
|
||
pl.[GoodCode] as [Код товара],
|
||
pl.[GoodName] as [Наименование],
|
||
pl.[ProducerName] as [Производитель],
|
||
pl.[SupplierName] as [Поставщик],
|
||
pl.[BestBefore] as [Срок годности],
|
||
pl.[JNVLS] as [ЖНВЛП?],
|
||
pl.[AvaibleCount] as [Доступно],
|
||
pl.[PriceSupplierWithNDS] as [Цена],
|
||
pl.[CountIWantBuy] as [Заказано],
|
||
pl.[SumIWantBuy] as [Сумма],
|
||
pl.[Marked] as [Признак маркировки]
|
||
from [PriceList] pl
|
||
where pl.AvaibleCount > 0
|
||
and pl.ConsigneesCode = (select codeConsignees from Consignees where ConsigneesName = '{_WorkWithConsignee}')
|
||
{FilterAddon}
|
||
order by pl.goodname asc
|
||
";
|
||
|
||
SQLiteConnection conPriceList = new SQLiteConnection(connectionStringToLocalDB);
|
||
try
|
||
{
|
||
conPriceList.Open();
|
||
daPriceList = new SQLiteDataAdapter(qShowMePriceList, conPriceList);
|
||
dsPriceList = new DataSet();
|
||
daPriceList.Fill(dsPriceList, "PriceList");
|
||
|
||
|
||
dgvPriceList.DataSource = dsPriceList.Tables["PriceList"];
|
||
|
||
//dgvPriceList.AutoGenerateColumns = true;
|
||
BindingSource bsPriceList = new BindingSource();
|
||
bsPriceList.DataSource = dsPriceList.Tables["PriceList"];
|
||
|
||
|
||
|
||
dgvPriceList.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;
|
||
dgvPriceList.RowHeadersVisible = false;
|
||
|
||
dgvPriceList.Columns[0].ReadOnly = true;
|
||
dgvPriceList.Columns[1].ReadOnly = true;
|
||
dgvPriceList.Columns[2].ReadOnly = true;
|
||
dgvPriceList.Columns[3].ReadOnly = true;
|
||
dgvPriceList.Columns[4].ReadOnly = true;
|
||
dgvPriceList.Columns[5].ReadOnly = true;
|
||
dgvPriceList.Columns[6].ReadOnly = true;
|
||
dgvPriceList.Columns[7].ReadOnly = true;
|
||
dgvPriceList.Columns[8].ReadOnly = true;
|
||
dgvPriceList.Columns[9].ReadOnly = false;
|
||
dgvPriceList.Columns[10].ReadOnly = true;
|
||
|
||
dgvPriceList.Columns[9].DefaultCellStyle.Format = "N0";
|
||
|
||
dgvPriceList.DefaultCellStyle.Font = new Font("Segoe UI", 10, FontStyle.Regular);
|
||
|
||
|
||
//dgvPriceList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
|
||
|
||
dgvPriceList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
|
||
|
||
dgvPriceList.Columns["Код товара"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
|
||
dgvPriceList.Columns["Код товара"].Width = 1;
|
||
|
||
dgvPriceList.Columns["Наименование"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
dgvPriceList.Columns["Производитель"].Width = 200;
|
||
dgvPriceList.Columns["Поставщик"].Width = 130;
|
||
dgvPriceList.Columns["Срок годности"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
//dgvPriceList.Columns["Доступно"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
//dgvPriceList.Columns["Цена"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
//dgvPriceList.Columns["Заказано"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
//dgvPriceList.Columns["Сумма"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
//dgvPriceList.Columns["Признак маркировки"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
|
||
dgvPriceList.Columns["ЖНВЛП?"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ToastNotification.ShowError($"Ошибка загрузки прайс-листа: {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
conPriceList.Close();
|
||
}
|
||
|
||
}
|
||
#endregion
|
||
|
||
|
||
|
||
void AddItemInOrdersItems(string GoodCode, string GoodName, string SupplierName, string ItemConsigner, string BestBefore, string CountItem, string SumItem, string PriceItem)
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
using (SQLiteConnection conTempOrder = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
|
||
|
||
string qInsertDataInTempTableOrderItems = $@"
|
||
insert into [TempOrderItems] values (
|
||
'{GoodCode}',
|
||
'{GoodName}',
|
||
'{SupplierName}',
|
||
'{ItemConsigner}',
|
||
'{CountItem}',
|
||
'{SumItem}',
|
||
'{PriceItem}',
|
||
'{BestBefore}'
|
||
)
|
||
";
|
||
|
||
string qShowMeCountsOfOrderedThatGood = $@"
|
||
select count(GoodCode) from TempOrderItems where
|
||
GoodCode = '{GoodCode}' and
|
||
GoodName = '{GoodName}' and
|
||
SupplierName = '{SupplierName}' and
|
||
ConsigneesName = '{ItemConsigner}' and
|
||
SupplierPrice = '{PriceItem}' and
|
||
BestBefore = '{BestBefore}'
|
||
";
|
||
|
||
string qUpdateOrderedPriceListItems = $@"
|
||
update TempOrderItems
|
||
set OrderedCountItems = '{CountItem}',
|
||
SumOrderedItems = '{SumItem}'
|
||
where
|
||
GoodCode = '{GoodCode}' and
|
||
GoodName = '{GoodName}' and
|
||
SupplierName = '{SupplierName}' and
|
||
ConsigneesName = '{ItemConsigner}' and
|
||
SupplierPrice = '{PriceItem}' and
|
||
BestBefore = '{BestBefore}'
|
||
";
|
||
|
||
try
|
||
{
|
||
conTempOrder.Open();
|
||
int RowCountsOfThatGood = 0;
|
||
SQLiteCommand cmdCheckCountOfOrderedItems = new SQLiteCommand(qShowMeCountsOfOrderedThatGood, conTempOrder);
|
||
RowCountsOfThatGood = Convert.ToInt32(cmdCheckCountOfOrderedItems.ExecuteScalar());
|
||
if (RowCountsOfThatGood > 0)
|
||
{
|
||
SQLiteCommand cmdUpdatePriceListItems = new SQLiteCommand(qUpdateOrderedPriceListItems, conTempOrder);
|
||
cmdUpdatePriceListItems.ExecuteNonQuery();
|
||
}
|
||
else
|
||
{
|
||
SQLiteCommand cmdFillTempOrderItems = new SQLiteCommand(qInsertDataInTempTableOrderItems, conTempOrder);
|
||
cmdFillTempOrderItems.ExecuteNonQuery();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ToastNotification.ShowError($"Ошибка заполнения корзины: {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
conTempOrder.Close();
|
||
}
|
||
loadTempOrderItems();
|
||
}
|
||
}
|
||
|
||
private void btnSendOrder_Click(object sender, EventArgs e)
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
string OrderNumber = $"EP-{DateTime.Now.Millisecond.ToString()}{DateTime.Now.Date.ToString("mmdd")}";
|
||
string OrderDate = DateTime.Now.ToString("yyyy-MM-dd");//DateTime.Now.ToShortDateString();
|
||
|
||
|
||
|
||
using (SQLiteConnection conCreateOrder = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
conCreateOrder.Open();
|
||
|
||
string CountOrderedItems;
|
||
string SumOrderedItems;
|
||
|
||
string qShowMeCountOrderedItems = "select count(GoodCode) from TempOrderItems where OrderedCountItems > 0";
|
||
string qShowMeSumOrderedItems = "select sum(SumOrderedItems) from TempOrderItems where OrderedCountItems > 0";
|
||
|
||
SQLiteCommand cmdShowMeCountOfOrderedItems = new SQLiteCommand(qShowMeCountOrderedItems, conCreateOrder);
|
||
SQLiteCommand cmdShowMeSumOfOrderedItems = new SQLiteCommand(qShowMeSumOrderedItems, conCreateOrder);
|
||
|
||
qShowMeCountOrderedItems = Convert.ToString(cmdShowMeCountOfOrderedItems.ExecuteScalar());
|
||
qShowMeSumOrderedItems = Convert.ToString(cmdShowMeSumOfOrderedItems.ExecuteScalar());
|
||
|
||
string qCreateOrder = $@"
|
||
insert into [Orders] (OrderNumber, OrderDate, OrderedItemsCount, OrderSum, OrderState)
|
||
values
|
||
(
|
||
'{OrderNumber}',
|
||
select strftime('%Y-%m-%d','{OrderDate}'),
|
||
'{qShowMeCountOrderedItems}',
|
||
'{qShowMeSumOrderedItems}',
|
||
'SAVE'
|
||
)
|
||
";
|
||
|
||
|
||
|
||
SQLiteCommand cmdCreateOrder = new SQLiteCommand(qCreateOrder, conCreateOrder);
|
||
cmdCreateOrder.ExecuteNonQuery();
|
||
|
||
foreach (DataGridViewRow row in dgvOrder.Rows)
|
||
{
|
||
string qCreateOrderItems = $@"
|
||
insert into OrderItems (idOrder, GoodCode, GoodName, codeSuppliers, codeConsignees, OrderedCountItems, SupplierPrice, SumOrderedItems, BestBefore, ProducerName, ProducerPrice)
|
||
values
|
||
(
|
||
(select idOrder from Orders where OrderNumber = '{OrderNumber}'),
|
||
'{row.Cells[0].Value.ToString()}',
|
||
'{row.Cells[1].Value.ToString()}',
|
||
(select codeSuppliers from Suppliers where SuppliersName = '{row.Cells[2].Value.ToString()}'),
|
||
(select codeConsignees from Consignees where ConsigneesName = '{row.Cells[3].Value.ToString()}'),
|
||
'{row.Cells[5].Value.ToString()}',
|
||
'{row.Cells[4].Value.ToString()}',
|
||
'{row.Cells[6].Value.ToString()}',
|
||
'{row.Cells[7].Value.ToString()}',
|
||
'{row.Cells[8].Value.ToString()}',
|
||
'{row.Cells[9].Value.ToString()}'
|
||
)
|
||
";
|
||
|
||
SQLiteCommand cmdCreateOrderItems = new SQLiteCommand(qCreateOrderItems, conCreateOrder);
|
||
cmdCreateOrderItems.ExecuteNonQuery();
|
||
}
|
||
EraseOrder();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ToastNotification.ShowError($"Ошибка формирования заказа: {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
conCreateOrder.Close();
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
#region TODO: что-то с заказом, потом доделать под актуальную версию
|
||
// void IWantBuyThisGood()
|
||
// {
|
||
// int selectedRowIndex = dgvPriceList.CurrentRow.Index;
|
||
// //int IWantBuyGood = Convert.ToInt32(dgvPriceList.Rows[selectedRowIndex].Cells[10].Value.ToString());
|
||
// int IWantBuyGood = Convert.ToInt32(dgvPriceList.Rows[selectedRowIndex].Cells[8].Value.ToString());
|
||
|
||
// if (IWantBuyGood <= 0)
|
||
// {
|
||
// ErasePriceListOrderItem();
|
||
// }
|
||
// else if (IWantBuyGood > 0)
|
||
// {
|
||
// double SuppliersPrice = Convert.ToDouble(dgvPriceList.Rows[selectedRowIndex].Cells[7].Value.ToString());
|
||
// double SumGoodsIWantBuy = SuppliersPrice * IWantBuyGood;
|
||
// string sumBuy = SumGoodsIWantBuy.ToString();
|
||
// dgvPriceList.Rows[selectedRowIndex].Cells[9].Value = sumBuy.ToString();
|
||
// //dgvPriceList.Rows[selectedRowIndex].Cells[11].Value = "1";//SumGoodsIWantBuy.ToString();
|
||
// //dgvPriceList.CurrentRow.Cells[11].Value = SumGoodsIWantBuy.ToString();
|
||
|
||
// string qUpdateCountAndSumInPriceListTable = $@"
|
||
//update PriceList set
|
||
//[CountIWantBuy] = '{IWantBuyGood.ToString()}',
|
||
//[SumIWantBuy] = '{sumBuy.ToString()}'
|
||
//where
|
||
//[GoodCode] = '{dgvPriceList.Rows[selectedRowIndex].Cells[0].Value.ToString()}'
|
||
//and [GoodName] = '{dgvPriceList.Rows[selectedRowIndex].Cells[1].Value.ToString()}'
|
||
//and [ProducerName] = '{dgvPriceList.Rows[selectedRowIndex].Cells[2].Value.ToString()}'
|
||
//and [SupplierName] = '{dgvPriceList.Rows[selectedRowIndex].Cells[3].Value.ToString()}'
|
||
//and [ConsigneesCode] = (select codeConsignees from Consignees where ConsigneesName = '{_WorkWithConsignee}')
|
||
//";
|
||
// string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
// //dgvPriceList.Rows[selectedRowIndex].DefaultCellStyle.Font = new Font("Segoe UI", 10, FontStyle.Bold);
|
||
|
||
// using (SQLiteConnection conUpdateBuyingGoods = new SQLiteConnection(connectionStringToLocalDB))
|
||
// {
|
||
// try
|
||
// {
|
||
// conUpdateBuyingGoods.Open();
|
||
// SQLiteCommand cmdUpdateBuyingGoods = new SQLiteCommand(qUpdateCountAndSumInPriceListTable, conUpdateBuyingGoods);
|
||
// cmdUpdateBuyingGoods.ExecuteNonQuery();
|
||
// }
|
||
// catch (Exception ex)
|
||
// {
|
||
// MessageBox.Show($"Возникла ошибка при обновлении данных о закупке товаров. Текст ошибки:\n{ex.ToString()}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
// }
|
||
// finally
|
||
// {
|
||
// conUpdateBuyingGoods.Close();
|
||
// }
|
||
// }
|
||
|
||
|
||
|
||
// string ItemConsigner = txtConsignee.Text;
|
||
// //if (ItemConsigner == "" | ItemConsigner == "Грузополучатель")
|
||
// //{
|
||
// // MessageBox.Show("Пожалуйста, укажите грузополучателя.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
||
// //}
|
||
// //else
|
||
// //{
|
||
// string GoodCode = dgvPriceList.Rows[selectedRowIndex].Cells[0].Value.ToString();
|
||
// string GoodName = dgvPriceList.Rows[selectedRowIndex].Cells[1].Value.ToString();
|
||
// string SupplierName = dgvPriceList.Rows[selectedRowIndex].Cells[3].Value.ToString();
|
||
// string BestBefore = dgvPriceList.Rows[selectedRowIndex].Cells[4].Value.ToString();
|
||
// string CountItem = dgvPriceList.Rows[selectedRowIndex].Cells[8].Value.ToString();
|
||
// string SumItem = dgvPriceList.Rows[selectedRowIndex].Cells[9].Value.ToString();
|
||
// string PriceItem = dgvPriceList.Rows[selectedRowIndex].Cells[7].Value.ToString();
|
||
|
||
// AddItemInOrdersItems(GoodCode, GoodName, SupplierName, ItemConsigner, BestBefore, CountItem, SumItem, PriceItem);
|
||
// //}
|
||
|
||
// }
|
||
|
||
// }
|
||
#endregion
|
||
|
||
private void dgvPriceList_CellEndEdit(object sender, DataGridViewCellEventArgs e)
|
||
{
|
||
//IWantBuyThisGood();
|
||
|
||
//int RowIndex = dgvPriceList.SelectedRows[0].Index;
|
||
//if (dgvPriceList.Rows[RowIndex].Cells[4].Value != string.Empty)
|
||
//{
|
||
|
||
// Font customFont = new Font("Segoe UI", 13, FontStyle.Bold);
|
||
|
||
// dgvPriceList.Rows[RowIndex].DefaultCellStyle.Font = customFont;
|
||
//}
|
||
|
||
}
|
||
|
||
|
||
private void btnClearSearchInPriceList_Click(object sender, EventArgs e)
|
||
{
|
||
txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
GoodsFilter = string.Empty;
|
||
ApplyPriceListFilters();
|
||
//loadPriceList(string.Empty);
|
||
}
|
||
|
||
|
||
private void btnEraseOrder_Click(object sender, EventArgs e)
|
||
{
|
||
//DialogResult drAreYouSeriesAboutEraseOrder = MessageBox.Show("Вы уверены, что хотите очистить корзину?", "Сообщение", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||
|
||
//if (drAreYouSeriesAboutEraseOrder == DialogResult.Yes)
|
||
//{
|
||
// EraseOrder();
|
||
//}
|
||
|
||
}
|
||
|
||
void EraseOrder()
|
||
{
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
|
||
string qUpdatePriceListBuyingItems = $@"
|
||
update PriceList set
|
||
[CountIWantBuy] = null,
|
||
[SumIWantBuy] = null
|
||
from (select GoodCode, GoodName, SupplierName, SupplierPrice from TempOrderItems) as tempOrder
|
||
where
|
||
tempOrder.GoodCode = PriceList.GoodCode
|
||
and tempOrder.GoodName = PriceList.GoodName
|
||
";
|
||
string qEraseOrder = "delete from TempOrderItems";
|
||
|
||
using (SQLiteConnection conEraseOrder = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
conEraseOrder.Open();
|
||
SQLiteCommand cmdUpdateBuyingItems = new SQLiteCommand(qUpdatePriceListBuyingItems, conEraseOrder);
|
||
SQLiteCommand cmdEraseOrder = new SQLiteCommand(qEraseOrder, conEraseOrder);
|
||
cmdUpdateBuyingItems.ExecuteNonQuery();
|
||
cmdEraseOrder.ExecuteNonQuery();
|
||
loadTempOrderItems();
|
||
//loadPriceList(string.Empty);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ToastNotification.ShowError($"Ошибка очистки корзины: {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
conEraseOrder.Close();
|
||
}
|
||
}
|
||
}
|
||
|
||
string SumIWantBuy = string.Empty;
|
||
int lastSelectedRowIndex;
|
||
string GoodsFilter = string.Empty;
|
||
string stringIWantBuy = string.Empty;
|
||
|
||
|
||
private void dgvPriceList_KeyPress(object sender, KeyPressEventArgs e)
|
||
{
|
||
int RowIndex = dgvPriceList.SelectedRows[0].Index;
|
||
|
||
string idPriceListItem = dgvPriceList.Rows[RowIndex].Cells[11].Value.ToString();
|
||
|
||
if (timerForResetSearch.Enabled == false)
|
||
{
|
||
deleteGood(RowIndex, idPriceListItem);
|
||
timerForResetSearch.Enabled = true;
|
||
timerForResetSearch.Start();
|
||
}
|
||
|
||
if ((e.KeyChar >= 'A' && e.KeyChar <= 'Z') || (e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'А' && e.KeyChar <= 'Я') || (e.KeyChar >= 'а' && e.KeyChar <= 'я') || (e.KeyChar == (Char)Keys.Subtract))
|
||
{
|
||
if (e.KeyChar == (Char)Keys.Enter)
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
dgvPriceList.ClearSelection();
|
||
GoodsFilter += e.KeyChar.ToString();
|
||
txtSearchGoodNameInPriceList.Text = GoodsFilter;
|
||
|
||
#region поиск без фильтрации (НЕ РАБОТАЕТ)
|
||
//foreach(DataGridViewRow row in dgvPriceList.Rows)
|
||
//{
|
||
// //string cellValue = row.Cells["Наименование"].Value.ToString().ToLower();
|
||
// if (row.Cells[2].Value.ToString().Equals(GoodsFilter))
|
||
// {
|
||
// int indexOfSearchValue = row.Index;
|
||
// dgvPriceList.Rows[indexOfSearchValue].Selected = true;
|
||
// }
|
||
//}
|
||
#endregion
|
||
|
||
#region старый способ поиска с фильтрацией данных
|
||
if (!string.IsNullOrEmpty(GoodsFilter))
|
||
{
|
||
ApplyPriceListFilters();
|
||
if (dgvPriceList.Rows.Count == 0)
|
||
{
|
||
UiDialogs.ShowInfo("Подходящий товар не найден.", "Поиск", FindForm());
|
||
GoodsFilter = string.Empty;
|
||
|
||
txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
ApplyPriceListFilters();
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
}
|
||
else if ((e.KeyChar >= (Char)Keys.D1 && e.KeyChar <= (Char)Keys.D9) ||
|
||
(e.KeyChar >= (Char)Keys.NumPad1 && e.KeyChar <= (Char)Keys.NumPad9) || (e.KeyChar == (Char)Keys.D0 && dgvPriceList.Rows[RowIndex].Cells[10].Value.ToString().Length > 1) || (e.KeyChar == (Char)Keys.NumPad0 && dgvPriceList.Rows[RowIndex].Cells[10].Value.ToString().Length > 1))
|
||
{
|
||
|
||
int QuantityForSale = Convert.ToInt32(dgvPriceList.Rows[RowIndex].Cells[6].Value.ToString());
|
||
|
||
stringIWantBuy = dgvPriceList.Rows[RowIndex].Cells[9].Value.ToString() + e.KeyChar.ToString();
|
||
int IWantBuy = Convert.ToInt32(stringIWantBuy);
|
||
|
||
if (IWantBuy <= QuantityForSale)
|
||
{
|
||
dgvPriceList.Rows[RowIndex].Cells[9].Value = IWantBuy.ToString();
|
||
|
||
decimal PriceForOne = Convert.ToDecimal(dgvPriceList.Rows[RowIndex].Cells[5].Value.ToString());
|
||
decimal sumOrder = IWantBuy * PriceForOne;
|
||
dgvPriceList.Rows[RowIndex].Cells[10].Value = sumOrder.ToString();
|
||
}
|
||
else if (IWantBuy > QuantityForSale)
|
||
{
|
||
DialogResult drIWantBuyAll = UiDialogs.ConfirmYesNoCancel($"Для заказа доступно только {QuantityForSale.ToString()}. Заказать доступное количество?", "Заказ", FindForm());
|
||
|
||
if (drIWantBuyAll == DialogResult.Yes)
|
||
{
|
||
dgvPriceList.Rows[RowIndex].Cells[9].Value = QuantityForSale.ToString();
|
||
|
||
decimal PriceForOne = Convert.ToDecimal(dgvPriceList.Rows[RowIndex].Cells[5].Value.ToString());
|
||
decimal sumOrder = QuantityForSale * PriceForOne;
|
||
dgvPriceList.Rows[RowIndex].Cells[10].Value = sumOrder.ToString();
|
||
}
|
||
}
|
||
}
|
||
else if (e.KeyChar == (Char)Keys.Escape)
|
||
{
|
||
txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
GoodsFilter = string.Empty;
|
||
ApplyPriceListFilters();
|
||
}
|
||
else if (e.KeyChar == (Char)Keys.Back)
|
||
{
|
||
|
||
string countToBuy = dgvPriceList.Rows[RowIndex].Cells[9].Value.ToString();
|
||
if (countToBuy.Length > 1)
|
||
{
|
||
string result = countToBuy.Remove(countToBuy.Length - 1);
|
||
|
||
dgvPriceList.Rows[RowIndex].Cells[9].Value = result;
|
||
|
||
decimal PriceForOne = Convert.ToDecimal(dgvPriceList.Rows[RowIndex].Cells[5].Value.ToString());
|
||
decimal sumOrder = Convert.ToDecimal(result) * PriceForOne;
|
||
dgvPriceList.Rows[RowIndex].Cells[10].Value = sumOrder.ToString();
|
||
}
|
||
}
|
||
else if (e.KeyChar == (Char)Keys.Delete)
|
||
{
|
||
deleteGood(RowIndex, idPriceListItem);
|
||
}
|
||
else if (dgvPriceList.Rows[RowIndex].Cells[9].Value.ToString() == string.Empty && e.KeyChar == (Char)Keys.D0)
|
||
{
|
||
|
||
}
|
||
else if (e.KeyChar == (Char)Keys.Down || e.KeyChar == (Char)Keys.Up)
|
||
{
|
||
timerForResetSearch.Enabled = false;
|
||
timerForResetSearch.Stop();
|
||
|
||
foreach (DataGridViewRow row in dgvPriceList.Rows)
|
||
{
|
||
if (Convert.ToInt32(row.Cells[9].Value) == 0)
|
||
{
|
||
int rowIndex = row.Index;
|
||
deleteGood(rowIndex, idPriceListItem);
|
||
}
|
||
}
|
||
}
|
||
|
||
string summaZakaza = dgvPriceList.Rows[RowIndex].Cells[10].Value.ToString();
|
||
|
||
|
||
if (summaZakaza.Trim().Length > 0)
|
||
{
|
||
string Zakaz = dgvPriceList.Rows[RowIndex].Cells[9].Value.ToString();
|
||
|
||
creatingTempOrder(idPriceListItem, Zakaz, summaZakaza);
|
||
|
||
}
|
||
|
||
#region старое добавление товара в PLI
|
||
//tabOrderItems.
|
||
|
||
//dgvPriceList.EndEdit();
|
||
//bsPriceList.EndEdit();
|
||
|
||
//daPriceListMain.Update(dsPriceList);
|
||
|
||
////dsPriceList.Tables.Clear();
|
||
//dsPriceList.WriteXml("PriceList.xml", XmlWriteMode.DiffGram);
|
||
//dsPriceList.Tables.Add(tablePriceList.Copy());
|
||
|
||
//dsPriceList.Tables["PriceList"].AcceptChanges();
|
||
|
||
//tablePriceList = (dgvPriceList.DataSource as DataTable);
|
||
|
||
|
||
|
||
//daPriceListMain.Update();
|
||
//bsPriceList.DataSource = (dgvPriceList.DataSource as DataTable);
|
||
//daPriceListMain.Update(dsPriceList);
|
||
#endregion
|
||
}
|
||
|
||
void creatingTempOrder(string idPriceListItem, string zakaz, string summaZakaza)
|
||
{
|
||
string qUpdatePriceList = $"update [PriceList] set [Zakaz] = '{zakaz}', [SummaZakaza] = '{summaZakaza}' where [id_PriceList_Item] = '{idPriceListItem}'";
|
||
string qDeleteFromTempOrder = $"delete from [TempOrderItems] where [id_PriceList_Item] = '{idPriceListItem}'";
|
||
string qCreateNewTempOrder = $"insert into TempOrderItems([guid_es],[es_code],[supplier_id],[DrugName],[SupplierName],[Price],[Quantity],[ExpiryPeriod],[Description],[Zakaz],[SummaZakaza],[id_PriceList_Item],[supplier_price_id]) select [guid_es],[es_code],[supplier_id],[DrugName],[SupplierName],[Price],[Quantity],[ExpiryPeriod],[Description],[Zakaz],[SummaZakaza],[id_PriceList_Item],[supplier_price_id] from [PriceList] where [id_PriceList_Item] = '{idPriceListItem}'";
|
||
|
||
using(SQLiteConnection sqlCon = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
sqlCon.Open();
|
||
|
||
SQLiteCommand cmdUpdatePriceList = new SQLiteCommand(qUpdatePriceList, sqlCon);
|
||
SQLiteCommand cmdDeleteFromTempOrder = new SQLiteCommand(qDeleteFromTempOrder, sqlCon);
|
||
SQLiteCommand cmdCreateNewTempOrder = new SQLiteCommand(qCreateNewTempOrder, sqlCon);
|
||
|
||
cmdUpdatePriceList.ExecuteNonQuery();
|
||
cmdDeleteFromTempOrder.ExecuteNonQuery();
|
||
cmdCreateNewTempOrder.ExecuteNonQuery();
|
||
|
||
loadTempOrderItems();
|
||
|
||
}
|
||
catch(Exception ex)
|
||
{
|
||
//MessageBox.Show($"Возникла ошибка при обновлении данных прайс-листов. Текст ошибки:\n{ex.ToString()}", "Обработка прайс-листов", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
finally
|
||
{
|
||
sqlCon.Close();
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void deleteGood(int index, string IdPriceListItem)
|
||
{
|
||
dgvPriceList.Rows[index].Cells[9].Value = string.Empty;
|
||
dgvPriceList.Rows[index].Cells[10].Value = string.Empty;
|
||
|
||
string IdPLI = IdPriceListItem;
|
||
|
||
string qClearPriceList = $"update [PriceList] set [Zakaz] = null, [SummaZakaza] = null where id_PriceList_Item = '{IdPLI}'";
|
||
string qDeleteFromTempOrder = $"delete from [TempOrderItems] where [id_PriceList_Item] = '{IdPLI}'";
|
||
|
||
using(SQLiteConnection sqlCon = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
sqlCon.Open();
|
||
|
||
SQLiteCommand cmdClearPriceListItem = new SQLiteCommand(qClearPriceList, sqlCon);
|
||
SQLiteCommand cmdDeleteFromTempOrder = new SQLiteCommand(qDeleteFromTempOrder, sqlCon);
|
||
|
||
cmdClearPriceListItem.ExecuteNonQuery();
|
||
cmdDeleteFromTempOrder.ExecuteNonQuery();
|
||
|
||
loadTempOrderItems();
|
||
}
|
||
catch(Exception ex)
|
||
{
|
||
//MessageBox.Show($"При обновлении данных прайс-листа возникла ошибка. Текст ошибки:\n{ex.ToString()}", "Обработка прайс-листов", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
finally
|
||
{
|
||
sqlCon.Close();
|
||
}
|
||
}
|
||
}
|
||
|
||
#region TODO: старый метод, не работает
|
||
//private void dgvPriceList_KeyPress(object sender, KeyPressEventArgs e)
|
||
//{
|
||
|
||
// if ((e.KeyChar >= 'A' && e.KeyChar <= 'Z') || (e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'А' && e.KeyChar <= 'Я') || (e.KeyChar >= 'а' && e.KeyChar <= 'я') || (e.KeyChar == (Char)Keys.Subtract))
|
||
// {
|
||
// if (e.KeyChar == (Char)Keys.Enter || e.KeyChar == (Char)Keys.Tab)
|
||
// {
|
||
|
||
// }
|
||
// else
|
||
// {
|
||
// timerForResetSearch.Enabled = false;
|
||
// timerForResetSearch.Stop();
|
||
// txtSearchGoodNameInPriceList.Text += e.KeyChar.ToString();
|
||
|
||
|
||
|
||
// string GoodNameFilter = txtSearchGoodNameInPriceList.Text;
|
||
// //GoodNameFilter = GoodNameFilter.Replace(" ", "%");
|
||
// //GoodNameFilter = GoodNameFilter.Replace(" ", "%");
|
||
// //string filterAddon = $" and pl.[GoodName] LIKE '%{GoodNameFilter.ToLower()}%'";
|
||
// //MessageBox.Show(GoodNameFilter);
|
||
// (dgvPriceList.DataSource as DataTable).DefaultView.RowFilter = $"[Наименование] like '%{GoodNameFilter.ToLower()}%'";
|
||
|
||
// timerForResetSearch.Enabled = true;
|
||
// timerForResetSearch.Start();
|
||
|
||
// if (dgvPriceList.RowCount < 1)
|
||
// {
|
||
// MessageBox.Show($"Подходящий товар не найден.", "Поиск", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
// txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
// //loadPriceList(string.Empty);
|
||
|
||
// (dgvPriceList.DataSource as DataTable).DefaultView.RowFilter = string.Empty;
|
||
// timerForResetSearch.Stop();
|
||
// }
|
||
|
||
|
||
// }
|
||
|
||
// }
|
||
// else if ((e.KeyChar >= (Char)Keys.D0 && e.KeyChar <= (Char)Keys.D9) ||
|
||
// (e.KeyChar >= (Char)Keys.NumPad0 && e.KeyChar <= (Char)Keys.NumPad9))
|
||
// {
|
||
// txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
// int selectedRowIndex = dgvPriceList.SelectedCells[0].RowIndex;
|
||
// if (selectedRowIndex != lastSelectedRowIndex)
|
||
// {
|
||
// SumIWantBuy = string.Empty;
|
||
// }
|
||
// SumIWantBuy += e.KeyChar.ToString();
|
||
// if (SumIWantBuy == "0")
|
||
// {
|
||
// ErasePriceListOrderItem();
|
||
// }
|
||
// else
|
||
// {
|
||
// int AvaibleCountGood = Convert.ToInt32(dgvPriceList.Rows[selectedRowIndex].Cells[6].Value.ToString());
|
||
|
||
|
||
// if (AvaibleCountGood < Convert.ToInt32(SumIWantBuy))
|
||
// {
|
||
// MessageBox.Show("Заказано максимальное количество товара", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
// SumIWantBuy = AvaibleCountGood.ToString();
|
||
// }
|
||
// dgvPriceList.Rows[selectedRowIndex].Cells[8].Value = SumIWantBuy;
|
||
// //IWantBuyThisGood();
|
||
// lastSelectedRowIndex = selectedRowIndex;
|
||
// }
|
||
// }
|
||
// else if (e.KeyChar == (Char)Keys.Back || e.KeyChar == (Char)Keys.Escape)
|
||
// {
|
||
// txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
// (dgvPriceList.DataSource as DataTable).DefaultView.RowFilter = string.Empty;
|
||
// //loadPriceList(string.Empty);
|
||
// }
|
||
// else if (e.KeyChar == (Char)Keys.Delete)
|
||
// {
|
||
// ErasePriceListOrderItem();
|
||
// }
|
||
// else if (e.KeyChar != (Char)Keys.Enter)
|
||
// {
|
||
// txtSearchGoodNameInPriceList.Text += e.KeyChar.ToString();
|
||
|
||
// string GoodNameFilter = txtSearchGoodNameInPriceList.Text;
|
||
// //GoodNameFilter = GoodNameFilter.Replace(" ", "%");
|
||
// //string filterAddon = $" and pl.[GoodName] LIKE '%{GoodNameFilter.ToLower()}%'";
|
||
|
||
// (dgvPriceList.DataSource as DataTable).DefaultView.RowFilter = $"[Наименование] like '%{GoodNameFilter.ToLower()}%'";
|
||
|
||
// if (dgvPriceList.RowCount < 1)
|
||
// {
|
||
// MessageBox.Show($"Подходящий товар не найден.", "Поиск", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||
// txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
// (dgvPriceList.DataSource as DataTable).DefaultView.RowFilter = string.Empty;
|
||
// //loadPriceList(string.Empty);
|
||
// }
|
||
// }
|
||
//}
|
||
#endregion
|
||
|
||
void ErasePriceListOrderItem()
|
||
{
|
||
int rowIndex = dgvPriceList.SelectedCells[0].RowIndex;
|
||
|
||
string goodCode = dgvPriceList.Rows[rowIndex].Cells[0].Value.ToString();
|
||
string goodName = dgvPriceList.Rows[rowIndex].Cells[1].Value.ToString();
|
||
string SupplierName = dgvPriceList.Rows[rowIndex].Cells[3].Value.ToString();
|
||
string PriceGood = dgvPriceList.Rows[rowIndex].Cells[7].Value.ToString();
|
||
string SumOrder = dgvPriceList.Rows[rowIndex].Cells[9].Value.ToString();
|
||
|
||
string qUpdatePriceList = $@"update PriceList set
|
||
[CountIWantBuy] = null,
|
||
[SumIWantBuy] = null
|
||
where [GoodCode] = '{goodCode}'
|
||
and [GoodName] = '{goodName}'
|
||
and [SupplierName] = '{SupplierName}'";
|
||
|
||
|
||
string qDeleteFromTempOrder = $@"delete from TempOrderItems
|
||
where [GoodCode] = '{goodCode}'
|
||
and [GoodName] = '{goodName}'
|
||
and [SupplierName] = '{SupplierName}'
|
||
and [SupplierPrice] = '{PriceGood}'
|
||
and SumOrderedItems = '{SumOrder}'";
|
||
|
||
string connectionStringToLocalDB = AppConfig.SqliteConnectionString;
|
||
using (SQLiteConnection conEraceOrderOfSelectedGood = new SQLiteConnection(connectionStringToLocalDB))
|
||
{
|
||
try
|
||
{
|
||
conEraceOrderOfSelectedGood.Open();
|
||
|
||
SQLiteCommand cmdEraseOrderedGoodFromPriceList = new SQLiteCommand(qUpdatePriceList, conEraceOrderOfSelectedGood);
|
||
SQLiteCommand cmdDeleteOrderedGoodFromTempOrder = new SQLiteCommand(qDeleteFromTempOrder, conEraceOrderOfSelectedGood);
|
||
|
||
cmdEraseOrderedGoodFromPriceList.ExecuteNonQuery();
|
||
cmdDeleteOrderedGoodFromTempOrder.ExecuteNonQuery();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ToastNotification.ShowError($"Ошибка удаления из заказа: {ex.Message}");
|
||
}
|
||
finally
|
||
{
|
||
conEraceOrderOfSelectedGood.Close();
|
||
//loadPriceList(string.Empty);
|
||
loadTempOrderItems();
|
||
}
|
||
}
|
||
}
|
||
|
||
void ShowMePriceWithMarkupPercentForSelectedGood()
|
||
{
|
||
if(dgvPriceList.RowCount > 0)
|
||
{
|
||
lblSelectedGoodName.Text = dgvPriceList.CurrentRow.Cells[3].Value.ToString();
|
||
|
||
|
||
double priceForGood = Convert.ToDouble(dgvPriceList.CurrentRow.Cells[5].Value.ToString());
|
||
double MarkupPercentage = Convert.ToDouble(numericPercent.Value);
|
||
|
||
double priceWithPercentage = priceForGood + (priceForGood / 100 * MarkupPercentage);
|
||
lblPriceForGood.Text = $"= {priceWithPercentage.ToString()} руб";
|
||
}
|
||
}
|
||
|
||
private void dgvPriceList_SelectionChanged(object sender, EventArgs e)
|
||
{
|
||
SumIWantBuy = string.Empty;
|
||
|
||
if (timerForResetSearch.Enabled == true)
|
||
{
|
||
timerForResetSearch.Enabled = false;
|
||
timerForResetSearch.Stop();
|
||
}
|
||
|
||
ShowMePriceWithMarkupPercentForSelectedGood();
|
||
}
|
||
|
||
|
||
|
||
private void btnImport_Click(object sender, EventArgs e)
|
||
{
|
||
#region импорт из FTP
|
||
string fileName = "0027379.dbf";
|
||
string filePath = @"ftp:\\lboefc91:Oop3OoF4@lbo.protek.ru\session\Rostov_na_Donu\TestFTPFile\";
|
||
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], '1' as [ConsigneesCode], '2' 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 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 qShowMeLastDateOfPriceList = $"select PriceListDate from PriceListFromSuppliers where ConsigneesCode = '{dbfConsigneesCode}' and CodeSuppliers = '{dbfSupplierCode}'";
|
||
SQLiteCommand cmdShowMeLastPriceListDate = new SQLiteCommand(qShowMeLastDateOfPriceList, conFillPriceListByNewData);
|
||
|
||
DateTime dateLastPriceListDate = Convert.ToDateTime(cmdShowMeLastPriceListDate.ExecuteScalar().ToString());
|
||
MessageBox.Show($"{dbfPriceListDate} \n{dateLastPriceListDate}");
|
||
|
||
if (Convert.ToDateTime(dbfPriceListDate) > dateLastPriceListDate)
|
||
{
|
||
|
||
}
|
||
|
||
string qInsertDataInLocalDB = $@"insert into PriceList (PriceListDate, GoodCode, GoodName, ProducerName, SupplierName, BestBefore, JNVLS, PriceReestr, AvaibleCount, PriceSupplierWithNDS, NDS , Marked)
|
||
values ('{dbfPriceListDate}','{dbfCode}','{dbfGood}','{dbfProducer}', '3','{dbfBestBefore}','{dbfJNVLS}','{dbfPriceReestr}', '{dbfQuantity}', '{dbfPriceSupplierWithNds}', '{dbfCountry}', '{dbfNDS}', '{dbfPriceProducer}', '{dbfMarked}')
|
||
";
|
||
MessageBox.Show(qInsertDataInLocalDB);
|
||
|
||
SQLiteCommand cmdInsertDataInPriceList = new SQLiteCommand(qInsertDataInLocalDB, conFillPriceListByNewData);
|
||
cmdInsertDataInPriceList.ExecuteNonQuery();
|
||
}
|
||
}
|
||
catch { }
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
|
||
#region старыйИмпорт из локального файла
|
||
//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], '1' as [ConsigneesCode], '2' 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 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 qShowMeLastDateOfPriceList = $"select PriceListDate from PriceListFromSuppliers where ConsigneesCode = '{dbfConsigneesCode}' and CodeSuppliers = '{dbfSupplierCode}'";
|
||
// SQLiteCommand cmdShowMeLastPriceListDate = new SQLiteCommand(qShowMeLastDateOfPriceList, conFillPriceListByNewData);
|
||
|
||
// DateTime dateLastPriceListDate = Convert.ToDateTime(cmdShowMeLastPriceListDate.ExecuteScalar().ToString());
|
||
// MessageBox.Show($"{dbfPriceListDate} \n{dateLastPriceListDate}");
|
||
|
||
// if (Convert.ToDateTime(dbfPriceListDate) > dateLastPriceListDate)
|
||
// {
|
||
|
||
// }
|
||
|
||
// 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();
|
||
// loadPriceList(string.Empty);
|
||
// }
|
||
// }
|
||
//}
|
||
#endregion
|
||
}
|
||
|
||
private void dgvPriceList_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
|
||
{
|
||
if (e.RowIndex == this.dgvPriceList.RowCount - 1) return;
|
||
|
||
}
|
||
|
||
private void txtSearchGoodNameInPriceList_Enter(object sender, EventArgs e)
|
||
{
|
||
dgvPriceList.Focus();
|
||
}
|
||
|
||
private void numericPercent_ValueChanged(object sender, EventArgs e)
|
||
{
|
||
if (numericPercent.Value != _percentageAsDefault)
|
||
{
|
||
checkUsePercentageAsDefault.Checked = false;
|
||
}
|
||
|
||
ShowMePriceWithMarkupPercentForSelectedGood();
|
||
}
|
||
|
||
private void UCPriceList_Paint(object sender, PaintEventArgs e)
|
||
{
|
||
if (comboSupplierFilter.DroppedDown)
|
||
{
|
||
return;
|
||
}
|
||
|
||
dgvPriceList.Focus();
|
||
}
|
||
|
||
private void btnImport_MouseEnter(object sender, EventArgs e)
|
||
{
|
||
//btnImport.Focus();
|
||
}
|
||
|
||
private void btnImport_MouseLeave(object sender, EventArgs e)
|
||
{
|
||
//dgvPriceList.Focus()
|
||
}
|
||
|
||
private void checkUsePercentageAsDefault_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
int newDefaultPercent;
|
||
if (_percentageAsDefault != numericPercent.Value && checkUsePercentageAsDefault.Checked == true)
|
||
{
|
||
newDefaultPercent = Convert.ToInt32(numericPercent.Value);
|
||
Properties.Settings.Default.IntDefaultPercentMarkup = Convert.ToInt32(newDefaultPercent);
|
||
Properties.Settings.Default.Save();
|
||
}
|
||
}
|
||
|
||
private void timerForResetSearch_Tick(object sender, EventArgs e)
|
||
{
|
||
txtSearchGoodNameInPriceList.Text = string.Empty;
|
||
timerForResetSearch.Enabled = false;
|
||
timerForResetSearch.Stop();
|
||
}
|
||
|
||
private void btnDeleteGood_Click(object sender, EventArgs e)
|
||
{
|
||
int RowIndex = dgvPriceList.SelectedRows[0].Index;
|
||
string idPriceListItem = dgvPriceList.Rows[RowIndex].Cells[11].Value.ToString();
|
||
deleteGood(RowIndex, idPriceListItem);
|
||
}
|
||
|
||
|
||
private void btnMoreInfoAboutGood_Click(object sender, EventArgs e)
|
||
{
|
||
if (dgvPriceList.CurrentRow == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var goodName = dgvPriceList.CurrentRow.Cells["Наименование"]?.Value?.ToString()
|
||
?? dgvPriceList.CurrentRow.Cells[2]?.Value?.ToString()
|
||
?? string.Empty;
|
||
var description = dgvPriceList.CurrentRow.Cells["Описание"]?.Value?.ToString()
|
||
?? dgvPriceList.CurrentRow.Cells[8]?.Value?.ToString()
|
||
?? string.Empty;
|
||
|
||
var aboutGood = new HelpForms.HF_AboutGood
|
||
{
|
||
goodName = goodName,
|
||
goodDescription = description
|
||
};
|
||
UiThemeHelper.ApplyToControlTree(aboutGood);
|
||
aboutGood.ShowDialog(FindForm());
|
||
}
|
||
|
||
|
||
|
||
|
||
//private void dgvPriceList_Paint(object sender, PaintEventArgs e)
|
||
//{
|
||
// //foreach (DataGridViewRow row in dgvPriceList.Rows)
|
||
// //{
|
||
|
||
// // if (row.Cells[8].Value.ToString() != "")
|
||
// // {
|
||
|
||
// // row.DefaultCellStyle.Font = new Font("Segoe UI", 10, FontStyle.Bold);
|
||
// // }
|
||
// //}
|
||
|
||
// //dgvPriceList.Focus();
|
||
//}
|
||
}
|
||
}
|