63 Commits
Author SHA1 Message Date
OpenXE c46587c49f Zahlungseingang Minidetail hacked rechnung, gutschrift 2022-11-22 12:39:07 +01:00
OpenXE 17fa438529 Produktion show no available material when no lager selected, Lager renamed Materiallager 2022-11-18 16:58:16 +01:00
OpenXE 14e64b8f4b Produktion Lager verfuegbar alle 2022-11-18 16:22:34 +01:00
OpenXE df028888e9 Produktion remove old msg on submit 2022-11-18 16:14:02 +01:00
OpenXE 625b9627e8 Produktion minor bugfixes 2022-11-17 17:56:58 +01:00
OpenXE 3ee518af03 Produktion ziellagerplatz, use lagerplatz of artikel or produktion 2022-11-16 12:17:16 +00:00
OpenXE 8518e327aa Produktion cosmetic 2022-11-15 16:40:37 +00:00
OpenXE 84cdd8754a Produktion Protokoll 2022-11-15 16:24:21 +00:00
OpenXE 7c468dbced Produktion minidetail 2022-11-15 14:50:59 +00:00
OpenXE ba31fc62cf Produktion copy 2022-11-15 11:30:25 +00:00
OpenXE f6a1315192 Produktion go to edit after new item 2022-11-15 09:16:58 +00:00
OpenXE c219c32212 Bugfix Produktion new item 2022-11-11 17:07:42 +00:00
OpenXE e1b8b7864f Produktion filter list 2022-11-11 15:14:59 +00:00
OpenXE 822960b9f0 Bugfix Produktion refresh all icons on list action 2022-11-11 15:22:04 +01:00
OpenXE 0fef7146c6 Produktion refresh all icons on list action 2022-11-11 14:16:46 +00:00
OpenXE 27d48a55bb Produktion adjust reservation if there is scrap, fixed icons TBD: cronjob for icon update 2022-11-10 21:42:53 +00:00
OpenXE 06dbb9b8b8 Produktion improvement using functions, production progress with reserved quantity 2022-11-10 19:48:34 +00:00
OpenXE 99d5804ffa Added user edit check DisableModuls 2022-11-10 16:00:25 +00:00
OpenXE c601ac17df Changed permissiondenied page from Xentral to OpenXE 2022-11-10 15:39:24 +00:00
OpenXE 3d37049ea1 Produktion menge anpassen 2022-11-10 12:08:30 +01:00
OpenXE 1bf8f567b4 Bugfix Produktion reservieren 2022-11-10 10:32:03 +01:00
OpenXE 39e741a595 Bugfix Produktion teilproduktion preserve old values, bugfix list view artikel name 2022-11-10 10:10:04 +01:00
OpenXE e2120d1862 Bugfix Produktion auslagern 2022-11-09 17:19:20 +01:00
OpenXE 8c67d97728 Produktion teilen, leeren 2022-11-09 14:48:09 +00:00
OpenXE 3b804ef745 Produktion Teilproduktion WIP 2022-11-08 22:22:27 +00:00
OpenXE aea469320f Bugfix Produktion material per artikel 2022-11-08 15:52:33 +01:00
OpenXE a9cab336d0 Lager reservierungen added column Artikelnummer 2022-11-07 18:15:10 +00:00
OpenXE 4b27887dd2 Bugfix Produktuion display of stock numbers 2022-11-07 17:09:19 +00:00
OpenXE 230d1b03f2 module creator added alignright 2022-11-07 15:54:57 +00:00
OpenXE 8c559bf5cf Produktion column alignment of numbers 2022-11-07 15:52:16 +00:00
OpenXE ef8b6f7a1f Bugfix produktion list 2022-11-07 16:23:16 +01:00
OpenXE 348d946637 Bugfix intial produktion status 2022-11-07 16:08:25 +01:00
OpenXE cadbf08376 Produktion show open quantities 2022-11-07 16:05:56 +01:00
OpenXE 68723b7c4b Bugfix Produktion number format 2022-11-07 14:00:51 +00:00
OpenXE e6188d9153 Bugfix Produktion list artikel 2022-11-07 13:28:35 +00:00
OpenXE ea5ac90b13 Bugfix Produktion empty status 2022-11-07 11:29:43 +00:00
OpenXE 20c64a97ea module_creator with column selection 2022-11-07 10:11:33 +00:00
OpenXE 8032bf779a Merge branch 'master' into develop 2022-11-06 20:17:17 +00:00
OpenXE ed5d1690ef Bugfix Produktion icons 2022-11-06 18:46:57 +00:00
OpenXE c0380142ba WIP Produktion edit postions 2022-11-06 18:42:42 +00:00
OpenXE cfbc602443 WIP Produktion material needed per item 2022-11-06 15:18:54 +00:00
OpenXE e249d5a715 WIP Produktion formatting 2022-11-06 15:06:13 +00:00
OpenXE e39f56cb24 Produktion Icons sql for angelegt, abgeschlossen, storniert 2022-11-06 11:59:31 +00:00
OpenXE 411ab85359 WIP Produktion process with stock removal, reservation and stock adding 2022-11-04 15:39:12 +00:00
OpenXE 9f616fc0e5 Produktion WIP list view improvements 2022-11-03 21:48:12 +00:00
OpenXE 2e6d57e93a Produktion WIP reservieren bugfix 2022-11-03 21:30:14 +00:00
OpenXE dc6827fc1e Produktion WIP aggregated view on material items 2022-11-03 14:49:42 +00:00
OpenXE 13d776750e Produktion WIP reservieren 2022-11-03 12:23:53 +00:00
OpenXE 20e69d9291 Bugfix datei_list 2022-11-01 10:02:10 +00:00
OpenXE 202892b9da Produktion UI minor changes 2022-11-01 09:28:20 +00:00
OpenXE d774d9d349 added id field to module_creator inputs, inputs size 20 2022-10-28 10:05:39 +00:00
OpenXE a277250ee0 Produktion UI WIP 2022-10-27 15:55:24 +00:00
OpenXE f0b1f1731e Merge remote-tracking branch 'github/develop' into develop 2022-10-26 14:13:08 +00:00
OpenXE d5f60e73c1 Produktion edit view with positions 2022-10-26 13:52:50 +00:00
OpenXE-ERP 2b5d01b52a Merge pull request #25 from 0xAF7/add-gitignore
Add gitignore file
2022-10-26 11:46:54 +02:00
0xAF7 7e73d30805 Add gitignore file 2022-10-25 20:29:30 +02:00
OpenXE feddd00896 Bugfix module creator dropnbox 2022-10-22 12:33:28 +00:00
OpenXE d1991b3f72 Production monitor icons 2022-10-22 12:31:37 +00:00
OpenXE 880f4cbdf1 Produktion list WIP 2022-10-21 20:40:47 +00:00
OpenXE 278d4b631b Produktion initial 2022-10-21 16:12:46 +00:00
OpenXE debe733f13 module_creator expanded now with minidetail and select in list 2022-10-21 16:11:56 +00:00
OpenXE-ERP a243d3b330 Update SERVER_INSTALL.md 2022-10-20 21:46:54 +02:00
OpenXE-ERP bbcb6f5c52 Add files via upload
Optimized login screen picture
2022-10-20 18:21:20 +02:00
19 changed files with 2703 additions and 333 deletions
+5
View File
@@ -0,0 +1,5 @@
conf/user.inc.php
conf/user_defined.php
userdata/cronjobkey.txt
userdata/tmp/
www/cache/
+1 -1
View File
@@ -44,7 +44,7 @@ upload_max_filesize = 100M
max_execution_time = 3600
max_input_time = 3600
magic_quotes_gpc = Off
file_uploads = Yes (gesetzt: file_uploads = On)
file_uploads = Yes
max_file_uploads = 20
short_open_tag = On
max_input_vars=3000
+1 -1
View File
@@ -9571,7 +9571,7 @@ CREATE TABLE IF NOT EXISTS `produktion` (
`angebot` varchar(255) NOT NULL,
`freitext` text NOT NULL,
`internebemerkung` text NOT NULL,
`status` varchar(64) NOT NULL,
`status` varchar(64) NOT NULL default 'angelegt',
`adresse` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`abteilung` varchar(255) NOT NULL,
+61
View File
@@ -3552,6 +3552,67 @@ class YUI {
'</td></tr></table>')";
}
function IconsSQL_produktion($tablename) {
$freigegeben = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/produkton_laeuft.png\" title=\"Produktion freigegeben\" border=\"0\" style=\"margin-right:1px\">";
$angelegt = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/blue.png\" title=\"Produktion angelegt\" border=\"0\" style=\"margin-right:1px\">";
$abgeschlossen = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/grey.png\" title=\"Produktion abgeschlossen\" border=\"0\" style=\"margin-right:1px\">";
$gestartet = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/produkton_green.png\" title=\"Produktion gestartet\" border=\"0\" style=\"margin-right:1px\">";
$storniert = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/storno.png\" title=\"Produktion storniert\" border=\"0\" style=\"margin-right:1px\">";
for ($z = 0;$z < 6;$z++) {
$angelegt_6 .= $angelegt;
$abgeschlossen_6 .= $abgeschlossen;
$storniert_6 .= $storniert;
}
$lager_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" style=\"margin-right:1px\" title=\"Artikel ist im Lager\" border=\"0\">";
$lager_nicht_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagerstop.png\" style=\"margin-right:1px\" title=\"Artikel fehlt im Lager\" border=\"0\">";
$reserviert_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/ware_bestellt.png\" style=\"margin-right:1px\" title=\"Artikel reserviert\" border=\"0\">";
$reserviert_nicht_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/ware_nicht_bestellt.png\" style=\"margin-right:1px\" title=\"Artikel nicht reserviert\" border=\"0\">";
$auslagern_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/ausgelagert.png\" title=\"Produktion ausgelagert\" border=\"0\" style=\"margin-right:1px\">";
$auslagern_nicht_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/nicht_ausgelagert.png\" title=\"Produktion ausgelagert\" border=\"0\" style=\"margin-right:1px\">";
$einlagern_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/eingelagert.png\" title=\"Produktion eingelagert\" border=\"0\" style=\"margin-right:1px\">";
$einlagern_nicht_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/nicht_eingelagert.png\" title=\"Produktion eingelagert\" border=\"0\" style=\"margin-right:1px\">";
$zeit_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/zeit_dreiviertel.png\" style=\"margin-right:1px\" title=\"Zeiten erfasst\" border=\"0\">";
$zeit_nicht_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/keine_zeiten.png\" style=\"margin-right:1px\" title=\"Zeiten nicht erfasst\" border=\"0\">";
$versand_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" style=\"margin-right:1px\" title=\"Versand ok\" border=\"0\">";
$versand_nicht_ok = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" style=\"margin-right:1px\" title=\"Versand nicht ok\" border=\"0\">";
return "CONCAT('<table><tr><td nowrap>',
CASE
WHEN $tablename.status = 'freigegeben' THEN '$freigegeben'
WHEN $tablename.status = 'abgeschlossen' THEN '$abgeschlossen'
WHEN $tablename.status = 'angelegt' THEN '$angelegt'
WHEN $tablename.status = 'gestartet' THEN '$gestartet'
ELSE
'$storniert'
end,
CASE
WHEN FIND_IN_SET($tablename.status, 'freigegeben,gestartet') THEN
CONCAT (
if($tablename.lager_ok,'$lager_ok','$lager_nicht_ok'),
if($tablename.reserviert_ok,'$reserviert_ok','$reserviert_nicht_ok'),
if($tablename.auslagern_ok,'$auslagern_ok','$auslagern_nicht_ok'),
if($tablename.einlagern_ok,'$einlagern_ok','$einlagern_nicht_ok'),
if($tablename.zeit_ok,'$zeit_ok','$zeit_nicht_ok'),
if($tablename.versand_ok,'$versand_ok','$versand_nicht_ok')
)
ELSE
CASE
WHEN $tablename.status = 'angelegt' THEN '$angelegt_6'
WHEN $tablename.status = 'abgeschlossen' THEN '$abgeschlossen_6'
ELSE
'$storniert_6'
END
END,
'</td></tr></table>')";
}
function TablePositionSearch($parsetarget, $name, $callback = "show", $gener) {
$id = $this->app->Secure->GetGET("id");
+73 -34
View File
@@ -13,7 +13,7 @@
* PLACEHOLDER_EDIT
* PLACEHOLDER_DELETE
* PLACEHOLDER_SQL_LIST
* PLACEHOLDER_SQL_LIST
* PLACEHOLDER_DROPNBOX
* PLACEHOLDER_GET_INPUT
* PLACEHOLDER_SET_INPUT
* PLACEHOLDER_COLUMNS
@@ -21,9 +21,11 @@
*/
$host = 'localhost';
$user = 'openxedev';
$passwd = 'openxedev';
$schema = 'openxedev';
$user = 'openxe';
$passwd = 'openxe';
$schema = 'openxe';
echo("\n");
if ($argc >= 2) {
@@ -39,12 +41,34 @@ if ($argc >= 2) {
$force = false;
}
if (!str_starts_with($argv[1],'-')) {
$module_name = $argv[1];
if (strpos($argv[1],'-') == 0) {
$module_name = $argv[1];
} else {
info();
exit;
}
// column selection
$selected_columns = array();
// Set selected_columns here or per parameter -c col1,col2,col3
// $selected_columns = array('belegnr','adresse','projekt');
if (in_array('-c', $argv)) {
$pos = array_keys($argv, '-c')[0];
$pos++;
if (isset($argv[$pos])) {
$selected_columns = explode(',',$argv[$pos]);
}
}
if (empty($selected_columns)) {
echo("Selected all columns.\n");
} else {
echo("Selected ".count($selected_columns)." columns,\n");
}
$module_class_name = ucfirst($module_name);
$php_file_name = $module_name . ".php";
$php_template_file_name = "module_creator_php_template.txt";
@@ -89,40 +113,52 @@ if ($argc >= 2) {
/* Iterate through the result set */
echo "FIELD\t\t\t\tType\t\tNull\tKey\tDefault\tExtra\n";
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
echo($value);
switch ($key) {
case 'Field':
$colwidth = 32;
$column_processed = false;
if ($value != 'id') {
$columns[] = $value;
$sql_columns[] = $table_short_name.".".$value;
}
if (empty($selected_columns) || in_array($row['Field'],$selected_columns) || $row['Field'] == 'id') {
break;
case 'Type':
$colwidth = 16;
break;
default:
$colwidth = 8;
break;
foreach ($row as $key => $value) {
echo($value);
switch ($key) {
case 'Field':
$colwidth = 32;
if ($value != 'id') {
$column_processed = true;
$columns[] = $value;
$sql_columns[] = $table_short_name.".".$value;
}
break;
case 'Type':
$colwidth = 16;
break;
default:
$colwidth = 8;
break;
}
for ($filler = strlen($value); $filler < $colwidth; $filler++) {
echo(" ");
}
}
for ($filler = strlen($value); $filler < $colwidth; $filler++) {
echo(" ");
}
// Build edit form
// <tr><td>{|Bezeichnung|}:*</td><td><input type="text" id="bezeichnung" name="bezeichnung" value="[BEZEICHNUNG]" size="40"></td></tr>
if ($row['Field'] != 'id') {
$edit_form = $edit_form . '<tr><td>{|' . ucfirst($row['Field']) . '|}:</td><td><input type="text" name="' . $row['Field'].'" id="'.$row['Field'].'" value="[' . strtoupper($row['Field']) . ']" size="20"></td></tr>' . "\n";
}
echo("\n");
}
}
// Build edit form
// <tr><td>{|Bezeichnung|}:*</td><td><input type="text" id="bezeichnung" name="bezeichnung" value="[BEZEICHNUNG]" size="40"></td></tr>
if ($row['Field'] != 'id') {
$edit_form = $edit_form . '<tr><td>{|' . ucfirst($row['Field']) . '|}:</td><td><input type="text" name="' . $row['Field'] . '" value="[' . strtoupper($row['Field']) . ']" size="40"></td></tr>' . "\n";
}
echo("\n");
if (empty($columns)) {
echo("No matching columns found!\n");
exit();
}
// Create php file
@@ -152,7 +188,8 @@ if ($argc >= 2) {
$php_file_contents = str_replace('PLACEHOLDER_LIST', $module_name . "_list", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_EDIT', $module_name . "_edit", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_DELETE', $module_name . "_delete", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_SQL_LIST', "SELECT SQL_CALC_FOUND_ROWS $table_short_name.id, $sql_list_of_columns, $table_short_name.id FROM $module_name $table_short_name", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_DROPNBOX',"'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\\\"checkbox\\\" name=\\\"auswahl[]\\\" value=\\\"',".$table_short_name.".id,'\\\" />') AS `auswahl`", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_SQL_LIST', "SELECT SQL_CALC_FOUND_ROWS $table_short_name.id, \$dropnbox, $sql_list_of_columns, $table_short_name.id FROM $module_name $table_short_name", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_SQL_EDIT', "INSERT INTO $module_name ($list_of_columns, id) values ('\".implode('\', \'',\$input).\"', \$id) ON DUPLICATE KEY UPDATE SET ", $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_GET_INPUT', $get_input, $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_SET_INPUT', $set_input, $php_file_contents);
@@ -221,6 +258,8 @@ function info() {
echo("arg1: SQL table name\n");
echo("Options\n");
echo("\t-v: verbose output\n");
echo("\t-f: force override of existing files\n");
echo("\t-c: select columns like this: -c col1,col2,col3,col3\n");
echo("\n");
}
@@ -30,8 +30,11 @@ class PLACEHOLDER_MODULECLASSNAME {
switch ($name) {
case "PLACEHOLDER_LIST":
$allowed['PLACEHOLDER_LIST'] = array('list');
$heading = array(PLACEHOLDER_COLUMNS, 'Men&uuml;');
$width = array('10%'); // Fill out manually later
$heading = array('','',PLACEHOLDER_COLUMNS, 'Men&uuml;');
$width = array('1%','1%','10%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
$findcols = array(PLACEHOLDER_SQL_COLUMNS);
$searchsql = array(PLACEHOLDER_SQL_COLUMNS);
@@ -39,6 +42,8 @@ class PLACEHOLDER_MODULECLASSNAME {
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "PLACEHOLDER_DROPNBOX";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=PLACEHOLDER_MODULENAME&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=PLACEHOLDER_MODULENAME&action=delete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
$sql = "PLACEHOLDER_SQL_LIST";
@@ -86,6 +91,12 @@ class PLACEHOLDER_MODULECLASSNAME {
function PLACEHOLDER_EDIT() {
$id = $this->app->Secure->GetGET('id');
// Check if other users are editing this id
if($this->app->erp->DisableModul('artikel',$id))
{
return;
}
$this->app->Tpl->Set('ID', $id);
@@ -141,6 +152,7 @@ class PLACEHOLDER_MODULECLASSNAME {
// Load values again from database
$dropnbox = "PLACEHOLDER_DROPNBOX";
$result = $this->app->DB->SelectArr("PLACEHOLDER_SQL_LIST"." WHERE id=$id");
foreach ($result[0] as $key => $value) {
+5
View File
@@ -0,0 +1,5 @@
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
+270
View File
@@ -0,0 +1,270 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">Allgemein</a></li>
<li><a href="#tabs-2">Produktion</a></li>
<li><a href="#tabs-3">Positionen</a></li>
<li><a href="#tabs-4">Protokoll</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|<b>Produktion <font color="blue">[BELEGNR]</font></b>|}</legend>
[STATUSICONS]
[TEILPRODUKTIONINFO]
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Allgemein|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|Kunde|}:</td><td><input type="text" name="kundennummer" id="kundennummer" value="[KUNDENNUMMER]" size="20"></td></tr>
<tr><td>{|Projekt|}:</td><td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20"></td></tr>
<tr><td>{|Auftrag|}:</td><td><input type="text" name="auftragid" id="auftragid" value="[AUFTRAGID]" size="20"></td></tr>
<tr><td>{|Interne Bezeichnung|}:</td><td><input type="text" name="internebezeichnung" value="[INTERNEBEZEICHNUNG]" size="20"></td></tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|Status|}:</td><td><input disabled type="text" name="status" value="[STATUS]" size="20"></td></tr>
<tr><td>{|Angelegt am|}:</td><td><input type="text" name="datum" id="datum" value="[DATUM]" size="10"></td></tr>
<tr><td>{|Materiallager|}:</td><td><input type="text" name="standardlager" id="standardlager" value="[STANDARDLAGER]" size="20"></td></tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr><td><button [AKTION_SPEICHERN_DISABLED] name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button></td></tr>
<tr [AKTION_FREIGEBEN_VISIBLE]><td><button name="submit" value="freigeben" class="ui-button-icon" style="width:100%;">Freigeben</button></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Einstellungen|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|Reservierart|}:</td><td><input disabled type="text" name="reservierart" value="[RESERVIERART]" size="20"></td></tr>
<tr><td>{|Auslagerart|}:</td><td><input disabled type="text" name="auslagerart" value="[AUSLAGERART]" size="20"></td></tr>
<tr><td>{|Unterstücklisten aufl&ouml;sen|}:</td><td><input disabled type="checkbox" name="unterlistenexplodieren" value=1 [UNTERLISTENEXPLODIEREN] size="20"></td></tr>
<tr><td>{|Funktionstest|}:</td><td><input disabled type="checkbox" name="funktionstest" value=1 [FUNKTIONSTEST] size="20"></td></tr>
<tr><td>{|Beschreibungen von Arbeitsschritten anzeigen|}:</td><td><input disabled type="checkbox" name="arbeitsschrittetextanzeigen" value=1 [ARBEITSSCHRITTETEXTANZEIGEN] size="20"></td></tr>
<tr><td>{|Seriennummer erstellen|}:</td><td><input disabled type="checkbox" name="seriennummer_erstellen" value=1 [SERIENNUMMER_ERSTELLEN] size="20"></td></tr>
<tr><td>{|Unterseriennummer erfassen|}:</td><td><input disabled type="checkbox" name="unterseriennummer_erfassen" value=1 [UNTERSERIENNUMMER_ERFASSEN] size="20"></td></tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-8 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|Auslieferung Lager|}:</td><td><input type="text" name="datumauslieferung" id="datumauslieferung" value="[DATUMAUSLIEFERUNG]" size="10"></td></tr>
<tr><td>{|Bereitstellung Start|}:</td><td><input type="text" name="datumbereitstellung" id="datumbereitstellung" value="[DATUMBEREITSTELLUNG]" size="10"></td></tr>
<tr><td>{|Produktion Start|}:</td><td><input type="text" name="datumproduktion" id="datumproduktion" value="[DATUMPRODUKTION]" size="10"></td></tr>
<tr><td>{|Produktion Ende|}:</td><td><input type="text" name="datumproduktionende" id="datumproduktionende" value="[DATUMPRODUKTIONENDE]" size="10"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Freitext|}</legend>
<textarea name="freitext" id="freitext" style="min-height: 180px;">[FREITEXT]</textarea>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Interne Bemerkung|}</legend>
<textarea name="internebemerkung" id="internebemerkung" style="min-height: 180px;">[INTERNEBEMERKUNG]</textarea>
</fieldset>
</div>
</div>
</div>
</div>
</form>
</div>
<div [POSITIONEN_TAB_VISIBLE]>
<div id="tabs-2">
[MESSAGE]
<form action="#tabs-2" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|<b>Produktion <font color="blue">[BELEGNR]</font></b>|}</legend>
[STATUSICONS]
[TEILPRODUKTIONINFO]
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-5 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend [AKTION_PLANEN_VISIBLE]>{|Zu produzierende Artikel|}</legend>
<legend [ARTIKEL_MENGE_VISIBLE]>{|Produktionsfortschritt|}</legend>
<table width="100%" border="0">
<tr [AKTION_PLANEN_VISIBLE]><td>{|Artikel|}:</td></tr>
<tr [AKTION_PLANEN_VISIBLE]><td><input type="text" name="artikel_planen" id="artikel_planen" value="[ARTIKEL_PLANEN]" size="20"></td></tr>
<tr [AKTION_PLANEN_VISIBLE]><td>{|Planmenge|}:</td></tr>
<tr [AKTION_PLANEN_VISIBLE]><td><input type="text" name="artikel_planen_menge" id="artikel_planen_menge" value="[ARTIKEL_PLANEN_MENGE]" size="20"></td></tr>
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Geplant|}:</td>
<td>[MENGE_GEPLANT]</td>
<td>{|Offen:|}</td>
<td>[MENGE_OFFEN]</td>
</tr>
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Produziert|}:</td>
<td>[MENGE_PRODUZIERT]</td>
<td>{|Reserviert:|}</td>
<td>[MENGE_RESERVIERT]</td>
</tr>
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Erfolgreich|}:</td>
<td>[MENGE_ERFOLGREICH]</td>
<td>{|Produzierbar:|}</td>
<td>[MENGE_PRODUZIERBAR]</td>
</tr>
</tr>
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Ausschuss|}:</td>
<td>[MENGE_AUSSCHUSS]</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-5 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend [AKTION_PRODUZIEREN_VISIBLE]>{|Parameter|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr [AKTION_PRODUZIEREN_VISIBLE]>
<td>{|Menge|}:</td>
<td><input type="number" min="0" name="menge_produzieren" id="menge_produzieren" value="[MENGE_PRODUZIEREN]" size="20""></td>
</tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]>
<td>{|Ausschuss|}:</td>
<td><input type="number" min="0" name="menge_ausschuss_produzieren" id="menge_ausschuss_produzieren" value="[MENGE_AUSSCHUSS_PRODUZIEREN]" size="20"></td>
</tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]>
<td>{|Ziellager|}:</td>
<td><input type="text" name="ziellager" id="ziellager" value="[ZIELLAGER]" size="20"></td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Anpassen|}</legend>
<tr [AKTION_PLANEN_VISIBLE]><td><button name="submit" value="planen" class="ui-button-icon" style="width:100%;">Planen</button></td></tr>
<tr [AKTION_LEEREN_VISIBLE]><td><button name="submit" value="leeren" class="ui-button-icon" style="width:100%;">Leeren</button></td></tr>
<tr [AKTION_FREIGEBEN_VISIBLE]><td><button name="submit" value="freigeben" class="ui-button-icon" style="width:100%;">Freigeben</button></td></tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]><td><button name="submit" value="teilen" class="ui-button-icon" style="width:100%;">Teilen</button></td></tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]><td><button name="submit" value="anpassen" class="ui-button-icon" style="width:100%;">Anpassen</button></td></tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Produzieren|}</legend>
<tr [AKTION_RESERVIEREN_VISIBLE]><td><button name="submit" value="reservieren" class="ui-button-icon" style="width:100%;">Reservieren</button></td></tr>
<tr [AKTION_PRODUZIEREN_VISIBLE]><td><button name="submit" value="produzieren" class="ui-button-icon" style="width:100%;">Produzieren</button></td></tr>
<tr [AKTION_ABSCHLIESSEN_VISIBLE]><td><button name="submit" value="abschliessen" class="ui-button-icon" style="width:100%;">Abschliessen</button></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<div [ARTIKEL_MENGE_VISIBLE] class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Materialbedarf|}</legend>
</fieldset>
[PRODUKTION_POSITION_SOURCE_TABELLE]
</div>
</div>
</div>
</div>
</form>
</div>
</div>
<div id="tabs-3">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Positionen|}</legend>
[PRODUKTION_POSITION_SOURCE_POSITION_TABELLE]
</fieldset>
</div>
</div>
</div>
</div>
</form>
</div>
<div id="tabs-4">
[MESSAGE]
<form action="" method="post">
[MINIDETAILINEDIT]
</form>
</div>
</div>
+48
View File
@@ -0,0 +1,48 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="#tabs-1" id="frmauto" name="frmauto" method="post">
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
[STATUSFILTER]
<li class="filter-item">
<label for="angelegte" class="switch">
<input type="checkbox" id="angelegte">
<span class="slider round"></span>
</label>
<label for="angelegte">{|Angelegt|}</label>
</li>
<li class="filter-item">
<label for="offene" class="switch">
<input type="checkbox" id="offene">
<span class="slider round"></span>
</label>
<label for="offene">{|Offen|}</label>
</li>
<li class="filter-item">
<label for="geschlossene" class="switch">
<input type="checkbox" id="geschlossene">
<span class="slider round"></span>
</label>
<label for="geschlossene">{|Abgeschlossen|}</label>
</li>
<li class="filter-item">
<label for="stornierte" class="switch">
<input type="checkbox" id="stornierte">
<span class="slider round"></span>
</label>
<label for="stornierte">{|Papierkorb|}</label>
</li>
</ul>
</div>
</div>
</form>
[TAB1]
[TAB1NEXT]
</div>
</div>
+40 -275
View File
@@ -1,281 +1,46 @@
<style>
.auftraginfo_cell {
color: #636363;border: 1px solid #ccc;padding: 5px;
}
.auftrag_cell {
color: #636363;border: 1px solid #fff;padding: 0px; margin:0px;
}
</style>
<table width="100%" border="0" cellpadding="10" cellspacing="5">
<tr valign="top">
<td width="">
<br>
<center>[MENU]</center>
<br>
<h2 class="greyh2">Artikel für Produktion</h2>
<div style="padding:10px;">[ARTIKEL]</div>
[MINIDETAILNACHARTIKEL]
<h2 class="greyh2">Externe Produktionsschritte</h2>
<div style="padding:10px;" id="[RAND]bestellungen">[BESTELLUNGEN]</div>
<h2 class="greyh2">Zeiterfassung</h2>
<div style="padding:10px;">[ZEITERFASSUNG]</div>
<h2 class="greyh2">Arbeitsschritte</h2>
<div style="padding:10px;">[ARBEITSSCHRITTE]</div>
<h2 class="greyh2">Abschlussbemerkung</h2>
<div style="padding:10px;">[ABSCHLUSSBEMERKUNG]</div>
<div style="padding:10px;">
<table width="100%>">
<tr>
<td>Zeit Geplant in Stunden</td>
<td>Zeit Tatsächlich in Stunden</td>
<td>Arbeitsplatzgruppe Kosten Geplant in EUR</td>
<td>Arbeitsplatzgruppe Kosten Tatsächlich in EUR</td>
</tr>
<tr>
<td class="greybox" width="25%">[ZEITGEPLANT]</td>
<td class="greybox" width="25%">[ZEITGEBUCHT]</td>
<td class="greybox" width="25%">[KOSTENGEPLANT]</td>
<td class="greybox" width="25%">[KOSTENGEBUCHT]</td>
</tr>
</table>
</div>
</td>
<td width="450">
<div style="overflow:auto; min-width:450px; max-height:550px;">
<div style="background-color:white">
<h2 class="greyh2">Produktionszentrum</h2>
<div style="padding:10px;">
<center>
[BUTTONS]
</center>
</div>
<div style="background-color:white">
<h2 class="greyh2">Protokoll</h2>
<div style="padding:10px;">
[PROTOKOLL]
</div>
</div>
<!--
<h2 class="greyh2">Datei Anhang</h2>
<div style="padding:10px;">[DATEIANHANGLISTE]</div>
-->
<!--
<h2 class="greyh2">Arbeitsschritte</h2>
<div style="padding:10px">
<table width="100%>">
<tr><td>Fertigstellung in %</td><td>Anzahl Schritte</td></tr>
<tr>
<td class="greybox" width="25%">[DECKUNGSBEITRAG]</td>
<td class="greybox" width="25%">[DBPROZENT]</td>
</tr>
</table>
</div>
-->
<h2 class="greyh2">Abschluss Bericht</h2>
<div style="padding:10px;">
<table width="100%>">
<tr>
<td>Menge Geplant</td>
<td>Menge Ausschuss</td>
</tr>
<tr>
<td class="greybox" width="25%">[MENGEGEPLANT]</td>
<td class="greybox" width="25%">[MENGEAUSSCHUSS]</td>
</tr>
</table>
</div>
<h2 class="greyh2">Deckungsbeitrag</h2>
<div style="padding:10px">
<table width="100%>">
<tr>
<td>Deckungsbeitrag in EUR</td>
<td>DB in %</td>
</tr>
<tr>
<td class="greybox" width="25%">[DECKUNGSBEITRAG]</td>
<td class="greybox" width="25%">[DBPROZENT]</td>
</tr>
</table>
<br>
<br>
</div>
<div class="row">
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<legend>{|Produktionsfortschritt|}</legend>
<div class="inside inside-full-height">
<table width="100%" border="0">
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Geplant|}:</td>
<td>[MINI_MENGE_GEPLANT]</td>
<td>{|Offen:|}</td>
<td>[MINI_MENGE_OFFEN]</td>
</tr>
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Produziert|}:</td>
<td>[MINI_MENGE_PRODUZIERT]</td>
<td>{|Reserviert:|}</td>
<td>[MINI_MENGE_RESERVIERT]</td>
</tr>
<tr [ARTIKEL_MENGE_VISIBLE]>
<td>{|Erfolgreich|}:</td>
<td>[MINI_MENGEERFOLGREICH]</td>
<td>{|Produzierbar:|}</td>
<td>[MINI_MENGE_PRODUZIERBAR]</td>
</tr>
</tr>
<td>{|Ausschuss|}:</td>
<td>[MINI_MENGEAUSSCHUSS]</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<legend>{|Protokoll|}</legend>
<div class="inside inside-full-height">
[PROTOKOLL]
</div>
</div>
</div>
</div>
</td>
</tr>
</table>
<div id="[RAND]createdocdialog">
<form id="[RAND]createdocfrom">
<fieldset><legend>{|Artikel|}</legend>
<div id="[RAND]createdocdialoginfo"></div>
<input type="hidden" name="[RAND]createdocsid" id="[RAND]createdocsid" />
<table class="mkTable" width="100%" id="[RAND]createdocdialogtable">
</table>
</fieldset>
<fieldset><legend>{|Bestellung bei externen Produzent|}</legend>
<table>
<tr>
<td nowrap>
<input type="radio" id="[RAND]createdoctypecreatebestellung" name="[RAND]createdoctypebestellungtyp" value="createbestellung" checked="checked" />
<label for="[RAND]createdoctypecreatebestellung">{|neue Bestellung anlegen|}</label>
<label for="[RAND]createdocadresse">{|bei Lieferant|}:</label>
</td><td nowrap>
<input type="text" id="[RAND]createdocadresse" name="[RAND]createdocadresse" size="30" />
</td>
</tr>
<tr class="[RAND]createdoctypetrlieferant"><td></td></tr>
<tr>
<td>
<input type="radio" id="[RAND]createdoctypeaddtobestellung" name="[RAND]createdoctypebestellungtyp" value="addtobestellung" /> <label for="[RAND]createdoctypeaddtobestellung">{|zu bestehender Bestellung anlegen|}:</label>
</td><td>
<input id="[RAND]createdocbestellung" name="[RAND]createdocbestellung" type="text" size="30"/>
</td>
</tr>
<tr id="[RAND]createdoctrbestellungnoprice">
<td colspan="2">
<input type="checkbox" id="[RAND]createdoctypebestellungnoprice" name="[RAND]createdoctypebestellungnoprice" value="1" [NEWSUPPLIERSORDERHASPRICE]/>
<label for="[RAND]createdoctypebestellungnoprice">{|Preis für Hauptprodukt nicht setzen|}</label>
</td>
</tr>
</table>
</fieldset>
<fieldset><legend>{|Beistellen des Materials|}</legend>
<table>
<tr id="[RAND]createdoctrtypebestellung">
<td colspan="2">
<input type="radio" id="[RAND]createdoctypebestellung" name="[RAND]createdoctype" value="bestellung" checked="checked" />
<label for="[RAND]createdoctypebestellung">{|Artikel sofort auslagern (basierend auf Bestellung)|}</label>
</td>
</tr>
<tr id="[RAND]createdoctrtypeauftrag">
<td colspan="2">
<input type="radio" id="[RAND]createdoctypeauftrag" name="[RAND]createdoctype" value="auftrag" />
<label for="[RAND]createdoctypeauftrag">{|Auftrag für Beistellung anlegen|}</label>
</td>
</tr>
</table>
</fieldset>
<fieldset><legend>{|Produktion|}</legend>
<table>
<tr id="[RAND]createdoctrprodstarten">
<td colspan="2">
<input type="checkbox" id="[RAND]createdocstartprod" name="[RAND]createdocstartprod" value="1" />
<label for="[RAND]createdocstartprod">{|Produktion starten|}</label>
</td>
</tr>
</table>
</fieldset>
</form>
</div>
<script type="application/javascript">
[AUTOCOMPLETE]
$(document).ready(function() {
$('#[RAND]createdocdialog').dialog(
{
modal: true,
autoOpen: false,
minWidth: 940,
title: 'Auftrag/Bestellung anlegen',
buttons: {
'OK': function () {
var $addr = $('#[RAND]createdocadresse');
var $best = $('#[RAND]createdocbestellung');
var allempty = ($($addr).val()+'' === '') &&
($($best).length === 0 || $($best).val()+'' === '');
if(allempty) {
alert('Bitte eine Adresse oder Bestellung auswählen');
} else {
if($('#[RAND]createdoctypebestellung').prop('checked') || $('#[RAND]createdoctypeauftrag').prop('checked')) {
$.ajax({
url: 'index.php?module=produktion&action=edit&cmd=createdocument&id=[ID]&frame=[FRAMEPARAM]',
type: 'POST',
dataType: 'json',
data: $('#[RAND]createdocfrom').serialize(),
success: function (data) {
//$('#[RAND]createdocdialog').dialog('close');
$('#[RAND]createdocdialoginfo').html(typeof data.html != 'undefined'? data.html:'');
if(data.html != '') {
$('input.[RAND]createdoc').remove();
}
$('#[RAND]createdocdialog').dialog('close');
if(typeof data.deliverynoteinfo != 'undefined') {
$('#[RAND]bestellungen').html(data.deliverynoteinfo);
bindButton[RAND]();
}
},
beforeSend: function () {
}
});
}
}
},
'ABBRECHEN': function () {
$(this).dialog('close');
}
},
close: function (event, ui) {
}
});
bindButton[RAND]();
});
function bindButton[RAND](){
$('input.[RAND]createdoc').on('click', function () {
$('#[RAND]createdocsid').val($(this).data('sid'));
$.ajax({
url: 'index.php?module=produktion&action=edit&cmd=gettableforcreatedocument&id=[ID]',
type: 'POST',
dataType: 'json',
data: {sid: $(this).data('sid'),rand:'[RAND]'},
success: function (data) {
$('#[RAND]createdocdialoginfo').html(typeof data.info != 'undefined'? data.info:'');
$('#[RAND]createdocdialogtable').html(data.html);
$('#[RAND]createdocadresse').val(data.adresse);
$('#[RAND]createdocbestellung').html(data.bestellung);
$('#[RAND]createdocauftrag').html(data.auftrag);
$('#[RAND]createdocdialog').dialog('open');
if(data.displayprodstart) {
$('#[RAND]createdoctrprodstarten').show();
} else {
$('#[RAND]createdoctrprodstarten').hide();
}
addClicklupe();
lupeclickevent();
// AutoComplete-Ergebnisboxen an Dialog-Fenster anhängen.
// Ansonsten wird AutoComplete-Ergebnis evtl. nicht sichtbar unterhalb des Dialog-Fensters angezeigt.
var $uiDialog = $('#[RAND]createdocdialog').first();
$($uiDialog).find('input.ui-autocomplete-input').autocomplete('option', 'appendTo', $uiDialog);
},
beforeSend: function () {
}
});
});
}
</script>
@@ -0,0 +1,33 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|<a href="index.php?module=produktion&action=edit&id=[PRODUKTIONID]#tabs-3">PRODUKTION [PRODUKTIONBELEGNR]<a>|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td>{|Artikel|}:</td><td><input type="text" id="artikel" name="artikel" value="[ARTIKEL]" size="40"></td></tr>
<tr><td>{|Menge|}:</td><td><input type="text" name="menge" value="[MENGE]" size="40"></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
</div>
+3 -3
View File
@@ -95,15 +95,15 @@ class Dateien {
$heading = array('ID','Titel', 'Beschreibung', 'Verkn&uuml;pfung', 'Geloescht', 'Logdatei', 'Men&uuml;');
$width = array('10%'); // Fill out manually later
$findcols = array('d.id','d.titel', 'd.beschreibung', 'd.nummer', 'd.geloescht', 'd.logdatei');
$searchsql = array('d.titel', 'd.beschreibung', 'd.nummer', 'd.geloescht', 'd.logdatei');
$findcols = array('d.id','d.titel', 'd.beschreibung', 'ds.objekt', 'd.geloescht', 'd.logdatei');
$searchsql = array('d.titel', 'd.beschreibung', 'd.nummer', 'd.geloescht', 'd.logdatei','ds.objekt');
$defaultorder = 1;
$defaultorderdesc = 0;
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=dateien&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS d.id, d.id, d.titel, d.beschreibung, GROUP_CONCAT(ds.objekt SEPARATOR ', '), d.geloescht, d.logdatei, d.id FROM datei d LEFT join datei_stichwoerter ds ON ds.datei = d.id";
$sql = "SELECT SQL_CALC_FOUND_ROWS d.id, d.id, d.titel, d.beschreibung, GROUP_CONCAT(ds.objekt SEPARATOR ', ') as verknuepfung, d.geloescht, d.logdatei, d.id FROM datei d LEFT join datei_stichwoerter ds ON ds.datei = d.id";
$where = "1";
$count = "SELECT count(DISTINCT id) FROM datei WHERE $where";
+3 -1
View File
@@ -620,6 +620,8 @@ class Gutschrift extends GenGutschrift
$tmp3->DisplayNew('PDFARCHIV','Men&uuml;','noAction');
}
$this->app->Tpl->Add('ZAHLUNGEN',$this->GutschriftZahlung(true));
if($parsetarget=='') {
$this->app->Tpl->Output('gutschrift_minidetail.tpl');
$this->app->ExitXentral();
@@ -738,7 +740,7 @@ class Gutschrift extends GenGutschrift
." $waehrung</td></tr>";
}
$saldo = $this->app->erp->EUR($this->app->erp->GutschriftSaldo($id));
$saldo = $this->app->erp->EUR($this->GutschriftSaldo($id));
if($saldo < 0) {
$saldo = "<b style=\"color:red\">$saldo</b>";
+14 -13
View File
@@ -1346,17 +1346,17 @@ class Lager extends GenLager {
case "lager_reservierungen":
$allowed['lager'] = array('reservierungen');
$heading = array('Kunde','Belegart','Belegnr','Status','Artikel','Menge','Projekt','Grund','Men&uuml;');
$width = array('20%','20%','5%','10%','20%','1%');
$findcols = array('t.kunde', 't.typ', 't.belegnr', 't.status', 't.Artikel', 't.menge', 't.projekt', 't.grund', 't.rid');
$searchsql = array('t.kunde', 't.typ', 't.belegnr', 't.status', 't.Artikel', $app->erp->FormatMenge('t.menge'), 't.projekt', 't.grund');
$heading = array('Kunde','Belegart','Belegnr','Status','Artikelnummer','Artikel','Menge','Projekt','Grund','Men&uuml;');
$width = array('20%', '10%', '5%', '5%', '5%', '20%', '1%', '10%', '20%');
$findcols = array('t.kunde', 't.typ', 't.belegnr', 't.status','t.Artikelnummer', 't.Artikel', 't.menge', 't.projekt', 't.grund', 't.rid');
$searchsql = array('t.kunde', 't.typ', 't.belegnr', 't.status','t.Artikelnummer', 't.Artikel', $app->erp->FormatMenge('t.menge'), 't.projekt', 't.grund');
$defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
//$sumcol = 9;
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap><a href=\"#\" onclick=DeleteDialog(\"index.php?module=lager&action=artikelentfernenreserviert&reservierung=%value%\"); ><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
$alignright = array(6);
$numbercols = array(5);
$alignright = array(7);
$numbercols = array(6);
$menucol = 5;
//$moreinfo = true;
$sql = "
@@ -1366,6 +1366,7 @@ class Lager extends GenLager {
t.typ,
t.belegnr,
t.status,
t.Artikelnummer,
t.Artikel,
".$app->erp->FormatMenge('t.menge').",
t.projekt,
@@ -1375,43 +1376,43 @@ class Lager extends GenLager {
FROM
(
(
SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,if(auf.belegnr = '','ENTWURF',auf.belegnr) as belegnr ,if(auf.status = '','angelegt',auf.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,if(auf.belegnr = '','ENTWURF',auf.belegnr) as belegnr ,if(auf.status = '','angelegt',auf.status) as status, a.nummer as Artikelnummer, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id
INNER JOIN auftrag auf ON auf.id = r.parameter AND r.objekt = 'auftrag'
)
UNION ALL
(
SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.nummer as Artikelnummer, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id
INNER JOIN lieferschein l ON l.id = r.parameter AND r.objekt = 'lieferschein'
)
UNION ALL
(
SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,if(l.belegnr = '','ENTWURF',l.belegnr) as belegnr ,if(l.status = '','angelegt',l.status) as status, a.nummer as Artikelnummer, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id
INNER JOIN produktion l ON l.id = r.parameter AND r.objekt = 'produktion'
)
UNION ALL
(
SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,'GEL&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,'Auftrag' as typ,'GEL&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.nummer as Artikelnummer, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id
LEFT JOIN auftrag auf ON auf.id = r.parameter AND r.objekt = 'auftrag' WHERE isnull(auf.id) AND r.objekt = 'auftrag'
)
UNION ALL
(
SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,'GEL&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,'Lieferschein' as typ,'GEL&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.nummer as Artikelnummer, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id
LEFT JOIN lieferschein l ON l.id = r.parameter AND r.objekt = 'lieferschein' WHERE isnull(l.id) AND r.objekt = 'lieferschein'
)
UNION ALL
(
SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,'GEL&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,'Produktion' as typ,'GEL&Ouml;SCHT' as belegnr ,'GEL&Ouml;SCHT' as status, a.nummer as Artikelnummer, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id
LEFT JOIN produktion l ON l.id = r.parameter AND r.objekt = 'produktion' WHERE isnull(l.id) AND r.objekt = 'produktion'
)
UNION ALL
(
SELECT r.id as rid, adr.name as kunde,r.objekt as typ,'' as belegnr , '' as status, a.name_de as Artikel,r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
SELECT r.id as rid, adr.name as kunde,r.objekt as typ,'' as belegnr , '' as status, a.nummer as Artikelnummer, a.name_de as Artikel, r.menge,p.abkuerzung as projekt,r.grund, r.id FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.objekt <> 'auftrag' AND r.objekt <> 'lieferschein' AND r.objekt <> 'produktion'
)
File diff suppressed because it is too large Load Diff
+249
View File
@@ -0,0 +1,249 @@
<?php
/*
* Copyright (c) 2022 OpenXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException;
class Produktion_position {
function __construct($app, $intern = false) {
$this->app = $app;
if ($intern)
return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list", "produktion_position_list");
$this->app->ActionHandler("create", "produktion_position_edit"); // This automatically adds a "New" button
$this->app->ActionHandler("edit", "produktion_position_edit");
$this->app->ActionHandler("delete", "produktion_position_delete");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
public function Install() {
/* Fill out manually later */
}
static function TableSearch(&$app, $name, $erlaubtevars) {
switch ($name) {
case "produktion_position_list":
$allowed['produktion_position_list'] = array('list');
$heading = array('','','produktion', 'artikel', 'projekt', 'bezeichnung', 'beschreibung', 'internerkommentar', 'nummer', 'menge', 'preis', 'waehrung', 'lieferdatum', 'vpe', 'sort', 'status', 'umsatzsteuer', 'bemerkung', 'geliefert', 'geliefert_menge', 'explodiert', 'explodiert_parent', 'logdatei', 'nachbestelltexternereinkauf', 'beistellung', 'externeproduktion', 'einheit', 'steuersatz', 'steuertext', 'erloese', 'erloesefestschreiben', 'freifeld1', 'freifeld2', 'freifeld3', 'freifeld4', 'freifeld5', 'freifeld6', 'freifeld7', 'freifeld8', 'freifeld9', 'freifeld10', 'freifeld11', 'freifeld12', 'freifeld13', 'freifeld14', 'freifeld15', 'freifeld16', 'freifeld17', 'freifeld18', 'freifeld19', 'freifeld20', 'freifeld21', 'freifeld22', 'freifeld23', 'freifeld24', 'freifeld25', 'freifeld26', 'freifeld27', 'freifeld28', 'freifeld29', 'freifeld30', 'freifeld31', 'freifeld32', 'freifeld33', 'freifeld34', 'freifeld35', 'freifeld36', 'freifeld37', 'freifeld38', 'freifeld39', 'freifeld40', 'stuecklistestufe', 'teilprojekt', 'Men&uuml;');
$width = array('1%','1%','10%'); // Fill out manually later
$findcols = array('p.produktion', 'p.artikel', 'p.projekt', 'p.bezeichnung', 'p.beschreibung', 'p.internerkommentar', 'p.nummer', 'p.menge', 'p.preis', 'p.waehrung', 'p.lieferdatum', 'p.vpe', 'p.sort', 'p.status', 'p.umsatzsteuer', 'p.bemerkung', 'p.geliefert', 'p.geliefert_menge', 'p.explodiert', 'p.explodiert_parent', 'p.logdatei', 'p.nachbestelltexternereinkauf', 'p.beistellung', 'p.externeproduktion', 'p.einheit', 'p.steuersatz', 'p.steuertext', 'p.erloese', 'p.erloesefestschreiben', 'p.freifeld1', 'p.freifeld2', 'p.freifeld3', 'p.freifeld4', 'p.freifeld5', 'p.freifeld6', 'p.freifeld7', 'p.freifeld8', 'p.freifeld9', 'p.freifeld10', 'p.freifeld11', 'p.freifeld12', 'p.freifeld13', 'p.freifeld14', 'p.freifeld15', 'p.freifeld16', 'p.freifeld17', 'p.freifeld18', 'p.freifeld19', 'p.freifeld20', 'p.freifeld21', 'p.freifeld22', 'p.freifeld23', 'p.freifeld24', 'p.freifeld25', 'p.freifeld26', 'p.freifeld27', 'p.freifeld28', 'p.freifeld29', 'p.freifeld30', 'p.freifeld31', 'p.freifeld32', 'p.freifeld33', 'p.freifeld34', 'p.freifeld35', 'p.freifeld36', 'p.freifeld37', 'p.freifeld38', 'p.freifeld39', 'p.freifeld40', 'p.stuecklistestufe', 'p.teilprojekt');
$searchsql = array('p.produktion', 'p.artikel', 'p.projekt', 'p.bezeichnung', 'p.beschreibung', 'p.internerkommentar', 'p.nummer', 'p.menge', 'p.preis', 'p.waehrung', 'p.lieferdatum', 'p.vpe', 'p.sort', 'p.status', 'p.umsatzsteuer', 'p.bemerkung', 'p.geliefert', 'p.geliefert_menge', 'p.explodiert', 'p.explodiert_parent', 'p.logdatei', 'p.nachbestelltexternereinkauf', 'p.beistellung', 'p.externeproduktion', 'p.einheit', 'p.steuersatz', 'p.steuertext', 'p.erloese', 'p.erloesefestschreiben', 'p.freifeld1', 'p.freifeld2', 'p.freifeld3', 'p.freifeld4', 'p.freifeld5', 'p.freifeld6', 'p.freifeld7', 'p.freifeld8', 'p.freifeld9', 'p.freifeld10', 'p.freifeld11', 'p.freifeld12', 'p.freifeld13', 'p.freifeld14', 'p.freifeld15', 'p.freifeld16', 'p.freifeld17', 'p.freifeld18', 'p.freifeld19', 'p.freifeld20', 'p.freifeld21', 'p.freifeld22', 'p.freifeld23', 'p.freifeld24', 'p.freifeld25', 'p.freifeld26', 'p.freifeld27', 'p.freifeld28', 'p.freifeld29', 'p.freifeld30', 'p.freifeld31', 'p.freifeld32', 'p.freifeld33', 'p.freifeld34', 'p.freifeld35', 'p.freifeld36', 'p.freifeld37', 'p.freifeld38', 'p.freifeld39', 'p.freifeld40', 'p.stuecklistestufe', 'p.teilprojekt');
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',p.id,'\" />') AS `auswahl`";
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=produktion_position&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=DeleteDialog(\"index.php?module=produktion_position&action=delete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS p.id, $dropnbox, p.produktion, p.artikel, p.projekt, p.bezeichnung, p.beschreibung, p.internerkommentar, p.nummer, p.menge, p.preis, p.waehrung, p.lieferdatum, p.vpe, p.sort, p.status, p.umsatzsteuer, p.bemerkung, p.geliefert, p.geliefert_menge, p.explodiert, p.explodiert_parent, p.logdatei, p.nachbestelltexternereinkauf, p.beistellung, p.externeproduktion, p.einheit, p.steuersatz, p.steuertext, p.erloese, p.erloesefestschreiben, p.freifeld1, p.freifeld2, p.freifeld3, p.freifeld4, p.freifeld5, p.freifeld6, p.freifeld7, p.freifeld8, p.freifeld9, p.freifeld10, p.freifeld11, p.freifeld12, p.freifeld13, p.freifeld14, p.freifeld15, p.freifeld16, p.freifeld17, p.freifeld18, p.freifeld19, p.freifeld20, p.freifeld21, p.freifeld22, p.freifeld23, p.freifeld24, p.freifeld25, p.freifeld26, p.freifeld27, p.freifeld28, p.freifeld29, p.freifeld30, p.freifeld31, p.freifeld32, p.freifeld33, p.freifeld34, p.freifeld35, p.freifeld36, p.freifeld37, p.freifeld38, p.freifeld39, p.freifeld40, p.stuecklistestufe, p.teilprojekt, p.id FROM produktion_position p";
$where = "1";
$count = "SELECT count(DISTINCT id) FROM produktion_position WHERE $where";
// $groupby = "";
break;
}
$erg = false;
foreach ($erlaubtevars as $k => $v) {
if (isset($$v)) {
$erg[$v] = $$v;
}
}
return $erg;
}
function produktion_position_list() {
/* $this->app->erp->MenuEintrag("index.php?module=produktion_position&action=list", "&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=produktion_position&action=create", "Neu anlegen");
$this->app->erp->MenuEintrag("index.php", "Zur&uuml;ck");
$this->app->YUI->TableSearch('TAB1', 'produktion_position_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "produktion_position_list.tpl");*/
header("Location: index.php?module=produktion&action=list");
}
// End edit process and return to previous page
// Give pid in case of delete because position.id is already gone
function produktion_position_edit_end(string $msg, bool $error, bool $go_to_production, int $pid = 0) {
if ($error) {
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">".$msg."</div>");
} else {
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">".$msg."</div>");
}
if ($go_to_production) {
if ($pid == 0) {
$id = (int) $this->app->Secure->GetGET('id');
$sql = "SELECT p.status, p.id from produktion p INNER JOIN produktion_position pp ON pp.produktion = p.id WHERE pp.id = $id";
$result = $this->app->DB->SelectArr($sql)[0];
$pid = $result['id'];
}
header("Location: index.php?module=produktion&action=edit&id=$pid&msg=$msg#tabs-3");
} else {
header("Location: index.php?module=produktion_position&action=list&msg=$msg");
}
exit();
}
public function produktion_position_delete() {
$id = (int) $this->app->Secure->GetGET('id');
$sql = "SELECT p.status, p.id from produktion p INNER JOIN produktion_position pp ON pp.produktion = p.id WHERE pp.id = $id";
$result = $this->app->DB->SelectArr($sql)[0];
$status = $result['status'];
$pid = $result['id'];
if (!in_array($status,array('angelegt','freigegeben'))) {
$this->produktion_position_edit_end("Bearbeiten nicht möglich, Produktionsstatus ist '$status'",true, true);
}
$this->app->DB->Delete("DELETE FROM `produktion_position` WHERE `id` = '{$id}'");
// Remove reserved items
$this->produktion_position_edit_end("Der Eintrag wurde gel&ouml;scht.", true, true, $pid);
}
/*
* Edit produktion_position item
* If id is empty, create a new one
*/
function produktion_position_edit() {
$id = $this->app->Secure->GetGET('id');
$this->app->Tpl->Set('ID', $id);
$this->app->erp->MenuEintrag("index.php?module=produktion_position&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=produktion&action=edit%id=$pid", "Zur&uuml;ck zur &Uuml;bersicht");
$id = $this->app->Secure->GetGET('id');
$input = $this->GetInput();
$submit = $this->app->Secure->GetPOST('submit');
if (empty($id)) {
// New item
$id = 'NULL';
}
$sql = "SELECT p.status, p.id from produktion p INNER JOIN produktion_position pp ON pp.produktion = p.id WHERE pp.id = $id";
$result = $this->app->DB->SelectArr($sql)[0];
$status = $result['status'];
$produktion_id = $result['id'];
$sql = "SELECT FORMAT(menge,0) as menge FROM produktion_position WHERE produktion = $produktion_id AND stuecklistestufe = 1";
$result = $this->app->DB->SelectArr($sql)[0];
$planmenge = $result['menge'];
if ($submit != '')
{
// Write to database
// Add checks here
$input['artikel'] = $this->app->erp->ReplaceArtikel(true, $input['artikel'],true); // Convert from form to db
// Only allowed when produktion is 'freigegeben or angelegt'
if (!in_array($status,array('angelegt','freigegeben'))) {
$this->produktion_position_edit_end("Bearbeiten nicht möglich, Produktionsstatus ist '$status'",true, true);
}
if ($input['menge'] < 0) {
$this->produktion_position_edit_end("Ung&uuml;ltige Menge.",true, true);
}
// Only allow quantities that are a multiple of the target quantity
if ($input['menge'] % $planmenge != 0) {
$this->produktion_position_edit_end("Positionsmenge muss Vielfaches von $planmenge sein.",true, true);
}
$columns = "id, ";
$values = "$id, ";
$update = "";
$fix = "";
foreach ($input as $key => $value) {
$columns = $columns.$fix.$key;
$values = $values.$fix."'".$value."'";
$update = $update.$fix.$key." = '$value'";
$fix = ", ";
}
// echo($columns."<br>");
// echo($values."<br>");
// echo($update."<br>");
$sql = "INSERT INTO produktion_position (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update;
// echo($sql);
$this->app->DB->Update($sql);
if ($id == 'NULL') {
$msg = "Das Element wurde erfolgreich angelegt.";
} else {
$msg = "Die Einstellungen wurden erfolgreich &uuml;bernommen.";
}
$this->produktion_position_edit_end($msg,false,true);
}
// Load values again from database
$result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS pp.id, pp.produktion, p.belegnr, pp.artikel, FORMAT(pp.menge,0) as menge, pp.id FROM produktion_position pp INNER JOIN produktion p ON pp.produktion = p.id "." WHERE pp.id=$id");
foreach ($result[0] as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);
}
/*
* Add displayed items later
*
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
$this->app->Tpl->Add('EMAIL', $email);
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
*/
//$this->app->YUI->AutoComplete("artikel", "artikelnummer");
$this->app->YUI->AutoComplete("artikel", "lagerartikelnummer");
$this->app->Tpl->Set('ARTIKEL',$this->app->erp->ReplaceArtikel(false, $result[0]['artikel'], false)); // Convert from form to db
$this->app->Tpl->Set('PRODUKTIONID',$result[0]['produktion']);
$this->app->Tpl->Set('PRODUKTIONBELEGNR',$result[0]['belegnr']);
$this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Positionsmenge muss Vielfaches von $planmenge sein.</div>");
$this->app->Tpl->Parse('PAGE', "produktion_position_edit.tpl");
}
/**
* Get all paramters from html form and save into $input
*/
public function GetInput(): array {
$input = array();
$input['artikel'] = $this->app->Secure->GetPOST('artikel');
$input['menge'] = $this->app->Secure->GetPOST('menge');
return($input);
}
}
+181 -1
View File
@@ -889,7 +889,8 @@ class Rechnung extends GenRechnung
}
$this->app->Tpl->Set('ZAHLUNGEN',"<table width=100% border=0 class=auftrag_cell cellpadding=0 cellspacing=0>Erst ab Version Enterprise verf&uuml;gbar</table>");
// $this->app->Tpl->Set('ZAHLUNGEN',"<table width=100% border=0 class=auftrag_cell cellpadding=0 cellspacing=0>Erst ab Version Enterprise verf&uuml;gbar</table>");
$this->app->Tpl->Set('ZAHLUNGEN',$this->RechnungZahlung(true));
if (!is_null($gutschrift)) {
@@ -2712,4 +2713,183 @@ class Rechnung extends GenRechnung
return $this->app->DB->GetInsertID();
}
function RechnungZahlung($return=false)
{
$id = $this->app->Secure->GetGET('id');
$rechnungArr = $this->app->DB->SelectArr(
"SELECT DATE_FORMAT(datum,'%d.%m.%Y') as datum, belegnr, soll, waehrung, rechnungid
FROM rechnung WHERE id='$id' LIMIT 1"
);
$waehrung = empty($rechnungArr)?'EUR':$rechnungArr[0]['waehrung'];
if(!$waehrung) {
$waehrung = 'EUR';
}
$rechnungid = empty($rechnungArr)?0: $rechnungArr[0]['rechnungid'];
$auftragid = $rechnungid <= 0?0:$this->app->DB->Select(
sprintf(
'SELECT `auftragid` FROM `rechnung` WHERE `id` = %d LIMIT 1',
$rechnungid
)
);
$eingang ="<tr><td colspan=\"3\"><b>Zahlungen</b></td></tr>";
$eingang .="<tr><td class=auftrag_cell>".$rechnungArr[0]['datum']
."</td><td class=auftrag_cell>RG ".$rechnungArr[0]['belegnr']
."</td><td class=auftrag_cell align=right>".$this->app->erp->EUR($rechnungArr[0]['soll'])
." $waehrung</td></tr>";
$eingangArr = $this->app->DB->SelectArr(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%d.%m.%Y') as datum, k.id as kontoauszuege,
ke.betrag as betrag, k.id as zeile,k.waehrung
FROM kontoauszuege_zahlungseingang ke
LEFT JOIN kontoauszuege k ON ke.kontoauszuege=k.id
LEFT JOIN konten ko ON k.konto=ko.id
WHERE (ke.objekt='rechnung' AND ke.parameter='$id')
OR (ke.objekt='auftrag' AND ke.parameter='$auftragid' AND ke.parameter>0)
OR (ke.objekt='rechnung' AND ke.parameter='$rechnungid' AND ke.parameter>0)"
);
$ceingangArr = empty($eingangArr)?0:(!empty($eingangArr)?count($eingangArr):0);
for($i=0;$i<$ceingangArr;$i++) {
$waehrung = 'EUR';
if($eingangArr[$i]['waehrung']) {
$waehrung = $eingangArr[$i]['waehrung'];
}
$eingang .="<tr><td class=auftrag_cell>".$eingangArr[$i]['datum']
."</td><td class=auftrag_cell>".$eingangArr[$i]['konto']
."&nbsp;(<a href=\"index.php?module=zahlungseingang&action=editzeile&id="
.$eingangArr[$i]['zeile']."\">zur Buchung</a>)</td><td class=auftrag_cell align=right>"
.$this->app->erp->EUR($eingangArr[$i]['betrag'])
." $waehrung</td></tr>";
}
// rechnungen zu dieser rechnung anzeigen
$rechnungen = $this->app->DB->SelectArr("SELECT belegnr, DATE_FORMAT(datum,'%d.%m.%Y') as datum,soll FROM rechnung WHERE rechnungid='$id'");
for($i=0;$i<(!empty($rechnungen)?count($rechnungen):0);$i++)
$eingang .="<tr><td class=auftrag_cell>".$rechnungen[$i]['datum']."</td><td class=auftrag_cell>GS ".$rechnungen[$i]['belegnr']."</td><td class=auftrag_cell align=right>".$this->app->erp->EUR($rechnungen[$i]['soll'])." EUR</td></tr>";
$ausgang = '';
$ausgangArr = $this->app->DB->SelectArr(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%d.%m.%Y') as datum, ke.betrag as betrag,
k.id as zeile,k.waehrung
FROM kontoauszuege_zahlungsausgang ke
LEFT JOIN kontoauszuege k ON ke.kontoauszuege=k.id
LEFT JOIN konten ko ON k.konto=ko.id
WHERE (ke.objekt='rechnung' AND ke.parameter='$id')
OR (ke.objekt='rechnung' AND ke.parameter='$rechnungid' AND ke.parameter>0)
OR (ke.objekt='auftrag' AND ke.parameter='$auftragid' AND ke.parameter>0)"
);
$cAusgangArr = empty($ausgangArr)?0:(!empty($ausgangArr)?count($ausgangArr):0);
for($i=0;$i<$cAusgangArr;$i++) {
$waehrung = 'EUR';
if($ausgangArr[$i]['waehrung']) {
$waehrung = $ausgangArr[$i]['waehrung'];
}
$ausgang .="<tr><td class=auftrag_cell>".$ausgangArr[$i]['datum']."</td><td class=auftrag_cell>"
.$ausgangArr[$i]['konto']."&nbsp;(<a href=\"index.php?module=zahlungseingang&action=editzeile&id="
.$ausgangArr[$i]['zeile']."\">zur Buchung</a>)</td><td class=auftrag_cell align=right>"
.$this->app->erp->EUR($ausgangArr[$i]['betrag'])
." $waehrung</td></tr>";
}
$saldo = $this->app->erp->EUR($this->RechnungSaldo($id));
if($saldo < 0) {
$saldo = "<b style=\"color:red\">$saldo</b>";
}
$waehrung = $this->app->DB->Select("SELECT waehrung FROM rechnung WHERE id = '$id' LIMIT 1");
if(!$waehrung) {
$waehrung = 'EUR';
}
$ausgang .="<tr><td class=auftrag_cell></td><td class=auftrag_cell align=right>Saldo</td><td class=auftrag_cell align=right>$saldo $waehrung</td></tr>";
if($return) {
return "<table width=100% border=0 class=auftrag_cell cellpadding=0 cellspacing=0>".$eingang." ".$ausgang."</table>";
}
}
public function RechnungSaldo($id)
{
if($id <= 0) {
return 0;
}
$rechnungid = $this->app->DB->Select(
sprintf(
'SELECT `rechnungid` FROM `rechnung` WHERE `id`= %d LIMIT 1',
$id
)
);
$auftragid = $rechnungid <= 0?0:$this->app->DB->Select(
sprintf(
'SELECT `auftragid` FROM `rechnung` WHERE `id`=%d LIMIT 1',
$rechnungid
)
);
$eingangArr = $this->app->DB->SelectArr(
sprintf(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%%d.%%m.%%Y') as datum, k.id as kontoauszuege, ke.betrag as betrag
FROM `kontoauszuege_zahlungseingang` AS `ke`
LEFT JOIN `kontoauszuege` AS `k` ON ke.kontoauszuege=k.id
LEFT JOIN `konten` AS `ko` ON k.konto=ko.id
WHERE (ke.objekt='rechnung' AND ke.parameter=%d)
OR (ke.objekt='auftrag' AND ke.parameter=%d AND ke.parameter>0)
OR (ke.objekt='rechnung' AND ke.parameter=%d AND ke.parameter>0)",
$id, $auftragid, $rechnungid
)
);
$einnahmen = 0;
if(!empty($eingangArr)) {
foreach($eingangArr AS $eingangRow) {
$einnahmen += $eingangRow['betrag'];
}
}
//$rechnungen = $this->app->DB->SelectArr("SELECT belegnr, DATE_FORMAT(datum,'%d.%m.%Y') as datum,soll FROM rechnung WHERE rechnungid='$id' "); // alt
$rechnungen = $this->app->DB->SelectArr(
sprintf(
"SELECT ro.belegnr, DATE_FORMAT(ro.datum,'%%d.%%m.%%Y') as datum, ro.soll
FROM `rechnung` AS `ro`
WHERE ro.`id` = %d ",
$id
)
);
if(!empty($rechnungen)) {
foreach($rechnungen as $rechnungRow) {
$einnahmen += $rechnungRow['soll'];
}
}
$ausgangArr = $this->app->DB->SelectArr(
sprintf(
"SELECT ko.bezeichnung as konto, DATE_FORMAT(ke.datum,'%%d.%%m') as datum, ke.betrag as betrag
FROM kontoauszuege_zahlungsausgang ke
LEFT JOIN kontoauszuege k ON ke.kontoauszuege=k.id
LEFT JOIN konten ko ON k.konto=ko.id
WHERE (ke.objekt='rechnung' AND ke.parameter=%d)
OR (ke.objekt='rechnung' AND ke.parameter=%d AND ke.parameter>0)
OR (ke.objekt='auftrag' AND ke.parameter=%d AND ke.parameter>0)",
$id, $rechnungid, $auftragid
)
);
$ausgaben = 0;
if(!empty($ausgangArr)){
foreach($ausgangArr as $ausgangRow) {
$ausgaben += $ausgangRow['betrg'];
}
}
return $einnahmen - $ausgaben;
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 KiB

After

Width:  |  Height:  |  Size: 358 KiB

@@ -4,12 +4,12 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<title>Xentral Login</title>
<title>OpenXE Login</title>
<link rel="stylesheet" href="themes/new/css/login.css?v=2">
</head>
<body>
<div class="permission-box">
<h1>LOGIN Xentral</h1>
<h1>OpenXE Login</h1>
<p class="error">Sie haben nicht das Recht auf diese Seite zugreifen zu d&uuml;rfen!</p>
<p><a href="BACK" class="btn btn-primary">Zur&uuml;ck zur vorherigen Seite</a></p>
<p><a href="index.php?module=welcome&action=logout" class="btn btn-secondary">Erneut einloggen</a></p>