wareneingang from bestellung with kommentar

This commit is contained in:
OpenXE 2024-01-16 11:06:05 +01:00
parent c0de40ac86
commit 5abde88596
2 changed files with 251 additions and 102 deletions

View File

@ -252,7 +252,7 @@ class Verbindlichkeit {
$preise = array ( $preise = array (
'<input type="number" name="preise[]" step="0.00001" value="', '<input type="number" name="preise[]" step="0.00001" value="',
['sql' => $this->app->erp->FormatMenge("COALESCE(bp.preis,0)",2)], ['sql' => $this->app->erp->FormatMenge("COALESCE(bp.preis,0)",5)],
'" min="0"', '" min="0"',
'"/>' '"/>'
); );

View File

@ -126,19 +126,30 @@ class Wareneingang {
) )
"; ";
$input_for_menge = "CONCAT( $auswahl = array (
'<input type = \"number\" min=\"0\"', '<input type=\"text\" name=\"bestellposition_ids[]\" value=\"',
' value=\"', ['sql' => 'bp.id'],
$vorschlag, '" hidden/>',
'\"', ['sql' => 'bp.bestellnummer']
' name=\"menge_', );
bp.id,
'\" value=\"', $input_for_menge = array(
'\" style=\"text-align:right; width:100%\">', '<input type = \"number\" min=\"0\"',
'</input>' ' value=\"',
)"; '\"',
' name=\"mengen[]\"',
' style=\"text-align:right; width:100%\">',
'</input>'
);
if ($wareneingangauftragzubestellung) { $input_for_bemerkung = array(
'<input type = \"text\"',
' name=\"bemerkungen[]\"',
' style=\"text-align:right; width:100%\">',
'</input>'
);
/* if ($wareneingangauftragzubestellung) {
$heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Auftrag', 'Menge', 'Eingabe', ''); $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Auftrag', 'Menge', 'Eingabe', '');
$width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%', '5%', '5%'); $width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%', '5%', '5%');
$findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr', $findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr',
@ -155,23 +166,147 @@ class Wareneingang {
IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('<br>AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''), IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('<br>AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''),
IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('<br>Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'') IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('<br>Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'')
)", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', "if((SELECT COUNT(auf2.id) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT auf2.belegnr FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ORDER BY belegnr LIMIT 1),'-' )"); )", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', "if((SELECT COUNT(auf2.id) FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ) > 0,(SELECT auf2.belegnr FROM auftrag auf2 INNER JOIN auftrag_position ap2 ON auf2.id = ap2.auftrag WHERE bp.auftrag_position_id = ap2.id ORDER BY belegnr LIMIT 1),'-' )");
} else { } else */ {
$heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Lieferdatum', 'Projekt', 'Menge', 'Geliefert', 'Offen', 'Eingabe', 'Aktion'); $heading = array('Lieferant-Art.-Nr.',
$width = array('5%', '5%', '5%', '30%', '5%', '5%', '5%', '5%', '5%', '5%', '5%'); 'Art.-Nummer',
$findcols = array('bp.bestellnummer', 'art.nummer', 'b.belegnr', 'Bestellung',
"CONCAT(art.name_de,'<br>Bei Lieferant: ',bp.bezeichnunglieferant, 'Beschreibung',
IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('<br>Interne Bemerkung: ',b.internebemerkung),''), 'Lieferdatum',
IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('<br>Interne Bezeichnung: ',b.internebezeichnung), ''), 'Projekt',
IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('<br>AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''), 'Menge',
IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('<br>Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'') 'Geliefert',
)", 'Offen',
"if(bp.lieferdatum,bp.lieferdatum,'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', $this->app->erp->FormatMenge("bp.menge - bp.geliefert"), 'bp.id','bp.id'); 'Eingabe',
$searchsql = array('bp.bestellnummer', 'art.nummer', 'b.belegnr', "CONCAT(art.name_de,'<br>Bei Lieferant: ',bp.bezeichnunglieferant, '<i style=color:#999>', 'Bemerkung',
IF(b.internebemerkung != '' AND b.internebemerkung IS NOT NULL, CONCAT('<br>Interne Bemerkung: ',b.internebemerkung),''), ''
IF(b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL, CONCAT('<br>Interne Bezeichnung: ',b.internebezeichnung), ''), );
IF(b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL, CONCAT('<br>AB Nummer Lieferant: ',b.bestellungbestaetigtabnummer), ''), $width = array(
IF(b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00', CONCAT('<br>Best. Lieferdatum: ',DATE_FORMAT(b.bestaetigteslieferdatum, '%d.%m.%Y')),'') '1%',
,'</i>')", "if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort')", 'p.abkuerzung', 'bp.menge', 'bp.geliefert', $this->app->erp->FormatMenge("bp.menge - bp.geliefert"), 'art.ean', 'art.herstellernummer'); '1%',
'1%',
'25%',
'1%',
'1%',
'1%',
'1%',
'1%',
'1%',
'10%',
'1%'
);
$findcols = array(
'bp.bestellnummer',
'art.nummer',
'b.belegnr',
"CONCAT(
art.name_de,
'<br>Bei Lieferant: ',
bp.bezeichnunglieferant,
IF(
b.internebemerkung != '' AND b.internebemerkung IS NOT NULL,
CONCAT(
'<br>Interne Bemerkung: ',
b.internebemerkung
),
''
),
IF(
b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL,
CONCAT(
'<br>Interne Bezeichnung: ',
b.internebezeichnung
),
''
),
IF(
b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL,
CONCAT(
'<br>AB Nummer Lieferant: ',
b.bestellungbestaetigtabnummer
),
''
),
IF(
b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00',
CONCAT(
'<br>Best. Lieferdatum: ',
DATE_FORMAT(
b.bestaetigteslieferdatum,
'%d.%m.%Y'
)
),
''
)
)",
"if(
bp.lieferdatum,
bp.lieferdatum,
'sofort'
)", 'p.abkuerzung',
'bp.menge',
'bp.geliefert',
$this->app->erp->FormatMenge("bp.menge - bp.geliefert"),
'bp.id',
'bp.id',
'bp.id'
);
$searchsql = array('bp.bestellnummer',
'art.nummer',
'b.belegnr',
"CONCAT(
art.name_de,
'<br>Bei Lieferant: ',
bp.bezeichnunglieferant,
'<i style=color:#999>',
IF(
b.internebemerkung != '' AND b.internebemerkung IS NOT NULL,
CONCAT(
'<br>Interne Bemerkung: ',
b.internebemerkung
),
''
),
IF(
b.internebezeichnung != '' AND b.internebezeichnung IS NOT NULL,
CONCAT(
'<br>Interne Bezeichnung: ',
b.internebezeichnung
),
''
),
IF(
b.bestellungbestaetigtabnummer != '' AND b.bestellungbestaetigtabnummer IS NOT NULL,
CONCAT(
'<br>AB Nummer Lieferant: ',
b.bestellungbestaetigtabnummer
),
''
),
IF(
b.bestaetigteslieferdatum != '' AND b.bestaetigteslieferdatum IS NOT NULL AND b.bestaetigteslieferdatum != '0000-00-00',
CONCAT(
'<br>Best. Lieferdatum: ',
DATE_FORMAT(
b.bestaetigteslieferdatum,
'%d.%m.%Y'
)
),
''
),
'</i>'
)",
"IF(
bp.lieferdatum,
DATE_FORMAT(bp.lieferdatum, '%d.%m.%Y'),
'sofort'
)",
'p.abkuerzung',
'bp.menge',
'bp.geliefert',
$this->app->erp->FormatMenge("bp.menge - bp.geliefert"),
'art.ean',
'art.herstellernummer'
);
} }
$alignright = array(7, 8, 9); $alignright = array(7, 8, 9);
@ -216,19 +351,29 @@ class Wareneingang {
)"; )";
} }
// SQL statement // SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',art.id,'\" tabindex=\"-1\">',art.nummer,'</a>'), b.belegnr as `Bestellung`, $sql = "
$colBeschreibung as beschreibung, SELECT SQL_CALC_FOUND_ROWS
if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt, bp.id,
" . $this->app->erp->FormatMenge('bp.menge') . ", " . $this->app->erp->FormatMenge('bp.geliefert') . ", ".$this->app->erp->ConcatSQL($auswahl).",
" . $this->app->erp->FormatMenge('bp.menge - bp.geliefert') . " as offen, CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',art.id,'\" tabindex=\"-1\">',art.nummer,'</a>'),
".$input_for_menge.", b.belegnr as `Bestellung`,
bp.id $colBeschreibung as beschreibung,
FROM bestellung_position bp if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum,
INNER JOIN bestellung b ON bp.bestellung=b.id p.abkuerzung as projekt,
$rdJoin ".$this->app->erp->FormatMenge('bp.menge').",
INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel ".$this->app->erp->FormatMenge('bp.geliefert').",
LEFT JOIN projekt p ON b.projekt=p.id"; ".$this->app->erp->FormatMenge('bp.menge-bp.geliefert')." as offen,
if ($wareneingangauftragzubestellung) { ".$this->app->erp->ConcatSQL($input_for_menge).",
".$this->app->erp->ConcatSQL($input_for_bemerkung).",
bp.id
FROM bestellung_position bp
INNER JOIN bestellung b ON bp.bestellung=b.id
$rdJoin
INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel
LEFT JOIN projekt p ON b.projekt=p.id
";
/* if ($wareneingangauftragzubestellung) {
$sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, art.nummer, b.belegnr as `Bestellung`, $sql = "SELECT SQL_CALC_FOUND_ROWS bp.id, bp.bestellnummer, art.nummer, b.belegnr as `Bestellung`,
$colBeschreibung as beschreibung, $colBeschreibung as beschreibung,
if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt, if(bp.lieferdatum,DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, p.abkuerzung as projekt,
@ -241,7 +386,7 @@ class Wareneingang {
$rdJoin $rdJoin
INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel INNER JOIN artikel art ON art.id=bp.artikel $lagerartikel
LEFT JOIN projekt p ON b.projekt=p.id "; LEFT JOIN projekt p ON b.projekt=p.id ";
} }*/
$where = " $where = "
b.adresse='$adresse' AND b.adresse='$adresse' AND
@ -2007,68 +2152,72 @@ class Wareneingang {
break; break;
case 'hinzufuegen': case 'hinzufuegen':
$menge_input = $this->app->Secure->GetPOSTArray();
$mengen = array(); $bestellposition_ids = $this->app->Secure->GetPOST('bestellposition_ids');
$mengen = $this->app->Secure->GetPOST('mengen');
$bemerkungen = $this->app->Secure->GetPOST('bemerkungen');
$msg = ""; $msg = "";
foreach ($menge_input as $key => $menge) { foreach ($bestellposition_ids as $key => $bestellposition) {
if ((strpos($key,'menge_') === 0) && ($menge !== '')) { $menge = $mengen[$key];
$bestellposition = substr($key,'6'); $bemerkung = $bemerkungen[$key];
if ($menge > 0) { if ($menge <= 0) {
// Gather info bestellung continue;
$bparr = $this->app->DB->SelectRow("SELECT bp.artikel, a.nummer, b.projekt, b.belegnr, bp.vpe, bp.menge FROM bestellung b INNER JOIN bestellung_position bp ON bp.bestellung = b.id INNER JOIN artikel a ON bp.artikel = a.id WHERE bp.id='$bestellposition' LIMIT 1"); }
$artikel = $bparr['artikel'];
$artikel_nr = $bparr['nummer'];
$projekt = $bparr['projekt'];
$bestellung_belegnr = $bparr['belegnr'];
$vpe = $bparr['vpe'];
$menge_bestellung = $bparr['menge'];
// Check existing preliminary value
$sql = "SELECT id, menge FROM paketdistribution WHERE paketannahme = ".$id." AND bestellung_position = ".$bestellposition." AND vorlaeufig = 1 LIMIT 1";
$preliminary = $this->app->DB->SelectRow($sql);
if (empty($preliminary)) { // Gather info bestellung
$sql = "INSERT INTO paketdistribution( $bparr = $this->app->DB->SelectRow("SELECT bp.artikel, a.nummer, b.projekt, b.belegnr, bp.vpe, bp.menge FROM bestellung b INNER JOIN bestellung_position bp ON bp.bestellung = b.id INNER JOIN artikel a ON bp.artikel = a.id WHERE bp.id='$bestellposition' LIMIT 1");
id, $artikel = $bparr['artikel'];
bearbeiter, $artikel_nr = $bparr['nummer'];
zeit, $projekt = $bparr['projekt'];
paketannahme, $bestellung_belegnr = $bparr['belegnr'];
adresse, $vpe = $bparr['vpe'];
artikel, $menge_bestellung = $bparr['menge'];
menge,
vpe, // Check existing preliminary value
etiketten, $sql = "SELECT id, menge FROM paketdistribution WHERE paketannahme = ".$id." AND bestellung_position = ".$bestellposition." AND vorlaeufig = 1 LIMIT 1";
bemerkung, $preliminary = $this->app->DB->SelectRow($sql);
bestellung_position,
vorlaeufig if (empty($preliminary)) {
) $sql = "INSERT INTO paketdistribution(
VALUES( id,
'', bearbeiter,
'" . $this->app->User->GetName() . "', zeit,
NOW(), paketannahme,
'$id', adresse,
'', artikel,
'$artikel', menge,
'$menge', vpe,
'$vpe', etiketten,
'', bemerkung,
'', bestellung_position,
'$bestellposition', vorlaeufig
1 )
)"; VALUES(
$this->app->DB->Insert($sql); '',
} else { '" . $this->app->User->GetName() . "',
$menge = $menge + $preliminary['menge']; NOW(),
if ($menge > $bparr['menge']-$bparr['geliefert']) { '$id',
$menge = $bparr['menge']-$bparr['geliefert']; '',
} '$artikel',
$sql = "UPDATE paketdistribution SET menge = ".$menge." WHERE id = ".$preliminary['id']; '$menge',
$this->app->DB->Insert($sql); '$vpe',
} '',
} '".$this->app->DB->real_escape_string($bemerkung)."',
'$bestellposition',
1
)";
$this->app->DB->Insert($sql);
} else {
$menge = $menge + $preliminary['menge'];
if ($menge > $bparr['menge']-$bparr['geliefert']) {
$menge = $bparr['menge']-$bparr['geliefert'];
}
$sql = "UPDATE paketdistribution SET menge = ".$menge.", bemerkung = '".$this->app->DB->real_escape_string($bemerkung)."' WHERE id = ".$preliminary['id'];
$this->app->DB->Insert($sql);
} }
} }
break; break;