Author SHA1 Message Date
OpenXE 3c8588562b V.1.11 2023-12-07 16:39:29 +01:00
OpenXE 3e2b5f6ee8 added github link to commits history 2023-12-07 16:29:42 +01:00
OpenXE 7ffb9a86a5 upgrade added strict DB mode 2023-12-07 14:32:02 +01:00
OpenXE 5816dedbc0 lieferschein minor bugfixes 2023-12-05 15:22:11 +01:00
OpenXE 12f5ca8211 logistik ein-auslagern menu change to listview 2023-12-05 11:52:01 +01:00
OpenXE 8b9969176c lieferschein umlagern repeat 2023-12-05 11:47:15 +01:00
OpenXE a6f742ccc0 lieferschein bugfix standardlager 2023-12-05 11:32:53 +01:00
OpenXE 2129627a5b lager lieferschein umlagern 2023-12-02 15:21:11 +01:00
OpenXE 22e411a6cc ticketregel bugfix warteschlange 0 2023-11-25 13:13:39 +01:00
OpenXE d7db78489c ticket add spam filter from list 2023-11-25 12:58:16 +01:00
OpenXE 088ad4555c ticketregeln added adresse 2023-11-25 11:24:23 +01:00
OpenXE 2cb1f91a43 ticket system attachments on ticket header 2023-11-19 14:07:16 +01:00
OpenXE dff342276e ticket added "mail to all" 2023-11-19 12:22:44 +01:00
OpenXE c76cb43bac Merge remote-tracking branch 'github/master' 2023-11-14 11:39:21 +01:00
OpenXE 72684cb092 auftrag deckungsbeitrag write einkaufspreis into auftrag_position 2023-11-14 11:38:14 +01:00
OpenXE-ERP 7624e01de4 Merge pull request #108 from OpenXE-org/OpenXE-ERP-patch-1
Update SERVER_INSTALL.md
2023-11-13 15:34:13 +01:00
OpenXE-ERP 9ebd5d2b2b Update SERVER_INSTALL.md 2023-11-13 15:32:42 +01:00
OpenXE bf3dad7e83 auftrag deckungsbeitrag added umsatz, kosten 2023-11-13 10:21:45 +01:00
OpenXE b7f8c7b359 auftrag format deckungsbeitrag 2 decimals 2023-11-12 13:18:13 +01:00
OpenXE 54fe339c65 auftrag DB % 2 decimals 2023-11-12 12:11:19 +01:00
OpenXE 7d0a5a0eee Auftrag deckungsbeitrag added manual ek and status != abgeschlossen for calculate 2023-11-11 23:12:29 +01:00
OpenXE 7cfb87c2c5 Auftrag deckungsbeitrag implemented 2023-11-11 22:57:32 +01:00
OpenXE 2ae5e9f44a bugfix exportbuchhaltung steuer 2023-11-11 16:37:25 +01:00
OpenXE c106282b13 bugfix copy projekt 2023-11-07 09:57:59 +01:00
OpenXE e737d69a77 bugfix stringcleaner array vs. object 2023-11-07 09:44:44 +01:00
OpenXE 2f646a7715 versand added tracking for mail variables, minor bugfixes 2023-11-02 11:56:05 +01:00
OpenXE-ERP c67d91a7dd Merge pull request #106 from tsgoff/testmailutf8
test mail utf8_encode
2023-11-02 10:45:42 +01:00
OpenXE 3e69b8d7e0 lieferschein added direct link paketmarke without versandmodul 2023-11-02 09:43:43 +01:00
OpenXE 77092171c3 auftrag show paket and tracking in minidetail 2023-11-01 21:07:05 +01:00
OpenXE a03d28ac69 lieferschein added multi action to set versand_status 2023-11-01 17:34:32 +01:00
OpenXE f55f801cee versandart added button to create versandart without modul 2023-11-01 17:20:54 +01:00
OpenXE 1fe0aea620 versandarten removed check if module is empty 2023-11-01 16:59:48 +01:00
OpenXE e474014b8c versandpakete extended handling of lieferschein_ohne_pos, tracking is editable if no versandmodul 2023-11-01 15:42:21 +01:00
OpenXE 3e70af8466 versandpakete bugfix check completion 2023-11-01 11:48:55 +01:00
OpenXE 662410fdc8 versand process added versand_status to lieferschein and status processing 2023-10-27 15:31:58 +02:00
OpenXE 7dcaae7fbb Paketmarke changed texts 2023-10-26 20:56:18 +02:00
OpenXE 18397a03c8 Paketmarke added info text Gewicht 2023-10-26 20:51:47 +02:00
OpenXE 504f0beb54 Paketmarke added doctype to text 2023-10-26 20:46:07 +02:00
OpenXE ecf986d33b versandpakete improvements 2023-10-26 20:23:19 +02:00
OpenXE eb00034a79 versandpakete bugfix 2023-10-25 13:49:27 +02:00
OpenXE a5be2e984a versandpakete improvements, added lieferungen view 2023-10-25 13:26:52 +02:00
OpenXE fb32cda643 versand bugfix no countries defined 2023-10-22 18:41:08 +02:00
OpenXE ca73f3dda5 versandpakete improvements 2023-10-22 18:27:01 +02:00
OpenXE 4488cf8688 versand icons and findcols 2023-10-22 16:02:11 +02:00
OpenXE ec7dc7b8a6 versandpakete update versender on shipping 2023-10-20 15:52:55 +02:00
OpenXE 6e857e6567 delivery icons 2023-10-20 15:48:53 +02:00
OpenXE a35ab21f7c versandpakete improvements 2023-10-20 15:47:37 +02:00
tsgoff f794b4db74 test mail utf8_encode 2023-10-20 15:40:47 +02:00
OpenXE e899b1c389 versandpakete intermediate 2023-10-18 14:35:35 +02:00
OpenXE b171dd7760 restored function VersandartMindestgewicht($id=0) in erpapi 2023-10-16 21:28:43 +02:00
OpenXE 4f7eb4049b versandpakete initial 2023-10-16 21:22:21 +02:00
OpenXE b838b63258 removed deprecated paketmarke functions from erpapi 2023-10-10 18:17:42 +02:00
OpenXE 5e1359f770 Bugfix ticket_edit betreff width 2023-10-09 19:18:24 +02:00
OpenXE 1bb701322b Wareneingang tabindex mengen 2023-10-07 13:49:26 +02:00
OpenXE 1e55ca1b3d Wareneingang enter press triggers save 2023-10-07 13:36:46 +02:00
OpenXE b34ba86421 Wareineingang bugfix lagerartikel, added some info text 2023-10-06 12:11:17 +02:00
OpenXE b2bf2f14f2 Wareneingang added empty and fill from bestellung 2023-10-04 12:31:02 +02:00
OpenXE bdb05c747a Wareneingang bugfix abschliessen, removed edit from minidetail 2023-10-01 19:48:21 +02:00
OpenXE b613a99791 Wareneingang added link to artikel 2023-10-01 19:33:05 +02:00
OpenXE 1dba7e9d7e Wareneingang save preliminary 2023-10-01 19:19:09 +02:00
OpenXE 60e21956ad class YUI removed <br> from tablesearch 2023-10-01 19:18:28 +02:00
OpenXE 545a39bbdc Wareneingang changed to booking all at once -> TBD: save preliminary, fill, empty 2023-09-30 11:40:59 +02:00
OpenXE 5ed516f9da ticket system betreff strip tags 2023-09-21 08:30:05 +02:00
OpenXE 76c770aba3 Bugfix managementboard removed invalid reference RechnungslaufRechnungslauf 2023-09-11 20:42:14 +02:00
OpenXE c9aee26df7 removed .woff2 fonts 2023-08-31 10:31:54 +02:00
OpenXE 91c2dc88ba document send preselect default mail address from firmendaten 2023-08-15 12:37:16 +02:00
OpenXE be222cc581 bugfix wareneingang bemerkung 2023-08-14 20:57:21 +02:00
86 changed files with 6345 additions and 5374 deletions
+1 -4
View File
@@ -54,14 +54,11 @@ memory_limit = 256M
## Install additional zip
`sudo apt-get install zip`
## Install mysql client
`sudo apt-get install mysql-client`
## Install database server
`sudo apt-get install mariadb-server`
## Configure database server
`sudo mysql_secure_installation`
`sudo mariadb-secure-installation`
```
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
@@ -285,6 +285,7 @@ class TicketImportHelper
tr.dsgvo AS `is_gdpr_relevant`,
tr.prio AS `priority`,
tr.persoenlich AS `is_private`,
tr.adresse,
tr.warteschlange AS `queue_id`
FROM `ticket_regeln` AS `tr`
WHERE
@@ -464,7 +465,7 @@ class TicketImportHelper
$status = 'neu';
}
$sql = "UPDATE `ticket` SET `dsgvo` = '".$rule['is_gdpr_relevant']."', `privat` = '".$rule['is_private']."', `prio` = '".$rule['priority']."', `warteschlange` = '".$rule['queue_id']."', `status` = '".$status."' WHERE `id` = '".$ticketId."'";
$sql = "UPDATE `ticket` SET `dsgvo` = '".$rule['is_gdpr_relevant']."', `privat` = '".$rule['is_private']."', `prio` = '".$rule['priority']."',`adresse` = '".$rule['adresse']."', `warteschlange` = '".$rule['queue_id']."', `status` = '".$status."' WHERE `id` = '".$ticketId."'";
$this->logger->debug('ticket rule sql',['sql' => $sql]);
+450 -448
View File
@@ -1,451 +1,453 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class StringCleaner
{
private $elements;
private $htmlpuriferconfig;
private $htmlpurifer;
private $ruleregexps;
/** @var Application */
private $app;
/**
* StringCleaner constructor.
*
* @param null|Application $app
*/
public function __construct($app = null)
{
$this->app = $app;
if(class_exists('HTMLPurifier_Config')) {
$this->htmlpuriferconfig = HTMLPurifier_Config::createDefault();
$this->htmlpuriferconfig->set('Core.Encoding', 'UTF-8');
$this->htmlpuriferconfig->set('Attr.AllowedFrameTargets', ['_blank']); // Allow hyperlinks with target="_blank"
//$this->htmlpuriferconfig->set('HTML.AllowedElements', 'h1,h2,h3,h4,h5,h6,p,a,strong,em,ol,ul,li,img,param,div,br,form,label,fieldset,input,textarea,select,option');
$this->htmlpurifer = new HTMLPurifier($this->htmlpuriferconfig);
}
$this->elements = array('nohtml'=> array('ust_befreit','abweichendelieferadresse','bestellungsart','bearbeiter','datum','lieferdatum','name','anrede','partner','packstation_inhaber','packstation_station','packstation_ident','packstation_plz','packstation_ort','partnerid','kennen','ihrebestellnummer'
,'abteilung','unterabteilung','ansprechpartner','adresszusatz','strasse','land','bundesstaat','plz','ort','versandart','internet','transaktionsnummer','vertrieb','zahlungsweise'
,'lieferabteilung','lieferunterabteilung','lieferansprechpartner','lieferadresszusatz','lieferstrasse','lieferland','lieferbundesstaat','lieferplz','lieferort'
,'bank_inhaber','bank_institut','bank_blz','bank_konto'
,'email','telefon','telefax','ustid','partner','projekt','herstellernummer','ean','nummer','name_de','name_ean'),
'nojs' => array('anabregstext','anabregstext_en','uebersicht_de','uebersicht_en','kurztext_de','kurztext_en','internebemerkung','internebezeichnung','freitext'));
$this->rulechecks = array('digit'=>'/^[0-9]+$/'
,'alpha'=>'/^[a-zA-Z]+$/'
,'alphadigit'=>'/^[0-9a-zA-Z]+$/'
,'username'=>'/^[0-9a-zA-Z\.\-]+$/'
,'space'=>'/^[\x20]+$/'
,'module'=>'/^[0-9a-zA-Z\_]$/'
,'password'=>'/^[^\s\n]{1}[^\n]{5}.*$/'
,'email'=>'/^[^@\s\x00-\x20]+@[^@\s\x00-\x20\.]+\.[^@\s\x00-\x20\.]+[^@\s\x00-\x20]*$/'
);
$this->ruleregexps = array(
'digit'=>'/[^0-9]/'
,'username'=>'/[^0-9a-zA-Z\.\-]/'
,'alpha'=>'/[^a-zA-Z]/'
,'alphadigits'=>'/[^0-9a-zA-Z]/'
,'module'=>'/[^0-9a-zA-Z\_]/'
,'moduleminus'=>'/[^0-9a-zA-Z\_\-]/'
,'alphadigitsspecial'=>'/[^0-9a-zA-Z\_\.\(\)]/'
,'base64'=>'/[^0-9a-zA-Z\=\+\-\_\/]/'
);
}
function SyntaxByElement($key, $default = '')
{
foreach($this->elements as $type => $arr) {
if(in_array($key, $arr)) {
return $type;
}
}
return $default;
}
function CleanSQLReturn($value, $columnname, $default = '')
{
if($value == '' || is_numeric($value))
{
return $value;
}
if(in_array($columnname, array('nummer','name','kundennummer','bezeichnung','bezeichnunglieferant','lieferantennummer','mitarbeiternummer','name_de','name_en',
'kurzbezeichnung','abkuerzung',
'strasse','plz','ort','land','ansprechpartner','abteilung','unterabteilung',
'liefername','lieferstrasse','lieferplz','lieferort','lieferland','lieferansprechpartner','lieferabteilung','lieferunterabteilung'))){
return strip_tags($value);
}
if($default == 'xss_clean')
{
return $this->xss_clean($value, false);
}
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($value);
}
return $value;
}
function RuleCheck($string, $rule = null, &$found = false)
{
if(isset($this->rulechecks[$rule]))
{
$found = true;
return preg_match_all($this->rulechecks[$rule], $string, $dummy);
}
switch($rule)
{
case 'datum':
$found = true;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try {
if($x = new DateTime($string)) {
return $x->format('Y') > 0;
}
}
catch (Exception $e) {
return false;
}
return false;
break;
}
}
function CheckSQLHtml($sql)
{
$start = 0;
$len = strlen($sql);
$lvl = 0;
$col = 0;
$ret = array(0);
$instring = false;
for($i = $start; $i < $len; $i++)
{
$char = $sql[$i];
switch($char)
{
case "'":
if($instring)
{
if($sql[$i-1] != '\\')
{
$instring = false;
}
}else{
if($sql[$i-1] != '\\'){
$instring = true;
}
}
break;
case "(":
if($instring)
{
}else{
$lvl++;
}
break;
case ")":
if($instring)
{
}else{
$lvl--;
}
break;
case "<":
if($instring)
{
if(preg_match('/<[a-zA-Z]/',$char.$sql[$i+1]))
{
if($ret[$col] != 2)
{
$ret[$col] = 1;
}
}
}
break;
case ',':
if($instring)
{
}else{
if($lvl == 0)
{
$col++;
$ret[$col] = 0;
}
}
break;
case 'o':
case 'O':
if($instring)
{
if($i < $len -4)
{
if(strtolower(substr($sql, $i, 2)) == 'on')
{
if(preg_match('/^on[a-z]+(\s*)=/', substr($sql, $i)))
{
$ret[$col] = 2;
}
}
}
}
break;
case 'F':
case 'f':
if($instring)
{
}else{
if($lvl == 0)
{
if($i < $len - 4)
{
if(strtolower(substr($sql, $i, 4)) == 'from')
{
break 2;
}
}
}
}
break;
}
}
$where = strripos($sql, 'where');
$restsql = substr($sql, $i, $where - $i);
if(preg_match('/<[a-zA-Z]/', $restsql))
{
if(preg_match('/on[a-z]+(\s*)=/',$restsql))
{
if($ret)
{
foreach($ret as $k => $v)
{
$ret[$k] = 2;
}
}
}else{
if($ret)
{
foreach($ret as $k => $v)
{
if($v != 2)
{
$ret[$k] = 1;
}
}
}
}
}
return $ret;
}
public function CleanString($string, $rule = null, &$found = false)
{
if(is_null($rule))
{
$rule = 'nothml';
}
switch($rule)
{
case 'email':
if($this->RuleCheck($string, $rule))
{
return $string;
}
return '';
break;
case 'nohtml':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false)
{
return $string;
}
return strip_tags($string);
break;
case 'datum':
$found = true;
$string_ = $string;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string_ = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try
{
if($x = new DateTime($string_))
{
if($x->format('Y') <= 0)
{
return '';
}
return $string;
}
} catch (Exception $e) {
return '';
}
return '';
break;
case 'xss_clean':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false){
return $string;
}
return $this->xss_clean($string, false);
break;
case 'nojs':
$found = true;
if($string == '' || is_numeric($string))return $string;
if(strpos($string,'<') === false)return $string;
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($string);
}
return $this->xss_clean($string);
break;
case 'id':
$found = true;
if((String)$string === '')
{
return $string;
}
return (int)$string;
break;
case 'doppelid':
$found = true;
if((String)$string === '')
{
return $string;
}
$stringa = explode('-', $string, 2);
if(count($stringa) == 1)return (int)$stringa[0];
return ($stringa[0]===''?'':(int)$stringa[0]).'-'.(int)$stringa[1];
break;
case 'module':
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
break;
default:
if(isset($this->ruleregexps[$rule]))
{
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
}
break;
}
return $string;
}
public function xss_clean($data, $usepurify = true)
{
if($usepurify && !empty($this->htmlpurifer))
{
return $this->htmlpurifer->purify($data);
}
// Fix &entity\n;
$data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
$data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
return $data;
// Remove any attribute starting with "on" or xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
// Remove javascript: and vbscript: protocols
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
// Remove namespaced elements (we do not need them)
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);
do
{
// Remove really unwanted tags
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);
return $data;
}
function XMLArray_clean(&$xml, $lvl = 0)
{
if(is_string($xml))
{
}elseif(is_array($xml))
{
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
if(is_string($v))
{
$xml[$k] = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}
}
}elseif(is_object($xml))
{
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
if(count($v) > 0)
{
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}elseif((String)$v != '')
{
if(isset($xml->$k))
{
//$xml->$k = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
}
}
}
}
return $xml;
}
}
<?php
class StringCleaner
{
private $elements;
private $htmlpuriferconfig;
private $htmlpurifer;
private $ruleregexps;
/** @var Application */
private $app;
/**
* StringCleaner constructor.
*
* @param null|Application $app
*/
public function __construct($app = null)
{
$this->app = $app;
if(class_exists('HTMLPurifier_Config')) {
$this->htmlpuriferconfig = HTMLPurifier_Config::createDefault();
$this->htmlpuriferconfig->set('Core.Encoding', 'UTF-8');
$this->htmlpuriferconfig->set('Attr.AllowedFrameTargets', ['_blank']); // Allow hyperlinks with target="_blank"
//$this->htmlpuriferconfig->set('HTML.AllowedElements', 'h1,h2,h3,h4,h5,h6,p,a,strong,em,ol,ul,li,img,param,div,br,form,label,fieldset,input,textarea,select,option');
$this->htmlpurifer = new HTMLPurifier($this->htmlpuriferconfig);
}
$this->elements = array('nohtml'=> array('ust_befreit','abweichendelieferadresse','bestellungsart','bearbeiter','datum','lieferdatum','name','anrede','partner','packstation_inhaber','packstation_station','packstation_ident','packstation_plz','packstation_ort','partnerid','kennen','ihrebestellnummer'
,'abteilung','unterabteilung','ansprechpartner','adresszusatz','strasse','land','bundesstaat','plz','ort','versandart','internet','transaktionsnummer','vertrieb','zahlungsweise'
,'lieferabteilung','lieferunterabteilung','lieferansprechpartner','lieferadresszusatz','lieferstrasse','lieferland','lieferbundesstaat','lieferplz','lieferort'
,'bank_inhaber','bank_institut','bank_blz','bank_konto'
,'email','telefon','telefax','ustid','partner','projekt','herstellernummer','ean','nummer','name_de','name_ean'),
'nojs' => array('anabregstext','anabregstext_en','uebersicht_de','uebersicht_en','kurztext_de','kurztext_en','internebemerkung','internebezeichnung','freitext'));
$this->rulechecks = array('digit'=>'/^[0-9]+$/'
,'alpha'=>'/^[a-zA-Z]+$/'
,'alphadigit'=>'/^[0-9a-zA-Z]+$/'
,'username'=>'/^[0-9a-zA-Z\.\-]+$/'
,'space'=>'/^[\x20]+$/'
,'module'=>'/^[0-9a-zA-Z\_]$/'
,'password'=>'/^[^\s\n]{1}[^\n]{5}.*$/'
,'email'=>'/^[^@\s\x00-\x20]+@[^@\s\x00-\x20\.]+\.[^@\s\x00-\x20\.]+[^@\s\x00-\x20]*$/'
);
$this->ruleregexps = array(
'digit'=>'/[^0-9]/'
,'username'=>'/[^0-9a-zA-Z\.\-]/'
,'alpha'=>'/[^a-zA-Z]/'
,'alphadigits'=>'/[^0-9a-zA-Z]/'
,'module'=>'/[^0-9a-zA-Z\_]/'
,'moduleminus'=>'/[^0-9a-zA-Z\_\-]/'
,'alphadigitsspecial'=>'/[^0-9a-zA-Z\_\.\(\)]/'
,'base64'=>'/[^0-9a-zA-Z\=\+\-\_\/]/'
);
}
function SyntaxByElement($key, $default = '')
{
foreach($this->elements as $type => $arr) {
if(in_array($key, $arr)) {
return $type;
}
}
return $default;
}
function CleanSQLReturn($value, $columnname, $default = '')
{
if($value == '' || is_numeric($value))
{
return $value;
}
if(in_array($columnname, array('nummer','name','kundennummer','bezeichnung','bezeichnunglieferant','lieferantennummer','mitarbeiternummer','name_de','name_en',
'kurzbezeichnung','abkuerzung',
'strasse','plz','ort','land','ansprechpartner','abteilung','unterabteilung',
'liefername','lieferstrasse','lieferplz','lieferort','lieferland','lieferansprechpartner','lieferabteilung','lieferunterabteilung'))){
return strip_tags($value);
}
if($default == 'xss_clean')
{
return $this->xss_clean($value, false);
}
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($value);
}
return $value;
}
function RuleCheck($string, $rule = null, &$found = false)
{
if(isset($this->rulechecks[$rule]))
{
$found = true;
return preg_match_all($this->rulechecks[$rule], $string, $dummy);
}
switch($rule)
{
case 'datum':
$found = true;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try {
if($x = new DateTime($string)) {
return $x->format('Y') > 0;
}
}
catch (Exception $e) {
return false;
}
return false;
break;
}
}
function CheckSQLHtml($sql)
{
$start = 0;
$len = strlen($sql);
$lvl = 0;
$col = 0;
$ret = array(0);
$instring = false;
for($i = $start; $i < $len; $i++)
{
$char = $sql[$i];
switch($char)
{
case "'":
if($instring)
{
if($sql[$i-1] != '\\')
{
$instring = false;
}
}else{
if($sql[$i-1] != '\\'){
$instring = true;
}
}
break;
case "(":
if($instring)
{
}else{
$lvl++;
}
break;
case ")":
if($instring)
{
}else{
$lvl--;
}
break;
case "<":
if($instring)
{
if(preg_match('/<[a-zA-Z]/',$char.$sql[$i+1]))
{
if($ret[$col] != 2)
{
$ret[$col] = 1;
}
}
}
break;
case ',':
if($instring)
{
}else{
if($lvl == 0)
{
$col++;
$ret[$col] = 0;
}
}
break;
case 'o':
case 'O':
if($instring)
{
if($i < $len -4)
{
if(strtolower(substr($sql, $i, 2)) == 'on')
{
if(preg_match('/^on[a-z]+(\s*)=/', substr($sql, $i)))
{
$ret[$col] = 2;
}
}
}
}
break;
case 'F':
case 'f':
if($instring)
{
}else{
if($lvl == 0)
{
if($i < $len - 4)
{
if(strtolower(substr($sql, $i, 4)) == 'from')
{
break 2;
}
}
}
}
break;
}
}
$where = strripos($sql, 'where');
$restsql = substr($sql, $i, $where - $i);
if(preg_match('/<[a-zA-Z]/', $restsql))
{
if(preg_match('/on[a-z]+(\s*)=/',$restsql))
{
if($ret)
{
foreach($ret as $k => $v)
{
$ret[$k] = 2;
}
}
}else{
if($ret)
{
foreach($ret as $k => $v)
{
if($v != 2)
{
$ret[$k] = 1;
}
}
}
}
}
return $ret;
}
public function CleanString($string, $rule = null, &$found = false)
{
if(is_null($rule))
{
$rule = 'nothml';
}
switch($rule)
{
case 'email':
if($this->RuleCheck($string, $rule))
{
return $string;
}
return '';
break;
case 'nohtml':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false)
{
return $string;
}
return strip_tags($string);
break;
case 'datum':
$found = true;
$string_ = $string;
if(preg_match_all('/([0-9]+)\.([0-9]+)\.$/', $string, $matches))
{
$string_ = $matches[1][0].'.'.$matches[2][0].'.'.date('Y');
}
try
{
if($x = new DateTime($string_))
{
if($x->format('Y') <= 0)
{
return '';
}
return $string;
}
} catch (Exception $e) {
return '';
}
return '';
break;
case 'xss_clean':
$found = true;
if($string == '' || is_numeric($string))
{
return $string;
}
if(strpos($string,'<') === false){
return $string;
}
return $this->xss_clean($string, false);
break;
case 'nojs':
$found = true;
if($string == '' || is_numeric($string))return $string;
if(strpos($string,'<') === false)return $string;
if($this->htmlpurifer)
{
return $this->htmlpurifer->purify($string);
}
return $this->xss_clean($string);
break;
case 'id':
$found = true;
if((String)$string === '')
{
return $string;
}
return (int)$string;
break;
case 'doppelid':
$found = true;
if((String)$string === '')
{
return $string;
}
$stringa = explode('-', $string, 2);
if(count($stringa) == 1)return (int)$stringa[0];
return ($stringa[0]===''?'':(int)$stringa[0]).'-'.(int)$stringa[1];
break;
case 'module':
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
break;
default:
if(isset($this->ruleregexps[$rule]))
{
$found = true;
return preg_replace ($this->ruleregexps[$rule], '' , $string);
}
break;
}
return $string;
}
public function xss_clean($data, $usepurify = true)
{
if($usepurify && !empty($this->htmlpurifer))
{
return $this->htmlpurifer->purify($data);
}
// Fix &entity\n;
$data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
$data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
return $data;
// Remove any attribute starting with "on" or xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
// Remove javascript: and vbscript: protocols
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
// Remove namespaced elements (we do not need them)
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);
do
{
// Remove really unwanted tags
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);
return $data;
}
function XMLArray_clean(&$xml, $lvl = 0)
{
if(is_string($xml))
{
}elseif(is_array($xml))
{
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
if(is_string($v))
{
$xml[$k] = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}
}
}elseif(is_object($xml))
{
$xml = (array) $xml;
if(count($xml) > 0)
{
foreach($xml as $k => $v)
{
$v = (array) $v;
if(count($v) > 0)
{
if($lvl < 10)
{
$this->XMLArray_clean($v, $lvl + 1);
}
}elseif((String)$v != '')
{
if(isset($xml->$k))
{
//$xml->$k = $this->CleanString($v, $this->SyntaxByElement($k,'nojs'));
}
}
}
}
}
return $xml;
}
}
+166 -36
View File
@@ -28,6 +28,15 @@ class YUI {
$this->app = $app;
}
function dateien_module_objekt_map($module) : string {
$dateien_module_objekt_map_array = array(
'adresse' => 'adressen',
'ticket' => 'ticket_header'
);
return (isset($dateien_module_objekt_map_array[$module]) ? $dateien_module_objekt_map_array[$module] : $module);
}
function PasswordCheck($passwordFieldID, $repassFieldID, $accountNameFieldID, $submitButtonID, $extra = ''){
$this->app->Tpl->Add('JQUERYREADY', "
function checkPassword(){
@@ -2578,11 +2587,19 @@ class YUI {
if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnung,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnung))
) $erweiterte_ansicht)
as Artikel,
p.abkuerzung as projekt,
b.nummer as nummer,
DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum,
trim(b.menge)+0 as menge,
".$this->FormatPreis($preiscell)." as preis,
b.waehrung,
".$this->FormatPreis('b.rabatt')." as rabatt,";
p.abkuerzung as projekt, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge, ".$this->FormatPreis($preiscell)." as preis,b.waehrung, ".$this->FormatPreis('b.rabatt')." as rabatt, ";
if ($this->app->erp->RechteVorhanden('auftrag','einkaufspreise')) {
$sql .= $this->FormatPreis('einkaufspreis')." as einkaufspreis,
CONCAT(".$this->app->erp->FormatPreis("ROUND(deckungsbeitrag*100,2)",2).",'%') AS DB,
";
}
$sql .= "b.id as id
FROM $table b
@@ -3614,6 +3631,121 @@ class YUI {
'</td></tr></table>')";
}
function IconsSQL_versandpaket() {
/*
status:
neu ->
Lagergo
lagergo_stop
lagerstop
Schein
summe_go
summe_stop
Auto
liefersperrego
liefersperrestop
marke
portogo
portostop
produktion_usn_gut
storno*/
$lieferschein_kein = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/summe_stop.png\" title=\"Kein Lieferschein\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_ohne_pos = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" title=\"Lieferschein ohne Positionen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_voll = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Lieferschein vollst&auml;ndig\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo_teil.png\" title=\"Lieferschein teilweise\" border=\"0\" style=\"margin-right:1px\">";
$versendet = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" title=\"Versendet\" border=\"0\" style=\"margin-right:1px\">";
$versendet_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" title=\"Nicht versendet\" border=\"0\" style=\"margin-right:1px\">";
$paketmarke = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/portogo.png\" style=\"margin-right:1px\" title=\"Paketmarke\" border=\"0\">";
$paketmarke_keine = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/portostop.png\" style=\"margin-right:1px\" title=\"Keine Paketmarke\" border=\"0\">";
$ausgeliefert = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery_ok.png\" style=\"margin-right:1px\" title=\"Ausgeliefert\" border=\"0\">";
$ausgeliefert_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery.png\" style=\"margin-right:1px\" title=\"Nicht ausgeliefert\" border=\"0\">";
$storno = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/storno.png\" style=\"margin-right:1px\" title=\"Storniert\" border=\"0\">";
for ($z = 0;$z < 4;$z++) {
$abgeschlossen .= $ausgeliefert;
$storniert .= $storno;
}
return "CONCAT('<table><tr><td nowrap>',
CASE
WHEN status = 'storniert' THEN '$storniert'
ELSE CONCAT(
CASE
WHEN lieferscheine <> '' AND vmenge = lmenge THEN '$lieferschein_voll'
WHEN lieferschein_ohne_pos <> '' AND vmenge IS NULL THEN '$lieferschein_ohne_pos'
WHEN lieferscheine <> '' THEN '$lieferschein_teil'
ELSE
'$lieferschein_kein'
END,
CASE
WHEN tracking <> '' THEN '$paketmarke'
ELSE
'$paketmarke_keine'
END,
CASE
WHEN status = 'versendet' THEN '$versendet'
WHEN status = 'abgeschlossen' THEN '$versendet'
ELSE
'$versendet_nicht'
END,
CASE
WHEN status = 'abgeschlossen' THEN '$ausgeliefert'
ELSE
'$ausgeliefert_nicht'
END
)
END,
'</td></tr></table>')";
}
function IconsSQL_lieferung() {
$lieferschein_kein = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagerstop.png\" title=\"Keine Artikel in Versandpaketen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_ohne_pos = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" title=\"Lieferschein ohne Positionen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_voll = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" title=\"Artikel vollst&auml;ndig in Versandpaketen\" border=\"0\" style=\"margin-right:1px\">";
$lieferschein_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/lagergo_stop.png\" title=\"Artikel teilweise in Versandpaketen\" border=\"0\" style=\"margin-right:1px\">";
$versendet = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrego.png\" title=\"Versendet\" border=\"0\" style=\"margin-right:1px\">";
$versendet_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperrestop.png\" title=\"Nicht versendet\" border=\"0\" style=\"margin-right:1px\">";
$versendet_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/liefersperregostop.png\" title=\"Teilweise versendet\" border=\"0\" style=\"margin-right:1px\">";
$ausgeliefert = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery_ok.png\" style=\"margin-right:1px\" title=\"Ausgeliefert\" border=\"0\">";
$ausgeliefert_nicht = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery.png\" style=\"margin-right:1px\" title=\"Nicht ausgeliefert\" border=\"0\">";
$ausgeliefert_teil = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delivery_pending.png\" style=\"margin-right:1px\" title=\"Teilweise ausgeliefert\" border=\"0\">";
$storno = "<img src=\"./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/storno.png\" style=\"margin-right:1px\" title=\"Storniert\" border=\"0\">";
return "CONCAT(
'<table><tr><td nowrap>',
CASE
WHEN vmenge >= lmenge THEN '$lieferschein_voll'
WHEN vmenge < lmenge AND vmenge <> 0 THEN '$lieferschein_teil'
ELSE '$lieferschein_kein'
END,
CASE
WHEN alle_abgeschlossen THEN '$versendet'
WHEN alle_versendet THEN '$versendet'
WHEN eins_versendet THEN '$versendet_teil'
ELSE '$versendet_nicht'
END,
CASE
WHEN alle_abgeschlossen THEN '$ausgeliefert'
WHEN eins_abgeschlossen THEN '$ausgeliefert_teil'
ELSE '$ausgeliefert_nicht'
END,
'</td></tr></table>')";
}
function TablePositionSearch($parsetarget, $name, $callback = "show", $gener) {
$id = $this->app->Secure->GetGET("id");
@@ -3951,6 +4083,7 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
$allowed['wiki'] = array('dateien');
$allowed['geschaeftsbrief_vorlagen'] = array('dateien');
$allowed['kasse'] = array('dateien');
$allowed['ticket'] = array('dateien');
$id = $this->app->Secure->GetGET("id");
$sid = $this->app->Secure->GetGET("sid");
@@ -3959,13 +4092,8 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
}
parse_str(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY), $queries);
switch($queries['module'])
{
case "adresse": $objekt="adressen"; break;
default: $objekt=$queries['module'];
}
//if(!ctype_alpha($objekt))$objekt="";
$objekt = $this->dateien_module_objekt_map($queries['module']);
if(!preg_match('/[A-Za-z_]/', $objekt)) {
$objekt='';
@@ -5702,12 +5830,8 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
}
}
// Fester filter
$more_data6 = $this->app->Secure->GetGET("more_data6");
$more_data7 = $this->app->Secure->GetGET("more_data7");
$more_data8 = $this->app->Secure->GetGET("more_data8");
$more_data4 = $this->app->Secure->GetGET("more_data4");
/*
$versandjoin = "";
if(isset($parameter['offenversandzentrum']) && !empty($parameter['offenversandzentrum']))
{
@@ -5741,8 +5865,8 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
}
if($versandjoin)$sql .= $versandjoin;
*/
if($more_data4 || (isset($parameter['ohnerechnung']) && !empty($parameter['ohnerechnung']))) {
$paramsArray[] = " l.status !='storniert' ";
@@ -5817,6 +5941,21 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
if ($more_data3 == 1) $subwhere[] = " l.lieferantenretoure=1 ";
// ENDE EXTRA more
$more_data6 = $this->app->Secure->GetGET("more_data6");
$more_data7 = $this->app->Secure->GetGET("more_data7");
$more_data8 = $this->app->Secure->GetGET("more_data8");
if ($more_data6) {
$subwhere[] = "l.versand_status = 3";
}
if ($more_data7) {
$subwhere[] = "l.versand_status = 1";
}
if ($more_data8) {
$subwhere[] = "l.versand_status IN (2,3)";
}
for ($j = 0;$j < (empty($subwhere)?0:count($subwhere));$j++) $tmp.= " AND " . $subwhere[$j];
$where = " l.id!='' AND l.status!='angelegt' $tmp " . $this->app->erp->ProjektRechte('p.id', true, 'l.vertriebid');
@@ -12108,9 +12247,6 @@ url:strUrl, success:function(html){strReturn = html;}, async:false
</tr>
</tfoot>
</table></div>
<br>
<br>
<br>
');
if((empty($disableautosavefilter)) && $this->anzusersaves < 2) {
@@ -13936,11 +14072,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
$sid = (int)$this->app->Secure->GetPOST("sid");
$sort = $this->app->DB->Select("SELECT sort FROM datei_stichwoerter WHERE id = '$sid' LIMIT 1");
$id = (int)$this->app->Secure->GetGET("id");
switch($module)
{
case "adresse": $objekt="adressen"; break;
default: $objekt=$module;
}
$objekt = $this->dateien_module_objekt_map($module);
if(!preg_match('/[A-Za-z_]/', $objekt))$objekt="";
$parameter=$id;
@@ -13969,11 +14101,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
$sid = (int)$this->app->Secure->GetPOST("sid");
$sort = $this->app->DB->Select("SELECT sort FROM datei_stichwoerter WHERE id = '$sid' LIMIT 1");
$id = (int)$this->app->Secure->GetGET("id");
switch($module)
{
case "adresse": $objekt="adressen"; break;
default: $objekt=$module;
}
$objekt = $this->dateien_module_objekt_map($module);
if(!preg_match('/[A-Za-z_]/', $objekt))$objekt="";
$parameter=$id;
@@ -14072,7 +14200,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
$this->app->Tpl->Add('MESSAGE','<div class="error">Keine Dateien ausgew&auml;hlt!</div>');
}else{
$objekt = $this->app->Secure->GetGET('module');
if($objekt == 'adresse')$objekt = 'adressen';
$objekt = $this->dateien_module_objekt_map($objekt);
$parameter = (int)$this->app->Secure->GetGET('id');
$alledateien = $this->app->DB->SelectArr("SELECT v.datei, v.id FROM
datei d INNER JOIN datei_stichwoerter s ON d.id=s.datei INNER JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0 ");
@@ -14139,7 +14267,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
$this->app->Tpl->Add('MESSAGE','<div class="error">Keine Dateien ausgew&auml;hlt!</div>');
}else{
$objekt = $this->app->Secure->GetGET('module');
if($objekt == 'adresse')$objekt = 'adressen';
$objekt = $this->dateien_module_objekt_map($objekt);
$typmodul = $this->app->Secure->GetPOST('typ');
if($objekt == 'dateien' && $typmodul == 'geschaeftsbrief_vorlagen'){
$objekt = $typmodul;
@@ -14595,7 +14723,7 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift" || $module == "proformarechnung") {
if ($schreibschutz != 1) {
$addrow = array('<form action="" method="post" id="myform">', '[ARTIKELSTART]<input type="text" size="30" name="artikel" id="artikel" onblur="window.setTimeout(\'selectafterblur()\',200);">[ARTIKELENDE]', '<input type="text" name="projekt" id="projekt" size="10" readonly onclick="checkhere()" >', '<input type="text" name="nummer" id="nummer" size="7">', '<input type="text" size="8" name="lieferdatum" id="lieferdatum">', '<input type="text" name="menge" id="menge" size="5" onblur="window.setTimeout(\'selectafterblurmenge()\',200); document.getElementById(\'preis\').style.background =\'none\';">', '<input type="text" name="preis" id="preis" size="10" onclick="checkhere();">', '<input type="text" name="waehrung" id="waehrung" size="10" onclick="checkhere();">' ,'<input type="text" name="rabatt" id="rabatt" size="7">');
$addrow = array('<form action="" method="post" id="myform">', '[ARTIKELSTART]<input type="text" size="30" name="artikel" id="artikel" onblur="window.setTimeout(\'selectafterblur()\',200);">[ARTIKELENDE]', '<input type="text" name="projekt" id="projekt" size="10" readonly onclick="checkhere()" >', '<input type="text" name="nummer" id="nummer" size="7">', '<input type="text" size="8" name="lieferdatum" id="lieferdatum">', '<input type="text" name="menge" id="menge" size="5" onblur="window.setTimeout(\'selectafterblurmenge()\',200); document.getElementById(\'preis\').style.background =\'none\';">', '<input type="text" name="preis" id="preis" size="10" onclick="checkhere();">', '<input type="text" name="waehrung" id="waehrung" size="10" onclick="checkhere();">' ,'<input type="text" name="rabatt" id="rabatt" size="7">','','');
$addrow[] = '<input type="submit" value="einf&uuml;gen" name="ajaxbuchen">
<script type="text/javascript">
document.onkeydown = function(evt) {
@@ -14758,9 +14886,11 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl
}
$table->headings[6] = 'Preis';
$mengencol = 5;
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") $table->headings[7] = 'W&auml;hrung';
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") $table->headings[8] = 'Rabatt';
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") $rabattcol = 8;
if ($module == "angebot" || $module == "auftrag" || $module == "rechnung" || $module == "gutschrift") {
$table->headings[7] = 'W&auml;hrung';
$table->headings[8] = 'Rabatt';
$rabattcol = 8;
}
}
$__arr = array($summencol, $mengencol, $rabattcol, $ecol, $dcol,$zwischensumme);
$this->app->erp->RunHook('yui_sortlistadd_draw', 2,$table,$__arr);
@@ -42,7 +42,11 @@ class PLACEHOLDER_MODULECLASSNAME {
$defaultorder = 1;
$defaultorderdesc = 0;
$dropnbox = "PLACEHOLDER_DROPNBOX";
$dropnbox = "PLACEHOLDER_DROPNBOX";
// $moreinfo = true; // Allow drop down details
// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails
// $menucol = 11; // Set id col for moredata/menu
$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>";
@@ -118,6 +122,8 @@ class PLACEHOLDER_MODULECLASSNAME {
// Add checks here
// $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form?
$columns = "id, ";
$values = "$id, ";
$update = "";
@@ -166,6 +172,9 @@ class PLACEHOLDER_MODULECLASSNAME {
$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->SetInput($input);
@@ -183,14 +192,4 @@ class PLACEHOLDER_MODULECLASSNAME {
return $input;
}
/*
* Set all fields in the page corresponding to $input
*/
function SetInput($input) {
// $this->app->Tpl->Set('EMAIL', $input['email']);
PLACEHOLDER_SET_INPUT
}
}
}
+180
View File
@@ -57169,6 +57169,28 @@
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "versand_status",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "umgelagert",
"Type": "int(1)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
@@ -64785,6 +64807,17 @@
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "vorlaeufig",
"Type": "int(1)",
"Collation": null,
"Null": "YES",
"Key": "",
"Default": "",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
@@ -104749,6 +104782,17 @@
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "adresse",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "warteschlange",
"Type": "text",
@@ -112651,6 +112695,76 @@
}
]
},
{
"name": "versandpaket_lieferschein_position",
"collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
"Field": "id",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "auto_increment",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "versandpaket",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "lieferschein_position",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "menge",
"Type": "decimal(14,4)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
{
"Key_name": "PRIMARY",
"Index_type": "BTREE",
"columns": [
"id"
],
"Non_unique": ""
},
{
"Key_name": "versandpaket_lieferschein_position",
"Index_type": "BTREE",
"columns": [
"versandpaket",
"lieferschein_position"
],
"Non_unique": "UNIQUE"
}
]
},
{
"name": "versandarten",
"collation": "utf8mb3_general_ci",
@@ -112838,6 +112952,17 @@
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "datum",
"Type": "datetime",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "current_timestamp()",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "versand",
"Type": "int(11)",
@@ -112860,6 +112985,28 @@
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "versandart",
"Type": "varchar(64)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": "",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "lieferschein_ohne_pos",
"Type": "int(11)",
"Collation": null,
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "tracking",
"Type": "varchar(255)",
@@ -112871,6 +113018,17 @@
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "tracking_link",
"Type": "text",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": "",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "versender",
"Type": "varchar(255)",
@@ -112903,6 +113061,28 @@
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "status",
"Type": "varchar(64)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "usereditid",
"Type": "int(11)",
"Collation": null,
"Null": "YES",
"Key": "MUL",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
+20 -3
View File
@@ -112,6 +112,12 @@ if (php_sapi_name() == "cli") {
$check_db = true;
} else {
}
if (in_array('-strict', $argv)) {
$strict_db = true;
} else {
$strict_db = false;
}
if (in_array('-do', $argv)) {
if (!$check_git && !$check_db) {
@@ -127,7 +133,17 @@ if (php_sapi_name() == "cli") {
}
if ($check_git || $check_db || $do_git || $do_db) {
upgrade_main($directory,$verbose,$check_git,$do_git,$export_db,$check_db,$do_db,$force,$connection,$origin);
upgrade_main( directory: $directory,
verbose: $verbose,
check_git: $check_git,
do_git: $do_git,
export_db: $export_db,
check_db: $check_db,
strict_db: $strict_db,
do_db: $do_db,
force: $force,
connection: $connection,
origin: $origin);
} else {
info();
}
@@ -139,7 +155,7 @@ if (php_sapi_name() == "cli") {
}
// -------------------------------- END
function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do_git, bool $export_db, bool $check_db, bool $do_db, bool $force, bool $connection, bool $origin) {
function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do_git, bool $export_db, bool $check_db, bool $strict_db, bool $do_db, bool $force, bool $connection, bool $origin) {
$mainfolder = dirname($directory);
$datafolder = $directory."/data";
@@ -379,7 +395,7 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
echo_out("--------------- Calculating database upgrade for '$schema@$host'... ---------------\n");
$upgrade_sql = array();
$result = mustal_calculate_db_upgrade($compare_def, $db_def, $upgrade_sql, $mustal_replacers);
$result = mustal_calculate_db_upgrade($compare_def, $db_def, $upgrade_sql, $mustal_replacers, $strict_db);
if (!empty($result)) {
abort(count($result)." errors.\n");
@@ -482,6 +498,7 @@ function info() {
echo_out("\t-f: force override of existing files\n");
echo_out("\t-o: update from origin instead of remote.json\n");
echo_out("\t-connection use connection.json in data folder instead of user.inc.php\n");
echo_out("\t-strict: innodb_strict_mode=ON\n");
echo_out("\t-clean: (not yet implemented) create the needed SQL to remove items from the database not in the JSON\n");
echo_out("\n");
}
+6 -4
View File
@@ -21,7 +21,7 @@ function mustal_compare_table_array(array $nominal, string $nominal_name, array
Compare two database structures
Returns a structured array containing information on all the differences.
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql) : int
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql, bool $strict) : int
Generate the SQL needed to upgrade the database to match the definition, based on a comparison.
Data structure in Array and JSON
@@ -542,7 +542,7 @@ function mustal_implode_with_quote(string $quote, string $delimiter, array $arra
// 11 Table type upgrade not supported
// 12 Upgrade type not supported
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql, array $replacers) : array {
function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$upgrade_sql, array $replacers, bool $strict) : array {
$result = array();
$upgrade_sql = array();
@@ -752,8 +752,10 @@ function mustal_calculate_db_upgrade(array $compare_def, array $db_def, array &$
$upgrade_sql = array_unique($upgrade_sql);
if (count($upgrade_sql) > 0) {
array_unshift($upgrade_sql,"SET SQL_MODE='ALLOW_INVALID_DATES';","SET SESSION innodb_strict_mode=OFF;");
array_unshift($upgrade_sql,"SET SQL_MODE='ALLOW_INVALID_DATES';");
if (!$strict) {
array_unshift($upgrade_sql,"SET SESSION innodb_strict_mode=OFF;");
}
}
return($result);
+1 -1
View File
@@ -1,7 +1,7 @@
<?php
$version="OSS";
$version_revision="1.10";
$version_revision="1.11";
$githash = file_get_contents("../githash.txt");
if (!empty($githash)) {
$version_revision .= " (".substr($githash,0,8).")";
+44 -1479
View File
File diff suppressed because it is too large Load Diff
+66 -20
View File
@@ -75,7 +75,8 @@ abstract class Versanddienstleister
$ret['lieferscheinId'] = $lieferscheinId;
$addressfields = ['name', 'adresszusatz', 'abteilung', 'ansprechpartner', 'unterabteilung', 'ort', 'plz',
'strasse', 'land'];
'strasse', 'land'];
$ret['original'] = array_filter($docArr, fn($key) => in_array($key, $addressfields), ARRAY_FILTER_USE_KEY);
$ret['name'] = empty(trim($docArr['ansprechpartner'])) ? trim($docArr['name']) : trim($docArr['ansprechpartner']);
@@ -127,7 +128,7 @@ abstract class Versanddienstleister
if (!empty($docArr['ihrebestellnummer'])) {
$orderNumberParts[] = $docArr['ihrebestellnummer'];
}
$orderNumberParts[] = $docArr['belegnr'];
$orderNumberParts[] = ucfirst($sid)." ".$docArr['belegnr'];
$ret['order_number'] = implode(' / ', $orderNumberParts);
}
@@ -369,7 +370,7 @@ abstract class Versanddienstleister
return true;
}
public function Paketmarke(string $target, string $docType, int $docId): void
public function Paketmarke(string $target, string $docType, int $docId, $versandpaket = null): void
{
$address = $this->GetAdressdaten($docId, $docType);
if (isset($_SERVER['CONTENT_TYPE']) && ($_SERVER['CONTENT_TYPE'] === 'application/json')) {
@@ -378,25 +379,65 @@ abstract class Versanddienstleister
if ($json->submit == 'print') {
$result = $this->CreateShipment($json, $address);
if ($result->Success) {
$sql = "INSERT INTO versand
(adresse, lieferschein, versandunternehmen, gewicht, tracking, tracking_link, anzahlpakete)
VALUES
({$address['addressId']}, {$address['lieferscheinId']}, '$this->type',
'$json->weight', '$result->TrackingNumber', '$result->TrackingUrl', 1)";
$this->app->DB->Insert($sql);
if (empty($versandpaket)) {
$sql = "INSERT INTO versandpakete
(
lieferschein_ohne_pos,
gewicht,
tracking,
tracking_link,
status,
versandart,
versender
)
VALUES
(
{$address['lieferscheinId']},
'$json->weight',
'$result->TrackingNumber',
'$result->TrackingUrl',
'neu',
'$this->type',
'".$this->app->User->GetName()."'
)";
$this->app->DB->Insert($sql);
$versandpaket = $this->app->DB->GetInsertID();
}
else {
$sql = "UPDATE versandpakete SET
gewicht = '".$json->weight."',
tracking = '".$result->TrackingNumber."',
tracking_link = '".$result->TrackingUrl."'
WHERE id = '".$versandpaket."'
";
$this->app->DB->Update($sql);
}
$filename = $this->app->erp->GetTMP() . join('_', [$this->type, 'Label', $result->TrackingNumber]) . '.pdf';
file_put_contents($filename, $result->Label);
$this->app->printer->Drucken($this->labelPrinterId, $filename);
$filename = join('_', [$this->type, 'Label', $result->TrackingNumber]) . '.pdf';
$filefullpath = $this->app->erp->GetTMP() . $filename;
file_put_contents($filefullpath, $result->Label);
$this->app->erp->CreateDateiWithStichwort(
$filename,
'Paketmarke '.$this->type.' '.$result->TrackingNumber,
'Paketmarke Versandpaket Nr. '.$versandpaket,
'',
$filefullpath,
$this->app->User->GetName(),
'paketmarke',
'versandpaket',
$versandpaket
);
if (isset($result->ExportDocuments)) {
$filename = $this->app->erp->GetTMP() . join('_', [$this->type, 'ExportDoc', $result->TrackingNumber]) . '.pdf';
file_put_contents($filename, $result->ExportDocuments);
$this->app->printer->Drucken($this->documentPrinterId, $filename);
}
$ret['messages'][] = ['class' => 'info', 'text' => "Paketmarke wurde erfolgreich erstellt: $result->TrackingNumber"];
$this->app->printer->Drucken($this->labelPrinterId, $filefullpath);
if (isset($result->ExportDocuments)) {
$filefullpath = $this->app->erp->GetTMP() . join('_', [$this->type, 'ExportDoc', $result->TrackingNumber]) . '.pdf';
file_put_contents($filefullpath, $result->ExportDocuments);
$this->app->printer->Drucken($this->documentPrinterId, $filefullpath);
}
$ret['messages'][] = ['class' => 'info', 'text' => "Paketmarke wurde erfolgreich erstellt: $result->TrackingNumber"];
} else {
$ret['messages'] = array_map(fn(string $item) => ['class' => 'error', 'text' => $item], array_unique($result->Errors));
$ret['messages'] = array_map(fn(string $item) => ['class' => 'error', 'text' => $item], array_unique($result->Errors));
}
}
header('Content-Type: application/json');
@@ -410,7 +451,12 @@ abstract class Versanddienstleister
$address['product'] = $products[0]->Id ?? '';
$countries = $this->app->DB->SelectArr("SELECT iso, bezeichnung_de name, eu FROM laender ORDER BY bezeichnung_de");
$countries = array_combine(array_column($countries, 'iso'), $countries);
if(!empty($countries)) {
$countries = array_combine(array_column($countries, 'iso'), $countries);
} else {
$countries = Array();
$this->app->Tpl->addMessage('error', 'L&auml;nderliste ist leer. Siehe Einstellungen -> L&auml;nderliste.', false, 'PAGE');
}
$json['form'] = $address;
$json['countries'] = $countries;
@@ -137,7 +137,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<h2>{|Paket|}</h2>
<table>
<tr>
<td>{|Gewicht (in kg)|}:</td>
<td>{|Gewicht (in kg)</b>|}:</td>
<td><input type="text" v-model.number="form.weight"></td>
</tr>
<tr>
@@ -157,7 +157,7 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
<td>
<select v-model="form.product" required>
<option v-for="prod in products" :value="prod.Id" v-if="productAvailable(prod)">{{prod.Name}}</option>
</select>
</select><i>F&uuml;r Produktwahl Gewicht eingeben!</i>
</td>
</tr>
<tr v-if="serviceAvailable('premium')">
@@ -168,11 +168,11 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
</div>
<div class="clearfix"></div>
<div class="col-md-12">
<h2>{|Bestellung|}</h2>
<h2>{|Sonstiges|}</h2>
<table>
<tbody>
<tr>
<td>{|Bestellnummer|}:</td>
<td>{|Referenzen|}:</td>
<td><input type="text" size="36" v-model="form.order_number"></td>
</tr>
<tr>
@@ -300,4 +300,4 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
}
}
})
</script>
</script>
+22 -19
View File
@@ -350,9 +350,9 @@ class Ajax {
$id = $this->app->Secure->GetPOST('id');
$objekt = $this->app->Secure->GetPOST('typ');
$parameter = $this->app->Secure->GetPOST('parameter');
if($objekt === 'adresse'){
$objekt = 'Adressen';
}
$module = strtolower($objekt);
$objekt = $this->app->YUI->dateien_module_objekt_map($objekt);
$data = $this->app->DB->SelectRow(
"SELECT d.*, s.subjekt
@@ -363,12 +363,6 @@ class Ajax {
LIMIT 1"
);
$module = strtolower($objekt);
if($module === 'adressen'){
$module = 'adresse';
}
$typen = $this->app->erp->getDateiTypen($module);
$found = false;
foreach($typen as $typ) {
@@ -431,10 +425,10 @@ class Ajax {
$titel = $this->app->Secure->GetPOST('titel');
$beschreibung = $this->app->Secure->GetPOST('beschreibung');
$subjekt = $this->app->Secure->GetPOST('subjekt');
if($objekt == 'adresse')
{
$objekt = 'Adressen';
}
$module = strtolower($objekt);
$objekt = $this->app->YUI->dateien_module_objekt_map($module);
$ersteller = $this->app->DB->real_escape_string($this->app->User->GetName());
$datei = $this->app->DB->SelectArr("SELECT d.id, s.id as sid FROM datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei LEFT JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0 AND d.id = '$id' LIMIT 1");
if($datei)
@@ -654,6 +648,9 @@ class Ajax {
$cmd = trim($this->app->Secure->GetGET('cmd'));
$id = (int)$this->app->Secure->GetGET('id');
$module = strtolower($cmd);
$cmd = $this->app->YUI->dateien_module_objekt_map($cmd);
if(!empty($cmd) && $id
&& (!in_array($cmd, $cmds) || (in_array($cmd, $cmds) && $this->app->erp->RechteVorhanden($cmd,'dateien')))) {
$datei = $this->app->DB->SelectRow(
@@ -661,7 +658,7 @@ class Ajax {
"SELECT dv.id, ds.parameter, dv.dateiname
FROM datei_version AS dv
INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei
WHERE dv.datei = %d AND (ds.objekt like '%s'".($cmd === 'adresse'?" OR ds.objekt like 'Adressen' ":'').")
WHERE dv.datei = %d AND (ds.objekt like '%s')
ORDER BY dv.datei DESC, dv.version DESC
LIMIT 1",
$id, $cmd
@@ -694,7 +691,7 @@ class Ajax {
$projekt = $this->app->DB->Select(
sprintf(
'SELECT `projekt` FROM `%s` WHERE `id` = %d LIMIT 1',
$cmd, $datei[0]['parameter']
$module, $datei[0]['parameter']
)
);
if(!$this->app->erp->UserProjektRecht($projekt)) {
@@ -1597,11 +1594,17 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
if($artikel_freitext1_suche)
{
$felder[] = 'art.freifeld1';
} else {
$artikel_freitext1_suche = 'true';
}
$subwhere = $this->AjaxFilterWhere($termorig,$felder);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art
$subwhere = $this->AjaxFilterWhere($termorig,$felder);
$sql = "SELECT CONCAT(art.nummer,' ',art.name_de) as name FROM artikel art
INNER JOIN $doctype"."_position ap ON ap.artikel = art.id AND $doctype = '$doctypeid'
WHERE art.geloescht=0 AND ($artikel_freitext1_suche) AND art.geloescht=0 AND art.intern_gesperrt!=1 LIMIT 20");
WHERE
art.geloescht=0 AND ($artikel_freitext1_suche) AND art.geloescht=0 AND art.intern_gesperrt!=1 AND
(name_de LIKE '%$term%' OR art.nummer LIKE '%$term%')
LIMIT 20";
$arr = $this->app->DB->SelectArr($sql);
$carr = !empty($arr)?count($arr):0;
for($i = 0; $i < $carr; $i++) {
$newarr[] = $arr[$i]['name'];
@@ -2479,7 +2482,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '".$kunde[0]."' AND kundennummer <> '' LIMIT 1");
}
$beleg = str_replace('kunden','',$filtername);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(id,' ',if(belegnr <> '',belegnr,'ENTWURF'),' ',kundennummer,' ',name) as name FROM $beleg WHERE (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR kundennummer LIKE '$%term%') AND (status = 'angelegt' OR status = 'freigegeben')
$arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',kundennummer,' ',name) as name FROM $beleg WHERE (belegnr <> '') AND (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR kundennummer LIKE '$%term%') AND (status IN ('angelegt','freigegeben','versendet'))
".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')."
ORDER by belegnr LIMIT 20");
$carr = !empty($arr)?count($arr):0;
+93 -7
View File
@@ -1990,8 +1990,52 @@ class Auftrag extends GenAuftrag
$gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2));
}
$summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('DECKUNGSBEITRAG',0);
$this->app->Tpl->Set('DBPROZENT',0);
// Deckungsbeitrag
if (!$this->app->erp->RechteVorhanden('auftrag','einkaufspreise')) {
$this->app->Tpl->Set('DBHIDDEN','hidden');
} else {
$sql = "
SELECT
umsatz_netto_gesamt,
artikel,
menge,
einkaufspreis
FROM
`auftrag_position`
WHERE
`auftrag` = ".$id."
";
$positionen = $this->app->DB->SelectArr($sql);
$umsatz_gesamt = 0;
$kosten_gesamt = 0;
$db_gesamt = 0;
foreach ($positionen as $position) {
if (empty($position['einkaufspreis'])) {
$position['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($position['artikel'],$position['menge']);
}
$kosten = ($position['einkaufspreis']*$position['menge']);
$db_gesamt += $position['umsatz_netto_gesamt']-$kosten;
$kosten_gesamt += $kosten;
$umsatz_gesamt += $position['umsatz_netto_gesamt'];
}
$this->app->Tpl->Set('NETTOGESAMT',$this->app->erp->number_format_variable($umsatz_gesamt,2));
$this->app->Tpl->Set('KOSTEN',$this->app->erp->number_format_variable($kosten_gesamt,2));
$this->app->Tpl->Set('DECKUNGSBEITRAG',$this->app->erp->number_format_variable($db_gesamt,2));
$this->app->Tpl->Set( 'DBPROZENT',
$umsatz_gesamt==0?
"-":
$this->app->erp->number_format_variable(
round(
$db_gesamt/$umsatz_gesamt*100,2
)
)."%"
);
}
$this->app->Tpl->Set('GEBUCHTEZEIT',0);
if($auftragArr[0]['ust_befreit']==0){
@@ -2270,7 +2314,7 @@ class Auftrag extends GenAuftrag
}
$this->app->Tpl->Set('PREISANFRAGE', implode('<br />', $priceRequestsHtml));
}
/*
$tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols(
"SELECT if(v.versendet_am!='0000-00-00',
CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen),
@@ -2353,6 +2397,39 @@ class Auftrag extends GenAuftrag
else {
$this->app->Tpl->Set('TRACKING',$tmpVersand);
}
*/
$sql = "SELECT SQL_CALC_FOUND_ROWS
v.id,
v.tracking as tracking,
v.tracking_link
FROM
versandpakete v
LEFT JOIN
versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket
LEFT JOIN
lieferschein_position lp ON lp.id = vlp.lieferschein_position
LEFT JOIN
lieferschein l ON lp.lieferschein = l.id
LEFT JOIN
lieferschein lop ON lop.id = v.lieferschein_ohne_pos
WHERE
l.auftragid = ".$id." OR lop.auftragid = ".$id."
GROUP BY
v.id
";
$tracking = $this->app->DB->SelectArr($sql);
$tracking_list = array();
foreach ($tracking as $single_tracking) {
$tracking_list[] = '<a href="index.php?module=versandpakete&action=edit&id='.$single_tracking['id'].'">Paket Nr.'.$single_tracking['id'].'</a>'.
' ('.'<a href="'.$single_tracking['tracking_link'].'">'.$single_tracking['tracking'].'</a>'.')';
}
$this->app->Tpl->Set('TRACKING',implode('<br>',$tracking_list));
$icons = $this->app->YUI->IconsSQL();
@@ -4916,6 +4993,10 @@ class Auftrag extends GenAuftrag
$this->app->erp->AdresseAlsLieferadresseButton($adresse);
}
if ($schreibschutz != 1 AND $status != 'abgeschlossen') {
$this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
}
if($nummer!='') {
$this->app->Tpl->Set('NUMMER',$nummer);
if($this->app->erp->RechteVorhanden('adresse','edit')){
@@ -5694,8 +5775,13 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
}
$this->app->DB->Update("UPDATE lieferschein SET
belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."'
WHERE id='$lieferschein' LIMIT 1");
belegnr='$ls_belegnr',
status='freigegeben',
versand='".$this->app->User->GetDescription()."',
versand_status = 1
WHERE id='$lieferschein' LIMIT 1");
// Versand_status: 1 = process in versandpakete, 2 = finished, 3 = finished manually
$this->app->erp->LieferscheinProtokoll($lieferschein, 'Lieferschein freigegeben');
@@ -6342,7 +6428,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','&Uuml;bersicht');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=create','Neuen Auftrag anlegen');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=offene','Offene Positionen');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versandzentrum');
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versand&uuml;bergabe');
if(strlen($backurl)>5){
$this->app->erp->MenuEintrag("$backurl", 'Zur&uuml;ck zur &Uuml;bersicht');
@@ -6387,7 +6473,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$this->AuftraguebersichtMenu();
$targetMessage = 'AUTOVERSANDBERECHNEN';
$this->app->Tpl->Add('MESSAGE','<div class="info">Auftr&auml;ge an Versand übergeben mit automatischem Druck und Mailversand.</div>');
$this->app->Tpl->Add('MESSAGE','<div class="info">Auftr&auml;ge an Versand übergeben mit automatischem Druck und Mailversand. <a class="button" href="index.php?module=versandpakete&action=lieferungen">Zum Versand</a></div>');
$autoshipmentEnabled = true;
$this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
+25 -38
View File
@@ -37,7 +37,7 @@
<tr><td class="auftraginfo_cell">{|Bestellung|}:</td><td class="auftraginfo_cell" >[BESTELLUNG]</td><td class="auftraginfo_cell">{|Eigene Umsatzsteuer ID|}:</td><td class="auftraginfo_cell">[DELIVERYTHRESHOLDVATID]</td></tr>
<tr><td class="auftraginfo_cell">{|Retoure|}:</td><td class="auftraginfo_cell" >[RETOURE]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
<tr><td class="auftraginfo_cell">{|Preisanfrage|}:</td><td class="auftraginfo_cell" >[PREISANFRAGE]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
<tr><td class="auftraginfo_cell">{|Tracking|}:</td><td class="auftraginfo_cell" >[TRACKING]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
<tr><td class="auftraginfo_cell">{|Pakete|}:</td><td class="auftraginfo_cell" >[TRACKING]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
</table>
<table width="100%">
@@ -48,19 +48,14 @@
<td style="" width="50%">[VERSANDTEXT]</td>
[RMAENDIF]
</tr>
</table>
<div style="background-color:white">
<div style="padding:10px">
[RECHNUNGLIEFERADRESSE]
</div>
</div>
</div>
<div style="float:left; width:50%">
<div style="overflow:auto;max-height:550px;">
<div style="background-color:white;">
<h2 class="greyh2">Artikel</h2>
@@ -69,63 +64,55 @@
<i style="color:#999">* Die linke Zahl zeigt die für den Kunden reservierten Einheiten und die rechte Zahl die global reservierte Anzahl.</i>
</div>
</div>
[MINIDETAILNACHARTIKEL]
<!--
<div style="background-color:white;">
<h2 class="greyh2">Lieferkette</h2>
<div style="padding:10px">
<table class="mkTable">
<tr><th>Art</th><th>Beleg</th><th>Datum</th><th>Lieferant</th><th>Status</th></tr>
<tr><td>Bestellung</td><td>ENTWURF</td><td></td><td>In-Circuit<br>200 x 777777 SMT USBprog 1)</td><td>-</td></tr>
<tr><td>Anlieferung</td><td>200000</td><td></td><td>In-Circuit<br>200 x 777777 ATMEGA32</td><td>offen</td></tr>
<tr><td>Bestellung</td><td>100023</td><td></td><td>Instanet<br>200 x USBprog 5.0 Spezial Elektor<br>200 x 777777 Flashen + Montieren</td><td>offen</td></tr>
<tr><td>Anlieferung</td><td>200002</td><td></td><td>Instanet<br>200 x 777777 SMT USBprog 1)<br>200 x 122222 Gehäuse</td><td>offen</td></tr>
</table>
<div style="background-color:white" [DBHIDDEN]>
<h2 class="greyh2">{|Deckungsbeitrag (netto)|}</h2>
<table width="100%">
<tbody>
<tr>
<td>Umsatz EUR</td>
<td>Kosten EUR</td>
<td>Deckungsbeitrag EUR</td>
<td>DB %</td>
</tr>
<tr>
<td class="greybox" width="25%">[NETTOGESAMT]</td>
<td class="greybox" width="25%">[KOSTEN]</td>
<td class="greybox" width="25%">[DECKUNGSBEITRAG]</td>
<td class="greybox" width="25%">[DBPROZENT]</td>
</tr>
</tbody>
</table>
</div>
</div>
-->
<div style="background-color:white">
<h2 class="greyh2">{|Zahlungen|}</h2>
<div style="padding:10px">
[ZAHLUNGEN]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">{|Protokoll|}</h2>
<div style="padding:10px;">
[PROTOKOLL]
</div>
</div>
[VORPRODUKTIONPROTOKOLL]
[PRODUKTIONPROTOKOLL]
[NACHPRODUKTIONPROTOKOLL]
<!--
<div style="background-color:white">
<h2 class="greyh2">{|RMA Prozess|}</h2>
<div style="padding:10px">
[RMA]
</div>
<h2 class="greyh2">{|RMA Prozess|}</h2>
<div style="padding:10px">
[RMA]
</div>
</div>
-->
<div style="background-color:white">
<h2 class="greyh2">{|PDF-Archiv|}</h2>
<div style="padding:10px;overflow:auto;">
[PDFARCHIV]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">{|Deckungsbeitrag|}</h2>
<div style="padding:10px">
<div class="info">{|Dieses Modul ist erst ab Version Professional verfügbar|}</div>
</div>
</div>
[INTERNEBEMERKUNGEDIT]
</div>
</div>
@@ -122,7 +122,7 @@
<li>{|Stornierung|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {INTERNET}</i></li>
<li>{|ZahlungMiss|} <i>{|Variablen|}: {AUFTRAG}, {DATUM}, {GESAMT}, {REST}, {ANSCHREIBEN}, {INTERNET}</i></li>
<li>Mahnung <i>Variablen: {BELEGNR}, {DATUM}, {OFFEN}, {MAHNGEBUEHR}, {HEUTE}</i></li>
<li>{|Versand|} <i>{|Variablen|}: {VERSAND}, {VERSANDTYPE}, {VERSANDBEZEICHNUNG}, {TRACKINGNUMMER}, {NAME}, {ANSCHREIBEN}, {BELEGNR}, {IHREBESTELLNUMMER}, {INTERNET}, {AUFTRAGDATUM}, {LIEFERADRESSE}, {LIEFERADRESSELANG}</i></li>
<li>{|Versand|} <i>{|Variablen|}: {VERSAND}, {VERSANDTYPE}, {VERSANDBEZEICHNUNG}, {TRACKINGNUMMER}, {TRACKINGLINK}, {NAME}, {ANSCHREIBEN}, {BELEGNR}, {IHREBESTELLNUMMER}, {INTERNET}, {AUFTRAGDATUM}, {LIEFERADRESSE}, {LIEFERADRESSELANG}</i></li>
<li>{|VersandMailDokumente|} <i>{|Variablen|}: {NAME}, {ANSCHREIBEN}, {BELEGNR}, {IHREBESTELLNUMMER}, {INTERNET}, {AUFTRAGDATUM}</i></li>
<li>{|Erweiterte Freigabe|} <i>{|Variablen|}: {REQUESTER}, {LINK}, {LINKFREIGABEUEBERSICHT}, {DOCTYPE}, {DOCTYPE_ID}</i></li>
<li>{|Selbstabholer|}</li>
@@ -0,0 +1,43 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[MESSAGETABLE]
<fieldset>
<form action="" method="post" id="eprooform" name="eprooform">
<table class="tableborder" border="0" cellpadding="3" cellspacing="0" width="100%">
<tbody>
<tr valign="top" colspan="3">
<td>
<table width="80%" align="center">
<tr valign="top">
<td align="center">
<table width="90%">
<tr><td><b>{|Quelllager|}:</b></td><td><input type="text" id="quelllager" name="quelllager" value="[QUELLLAGER]" size="27" style="width:200px"></td></tr>
<tr>
<td>
</td>
<td>
<button name="submit" value="lieferschein" class="ui-button-icon" style="width:200px;">
Lieferschein erzeugen
</button>
</td>
</tr>
</table>
<br>
</td>
<td>
</td>
</tr>
</table>
<br>
<br>
</td>
</tr>
</table>
</form>
</fieldset>
</div>
</div>
@@ -22,7 +22,7 @@
<tr><td class="auftraginfo_cell">Projekt:</td><td class="auftraginfo_cell">[PROJEKT]</td><td class="auftraginfo_cell">Angebotssumme:</td><td class="auftraginfo_cell">[GESAMTSUMME]</td></tr>
<tr><td class="auftraginfo_cell">Auftrag:</td><td class="auftraginfo_cell">[AUFTRAG]</td><td class="auftraginfo_cell">Versteuerung:</td><td class="auftraginfo_cell">[STEUER]</td></tr>
<tr><td class="auftraginfo_cell">Rechnung:</td><td class="auftraginfo_cell">[RECHNUNG]</td><td class="auftraginfo_cell">Gewicht (netto):</td><td class="auftraginfo_cell">[GEWICHT]</td></tr>
<tr><td class="auftraginfo_cell">Tracking:</td><td class="auftraginfo_cell">[TRACKING]</td><td class="auftraginfo_cell">Versandart:</td><td class="auftraginfo_cell">[VERSANDART]</td></tr>
<tr><td class="auftraginfo_cell">Pakete:</td><td class="auftraginfo_cell">[TRACKING]</td><td class="auftraginfo_cell">Versandart:</td><td class="auftraginfo_cell">[VERSANDART]</td></tr>
<tr><td class="auftraginfo_cell">Retoure:</td><td class="auftraginfo_cell">[RETOURE]</td><td class="auftraginfo_cell"></td><td class="auftraginfo_cell"></td></tr>
</table>
@@ -0,0 +1,45 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[MESSAGETABLE]
<fieldset>
<form action="" method="post" id="eprooform" name="eprooform">
<table class="tableborder" border="0" cellpadding="3" cellspacing="0" width="100%">
<tbody>
<tr valign="top" colspan="3">
<td>
<table width="80%" align="center">
<tr valign="top">
<td align="center">
<table width="90%">
<tr><td><b>{|Quelllager|}:</b></td><td><input type="text" id="quelllager" name="quelllager" value="[QUELLLAGER]" size="27" style="width:200px"></td></tr>
<tr><td><b>{|Ziellager|}:</b></td><td><input type="text" id="ziellager" name="ziellager" value="[ZIELLAGER]" size="27" style="width:200px"></td></tr>
<tr>
<td>
<p [ERNEUT_UMLAGERN_HIDDEN]><input type="checkbox" name="erneut" id="erneut" value="1" size="20" [ERNEUT_CHECKED]>{|Erneut umlagern|}</input></p>
</td>
<td>
<button name="submit" value="umlagern" class="ui-button-icon" style="width:200px;">
Umlagern
</button>
</td>
</tr>
</table>
<br>
</td>
<td>
</td>
</tr>
</table>
<br>
<br>
</td>
</tr>
</table>
</form>
</fieldset>
</div>
</div>
+1 -27
View File
@@ -17,33 +17,6 @@
<li class="filter-item"><input type="checkbox" id="anlieferanten"><label for="anlieferanten">{|an Lieferanten|}</label></li>
</ul>
</div>
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter Versandzentrum|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="abgeschlossenlogistik" class="switch">
<input type="checkbox" id="abgeschlossenlogistik">
<span class="slider round"></span>
</label>
<label for="abgeschlossenlogistik">{|abgeschlossen &uuml;ber Logistik|}</label>
</li>
<li class="filter-item">
<label for="nochinlogistik" class="switch">
<input type="checkbox" id="nochinlogistik">
<span class="slider round"></span>
</label>
<label for="nochinlogistik">{|noch in Logistik|}</label>
</li>
<li class="filter-item">
<label for="manuellabgeschlossen" class="switch">
<input type="checkbox" id="manuellabgeschlossen">
<span class="slider round"></span>
</label>
<label for="manuellabgeschlossen">{|manuell abgeschlossen|}</label>
</li>
</ul>
</div>
</div>
[MESSAGE]
@@ -56,6 +29,7 @@
<option value="offen">{|als offen markieren|}</option>
<option value="versendet">{|als versendet markieren|}</option>
<option value="storniert">{|als storniert markieren|}</option>
<option value="versanduebergabe">{|in Versand geben|}</option>
<option value="pdf">{|Sammel-PDF|}</option>
<option value="drucken">{|drucken|}</option>
</select>&nbsp;{|Drucker|}: <select name="seldrucker">[SELDRUCKER]</select>&nbsp;<input type="submit" class="btnBlue" name="ausfuehren" value="{|ausf&uuml;hren|}" />
+3 -1
View File
@@ -19,12 +19,13 @@
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|[STATUSICON]<b>Ticket <font color="blue">#[SCHLUESSEL]</font></b>|}</legend>
<tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" id="betreff" value="[BETREFF]" size="20"></td></tr>
<tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" id="betreff" value="[BETREFF]" style="width: 100%;"></td></tr>
<tr><td>{|Von|}:</td><td>[KUNDE]&nbsp;[MAILADRESSE]</td></tr>
<tr><td>{|Projekt|}:</td><td><input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20"></td></tr>
<tr><td>{|Adresse|}:</td><td><input type="text" name="adresse" id="adresse" value="[ADRESSE]" size="20"><a href="index.php?module=adresse&action=edit&id=[ADRESSE_ID]"><img src="./themes/new/images/forward.svg" border="0" style="top:6px; position:relative"></a></td></tr>
<tr><td>{|Tags|}:</td><td><input type="text" name="tags" id="tags" value="[TAGS]" size="20"></td></tr>
<tr><td>{|Letzte Aktion|}:</td><td>[ZEIT]</td></tr>
[TICKET_ANHANG]
</table>
</fieldset>
</div>
@@ -49,6 +50,7 @@
<legend>{|Aktionen|}</legend>
<td><button name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button></td></tr>
<td><button name="submit" value="neue_email" class="ui-button-icon" style="width:100%;">Neue E-Mail</button></td></tr>
<td><button name="submit" value="neue_email_alle" class="ui-button-icon" style="width:100%;">Neue E-Mail an alle</button></td></tr>
<td><button name="submit" formaction="index.php?module=ticketregeln&action=create" value="regel" class="ui-button-icon" style="width:100%;">Ticketregel erstellen</button><input hidden type="text" name="ticketid" value="[ID]"></td></tr>
</table>
</fieldset>
+13 -1
View File
@@ -49,7 +49,19 @@
<tr><td>{|Status|}:</td><td><select name="status">[STATUS]</select></td></tr>
<tr><td>{|Verantwortlich|}:</td><td><input type="text" name="warteschlange" id="warteschlange" value="[WARTESCHLANGE]" size="20"></td></tr>
<tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;</td><td><input type="submit" class="btnBlue" name="ausfuehren" value="{|Zuordnen|}" /></td>
<td>
<input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;
</td>
<td>
<button name="submit" value="zuordnen" class="ui-button-icon" style="width:100%;">{|Zuordnen|}</button>
</td>
</tr>
<tr [SPAM_HIDDEN]>
<td>
</td>
<td>
<button name="submit" value="spam_filter" class="ui-button-icon" title="Ticket auf Status 'Papierkorb' setzen und Absender-Adresse in Ticketregel eintragen" style="width:100%;">{|Spamregel erstellen|}</button>
</td>
</tr>
</table>
+2
View File
@@ -23,10 +23,12 @@
<tr><td>{|E-Mail Verfasser|}:</td><td><input type="text" name="sender_email" value="[SENDER_EMAIL]" size="40"></td></tr>
<tr><td>{|Verfasser Name|}:</td><td><input type="text" name="name" value="[NAME]" size="40"></td></tr>
<tr><td>{|Betreff|}:</td><td><input type="text" name="betreff" value="[BETREFF]" size="40"></td></tr>
<tr><td colspan="2"><hr style="border-style:solid; border-width:1px"></td></tr>
<tr><td>{|Papierkorb|}:</td><td><input type="checkbox" name="spam" value="1" [SPAM] size="40"></td></tr>
<tr><td>{|Pers&ouml;nlich|}:</td><td><input type="checkbox" name="persoenlich" value="1" [PERSOENLICH] size="40"></td></tr>
<tr><td>{|Prio|}:</td><td><input type="checkbox" name="prio" value="1" [PRIO] size="40"></td></tr>
<tr><td>{|DSGVO|}:</td><td><input type="checkbox" name="dsgvo" value="1" [DSGVO] size="40"></td></tr>
<tr><td>{|Adresse|}:</td><td><input type="text" name="adresse" id="adresse" value="[ADRESSE]" size="40"></td></tr>
<tr><td>{|Verantwortliche Warteschlange|}:</td><td><input type="text" name="warteschlange" id="warteschlange" value="[WARTESCHLANGE]" size="40"></td></tr>
<tr><td>{|Aktiv|}:</td><td><input type="checkbox" name="aktiv" value="1" [AKTIV] size="40"></td></tr>
+9 -4
View File
@@ -1,5 +1,10 @@
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
</div>
+4 -1
View File
@@ -23,6 +23,9 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
[MODULEINSTALLIERT]
</fieldset>
[TAB1NEXT]
<form id="neu" action="index.php?module=versandarten&action=neusonstige" method="post">
<button name="submit" value="neusonstige" class="ui-button-icon">Versandart ohne Modul anlegen</button>
</form>
</div>
<!-- tab view schließen -->
@@ -35,4 +38,4 @@ SPDX-License-Identifier: LicenseRef-EGPL-3.1
:pages="pages"
:allowClose="allowClose"
:pagination="pagination">
</click-by-click-assistant>
</click-by-click-assistant>
+80
View File
@@ -0,0 +1,80 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="index.php?module=versandpakete&action=add&id=[ID]&lieferschein=[LIEFERSCHEIN_ID]" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-10 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Hinzuf&uuml;gen von Artikeln aus <a href="index.php?module=lieferschein&action=edit&id=[LIEFERSCHEIN_ID]"><b>Lieferschein [LIEFERSCHEIN]</b></a> zu Versandpaket <b>Nr. [ID]</b>|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Artikel|}:
</td>
<td>
<input type="text" name="artikel" id="artikel" value="" size="40" autofocus>
</td>
</tr>
<tr>
<td>
{|Menge|}:
</td>
<td>
<input type="number" name="menge" id="menge" value="" min="1" size="40">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Aktionen|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td><button name="submit" value="hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td></tr>
<tr><td><button name="submit" value="lieferschein_komplett_hinzufuegen" class="ui-button-icon" style="width:100%;">Alle hinzuf&uuml;gen</button></td></tr>
<tr><td><button form="back" name="submit" value="fertig" class="ui-button-icon" style="width:100%;">Fertig</button></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>{|Lieferscheininhalt|}</legend>
[LIEFERSCHEININHALT]
</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>{|Paketinhalt|}</legend>
[PAKETINHALT]
</fieldset>
</div>
</div>
</div>
</div>
<input type="text" name="lieferschein" id="lieferschein" value="[LIEFERSCHEIN]" size="40" hidden>
</form>
<form action="index.php?module=versandpakete&action=edit&id=[VERSANDPAKET_ID]" id="back" method="post">
</form>
</div>
</div>
+147
View File
@@ -0,0 +1,147 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
[FORMHANDLEREVENT]
<form id="save" action="" method="post">
<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>
{|<b>Versandpaket Nr. [ID]</b> vom [DATUM]<span [NO_ADDRESS_HIDDEN]> f&uuml;r Adresse '[ADRESSE]'|}</span>
</legend>
[ICONS]
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Status|}:
</td>
<td>
<input type="text" name="" id="" value="[STATUS]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Versender|}:
</td>
<td>
<input type="text" name="" id="" value="[VERSENDER]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Versandart|}:
</td>
<td>
<input type="text" name="" id="" value="[VERSANDART]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Tracking|}:
</td>
<td>
<input type="text" name="tracking" id="tracking" value="[TRACKING]" size="40" [TRACKING_DISABLED]>
<a href="[PAKETMARKE_LINK]" [PAKETMARKE_HIDDEN]>
<img src="themes/new/images/portogo.png" border="0" title="Zur Paketmarke" style="top:6px; position:relative">
</a>
<a href="[TRACKING_LINK]" [TRACKING_LINK_HIDDEN]>
<img src="themes/new/images/forward.svg" border="0" title="Zum Tracking" style="top:6px; position:relative">
</a>
</td>
</tr>
<tr [TRACKING_LINK_EDIT_HIDDEN]>
<td>
{|Tracking link|}:
</td>
<td>
<input type="text" name="tracking_link" id="tracking_link" value="[TRACKING_LINK]" size="40" [TRACKING_DISABLED]>
</td>
</tr>
<tr>
<td>
{|Gewicht Kg|}:
</td>
<td>
<input type="number" name="" id="" value="[GEWICHT]" size="40" disabled>
</td>
</tr>
<tr>
<td>
{|Bemerkung|}:
</td>
<td>
<textarea name="bemerkung" id="bemerkung" rows="3" style="width:100%;">[BEMERKUNG]</textarea>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset >
<legend>{|Lieferschein|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr [LIEFERSCHEIN_OHNE_POS_HIDDEN]>
<td>
{|Zugeordnet|}:
</td>
<td>
<input form="add" type="text" name="" id="" value="[LIEFERSCHEIN_OHNE_POS]" size="40" disabled>
<a href="index.php?module=lieferschein&action=edit&id=[LIEFERSCHEIN_OHNE_POS_ID]"><img src="themes/new/images/forward.svg" title="Zum Lieferschein" border="0" style="top:6px; position:relative"></a>
</td>
</tr>
<tr [LIEFERSCHEIN_ADD_POS_HIDDEN]>
<td>
{|Lieferschein für Artikel hinzuf&uuml;gen|}:
</td>
<td>
<input form="add" type="text" name="lieferschein" id="lieferschein" value="[LIEFERSCHEIN]" autofocus size="40">
</td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Aktionen|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<tr><td><button form="save" name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button></td></tr>
<tr [LIEFERSCHEIN_ADD_POS_HIDDEN]><td><button form="add" name="submit" value="lieferschein_hinzufuegen" class="ui-button-icon" style="width:100%;">Artikel hinzuf&uuml;gen</button></td></tr>
<tr [LIEFERSCHEIN_ADD_POS_HIDDEN]><td><button form="add" name="submit" value="lieferschein_komplett_hinzufuegen" class="ui-button-icon" style="width:100%;">Alle Artikel hinzuf&uuml;gen</button></td></tr>
<tr [PAKETMARKE_ADD_HIDDEN]><td><button form="paketmarke" name="submit" value="paketmarke" class="ui-button-icon" style="width:100%;">Paketmarke drucken</button></td></tr>
<tr [ABSENDEN_HIDDEN]><td><button name="submit" value="absenden" class="ui-button-icon" style="width:100%;">Absenden</button></td></tr>
<tr [ABSCHLIESSEN_HIDDEN]><td><button name="submit" value="abschliessen" class="ui-button-icon" style="width:100%;">Abschlie&szlig;en</button></td></tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
<form id="add" action="index.php?module=versandpakete&action=add&id=[ID]" method="post">
</form>
<form id="paketmarke" action="index.php?module=versandpakete&action=paketmarke&id=[ID]" method="post">
</form>
<div class="row" [LIEFERSCHEIN_POS_HIDDEN]>
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Paketinhalt|}</legend>
[PAKETINHALT]
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,50 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
<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>Lieferung zu <font color="blue"><a href="index.php?module=lieferschein&action=edit&id=[BELEGID]">Lieferschein [BELEGNR]</a></font></b>|}</legend>
</fieldset>
</div>
</div>
</div>
</div>
[MESSAGE]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<form action="index.php?module=versandpakete&action=stapelverarbeitung&from=lieferung&id=[FROMID]" id="frmauto" name="frmauto" method="post">
[TAB1]
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<tr><td>{|Status|}:</td><td><select name="status">[STATUS_OPTIONS]</select></td></tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;</td><td><input type="submit" class="btnBlue" name="status_setzen" value="{|Status setzen|}" /></td>
</tr>
</table>
</fieldset>
</form>
</div>
</div>
</div>
</div>
[TAB1NEXT]
</div>
</div>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#versandpakete_list').find('input[type="checkbox"]').prop('checked',wert);
$('#versandpakete_list').find('input[type="checkbox"]').first().trigger('change');
});
</script>
@@ -0,0 +1,32 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<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="unterwegs" class="switch">
<input type="checkbox" id="unterwegs">
<span class="slider round"></span>
</label>
<label for="unterwegs">{|Unterwegs|}</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">{|Zzgl. abgeschlossen|}</label>
</li>
</ul>
</div>
</div>
[TAB1]
[TAB1NEXT]
</div>
</div>
+53
View File
@@ -0,0 +1,53 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<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="geschlossene" class="switch">
<input type="checkbox" id="geschlossene">
<span class="slider round"></span>
</label>
<label for="geschlossene">{|Zzgl. 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">{|Zzgl. Papierkorb|}</label>
</li>
</ul>
</div>
</div>
<form action="index.php?module=versandpakete&action=stapelverarbeitung" id="frmauto" name="frmauto" method="post">
[TAB1]
<fieldset>
<table>
<legend>Stapelverarbeitung</legend>
<tr>
<tr><td>{|Status|}:</td><td><select name="status">[STATUS_OPTIONS]</select></td></tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;</td><td><input type="submit" class="btnBlue" name="status_setzen" value="{|Status setzen|}" /></td>
</tr>
</table>
</fieldset>
</form>
[TAB1NEXT]
</div>
</div>
<script>
$('#autoalle').on('change',function(){
var wert = $(this).prop('checked');
$('#versandpakete_list').find('input[type="checkbox"]').prop('checked',wert);
$('#versandpakete_list').find('input[type="checkbox"]').first().trigger('change');
});
</script>
@@ -1,7 +1,11 @@
<!--
<table id="table[MD5]">
<tr><td>{|Lieferschein|}:</td><td><input type="checkbox" onchange="lsclick[MD5]();" id="beiback_lieferschein[MD5]" disabled value="1" [BEIPACK_LIEFERSCHEIN] /></td><td><span id="lsnr[MD5]">[LSNR]</span></td><td><input type="button" value="{|Belege &auml;ndern|}" style="cursor:hand;" onclick="editclick[MD5]();" /></td></tr>
<tr><td>{|Lieferschein|}:</td><td><input type="checkbox" onchange="lsclick[MD5]();" id="beiback_lieferschein[MD5]" disabled value="1" [BEIPACK_LIEFERSCHEIN] /></td><td><span id="lsnr[MD5]">[LSNR]</span></td>
<td><input type="button" value="{|Belege &auml;ndern|}" style="cursor:hand;" onclick="editclick[MD5]();" /></td>
</tr>
<tr><td>{|Rechnung|}:</td><td><input type="checkbox" onchange="reclick[MD5]();" id="beiback_rechnung[MD5]" disabled value="1" [BEIPACK_RECHNUNG] /></td><td><span id="renr[MD5]">[RENR]</span></td><td></td></tr>
</table>
-->
<table width="100%">
<tr><td width="100%">[ARTIKEL]</td></tr>
@@ -110,4 +114,4 @@ $(document).ready(function() {
});
});
</script>
</script>
@@ -12,10 +12,10 @@
<div class="row-height">
<div class="col-xs-12 col-md-8 col-md-height">
<div class="inside inside-full-height">
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-block filter-inline">
<fieldset>
<legend>{|Neuen Wareneingang erzeugen|}</legend>
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
+39 -16
View File
@@ -11,9 +11,7 @@
<input type="hidden" id="paketannahme_id" value="[ID]" />
[BEFORETAB1]
<div id="tabs-1">
[TAB1START]
[MESSAGE1]
<form action="" method="post">
<div class="row">
@@ -26,25 +24,50 @@
<tr><td>{|Lieferschein-Nr.|}:</td><td><input type=text size="40" name="lsnr" value=[LSNR]></td></tr>
<tr><td>{|Rechnung-Nr.|}:</td><td><input type=text size="40" name="renr" value=[RENR]></td></tr>
<tr><td>{|Bemerkung|}:</td><td><textarea rows="5" cols="40" name="bemerkung">[BEMERKUNG]</textarea></td></tr>
<tr><td><input type="submit" name="speichern" class="btnGreenNew" value="Speichern"></td>
[ISLIEFERANTSTART]
<tr><td>{|Ziellager|}:</td><td><input type=text size="40" name="ziellager" id="ziellager" value=[LAGER]><br><i>Wenn nicht angegeben, wird das Standardlager des Artikels bebucht.</i></td></tr>
[ISLIEFERANTENDE]
</table>
</fieldset>
</div>
</div>
<div class="col-xs-12 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Aktionen|}</legend>
[BUTTONS]
[BEFOREFRM]
[AFTERFRM]
[DISTRIINHALTBUTTONS]
<input type="submit" name="abschliessen" id="btnabschliessen" class="btnGreenNew" value="Paketinhalt ist erfasst">
[BEFOREMANUELLERFASSEN]
<input type="submit" name="manuellerfassen" class="btnBlueNew" value="Artikel manuell erfassen">
[AFTERMANUELLERFASSEN]
[BEFOREFRM]
[AFTERFRM]
<fieldset>
[BUTTONS]
[BEFOREFRM]
[AFTERFRM]
[DISTRIINHALTBUTTONS]
[BEFOREFRM]
[AFTERFRM]
<button name="submit" class="ui-button-icon" style="width:100%;" value="speichern" hidden="true"></button>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
[BEFOREMANUELLERFASSEN]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="manuellerfassen">{|Artikel manuell erfassen|}</button>
</td></tr>
[AFTERMANUELLERFASSEN]
[ISLIEFERANTSTART]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="fuellen">{|Aus Bestellungen f&uuml;llen|}</button>
</td></tr>
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="leeren">{|Leeren|}</button>
</td></tr>
[ISLIEFERANTENDE]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="speichern">{|Speichern|}</button>
</td></tr>
[ISLIEFERANTSTART]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="buchen">{|Buchen|}</button>
</td></tr>
[ISLIEFERANTENDE]
<tr><td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="abschliessen">{|Abschlie&szlig;en|}</button>
</td></tr>
</table>
</fieldset>
</div>
</div>
@@ -54,7 +77,7 @@
<div class="row-height">
<div class="col-xs-12 col-md-10 col-md-height">
<div class="inside-white inside-full-height">
[TAB1]
[TAB1]
</div>
</div>
</div>
+1 -1
View File
@@ -300,7 +300,7 @@ $width = array('10%'); // Fill out manually later
$result[0]['email'],
$result[0]['angezeigtername'],
'OpenXE ERP: Testmail',
'Dies ist eine Testmail für Account "'.$result[0]['email'].'".',
utf8_encode('Dies ist eine Testmail für Account "'.$result[0]['email'].'".'),
'',0,false,'','',
true
)
+1 -1
View File
@@ -609,7 +609,7 @@ class Exportbuchhaltung
$data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen_negativ']; // obligatory
}
$data['EU-Steuersatz (Bestimmung)'] = number_format($$tmpsteuersatz, 2, ',', '');
$data['EU-Steuersatz (Bestimmung)'] = number_format($tmpsteuersatz, 2, ',', '');
$data['WKZ Umsatz'] = $row['pos_waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,12);
$data['Konto'] = $row['kundennummer']; // obligatory
+61 -29
View File
@@ -174,31 +174,7 @@ class Lager extends GenLager {
// fester filter
$where = " l.geloescht=0 AND l.id!=0 AND l.lager='$id' ";
$count = "SELECT COUNT(id) FROM lager_platz WHERE geloescht=0 AND lager='$id' ";
break;
case 'lagerletztebewegungen':
$allowed['lager'] = array('letztebewegungen');
// headings
// headings
$heading = array('Datum', 'Lager', 'Menge', 'Nummer', 'Artikel', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Men&uuml;');
$width = array('1%', '5%', '5%', '5%', '5%', '5%', '40%', '20%', '5%', '1%');
$findcols = array('zeit', 'lager', 'menge', 'nummer', 'name_de', 'Richtung', 'referenz', 'bearbeiter', 'projekt', 'id');
$searchsql = array('lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'a.name_de', 'a.nummer');
$defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht
$alignright = array(3);
$defaultorderdesc = 1;
$menu = "-";
$sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id,
DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, trim(lpi.menge)+0 as menge,
a.nummer, a.name_de, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt,
lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id LEFT JOIN artikel a ON a.id=lpi.artikel";
$count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id ";
break;
break;
case 'lagertabelle':
$allowed['lager'] = array('list');
$defaultCountry = $app->erp->Firmendaten('land');
@@ -832,7 +808,23 @@ class Lager extends GenLager {
$datecols = array(6);
$sql = "SELECT SQL_CALC_FOUND_ROWS i.id, l.bezeichnung, lp.kurzbezeichnung as regal, a.nummer, a.name_de, IF(i.eingang, 'Eingang', 'Ausgang'), if(i.eingang, CONCAT('+', ' ', trim(i.menge)+0), CONCAT('-', ' ', trim(i.menge)+0)) as menge, DATE_FORMAT(i.zeit,'%d.%m.%Y') as datum, i.referenz, i.bearbeiter, p.abkuerzung AS projektbewegung, i.id FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id=i.lager_platz LEFT JOIN lager l ON lp.lager = l.id LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN projekt p ON l.projekt = p.id";
$sql = "SELECT SQL_CALC_FOUND_ROWS
i.id,
l.bezeichnung,
lp.kurzbezeichnung as regal,
a.nummer,
a.name_de,
IF(i.eingang,
'Eingang',
'Ausgang'),
if(i.eingang,
CONCAT('+',' ',trim(i.menge)+0),CONCAT('-',' ',trim(i.menge)+0)) as menge,
".$app->erp->FormatDateTimeShort('i.zeit')." as datum,
i.referenz,
i.bearbeiter,
p.abkuerzung AS projektbewegung,
i.id
FROM lager_bewegung i LEFT JOIN lager_platz lp ON lp.id=i.lager_platz LEFT JOIN lager l ON lp.lager = l.id LEFT JOIN artikel a ON i.artikel=a.id LEFT JOIN projekt p ON l.projekt = p.id";
$lager = $app->User->GetParameter("lager_bewegungalle_lager");
@@ -1107,6 +1099,7 @@ class Lager extends GenLager {
$this->app->ActionHandler("buchenzwischenlagerdelete", "LagerBuchenZwischenlagerDelete");
$this->app->ActionHandler("bucheneinlagern", "LagerBuchenEinlagern");
$this->app->ActionHandler("buchenauslagern", "LagerBuchenAuslagern");
$this->app->ActionHandler("umlagernlieferschein", "LagerBuchenUmlagernLieferschein");
$this->app->ActionHandler("artikelentfernenreserviert", "LagerArtikelEntfernenReserviert");
$this->app->ActionHandler("letztebewegungen", "LagerLetzteBewegungen");
$this->app->ActionHandler("schnelleinlagern", "LagerSchnellEinlagern");
@@ -3156,12 +3149,50 @@ class Lager extends GenLager {
$this->app->Tpl->Parse('PAGE', 'tabview.tpl');
}
function LagerBuchenUmlagernLieferschein() {
$this->LagerBuchenMenu();
$this->app->Tpl->AddMessage('info',"Gesamten Lagerplatz in einen neuen Lieferschein zur Umlagerung geben.");
$this->app->YUI->AutoComplete("quelllager", "lagerplatz");
$quelllager = $this->app->Secure->GetPOST('quelllager');
$submit = $this->app->Secure->GetPOST('submit');
if ($submit == 'lieferschein') {
$quellager_id = $this->app->erp->ReplaceLagerPlatz(true, $quelllager, true);
if (empty($quellager_id)) {
$this->app->Tpl->AddMessage('error',"Bitte Quelllager angeben.");
} else {
$sql = "SELECT artikel, SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$quellager_id AND menge > 0 GROUP BY artikel";
$positionen = $this->app->DB->SelectArr($sql);
if (empty($positionen)) {
$this->app->Tpl->AddMessage('error',"Lager ist leer.");
} else {
$id = $this->app->erp->ImportCreateLieferschein(null);
if (!empty($id)) {
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein aus Lager ".$quelllager." erstellt");
$this->app->DB->Update("UPDATE lieferschein SET standardlager = '$quellager_id' WHERE id = '$id' LIMIT 1");
foreach ($positionen as $position) {
// public function AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum)
$this->app->erp->AddLieferscheinPositionArtikelID($id, $position['artikel'],$position['menge'],null,null,null);
}
$this->app->Location->execute("index.php?module=lieferschein&action=edit&id=$id");
} else {
$this->app->Tpl->AddMessage('error',"Lieferschein konnte nicht erzeugt werden.");
}
}
}
}
$this->app->Tpl->Set('QUELLLAGER',$this->app->erp->ReplaceLagerPlatz(false, $quellager_id, false));
$this->app->Tpl->Parse('PAGE', 'lager_umlagern_lieferschein.tpl');
}
function LagerLetzteBewegungen()
{
$this->LagerBuchenMenu();
$this->app->YUI->TableSearch('TAB1', 'lagerletztebewegungen','show','','',basename(__FILE__), __CLASS__);
$this->app->YUI->TableSearch('TAB1', 'lager_allebewegungenlist','show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', 'tabview.tpl');
}
@@ -3171,6 +3202,7 @@ class Lager extends GenLager {
$this->app->erp->Headlines('Lager');
if($this->app->erp->Version()!=='stock') {
$this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&cmd=umlagern&id=$id", 'Umlagern');
$this->app->erp->MenuEintrag("index.php?module=lager&action=umlagernlieferschein&id=$id", 'Umlagern mit Lieferschein');
$this->app->erp->MenuEintrag("index.php?module=lager&action=buchenauslagern&id=$id", 'Auslagern');
$this->app->erp->MenuEintrag("index.php?module=lager&action=bucheneinlagern&id=$id", 'Einlagern');
$this->app->erp->MenuEintrag("index.php?module=lager&action=buchenzwischenlager&id=$id", 'Zwischenlager');
+173 -23
View File
@@ -194,6 +194,7 @@ class Lieferschein extends GenLieferschein
$this->app->ActionHandler("abschicken","LieferscheinAbschicken");
$this->app->ActionHandler("abschliessen","LieferscheinAbschliessen");
$this->app->ActionHandler("auslagern","LieferscheinAuslagern");
$this->app->ActionHandler("umlagern","LieferscheinUmlagern");
$this->app->ActionHandler("pdf","LieferscheinPDF");
$this->app->ActionHandler("inlinepdf","LieferscheinInlinePDF");
$this->app->ActionHandler("protokoll","LieferscheinProtokoll");
@@ -453,6 +454,107 @@ class Lieferschein extends GenLieferschein
exit;
}
function LieferscheinUmlagern()
{
$id = (int)$this->app->Secure->GetGET("id");
$sql = "SELECT belegnr, name, status, umgelagert, standardlager FROM lieferschein WHERE id='$id'";
$lieferschein = $this->app->DB->SelectArr($sql)[0];
$belegnr = $lieferschein['belegnr'];
$name = $lieferschein['name'];
$status = $lieferschein['status'];
$umgelagert = $lieferschein['umgelagert'];
$quelllager = $this->app->Secure->GetPOST('quelllager');
$ziellager = $this->app->Secure->GetPOST('ziellager');
$quellager_id = $this->app->erp->ReplaceLagerPlatz(true, $quelllager, true);
$ziellager_id = $this->app->erp->ReplaceLagerPlatz(true, $ziellager, true);
if (empty($quellager_id)) {
$quellager_id = $lieferschein['standardlager'];
}
if ($status != "versendet" && $status != "freigegeben") {
exit();
}
$submit = $this->app->Secure->GetPOST('submit');
$erneut = $this->app->Secure->GetPOST('erneut');
if ($umgelagert && !$erneut) {
$this->app->Tpl->AddMessage('warning',"Lieferschein wurde bereits umgelagert.");
} else {
$this->app->Tpl->Set('ERNEUT_UMLAGERN_HIDDEN','hidden');
$submit = $this->app->Secure->GetPOST('submit');
if ($submit == 'umlagern') {
if (empty($quellager_id) || empty($ziellager_id)) {
$this->app->Tpl->AddMessage('error',"Bitte Quell- und Ziellager angeben.");
} else {
$sql = "SELECT artikel, name_de, a.nummer AS artikelnummer, SUM(menge) AS menge FROM lieferschein_position lp INNER JOIN artikel a ON a.id = lp.artikel WHERE lp.lieferschein = $id GROUP BY lp.artikel";
$positionen = $this->app->DB->SelectArr($sql);
$menge_ok = true;
$fehlt = array();
foreach ($positionen as $position) {
$sql = "SELECT SUM(menge) as menge FROM lager_platz_inhalt WHERE lager_platz=$quellager_id AND artikel = ".$position['artikel'];
$menge_lager = $this->app->DB->SelectArr($sql)[0]['menge'];
if ($menge_lager < $position['menge']) {
$menge_ok = false;
$fehlt[] = array('Nummer' => $position['artikelnummer'],'Artikel' => $position['name_de'],'Lieferschein Menge' => (int) $position['menge'],'Lager Menge' => empty($menge_lager)?'-':(int) $menge_lager);
}
}
if ($menge_ok) {
foreach ($positionen as $position) {
$artikel = $position['artikel'];
$menge = $position['menge'];
$projekt = 0;
$grund = "Umlagern Lieferschein ".$belegnr;
$importer = "";
$paketannahme = "";
$doctype = "lieferschein";
$doctypeId = $id;
$this->app->erp->LagerAuslagernRegal($artikel,$quellager_id,$menge,$projekt,$grund,$importer,$doctype,$doctypeid);
$this->app->erp->LagerEinlagern($artikel,$menge,$ziellager_id,$projekt,$grund,$importer,$paketannahme,$doctype,$doctypeid);
}
$sql = "UPDATE lieferschein SET umgelagert = 1 WHERE id = ".$id;
$this->app->DB->Update($sql);
$this->app->erp->LieferscheinProtokoll($id,"Lieferschein umgelagert von ".$quelllager." nach ".$ziellager);
$this->app->Tpl->AddMessage('success','Erfolgreich umgelagert.');
$erneut = null;
} else {
$this->app->Tpl->AddMessage('error',"Mengen im Quelllager nicht ausreichend.");
$tmp = new EasyTable($this->app);
$tmp->headings = array('Nummer','Artikel','Lieferschein Menge','Lager Menge','');
$tmp->datasets = $fehlt;
$tmp->DisplayNew('MESSAGETABLE',null,"noAction");
} // Menge ok
} // Lager ok
} // umlagern
} // $umgelagert
$this->LieferscheinMenu();
$this->app->YUI->AutoComplete("quelllager", "lagerplatz");
$this->app->YUI->AutoComplete("ziellager", "lagerplatz");
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Lieferschein $belegnr umlagern");
$this->app->Tpl->Set('TABTEXT',"Umlagern");
$this->app->Tpl->Set('QUELLLAGER',$this->app->erp->ReplaceLagerPlatz(false, $quellager_id, false));
$this->app->Tpl->Set('ZIELLAGER',$this->app->erp->ReplaceLagerPlatz(false, $ziellager_id, false));
$this->app->Tpl->Set('ERNEUT_CHECKED',$erneut?'checked':'');
$this->app->Tpl->Parse('PAGE',"lieferschein_umlagern.tpl");
}
function LieferscheinPaketmarke()
{
$id = (int)$this->app->Secure->GetGET("id");
@@ -468,7 +570,8 @@ class Lieferschein extends GenLieferschein
AND v.aktiv = 1 AND v.ausprojekt = 0 AND v.modul != ''
ORDER BY v.projekt DESC LIMIT 1");
if (empty($result['modul']) || empty($result['id'])) {
$this->app->Tpl->addMessage('error', 'Bitte zuerst eine gültige Versandart auswählen', false, 'PAGE');
// $this->app->Tpl->addMessage('error', 'Bitte zuerst eine gültige Versandart auswählen', false, 'PAGE');
$this->app->Location->execute("index.php?module=versandpakete&action=add&lieferschein=".$id);
return;
}
$versandmodul = $this->app->erp->LoadVersandModul($result['modul'], $result['id']);
@@ -536,16 +639,16 @@ class Lieferschein extends GenLieferschein
function LieferscheinIconMenu($id,$prefix="")
{
$status = $this->app->DB->Select("SELECT status FROM lieferschein WHERE id='$id' LIMIT 1");
$adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1");
$lieferantenretoure = $this->app->DB->Select("SELECT lieferantenretoure FROM lieferschein WHERE id='$id' LIMIT 1");
if($status=="angelegt" || $status=="")
if($adresse > 0 && ($status=="angelegt" || $status==""))
$freigabe = "<option value=\"freigabe\">Lieferschein freigeben</option>";
if(($status=="versendet" || $status=="freigegeben") && $lieferantenretoure=="1")
$abschliessen = "<option value=\"abschliessen\">Lieferschein abschliessen</option>";
$checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$id' LIMIT 1");
$optioncustom = $this->Custom('option');
@@ -573,27 +676,34 @@ class Lieferschein extends GenLieferschein
$mengegeliefert = $mengegeliefert + $this->app->DB->Select("SELECT ifnull(sum(olp.menge),0)+0 FROM objekt_lager_platz olp INNER JOIN lieferschein_position lp ON olp.objekt='lieferschein' AND olp.parameter=lp.id AND lp.lieferschein = '$id'");
if($mengegeliefert <= 0 && $liefermengelagerartikel > 0 && $schreibschutz=="1" && $status!='angelegt' && $status!='storniert') {
$auslagern = '<option value="auslagern">Lieferschein auslagern</option>';
}else{
//12.07.19 LG lieferscheinlager als kommissionierverfahren zum if hinzugefuegt
$projektkommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt where id = '$projekt'");
if($projekt && ($projektkommissionierverfahren == "" || $projektkommissionierverfahren == "rechnungsmail" || $projektkommissionierverfahren == "lieferschein" || $projektkommissionierverfahren == "lieferscheinscan" || $projektkommissionierverfahren == "lieferscheinlager" || $projektkommissionierverfahren == "lieferscheinlagerscan"))
{
if(($bestellmengelagerartikel != $liefermengelagerartikel && $bestellmengelagerartikel != $liefermengelagerartikel2) && $status!='angelegt' && $status!='storniert') {
$auslagern = '<option value="auslagern">Lieferschein auslagern</option>';
if ($status == "versendet" || $status == "freigegeben") {
if($mengegeliefert <= 0 && $liefermengelagerartikel > 0 && $schreibschutz=="1" && $status!='angelegt' && $status!='storniert') {
$auslagern = '<option value="auslagern">Lieferschein auslagern</option>';
}else{
//12.07.19 LG lieferscheinlager als kommissionierverfahren zum if hinzugefuegt
$projektkommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt where id = '$projekt'");
if($projekt && ($projektkommissionierverfahren == "" || $projektkommissionierverfahren == "rechnungsmail" || $projektkommissionierverfahren == "lieferschein" || $projektkommissionierverfahren == "lieferscheinscan" || $projektkommissionierverfahren == "lieferscheinlager" || $projektkommissionierverfahren == "lieferscheinlagerscan"))
{
if(($bestellmengelagerartikel != $liefermengelagerartikel && $bestellmengelagerartikel != $liefermengelagerartikel2) && $status!='angelegt' && $status!='storniert') {
$auslagern = '<option value="auslagern">Lieferschein auslagern</option>';
}
}
}
$optionumlagern = "<option value=\"umlagern\">Lieferschein umlagern</option>";
$abschicken = "<option value=\"abschicken\">Lieferschein abschicken</option>";
if($status!="angelegt" && $lieferantenretoure!="1")
{
$alsrechnung = "<option value=\"rechnung\">als Rechnung weiterf&uuml;hren</option>";
if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung'))
{
$alsrechnung .= "<option value=\"proformarechnung\">als Proformarechnung weiterf&uuml;hren</option>";
}
}
}
}
if($status!="angelegt" && $lieferantenretoure!="1")
{
$alsrechnung = "<option value=\"rechnung\">als Rechnung weiterf&uuml;hren</option>";
if($this->app->erp->RechteVorhanden('lieferschein', 'proformarechnung') && $this->app->erp->ModulVorhanden('proformarechnung'))
{
$alsrechnung .= "<option value=\"proformarechnung\">als Proformarechnung weiterf&uuml;hren</option>";
}
}
if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
{
@@ -628,6 +738,7 @@ class Lieferschein extends GenLieferschein
$casehook
$hookcase
$casebelegeimport
case 'umlagern': window.location.href='index.php?module=lieferschein&action=umlagern&id=%value%'; break;
}
}
@@ -638,16 +749,17 @@ class Lieferschein extends GenLieferschein
<option value=\"storno\">Lieferschein stornieren</option>
<option value=\"copy\">Lieferschein kopieren</option>
$freigabe
<option value=\"abschicken\">Lieferschein abschicken</option>
$abschicken
$abschliessen
$auslagern
$optionumlagern
$alsrechnung
$optionbelegeimport
<option value=\"pdf\">PDF &ouml;ffnen</option>
$etiketten
$optioncustom
$optionhook
$hookoption
$hookoption
</select>&nbsp;
<a href=\"index.php?module=lieferschein&action=pdf&id=%value%\" title=\"PDF\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
@@ -960,6 +1072,7 @@ class Lieferschein extends GenLieferschein
$this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']);
/*
$tracking = $this->app->DB->SelectArr("SELECT
if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"', v.tracking_link, '\">', v.tracking, '</a>'),
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', v.tracking, '\" target=\"_blank\">', v.tracking, '</a>'),
@@ -1018,7 +1131,32 @@ class Lieferschein extends GenLieferschein
if (!is_null($tmp)) {
$this->app->Tpl->Set('TRACKING',implode(', ',$tmp));
}
*/
$sql = "SELECT SQL_CALC_FOUND_ROWS
v.id,
v.tracking as tracking,
v.tracking_link
FROM
versandpakete v
LEFT JOIN
versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket
LEFT JOIN
lieferschein_position lp ON lp.id = vlp.lieferschein_position
LEFT JOIN
lieferschein l ON lp.lieferschein = l.id
WHERE l.id = ".$id." OR v.lieferschein_ohne_pos = ".$id."
GROUP BY
v.id
";
$tracking = $this->app->DB->SelectArr($sql);
$tracking_list = array();
foreach ($tracking as $single_tracking) {
$tracking_list[] = '<a href="index.php?module=versandpakete&action=edit&id='.$single_tracking['id'].'">Paket Nr.'.$single_tracking['id'].'</a>'.
' ('.'<a href="'.$single_tracking['tracking_link'].'">'.$single_tracking['tracking'].'</a>'.')';
}
$this->app->Tpl->Set('TRACKING',implode('<br>',$tracking_list));
$returnOrders = (array)$this->app->DB->SelectArr(
sprintf(
@@ -2259,6 +2397,18 @@ class Lieferschein extends GenLieferschein
}
}
break;
case 'versanduebergabe':
if(!empty($selectedIds)) {
$this->app->DB->Update(
sprintf(
"UPDATE `lieferschein`
SET `versand_status` = 1
WHERE `id` IN (%s) AND `versand_status` = 0",
implode(',' , $selectedIds)
)
);
}
break;
}
}
}
+2 -1
View File
@@ -401,7 +401,8 @@ class Managementboard
/** @var Rechnungslauf $obj */
$obj = $this->app->erp->LoadModul('rechnungslauf');
if($obj){
$w[24] = $obj->RechnungslaufRechnungslauf(true);
// $w[24] = $obj->RechnungslaufRechnungslauf(true); // This does not exist, presumably old xentral function
$w[24] = 0;
}
else {
$w[24] = 0;
-56
View File
@@ -1,56 +0,0 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class Paketmarke {
/** @var Application $app */
var $app;
/**
* Paketmarke constructor.
*
* @param Application $app
* @param bool $intern
*/
public function __construct($app, $intern = false) {
//parent::GenPaketmarke($app);
$this->app=$app;
if($intern) {
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","PaketmarkeCreatePopup");
$this->app->ActionHandler("tracking","PaketmarkeTracking");
$this->app->ActionHandlerListen($app);
}
function PaketmarkeTracking()
{
$this->app->erp->Headlines('Paketmarken Drucker');
$this->app->Tpl->Set('PAGE',"Tracking-Nummer: <input type=\"text\" id=\"tracking\"><script type=\"text/javascript\">document.getElementById(\"tracking\").focus(); </script>");
//$this->app->BuildNavigation=false;
}
function PaketmarkeCreatePopup()
{
$this->app->erp->Headlines('Paketmarken Drucker');
$this->app->erp->PaketmarkeDHLEmbedded('PAGE','lieferschein');
}
}
+3 -1
View File
@@ -2727,6 +2727,8 @@ class Projekt extends GenProjekt {
if($oldProjectId > 0){
$this->createAdditionalInputForCopyProjects($oldProjectId,$check);
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Das Projekt wurde erfolgreich kopiert.</div>");
$this->app->Location->execute("index.php?module=projekt&action=uebersicht&id=$check&msg=$msg");
return;
}
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Das Projekt wurde erfolgreich angelegt.</div>");
@@ -2848,7 +2850,7 @@ class Projekt extends GenProjekt {
* @param int $copyProjectId
* @return bool
*/
public function createAdditionalInputForCopyProjects(int $oldProjectId, int $copyProjectId): bool
public function createAdditionalInputForCopyProjects(int $oldProjectId, int $copyProjectId)
{
$hasAdditionalInput = false;
$this->app->Tpl->Set('TOID',$copyProjectId);
+135 -25
View File
@@ -23,6 +23,7 @@ class Ticket {
$this->app->ActionHandler("text_ausgang", "ticket_text_ausgang"); // Output text for iframe display
$this->app->ActionHandler("statusfix", "ticket_statusfix"); // Xentral 20 compatibility set all ticket status to latest ticket_nachricht status
$this->app->ActionHandler("datefix", "ticket_datefix"); // Xentral 20 compatibility set all ticket dates to latest ticket_nachricht date
$this->app->ActionHandler("dateien", "ticket_dateien");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
@@ -68,7 +69,7 @@ class Ticket {
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`,
CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',t.id,'\" />') AS `auswahl`";
$priobetreff = "if(t.prio!=1,t.betreff,CONCAT('<b><font color=red>',t.betreff,'</font></b>'))";
$priobetreff = "if(t.prio!=1,REGEXP_REPLACE(t.betreff, '<[^>]*>+', ''),CONCAT('<b><font color=red>',REGEXP_REPLACE(t.betreff, '<[^>]*>+', ''),'</font></b>'))"; //+ #20230916 XSS
$anzahlnachrichten = "(SELECT COUNT(n.id) FROM ticket_nachricht n WHERE n.ticket = t.schluessel)";
@@ -186,6 +187,7 @@ class Ticket {
// Process multi action
$auswahl = $this->app->Secure->GetPOST('auswahl');
$submit = $this->app->Secure->GetPOST('submit');
$selectedIds = [];
if(!empty($auswahl)) {
foreach($auswahl as $selectedId) {
@@ -195,19 +197,71 @@ class Ticket {
}
}
$status = $this->app->Secure->GetPOST('status');
$warteschlange = $this->app->Secure->GetPOST('warteschlange');
switch ($submit) {
case 'zuordnen':
$status = $this->app->Secure->GetPOST('status');
$warteschlange = $this->app->Secure->GetPOST('warteschlange');
$sql = "UPDATE ticket SET status = '".$status."', zeit = NOW()";
if ($warteschlange != '') {
$sql .= ", warteschlange = '".explode(" ",$warteschlange)[0]."'";
}
$sql = "UPDATE ticket SET status = '".$status."', zeit = NOW()";
if ($warteschlange != '') {
$sql .= ", warteschlange = '".explode(" ",$warteschlange)[0]."'";
}
$sql .= " WHERE id IN (".implode(",",$selectedIds).")";
$this->app->DB->Update($sql);
$sql .= " WHERE id IN (".implode(",",$selectedIds).")";
$this->app->DB->Update($sql);
$this->ticket_set_self_assigned_status($selectedIds);
break;
case 'spam_filter':
if($this->app->erp->RechteVorhanden('ticketregeln','create')) {
$sql = "UPDATE ticket SET status = 'spam', zeit = NOW()";
$sql .= " WHERE id IN (".implode(",",$selectedIds).")";
$this->app->DB->Update($sql);
$this->ticket_set_self_assigned_status($selectedIds);
foreach ($selectedIds as $selectedId) {
// Check existing
$sql = "SELECT id FROM ticket_regeln WHERE
empfaenger_email = '' AND
sender_email = (SELECT mailadresse FROM ticket WHERE id = ".$selectedId." LIMIT 1) AND
name = '' AND
betreff = '' AND
spam = 1 AND
aktiv = 1
";
if (!$this->app->DB->Select($sql)) {
$sql = "INSERT IGNORE INTO ticket_regeln (
empfaenger_email,
sender_email,
name,
betreff,
spam,
persoenlich,
prio,
dsgvo,
adresse,
warteschlange,
aktiv
) VALUES (
'',
(SELECT mailadresse FROM ticket WHERE id = ".$selectedId." LIMIT 1),
'',
'',
1,
0,
0,
0,
0,
'',
1
)";
$this->app->DB->Insert($sql);
}
}
}
break;
}
}
// List
@@ -222,6 +276,10 @@ class Ticket {
$this->app->Tpl->Set('STATUS', $this->app->erp->GetStatusTicketSelect('neu'));
$this->app->YUI->AutoComplete("warteschlange","warteschlangename");
if(!$this->app->erp->RechteVorhanden('ticketregeln','create')) {
$this->app->Tpl->Set('SPAM_HIDDEN', 'hidden');
}
$this->app->YUI->TableSearch('TAB1', 'ticket_list', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "ticket_list.tpl");
}
@@ -305,11 +363,34 @@ class Ticket {
}
}
function add_attachments_header_html($ticket_id, $templatepos) {
$file_attachments = $this->app->erp->GetDateiSubjektObjekt('%','ticket_header',$ticket_id);
if (!empty($file_attachments)) {
$this->app->Tpl->Add($templatepos,"<tr><td>{|Anh&auml;nge|}:</td><td><div class=\"ticket_attachments\">");
foreach ($file_attachments as $file_attachment) {
$this->app->Tpl->Add($templatepos,
"<a href=\"index.php?module=dateien&action=send&id=".$file_attachment.
"\">".
htmlentities($this->app->erp->GetDateiName($file_attachment)).
" (".
$this->app->erp->GetDateiSize($file_attachment).
")".
"</a>".
"<br>");
}
$this->app->Tpl->Add($templatepos,"</div></td></tr>");
}
}
function add_messages_tpl($messages, $showdrafts) {
// Add Messages now
foreach ($messages as $message) {
$message['betreff'] = strip_tags($message['betreff']); //+ #20230916 XSS
// Clear this first
$this->app->Tpl->Set('NACHRICHT_ANHANG',"");
@@ -588,6 +669,19 @@ class Ticket {
$this->app->Tpl->Parse('PAGE', "ticket_create.tpl");
}
function ticket_menu($id) {
$this->app->erp->MenuEintrag("index.php?module=ticket&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=ticket&action=list", "Zur&uuml;ck zur &Uuml;bersicht");
$anzahldateien = $this->app->erp->AnzahlDateien("ticket_header",$id);
if ($anzahldateien > 0) {
$anzahldateien = " (".$anzahldateien.")";
} else {
$anzahldateien="";
}
$this->app->erp->MenuEintrag("index.php?module=ticket&action=dateien&id=$id", "Dateien".$anzahldateien);
}
function ticket_edit() {
$id = $this->app->Secure->GetGET('id');
@@ -595,10 +689,10 @@ class Ticket {
return;
}
$this->ticket_menu($id);
$this->app->Tpl->Set('ID', $id);
$this->app->erp->MenuEintrag("index.php?module=ticket&action=edit&id=$id", "Details");
$this->app->erp->MenuEintrag("index.php?module=ticket&action=list", "Zur&uuml;ck zur &Uuml;bersicht");
$id = $this->app->Secure->GetGET('id');
$cmd = $this->app->Secure->GetGET('cmd');
$input = $this->GetInput();
@@ -622,6 +716,8 @@ class Ticket {
$ticket_from_db = $this->app->DB->SelectArr($sql)[0];
$ticket_from_db['betreff'] = htmlentities(strip_tags($ticket_from_db['betreff'])); //+ #20230916 XSS
foreach ($ticket_from_db as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);
}
@@ -717,7 +813,12 @@ class Ticket {
$messages = $this->get_messages_of_ticket($id, 1, NULL);
$recv_messages = $this->get_messages_of_ticket($id,"n.versendet != 1",NULL);
$an_alle = false;
switch ($submit) {
case 'neue_email_alle':
$an_alle = true;
// break omitted
case 'neue_email':
$senderName = $this->app->User->GetName()." (".$this->app->erp->GetFirmaAbsender().")";
@@ -733,23 +834,24 @@ class Ticket {
if (!empty($recv_messages)) {
if (!str_starts_with(strtoupper($recv_messages[0]['betreff']),"RE:")) {
$betreff = "RE: ".$recv_messages[0]['betreff'];
$betreff = "RE: ".strip_tags($recv_messages[0]['betreff']); //+ #20230916 XSS
}
else {
$betreff = $recv_messages[0]['betreff'];
$betreff = strip_tags($recv_messages[0]['betreff']); //+ #20230916 XSS
}
$sql = "SELECT GROUP_CONCAT(DISTINCT `value` ORDER BY `value` SEPARATOR ', ') FROM ticket_header th WHERE th.ticket_nachricht = ".$recv_messages[0]['id']." AND `value` <> '".$senderAddress."' AND type='to'";
$to = $recv_messages[0]['mail'];
$to_additional = $this->app->DB->Select($sql);
if (!empty($to_additional)) {
$to .= ", ".$to_additional;
}
$sql = "SELECT GROUP_CONCAT(DISTINCT `value` ORDER BY `value` SEPARATOR ', ') FROM ticket_header th WHERE th.ticket_nachricht = ".$recv_messages[0]['id']." AND `value` <> '".$senderAddress."' AND type='cc'";
$cc = $this->app->DB->Select($sql);
if ($an_alle) {
$sql = "SELECT GROUP_CONCAT(DISTINCT `value` ORDER BY `value` SEPARATOR ', ') FROM ticket_header th WHERE th.ticket_nachricht = ".$recv_messages[0]['id']." AND `value` <> '".$senderAddress."' AND type='to'";
$to_additional = $this->app->DB->Select($sql);
if (!empty($to_additional)) {
$to .= ", ".$to_additional;
}
$sql = "SELECT GROUP_CONCAT(DISTINCT `value` ORDER BY `value` SEPARATOR ', ') FROM ticket_header th WHERE th.ticket_nachricht = ".$recv_messages[0]['id']." AND `value` <> '".$senderAddress."' AND type='cc'";
$cc = $this->app->DB->Select($sql);
} else {
$cc = null;
}
}
else {
$betreff = $ticket_from_db['betreff'];
@@ -891,11 +993,19 @@ class Ticket {
}
$this->add_messages_tpl($messages, false);
$this->add_attachments_header_html($id,'TICKET_ANHANG');
$this->app->Tpl->Set('MESSAGE', $msg);
$this->app->Tpl->Parse('PAGE', "ticket_edit.tpl");
}
function ticket_dateien()
{
$id = $this->app->Secure->GetGET("id");
$this->ticket_menu($id);
$this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)");
$this->app->YUI->DateiUpload('PAGE',"ticket_header",$id);
}
/**
* Get all paramters from html form and save into $input
*/
+56 -14
View File
@@ -30,18 +30,36 @@ class Ticketregeln {
switch ($name) {
case "ticketregeln_list":
$allowed['ticketregeln_list'] = array('list');
$heading = array('E-Mail Empf&auml;nger', 'E-Mail Verfasser', 'Verfasser Name', 'Betreff', 'Papierkorb', 'Pers&ouml;nlich', 'Prio', 'DSGVO', 'Verantw.', 'Aktiv', 'Men&uuml;');
$heading = array('E-Mail Empf&auml;nger', 'E-Mail Verfasser', 'Verfasser Name', 'Betreff', 'Papierkorb', 'Pers&ouml;nlich', 'Prio', 'DSGVO','Adresse', 'Verantw.', 'Aktiv', 'Men&uuml;');
$width = array('10%'); // Fill out manually later
$findcols = array('t.empfaenger_email', 't.sender_email', 't.name', 't.betreff', 't.spam', 't.persoenlich', 't.prio', 't.dsgvo', 't.warteschlange', 't.aktiv');
$searchsql = array('t.empfaenger_email', 't.sender_email', 't.name', 't.betreff', 't.spam', 't.persoenlich', 't.prio', 't.dsgvo', 't.warteschlange', 't.aktiv');
$findcols = array('t.empfaenger_email', 't.sender_email', 't.name', 't.betreff', 't.spam', 't.persoenlich', 't.prio', 't.dsgvo', 'a.name', 't.warteschlange', 't.aktiv');
$searchsql = array('t.empfaenger_email', 't.sender_email', 't.name', 't.betreff', 't.spam', 't.persoenlich', 't.prio', 't.dsgvo', 'a.name', 't.warteschlange', 't.aktiv');
$defaultorder = 1;
$defaultorderdesc = 0;
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=ticketregeln&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=ticketregeln&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 t.id, t.empfaenger_email, t.sender_email, t.name, t.betreff, t.spam, t.persoenlich, t.prio, t.dsgvo, w.warteschlange, t.aktiv, t.id FROM ticket_regeln t LEFT JOIN warteschlangen w ON t.warteschlange = w.label";
$sql = "SELECT SQL_CALC_FOUND_ROWS t.id,
t.empfaenger_email,
t.sender_email,
t.name,
t.betreff,
t.spam,
t.persoenlich,
t.prio,
t.dsgvo,
a.name,
w.warteschlange,
t.aktiv,
t.id
FROM
ticket_regeln t
LEFT JOIN warteschlangen w ON t.warteschlange = w.label
LEFT JOIN adresse a ON t.adresse = a.id
";
$where = "1";
$count = "SELECT count(DISTINCT id) FROM ticket_regeln WHERE $where";
@@ -111,6 +129,7 @@ class Ticketregeln {
n.mail,
t.quelle,
t.warteschlange,
t.adresse,
".$this->app->erp->FormatDateTimeShort('n.zeit','zeit').",
".$this->app->erp->FormatDateTimeShort('n.zeitausgang','zeitausgang').",
n.versendet,
@@ -130,6 +149,7 @@ class Ticketregeln {
$input['sender_email'] = $last_message['mail'];
$input['name'] = $last_message['verfasser'];
$input['betreff'] = $last_message['betreff'];
$input['adresse'] = $last_message['adresse'];
$input['warteschlange'] = $last_message['warteschlange'];
$from_ticket = true;
@@ -139,6 +159,7 @@ class Ticketregeln {
'sender_email' => $last_message['mail'],
'name' => $last_message['verfasser'],
'betreff' => $last_message['betreff'],
'adresse' => $last_message['adresse'],
'warteschlange' => $last_message['warteschlange'],
'aktiv' => 1
);
@@ -156,6 +177,7 @@ class Ticketregeln {
// Add checks here
$input['warteschlange'] = explode(" ",$input['warteschlange'])[0]; // Just the label
$input['adresse'] = $this->app->erp->ReplaceAdresse(true,$input['adresse'],true); // Parameters: Target db?, value, from form?
$columns = "id, ";
$values = "$id, ";
@@ -193,7 +215,22 @@ class Ticketregeln {
// Load values again from database
$result = $this->app->DB->SelectArr("SELECT t.id, t.empfaenger_email, t.sender_email, t.name, t.betreff, t.spam, t.persoenlich, t.prio, t.dsgvo, CONCAT(w.label,' ',w.warteschlange) as warteschlange, t.aktiv, t.id FROM ticket_regeln t LEFT JOIN warteschlangen w on t.warteschlange = w.label WHERE t.id=$id")[0];
$result = $this->app->DB->SelectArr("SELECT t.id,
t.empfaenger_email,
t.sender_email,
t.name,
t.betreff,
t.spam,
t.persoenlich,
t.prio,
t.dsgvo,
t.adresse,
CONCAT(w.label,' ',w.warteschlange) as warteschlange,
t.aktiv,
t.id
FROM ticket_regeln t
LEFT JOIN warteschlangen w on t.warteschlange = w.label
WHERE t.id=$id")[0];
}
@@ -206,12 +243,16 @@ class Ticketregeln {
*
*/
$this->app->Tpl->Set('PRIO', $result['prio']==1?"checked":"");
$this->app->Tpl->Set('SPAM', $result['spam']==1?"checked":"");
$this->app->Tpl->Set('PERSOENLICH', $result['persoenlich']==1?"checked":"");
$this->app->Tpl->Set('DSGVO', $result['dsgvo']==1?"checked":"");
$this->app->Tpl->Set('AKTIV', $result['aktiv']==1?"checked":"");
$this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceAdresse(false,$result['adresse'],false));
$this->app->YUI->AutoComplete("adresse","adresse");
$this->app->YUI->AutoComplete("warteschlange","warteschlangename");
// $this->SetInput($input);
@@ -226,15 +267,16 @@ class Ticketregeln {
//$input['EMAIL'] = $this->app->Secure->GetPOST('email');
$input['empfaenger_email'] = $this->app->Secure->GetPOST('empfaenger_email');
$input['sender_email'] = $this->app->Secure->GetPOST('sender_email');
$input['name'] = $this->app->Secure->GetPOST('name');
$input['betreff'] = $this->app->Secure->GetPOST('betreff');
$input['spam'] = $this->app->Secure->GetPOST('spam');
$input['persoenlich'] = $this->app->Secure->GetPOST('persoenlich');
$input['prio'] = $this->app->Secure->GetPOST('prio');
$input['dsgvo'] = $this->app->Secure->GetPOST('dsgvo');
$input['warteschlange'] = $this->app->Secure->GetPOST('warteschlange');
$input['aktiv'] = $this->app->Secure->GetPOST('aktiv');
$input['sender_email'] = $this->app->Secure->GetPOST('sender_email');
$input['name'] = $this->app->Secure->GetPOST('name');
$input['betreff'] = $this->app->Secure->GetPOST('betreff');
$input['spam'] = $this->app->Secure->GetPOST('spam');
$input['persoenlich'] = $this->app->Secure->GetPOST('persoenlich');
$input['prio'] = $this->app->Secure->GetPOST('prio');
$input['dsgvo'] = $this->app->Secure->GetPOST('dsgvo');
$input['adresse'] = $this->app->Secure->GetPOST('adresse');
$input['warteschlange'] = $this->app->Secure->GetPOST('warteschlange');
$input['aktiv'] = $this->app->Secure->GetPOST('aktiv');
return $input;
+48 -6
View File
@@ -41,29 +41,71 @@ class upgrade {
$this->app->Tpl->Set('UPGRADE_VISIBLE', "hidden");
$this->app->Tpl->Set('UPGRADE_DB_VISIBLE', "hidden");
//function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do_git, bool $export_db, bool $check_db, bool $do_db, bool $force, bool $connection, bool $origin) {
$directory = dirname(getcwd())."/upgrade";
switch ($submit) {
case 'check_upgrade':
$this->app->Tpl->Set('UPGRADE_VISIBLE', "");
unlink($logfile);
upgrade_main($directory,$verbose,true,false,false,true,false,$force,false,false);
upgrade_main( directory: $directory,
verbose: $verbose,
check_git: true,
do_git: false,
export_db: false,
check_db: true,
strict_db: false,
do_db: false,
force: $force,
connection: false,
origin: false
);
break;
case 'do_upgrade':
unlink($logfile);
upgrade_main($directory,$verbose,true,true,false,true,true,$force,false,false);
upgrade_main( directory: $directory,
verbose: $verbose,
check_git: true,
do_git: true,
export_db: false,
check_db: true,
strict_db: false,
do_db: true,
force: $force,
connection: false,
origin: false
);
break;
case 'check_db':
$this->app->Tpl->Set('UPGRADE_DB_VISIBLE', "");
unlink($logfile);
upgrade_main($directory,$db_verbose,false,false,false,true,false,$force,false,false);
upgrade_main( directory: $directory,
verbose: $db_verbose,
check_git: false,
do_git: false,
export_db: false,
check_db: true,
strict_db: false,
do_db: false,
force: $force,
connection: false,
origin: false
);
break;
case 'do_db_upgrade':
$this->app->Tpl->Set('UPGRADE_DB_VISIBLE', "");
unlink($logfile);
upgrade_main($directory,$db_verbose,false,false,false,true,true,$force,false,false);
upgrade_main( directory: $directory,
verbose: $db_verbose,
check_git: false,
do_git: false,
export_db: false,
check_db: true,
strict_db: false,
do_db: true,
force: $force,
connection: false,
origin: false
);
break;
case 'refresh':
break;
+11 -3
View File
@@ -56,6 +56,7 @@ class Versandarten {
// ab hier alle Action Handler definieren die das Modul hat
$this->app->ActionHandler("create", "VersandartenCreate");
$this->app->ActionHandler("neusonstige", "VersandartenNeuSonstige");
$this->app->ActionHandler("edit", "VersandartenEdit");
$this->app->ActionHandler("list", "VersandartenList");
$this->app->ActionHandler("delete", "VersandartenDelete");
@@ -153,6 +154,13 @@ class Versandarten {
return $erg;
}
public function VersandartenNeuSonstige() {
$sql = "INSERT INTO versandarten (aktiv) VALUES (1)";
$this->app->DB->Insert($sql);
$id = $this->app->DB->GetInsertID();
$this->app->Location->execute('index.php?module=versandarten&action=edit&id='.$id);
}
/** @noinspection PhpUnused */
public function VersandartenEdit(): void
{
@@ -169,8 +177,8 @@ class Versandarten {
if($submit != '') { // handle form submit
$form = $this->GetInput();
$obj = $this->loadModule($form['modul'], $id);
if ($obj === null)
$error[] = sprintf('Versandart "%s" existiert nicht.', $form['selmodul']);
/* if ($obj === null)
$error[] = sprintf('Versandart "%s" existiert nicht.', $form['selmodul']); */
if(trim($form['bezeichnung']) == '')
$error[] = 'Bitte eine Bezeichnung angeben!';
@@ -834,4 +842,4 @@ class Versandarten {
return $result;
}
}
}
File diff suppressed because it is too large Load Diff
+2387 -2358
View File
File diff suppressed because it is too large Load Diff
-34
View File
@@ -1,37 +1,3 @@
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('../themes/new/fonts/Inter-Regular.woff2?v=3.13') format("woff2"),
url('../themes/new/fonts/Inter-Regular.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url('../themes/new/fonts/Inter-Italic.woff2?v=3.13') format("woff2"),
url('../themes/new/fonts/Inter-Italic.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('../themes/new/fonts/Inter-Bold.woff2?v=3.13') format("woff2"),
url('../themes/new/fonts/Inter-Bold.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 700;
font-display: swap;
src: url('../themes/new/fonts/Inter-BoldItalic.woff2?v=3.13') format("woff2"),
url('../themes/new/fonts/Inter-BoldItalic.woff?v=3.13') format("woff");
}
body {
font-size: 16px;
font-family: 'Inter', Arial, Helvetica, sans-serif;
+2 -1
View File
@@ -64,5 +64,6 @@
--error: #F05A5C;
--error-color: #fff;
--important: #68D4D0;
--success: #92EFB4;
/* --success: #92EFB4;*/
--success: #2DCA73;
}
-35
View File
@@ -1,38 +1,3 @@
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('../themes/new/fonts/Inter-Regular.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Regular.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url('../themes/new/fonts/Inter-Italic.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Italic.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('../fonts/Inter-Bold.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Bold.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 700;
font-display: swap;
src: url('../fonts/Inter-BoldItalic.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-BoldItalic.woff?v=3.13') format("woff");
}
html {
box-sizing: border-box;
}
-36
View File
@@ -1,39 +1,3 @@
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('../fonts/Inter-Regular.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Regular.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url('../fonts/Inter-Italic.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Italic.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('../fonts/Inter-Bold.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Bold.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 700;
font-display: swap;
src: url('../themes/new/fonts/Inter-BoldItalic.woff2?v=3.13') format("woff2"),
url('../themes/new/fonts/Inter-BoldItalic.woff?v=3.13') format("woff");
}
html {
box-sizing: border-box;
}
+10 -72
View File
@@ -1,71 +1,3 @@
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('../fonts/Inter-Regular.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Regular.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url('../fonts/Inter-Italic.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Italic.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("../fonts/Inter-Medium.woff2?v=3.13") format("woff2"),
url("../fonts/Inter-Medium.woff?v=3.13") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 500;
font-display: swap;
src: url("../fonts/Inter-MediumItalic.woff2?v=3.13") format("woff2"),
url("../fonts/Inter-MediumItalic.woff?v=3.13") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("../fonts/Inter-SemiBold.woff2?v=3.13") format("woff2"),
url("../fonts/Inter-SemiBold.woff?v=3.13") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 600;
font-display: swap;
src: url("../fonts/Inter-SemiBoldItalic.woff2?v=3.13") format("woff2"),
url("../fonts/Inter-SemiBoldItalic.woff?v=3.13") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('../fonts/Inter-Bold.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-Bold.woff?v=3.13') format("woff");
}
@font-face {
font-family: 'Inter';
font-style: italic;
font-weight: 700;
font-display: swap;
src: url('../fonts/Inter-BoldItalic.woff2?v=3.13') format("woff2"),
url('../fonts/Inter-BoldItalic.woff?v=3.13') format("woff");
}
body {
font-size: 12px;
font-family: 'Inter', Arial, Helvetica, sans-serif;
@@ -3029,7 +2961,6 @@ div.error > input[type=submit] {
}
.info,
.success,
.error2 {
background-color: var(--info);
color: var(--info-color);
@@ -3044,6 +2975,14 @@ div.error > input[type=submit] {
background-size: 30px 30px;
}
.success {
background-color: var(--success);
color: var(--info-color);
background-image: url('../images/info.png');
background-size: 30px 30px;
}
.pull-right {
float: right !important;
}
@@ -3108,7 +3047,7 @@ div.error > input[type=submit] {
#header div.headererror > input {
padding: 5px;
margin: 3px;
background-color: var(--info);
background-color: var(--success);
color: var(--info-color);
}
@@ -3724,9 +3663,8 @@ a.ui-tabs-anchor:hover {
.greybox {
background-color: lightgrey;
color: white;
padding: 10px;
font-size: 1.8em;
font-size: 1.2em;
text-align: right;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@@ -0,0 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.06267 11.2331H4.76674C4.5067 11.2331 4.2959 11.4439 4.2959 11.7039V14.529C4.2959 14.7891 4.5067 14.9999 4.76674 14.9999H7.59182C7.85186 14.9999 8.06267 14.7891 8.06267 14.529V11.2331Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.3584 11.2331H8.0625V14.529C8.0625 14.7891 8.27331 14.9999 8.53335 14.9999H11.3584C11.6185 14.9999 11.8293 14.7891 11.8293 14.529V11.7039C11.8293 11.4439 11.6185 11.2331 11.3584 11.2331Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.47512 7.46631H6.65005C6.39 7.46631 6.1792 7.67711 6.1792 7.93716V11.2331H9.94597V7.93716C9.94597 7.67711 9.73517 7.46631 9.47512 7.46631Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M15.1254 15V5.2064C15.1255 4.85853 14.9339 4.53892 14.6269 4.37519L8.50592 1.11066C8.22908 0.963114 7.89694 0.963114 7.6201 1.11066L1.4991 4.37519C1.19193 4.53876 1 4.85839 1 5.2064V15" stroke="white" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1 -1
View File
@@ -40,7 +40,7 @@
<div class="copyright">
&copy; [YEAR] by OpenXE-org & Xentral&nbsp;ERP&nbsp;Software&nbsp;GmbH.<br>
OpenXE is free open source software under AGPL/EGPL license, based on <a href="https://xentral.com" target="_blank">Xentral®</a>.<br>
[XENTRALVERSION]
<a href="https://github.com/OpenXE-org/OpenXE/commits/master">[XENTRALVERSION]</a>
</div>
</div>
+309 -305
View File
@@ -1,308 +1,312 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class WidgetGenauftrag_position
{
private $app; //application object
public $form; //store form object
protected $parsetarget; //target for content
public function __construct($app,$parsetarget)
{
$this->app = $app;
$this->parsetarget = $parsetarget;
$this->Form();
}
public function auftrag_positionDelete()
{
$this->form->Execute("auftrag_position","delete");
$this->auftrag_positionList();
}
function Edit()
{
$this->form->Edit();
}
function Copy()
{
$this->form->Copy();
}
public function Create()
{
$this->form->Create();
}
public function Search()
{
$this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE");
}
public function Summary()
{
$this->app->Tpl->Set($this->parsetarget,"grosse Tabelle");
}
function Form()
{
$this->form = $this->app->FormHandler->CreateNew("auftrag_position");
$this->form->UseTable("auftrag_position");
$this->form->UseTemplate("auftrag_position.tpl",$this->parsetarget);
$field = new HTMLInput("nummer","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("bezeichnung","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$this->form->AddMandatory("bezeichnung","notempty","Pflichtfeld!","MSGBEZEICHNUNG");
$field = new HTMLTextarea("beschreibung",8,48,"","","","","0");
$this->form->NewField($field);
$field = new HTMLInput("menge","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$this->form->AddMandatory("menge","notempty","Pflichtfeld!","MSGMENGE");
$field = new HTMLInput("preis","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("formelmenge",2,48,"","","","","0");
$this->form->NewField($field);
$field = new HTMLTextarea("formelpreis",2,48,"","","","","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ohnepreis","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ausblenden_im_pdf","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("waehrung","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0");
$field->AddOption('Standard','');
$field->AddOption('Erm&auml;&szlig;igt','ermaessigt');
$field->AddOption('Befreit','befreit');
$this->form->NewField($field);
$field = new HTMLCheckbox("anderersteuersatz","","","","0","0");
$this->form->NewField($field);
$field = new HTMLInput("steuersatz","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("steuertext",3,50,"","","","","0");
$this->form->NewField($field);
$field = new HTMLInput("grundrabatt","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt1","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt2","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt3","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt4","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt5","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("keinrabatterlaubt","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("rabatt","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("einheit","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("vpe","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("lieferdatum","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("lieferdatumkw","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("artikelnummerkunde","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("zolltarifnummer","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("herkunftsland","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld1","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld2","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld3","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld4","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld5","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld6","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld7","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld8","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld9","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld10","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld11","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld12","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld13","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld14","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld15","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld16","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld17","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld18","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld19","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld20","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld21","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld22","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld23","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld24","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld25","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld26","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld27","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld28","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld29","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld30","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld31","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld32","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld33","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld34","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld35","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld36","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld37","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld38","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld39","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld40","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("punkte","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("bonuspunkte","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("mlmdirektpraemie","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("kostenstelle","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("erloese","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("erloesefestschreiben","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLTextarea("bemerkung",3,40,"","","","","0");
$this->form->NewField($field);
}
}
?>
<?php
class WidgetGenauftrag_position
{
private $app; //application object
public $form; //store form object
protected $parsetarget; //target for content
public function __construct($app,$parsetarget)
{
$this->app = $app;
$this->parsetarget = $parsetarget;
$this->Form();
}
public function auftrag_positionDelete()
{
$this->form->Execute("auftrag_position","delete");
$this->auftrag_positionList();
}
function Edit()
{
$this->form->Edit();
}
function Copy()
{
$this->form->Copy();
}
public function Create()
{
$this->form->Create();
}
public function Search()
{
$this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE");
}
public function Summary()
{
$this->app->Tpl->Set($this->parsetarget,"grosse Tabelle");
}
function Form()
{
$this->form = $this->app->FormHandler->CreateNew("auftrag_position");
$this->form->UseTable("auftrag_position");
$this->form->UseTemplate("auftrag_position.tpl",$this->parsetarget);
$field = new HTMLInput("nummer","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("bezeichnung","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$this->form->AddMandatory("bezeichnung","notempty","Pflichtfeld!","MSGBEZEICHNUNG");
$field = new HTMLTextarea("beschreibung",8,48,"","","","","0");
$this->form->NewField($field);
$field = new HTMLInput("menge","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$this->form->AddMandatory("menge","notempty","Pflichtfeld!","MSGMENGE");
$field = new HTMLInput("preis","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("formelmenge",2,48,"","","","","0");
$this->form->NewField($field);
$field = new HTMLTextarea("formelpreis",2,48,"","","","","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ohnepreis","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ausblenden_im_pdf","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("waehrung","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0");
$field->AddOption('Standard','');
$field->AddOption('Erm&auml;&szlig;igt','ermaessigt');
$field->AddOption('Befreit','befreit');
$this->form->NewField($field);
$field = new HTMLCheckbox("anderersteuersatz","","","","0","0");
$this->form->NewField($field);
$field = new HTMLInput("steuersatz","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("steuertext",3,50,"","","","","0");
$this->form->NewField($field);
$field = new HTMLInput("grundrabatt","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt1","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt2","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt3","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt4","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("rabatt5","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("keinrabatterlaubt","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("rabatt","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("einheit","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("vpe","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("lieferdatum","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("lieferdatumkw","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("artikelnummerkunde","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("zolltarifnummer","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("herkunftsland","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld1","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld2","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld3","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld4","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld5","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld6","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld7","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld8","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld9","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld10","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld11","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld12","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld13","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld14","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld15","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld16","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld17","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld18","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld19","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld20","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld21","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld22","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld23","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld24","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld25","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld26","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld27","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld28","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld29","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld30","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld31","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld32","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld33","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld34","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld35","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld36","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld37","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld38","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld39","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("freifeld40","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("punkte","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("bonuspunkte","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("mlmdirektpraemie","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("kostenstelle","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("erloese","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("erloesefestschreiben","","","1","0","0");
$this->form->NewField($field);
if ($this->app->erp->RechteVorhanden('auftrag','einkaufspreise')) {
$field = new HTMLInput("einkaufspreis","text","","50","","","","","","","","0","","");
$this->form->NewField($field);
}
$field = new HTMLTextarea("bemerkung",3,40,"","","","","0");
$this->form->NewField($field);
}
}
?>
+209 -209
View File
@@ -1,212 +1,212 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class WidgetGenlieferschein
{
private $app; //application object
public $form; //store form object
protected $parsetarget; //target for content
public function __construct($app,$parsetarget)
{
$this->app = $app;
$this->parsetarget = $parsetarget;
$this->Form();
}
public function lieferscheinDelete()
{
$this->form->Execute("lieferschein","delete");
$this->lieferscheinList();
}
function Edit()
{
$this->form->Edit();
}
function Copy()
{
$this->form->Copy();
}
public function Create()
{
$this->form->Create();
}
public function Search()
{
$this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE");
}
public function Summary()
{
$this->app->Tpl->Set($this->parsetarget,"grosse Tabelle");
}
function Form()
{
$this->form = $this->app->FormHandler->CreateNew("lieferschein");
$this->form->UseTable("lieferschein");
$this->form->UseTemplate("lieferschein.tpl",$this->parsetarget);
$field = new HTMLInput("lieferid","hidden","","","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ansprechpartnerid","hidden","","","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("adresse","text","","20","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("lieferant","text","","20","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("lieferantenretoure","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("projekt","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("auftragid","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ihrebestellnummer","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("internebezeichnung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("datum","text","","","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("standardlager","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("kommissionskonsignationslager","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("schreibschutz","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("abweichendebezeichnung","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLSelect("typ",0,"typ","","","0");
$field->AddOption('Firma','firma');
$field->AddOption('Herr','herr');
$field->AddOption('Frau','frau');
$this->form->NewField($field);
$field = new HTMLInput("name","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$this->form->AddMandatory("name","notempty","Pflichfeld!","MSGNAME");
$field = new HTMLInput("titel","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ansprechpartner","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("abteilung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("unterabteilung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("adresszusatz","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("strasse","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("plz","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ort","text","","19","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("telefon","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("telefax","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("email","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("anschreiben","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("freitext",5,110,"","","","","0");
$this->form->NewField($field);
$field = new HTMLTextarea("bodyzusatz",5,110,"","","","","0");
$this->form->NewField($field);
$field = new HTMLSelect("versandart",0,"versandart","","","0");
$this->form->NewField($field);
$field = new HTMLInput("lieferbedingung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("vertrieb","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("bearbeiter","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("keinerechnung","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ohne_briefpapier","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ohne_artikeltext","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("gln","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("internebemerkung",2,110,"","","","","0");
$this->form->NewField($field);
$field = new HTMLInput("ustid","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLSelect("ust_befreit",0,"ust_befreit","","","0");
$field->AddOption('Inland','0');
$field->AddOption('EU-Lieferung','1');
$field->AddOption('Export','2');
$field->AddOption('Steuerfrei Inland','3');
$this->form->NewField($field);
$field = new HTMLInput("sprache","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("kostenstelle","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
}
}
?>
<?php
class WidgetGenlieferschein
{
private $app; //application object
public $form; //store form object
protected $parsetarget; //target for content
public function __construct($app,$parsetarget)
{
$this->app = $app;
$this->parsetarget = $parsetarget;
$this->Form();
}
public function lieferscheinDelete()
{
$this->form->Execute("lieferschein","delete");
$this->lieferscheinList();
}
function Edit()
{
$this->form->Edit();
}
function Copy()
{
$this->form->Copy();
}
public function Create()
{
$this->form->Create();
}
public function Search()
{
$this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE");
}
public function Summary()
{
$this->app->Tpl->Set($this->parsetarget,"grosse Tabelle");
}
function Form()
{
$this->form = $this->app->FormHandler->CreateNew("lieferschein");
$this->form->UseTable("lieferschein");
$this->form->UseTemplate("lieferschein.tpl",$this->parsetarget);
$field = new HTMLInput("lieferid","hidden","","","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ansprechpartnerid","hidden","","","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("adresse","text","","20","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("lieferant","text","","20","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("lieferantenretoure","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("projekt","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("auftragid","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ihrebestellnummer","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("internebezeichnung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("datum","text","","","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("standardlager","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("kommissionskonsignationslager","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("schreibschutz","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("abweichendebezeichnung","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLSelect("typ",0,"typ","","","0");
$field->AddOption('Firma','firma');
$field->AddOption('Herr','herr');
$field->AddOption('Frau','frau');
$this->form->NewField($field);
$field = new HTMLInput("name","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$this->form->AddMandatory("name","notempty","Pflichfeld!","MSGNAME");
$field = new HTMLInput("titel","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ansprechpartner","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("abteilung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("unterabteilung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("adresszusatz","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("strasse","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("plz","text","","5","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("ort","text","","19","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("telefon","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("telefax","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("email","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("anschreiben","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("freitext",5,110,"","","","","0");
$this->form->NewField($field);
$field = new HTMLTextarea("bodyzusatz",5,110,"","","","","0");
$this->form->NewField($field);
$field = new HTMLSelect("versandart",0,"versandart","","","0");
$this->form->NewField($field);
$field = new HTMLInput("lieferbedingung","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("vertrieb","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("bearbeiter","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLCheckbox("keinerechnung","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ohne_briefpapier","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLCheckbox("ohne_artikeltext","","","1","0","0");
$this->form->NewField($field);
$field = new HTMLInput("gln","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLTextarea("internebemerkung",2,110,"","","","","0");
$this->form->NewField($field);
$field = new HTMLInput("ustid","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLSelect("ust_befreit",0,"ust_befreit","","","0");
$field->AddOption('Inland','0');
$field->AddOption('EU-Lieferung','1');
$field->AddOption('Export','2');
$field->AddOption('Steuerfrei Inland','3');
$this->form->NewField($field);
$field = new HTMLInput("sprache","text","","30","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("kostenstelle","text","","15","","","","","","","","0","","");
$this->form->NewField($field);
}
}
?>
+40 -27
View File
@@ -222,34 +222,47 @@ $( document ).ready(function() {
</table>
</td>
<td width="30%" [STYLERECHTS]>
<table width="100%"><tr><td align="right"><input type="submit" value="Speichern" ></td></tr></table>
<div id="positionaccordion">
[ANZEIGEEINKAUFLAGER]
<h3>{|Steuer|}</h3>
<div class="table-responsive">
<table>
<tbody>
[VORSTEUER]
<tr><td>{|Kostenstelle|}:</td><td>[KOSTENSTELLE][MSGKOSTENSTELLE]</td></tr>
<tr><td>{|Erl&ouml;se|}:</td><td>[ERLOESE][MSGERLOESE]</td></tr>
<tr><td>{|festschreiben|}:</td><td>[ERLOESEFESTSCHREIBEN][MSGERLOESEFESTSCHREIBEN]</td></tr>
[NACHSTEUER]
</tbody>
</table>
<table width="100%"><tr><td align="right"><input type="submit" value="Speichern" ></td></tr></table>
<div id="positionaccordion"> [ANZEIGEEINKAUFLAGER]
<h3>{|Steuer|}</h3>
<div class="table-responsive">
<table>
<tbody> [VORSTEUER]
<tr>
<td>{|Kostenstelle|}:</td>
<td>[KOSTENSTELLE][MSGKOSTENSTELLE]</td>
</tr>
<tr>
<td>{|Erl&ouml;se|}:</td>
<td>[ERLOESE][MSGERLOESE]</td>
</tr>
<tr>
<td>{|festschreiben|}:</td>
<td>[ERLOESEFESTSCHREIBEN][MSGERLOESEFESTSCHREIBEN]</td>
</tr> [NACHSTEUER] </tbody>
</table>
</div>
<h3>{|Einkaufspreis f&uuml;r Deckungsbeitrag|}</h3>
<div class="table-responsive">
<table>
<tbody>
<tr>
<td>[EINKAUFSPREIS][MSGEINKAUFSPREIS]</td>
</tr>
</tbody>
</table>
</div>
<h3>{|Bemerkung|}</h3>
<div class="table-responsive">
<table>
<tbody>
<tr>
<td> [BEMERKUNG][MSGBEMERKUNG] </td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>{|Bemerkung|}</h3>
<div class="table-responsive">
<table>
<tbody>
<tr><td>
[BEMERKUNG][MSGBEMERKUNG]
</td></tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</tbody>
+1 -1
View File
@@ -75,7 +75,7 @@ $(document).ready(function(){
<tr><td>{|Ihre Bestellnummer|}:</td><td>[IHREBESTELLNUMMER][MSGIHREBESTELLNUMMER]</td></tr>
<tr><td>{|Interne Bezeichnung|}:</td><td>[INTERNEBEZEICHNUNG][MSGINTERNEBEZEICHNUNG]</td></tr>
<tr><td>{|Datum|}:</td><td>[DATUM][MSGDATUM]</td></tr>
<tr><td>[VORWUNSCHLAGER]Bevorzugtes Lager:[NACHWUNSCHLAGER]<br></td><td>[VORWUNSCHLAGER][STANDARDLAGER][MSGSTANDARDLAGER][NACHWUNSCHLAGER]</td></tr>
<tr><td>{|Standardlagerplatz|}:</td><td>[STANDARDLAGER][MSGSTANDARDLAGER]</td></tr>
[VORKOMMISSIONSKONSIGNATIONSLAGER]<tr><td>[KOMMISSIONIERLAGER]:<br></td><td>[KOMMISSIONSKONSIGNATIONSLAGER][MSGKOMMISSIONSKONSIGNATIONSLAGER]</td></tr>[NACHKOMMISSIONSKONSIGNATIONSLAGER]
<tr><td>Schreibschutz:</td><td>[SCHREIBSCHUTZ][MSGSCHREIBSCHUTZ]&nbsp;</td></tr>
<tr><td>[ABWEICHENDEBEZEICHNUNGBESCHRIFTUNG]:</td><td>[ABWEICHENDEBEZEICHNUNG][MSGABWEICHENDEBEZEICHNUNG]&nbsp;</td></tr>
+1
View File
@@ -43,6 +43,7 @@ class WidgetAuftrag_position extends WidgetGenAuftrag_position
$this->app->YUI->DatePicker("lieferdatum");
$this->form->ReplaceFunction("lieferdatum",$this,"ReplaceDatum");
$this->form->ReplaceFunction("preis",$this,"ReplaceMengeBetrag");
$this->form->ReplaceFunction("einkaufspreis",$this,"ReplaceMengeBetrag");
$this->form->ReplaceFunction("steuersatz",$this,"ReplaceSteuersatz");
$this->form->ReplaceFunction("menge",$this,"ReplaceMenge");
$this->form->ReplaceFunction("grundrabatt",$this,"ReplaceDecimal");
+4 -2
View File
@@ -15,6 +15,7 @@ class WidgetLieferschein extends WidgetGenlieferschein
function ExtendsForm()
{
$id = $this->app->Secure->GetGET("id");
if($this->app->Secure->GetPOST("speichern")!="")
{
$deliveryNote = $this->app->DB->SelectRow("SELECT `projekt`, `schreibschutz` FROM `lieferschein` WHERE `id` = {$id}");
@@ -36,6 +37,7 @@ class WidgetLieferschein extends WidgetGenlieferschein
}
}
}
if($this->app->Secure->GetGET("action")=="edit")
{
$this->app->Tpl->Add('FURTHERTABS','<li><a href="index.php?module=lieferschein&action=minidetail&id=[ID]&frame=true#tabs-4">Protokoll</a></li>');
@@ -49,7 +51,7 @@ class WidgetLieferschein extends WidgetGenlieferschein
$this->app->YUI->AutoComplete("projekt","projektname",1);
$this->app->YUI->AutoComplete("auftragid","auftrag",1);
$this->app->YUI->AutoComplete("aktion","aktionscode",1);
$this->app->YUI->AutoComplete("standardlager","lager");
$this->app->YUI->AutoComplete("standardlager","lagerplatz");
$this->app->YUI->AutoComplete("lieferbedingung","lieferbedingungen");
@@ -62,7 +64,7 @@ class WidgetLieferschein extends WidgetGenlieferschein
$this->form->ReplaceFunction("adresse",$this,"ReplaceKunde");
$this->form->ReplaceFunction("lieferant",$this,"ReplaceLieferant");
$this->form->ReplaceFunction("auftragid",$this,"ReplaceAuftrag");
$this->form->ReplaceFunction("standardlager",$this,"ReplaceLager");
$this->form->ReplaceFunction("standardlager",$this,"ReplaceLagerPlatz");
if($this->app->erp->ModulVorhanden('kommissionskonsignationslager'))
{