Reklamation erstellt jetzt ein Etikett. Die Berechnung des Bestandes wurde überarbeitet. Etwas Code-Kosmetik wurde gemacht.

This commit is contained in:
Kilian Wirl 2026-05-05 13:44:15 +02:00
parent 624e157edd
commit a78cd3dc32
22 changed files with 614 additions and 638 deletions

View File

@ -36,7 +36,7 @@ namespace Deckungsbeitrag.AA_Forms
private void TextBoxText_Click(object sender, EventArgs e)
{
this.textBoxText.Clear();
if (TouchHelper.IsTouchDeviceReady())
if (Program.istTouch && !Program.hatTastatur)
{
if (keyboard == null || keyboard.IsDisposed)
{

View File

@ -99,7 +99,7 @@
this.buttonFertig.TabIndex = 14;
this.buttonFertig.Text = "Speichern/Abschließen";
this.buttonFertig.UseVisualStyleBackColor = false;
this.buttonFertig.Click += new System.EventHandler(this.buttonFertig_Click);
this.buttonFertig.Click += new System.EventHandler(this.ButtonFertig_Click);
//
// buttonAbbrechen
//
@ -116,7 +116,7 @@
this.buttonAbbrechen.TabIndex = 0;
this.buttonAbbrechen.Text = "Abbrechen";
this.buttonAbbrechen.UseVisualStyleBackColor = false;
this.buttonAbbrechen.Click += new System.EventHandler(this.buttonAbbrechen_Click);
this.buttonAbbrechen.Click += new System.EventHandler(this.ButtonAbbrechen_Click);
//
// labelRegion
//
@ -201,7 +201,7 @@
this.labelContainer.TabIndex = 28;
this.labelContainer.Text = "0";
this.labelContainer.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelContainer.TextChanged += new System.EventHandler(this.labelContainer_TextChanged);
this.labelContainer.TextChanged += new System.EventHandler(this.LabelContainer_TextChanged);
//
// label5
//
@ -256,7 +256,7 @@
this.comboBoxPriority.Name = "comboBoxPriority";
this.comboBoxPriority.Size = new System.Drawing.Size(348, 37);
this.comboBoxPriority.TabIndex = 41;
this.comboBoxPriority.SelectedValueChanged += new System.EventHandler(this.comboBox_SelectedValueChanged);
this.comboBoxPriority.SelectedValueChanged += new System.EventHandler(this.ComboBox_SelectedValueChanged);
//
// comboBoxFahrer
//
@ -267,7 +267,7 @@
this.comboBoxFahrer.Name = "comboBoxFahrer";
this.comboBoxFahrer.Size = new System.Drawing.Size(348, 37);
this.comboBoxFahrer.TabIndex = 42;
this.comboBoxFahrer.SelectedValueChanged += new System.EventHandler(this.comboBox_SelectedValueChanged);
this.comboBoxFahrer.SelectedValueChanged += new System.EventHandler(this.ComboBox_SelectedValueChanged);
//
// pictureBoxDirtMinus
//
@ -362,11 +362,9 @@
this.oLVArtikel.UseCompatibleStateImageBehavior = false;
this.oLVArtikel.UseSubItemCheckBoxes = true;
this.oLVArtikel.View = System.Windows.Forms.View.Details;
this.oLVArtikel.CellEditFinished += new BrightIdeasSoftware.CellEditEventHandler(this.oLVArtikel_CellEditFinished);
this.oLVArtikel.CellEditStarting += new BrightIdeasSoftware.CellEditEventHandler(this.oLVArtikel_CellEditStarting);
this.oLVArtikel.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.OLVArtikel_ItemCheck);
this.oLVArtikel.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.oLVArtikel_ItemChecked);
this.oLVArtikel.SizeChanged += new System.EventHandler(this.oLVArtikel_SizeChanged);
this.oLVArtikel.CellEditFinished += new BrightIdeasSoftware.CellEditEventHandler(this.OLVArtikel_CellEditFinished);
this.oLVArtikel.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.OLVArtikel_ItemChecked);
this.oLVArtikel.SizeChanged += new System.EventHandler(this.OLVArtikel_SizeChanged);
//
// FormAuftragDetail
//

View File

@ -72,7 +72,7 @@ namespace Deckungsbeitrag
{
InitializeComponent();
//this.BackColor = Properties.Settings.Default.Wirlblau;
labelContainer_TextChanged(this.labelContainer, EventArgs.Empty);
LabelContainer_TextChanged(this.labelContainer, EventArgs.Empty);
}
public FormAuftragDetail(Auftrag auftrag, Benutzer benutzer) : this()
@ -99,8 +99,8 @@ namespace Deckungsbeitrag
this.comboBoxPriority.SelectedItem = auftrag.Priority;
// Events nach dem Laden der Daten wieder den ComboBoxen zuweisen.
this.comboBoxPriority.SelectedValueChanged += comboBox_SelectedValueChanged;
this.comboBoxFahrer.SelectedValueChanged += comboBox_SelectedValueChanged;
this.comboBoxPriority.SelectedValueChanged += ComboBox_SelectedValueChanged;
this.comboBoxFahrer.SelectedValueChanged += ComboBox_SelectedValueChanged;
if (this.auftrag.Typ != AuftragTyp.Inventur || (this.auftrag.Typ == AuftragTyp.Inventur & this.auftrag.Status == AuftragStatus.Herrichten)) Load_OLV();
else
@ -161,13 +161,13 @@ namespace Deckungsbeitrag
this.oLVArtikel = Funktionen.Columns_Resize(null, this.oLVArtikel).olv;
// Wenn alle Artikel Checked sind TOCLOSE auslösen.
oLVArtikel_ItemChecked(this.oLVArtikel, null);
OLVArtikel_ItemChecked(this.oLVArtikel, null);
}
private void LadeComboBoxen()
{
this.comboBoxFahrer.SelectedValueChanged -= comboBox_SelectedValueChanged;
this.comboBoxPriority.SelectedValueChanged -= comboBox_SelectedValueChanged;
this.comboBoxFahrer.SelectedValueChanged -= ComboBox_SelectedValueChanged;
this.comboBoxPriority.SelectedValueChanged -= ComboBox_SelectedValueChanged;
List<Benutzer> benutzerliste = Benutzer.GetFahrerList();
this.comboBoxFahrer.DataSource = benutzerliste;
@ -175,11 +175,11 @@ namespace Deckungsbeitrag
this.comboBoxPriority.DataSource = Enum.GetValues(typeof(Priority));
}
private void comboBox_SelectedValueChanged(object sender, EventArgs e)
private void ComboBox_SelectedValueChanged(object sender, EventArgs e)
{
Tosave = true;
}
private void labelContainer_TextChanged(object sender, EventArgs e)
private void LabelContainer_TextChanged(object sender, EventArgs e)
{
if (this.labelContainer.Text == "0") { this.pictureBoxMinus.Enabled = this.pictureBoxDirtMinus.Enabled = false; this.pictureBoxMinus.BackColor = this.pictureBoxDirtMinus.BackColor = Color.Gray; }
else { this.pictureBoxMinus.Enabled = this.pictureBoxDirtMinus.Enabled = true; this.pictureBoxMinus.BackColor = this.pictureBoxDirtMinus.BackColor = Color.Red; }
@ -196,7 +196,7 @@ namespace Deckungsbeitrag
auftrag.ZusatzInfo = this.textBoxZusatz.Text;
auftrag.Save();
if (auftrag.Typ == AuftragTyp.Regelmäßig || (auftrag.Typ == AuftragTyp.Inventur & auftrag.Status == AuftragStatus.Herrichten))
if (auftrag.Typ <= AuftragTyp.Regelmäßig && (auftrag.Typ >= AuftragTyp.Inventur) && auftrag.Status == AuftragStatus.Herrichten)
{
foreach (var kvp in auftragDictionary)
{
@ -207,14 +207,6 @@ namespace Deckungsbeitrag
aufart.Save();
}
//foreach (OLVListItem item in this.oLVArtikel.Items)
//{
// AuftragArtikel art = (AuftragArtikel)item.RowObject;
// if (item.Checked) art.Erledigt = true;
// else art.Erledigt = false;
// art.Save();
//}
if (auftrag.Typ == AuftragTyp.Inventur)
{
foreach (var kvp in dictionary)
@ -254,7 +246,7 @@ namespace Deckungsbeitrag
{
if (MessageBox.Show("Möchtest du JETZT Etiketten für die erfolgten Änderung drucken?", "FRAGE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
if (Funktionen.SonderEtikett_Drucken(this.auftrag, dictionary) == DialogResult.OK)
if (Funktionen.SonderEtikett_Drucken(this.auftrag.KundeID, dictionary) == DialogResult.OK)
{
etikettgedruckt = true;
}
@ -310,7 +302,7 @@ namespace Deckungsbeitrag
#region Button-Click
//AUFTRAG ABBRECHEN
private void buttonAbbrechen_Click(object sender, EventArgs e)
private void ButtonAbbrechen_Click(object sender, EventArgs e)
{
//if (_tosave)
//{
@ -332,7 +324,7 @@ namespace Deckungsbeitrag
}
//AUFTRAG ABSCHLIESSEN
private void buttonFertig_Click(object sender, EventArgs e)
private void ButtonFertig_Click(object sender, EventArgs e)
{
EtikettDrucken();
if (Tosave && etikettgedruckt) AuftragSpeichern();
@ -427,6 +419,7 @@ namespace Deckungsbeitrag
this.DialogResult = DialogResult.OK;
this.Close();
}
else this.Close();
}
@ -435,16 +428,22 @@ namespace Deckungsbeitrag
/// <summary>
/// TOCLOSE
/// </summary>
private void oLVArtikel_ItemChecked(object sender, ItemCheckedEventArgs e)
private void OLVArtikel_ItemChecked(object sender, ItemCheckedEventArgs e)
{
ObjectListView olv = (ObjectListView)sender;
if (olv.Items.Count == olv.CheckedItems.Count) Toclose = true;
foreach(OLVListItem item in olv.CheckedItems)
{
if (e == null) return;
OLVListItem item = e.Item as OLVListItem;
AuftragArtikel auftragArtikel = (AuftragArtikel)item.RowObject;
if (item.Checked)
{
auftragArtikel.Erledigt = true;
auftragArtikel.Save();
int oldValue = auftragArtikel.Anzahl;
int newValue = 0;
ChangeAnzahl(newValue, oldValue, auftragArtikel);
}
else auftragArtikel.Erledigt = false;
if (olv.Items.Count == olv.CheckedItems.Count) Toclose = true;
}
@ -556,29 +555,16 @@ namespace Deckungsbeitrag
//if (oLVArtikel != null) this.ClientSize = new Size(oLVArtikel.Right + 10, oLVArtikel.Bottom + buttonAbbrechen.Height + 25);
}
private void oLVArtikel_CellEditStarting(object sender, CellEditEventArgs e)
private void ChangeAnzahl(int newValue, int oldvalue, AuftragArtikel auftragArtikel)
{
}
private void oLVArtikel_CellEditFinished(object sender, CellEditEventArgs e)
{
this.Cursor = Cursors.WaitCursor;
this.SuspendLayout();
ObjectListView olv = (ObjectListView)sender;
AuftragArtikel auftragArtikel = (AuftragArtikel)e.RowObject;
int newValue = (int)e.NewValue;
if (this.auftrag.Typ == AuftragTyp.SOLL_Verminderung) if (newValue > 0) newValue = newValue * -1;
if (e.Column.Text == "Anzahl") diff = (int)e.Value - (newValue);
if (this.auftrag.Typ == AuftragTyp.SOLL_Verminderung) if (newValue > 0) newValue *= -1;
diff = oldvalue - (newValue);
if (diff != 0) Tosave = true;
if (auftragDictionary.TryGetValue((int)auftragArtikel.AuftragArtikelID, out int val))
{
val = newValue;
if (newValue == 0) e.ListViewItem.Checked = true;
auftragDictionary[(int)auftragArtikel.AuftragArtikelID] = newValue;
//if (newValue == 0) e.ListViewItem.Checked = true;
}
else auftragDictionary.Add((int)auftragArtikel.AuftragArtikelID, newValue);
@ -602,24 +588,105 @@ namespace Deckungsbeitrag
this.ResumeLayout();
this.Cursor = Cursors.Default;
}
private void OLVArtikel_CellEditFinished(object sender, CellEditEventArgs e)
{
this.Cursor = Cursors.WaitCursor;
this.SuspendLayout();
ObjectListView olv = (ObjectListView)sender;
AuftragArtikel auftragArtikel = (AuftragArtikel)e.RowObject;
int newValue = (int)e.NewValue;
int oldValue = (int)e.Value;
ChangeAnzahl(newValue, oldValue, auftragArtikel);
//if (this.auftrag.Typ == AuftragTyp.SOLL_Verminderung) if (newValue > 0) newValue = newValue * -1;
//if (e.Column.Text == "Anzahl") diff = (int)e.Value - (newValue);
//if (diff != 0) Tosave = true;
//if (auftragDictionary.TryGetValue((int)auftragArtikel.AuftragArtikelID, out int val))
//{
// val = newValue;
// if (newValue == 0) e.ListViewItem.Checked = true;
//}
//else auftragDictionary.Add((int)auftragArtikel.AuftragArtikelID, newValue);
//KundeArtikel kndart = KundeArtikel.GetKundeArtikelVonArtikelID(this.kunde.KundeID, auftragArtikel.ArtikelID);
//int reklamation = kndart.Reklamation;
//int fehlmenge = kndart.Fehlmenge;
//int stand = kndart.Stand;
//int korrektur = kndart.Korrektur;
//KorrigiereBestand(diff, ref reklamation, ref fehlmenge, ref stand, ref korrektur);
//if (dictionary.TryGetValue((int)kndart.KundeArtikelID, out int[] value))
//{
// for (int i = 0; i < value.Length; i++)
// {
// value[i] += bestand[i];
// }
//}
//else dictionary.Add((int)kndart.KundeArtikelID, bestand);
////WriteToCSV(kndart);
//this.ResumeLayout();
//this.Cursor = Cursors.Default;
}
public void KorrigiereBestand(int diff, ref int reklamation, ref int fehlmenge, ref int stand, ref int korrektur)
{
bestand = new int[4];
if (diff == 0)
return;
if (diff < 0 || this.auftrag.Typ == AuftragTyp.SOLL_Erhoehung) { bestand[2] = diff; stand += diff; return; }
int rest = diff * 1;
// 1) Reklamation nur korrigieren, wenn sie <= diff ist
if (reklamation > 0 && reklamation <= rest)
switch (this.auftrag.Typ)
{
rest -= reklamation;
bestand[0] = reklamation;
reklamation = 0;
case AuftragTyp.Inventur:
{
if (diff < 0) // Diff ist negativ
{
int korr = diff;
bestand[3] = korr;
korrektur -= korr;
}
else // Diff ist positiv
{
int korr = diff;
bestand[3] = korr;
korrektur -= korr;
}
}
break;
case AuftragTyp.SOLL_Erhoehung:
{
if (diff < 0) { MessageBox.Show("Eine SOLL-Erhöhung kann keine negative Zahl haben. Bitte korrigiere die Zahlen.", "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; }
bestand[2] = diff;
stand += diff;
}
break;
case AuftragTyp.IST_Erhoehung:
{
if (diff < 0) { MessageBox.Show("Eine IST-Erhöhung kann keine negative Zahl haben. Bitte korrigiere die Zahlen.", "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; }
goto default;
}
case AuftragTyp.SOLL_Verminderung:
{
if (diff > 0) { MessageBox.Show("Eine SOLL-Verminderung kann keine positiven Zahlen haben. Bitte korrigiere die Zahlen.", "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Stop ); return; }
bestand[2] = diff;
stand += diff;
}
break;
default:
{
int rest = diff;
// 1) Reklamation nur korrigieren, wenn sie <= diff ist
if (reklamation > 0)
{
int reduktion = Math.Min(reklamation, rest);
bestand[0] = reduktion;
reklamation -= reduktion;
rest -= reduktion;
}
// 2) Fehlmenge korrigieren
if (fehlmenge > 0)
{
@ -628,33 +695,17 @@ namespace Deckungsbeitrag
fehlmenge -= abbau;
rest -= abbau;
}
// 3) Inventurausgleich korrigieren
if (korrektur > 0)
{
int korr = Math.Min(korrektur, rest);
bestand[3] = korr;
korrektur -= korr;
rest -= korr;
}
// 4) Rest auf Stand buchen
// 3) Rest auf Stand buchen
if (rest > 0)
stand += rest;
bestand[2] = rest;
}
private void oLVArtikel_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
Tosave = true;
break;
}
private void FormAuftragDetail_Resize(object sender, EventArgs e)
{
if (fb != null) fb.Location = new Point(this.ClientSize.Width - fb.Width - 7, 0);
if (uci != null) this.ClientSize = new Size(uci.Right, uci.Bottom + buttonAbbrechen.Height + 25);
if (oLVArtikel != null) this.ClientSize = new Size(oLVArtikel.Right + 10, oLVArtikel.Bottom + buttonAbbrechen.Height + 25);
}
private void oLVArtikel_SizeChanged(object sender, EventArgs e)
private void OLVArtikel_SizeChanged(object sender, EventArgs e)
{
this.ClientSize = new Size(oLVArtikel.Right + 10, oLVArtikel.Bottom + buttonAbbrechen.Height + 25);
}
@ -678,3 +729,5 @@ namespace Deckungsbeitrag
//CHANGES: Bei Druckabbruch wird die geänderte Zahl NICHT zurückgesetzt. (Das muss händisch erfolgen)
//CHANGES: Wenn die Zahlen zurückgesetzt werden sollen, muss AuftragDetail geschlossen werden.
//CHANGES: Wenn die reduzierte Anzahl bei SOLL-Verminderung nicht negativ ist, wird diese negativ gemacht. So wird ein möglicher Fehler ausgebessert.
//CHANGES: Beim Speichern ohne Abschließen schließt sich das Fenster nach dem Speichern.
//CHANGES: Wenn ein Artikel vollständig hergerichtet wird, muss er nur abgehackt werden. Den Rest macht der Computer.

View File

@ -98,22 +98,6 @@ namespace Deckungsbeitrag
if (MessageBox.Show("Möchtest du die Einstellungen speichern?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
else
{
//TODO: Hier Settings speichern mit UserSettingsManager Klasse.
//if (changed)
//{
// Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
// config.AppSettings.Settings.Remove("SortimentPfad");
// config.AppSettings.Settings.Add("SortimentPfad", this.textBoxSortiment.Text);
// config.AppSettings.Settings.Remove("BildPfad");
// config.AppSettings.Settings.Add("BildPfad", this.textBoxRatingbild.Text);
// config.Save();
//}
//if (this.checkBoxMaxWert.Checked) Settings.Default.MaxChecked = this.checkBoxMaxWert.Checked;
//if (this.checkBoxMinWert.Checked) Settings.Default.MinChecked = this.checkBoxMinWert.Checked;
//if (this.numUpDownMinWert.Enabled) Settings.Default.RatMin = (double)this.numUpDownMinWert.Value;
//if (this.numUpDownMaxWert.Enabled) Settings.Default.RatMax = (double)this.numUpDownMaxWert.Value;
if (this.comboBoxEtikettDrucker.SelectedItem != null) _settings.DruckerEtikett = this.comboBoxEtikettDrucker.SelectedItem.ToString();
if (this.comboBoxSWSDrucker.SelectedItem != null) { _settings.DruckerSWS = this.comboBoxSWSDrucker.SelectedItem.ToString(); _settings.CopiesSWS = this.numericUpDownSWSKopien.Value; }
if (this.comboBoxTourenlisteDrucker.SelectedItem != null) _settings.DruckerTourenListe = this.comboBoxTourenlisteDrucker.ToString();

View File

@ -595,7 +595,7 @@ namespace Deckungsbeitrag
}
break;
default:
if (_auftrag.Typ == AuftragTyp.Regelmäßig || _auftrag.Typ == AuftragTyp.SOLL_Erhoehung || _auftrag.Typ == AuftragTyp.SOLL_Verminderung || _auftrag.Typ == AuftragTyp.Inventur)
if (_auftrag.Typ == AuftragTyp.Regelmäßig || _auftrag.Typ == AuftragTyp.SOLL_Erhoehung || _auftrag.Typ == AuftragTyp.SOLL_Verminderung || _auftrag.Typ == AuftragTyp.Inventur || _auftrag.Typ == AuftragTyp.IST_Erhoehung)
{
FormAuftragDetail auftragDetail = new FormAuftragDetail(_auftrag, this.benutzer);
if (auftragDetail.ShowDialog() == DialogResult.OK)
@ -1145,7 +1145,6 @@ namespace Deckungsbeitrag
/// </summary>
private void Auftrag_Fertig()
{
//TODO: Auftrag richtig speichern... mit gedruckt bzw. erledigt bzw.
if (this.benutzer.Rolle == BenutzerRolle.Frottee) this.auftrag.Abteilungen |= AbteilungsStatus.FrotteeBeendet;
else this.auftrag.Status = AuftragStatus.Fertig;
this.auftrag.Save();

View File

@ -3,6 +3,7 @@ using DatenDB;
using Deckungsbeitrag.AA_Klassen;
using System;
using System.CodeDom;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
@ -30,7 +31,8 @@ namespace Deckungsbeitrag
private List<object> auftragsliste;
private ArtikelKategorie kategorie;
readonly string userid;
private Dictionary<int, int> auftragDictionary = new Dictionary<int, int>();
private bool etikettgedruckt = false;
#region Form-Konstruktor
public FormFehlmengeCount()
@ -158,7 +160,6 @@ namespace Deckungsbeitrag
foreach (Button btn in this.tableLayoutPanelArtikel.Controls) btn.Tag = btn.Text = null;
this.groupBoxArtikel.Visible = true;
this.tableLayoutPanelArtikel.Visible = true;
//TODO: Nach Test und Rücksprache eventuell wieder umbauen. Benutzer.Rolle etc.
// Buttons werden den Artikeln aus der Artikelliste zugewiesen. Unterschied zwischen Frotteewäsche, Spannleintüchern, Großteilen und Kleinteilen
foreach (KundeArtikel artikel in artikelListe)
{
@ -417,6 +418,9 @@ namespace Deckungsbeitrag
}
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Frottee))
{
EtikettDrucken();
if (etikettgedruckt)
{
DialogResult result = meldung.GetFrage(this, "Möchtest du eine weitere Reklamation eingeben?", false);
switch (result)
@ -430,6 +434,8 @@ namespace Deckungsbeitrag
break;
}
}
else return;
}
else
{
// AbteilungsStatus für Kleinteile und Großteile wird hier gesetzt.
@ -443,6 +449,16 @@ namespace Deckungsbeitrag
Open_Liste();
ControlLaden();
}
private void EtikettDrucken()
{
if (MessageBox.Show("Möchtest du JETZT Etiketten für die erfolgten Änderung drucken?", "FRAGE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
if (Funktionen.SonderEtikett_Drucken((int)this.kunde.KundeID, auftragDictionary) == DialogResult.OK)
{
etikettgedruckt = true;
}
}
}
/// <summary>
/// Auftragliste aufrufen.
@ -537,7 +553,17 @@ namespace Deckungsbeitrag
};
}
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Frottee)) { kndart.Reklamation++; artnw.Reklamation++; }
if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Frottee))
{
artnw.Reklamation++;
kndart.Reklamation++;
if (auftragDictionary.TryGetValue((int)kndart.KundeArtikelID, out int val))
{
auftragDictionary[(int)kndart.KundeArtikelID] = kndart.Reklamation;
}
else auftragDictionary.Add((int)kndart.KundeArtikelID, kndart.Reklamation);
}
else { kndart.Fehlmenge++; artnw.Nachwaesche++; }
// Wenn speichern nicht möglich, wird darauf hingewiesen.

View File

@ -91,7 +91,6 @@ namespace Deckungsbeitrag
{
this.CenterToScreen();
}
private void ListViewKunde_Load()
{
//LISTE LEEREN
@ -503,15 +502,13 @@ namespace Deckungsbeitrag
this.Close();
}
}
private void FormListe_FormClosing(object sender, FormClosingEventArgs e)
{
if (keyboard != null) keyboard.Close();
}
private void TextBoxKunde_Click(object sender, EventArgs e)
{
if (TouchHelper.IsTouchDeviceReady())
if (Program.istTouch && !Program.hatTastatur)
{
if (keyboard == null || keyboard.IsDisposed)
{

View File

@ -23,6 +23,7 @@ namespace Deckungsbeitrag
string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
private QwertzKeyboard keyboard;
private OnboardingSchritt onBoardingArt;
public Benutzer Person { get; set; }
public FormLogin()
@ -152,9 +153,10 @@ namespace Deckungsbeitrag
private void TextBoxBenutzer_Enter(object sender, EventArgs e)
{
this.textBoxBenutzer.SelectAll();
if (TouchHelper.IsTouchDeviceReady())
if (Program.istTouch && !Program.hatTastatur)
{
if (keyboard == null || keyboard.IsDisposed)
{
@ -173,7 +175,7 @@ namespace Deckungsbeitrag
private void TextBoxPasswort_Enter(object sender, EventArgs e)
{
if (TouchHelper.IsTouchDeviceReady())
if (Program.istTouch && !Program.hatTastatur)
{
if (keyboard == null || keyboard.IsDisposed)
{
@ -196,7 +198,7 @@ namespace Deckungsbeitrag
private void TextBoxPwdWh_Enter(object sender, EventArgs e)
{
if (TouchHelper.IsTouchDeviceReady())
if (Program.istTouch && !Program.hatTastatur)
{
if (keyboard == null || keyboard.IsDisposed)
{

View File

@ -210,6 +210,7 @@ namespace Deckungsbeitrag
this.Name = "FormLogin";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "LOGIN Version: ";
this.TopMost = true;
this.Load += new System.EventHandler(this.FormLogin_Load);
this.Shown += new System.EventHandler(this.FormLogin_Shown);
this.groupBox1.ResumeLayout(false);

View File

@ -320,10 +320,25 @@ namespace Deckungsbeitrag
this.Height = 470;
this.textBoxText.BringToFront();
break;
case AuftragTyp.IST_Erhoehung:
if (this.kunde == null) return;
this.textBoxText.Visible = false;
this.panelRegAuftrag.Enabled = this.panelRegAuftrag.Visible = true;
this.pictureBoxPlus.Enabled = this.pictureBoxMinus.Enabled = this.textBoxCont.Enabled = false;
this.labelText.Text = "Rhythmus:";
this.Width = this.panelRegAuftrag.Right + 25;
this.Height = 470;
break;
default:
break;
}
PanelRegAuftrag_EnabledChanged(this.panelRegAuftrag, null);
if (this.panelRegAuftrag.Enabled == false)
{
this.pictureBoxPlus.Enabled = this.pictureBoxMinus.Enabled = this.textBoxCont.Enabled = true;
this.Width = textBoxKundeName.Right + 30;
this.Height = 470;
}
//PanelRegAuftrag_EnabledChanged(this.panelRegAuftrag, null);
}
else
{
@ -341,7 +356,7 @@ namespace Deckungsbeitrag
CustomInputBox inputBox = new CustomInputBox("Wieviel Stück sollen geliefert oder eingezogen werden?", "ARTIKELANZAHL", "Anzahl", "isNumeric");
if (inputBox.ShowDialog() == DialogResult.OK)
{
anzahl = inputBox.text;
artAnzahl = int.Parse(inputBox.text);
}
else return;
@ -408,6 +423,7 @@ namespace Deckungsbeitrag
{
MessageBox.Show("Auswahl für den gewählten Kunden nicht verfügbar.", "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.comboBoxTyp.SelectedIndex = -1;
this.panelRegAuftrag.Enabled = false;
return;
}
comboBoxArtikel.DataSource = kndartikel;
@ -541,7 +557,7 @@ namespace Deckungsbeitrag
inputBox = new CustomInputBox("Wieviel Stück sollen geliefert oder eingezogen werden?", "ARTIKELANZAHL", "Anzahl", "isNumeric");
if (inputBox.ShowDialog() == DialogResult.OK)
{
anzahl = inputBox.text;
artAnzahl = int.Parse(inputBox.text);
}
else return;
}
@ -660,6 +676,7 @@ namespace Deckungsbeitrag
id = null;
artname = uca.ArtikelName.ToString();
}
AuftragArtikel aufart = new AuftragArtikel()
{
AuftragID = Auftrag.AuftragID,
@ -669,6 +686,7 @@ namespace Deckungsbeitrag
Erledigt = false,
Gesamt = uca.Anzahl,
};
aufart.Save();
}
}

View File

@ -886,6 +886,4 @@ namespace DatenDB
}
}
}
//INSTALL-REMINDER: DB anpassen. (Priority in Auftrag etc.)
//CAHNGES: Priority wird bei Auftrag hinterlegt. Derzeit nach Fahrer Vorname bis andere Lösung gefunden.
//TODO: Non-Hard-Coded-Lösung für Priority finden.

View File

@ -45,9 +45,10 @@ namespace Deckungsbeitrag
private static Benutzer _benutzer;
private static PrintDocument printdoc;
public static bool IsPhysicalPrint = false; // Globaler Schalter
static Dictionary<int, int[]> _dictionary;
static object _dictionary;
private static bool printed = false;
private static bool inPreview = false;
private static int KundeID;
public Funktionen()
{
@ -863,7 +864,6 @@ namespace Deckungsbeitrag
g.DrawString($"{auftrag.Liefertag.ToString("ddd dd.MM.")}", font1, Brushes.Black, startpoint.X, startpoint.Y + height_font1 + 5 + height_font2 + 2 + size_Liefertag.Height + 2);
if (!nocont) g.DrawString($"{auftrag.ContainerClean}", font4, Brushes.Black, startpoint.X + size_Liefertag.Width + size_container.Width + 10, startpoint.Y + height_font1);
//TODO: Ausprobieren ob die Ausrichtung jetzt richtig ist. Sowohl beim ersten wie auch zweiten Mal.
if (sender == null) bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);
Image img = bitmap;
return img;
@ -1083,12 +1083,9 @@ namespace Deckungsbeitrag
}
}
}
public static Image SonderEtikett_Entwurf(Auftrag auftrag, Dictionary<int, int[]> dictionary)
public static Image SonderEtikett_Entwurf(int KundeID, object dictionary)
{
Kunde kunde = Kunde.GetKunde(string.Empty, auftrag.KundeID, string.Empty);
if (kunde.Suchtext.StartsWith("?") | kunde.KundeNummer == "2320000") kunde.Suchtext = auftrag.ZusatzInfo;
List<AuftragArtikel> artliste = AuftragArtikel.GetList(auftrag.AuftragID);
if (artliste == null || artliste.Count == 0) return null;
Kunde kunde = Kunde.GetKunde(string.Empty, KundeID, string.Empty);
Bitmap bitmap = new Bitmap(300, 1200);
Graphics g = Graphics.FromImage(bitmap);
@ -1109,37 +1106,66 @@ namespace Deckungsbeitrag
//Etikett-Text
g.DrawString($"{kunde.KundeNummer}", font2, Brushes.Black, startpoint);
nextposition += (int)height_font2;
g.DrawString($"{kunde.Suchtext}", font2, Brushes.Black, einzug, nextposition);
g.DrawString($"{kunde.Suchtext.Substring(0, 10)}", font2, Brushes.Black, einzug, nextposition);
nextposition += (int)height_font2;
g.DrawString($"{auftrag.Liefertag.Date.ToString("dd.MM.yyyy")}", font2, Brushes.Black, einzug, nextposition);
g.DrawString($"{DateTime.Today.Date:dd.MM.yyyy}", font2, Brushes.Black, einzug, nextposition);
nextposition += (int)height_font2;
g.DrawString("Artikel", font2, Brushes.Black, einzug, nextposition + 20);
nextposition += 20 + (int)height_font1;
g.DrawString("Rekl/NW/Stand/Inv", font3, Brushes.Black, bitmap.Width - g.MeasureString("Rekl/NW/Stand/Inv", font3).Width, nextposition + 10);
nextposition += (int)height_font2;
nextposition += 20 + (int)height_font2;
foreach (var kvp in dictionary)
switch (dictionary)
{
case Dictionary<int, int> dictInt:
g.DrawString("REKL", font2, Brushes.Black, bitmap.Width - g.MeasureString("REKL", font2).Width, nextposition);
nextposition += (int)height_font2;
foreach (var kvp in dictInt)
{
KundeArtikel kndart = KundeArtikel.GetItem(kvp.Key);
Artikel _artikel = Artikel.GetArtikel(null, kndart.ArtikelID);
string artikelKey = _artikel.Bezeichnung; // z.B. "ART1"
int reklAnzahl = kvp.Value; // z.B. [3, 0, 5]
string shortName = _artikel.Short;
float bestandWidth = g.MeasureString($"{reklAnzahl}", font2).Width;
g.DrawString($"{shortName}", font2, Brushes.Black, einzug, nextposition);
nextposition += (int)height_font2;
g.DrawString($"{reklAnzahl}", font2, Brushes.Black, bitmap.Width - bestandWidth, nextposition);
nextposition += (int)height_font2;
}
break;
case Dictionary<int, int[]> dictArray:
g.DrawString("IST/SOLL", font2, Brushes.Black, bitmap.Width - g.MeasureString("IST/SOLL", font2).Width, nextposition);
nextposition += (int)height_font2;
foreach (var kvp in dictArray)
{
KundeArtikel kndart = KundeArtikel.GetItem(kvp.Key);
Artikel _artikel = Artikel.GetArtikel(null, kndart.ArtikelID);
string artikelKey = _artikel.Bezeichnung; // z.B. "ART1"
int[] artbestand = kvp.Value; // z.B. [3, 0, 5]
int ist = artbestand[0] + artbestand[1];
if (ist == 0 & artbestand[2] == 0) ist = artbestand[3];
string shortName = _artikel.Short;
float bestandWidth = g.MeasureString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/({artbestand[2].ToString()})/{artbestand[3].ToString()}", font3).Width;
g.DrawString($"{shortName}", font3, Brushes.Black, einzug, nextposition);
if (artbestand[2] < 0) g.DrawString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/({artbestand[2].ToString()})/{artbestand[3].ToString()}", font3, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
else g.DrawString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/{artbestand[2].ToString()}/{artbestand[3].ToString()}", font3, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
nextposition += (int)height_font1;
float bestandWidth = g.MeasureString($"{ist}/({artbestand[2]})", font2).Width;
g.DrawString($"{shortName}", font2, Brushes.Black, einzug, nextposition);
nextposition += (int)height_font2;
if (artbestand[2] < 0) g.DrawString($"{ist}/({artbestand[2]})", font2, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
else g.DrawString($"{ist}/{artbestand[2]}", font2, Brushes.Black, bitmap.Width - bestandWidth, nextposition);
nextposition += (int)height_font2;
}
break;
default:
throw new ArgumentException("Unbekannter Dictionary-Typ übergeben.");
}
Image img = bitmap;
return img;
}
public static DialogResult SonderEtikett_Drucken(Auftrag auftrag, Dictionary<int, int[]> dictionary)
public static DialogResult SonderEtikett_Drucken(int kundeID, object dictionary)
{
_auftrag = auftrag;
_dictionary = dictionary;
int x = auftrag.ContainerClean;
KundeID = kundeID;
//int x = auftrag.ContainerClean;
PrintDialog dialog = new PrintDialog();
PrintPreviewDialog preview = new PrintPreviewDialog();
@ -1165,7 +1191,7 @@ namespace Deckungsbeitrag
if (!printDocument.PrinterSettings.PrinterName.Contains(Properties.Settings.Default.Etikett_Drucker)) printDocument.DefaultPageSettings.PaperSize = new PaperSize("Etikett-Custom", 29, 90);
dialog.Document = printDocument;
dialog.Document.DocumentName = "SonderEtikett";
dialog.Document.DocumentName = "Sonder";
printDocument.Print();
@ -1204,7 +1230,7 @@ namespace Deckungsbeitrag
if (sender.ToString().Contains("Sonder"))
{
if (!inPreview) printed = true;
e.Graphics.DrawImage(SonderEtikett_Entwurf(_auftrag, _dictionary), e.PageBounds);
e.Graphics.DrawImage(SonderEtikett_Entwurf(KundeID, _dictionary), e.PageBounds);
}
if (sender.ToString().Contains("TourenListe"))
{
@ -1500,7 +1526,6 @@ namespace Deckungsbeitrag
chart1.ChartAreas[0].Position = new ElementPosition(0, 8, 100, 92);
// Gesamtmenge als einzelne Säule (links oder transparent)
//TODO: Gesamt soll immer 100% sein.
var serieGesamt = new Series("Gesamtmenge")
{
ChartType = SeriesChartType.StackedBar100,

View File

@ -97,7 +97,7 @@ namespace DatenDB
List<KundeArtikel> resultList = new List<KundeArtikel>();
NpgsqlCommand command = new NpgsqlCommand();
command.Connection = DatenbankConnection.GetConnection();
if (!string.IsNullOrWhiteSpace(kundeid)) command.CommandText = $"select {COLUMNS} from {TABLE} where kunde_id = {kundeid} order by reihung asc";
if (!string.IsNullOrWhiteSpace(kundeid)) command.CommandText = $"select {COLUMNS} from {TABLE} where kunde_id = {kundeid} and SUBSTRING(artikel_nr::text, 1, 1) = '6' order by reihung asc";
else command.CommandText = $"select {COLUMNS} from {TABLE} where artikel_id = {artikelID} order by artikel_nr";
NpgsqlDataReader reader = command.ExecuteReader();
while (reader.Read()) resultList.Add(new KundeArtikel(reader));

View File

@ -42,71 +42,87 @@ namespace Deckungsbeitrag
[DllImport("user32.dll")]
private static extern int GetSystemMetrics(int nIndex);
[DllImport("user32.dll", SetLastError = true)]
private static extern uint GetRawInputDeviceList(IntPtr pRawInputDeviceList, ref uint puiNumDevices, uint cbSize);
private const int SM_DIGITIZER = 94;
private const int SM_MAXIMUMTOUCHES = 95;
private const int SM_CONVERTIBLESLATEMODE = 125;
private const int RIM_TYPEKEYBOARD = 1;
[StructLayout(LayoutKind.Sequential)]
private struct RAWINPUTDEVICELIST
{
public IntPtr hDevice;
public uint dwType;
}
public static readonly bool HasTouchHardware = (GetSystemMetrics(SM_DIGITIZER) & 0x80) != 0;
public static readonly int TouchPoints = GetSystemMetrics(SM_MAXIMUMTOUCHES);
public static readonly bool IsTabletMode = GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 1;
/// <summary>
/// **Hauptmethode**: Touch FUNKTIONIERT (Hardware + aktiviert)
/// </summary>
public static bool IsTouchActive()
{
// 1. Registry: TouchGate = 0 → deaktiviert
if (IsRegistryDisabled()) return false;
// 2. TouchPoints > 0 UND System sagt "Touch ready"
if (TouchPoints <= 0) return false;
// 3. Windows Touch-Session aktiv? (SM_DIGITIZER bits)
int digitizer = GetSystemMetrics(SM_DIGITIZER);
bool touchReady = (digitizer & 0x00000001) != 0; // Integrated touch?
bool touchReady = (digitizer & 0x00000001) != 0;
bool penReady = (digitizer & 0x00000002) != 0;
return touchReady || penReady;
}
/// <summary>
/// Vollständig einsatzbereit
/// </summary>
public static bool IsTouchDeviceReady() => HasTouchHardware && IsTouchActive();
/// <summary>
/// Registry-Status
/// </summary>
private static bool IsRegistryDisabled()
// Prüft, ob ein Gerät vom Typ "Tastatur" vom System registriert ist
public static bool IsPhysicalKeyboardPresent()
{
RegistryKey key = null;
uint deviceCount = 0;
uint size = (uint)Marshal.SizeOf(typeof(RAWINPUTDEVICELIST));
if (GetRawInputDeviceList(IntPtr.Zero, ref deviceCount, size) != 0)
return false;
IntPtr pDevices = Marshal.AllocHGlobal((int)(size * deviceCount));
try
{
key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Wisp\TouchGate");
if (key != null)
if (GetRawInputDeviceList(pDevices, ref deviceCount, size) == uint.MaxValue)
return false;
for (int i = 0; i < deviceCount; i++)
{
object value = key.GetValue("TouchGate");
if (value != null && Convert.ToInt32(value) == 0)
RAWINPUTDEVICELIST device = (RAWINPUTDEVICELIST)Marshal.PtrToStructure(
new IntPtr(pDevices.ToInt64() + (size * i)), typeof(RAWINPUTDEVICELIST));
if (device.dwType == RIM_TYPEKEYBOARD)
return true;
}
return false;
}
catch
{
return false;
}
finally
{
if (key != null) key.Close();
Marshal.FreeHGlobal(pDevices);
}
return false;
}
private static bool IsRegistryDisabled()
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Wisp\TouchGate"))
{
if (key != null)
{
object value = key.GetValue("TouchGate");
return value != null && Convert.ToInt32(value) == 0;
}
}
/// <summary>
/// Debug-Status
/// </summary>
return false;
}
public static string GetStatus()
{
int digitizer = GetSystemMetrics(SM_DIGITIZER);
return $"Hardware: {HasTouchHardware}, Active: {IsTouchActive()}, Points: {TouchPoints}, RegistryDisabled: {IsRegistryDisabled()}, Digitizer: 0x{digitizer:X}";
return $"Hardware: {HasTouchHardware}, TouchActive: {IsTouchActive()}, Keyboard: {IsPhysicalKeyboardPresent()}, Points: {TouchPoints}, TabletMode: {IsTabletMode}";
}
}
static class Program
@ -123,6 +139,8 @@ namespace Deckungsbeitrag
//public static string vaultPath = @"N:\TECHNIK\Software\Wirl-Verwaltung\Feedback";
private static readonly string savePath = ConfigurationManager.AppSettings["DateiSavePfad"];
private static readonly bool istest = false;
public static bool istTouch = TouchHelper.IsTouchDeviceReady();
public static bool hatTastatur = TouchHelper.IsPhysicalKeyboardPresent();
/// <summary>

View File

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
[assembly: AssemblyVersion("1.1.0.7")]
[assembly: AssemblyFileVersion("1.1.0.7")]
[assembly: AssemblyVersion("1.1.0.8")]
[assembly: AssemblyFileVersion("1.1.0.8")]

View File

@ -34,37 +34,7 @@
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"OwnerKey" = "8:_99A1851DAB14095B2C6FFF6100D312B7"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -76,7 +46,37 @@
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_99A1851DAB14095B2C6FFF6100D312B7"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -124,31 +124,7 @@
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"OwnerKey" = "8:_8A953E0634B8757038749C9F77062056"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -160,7 +136,31 @@
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -214,13 +214,13 @@
"Entry"
{
"MsmKey" = "8:_65AC8F9F13B5E0ADCA662A6618010328"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_65AC8F9F13B5E0ADCA662A6618010328"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -268,19 +268,7 @@
"Entry"
{
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_D3E738B1E9D7C3C737CDD91DCC4DC37B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -292,7 +280,19 @@
"Entry"
{
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_D3E738B1E9D7C3C737CDD91DCC4DC37B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -346,37 +346,7 @@
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"OwnerKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -388,7 +358,37 @@
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -400,7 +400,7 @@
"Entry"
{
"MsmKey" = "8:_C2D67A4770D262B66069252CF1E903CF"
"OwnerKey" = "8:_D3E738B1E9D7C3C737CDD91DCC4DC37B"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -412,7 +412,7 @@
"Entry"
{
"MsmKey" = "8:_C2D67A4770D262B66069252CF1E903CF"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"OwnerKey" = "8:_D3E738B1E9D7C3C737CDD91DCC4DC37B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -436,13 +436,13 @@
"Entry"
{
"MsmKey" = "8:_E637243CDA02D043DD2BAED063790F80"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E637243CDA02D043DD2BAED063790F80"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -466,157 +466,7 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_848FCB2438E4DBC274C4D124CEB9562C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_16723AF5DFDEF26FC6A07BEB7D389737"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_65845AF9470C67B4E2216A46EFF4246C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_D3E738B1E9D7C3C737CDD91DCC4DC37B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_2DE2024BE0845063AAE50C820ED805AE"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_BDDC042CD8ACEF57F35D002490214D33"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_65AC8F9F13B5E0ADCA662A6618010328"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_99A1851DAB14095B2C6FFF6100D312B7"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_1B916DE951F447CD3C62E7AEBE228A3F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C2D67A4770D262B66069252CF1E903CF"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8A953E0634B8757038749C9F77062056"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_17ABCA3C569C9181F3FE3A46B8638164"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_E637243CDA02D043DD2BAED063790F80"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_70C791195E1E3B637AE8CB0DE5BB4EFB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_0014568666DC36A67BD4258FEDAE4805"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8208B2126E1B253A2E427D55D4E5F13A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_A2FA7AC58F6A16AB132434F8A00EA507"
"OwnerKey" = "8:_5CDE0A18B0E8657CBCF9143673DB464A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@ -628,7 +478,157 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_5CDE0A18B0E8657CBCF9143673DB464A"
"OwnerKey" = "8:_A2FA7AC58F6A16AB132434F8A00EA507"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8208B2126E1B253A2E427D55D4E5F13A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_0014568666DC36A67BD4258FEDAE4805"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_70C791195E1E3B637AE8CB0DE5BB4EFB"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C025D526FF076AA8036CB8B1A2BD888E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_E637243CDA02D043DD2BAED063790F80"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4C0EEC06451FEA61E39F79681578838C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_0B016AD02A79C43C243D615B3AD40570"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_17ABCA3C569C9181F3FE3A46B8638164"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8A953E0634B8757038749C9F77062056"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C2D67A4770D262B66069252CF1E903CF"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_1B916DE951F447CD3C62E7AEBE228A3F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_99A1851DAB14095B2C6FFF6100D312B7"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_8E444A9D7B7F9420CF44964B1EAE9AAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_4E92FDDD15B89BB89053E8A65FA73EAA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_65AC8F9F13B5E0ADCA662A6618010328"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_EF6D58F917144384701E1DBDFB979BD8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_125834DE4128EDE3F82BFC1A45B2ACD9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_BDDC042CD8ACEF57F35D002490214D33"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_2DE2024BE0845063AAE50C820ED805AE"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C92C21BE3984A4EC1BCD3A988C56652E"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_A41FC3BFD0E1CE905FCB1693E99348B8"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_D3E738B1E9D7C3C737CDD91DCC4DC37B"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_65845AF9470C67B4E2216A46EFF4246C"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_16723AF5DFDEF26FC6A07BEB7D389737"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_848FCB2438E4DBC274C4D124CEB9562C"
"MsmSig" = "8:_UNDEFINED"
}
}
@ -733,11 +733,6 @@
"AssemblyAsmDisplayName" = "8:AForge.Video, Version=2.2.5.0, Culture=neutral, PublicKeyToken=cbfb6e07d173c401, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_0014568666DC36A67BD4258FEDAE4805"
{
"Name" = "8:AForge.Video.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:AForge.Video.dll"
"TargetName" = "8:"
@ -764,11 +759,6 @@
"AssemblyAsmDisplayName" = "8:System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_0B016AD02A79C43C243D615B3AD40570"
{
"Name" = "8:System.Memory.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Memory.dll"
"TargetName" = "8:"
@ -795,11 +785,6 @@
"AssemblyAsmDisplayName" = "8:Npgsql, Version=4.1.14.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_125834DE4128EDE3F82BFC1A45B2ACD9"
{
"Name" = "8:Npgsql.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Npgsql.dll"
"TargetName" = "8:"
@ -826,11 +811,6 @@
"AssemblyAsmDisplayName" = "8:zxing.presentation, Version=0.16.11.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_16723AF5DFDEF26FC6A07BEB7D389737"
{
"Name" = "8:zxing.presentation.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:zxing.presentation.dll"
"TargetName" = "8:"
@ -857,11 +837,6 @@
"AssemblyAsmDisplayName" = "8:HarfBuzzSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_17ABCA3C569C9181F3FE3A46B8638164"
{
"Name" = "8:HarfBuzzSharp.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:HarfBuzzSharp.dll"
"TargetName" = "8:"
@ -888,11 +863,6 @@
"AssemblyAsmDisplayName" = "8:Microsoft.Bcl.HashCode, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_1B916DE951F447CD3C62E7AEBE228A3F"
{
"Name" = "8:Microsoft.Bcl.HashCode.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Bcl.HashCode.dll"
"TargetName" = "8:"
@ -919,11 +889,6 @@
"AssemblyAsmDisplayName" = "8:Spire.Barcode, Version=7.4.1.0, Culture=neutral, PublicKeyToken=663f351905198cb3, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_2DE2024BE0845063AAE50C820ED805AE"
{
"Name" = "8:Spire.Barcode.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Spire.Barcode.dll"
"TargetName" = "8:"
@ -970,11 +935,6 @@
"AssemblyAsmDisplayName" = "8:System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_4C0EEC06451FEA61E39F79681578838C"
{
"Name" = "8:System.Runtime.CompilerServices.Unsafe.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Runtime.CompilerServices.Unsafe.dll"
"TargetName" = "8:"
@ -1001,11 +961,6 @@
"AssemblyAsmDisplayName" = "8:System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_4E92FDDD15B89BB89053E8A65FA73EAA"
{
"Name" = "8:System.Text.Encodings.Web.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Text.Encodings.Web.dll"
"TargetName" = "8:"
@ -1052,11 +1007,6 @@
"AssemblyAsmDisplayName" = "8:System.Net.Sockets, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"ScatterAssemblies"
{
"_5CDE0A18B0E8657CBCF9143673DB464A"
{
"Name" = "8:System.Net.Sockets.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Net.Sockets.dll"
"TargetName" = "8:"
@ -1083,11 +1033,6 @@
"AssemblyAsmDisplayName" = "8:zxing, Version=0.16.11.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_65845AF9470C67B4E2216A46EFF4246C"
{
"Name" = "8:zxing.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:zxing.dll"
"TargetName" = "8:"
@ -1114,11 +1059,6 @@
"AssemblyAsmDisplayName" = "8:System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_65AC8F9F13B5E0ADCA662A6618010328"
{
"Name" = "8:System.ValueTuple.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.ValueTuple.dll"
"TargetName" = "8:"
@ -1145,11 +1085,6 @@
"AssemblyAsmDisplayName" = "8:System.Runtime.InteropServices.RuntimeInformation, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"ScatterAssemblies"
{
"_6A4E9AB7C92A8099AD635862468BFCBE"
{
"Name" = "8:System.Runtime.InteropServices.RuntimeInformation.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Runtime.InteropServices.RuntimeInformation.dll"
"TargetName" = "8:"
@ -1176,11 +1111,6 @@
"AssemblyAsmDisplayName" = "8:AForge.Video.DirectShow, Version=2.2.5.0, Culture=neutral, PublicKeyToken=61ea4348d43881b7, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_70C791195E1E3B637AE8CB0DE5BB4EFB"
{
"Name" = "8:AForge.Video.DirectShow.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:AForge.Video.DirectShow.dll"
"TargetName" = "8:"
@ -1207,11 +1137,6 @@
"AssemblyAsmDisplayName" = "8:AForge, Version=2.2.5.0, Culture=neutral, PublicKeyToken=c1db6ff4eaa06aeb, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_8208B2126E1B253A2E427D55D4E5F13A"
{
"Name" = "8:AForge.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:AForge.dll"
"TargetName" = "8:"
@ -1238,11 +1163,6 @@
"AssemblyAsmDisplayName" = "8:VirtualKeyboard, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_848FCB2438E4DBC274C4D124CEB9562C"
{
"Name" = "8:VirtualKeyboard.exe"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:VirtualKeyboard.exe"
"TargetName" = "8:"
@ -1269,11 +1189,6 @@
"AssemblyAsmDisplayName" = "8:System.Threading.Tasks.Extensions, Version=4.2.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_8A953E0634B8757038749C9F77062056"
{
"Name" = "8:System.Threading.Tasks.Extensions.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Threading.Tasks.Extensions.dll"
"TargetName" = "8:"
@ -1300,11 +1215,6 @@
"AssemblyAsmDisplayName" = "8:System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_8E444A9D7B7F9420CF44964B1EAE9AAA"
{
"Name" = "8:System.IO.Pipelines.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.IO.Pipelines.dll"
"TargetName" = "8:"
@ -1331,11 +1241,6 @@
"AssemblyAsmDisplayName" = "8:Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_99A1851DAB14095B2C6FFF6100D312B7"
{
"Name" = "8:Microsoft.Extensions.Logging.Abstractions.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Extensions.Logging.Abstractions.dll"
"TargetName" = "8:"
@ -1362,11 +1267,6 @@
"AssemblyAsmDisplayName" = "8:System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"ScatterAssemblies"
{
"_A2FA7AC58F6A16AB132434F8A00EA507"
{
"Name" = "8:System.Net.Http.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Net.Http.dll"
"TargetName" = "8:"
@ -1393,11 +1293,6 @@
"AssemblyAsmDisplayName" = "8:System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_A41FC3BFD0E1CE905FCB1693E99348B8"
{
"Name" = "8:System.Diagnostics.DiagnosticSource.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Diagnostics.DiagnosticSource.dll"
"TargetName" = "8:"
@ -1424,11 +1319,6 @@
"AssemblyAsmDisplayName" = "8:ObjectListView, Version=2.9.3.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_BDDC042CD8ACEF57F35D002490214D33"
{
"Name" = "8:ObjectListView.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:ObjectListView.dll"
"TargetName" = "8:"
@ -1455,11 +1345,6 @@
"AssemblyAsmDisplayName" = "8:System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_C025D526FF076AA8036CB8B1A2BD888E"
{
"Name" = "8:System.Buffers.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Buffers.dll"
"TargetName" = "8:"
@ -1486,11 +1371,6 @@
"AssemblyAsmDisplayName" = "8:Microsoft.Bcl.AsyncInterfaces, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_C2D67A4770D262B66069252CF1E903CF"
{
"Name" = "8:Microsoft.Bcl.AsyncInterfaces.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Bcl.AsyncInterfaces.dll"
"TargetName" = "8:"
@ -1517,11 +1397,6 @@
"AssemblyAsmDisplayName" = "8:System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_C92C21BE3984A4EC1BCD3A988C56652E"
{
"Name" = "8:System.Collections.Immutable.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Collections.Immutable.dll"
"TargetName" = "8:"
@ -1548,11 +1423,6 @@
"AssemblyAsmDisplayName" = "8:System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_D3E738B1E9D7C3C737CDD91DCC4DC37B"
{
"Name" = "8:System.Threading.Channels.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Threading.Channels.dll"
"TargetName" = "8:"
@ -1579,11 +1449,6 @@
"AssemblyAsmDisplayName" = "8:System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_E637243CDA02D043DD2BAED063790F80"
{
"Name" = "8:System.Numerics.Vectors.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Numerics.Vectors.dll"
"TargetName" = "8:"
@ -1610,11 +1475,6 @@
"AssemblyAsmDisplayName" = "8:System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_EF6D58F917144384701E1DBDFB979BD8"
{
"Name" = "8:System.Text.Json.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:System.Text.Json.dll"
"TargetName" = "8:"
@ -1690,15 +1550,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:SetupVerwaltung"
"ProductCode" = "8:{6D13C83E-FAD0-4B29-BBEC-E1ABCEAAFB03}"
"PackageCode" = "8:{32CA7B7D-CFC8-41EA-A986-11D890FE499A}"
"ProductCode" = "8:{A52B48F7-18F7-4B26-87AF-63C7BADA67C1}"
"PackageCode" = "8:{A8177456-8491-4BFE-ADEF-5DA58C61D3D4}"
"UpgradeCode" = "8:{2DC7CE56-8D1C-42EB-B326-2E887EBB7F5A}"
"AspNetVersion" = "8:"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.1.07"
"ProductVersion" = "8:1.1.08"
"Manufacturer" = "8:Kilian Wirl GmbH"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"

View File

@ -59,7 +59,6 @@ namespace Deckungsbeitrag.UserControls
bildDateiname = $"feedback-{timestamp}.png";
string bildPath = Path.Combine("N:\\TECHNIK\\Software\\Wirl-Verwaltung\\Feedback", bildDateiname);
//TODO: Warum der falsche Path? Immer mit \\
string tempPath = Path.Combine(Path.GetTempPath(), Path.GetFileName(bildPath));
try

View File

@ -220,7 +220,7 @@ namespace Deckungsbeitrag.UserControls
this.auftrag.Liefertag = dTPLieferDat.Value;
foreach (DataGridViewRow row in this.dGArtikel.Rows)
{
// KundeArtikel updaten. Neuen Stand eintragen, Reklamation & Fehlmenge auf Null setzten und Korrektur als InventruAusgleich speichern.
// KundeArtikel updaten. Neuen Stand eintragen, Reklamation & Fehlmenge auf Null setzten und Korrektur als InventurAusgleich speichern.
KundeArtikel art = (KundeArtikel)artikelListe[row.Index];
art.Reklamation = 0;
@ -468,6 +468,7 @@ namespace Deckungsbeitrag.UserControls
DataGridView_GetNewSize(this.dGArtikel);
this.buttonFreigeben.Visible = true;
this.labelInvText.Visible = false;
if (this.user.Rolle == BenutzerRolle.Verwaltung || this.user.Rolle == BenutzerRolle.Admin) Tosave = true;
}
}
@ -485,11 +486,10 @@ namespace Deckungsbeitrag.UserControls
if (row.Cells[j].Value == null) row.Cells[j].Value = 0;
iststand += int.TryParse(row.Cells[j].Value.ToString(), out int r) ? r : 0;
}
if (e.ColumnIndex >= 7 || e.ColumnIndex == 2)
{
row.Cells[5].Value = sollstand - fehlmenge - iststand;
row.Cells[6].Value = artikelListe[e.RowIndex].Korrektur = sollstand - iststand;
row.Cells[6].Value = artikelListe[e.RowIndex].Korrektur = sollstand - iststand - fehlmenge; //DONE: INV-Ausgleich (Korrektur) = Sollstand - Iststand (Bei Kunde & Lieferungen) - fehlmenge (Reklamation & Nachwäsche)
}
}
else return;

View File

@ -94,4 +94,3 @@ namespace Deckungsbeitrag.UserControls
}
}
}
//TODO: Design des Controls anpassen. Eventuell im Designer erstellen.

View File

@ -1,15 +1,15 @@
=====================================
NEUIGKEITEN - Version 1.1.0.7
NEUIGKEITEN - Version 1.1.0.8
=====================================
Build-Info:
- Build-Typ: Release Build
- Erledigte TODOs: 6
- Offene TODOs: 25
- Install-Reminders: 1
- Changes: 29
- Erledigte TODOs: 7
- Offene TODOs: 18
- Install-Reminders: 0
- Changes: 31
=== ✨ CHANGES (29) ===
=== ✨ CHANGES (31) ===
## ArtikelVW.cs ##
- ✨ Reklamation als Spalte hinzugefügt und Anzeigen implementiert. Sowohl bei KundeArtikel als auch bei NW_Artikel.
@ -20,8 +20,10 @@ Build-Info:
- ✨ 2. Änderungen werden nur gespeichert wenn ein Etikett gedruckt wurde.
- ✨ 3. Abschließen nur möglich wenn alle Artikel auf 0 sind (Checked) und gespeichert wurde.
- ✨ Bei Druckabbruch wird die geänderte Zahl NICHT zurückgesetzt. (Das muss händisch erfolgen)
- ✨ Beim Speichern ohne Abschließen schließt sich das Fenster nach dem Speichern.
- ✨ Wenn die reduzierte Anzahl bei SOLL-Verminderung nicht negativ ist, wird diese negativ gemacht. So wird ein möglicher Fehler ausgebessert.
- ✨ Wenn die Zahlen zurückgesetzt werden sollen, muss AuftragDetail geschlossen werden.
- ✨ Wenn ein Artikel vollständig hergerichtet wird, muss er nur abgehackt werden. Den Rest macht der Computer.
## Expedit.cs ##
@ -67,8 +69,7 @@ Build-Info:
- ✨ Wenn der Lieferrhythmus geändert wird, werden KundenControls an falschen Tagen gelöscht.
=== ⚙️ INSTALL-REMINDER (1) ===
- ⚙️ DB anpassen. (Priority in Auftrag etc.) [Auftrag.cs]
Keine Install-Reminder vorhanden ✅
Installation: 29.04.2026 17:53
Installation: 05.05.2026 13:36
=====================================

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Buildnummer
// Revision
//
[assembly: AssemblyVersion("1.0.1.2")]
[assembly: AssemblyFileVersion("1.0.1.2")]
[assembly: AssemblyVersion("1.0.1.3")]
[assembly: AssemblyFileVersion("1.0.1.3")]

View File

@ -24,7 +24,7 @@ namespace VirtualKeyboard
new Button[14], new Button[14], new Button[14], new Button[14], new Button[8]};
// **Echtes QWERTZ-Layout** (5 Reihen + Funktion/Steuerung)
private string[] qwertzRows = {
" 1234567890ß⌫↵", // Ziffernreihe
"?1234567890ß⌫↵", // Ziffernreihe
"↔qwertzuiopü+", // Hauptbuchstaben 1 (versetzt)
" asdfghjklöä#", // Hauptbuchstaben 2 (versetzt)
"⇧<yxcvbnm,.-⇧", // Hauptbuchstaben 3 (Y statt Z, versetzt)
@ -71,7 +71,6 @@ namespace VirtualKeyboard
private void InitializeKeyboard()
{
//int[] rowWidths = { 800, 800, 800, 800, 800 }; // Versetzte Reihenbreiten
int btnHeight = 60, spacing = 4;
int startY = 10;
@ -185,8 +184,8 @@ namespace VirtualKeyboard
}
if (isShift && char.IsLetter(ch)) ch = char.ToUpper(ch);
targetTextBox.Focus();
targetTextBox.SelectionStart = targetTextBox.Text.Length;
//targetTextBox.Focus();
//targetTextBox.SelectionStart = targetTextBox.Text.Length;
}
private void ToggleMode_Click()
@ -229,6 +228,7 @@ namespace VirtualKeyboard
SetupRealNumPad();
}
this.Refresh();
targetTextBox.Focus();
}
private void HideAllQwertzButtons()
{
@ -243,8 +243,6 @@ namespace VirtualKeyboard
}
private void SetupRealNumPad()
{
int y = 10, xBase = 10, btnWidth = 70, btnHeight = 55, spacing = 8;
if (isCalc) this.Size = new Size((btnWidth + spacing) * 4 + xBase, (btnHeight + spacing) * 5 + xBase);
if (isNumeric) this.Size = new Size((btnWidth + spacing) * 3 + xBase, (btnHeight + spacing) * 4 + xBase);