Programm_Wirl/KundeDaten.cs
2025-04-28 08:31:23 +02:00

431 lines
17 KiB
C#

using BrightIdeasSoftware;
using DatenDB;
using Spire.Barcode;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ZXing;
using System.Windows.Forms.DataVisualization.Charting;
using System.Data.SqlClient;
using System.Web;
namespace Deckungsbeitrag
{
public partial class KundeDaten : Form
{
List<Sortiment> sortimentListe = null;
List<Sortiment> resultList = null;
Sortiment result = null;
Kunde adresse = null;
Bitmap bitmap = null;
Image qrcode = null;
public KundeDaten()
{
InitializeComponent();
sortimentListe = (List<Sortiment>)Funktionen.SortimentLesen("Liste");
foreach (Control ctr in this.Controls) if (ctr is TextBox) if (!ctr.Name.Contains("KndNr") && !ctr.Name.Contains("Suchtext")) ctr.Enabled = false;
this.buttonProgramm.Enabled = false;
this.buttonBewertung.Enabled = false;
this.tSBDrucken.Enabled = false;
this.tSBNext.Enabled = false;
List<Aufgabe> aufgabenlist1 = Aufgabe.GetList(2);
this.comboBoxAufgabe.DataSource = aufgabenlist1;
this.comboBoxAufgabe.DisplayMember = "Bezeichnung";
this.comboBoxAufgabe.SelectedIndex = -1;
this.comboBoxAufgabe.Enabled = false;
this.buttonAufgEnt.Enabled = false;
}
public KundeDaten(Kunde kunde) :this()
{
this.adresse = kunde;
//Funktionen.SortimentLesen("Liste");
this.textBoxKndNr.Text = kunde.KundeNummer;
TextBoxKndNr_Leave(this, null);
//OLV_Load();
//Chart_Load();
}
//private bool SortimentLesen()
//{
// bool ok = false;
// StreamReader streamReader = null;
// try
// {
// streamReader = new StreamReader(ConfigurationManager.AppSettings["SortimentPfad"], Encoding.GetEncoding("iso-8859-1"));
// }
// catch (Exception)
// {
//MessageBox.Show("Keine Sortiment-Datei gefunden, bitte kontrolliere Pfad und Dateiname!");
// return ok;
// }
// int nr = 0;
// string row = string.Empty;
// Sortiment[] sortiment = new Sortiment[0];
// sortimentListe = new List<Sortiment>();
// int idx = 0;
// while (!streamReader.EndOfStream)
// {
// Array.Resize<Sortiment>(ref sortiment, ++idx);
// row = streamReader.ReadLine();
// sortiment[idx - 1] = new Sortiment(row, nr);
// sortimentListe.Add(new Sortiment(row, nr));
// ++nr;
// }
// streamReader.Close();
// ok = true;
// return ok;
//}
private void DatenLesen()
{
foreach (Control ctr in this.Controls) if (ctr is TextBox) ctr.Enabled = false;
this.comboBoxAufgabe.Enabled = true;
string sortNr = string.Empty;
//Innsbrucker Soziale Dienste Sortiment immer gleich.
if (adresse.KundeNummer == "010069" | adresse.KundeNummer == "010071") sortNr = "010068";
else sortNr = adresse.KundeNummer;
//result = sortimentListe.Find(Sortiment => Sortiment.KundeNummer == sortNr);
resultList = sortimentListe.FindAll(Sortiment => Sortiment.KundeNummer == sortNr);
BarcodeWriter code = new BarcodeWriter();
code.Format = BarcodeFormat.QR_CODE;
qrcode = code.Write(adresse.KundeNummer);
if (resultList != null) //KONTROLLE OB SORTIMENT VORHANDEN MIT RESULT...WERT VON resultList WENN KUNDE HAT KEIN SORTIMENT??????
{
Entwurf_Erstellen();
this.pictureBoxEntwurf.Visible = true;
this.pictureBoxEntwurf.Image = bitmap;
}
else MessageBox.Show("Der gesuchte Kunde hat kein Sortiment.");
tSSLabelArtikelAnz.Text = resultList.Count.ToString();
this.textBoxKndNr.Text = adresse.KundeNummer;
this.textBoxKundeName.Text = adresse.KundeName;
this.textBoxKndName2.Text = adresse.KundeName2;
this.textBoxStraße.Text = adresse.Strasse;
this.textBoxPLZ.Text = adresse.PLZ.ToString();
this.textBoxOrt.Text = adresse.Ort;
this.textBoxSuchtext.Text = adresse.Suchtext;
foreach (Aufgabe auf in comboBoxAufgabe.Items) if (auf.AufgabeID == adresse.Aufgabe) this.comboBoxAufgabe.SelectedItem = auf;
if (this.comboBoxAufgabe.SelectedItem != null) this.buttonAufgEnt.Enabled = true;
this.pictureBoxQRCode.Image = qrcode;
this.pictureBoxQRCode.SizeMode = PictureBoxSizeMode.Zoom;
this.buttonProgramm.Text = "WP 01"; //AUS DATENBANK STANDART-WASCHPROGRAMM EINFÜGEN.
this.buttonProgramm.Enabled = true;
this.buttonBewertung.Enabled = true;
this.tSBDrucken.Enabled = true;
this.tSBNext.Enabled = true;
OLV_Load();
Chart_Load();
}
private void Entwurf_Erstellen()
{
int ezl = 50;
int handzeile = 33;
float textsize = 10;
float textsize2 = 20;
int idx = 0;
int idx1 = 0;
int length = 0;
bitmap = new Bitmap(790, 1120);
Graphics g = Graphics.FromImage(bitmap);
Point adressblock = new Point(ezl, 50);
Point tabelle = new Point(ezl, 330);
SizeF textSize2 = g.MeasureString("Salzburg, am 26.08.1984", new Font("Arial", textsize, FontStyle.Regular));
SizeF textSize3 = g.MeasureString("MO", new Font("Arial", textsize2, FontStyle.Regular));
SizeF textSizePos = g.MeasureString("Bemerkung", new Font("Arial", textsize, FontStyle.Regular));
int zeile = (int)textSize2.Height + 20; //PIXEL
int posTag = 145;
int qr = (int)textSize3.Height * 2 + (int)textSize2.Height * 3;
g.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height);
//QR-Code
g.DrawImage(qrcode, bitmap.Width - 50 - qr, 50, qr, qr);
//Adressblock
g.DrawString($"{adresse.KundeNummer} {adresse.Suchtext}", new Font("Arial", textsize2, FontStyle.Regular), Brushes.Black, adressblock);
g.DrawString($"{adresse.KundeName}", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, adressblock.X, adressblock.Y + (int)textSize3.Height);
g.DrawString($"{adresse.KundeName2}", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, adressblock.X, adressblock.Y + (int)textSize3.Height + (int)textSize2.Height); //
g.DrawString($"{adresse.Strasse}", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, adressblock.X, adressblock.Y + (int)textSize3.Height + (int)textSize3.Height + (int)textSize2.Height);
g.DrawString($"{adresse.PLZ} {adresse.Ort}", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, adressblock.X, adressblock.Y + (int)textSize3.Height + (int)textSize3.Height + (int)textSize2.Height + (int)textSize2.Height);
//TagAnzeige
g.DrawString("MO", new Font("Arial", textsize2, FontStyle.Regular), Brushes.Black, adressblock.X, adressblock.Y + posTag);
g.DrawString("DI", new Font("Arial", textsize2, FontStyle.Regular), Brushes.Black, adressblock.X + textSize3.Width + 10, adressblock.Y + posTag);
g.DrawString("MI", new Font("Arial", textsize2, FontStyle.Regular), Brushes.Black, adressblock.X + (textSize3.Width + 10) * 2, adressblock.Y + posTag);
g.DrawString("DO", new Font("Arial", textsize2, FontStyle.Regular), Brushes.Black, adressblock.X + (textSize3.Width + 10) * 3, adressblock.Y + posTag);
g.DrawString("FR", new Font("Arial", textsize2, FontStyle.Regular), Brushes.Black, adressblock.X + (textSize3.Width + 10) * 4, adressblock.Y + posTag);
//Datum
g.DrawString("Datum:_______________", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, ezl, adressblock.Y + 200);
if (adresse.Aufgabe != null) g.DrawString($"*{Aufgabe.GetAufgabe(string.Empty, adresse.Aufgabe).Bezeichnung}", new Font("Arial", textsize, FontStyle.Bold), Brushes.Black, tabelle.X + textSizePos.Width + 100, adressblock.Y + 200);
//Tabelle Kopf
g.DrawLine(new Pen(Brushes.Black), new Point(tabelle.X, tabelle.Y - zeile), new Point(bitmap.Width - 50, tabelle.Y - zeile));
g.DrawString("Bemerkung", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, tabelle.X, tabelle.Y - (int)textSize2.Height - 5);
g.DrawString("Stück", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, tabelle.X + textSizePos.Width + 25, tabelle.Y - (int)textSize2.Height - 5);
g.DrawString("Bezeichnung", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, tabelle.X + textSizePos.Width + 100, tabelle.Y - (int)textSize2.Height - 5);
g.DrawString("Art.Nr.", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, tabelle.X + textSizePos.Width + 500, tabelle.Y - (int)textSize2.Height - 5);
g.DrawLine(new Pen(Brushes.Black), tabelle, new Point(bitmap.Width - 50, tabelle.Y));
for (int i = 0; i < 19; i++)
{
++idx;
length = handzeile * idx;
g.DrawLine(new Pen(Brushes.Black), new Point(tabelle.X, tabelle.Y - zeile), new Point(tabelle.X, tabelle.Y + length));
g.DrawLine(new Pen(Brushes.Black), new Point(tabelle.X + (int)textSizePos.Width + 5, tabelle.Y - zeile), new Point(tabelle.X + (int)textSizePos.Width + 5, tabelle.Y + length));
g.DrawLine(new Pen(Brushes.Black), new Point(tabelle.X + (int)textSizePos.Width + 90, tabelle.Y - zeile), new Point(tabelle.X + (int)textSizePos.Width + 90, tabelle.Y + length));
g.DrawLine(new Pen(Brushes.Black), new Point(tabelle.X + (int)textSizePos.Width + 495, tabelle.Y - zeile), new Point(tabelle.X + (int)textSizePos.Width + 495, tabelle.Y + length));
g.DrawLine(new Pen(Brushes.Black), new Point(bitmap.Width - 50, tabelle.Y - zeile), new Point(bitmap.Width - 50, tabelle.Y + length));
g.DrawLine(new Pen(Brushes.Black), new Point(tabelle.X, tabelle.Y + length), new Point(bitmap.Width - 50, tabelle.Y + length));
}
foreach (Sortiment artikel in resultList)
{
++idx1;
length = handzeile * idx1;
g.DrawString($"{artikel.ArtName}", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, tabelle.X + textSizePos.Width + 100, tabelle.Y + length - 20);
g.DrawString($"{artikel.ArtNr}", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, tabelle.X + textSizePos.Width + 500, tabelle.Y + length - 20);
}
//Bemerkung
g.DrawString($"Bemerkung:", new Font("Arial", textsize, FontStyle.Regular), Brushes.Black, ezl, bitmap.Height - 130);
//g.DrawString($"*{Aufgabe.GetAufgabe(string.Empty, adresse.Aufgabe).Bezeichnung}", new Font("Arial", textsize, FontStyle.Bold), Brushes.Black, ezl, bitmap.Height - 130 + handzeile);
g.DrawRectangle(new Pen(Brushes.Black), ezl, bitmap.Height - 130 - textsize, bitmap.Width - 100, 100);
}
private void TSBBeenden_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void OLV_Load()
{
foreach(ObjectListView olv in this.Controls.OfType<ObjectListView>())
{
olv.HeaderFormatStyle = Funktionen.GetHeader();
olv.OwnerDraw = true;
Generator.GenerateColumns(olv, typeof(OLVKundenumsatz), true);
if (olv.Name.Contains("Jahresumsatz"))
{
foreach (OLVColumn c in olv.Columns) if (c.Name == "Zeitraum") c.Text = "Jahr";
olv.SetObjects(OLVKundenumsatz.GetJahresumsatz(adresse.KundeID));
}
if (olv.Name.Contains("Quartalsumsatz"))
{
foreach (OLVColumn c in olv.Columns) if (c.Name == "Zeitraum") c.Text = "Quartal";
olv.SetObjects(OLVKundenumsatz.GetQuartalsumsatz(adresse.KundeID));
}
if (olv.Name.Contains("Monatsumsatz"))
{
foreach (OLVColumn c in olv.Columns) if (c.Name == "Zeitraum") c.Text = "Monat";
olv.SetObjects(OLVKundenumsatz.GetMonatsumsatz(adresse.KundeID));
}
}
}
private void Chart_Load()
{
foreach (Chart chart in this.Controls.OfType<Chart>()) chart.Visible = true;
//IMPLEMENTIEREN
ClassChart ch = ClassChart.FillChart(adresse.KundeID);
//Chart Jahresumsatz
List<OLVKundenumsatz> olv = OLVKundenumsatz.GetJahresumsatz(adresse.KundeID);
string[] x = new string[olv.Count()];
double[] y = new double[olv.Count()];
for (int i = 0; i < y.Length; i++)
{
y[i] = olv[i].Umsatz;
x[i] = olv[i].Zeitraum;
}
this.chartJahresumsatz.Series[0].LegendText = "Umsatz";
this.chartJahresumsatz.Series[0].ChartType = SeriesChartType.Column;
this.chartJahresumsatz.Series[0].IsValueShownAsLabel = true;
this.chartJahresumsatz.Series[0].Points.DataBindXY(x, y);
//Chart Quartalsumsatz
List<OLVKundenumsatz> olvq = OLVKundenumsatz.GetQuartalsumsatz(adresse.KundeID);
string[] xq = new string[olvq.Count()];
double[] yq = new double[olvq.Count()];
for (int i = 0; i < olvq.Count(); i++)
{
yq[i] = olvq[i].Umsatz;
xq[i] = olvq[i].Zeitraum;
}
this.chartQuartalsumsatz.Series[0].LegendText = "Umsatz";
this.chartQuartalsumsatz.Series[0].ChartType = SeriesChartType.Bar;
this.chartQuartalsumsatz.Series[0].IsValueShownAsLabel = true;
this.chartQuartalsumsatz.Series[0].Points.DataBindXY(xq, yq);
}
private void TextBoxKndNr_Leave(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(textBoxKndNr.Text))
{
this.textBoxSuchtext.Enabled = false;
adresse = Kunde.GetKunde(textBoxKndNr.Text, null, null);
if (adresse == null)
{
MessageBox.Show("Kunden Nummer nicht vorhanden!!");
this.textBoxSuchtext.Enabled = true;
this.textBoxKndNr.Clear();
this.textBoxKndNr.Focus();
return;
}
else DatenLesen();
}
else { this.textBoxSuchtext.Enabled = true; return; }
}
private void ButtonDrucken_Click(object sender, EventArgs e)
{
PrintDialog dialog = new PrintDialog();
foreach(string printer in PrinterSettings.InstalledPrinters) if (printer.Contains(ConfigurationManager.AppSettings["PrinterName"])) dialog.PrinterSettings.PrinterName = printer;
dialog.PrinterSettings.Copies = 10;
if (dialog.ShowDialog() == DialogResult.OK)
{
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);
printDocument.PrinterSettings = dialog.PrinterSettings;
printDocument.Print();
}
}
private void PrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(bitmap, e.PageBounds);
//e.Graphics.DrawImage(bitmap, 0, 0, 790, 900);
}
private void TSBNext_Click(object sender, EventArgs e)
{
foreach (Control ctr in this.Controls)
{
if (ctr is TextBox)
{
ctr.Text = "";
if (!ctr.Name.Contains("KndNr") && !ctr.Name.Contains("Suchtext")) ctr.Enabled = false;
else ctr.Enabled = true;
}
this.textBoxKndNr.Focus();
}
this.pictureBoxEntwurf.Image = null;
this.pictureBoxQRCode.Image = null;
this.buttonProgramm.Enabled = false;
this.buttonBewertung.Enabled = false;
this.comboBoxAufgabe.Enabled = false;
this.buttonAufgEnt.Enabled = false;
this.tSBNext.Enabled = false;
this.tSBDrucken.Enabled = false;
foreach (ObjectListView olv in this.Controls.OfType<ObjectListView>()) olv.Clear();
foreach (Chart chart in this.Controls.OfType<Chart>()) chart.Visible = false;
}
private void ButtonProgramm_Click(object sender, EventArgs e)
{
FormProgrammauswahl auswahl = new FormProgrammauswahl();
if (auswahl.ShowDialog() == DialogResult.OK)
{
DatenLesen();
}
}
private void textBoxSuchtext_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(textBoxSuchtext.Text))
{
this.textBoxSuchtext.AutoCompleteCustomSource = Kunde.GetSuchtext(textBoxSuchtext.Text);
}
}
private void TextBoxSuchtext_Leave(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(textBoxSuchtext.Text))
{
if (Kunde.GetKunde(textBoxSuchtext.Text, null, string.Empty) != null) adresse = Kunde.GetKunde(textBoxSuchtext.Text.ToUpper(), null, string.Empty);
else
{
MessageBox.Show($"Kunde mit {textBoxSuchtext.Text} als Suchtext ist nicht vorhanden!!");
this.textBoxSuchtext.Clear();
this.textBoxSuchtext.Focus();
return;
}
DatenLesen();
}
}
private void textBoxSuchtext_KeyDown(object sender, KeyEventArgs e)
{
TextBox tb = (TextBox)sender;
if (e.KeyData == Keys.Enter || e.KeyData == Keys.Tab)
{
if (tb.Name.Contains("KndNr")) TextBoxKndNr_Leave(this, null);
if (tb.Name.Contains("Suchtext")) TextBoxSuchtext_Leave(this, null);
e.Handled = true;
}
}
private void comboBoxAufgabe_DropDownClosed(object sender, EventArgs e)
{
if (MessageBox.Show("Möchtest du die Aufgabe speichern?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
if (this.comboBoxAufgabe.SelectedItem == null) adresse.Aufgabe = null;
else adresse.Aufgabe = ((Aufgabe)this.comboBoxAufgabe.SelectedItem).AufgabeID;
adresse.Save();
}
}
private void buttonAufgEnt_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Möchtest du die Aufgabe wirklich löschen?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
this.comboBoxAufgabe.SelectedIndex = -1;
adresse.Aufgabe = null;
adresse.Save();
}
}
private void KundeDaten_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.End) TSBNext_Click(this, e);
}
private void nextToolStripMenuItem_Click(object sender, EventArgs e)
{
TSBNext_Click(this, e);
}
private void nächsterKundeToolStripMenuItem_Click(object sender, EventArgs e)
{
TSBNext_Click(this, e);
}
}
}