338 lines
11 KiB
C#
338 lines
11 KiB
C#
using BrightIdeasSoftware;
|
|
using DatenDB;
|
|
using Deckungsbeitrag.AA_Forms;
|
|
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 readonly Benutzer user;
|
|
private List<Artikel> artikelList;
|
|
private AuftragTyp auftragTyp;
|
|
private int dropdownWidth;
|
|
public Timer timer;
|
|
public Artikel artikel;
|
|
|
|
public FormArtikelVW()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
public FormArtikelVW(Benutzer benutzer) : this()
|
|
{
|
|
this.user = benutzer;
|
|
}
|
|
public FormArtikelVW(Benutzer benutzer, AuftragTyp typ) : this(benutzer)
|
|
{
|
|
this.auftragTyp = typ;
|
|
this.comboBoxArtikel.Enabled = false;
|
|
}
|
|
private void FormArtikelVW_Load(object sender, EventArgs e)
|
|
{
|
|
timer = new Timer();
|
|
timer.Interval = 700; // 0,7 Sekunden
|
|
timer.Tick += Lade_TmpList;
|
|
|
|
List<Artikel> artlist = Artikel.GetArtikelList("Nachwaesche");
|
|
this.comboBoxArtikel.SelectedIndexChanged -= ComboBoxArtikel_SelectedIndexChanged;
|
|
this.comboBoxArtikel.DataSource = artlist;
|
|
this.comboBoxArtikel.DisplayMember = "Bezeichnung";
|
|
foreach (Artikel art in artlist)
|
|
{
|
|
int bezWidth = TextRenderer.MeasureText(art.Bezeichnung, comboBoxArtikel.Font).Width;
|
|
if (dropdownWidth < bezWidth) dropdownWidth = bezWidth;
|
|
}
|
|
this.comboBoxArtikel.DropDownWidth = dropdownWidth;
|
|
this.comboBoxArtikel.SelectedIndex = -1;
|
|
this.comboBoxArtikel.SelectedIndexChanged += ComboBoxArtikel_SelectedIndexChanged;
|
|
|
|
OLV_Load_with_Artikel();
|
|
}
|
|
|
|
|
|
#region ObjectListView
|
|
private void ObjectListViewArtikel_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
{
|
|
ObjectListView olv = (ObjectListView)sender;
|
|
if (olv.SelectedObjects.Count == 0 || olv.SelectedObjects.Count > 1) return;
|
|
if (olv.SelectedObject is NachwaescheArtikelData nwArtikel)
|
|
{
|
|
artikel = Artikel.GetArtikel(null, nwArtikel.ArtikelID);
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close();
|
|
}
|
|
|
|
}
|
|
|
|
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})";
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Die ObjectListView wird mit den Artikeln geladen bei denen Nachwäsche registriert wird.
|
|
/// </summary>
|
|
private void OLV_Load_with_Artikel()
|
|
{
|
|
if (this.user.Rolle == BenutzerRolle.Expedit || this.user.Rolle == BenutzerRolle.Frottee || this.user.Rolle == BenutzerRolle.Master || this.auftragTyp == AuftragTyp.SOLL_Erhoehung)
|
|
{
|
|
//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
|
|
});
|
|
}
|
|
this.objectListViewArtikel.Tag = NWArtikelList;
|
|
this.objectListViewArtikel.Font = new Font(this.objectListViewArtikel.Font.FontFamily, 16, FontStyle.Regular);
|
|
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(View_Artikel_Nachwaesche), true);
|
|
List<View_Artikel_Nachwaesche> artnwListe = View_Artikel_Nachwaesche.LadeNachwaesche();
|
|
|
|
this.objectListViewArtikel.SetObjects(artnwListe);
|
|
OLVColumn sortColumn = (OLVColumn)this.objectListViewArtikel.Columns["Abteilung"];
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Die ObjectListView wird mit Kunden geladen welche den in der ComboBox gewählten Artikel im Sortiment haben.
|
|
/// </summary>
|
|
/// <param name="art"> Der gewählte Artikel aus der ComboBox</param>
|
|
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, false);
|
|
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 ?? knd.KundeName,
|
|
Nachwaesche = kndart.Fehlmenge,
|
|
Reklamation = kndart.Reklamation
|
|
});
|
|
}
|
|
|
|
this.objectListViewArtikel.SetObjects(NWDataList);
|
|
this.objectListViewArtikel.Refresh();
|
|
|
|
OLV_ColumnsResize();
|
|
|
|
this.ResumeLayout();
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
private void OLV_ColumnsResize()
|
|
{
|
|
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})";
|
|
}
|
|
|
|
}
|
|
|
|
private void ObjectListViewArtikel_CellEditFinished(object sender, CellEditEventArgs e)
|
|
{
|
|
OLVColumn col = e.Column;
|
|
DateTime timestamp = DateTime.Now.Date;
|
|
|
|
if (col == null) return;
|
|
if (e.NewValue == e.Value) return;
|
|
|
|
if (int.TryParse(e.NewValue.ToString(), out int i))
|
|
{
|
|
if (i > 0)
|
|
{
|
|
Artikel art = Artikel.GetArtikel(((View_Artikel_Nachwaesche)e.RowObject).ArtNr, null);
|
|
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 == "NW")
|
|
{
|
|
NWData nw = (NWData)e.RowObject;
|
|
KundeArtikel kndart = KundeArtikel.GetItem((int)nw.KndArtID);
|
|
kndart.Fehlmenge = i;
|
|
kndart.FehlmengeBearbeitet = this.user.BenutzerName + " am " + DateTime.Now.ToString();
|
|
kndart.Save();
|
|
}
|
|
}
|
|
}
|
|
else { CustomMessageBox.Show("Titel.Fehler", "Text.Fehler.NurZahlen", null, new string[] { "Ok" }); e.Cancel = true; }
|
|
|
|
this.objectListViewArtikel.RefreshObject(e.RowObject);
|
|
}
|
|
|
|
private void ObjectListViewArtikel_CellEditStarting(object sender, CellEditEventArgs e)
|
|
{
|
|
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);
|
|
}
|
|
|
|
private void TextBoxSuchen_TextChanged(object sender, EventArgs e)
|
|
{
|
|
// TextChanged tritt nur ein wenn x Sekunden keine Eingabe erfolgt. Logik befindet sich in Timer_Tick
|
|
timer.Stop(); // Alten Timer beenden
|
|
timer.Start(); // Neuen Timer starten
|
|
}
|
|
private void Lade_TmpList(object sender, EventArgs e)
|
|
{
|
|
timer.Stop(); // Timer stoppen
|
|
|
|
if (string.IsNullOrWhiteSpace(this.textBoxSuchen.Text)) return;
|
|
if (!this.textBoxSuchen.Text.StartsWith("?"))
|
|
{
|
|
string term = this.textBoxSuchen.Text.Trim().ToLower();
|
|
if (this.objectListViewArtikel.Tag == null) return;
|
|
if (this.objectListViewArtikel.Tag is List<NachwaescheArtikelData> _allItems)
|
|
{
|
|
var filtered = string.IsNullOrWhiteSpace(term)
|
|
? _allItems : _allItems.Where(x =>
|
|
(x.ArtName != null && x.ArtName.ToLower().Contains(term)) ||
|
|
(x.Short != null && x.Short.ToLower().Contains(term)) ||
|
|
x.ArtNummer.ToString().Contains(term)).ToList();
|
|
|
|
this.objectListViewArtikel.SetObjects(filtered);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private void TextBoxSuchen_Enter(object sender, EventArgs e)
|
|
{
|
|
this.textBoxSuchen.ForeColor = Color.Black;
|
|
this.textBoxSuchen.Select(0, this.textBoxSuchen.Text.Length);
|
|
//this.textBoxSuchen.Clear();
|
|
}
|
|
|
|
private void TextBoxSuchen_Click(object sender, EventArgs e)
|
|
{
|
|
this.textBoxSuchen.SelectAll();
|
|
}
|
|
}
|
|
}
|
|
//CHANGES: Reklamation als Spalte hinzugefügt und Anzeigen implementiert. Sowohl bei KundeArtikel als auch bei NW_Artikel. |