Programm_Wirl/AA-Forms/FormArtikelVW.cs

263 lines
8.5 KiB
C#

using BrightIdeasSoftware;
using DatenDB;
using Deckungsbeitrag.AA_Klassen;
using Deckungsbeitrag.UserControls;
//using HarfBuzzSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Deckungsbeitrag
{
public partial class FormArtikelVW : Form
{
private Benutzer user;
private List<Artikel> artikelList;
private List<ArtikelNachwaesche> artNWList;
public FormArtikelVW()
{
InitializeComponent();
}
public FormArtikelVW(Benutzer benutzer) : this()
{
this.user = benutzer;
}
private void FormArtikelVW_Load(object sender, EventArgs e)
{
List<Artikel> artlist = Artikel.GetArtikelList("Nachwaesche");
this.comboBoxArtikel.SelectedIndexChanged -= comboBoxArtikel_SelectedIndexChanged;
this.comboBoxArtikel.DataSource = artlist;
this.comboBoxArtikel.DisplayMember = "Bezeichnung";
this.comboBoxArtikel.SelectedIndex = -1;
this.comboBoxArtikel.SelectedIndexChanged += comboBoxArtikel_SelectedIndexChanged;
OLV_Load_with_Artikel();
}
#region ObjectListView
private void OLV_GroupCount()
{
foreach (OLVGroup group in this.objectListViewArtikel.OLVGroups)
{
int sum = 0;
foreach (OLVListItem item in group.Items)
{
Artikel art = (Artikel)item.RowObject;
sum += art.Nachwaesche;
}
group.Header = $"{group.Header} (Anzahl: {sum.ToString()})";
}
}
private void OLV_Load_with_Artikel()
{
//foreach (OLVColumn col in this.objectListViewArtikel.Columns) col.IsEditable = false;
if (this.user.Rolle == BenutzerRolle.Expedit || this.user.Rolle == BenutzerRolle.Frottee || this.user.Rolle == BenutzerRolle.Master)
{
//TODO: Einbinden der NachwaescheArtikelData...
Generator.GenerateColumns(this.objectListViewArtikel, typeof(NachwaescheArtikelData));
this.artikelList = Artikel.GetArtikelList("Nachwaesche");
var NWArtikelList = new List<NachwaescheArtikelData>();
foreach (Artikel art in this.artikelList)
{
NWArtikelList.Add(new NachwaescheArtikelData
{
ArtikelID = art.ArtikelID,
ArtNummer = art.Nummer.ToString(),
ArtName = art.Bezeichnung,
Short = art.Short,
Sauber = 0,
Muell = 0,
Kategorie = art.Kategorie
});
}
//foreach (OLVColumn col in this.objectListViewArtikel.Columns) if (col.Text == "Kategorie" || col.Text == "Abkürzung") col.IsVisible = col.IsEditable = false;
this.objectListViewArtikel.Font = new Font(this.objectListViewArtikel.Font.FontFamily, 16, FontStyle.Regular);
//this.objectListViewArtikel.SetObjects(this.artikelList);
this.objectListViewArtikel.SetObjects(NWArtikelList);
this.objectListViewArtikel.PrimarySortColumn = (OLVColumn)this.objectListViewArtikel.AllColumns[6];
this.objectListViewArtikel.SecondarySortColumn = (OLVColumn)this.objectListViewArtikel.Columns["Abkürzung"];
this.objectListViewArtikel.Sort();
this.objectListViewArtikel.Refresh();
}
else
{
Generator.GenerateColumns(this.objectListViewArtikel, typeof(Artikel), true);
this.artikelList = Artikel.GetArtikelList("Alle");
this.objectListViewArtikel.SetObjects(this.artikelList);
OLVColumn sortColumn = new OLVColumn();
sortColumn = (OLVColumn)this.objectListViewArtikel.Columns[6];
this.objectListViewArtikel.Sort(sortColumn);
OLV_GroupCount();
OLVColumn buttonColumn = new OLVColumn();
buttonColumn = (OLVColumn)this.objectListViewArtikel.Columns[7];
buttonColumn.IsButton = true;
buttonColumn.ButtonSizing = OLVColumn.ButtonSizingMode.CellBounds;
}
OLV_ColumnsResize(this.objectListViewArtikel);
}
private void OLV_Load_with_Kunden(Artikel art)
{
this.Cursor = Cursors.WaitCursor;
this.SuspendLayout();
this.objectListViewArtikel.Columns.Clear();
this.objectListViewArtikel.ShowGroups = false;
Generator.GenerateColumns(this.objectListViewArtikel, typeof(NWData));
List<KundeArtikel> kndartList = KundeArtikel.GetFehlmengeList(null, art.ArtikelID);
var NWDataList = new List<NWData>();
// Kunden sammeln
foreach (KundeArtikel kndart in kndartList)
{
Kunde knd = Kunde.GetKunde(null, kndart.KundeID, null);
NWDataList.Add(new NWData
{
KndArtID = kndart.KundeArtikelID,
KundeID = kndart.KundeID,
KndNummer = knd.KundeNummer,
Kunde = knd.Suchtext == null ? knd.KundeName : knd.Suchtext,
Nachwaesche = kndart.Fehlmenge
});
}
this.objectListViewArtikel.SetObjects(NWDataList);
this.objectListViewArtikel.Refresh();
OLV_ColumnsResize(this.objectListViewArtikel);
this.ResumeLayout();
this.Cursor = Cursors.Default;
}
private void OLV_ColumnsResize(ObjectListView olv)
{
this.objectListViewArtikel.FilterMenuBuildStrategy = new MeinFilterMenu();
this.objectListViewArtikel.Width = Funktionen.Columns_Resize(null, objectListViewArtikel).olv.Width + 20;
this.objectListViewArtikel.Refresh();
}
private void objectListViewArtikel_ButtonClick(object sender, CellClickEventArgs e)
{
Artikel artikel = (Artikel)e.Model;
artikel.Nachwaesche = 0;
artikel.LastReset = DateTime.Now;
if(artikel.Save() == 1) this.objectListViewArtikel.RefreshObject(e.Model);
}
private void objectListViewArtikel_AfterCreatingGroups(object sender, CreateGroupsEventArgs e)
{
foreach (OLVGroup group in this.objectListViewArtikel.OLVGroups)
{
int sum = 0;
foreach (OLVListItem item in group.Items)
{
Artikel art = (Artikel)item.RowObject;
sum += art.Nachwaesche;
}
group.Header = $"{group.Header} (Anzahl: {sum.ToString()})";
}
}
private void objectListViewArtikel_CellEditFinished(object sender, CellEditEventArgs e)
{
OLVColumn col = e.Column;
DateTime timestamp = DateTime.Now.Date;
if (col == null) return;
if (int.TryParse(e.NewValue.ToString(), out int i))
{
if (i > 0)
{
Artikel art = Artikel.GetArtikel(null, ((NachwaescheArtikelData)e.RowObject).ArtikelID);
ArtikelNachwaesche artnw = ArtikelNachwaesche.FindeDatensatz(art.ArtikelID, timestamp);
if (col.Text == "Sauber")
{
if (artnw.NachwaescheID != null) artnw.Sauber += i;
else
{
artnw = new ArtikelNachwaesche()
{
ArtikelID = art.ArtikelID,
Datum = timestamp,
Sauber = i
};
}
}
if (col.Text == "Müll")
{
if (artnw.NachwaescheID != null) artnw.Muell += i;
else
{
artnw = new ArtikelNachwaesche()
{
ArtikelID = art.ArtikelID,
Datum = timestamp,
Muell = i
};
}
}
artnw.Save();
}
else
{
if (col.Text == "Nachwäsche")
{
NWData nw = (NWData)e.RowObject;
KundeArtikel kndart = KundeArtikel.GetItem((int)nw.KndArtID);
kndart.Fehlmenge = i;
kndart.Save();
}
}
}
else { MessageBox.Show("Bitte nur ganze Zahlen eingeben.", "ACHTUNG", MessageBoxButtons.OK, MessageBoxIcon.Error); e.Cancel = true; }
this.objectListViewArtikel.RefreshObject(e.RowObject);
}
private void objectListViewArtikel_CellEditStarting(object sender, CellEditEventArgs e)
{
OLVColumn col = e.Column;
if (e.Control is NumericUpDown numeric) { numeric.Select(0, Text.Length); numeric.Focus(); }
}
#endregion
private void comboBoxArtikel_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
Artikel art = cb.SelectedItem as Artikel;
OLV_Load_with_Kunden(art);
}
private void objectListViewArtikel_Resize(object sender, EventArgs e)
{
this.ClientSize = new Size(this.objectListViewArtikel.Width + this.objectListViewArtikel.Left, this.ClientSize.Height);
}
}
}