299 lines
7.6 KiB
C#
299 lines
7.6 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 Diplom_O.DataBase;
|
||
|
||
namespace Diplom_O
|
||
{
|
||
public partial class StajForm : Form
|
||
{
|
||
private readonly ColumnConf[] tableStajColumns = {
|
||
new ColumnConf(name: "№"),
|
||
new ColumnConf(name: "Названиe", size: 140, warp: true),
|
||
new ColumnConf(name: "Лет", size: 60),
|
||
new ColumnConf(name: "Месяцев", size: 60),
|
||
new ColumnConf(name: "Дней", size: 60)
|
||
};
|
||
|
||
private Rabotnik rabotnik = null;
|
||
private void linkRabLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||
{
|
||
var form = new RabForm(true);
|
||
form.ShowDialog();
|
||
if (form.isCanceled)
|
||
rabotnik = null;
|
||
else
|
||
rabotnik = form.formResult;
|
||
ResetLinkRabotnik();
|
||
resetStajTable();
|
||
}
|
||
private void ResetLinkRabotnik()
|
||
{
|
||
if (rabotnik == null)
|
||
{
|
||
linkRabLabel.Text = "Выбрать сотрудника...";
|
||
return;
|
||
}
|
||
var chel = FuncDB.ChelGetById(rabotnik.ChelId);
|
||
if (chel == null)
|
||
{
|
||
linkRabLabel.Text = "Выбрать сотрудника...";
|
||
return;
|
||
}
|
||
var res = chel.FName.ToString() + " " +
|
||
chel.SName[0].ToString() + "." +
|
||
((!string.IsNullOrEmpty(chel.TName)) ?
|
||
chel.TName[0].ToString() + "." : "");
|
||
linkRabLabel.Text = res;
|
||
}
|
||
private void resetStajTable()
|
||
{
|
||
(int year, int month, int day) Sum(
|
||
(int year, int month, int day) t1,
|
||
(int year, int month, int day) t2
|
||
)
|
||
{
|
||
var year = t1.year + t2.year;
|
||
var month = t1.month + t2.month;
|
||
var day = t1.day + t2.day;
|
||
|
||
month += day / 30;
|
||
day %= 30;
|
||
year += month / 12;
|
||
month %= 12;
|
||
|
||
return (year, month, day);
|
||
}
|
||
(int year, int month, int day) Sub(
|
||
(int year, int month, int day) t1,
|
||
(int year, int month, int day) t2
|
||
)
|
||
{
|
||
var year = t1.year - t2.year;
|
||
var month = t1.month - t2.month;
|
||
var day = t1.day - t2.day;
|
||
while (day < 0)
|
||
{
|
||
day += 30;
|
||
month--;
|
||
}
|
||
while (month < 0)
|
||
{
|
||
month += 12;
|
||
year--;
|
||
}
|
||
month += day / 30;
|
||
day %= 30;
|
||
year += month / 12;
|
||
month %= 12;
|
||
return (year, month, day);
|
||
}
|
||
|
||
try
|
||
{
|
||
var res = new List<string[]>();
|
||
if (rabotnik == null)
|
||
{
|
||
this.ResetTable(
|
||
stajGridView,
|
||
tableStajColumns,
|
||
res.ToArray()
|
||
);
|
||
return;
|
||
}
|
||
|
||
var count = new Dictionary<int, (int year, int month, int day)>();
|
||
var listRab = FuncDB.RabotnikHistoryByChelId(rabotnik.ChelId);
|
||
foreach (var rab in listRab)
|
||
{
|
||
var size = FuncDB.RabotnikGetTotalTime(rab, dateTimePicker1.Value);
|
||
var staj = FuncDB.RabotnikTypeStajList(rab.Id);
|
||
if (count.ContainsKey(-1))
|
||
count[-1] = Sum(count[-1], size);
|
||
else
|
||
count[-1] = size;
|
||
foreach(var st in staj)
|
||
if (count.ContainsKey(st.TypeStajId))
|
||
count[st.TypeStajId] = Sum(count[st.TypeStajId], size);
|
||
else
|
||
count[st.TypeStajId] = size;
|
||
}
|
||
|
||
var listCorrStaj = FuncDB.CorrStajList(rabotnik.ChelId);
|
||
foreach (var corr in listCorrStaj)
|
||
{
|
||
var ts = FuncDB.TypeStajGetById(corr.TypeStajId);
|
||
if (ts != null && ts.Name.CompareTo("Общий") == 0)
|
||
corr.TypeStajId = -1;
|
||
var size = (corr.Year, corr.Month, corr.Day);
|
||
if (!count.ContainsKey(corr.TypeStajId))
|
||
count[corr.TypeStajId] = (0, 0, 0);
|
||
if (corr.AddFlag)
|
||
count[corr.TypeStajId] = Sum(count[corr.TypeStajId], size);
|
||
else
|
||
count[corr.TypeStajId] = Sub(count[corr.TypeStajId], size);
|
||
}
|
||
|
||
foreach (var r in count)
|
||
{
|
||
if (r.Value.year < 0 || r.Value.year + r.Value.month + r.Value.day == 0)
|
||
continue;
|
||
var sr = new List<string>();
|
||
sr.Add(r.Key.ToString());
|
||
if (r.Key == -1)
|
||
sr.Add("Общий");
|
||
else
|
||
sr.Add(FuncDB.TypeStajGetById(r.Key).Name);
|
||
sr.Add(r.Value.year.ToString());
|
||
sr.Add(r.Value.month.ToString());
|
||
sr.Add(r.Value.day.ToString());
|
||
res.Add(sr.ToArray());
|
||
}
|
||
|
||
this.ResetTable(
|
||
stajGridView,
|
||
tableStajColumns,
|
||
res.ToArray()
|
||
);
|
||
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
this.ShowError(errorLabel, e.Message);
|
||
}
|
||
}
|
||
|
||
public StajForm()
|
||
{
|
||
InitializeComponent();
|
||
this.correctUpperMenu(menuStrip, 3);
|
||
dateTimePicker1.Value = DateTime.Now;
|
||
ResetLinkRabotnik();
|
||
resetTypeStajComboBox();
|
||
|
||
linkRabLabel.Enabled = false;
|
||
addStajButton.Enabled = false;
|
||
var user = this.GetUser();
|
||
if (user == null)
|
||
return;
|
||
linkRabLabel.Enabled =
|
||
FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 3, 0) != null;
|
||
addStajButton.Enabled =
|
||
FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 3, 2) != null ||
|
||
FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, 3, 3) != null;
|
||
|
||
}
|
||
|
||
private void resetTypeStajComboBox()
|
||
{
|
||
try
|
||
{
|
||
var list = new List<string>();
|
||
list.Add("Общий");
|
||
list.AddRange(FuncDB.TypeStajListString());
|
||
comboBox1.Items.Clear();
|
||
comboBox1.Items.AddRange(list.ToArray());
|
||
comboBox1.SelectedIndex = -1;
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
this.ShowError(errorLabel, e.Message);
|
||
}
|
||
}
|
||
|
||
private void upperMenuClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
this.upperMenuClicked((MenuStrip)sender);
|
||
if (this.GetNextForm() != -1)
|
||
Close();
|
||
}
|
||
|
||
private void typeStajChanged(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
addRadioButton.Checked = ! (delRadioButton.Checked = false);
|
||
yearTB.Text = monthTB.Text = dayTB.Text = "";
|
||
if (rabotnik == null)
|
||
return;
|
||
var staj = FuncDB.TypeStajGetByName(comboBox1.Text);
|
||
if (staj == null)
|
||
return;
|
||
var corrStaj = FuncDB.CorrStaj(rabotnik.ChelId, staj.Name);
|
||
if (corrStaj == null)
|
||
return;
|
||
yearTB.Text = corrStaj.Year.ToString();
|
||
monthTB.Text = corrStaj.Month.ToString();
|
||
dayTB.Text = corrStaj.Day.ToString();
|
||
delRadioButton.Checked = !(addRadioButton.Checked = corrStaj.AddFlag);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
this.ShowError(errorLabel, ex.Message);
|
||
}
|
||
}
|
||
private void addStajButton_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (rabotnik == null)
|
||
throw new Exception("Не выбран сотрудник.");
|
||
if (!int.TryParse(yearTB.Text, out int year) || year < 0)
|
||
throw new Exception("Не верно указан год.");
|
||
if (!int.TryParse(monthTB.Text, out int month) || month < 0)
|
||
throw new Exception("Не верно указан месяц.");
|
||
if (!int.TryParse(dayTB.Text, out int day) || day < 0)
|
||
throw new Exception("Не верно указан день.");
|
||
|
||
var typeStaj = FuncDB.TypeStajGetByName(comboBox1.Text);
|
||
if(typeStaj == null)
|
||
{
|
||
FuncDB.TypeStajAdd(new TypeStaj() { Name = comboBox1.Text });
|
||
typeStaj = FuncDB.TypeStajGetByName(comboBox1.Text);
|
||
}
|
||
|
||
var corrStaj = FuncDB.CorrStaj(rabotnik.ChelId, typeStaj.Name);
|
||
if (corrStaj == null)
|
||
{
|
||
FuncDB.CorrStajAdd(new CorrStaj()
|
||
{
|
||
Year = year,
|
||
Month = month,
|
||
Day = day,
|
||
ChelId = rabotnik.ChelId,
|
||
TypeStajId = typeStaj.Id,
|
||
AddFlag = addRadioButton.Checked
|
||
});
|
||
}
|
||
else
|
||
{
|
||
corrStaj.ChelId = rabotnik.ChelId;
|
||
corrStaj.TypeStajId = typeStaj.Id;
|
||
corrStaj.AddFlag = addRadioButton.Checked;
|
||
corrStaj.Year = year;
|
||
corrStaj.Month = month;
|
||
corrStaj.Day = day;
|
||
FuncDB.CorrStajChange(corrStaj);
|
||
}
|
||
resetStajTable();
|
||
resetTypeStajComboBox();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
this.ShowError(errorLabel, ex.Message);
|
||
}
|
||
}
|
||
|
||
private void button1_Click(object sender, EventArgs e)
|
||
{
|
||
resetStajTable();
|
||
}
|
||
}
|
||
}
|