Diplom_B/PostForm.cs
2021-07-22 07:22:51 +05:00

288 lines
9.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 Diplom_B.DB;
namespace Diplom_B
{
public partial class PostForm : Form
{
public int? returnId = null;
private bool needReturn = false;
private int? dogovorId = null;
private int? izdelieId = null;
private void ClearBoxes()
{
idLabel.Text = "";
zavNumBox.Text = "";
izdelieId = null;
izdNumLabel.Text = "";
dogovorId = null;
dogNumLabel.Text = "";
datePicker.Value = DateTime.Now;
statusBox.Items.Clear();
statusBox.Items.AddRange(WorkDB.GetStatusList());
statusBox.SelectedIndex = 0;
primechanieBox.Text = "";
}
private void UpdateTable(Postavka[] arr, bool reset_cursor = false)
{
var selected = (!reset_cursor && postGridView.SelectedRows.Count > 0) ? postGridView.SelectedRows[0].Index : -1;
{
var r = postGridView.Rows;
while (r.Count > 0)
r.Remove(r[0]);
var c = postGridView.Columns;
while (c.Count > 0)
c.Remove(c[0]);
}
{
var c = postGridView.Columns;
c.Add("Id", "№");
c["Id"].Width = 40;
c.Add("ZavNum", "Зав №");
c["ZavNum"].Width = 80;
c.Add("IzdNum", "Изд. №");
c["IzdNum"].Width = 80;
c.Add("DogNum", "Дог. №");
c["DogNum"].Width = 80;
c.Add("DataPostavki", "Дата пост.");
c["DataPostavki"].Width = 100;
c.Add("Status", "Статус");
c["Status"].Width = 80;
c.Add("Primechanie", "Примечание");
c["Primechanie"].Width = 120;
c["Primechanie"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
}
{
var r = postGridView.Rows;
foreach (var post in arr)
r.Add(new object[] {
post.Id,
post.ZavNum,
post.IzdelieId.HasValue ? WorkDB.GetIzdelie(post.IzdelieId.Value).DecNum : "",
post.DogovorId.HasValue ? WorkDB.GetDogovor(post.DogovorId.Value).DogNum : "",
post.DataPostavki.ToString("yyyy.MM.dd"),
WorkDB.GetStatus(post.StatusId).Stat,
post.Primechanie
});
}
if (postGridView.Rows.Count > 0)
postGridView.Rows[0].Selected = true;
if (selected != -1 && selected < postGridView.Rows.Count)
for (var i = 0; i < postGridView.Rows.Count; i++)
postGridView.Rows[i].Selected = (i == selected);
postGridView_CurrentCellChanged(this, new EventArgs());
}
private Task errDrop;
private void ShowError(string msg = null)
{
errorLabel.Text = string.IsNullOrEmpty(msg) ? "Неизвестная ошибка." : msg;
errorLabel.Visible = true;
errDrop = new Task(() =>
{
var fd = errDrop.Id;
Task.Delay(5000).Wait();
if (errDrop.Id == fd)
if (InvokeRequired) Invoke((Action)(() => { errorLabel.Visible = false; }));
else errorLabel.Visible = false;
});
errDrop.Start();
}
private Task filterDrop;
private void searchBox_TextChanged(object sender, EventArgs e)
{
filterDrop = new Task(() =>
{
var fd = filterDrop.Id;
Task.Delay(1000).Wait();
if (filterDrop.Id == fd)
if (InvokeRequired) Invoke((Action)(() => { UpdateTable(WorkDB.ListPostavka(searchBox.Text)); }));
else UpdateTable(WorkDB.ListPostavka(searchBox.Text));
});
filterDrop.Start();
}
public PostForm(bool needReturn = false)
{
InitializeComponent();
try
{
this.needReturn = needReturn;
UpdateTable(WorkDB.ListPostavka(searchBox.Text));
Init();
}
catch { ShowError(); }
}
private void Init()
{
if (Program.user == null) this.Close();
if (this.needReturn)
{
selectButton.Visible = true;
mainMenuStrip.Visible = false;
}
else
{
mainMenuStrip.Items[0].Enabled = Program.user.Usr.Dog > 0;
mainMenuStrip.Items[1].Enabled = Program.user.Usr.Doc > 0;
mainMenuStrip.Items[2].Enabled = Program.user.Usr.Izv > 0;
mainMenuStrip.Items[3].Enabled = Program.user.Usr.Post > 0;
mainMenuStrip.Items[4].Enabled = Program.user.Usr.Izd > 0;
mainMenuStrip.Items[5].Enabled = Program.user.Usr.Zak > 0;
mainMenuStrip.Items[6].Enabled = Program.user.Usr.Set > 0;
mainMenuStrip.Items[3].Enabled = false;
}
{
deleteButton.Enabled = Program.user.Usr.Post > 2;
createButton.Enabled = Program.user.Usr.Post > 2;
changeButton.Enabled = Program.user.Usr.Post > 1;
selectIzdButton.Enabled = Program.user.Usr.Post > 1;
selectDogButton.Enabled = Program.user.Usr.Post > 1;
}
}
private void postGridView_CurrentCellChanged(object sender, EventArgs e)
{
ClearBoxes();
if (postGridView.SelectedRows.Count != 1)
return;
{
var post = WorkDB.GetPostavka((int)postGridView.SelectedRows[0].Cells[0].Value);
if (post == null)
return;
idLabel.Text = post.Id.ToString();
zavNumBox.Text = post.ZavNum;
if(post.IzdelieId.HasValue)
{
izdNumLabel.Text = WorkDB.GetIzdelie(post.IzdelieId.Value).DecNum;
izdelieId = post.IzdelieId;
}
if (post.DogovorId.HasValue)
{
dogNumLabel.Text = WorkDB.GetDogovor(post.DogovorId.Value).DogNum;
dogovorId = post.DogovorId;
}
datePicker.Value = post.DataPostavki;
statusBox.SelectedIndex = statusBox.Items.IndexOf(WorkDB.GetStatus(post.StatusId).Stat);
primechanieBox.Text = post.Primechanie;
}
}
private void createButton_Click(object sender, EventArgs e)
{
if (WorkDB.GetPostavkiZavNum().Contains(zavNumBox.Text)) { ShowError("Зав № не уникален."); return; }
if (statusBox.SelectedIndex < 0) { ShowError("Не выбран статус."); return; }
try
{
var r = new Postavka()
{
ZavNum = zavNumBox.Text,
IzdelieId = izdelieId,
DogovorId = dogovorId,
DataPostavki = datePicker.Value,
StatusId = WorkDB.GetIdStatus((string)statusBox.SelectedItem).Value,
Primechanie = primechanieBox.Text
};
WorkDB.AddPostavka(r);
UpdateTable(WorkDB.ListPostavka(searchBox.Text));
}
catch { ShowError(); }
}
private void clearButton_Click(object sender, EventArgs e)
{
ClearBoxes();
}
private void resetSearchButton_Click(object sender, EventArgs e)
{
searchBox.Text = "";
filterDrop = new Task(() => { return; });
UpdateTable(WorkDB.ListPostavka(searchBox.Text));
}
private void changeButton_Click(object sender, EventArgs e)
{
if (!int.TryParse(idLabel.Text, out int idRes)) { ShowError("Поставка не выбрана."); return; }
var post = WorkDB.GetPostavka(idRes);
if (post == null) { ShowError("Нет поставки в БД."); return; }
if (post.ZavNum != zavNumBox.Text && WorkDB.GetPostavkiZavNum().Contains(zavNumBox.Text)) { ShowError("Зав № не уникален."); return; }
if (statusBox.SelectedIndex < 0) { ShowError("Не выбран статус."); return; }
try
{
post.ZavNum = zavNumBox.Text;
post.IzdelieId = izdelieId;
post.DogovorId = dogovorId;
post.DataPostavki = datePicker.Value;
post.StatusId = WorkDB.GetIdStatus((string)statusBox.SelectedItem).Value;
post.Primechanie = primechanieBox.Text;
WorkDB.ChangePostavka(post);
}
catch { ShowError(); }
UpdateTable(WorkDB.ListPostavka(searchBox.Text));
}
private void deleteButton_Click(object sender, EventArgs e)
{
if (!int.TryParse(idLabel.Text, out int idRes)) { ShowError("Поставка не выбрана."); return; }
var post = WorkDB.GetPostavka(idRes);
if (post == null) { ShowError("Поставки не существует."); return; }
try
{
WorkDB.DeletePostavka(post);
}
catch { ShowError(); }
UpdateTable(WorkDB.ListPostavka(searchBox.Text));
}
private void selectButton_Click(object sender, EventArgs e)
{
if (int.TryParse(idLabel.Text, out int idRes))
returnId = idRes;
this.Close();
}
private void MenuItem_Click(object sender, EventArgs e)
{
object form = null;
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[0]) { form = new DogForm(); }
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[1]) { form = new DocForm(); }
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[2]) { form = new IzvForm(); }
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[3]) { form = new PostForm(); }
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[4]) { form = new IzdForm(); }
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[5]) { form = new ZakForm(); }
if ((ToolStripMenuItem)sender == mainMenuStrip.Items[6]) { form = new SetForm(); }
if (form != null)
{
this.Hide();
((Form)form).Closed += (s, args) => this.Close();
((Form)form).Show();
}
}
private void selectIzdButton_Click(object sender, EventArgs e)
{
var form = new IzdForm(true);
form.ShowDialog();
izdelieId = form.returnId;
if (izdelieId.HasValue)
izdNumLabel.Text = WorkDB.GetIzdelie(izdelieId.Value).DecNum;
else
izdNumLabel.Text = "";
}
private void selectDogButton_Click(object sender, EventArgs e)
{
var form = new DogForm(true);
form.ShowDialog();
dogovorId = form.returnId;
if (dogovorId.HasValue)
dogNumLabel.Text = WorkDB.GetDogovor(dogovorId.Value).DogNum;
else
dogNumLabel.Text = "";
}
}
}