'
];
}
/**
* @param null|int $id
*
* @return array
*/
protected function ajaxMiniDetailLagerSaveInterneBemerkung($id = null)
{
if($id === null){
$id = (int)$this->app->Secure->GetGET('id');
}
$internebemerkung = $this->app->Secure->GetPOST('internebemerkung');
$this->app->DB->Update(
sprintf(
"UPDATE `auftrag` SET `internebemerkung` = '%s' WHERE `id` = %d LIMIT 1",
$internebemerkung, $id
)
);
return ['status' => 1];
}
/**
* @param mixed $ret
*/
protected function sendAjax($ret)
{
header('Content-Type: application/json');
echo json_encode($ret);
$this->app->ExitXentral();
}
/**
* @param string $parsetarget
* @param bool $menu
*/
public function AuftragMiniDetail($parsetarget='',$menu=true)
{
$id = (int)$this->app->Secure->GetGET('id');
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'lager') {
$ret = $this->ajaxMiniDetailLager($id);
$this->sendAjax($ret);
}
if($cmd === 'saveinternebemerkung') {
$ret = $this->ajaxMiniDetailLagerSaveInterneBemerkung($id);
$this->sendAjax($ret);
}
if(
!$this->app->DB->Select(
sprintf('SELECT deckungsbeitragcalc FROM auftrag WHERE id = %d LIMIT 1',$id)
)
){
$this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
}
$auftragArr = $this->app->DB->SelectArr(
sprintf(
"SELECT *,DATE_FORMAT(lieferdatum,'%%d.%%m.%%Y') as lieferdatum
FROM auftrag
WHERE id=%d
LIMIT 1",
$id
)
);
$addressId = $auftragArr[0]['adresse'];
$projectId = $auftragArr[0]['projekt'];
$adrArr = $this->app->DB->SelectRow(
sprintf(
'SELECT kundennummer, name FROM adresse WHERE id=%d LIMIT 1',
$addressId
)
);
$kundennummer = $adrArr['kundennummer'];
$projekt = empty($projectId)?'':$this->app->DB->Select(
sprintf(
'SELECT abkuerzung FROM projekt WHERE id= %d LIMIT 1',
$projectId
)
);
$kundenname = $adrArr['name'];
$this->app->Tpl->Set(
'KUNDE',
""
.$kundennummer." ".$kundenname
);
if($this->app->erp->RechteVorhanden('projekt','dashboard')){
$this->app->Tpl->Set(
'PROJEKT',
"$projekt"
);
}
else{
$this->app->Tpl->Set('PROJEKT', $projekt);
}
$this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']);
$rechnungs = $addressId <= 0?0: $this->app->DB->Select(
"SELECT SUM(soll-ist)
FROM rechnung
WHERE status != 'angelegt' AND zahlungsstatus != 'bezahlt'
AND adresse = '".$addressId."'"
);
$gutschrifts = $addressId <= 0?0:$this->app->DB->Select(
"SELECT SUM(soll-ist)
FROM gutschrift
WHERE status != 'angelegt'
AND (manuell_vorabbezahlt != '0000-00-00' OR manuell_vorabbezahlt IS NOT NULL)
AND adresse = '".$addressId."'"
);
$kundensaldo = $rechnungs - $gutschrifts;
$kundensaldo = round($kundensaldo, 2);
if($kundensaldo > 0){
$kundensaldo = "-".number_format($kundensaldo,2,',','.')."";
}
else if($kundensaldo == 0){
$kundensaldo = '0,00';
}
else{
$kundensaldo = number_format($kundensaldo,2,',','.');
}
$this->app->Tpl->Set('KUNDENSALDO', $kundensaldo);
$zahlungsweisearr = $this->app->erp->GetZahlungsweise('auftrag', $id);
if($zahlungsweisearr) {
foreach($zahlungsweisearr as $k => $v) {
if($k == $auftragArr[0]['zahlungsweise']) {
$auftragArr[0]['zahlungsweise'] = $v;
break;
}
}
}
$versandartarr = $this->app->erp->GetVersandartAuftrag((int)$projectId);
if($versandartarr){
foreach($versandartarr as $k => $v) {
if($k == $auftragArr[0]['versandart']){
$auftragArr[0]['versandart'] = $v;
break;
}
}
}
$this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']);
if($auftragArr[0]['lieferdatum']==='00.00.0000') {
$auftragArr[0]['lieferdatum']='sofort';
}
$this->app->Tpl->Set('WUNSCHLIEFERDATUM',$auftragArr[0]['lieferdatum']);
$gebuchtezeit = $this->app->DB->Select(
"SELECT IFNULL(SUM(TIME_TO_SEC(TIMEDIFF(bis, von)))/3600,0)
FROM zeiterfassung z
LEFT JOIN auftrag_position ap ON ap.id = z.auftragpositionid
WHERE z.auftrag = '$id' OR ap.auftrag = '$id'"
);
if(0){
$gebuchtezeit = (int)$gebuchtezeit.":".round(fmod($gebuchtezeit,1)*60);//Alternative Zeitangabe
}else{
$gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2));
}
$summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
// 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){
$this->app->Tpl->Set('STEUER', "Inland");
}
else if($auftragArr[0]['ust_befreit']==1){
$this->app->Tpl->Set('STEUER', "EU-Lieferung");
}
else{
$this->app->Tpl->Set('STEUER', "Export");
}
$this->app->Tpl->Set('DELIVERYTHRESHOLDVATID',!empty($auftragArr[0]['deliverythresholdvatid'])?$auftragArr[0]['deliverythresholdvatid']:'');
$this->app->Tpl->Set('GESAMTSUMME',number_format($summebrutto,2,",",""));
//ENDE ZUSTANDSAUTOMAT FARBEN
// angebot
$angebot[]['angebot'] = $this->app->DB->Select(
"SELECT CONCAT('',if(an.belegnr='0' OR an.belegnr='','ENTWURF',an.belegnr),'')
FROM auftrag a
LEFT JOIN angebot an ON an.id=a.angebotid
WHERE a.id='$id'
LIMIT 1"
);
if(!empty($angebot)) {
$cangebot = (!empty($angebot)?count($angebot):0);
for($li=0;$li<$cangebot;$li++) {
$this->app->Tpl->Add('ANGEBOT',$angebot[$li]['angebot']);
if($li<(!empty($angebot)?count($angebot):0)){
$this->app->Tpl->Add('ANGEBOT', " ");
}
}
}
else{
$this->app->Tpl->Set('ANGEBOT', '-');
}
$lieferschein = $this->app->DB->SelectPairs(
"SELECT
l.id, CONCAT(
'','>'),
if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr),
if(l.status='storniert','',''),
''
) as lieferschein
FROM lieferschein l
WHERE l.auftragid='$id'"
);
$deliveryNoteIds = [0];
$hasDeliveryNotes = false;
$deliveryNoteIdsImplode = '0';
if(empty($lieferschein)) {
$this->app->Tpl->Set('LIEFERSCHEIN', '-');
}
else{
$hasDeliveryNotes = true;
$deliveryNoteIds = array_keys($lieferschein);
$deliveryNoteIdsImplode = implode(',', $deliveryNoteIds);
$this->app->Tpl->Set('LIEFERSCHEIN', implode(' ', $lieferschein));
}
/* rechnungen */
$sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1");
if($sammelrechnungcheck) {
$rechnung = $this->app->DB->SelectPairs(
"SELECT
r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'') as rechnung
FROM rechnung r
WHERE r.auftragid='$id'
union
SELECT
r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'') as rechnung
FROM rechnung r
INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
WHERE p.auftrag='$id'
union
SELECT
r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'') as rechnung
FROM rechnung r
INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
INNER JOIN auftrag_position p ON p.id = lp.auftrag_position_id
WHERE p.auftrag='$id'
");
$rechnungids = array_keys($rechnung);
/*$this->app->DB->SelectArr(
"SELECT r.id as rid
FROM rechnung r
WHERE r.auftragid ='$id' AND r.auftrag!=''
union
SELECT s.rechnung as rid
FROM sammelrechnung_position s
INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
WHERE p.auftrag = '$id' "
);*/
}
else{
$rechnung = $this->app->DB->SelectPairs(
"SELECT
r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),''
) as rechnung
FROM rechnung r
WHERE r.auftragid='$id'"
);
$rechnungids =array_keys($rechnung);
/*$this->app->DB->SelectArr(
"SELECT r.id as rid
FROM rechnung r
WHERE r.auftragid='$id' AND r.auftrag!='' "
);*/
}
if(!$rechnung) {
$rechnung = $this->app->DB->SelectPairs(
"SELECT
r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),''
) as rechnung
FROM rechnung r
INNER JOIN auftrag a ON a.rechnungid = r.id
WHERE a.id='$id'
");
}
if(!empty($rechnung)){
$this->app->Tpl->Set('RECHNUNG', implode(' ', $rechnung));
}
else{
$this->app->Tpl->Set('RECHNUNG', '-');
}
/* ende rechnungen */
$positionIdToArticleIds = $this->app->DB->SelectPairs(
sprintf(
'SELECT id, artikel
FROM auftrag_position
WHERE auftrag = %d ',
$id
)
);
$articleIds = array_unique(array_values($positionIdToArticleIds));
$positionIds = array_keys($positionIdToArticleIds);
if(empty($articleIds)) {
$articleIds = [0];
}
$bpPositions = [];
$bpIds = [0];
$bIds = [0];
$hasSupplierOrder = false;
if(empty($positionIds)) {
$positionIds = [0];
}
else {
$bpPositions = $this->app->DB->SelectPairs(
sprintf(
'SELECT bp.id, bp.bestellung
FROM bestellung_position AS bp
WHERE bp.auftrag_position_id IN (%s)',
implode(',', $positionIds)
)
);
if(!empty($bpPositions)) {
$bpIds = array_keys($bpPositions);
$bIds = array_unique(array_values($bpPositions));
$hasSupplierOrder = true;
}
}
$bpIdsImplode = implode(', ', $bpIds );
$bIdsImplode = implode(', ', $bIds );
$articleIdsimplode = implode(', ', $articleIds );
$positionIdsImplode = implode(', ', $positionIds );
$check = empty($hasSupplierOrder)?[]:$this->app->DB->SelectPairs(
sprintf(
'SELECT b.id, b.belegnr
FROM bestellung b
WHERE b.id IN (%s)
ORDER BY b.belegnr, b.id',
$bIdsImplode
)
);
if($check) {
$bestellungen = [];
foreach($check as $supplierOrderId => $supplierOrderNumber) {
$bestellungen[] = ''
.($supplierOrderNumber?$supplierOrderNumber:'ENTWURF')
.'';
}
$this->app->Tpl->Set('BESTELLUNG', implode(' ', $bestellungen));
}
$returnOrders = (array)$this->app->DB->SelectArr(
sprintf(
'SELECT ro.id, ro.belegnr, ro.status
FROM `auftrag` AS `o`
LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid
INNER JOIN `retoure` AS `ro` ON ro.auftragid = o.id OR (ro.lieferscheinid = dn.id)
WHERE o.id = %d
ORDER BY ro.id',
$id
)
);
$returnOrderHtml = [];
foreach($returnOrders as $returnOrderKey => $returnOrder) {
$returnOrderId = $returnOrder['id'];
$returnOrderNumber = $returnOrder['belegnr'];
if(empty($returnOrderNumber)) {
$returnOrderNumber = 'ENTWURF';
}
$isReturnOrderCanceled = $returnOrder['status'] === 'storniert';
$returnOrderHtml[] = ''
.($isReturnOrderCanceled?'':'').$returnOrderNumber.($isReturnOrderCanceled?'':'')
.'';
}
$this->app->Tpl->Set('RETOURE', implode(' ', $returnOrderHtml));
$priceRequests = empty($hasSupplierOrder)?[]: (array)$this->app->DB->SelectArr(
sprintf(
"SELECT pa.id, pa.belegnr, pa.status
FROM `bestellung` AS `b`
INNER JOIN `preisanfrage` AS `pa` ON pa.id=b.preisanfrageid
WHERE b.id IN (%s)
GROUP BY pa.belegnr, pa.id
ORDER BY pa.belegnr, pa.id",
$bIdsImplode
)
);
if(!empty($priceRequests)){
$priceRequestsHtml = [];
foreach($priceRequests as $priceRequest) {
$priceRequestId = $priceRequest['id'];
$priceRequestNumber = $priceRequest['belegnr'];
if(empty($priceRequestNumber)) {
$priceRequestNumber = 'ENTWURF';
}
$isPriceRequestIsCanceled = $priceRequest['status'] === 'storniert';
$priceRequestsHtml[] = ''
.($isPriceRequestIsCanceled?'':'').($priceRequestNumber).($isPriceRequestIsCanceled?'':'').'';
}
$this->app->Tpl->Set('PREISANFRAGE', implode(' ', $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),
CONCAT(
'Heute im Versand Aktuell im Versand -> als RMA markieren'
)
) as datum
FROM versand AS v
INNER JOIN lieferschein l ON v.lieferschein=l.id
LEFT JOIN rechnung r ON v.rechnung=r.id
WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''"
);
$tracking = !$hasDeliveryNotes?null:$this->app->DB->SelectArr("SELECT
if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''),
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''),
if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ''),
if((versandunternehmen='dhl' OR versandunternehmen='intraship' OR versandunternehmen LIKE '%dhl%') AND v.tracking!='', CONCAT(UPPER(versandunternehmen),':',v.tracking,''),
if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',v.tracking,''),
if(versandunternehmen LIKE '%ups%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''),
if(versandunternehmen LIKE '%gls%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''),
if(v.tracking!='',
CONCAT(UPPER(versandunternehmen),': ',v.tracking),'nicht vorhanden')
)
)
)
)
)
)
) as versand2,
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ''),
if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ''),
if( (versandunternehmen='dhl' OR versandunternehmen='intraship') AND vp.tracking!='', CONCAT(UPPER(versandunternehmen),':',vp.tracking,''),
if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',vp.tracking,''),
if(versandunternehmen LIKE '%ups%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''),
if(versandunternehmen LIKE '%gls%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,''),
if(vp.tracking!='',
CONCAT(UPPER(versandunternehmen),': ',vp.tracking),'nicht vorhanden')
)
)
)
)
)
) as versand3,
v.tracking as tracking2, vp.tracking as tracking3
FROM versand AS v
INNER JOIN lieferschein AS l ON v.lieferschein=l.id
LEFT JOIN versandpakete AS vp ON v.id = vp.versand
WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''
ORDER BY v.id, vp.nr"
);
$ctracking = $tracking?count($tracking):0;
for($counti=0;$counti < $ctracking; $counti++) {
if($tracking[$counti]['tracking2']!=''){
if($counti == 0 || $tracking[$counti]['tracking2'] != $tracking[$counti-1]['tracking2']){
$tmp[]=$tracking[$counti]['versand2'];
}
if($tracking[$counti]['tracking3'] != ''){
$tmp[]=$tracking[$counti]['versand3'];
}
}
}
if(is_array($tmp)){
$tracking = implode(', ', $tmp);
}
else{
$tracking = '';
}
if(is_array($tmpVersand)){
$tmpVersand = implode(', ', $tmpVersand);
}
if($tracking!='' && $tracking!=' '){
$this->app->Tpl->Set('TRACKING', $tracking);
}
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[] = 'Paket Nr.'.$single_tracking['id'].''.
' ('.''.$single_tracking['tracking'].''.')';
}
$this->app->Tpl->Set('TRACKING',implode(' ',$tracking_list));
$icons = $this->app->YUI->IconsSQL();
if(strpos($icons,'aac.status')) {
$icons = $this->app->DB->Select(
"SELECT $icons
FROM auftrag a
LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag
WHERE a.id='$id'
LIMIT 1"
);
}
else{
$icons = $this->app->DB->Select(
"SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1"
);
}
$this->app->Tpl->Set('STATUSICONS',$icons);
$this->app->Tpl->Set('STATUS',$auftragArr[0]['status']);
$this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']);
$this->app->Tpl->Set('INTERNET',$auftragArr[0]['internet']);
$this->app->Tpl->Set('TRANSAKTIONSNUMMER',$auftragArr[0]['transaktionsnummer']);
$onlineshopName = $auftragArr[0]['shop'] <= 0?'':$this->app->DB->Select(
sprintf(
'SELECT `bezeichnung` FROM `shopexport` WHERE `id` = %d LIMIT 1',
$auftragArr[0]['shop']
)
);
if($onlineshopName != ''){
$this->app->Tpl->Set('ONLINESHOP', $onlineshopName);
}
if($menu) {
$menu = $this->AuftragIconMenu($id);
$this->app->Tpl->Set('MENU',$menu);
}
// ARTIKEL
$auftragRow = $this->app->DB->SelectRow(
sprintf(
'SELECT status, projekt, standardlager,teillieferungvon FROM auftrag WHERE id = %d',
$id
)
);
$status = $auftragRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
$table = new EasyTable($this->app);
//$lagermehr = " app->Conf->WFconf['defaulttheme']."/images/tooltip_grau.png\" />";
if($status==='freigegeben' || $status==='angelegt') {
$anzahllager = $this->app->DB->Select("SELECT count(id) FROM lager WHERE geloescht = 0");
$standardlager = $auftragRow['standardlager'];//$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1");
$projektlager = 0;
if(!$standardlager){
$projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id = '".$auftragArr[0]['projekt']."' LIMIT 1");
}
if($projektlager){
$projektlager = $auftragArr[0]['projekt'];
}
$standardlagertext = '';
if($standardlager){
$standardlagertext = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$standardlager' LIMIT 1");
}
$hookjoins = '';
$hookcolumns = '';
$lastcolumn = 'Reservierung';
$_lastcolumn = $lastcolumn;
$this->app->erp->RunHook("auftrag_minidetail_hook1",4, $id, $hookcolumns, $hookjoins, $lastcolumn);
$sql =
"SELECT
if(ap.explodiert_parent > 1,CONCAT('***',if(CHAR_LENGTH(TRIM(ap.beschreibung)) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel,
CONCAT('', ap.nummer,'') as Nummer,
if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),'')) as Bestellung,
".$this->app->erp->FormatMenge("ifnull(a.gewicht,0)")." as gewicht,
".$this->app->erp->FormatMenge("ifnull(ap.menge,0)")." as Menge,
concat(if(a.lagerartikel,
if(a.porto,
'Porto',
if(
(round((
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
(
( r.parameter!='$id')
OR (
r.parameter='$id' AND r.posid!=ap.id)
)) OR r.objekt!='auftrag' )
),0)
),8)
>= round(ap.menge,8) AND (
round((SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
r.parameter!='$id')
OR r.objekt!='auftrag' )
),0),8) >=
round((SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel),8)
OR round(ap.menge,8) <= round(IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
r.parameter='$id'
),0),8)
)) OR ((
round(ifnull((SELECT SUM(l.menge)
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
),0),8) - round(IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt!='auftrag' OR
r.parameter!='$id')
)
),0),8)
> round(IFNULL(apc.menge,0),8)
)
) ,
CONCAT(
ifnull(
ifnull((
SELECT ".$this->app->erp->FormatMenge("TRIM(SUM(l.menge))+0")."
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
,0)
,0),
if(round((
SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),8)>0,
CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N)'),'')
)
,
if(round((
(SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")."
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0)),8)>=0,
CONCAT('',
(SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")."
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
,''),
'aus')
)
)
,if(a.porto,'Porto',if(a.stueckliste,'Set','kein Lagerartikel'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as Lager,
".($standardlager?"
concat(if(a.lagerartikel,
if(a.porto,
'Porto',
if(
((
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager'
WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id)
),0)
)
>= ap.menge AND (
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager'
WHERE r.artikel = ap.artikel AND (r.parameter <> '$id')
),0)
>=
(SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
OR ap.menge <= IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
r.parameter='$id'
),0)
)) AND (
(
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
(
( r.parameter!='$id')
OR (
r.parameter='$id' AND r.posid!=ap.id)
)) OR r.objekt!='auftrag' )
),0)
)
>= ap.menge AND (
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
r.parameter!='$id')
OR r.objekt!='auftrag' )
),0) >=
(SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
OR ap.menge <= IFNULL((
SELECT SUM(r.menge) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
r.parameter='$id'
),0)
)
)
,
CONCAT(
ifnull(
trim(ifnull(lpin2.menge
,0))+0
,0),
if((
SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0,
CONCAT(' + ',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N)'),'')
)
,
if((
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0,
CONCAT('',
(SELECT TRIM(ifnull(SUM(l.menge),0))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
,''),
'aus')
)
)
,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))) ,'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `$standardlagertext` ,
":($projektlager?"
concat(if(a.lagerartikel,
if(a.porto,
'Porto',
if(
((
ifnull((SELECT TRIM(ifnull(SUM(l.menge),0))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz
INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
),0)
- IFNULL((
SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager'
WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id)
),0)
)
>= ap.menge AND (
(SELECT TRIM(ifnull(SUM(l.menge),0))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz
INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager'
WHERE r.artikel = ap.artikel AND (r.parameter <> '$id')
),0)
>=
(SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
OR ap.menge <= IFNULL((
SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
r.parameter='$id'
),0)
)) AND (
(
(SELECT TRIM(ifnull(SUM(l.menge),0))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
(
( r.parameter!='$id')
OR (
r.parameter='$id' AND r.posid!=ap.id)
)) OR r.objekt!='auftrag' )
),0)
)
>= ap.menge AND (
(SELECT TRIM(ifnull(SUM(l.menge),0))+0
FROM lager_platz_inhalt l
LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
)
- IFNULL((
SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
r.parameter!='$id')
OR r.objekt!='auftrag' )
),0) >=
(SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
OR ap.menge <= IFNULL((
SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
r.parameter='$id'
),0)
)
)
,
CONCAT(
".$this->app->erp->FormatMenge("ifnull(lpin2.menge,0)")."
,
if((
SELECT ifnull(SUM(l.menge),0)
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz
INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0,
CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N)'),'')
)
,
if((
(SELECT TRIM(ifnull(SUM(l.menge),0))+0
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz
INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- IFNULL((SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0,
CONCAT('',
(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")."
FROM lager_platz_inhalt l
INNER JOIN lager_platz lp ON lp.id=l.lager_platz
INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
,''),
'aus')
)
)
,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `Projektlager` ,
":''))."
CONCAT(
IFNULL((SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' AND (r.posid=ap.id OR (r.artikel=ap.artikel AND r.posid=0))),'0')
,
' / ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel )
,' *') as '$_lastcolumn' $hookcolumns
FROM auftrag_position ap
INNER JOIN artikel a ON a.id = ap.artikel
LEFT JOIN (
SELECT apa.id, sum(apb.menge) as menge
FROM auftrag_position apa
INNER JOIN auftrag_position apb ON apa.artikel = apb.artikel AND apa.auftrag = '$id'
AND apb.auftrag = '$id'
AND apb.sort <= apa.sort
WHERE apa.id IN (".$positionIdsImplode.") AND apb.id IN (".$positionIdsImplode.")
GROUP BY apa.id
) apc ON ap.id = apc.id
LEFT JOIN (
SELECT ifnull(sum(lpi1.menge),0) as menge, lpi1.artikel
FROM lager_platz_inhalt lpi1
INNER JOIN lager_platz lp1 ON lpi1.lager_platz = lp1.id AND lp1.autolagersperre != 1 AND lp1.sperrlager != 1 ".($standardlager?" AND lp1.lager != '$standardlager' ":"")."
WHERE lpi1.artikel IN (".$articleIdsimplode.")
GROUP BY lpi1.artikel
) as lpin1 ON ap.artikel = lpin1.artikel
".($standardlager?"
LEFT JOIN (
SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel
FROM lager_platz_inhalt lpi2
INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1
AND lp2.sperrlager != 1 AND lp2.lager = '$standardlager'
WHERE lpi2.artikel IN (".$articleIdsimplode.")
GROUP BY lpi2.artikel
) as lpin2 ON ap.artikel = lpin2.artikel
":($projektlager?"
LEFT JOIN (
SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel
FROM lager_platz_inhalt lpi2
INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1 AND lp2.sperrlager != 1
INNER JOIN lager l2 ON lp2.lager = l2.id AND l2.projekt = '$projektlager'
WHERE lpi2.artikel IN (".$articleIdsimplode.")
GROUP BY lpi2.artikel
) as lpin2 ON ap.artikel = lpin2.artikel
":""))."
LEFT JOIN bestellung_position bp ON bp.id IN (".$bpIdsImplode.") AND ap.id = bp.auftrag_position_id AND bp.artikel IN (".$articleIdsimplode.")
LEFT JOIN bestellung b ON b.id IN (".$bIdsImplode.") AND b.id = bp.bestellung
$hookjoins
WHERE ap.auftrag='$id' AND ap.id IN (".$positionIdsImplode.")
ORDER by ap.sort";
//$time = microtime(true);
$table->Query($sql);
//$time = microtime(true) - $time;
$gewichtanzeigen = false;
$bestellunganzeigen = false;
$reserviertfuerkundeanzeigen = false;
if($table->datasets) {
foreach($table->datasets as $k => $row) {
if(str_replace(',','.',$row['gewicht']) > 0){
$gewichtanzeigen = true;
}
if($row['Bestellung'] != '-')
{
$bestellunganzeigen = true;
}
if(isset($row['Res']) && $row['Res'] != ''){
$reserviertfuerkundeanzeigen = true;
}
if($row[$_lastcolumn] != ''){
$reserviertfuerkundeanzeigen = true;
}
}
}
if(!$bestellunganzeigen)
{
foreach($table->datasets as $k => $row)
{
unset($table->datasets[$k]['Bestellung']);
}
$table->headings[2] = $table->headings[3];
if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
if(isset($table->headings[8]))$table->headings[7] = $table->headings[8];
if(isset($table->headings[8]))
{
unset($table->headings[8]);
}elseif(isset($table->headings[7]))
{
unset($table->headings[7]);
}elseif(isset($table->headings[6]))
{
unset($table->headings[6]);
}elseif(isset($table->headings[5])){
unset($table->headings[5]);
}else{
unset($table->headings[4]);
}
}
if(!$gewichtanzeigen)
{
foreach($table->datasets as $k => $row)
{
unset($table->datasets[$k]['gewicht']);
}
if(!$bestellunganzeigen)
{
$table->headings[2] = $table->headings[3];
}
if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
if(isset($table->headings[8]))$table->headings[7] = $table->headings[8];
if(isset($table->headings[8]))
{
unset($table->headings[8]);
}elseif(isset($table->headings[7]))
{
unset($table->headings[7]);
}elseif(isset($table->headings[6]))
{
unset($table->headings[6]);
}elseif(isset($table->headings[5]))
{
unset($table->headings[5]);
}elseif(isset($table->headings[4]))
{
unset($table->headings[4]);
}else{
unset($table->headings[3]);
}
}
if(!$reserviertfuerkundeanzeigen)
{
foreach($table->datasets as $k => $row)
{
unset($table->datasets[$k][$_lastcolumn]);
}
if($lastcolumn == $_lastcolumn)
{
unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
}else {
$cheading = !empty($table->headings)?count($table->headings):0;
for($hc = 0; $hc < $cheading; $hc++)
{
if($table->headings[$hc] == $_lastcolumn)
{
break;
}
}
for($hci = $hc; $hci < $cheading ;$hci++)
{
if(isset($table->headings[$hci])) {
if(isset($table->headings[$hci + 1])) {
$table->headings[$hci] = $table->headings[$hci + 1];
}else{
unset($table->headings[$hci]);
}
}
}
}
if($lastcolumn == $_lastcolumn)
{
$lastcolumn = $table->headings[(!empty($table->headings)?count($table->headings):0)-1];
if($lastcolumn == 'Aktion'){
$lastcolumn = $table->headings[(!empty($table->headings)?count($table->headings):0)-2];
}
}
}
if($table->datasets)
{
foreach($table->datasets as $k => $v)
{
foreach($v as $k2 => $v2)
{
if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $v2, $matches,PREG_OFFSET_CAPTURE))
{
$table->datasets[$k][$k2] = $matches[1][0][0].' '.$this->app->YUI->ContentTooltip('return','index.php?module=auftrag&action=minidetail&cmd=lager&id='.$matches[2][0][0],'url').$matches[3][0][0];
}
}
}
foreach($table->headings as $k => $v)
{
if($v === 'Lager'){
$table->align[$k] = 'right';
}elseif($v === 'Menge'){
$table->align[$k] = 'right';
}elseif($v === 'Projektlager'){
$table->align[$k] = 'right';
}elseif($v == $standardlagertext){
$table->align[$k] = 'right';
}
}
}
$artikel = $table->DisplayNew("return",$lastcolumn,"noAction","false",0,0,false);
}
else {
//$table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as Menge
$hookjoins = '';
$hookcolumns = '';
$lastcolumn = 'Menge';
$this->app->erp->RunHook('auftrag_minidetail_hook1',4, $id, $hookcolumns, $hookjoins, $lastcolumn);
$sql =
"SELECT if(ap.explodiert_parent > 1,
CONCAT('***',if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel, CONCAT('', ap.nummer,'') as Nummer,
if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),'')
) as Bestellung,a.gewicht as gewicht,
TRIM(ap.menge)+0 as Menge
$hookcolumns
FROM auftrag_position AS ap
INNER JOIN artikel AS a ON a.id=ap.artikel
LEFT JOIN bestellung_position AS bp ON ap.id = bp.auftrag_position_id AND bp.id IN (".$bpIdsImplode.")
LEFT JOIN bestellung AS b ON b.id = bp.bestellung AND b.id IN (".$bIdsImplode.")
$hookjoins
WHERE ap.id IN (".$positionIdsImplode.") AND ap.auftrag='$id'
ORDER by ap.sort ";
$table->Query($sql);
$gewichtanzeigen = false;
$bestellunganzeigen = false;
if($table->datasets){
foreach($table->datasets as $k => $row) {
if($row['gewicht'] > 0){
$gewichtanzeigen = true;
}
if($row['Bestellung'] != '-'){
$bestellunganzeigen = true;
}
}
}
if(!$bestellunganzeigen) {
foreach($table->datasets as $k => $row) {
unset($table->datasets[$k]['Bestellung']);
}
$table->headings[2] = $table->headings[3];
if(isset($table->headings[4])){
$table->headings[3] = $table->headings[4];
}
if(isset($table->headings[5])){
$table->headings[4] = $table->headings[5];
}
if(isset($table->headings[6])){
$table->headings[5] = $table->headings[6];
}
if(isset($table->headings[7])){
$table->headings[6] = $table->headings[7];
}
if(isset($table->headings[7]))
{
unset($table->headings[7]);
}elseif(isset($table->headings[6]))
{
unset($table->headings[6]);
}elseif(isset($table->headings[5])){
unset($table->headings[5]);
}else{
unset($table->headings[4]);
}
}
if(!$gewichtanzeigen)
{
foreach($table->datasets as $k => $row)
{
unset($table->datasets[$k]['gewicht']);
}
if(!$bestellunganzeigen)
{
$table->headings[2] = $table->headings[3];
}
if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
if(isset($table->headings[7]))
{
unset($table->headings[7]);
}elseif(isset($table->headings[6]))
{
unset($table->headings[6]);
}elseif(isset($table->headings[5])){
unset($table->headings[5]);
}elseif(isset($table->headings[4])){
unset($table->headings[4]);
}else{
unset($table->headings[3]);
}
}
$artikel = $table->DisplayNew("return",$lastcolumn,"noAction");
}
$this->app->Tpl->Set('ARTIKEL','
'
);
}
$this->app->Tpl->Add(
'ZAHLUNGEN',
$this->AuftragZahlung(true)
);
// schaue ob es eine GS zu diesem Auftrag gibt
// schaue ob es eine GS zu diesem Auftrag gibt
//$gutschriftid = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$rechnungid' LIMIT 1");
if(!empty($rechnungids)) {
foreach($rechnungids as $rechnungid) {
$gutschriftid = $rechnungid <= 0?0:$this->app->DB->Select(
sprintf(
'SELECT id FROM gutschrift WHERE rechnungid=%d AND rechnungid > 0 LIMIT 1',
$rechnungid
)
);
if($gutschriftid > 0) {
$tmp = $this->app->DB->Select(
"SELECT
CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),' ') as rechnung
FROM gutschrift r
WHERE r.id='".$gutschriftid."' LIMIT 1"
);
$this->app->Tpl->Add('GUTSCHRIFT',$tmp);
}
}
}
if($auftragArr[0]['rma']==1){
$this->app->YUI->ParserVarIf('RMA', 1);
}
else{
$this->app->YUI->ParserVarIf('RMA', 0);
}
$this->app->Tpl->Set('RMAFARBE','red');
$this->app->Tpl->Set('RMATEXT','RMA zu diesem Auftrag vorhanden!');
if($auftragArr[0]['belegnr']=='0' || $auftragArr[0]['belegnr']=='') {
$auftragArr[0]['belegnr'] = 'ENTWURF';
}
$this->app->Tpl->Set('BELEGNR',$auftragArr[0]['belegnr']);
$this->app->Tpl->Set('AUFTRAGID',$auftragArr[0]['id']);
$this->app->Tpl->Set(
'RECHNUNGLIEFERADRESSE',
$this->AuftragRechnungsLieferadresse($auftragArr[0]['id'])
);
$this->app->Tpl->Set('RMA',"Es ist kein RMA-Prozess zu diesem Auftrag vorhanden.");
$tmp = new EasyTable($this->app);
$tmp->Query(
sprintf(
"SELECT DATE_FORMAT(ap.zeit, '%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, ap.bearbeiter, ap.grund
FROM `auftrag_protokoll` AS `ap`
WHERE ap.auftrag = %d
ORDER by ap.zeit DESC, ap.id DESC",
$id
)
);
$tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
$produktionsId = $this->app->DB->Select("SELECT id FROM produktion WHERE auftragid = '$id' LIMIT 1");
if($produktionsId > 0){
$this->app->Tpl->Set(
'VORPRODUKTIONPROTOKOLL',
'
{|Produktion Protokoll|}
'
);
$produktionProtokoll = new EasyTable($this->app);
$produktionProtokoll->Query(
sprintf(
"SELECT DATE_FORMAT(pp.zeit,'%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, pp.bearbeiter, pp.grund
FROM `produktion_protokoll` AS `pp`
WHERE pp.produktion = %d
ORDER BY pp.zeit DESC, pp.id DESC",
$produktionsId
)
);
$produktionProtokoll->DisplayNew('PRODUKTIONPROTOKOLL', 'Produktion Protokoll', 'noAction');
$this->app->Tpl->Set('NACHPRODUKTIONPROTOKOLL', '
");
if($suchwort!="")
{
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = b.adresse WHERE (a.name LIKE '%$suchwort%' OR a.email LIKE '%$suchwort%' OR a.plz LIKE '$suchwort%' OR a.internet LIKE '%$suchwort%' OR (adr.kundennummer='$suchwort' AND adr.kundennummer!=0)
OR (a.gesamtsumme='$suchwort' AND a.gesamtsumme!=0) OR (a.belegnr='$suchwort' AND a.belegnr!='' ))");
} else {
if($name!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')");
else if($email!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.email LIKE '%$email%')");
else if($plz!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')");
else if($proforma!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.internet LIKE '%$proforma%')");
else if($kundennummer!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')");
else if($betrag!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.gesamtsumme='$betrag')");
else if($auftrag!="")
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')");
}
$table->DisplayNew('ERGEBNISSE',"Lesen");
} else {
$this->app->Tpl->Add('ERGEBNISSE',"
Der Auftrag wurde freigegeben und kann jetzt versendet werden!
');
}
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
}
if($id && $showDefault) {
$name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
//$email = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1");
//$summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position
//WHERE auftrag='$id'");
//$summe = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM auftrag_position
WHERE auftrag='$id' LIMIT 1");
// check ob entwurdsdataum alt ist
$extra = $this->app->erp->CheckboxEntwurfsmodus('auftrag',$id);
if($email!='')
{
$this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name im Wert von $summe $waehrung
jetzt freigegeben werden?
Der Auftrag \"$name\" ($belegnr) wurde wieder als freigegeben markiert!
");
$this->app->DB->Update("UPDATE auftrag SET status='freigegeben',schreibschutz=0 WHERE id='$id' LIMIT 1");
$this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=0,geliefert=0 WHERE auftrag='$id'");
$this->app->erp->AuftragProtokoll($id,'Auftrag manuell als freigegeben markiert');
}
else
{
$msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde abgeschlossen!
');
}
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
}
else {
$name = $this->app->DB->Select("SELECT a.name FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
$this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt wirklich als freigegeben markiert werden?
");
}
$this->AuftragMenu();
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
/**
* @param int $orderId
*
* @return array
*/
public function closeOrder($orderId)
{
$orderRow = $this->app->DB->SelectRow(
sprintf(
'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
$orderId
)
);
if(empty($orderRow)) {
return ['error' => 'Auftrag nicht gefunden'];
}
$status = $orderRow['status'];
$number = $orderRow['belegnr'];
$name = $orderRow['name'];
if($status === 'angelegt') {
return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er noch nicht freigeben wurde! Bitte Auftrag erst freigeben!"];
}
if($status==='storniert') {
return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits storniert ist!"];
}
if($status === 'abgeschlossen') {
return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits abgeschlossen ist!"];
}
if($status!=='freigegeben' && $status!=='versendet') {
return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden"];
}
$this->app->DB->Update(
sprintf(
"UPDATE auftrag SET status='abgeschlossen',schreibschutz=1 WHERE id=%d LIMIT 1",
$orderId
)
);
$this->app->erp->AuftragProtokoll($orderId,'Auftrag wurde manuell abgeschlossen');
return ['info' => 'Der Auftrag wurde abgeschlossen!'];
}
public function AuftragAbschluss()
{
$id = $this->app->Secure->GetGET('id');
$abschluss= $this->app->Secure->GetGET('abschluss');
$auftragarr = empty($id)?null: $this->app->DB->SelectRow(
sprintf(
'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
$id
)
);
$name = '';
$belegnr = '';
$status = '';
if(!empty($auftragarr)){
$name = $auftragarr['name'];
$belegnr = $auftragarr['belegnr'];
$status = $auftragarr['status'];
}
if($abschluss==$id) {
$ret = $this->closeOrder($id);
if(!empty($ret['error'])) {
$msg = $this->app->erp->base64_url_encode('
');
}
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
}
$name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
$this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt abgeschlossen werden?
");
$this->AuftragMenu();
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
public function AuftragUndelete()
{
$id = (int)$this->app->Secure->GetGET('id');
$auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status FROM auftrag WHERE id='$id' LIMIT 1");
if(!empty($auftragarr)){
$name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
$belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
$status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
}else{
$name = '';
$belegnr = '';
$status = '';
}
$ok = true;
if($status !== 'storniert')
{
$ok = false;
}
if($ok)
{
$anzahl_ls = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid='$id' LIMIT 1");
if($anzahl_ls)
{
$ok = false;
}
}
if($ok)
{
$anzahl_re = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1");
if($anzahl_re){
$ok = false;
}
}
if($ok)
{
$this->app->DB->Update("UPDATE auftrag SET status='freigegeben' WHERE id='$id' LIMIT 1");
$this->app->erp->AuftragProtokoll($id,'Auftrag Storno rückgängig');
$msg = $this->app->erp->base64_url_encode("
Auftrag \"$name\" ($belegnr) wurde wieder freigegeben!
Auftrag \"$name\" ($belegnr) kann nicht storniert werden da er bereits storniert ist!
");
$this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
}
$this->app->DB->Update("UPDATE auftrag SET status='storniert' WHERE id='$id' LIMIT 1");
$this->app->erp->AuftragProtokoll($id,'Auftrag storniert');
// stornierungen loeschen
$this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$id'");
// ausfuellen automatisch stornofelder
//stornobetrag // summe des zahlungseingangs!!!!
//stornogutschrift
//stornowareerhalten
//stornorueckzahlung
// zureuckzahlen per
// email senden?
if($mail==1){
$this->app->erp->Stornomail($id);
}
$recheck = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftrag='$belegnr' LIMIT 1");
if($recheck <= 0)
{
// Fall 1 keine RE und LS
// -> stornieren und Geld zurueckueberweisen (Paypal, Kredit oder Bank)
// geld wird ueber ipayment oder paypal zurueckgebucht!!!
// negatives auftragssguthaben loescht auftragsguthaben
$this->app->Tpl->Add('MESSAGE','
Achtung dem Kunden sofort das Geld überweisen!
');
}
$msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde storniert!
');
$this->app->erp->RunHook('auftrag_delete', 1, $id);
if($intern){
return;
}
$this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg);
}
if($intern){
return;
}
$name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
$auftragarr = $this->app->DB->SelectRow("SELECT email,projekt FROM auftrag WHERE id='$id' LIMIT 1");
if(!empty($auftragarr)){
$email = $auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1");
$projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
}else{
$email = '';
$projekt = 0;
}
if($projekt > 0){
$stornomail = $this->app->DB->Select("SELECT stornomail FROM projekt WHERE id='$projekt' LIMIT 1");
}else{
$stornomail = 0;
}
if($email!='') {
$name =$name.' '.$email;
}
if($email!='' && $stornomail=='1')
{
$this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt storniert werden?
");
} else {
$this->app->Tpl->Set('TAB1',"
Soll der Auftrag an $name jetzt storniert werden?
");
}
$this->AuftragMenu();
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
public function AuftragDeleteAusVersand()
{
$id = $this->app->Secure->GetGET('id');
//$rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1");
if($id > 0){
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
}else{
$lieferschein = 0;
}
if($lieferschein > 0){
$auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
}else{
$auftragid = 0;
}
if($auftragid > 0){
$this->app->DB->Update("UPDATE auftrag SET rma=1,status='storniert' WHERE id='$auftragid' LIMIT 1");
}
if($lieferschein > 0){
$auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
}else{
$auftrag = 0;
}
// status aendern
if($lieferschein > 0)
{
$this->app->DB->Update("UPDATE lieferschein SET versandart='rma',status='storniert' WHERE id='$lieferschein' LIMIT 1");
$this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='lieferschein' AND parameter='$lieferschein'");
$this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein durch Auftrag aus Versand storniert');
}
$this->app->erp->AuftragProtokoll($auftrag,'Auftrag aus Versand storniert');
// RMA anlegen
$msg = $this->app->erp->base64_url_encode('
Der Auftrag wurde als RMA im Versand markiert!
');
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$auftrag&msg=$msg");
}
public function AuftragProtokoll()
{
$this->AuftragMenu();
$id = $this->app->Secure->GetGET('id');
$tmp = new EasyTable($this->app);
$tmp->Query("SELECT zeit,bearbeiter,grund FROM auftrag_protokoll WHERE auftrag='$id' ORDER by zeit DESC");
$tmp->DisplayNew('TAB1','Protokoll','noAction');
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
public function AuftragProforma()
{
$id = $this->app->Secure->GetGET('id');
$this->app->erp->AuftragNeuberechnen($id);
$projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
if(class_exists('AuftragPDFCustom'))
{
$Brief = new AuftragPDFCustom($this->app,$projekt,'proforma');
}
else{
$Brief = new AuftragPDF($this->app,$projekt,'proforma');
}
$Brief->GetAuftrag($id);
$Brief->displayDocument();
$this->AuftragList();
}
public function AuftragInlinePDF()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0)
{
$this->app->erp->AuftragNeuberechnen($id);
$auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
}
if(!empty($auftragarr))
{
$projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
$schreibschutz = $auftragarr['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
}else{
$projekt = 0;
$schreibschutz = 0;
}
$frame = $this->app->Secure->GetGET('frame');
if($frame != ''){
$file = urlencode("../../../../index.php?module=auftrag&action=inlinepdf&id=$id");
echo "";
$this->app->ExitXentral();
}
if(class_exists('AuftragPDFCustom'))
{
$Brief = new AuftragPDFCustom($this->app,$projekt);
}else{
$Brief = new AuftragPDF($this->app,$projekt);
}
$Brief->GetAuftrag($id);
$Brief->inlineDocument($schreibschutz);
}
public function AuftragPDF()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$this->app->erp->AuftragNeuberechnen($id);
$auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
}
if(!empty($auftragarr))
{
$projekt = $auftragarr['projekt'];
$schreibschutz = $auftragarr['schreibschutz'];
}else{
$projekt = 0;
$schreibschutz = 0;
}
if(class_exists('AuftragPDFCustom'))
{
$Brief = new AuftragPDFCustom($this->app,$projekt);
}else{
$Brief = new AuftragPDF($this->app,$projekt);
}
$Brief->GetAuftrag($id);
$Brief->displayDocument($schreibschutz);
$this->AuftragList();
}
public function AuftragMenu()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$this->app->erp->AuftragNeuberechnen($id);
$auftragarr = $this->app->DB->SelectRow("SELECT belegnr,name, status FROM auftrag WHERE id='$id' LIMIT 1");
}
$backurl = $this->app->Secure->GetGET('backurl');
$backurl = $this->app->erp->base64_url_decode($backurl);
$belegnr = '';
$name = '';
$status = '';
if(!empty($auftragarr)) {
$belegnr = $auftragarr['belegnr'];
$name = $auftragarr['name'];
$status = $auftragarr['status'];
}
if($belegnr=='0' || $belegnr=='') {
$belegnr ='(Entwurf)';
}
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Auftrag $belegnr");
// status bestell
if ($status==='angelegt') {
$this->app->erp->MenuEintrag("index.php?module=auftrag&action=freigabe&id=$id","Freigabe");
}
$this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id","Details");
if($status==='bestellt') {
$this->app->Tpl->Add('TABS',"
Dies ist Teilauftrag Nr. $teillieferungnummer (Aktuell gesplittet in $teillieferungnummermax Aufträge). Der ursprüngliche Auftrag war: $teillieferung_von_auftrag_nummer
"
);
}
$check = $this->app->DB->SelectPairs(
"SELECT b.id, b.belegnr
FROM auftrag_position ap
INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
INNER JOIN bestellung b ON bp.bestellung = b.id
WHERE ap.auftrag='$id'
GROUP BY b.belegnr, b.id
ORDER BY b.belegnr, b.id"
);
if($check) {
$this->app->Tpl->Add(
'MESSAGE',
"
Zu diesem Auftrag gehör"
.((!empty($check)?count($check):0) == 1?'t':'en')
." die Bestellung".((!empty($check)?count($check):0) == 1?':':'en:')
);
foreach($check as $supplierOrderId => $supplieryNumber) {
$this->app->Tpl->Add('MESSAGE',' '
);
}
$this->app->Tpl->Add('MESSAGE',"
");
}
if($this->app->erp->ModulVorhanden('lieferkette')) {
$auftraglieferkette = $this->app->DB->Select(
"SELECT l.auftrag
FROM lieferkette l
INNER JOIN lieferkette_bestellung lb
ON l.id = lb.lieferkette AND lb.belegtyp = 'auftrag' AND belegid = '$id' AND l.auftrag > 0
LIMIT 1"
);
if($auftraglieferkette) {
$this->app->Tpl->Add(
'MESSAGE',
'
Dieser Auftrag gehört zur Lieferkette des Auftrags
'
);
}
}
$orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
$zahlungsweise= $orderRow['zahlungsweise'];//$this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$id' LIMIT 1");
$zahlungszieltage= $orderRow['zahlungszieltage'];//$this->app->DB->Select("SELECT zahlungszieltage FROM auftrag WHERE id='$id' LIMIT 1");
$status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
$schreibschutz= $orderRow['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
$adresse= $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
$liefersperre= $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse' LIMIT 1");
if($id > 0 && $this->app->DB->Select(
sprintf(
'SELECT id FROM auftrag WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
$id
)
)
) {
$this->app->erp->PDFArchivieren('auftrag', $id, true);
}
if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') {
$Brief = new Briefpapier($this->app);
if($Brief->zuArchivieren($id, 'auftrag')) {
$this->app->Tpl->Add('MESSAGE',"
Der Auftrag ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
");
}
elseif(!$this->app->DB->Select("SELECT versendet FROM auftrag WHERE id = '$id' LIMIT 1")) {
$this->app->Tpl->Add('MESSAGE',"
');
}
$this->app->erp->AuftragEinzelnBerechnen($id);
$this->app->erp->AuftragNeuberechnen($id);
$this->app->erp->AuftragAutoversandBerechnen($id); // heute wieder eingebaut 09.03.2019 BS weil Termin ampel falsch
$this->app->erp->DisableVerband();
$this->AuftragMiniDetail('MINIDETAIL',true);
$icons = $this->app->YUI->IconsSQL();
if(strpos($icons,'aac.status')) {
$icons = $this->app->DB->Select("SELECT $icons FROM auftrag a LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag WHERE a.id='$id' LIMIT 1");
}
else{
$icons = $this->app->DB->Select("SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1");
}
$this->app->Tpl->Set('STATUSICONS',$icons);
$this->app->YUI->AARLGPositionen();
$orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
$status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
if($status=='') {
$this->app->DB->Update("UPDATE auftrag SET status='angelegt' WHERE id='$id' LIMIT 1");
$orderRow['status'] = $this->app->DB->Select(sprintf('SELECT status FROM auftrag WHERE id = %d', $id));
}
$tmpcheckversand = $orderRow['versandart'];//$this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1");
if($tmpcheckversand==='packstation' && $orderRow['abweichendelieferadresse'] != 0) {
$this->app->DB->Update("UPDATE auftrag SET abweichendelieferadresse='0' WHERE id='$id' LIMIT 1");
}
$status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
$nummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
$adresse = $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
$lieferant = $orderRow['lieferant'];//$this->app->DB->Select("SELECT lieferant FROM auftrag WHERE id='$id' LIMIT 1");
$kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$adresse' LIMIT 1");
$lieferantenretoure = $orderRow['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1");
if($lieferantenretoure=='1' && $lieferant<=0) {
$this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
$this->app->Tpl->Set('MESSAGE',"
Pflichtfeld! Bitte geben Sie eine Lieferanten-Nr. an!
Zu diesem Auftrag gibt es folgende Dokumente. $optional
"
);
}
}
if($schreibschutz=='1') {
$this->app->erp->CommonReadonly();
}
if($schreibschutz != '1'){
if($this->app->erp->Firmendaten('schnellanlegen') == '1'){
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
');
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
');
}else{
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
');
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
');
}
}
// immer wenn sich der lieferant genändert hat standartwerte setzen
if($this->app->Secure->GetPOST('adresse')!='') {
$tmp = $this->app->Secure->GetPOST('adresse');
$kundennummer = $this->app->erp->FirstTillSpace($tmp);
$filter_projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
$adresse = $this->app->DB->Select(
"SELECT id
FROM adresse
WHERE kundennummer='$kundennummer' AND geloescht=0 "
.$this->app->erp->ProjektRechte('projekt', true, 'vertrieb')."
ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt
LIMIT 1"
);
$uebernehmen =$this->app->Secure->GetPOST('uebernehmen');
if($uebernehmen=='1' && $schreibschutz != '1') {
// nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
$this->app->erp->LoadAuftragStandardwerte($id,$adresse);
$projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
if($projekt != $filter_projekt) {
$deactivateAutoversand = (int)$this->app->erp->Projektdaten($projekt,'deactivateautoshipping');
if($deactivateAutoversand) {
$this->app->DB->Update(
sprintf(
'UPDATE auftrag SET autoversand = 0 WHERE autoversand = 1 AND schreibschutz = 0 AND id = %d',
$id
)
);
}
}
$projektlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1");
$this->app->DB->Update("UPDATE auftrag SET standardlager = '$projektlager' WHERE id = '$id' LIMIT 1");
$this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=0 WHERE id='$id'");
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
}
}
if($this->app->Secure->GetPOST('lieferant')!='') {
$tmplieferant = $this->app->Secure->GetPOST('lieferant');
$lieferantennummer = $this->app->erp->FirstTillSpace($tmplieferant);
$adresselieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$lieferantennummer' AND lieferantennummer!='' AND geloescht=0 LIMIT 1");
$uebernehmen2 =$this->app->Secure->GetPOST('uebernehmen2');
if($uebernehmen2=='1' && $schreibschutz != '1') {
// nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
$this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=1 WHERE id='$id'");
$this->app->erp->LoadAuftragStandardwerte($id,$adresselieferant,true);
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
}
}
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query(
"SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge,
(SELECT TRIM(SUM(l.menge))+0
FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel
) as Lagerbestand, ap.geliefert ausgeliefert,ap.vpe as VPE
FROM auftrag_position ap
WHERE ap.auftrag='$id'"
);
$table->DisplayNew('POSITIONEN','VPE','noAction');
$summe = $this->app->DB->Select(
"SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position
WHERE auftrag='$id'"
);
$waehrung = $this->app->DB->Select(
"SELECT waehrung FROM auftrag_position
WHERE auftrag='$id' LIMIT 1"
);
$orderRow = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM auftrag WHERE id = %d',
$id
)
);
$summebrutto = $orderRow['gesamtsumme'];//$this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
$ust_befreit_check = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1");
if($ust_befreit_check==1){
$tmp = 'Kunde ist UST befreit';
}
else{
$tmp = 'Kunde zahlt mit UST';
}
if($summe > 0){
$this->app->Tpl->Add(
'POSITIONEN',
"
Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($tmp) "
);
}
$vertrieb = $orderRow['vertrieb'];//$this->app->DB->Select("SELECT vertrieb FROM auftrag WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('VERTRIEB',"");
$belegnr= $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('BELEGNR',"");
$status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('STATUS',"");
// ENDE
//alle RE und LS zu diesem Auftrag
$auftragsnummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
$anzahl = $this->app->DB->Select(
"SELECT COUNT(r.belegnr)
FROM rechnung r
WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''");
if($anzahl >0) {
$this->app->Tpl->Set('AUFTRAGSDOKUMENTE',"");
}
//suche alle LS zu diesem Auftrag
if($auftragsnummer>0) {
$trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id);
$this->app->Tpl->Set('VERSAND', $trackingInfo);
}
// UST
$ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1");
$ust_befreit = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1");
$ustprfid = $this->app->DB->Select(
"SELECT id
FROM ustprf
WHERE DATE_FORMAT(datum_online,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND adresse='$adresse' AND status='erfolgreich'
LIMIT 1"
);
if($ust_befreit==0) {
$this->app->Tpl->Set('USTPRUEFUNG','Abgabe in Inland');
}
else if ($ust_befreit==1) {
if($ust_ok == 1) {
$datum = $this->app->DB->Select("SELECT briefbestellt FROM ustprf WHERE id='$ustprfid' LIMIT 1");
$datum = $this->app->String->Convert($datum,"%1-%2-%3","%3.%2.%1");
$this->app->Tpl->Set('USTPRUEFUNG',"EU-Lieferung mit Pruefung Brief bestellt: $datum");
}
else{
$this->app->Tpl->Set('USTPRUEFUNG', "Pruefung notwendig! (Starten)");
}
}
else {
if($ust_ok == 1) {
$this->app->Tpl->Set('USTPRUEFUNG', 'Freigabe Export (Drittland)');
}
else{
$this->app->Tpl->Set('USTPRUEFUNG', 'Fehlende Freigabe Export!');
}
}
$versandart = $orderRow['versandart'];// $this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1");
if($this->app->Secure->GetPOST('versandart')!='') {
$versandart = $this->app->Secure->GetPOST('versandart');
}
$this->app->Tpl->Set('PACKSTATION','none');
if($versandart==='packstation') {
$this->app->Tpl->Set('PACKSTATION','');
}
$abweichendelieferadresse= $orderRow['abweichendelieferadresse'];//$this->app->DB->Select("SELECT abweichendelieferadresse FROM auftrag WHERE id='$id' LIMIT 1");
if($this->app->Secure->GetPOST('abweichendelieferadresse')!='') {
$versandart = $this->app->Secure->GetPOST('abweichendelieferadresse');
}
$this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','none');
if($abweichendelieferadresse=='1') {
$this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','');
}
if($id && $status !== 'storniert'
&& $auftragsnummer && $this->app->erp->RechteVorhanden('auftrag','paypal')
&& false !== $this->app->erp->SendPaypalFromAuftrag($id, true)
) {
$this->app->Tpl->Add(
'BUTTON_UEBERNEHMEN',
''
);
}
$this->app->Tpl->Set('AKTIV_TAB1','selected');
$sollExtSoll = $this->app->DB->SelectRow(
sprintf(
"SELECT extsoll, gesamtsumme
FROM auftrag
WHERE id = %d AND schreibschutz = 0 AND status = 'abgeschlossen' AND extsoll <> 0",
$id
)
);
if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['gesamtsumme']) {
$sollExtSoll['gesamtsumme'] = $this->app->DB->Select(
sprintf(
'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `auftrag_position` WHERE `auftrag` = %d ',
$id
)
);
}
if(!empty($sollExtSoll) && $sollExtSoll['gesamtsumme'] != $sollExtSoll['extsoll']) {
$extsoll = $sollExtSoll['extsoll'];
$this->app->Tpl->Add(
'MESSAGE',
''
);
}
parent::AuftragEdit();
$this->app->erp->CheckBearbeiter($id,'auftrag');
$this->app->erp->CheckVertrieb($id,'auftrag');
if($this->app->Secure->GetPOST('speichern')!='' && $storno==''){
$msg = $this->app->Secure->GetGET('msg');
if($this->app->Secure->GetGET('msg')==''){
$msg .= $this->app->Tpl->Get('MESSAGE').' ';
$msg = $this->app->erp->base64_url_encode($msg);
}
$this->app->Location->execute(
"index.php?module=auftrag&action=edit&id=$id&msg=$msg"
.($this->app->Secure->GetGET('msgid')?'&msgid='.(int)$this->app->Secure->GetGET('msgid'):'')
);
}
if ($this->app->Secure->GetPOST('speichern')!='' && $storno==='abschluss'){
//header("Location: index.php?module=stornierungen&action=list");
$this->app->ExitXentral();
}
if($this->app->Secure->GetPOST('weiter')!='') {
$this->app->Location->execute("index.php?module=auftrag&action=positionen&id=$id");
}
$this->AuftragMenu();
}
function AuftragUstStart()
{
$frame = $this->app->Secure->GetGET("frame");
if($frame=="false")
{
// hier nur fenster größe anpassen
$this->app->YUI->IframeDialog(600,320);
} else {
$this->app->BuildNavigation=false;
}
}
function AuftragCreate()
{
//$this->app->Tpl->Add(KURZUEBERSCHRIFT,"Auftrag");
$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
$anlegen = $this->app->Secure->GetGET("anlegen");
if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1")
{
$this->app->Location->execute("index.php?module=auftrag&action=create&anlegen=1");
}
if($anlegen != '')
{
$id = $this->app->erp->CreateAuftrag();
$deactivateautoshipping = $this->app->DB->Select(
sprintf(
'SELECT pr.deactivateautoshipping
FROM auftrag AS o
INNER JOIN projekt AS pr ON o.projekt = pr.id
WHERE o.id = %d',
$id
)
);
if($deactivateautoshipping) {
$this->app->DB->Update(
sprintf(
'UPDATE auftrag SET autoversand = 0 WHERE id = %d',
$id
)
);
}
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
}
$this->app->Tpl->Set('MESSAGE',"
Möchten Sie ein Auftrag jetzt anlegen?
");
$this->app->Tpl->Set('TAB1',"
Aufträge in Bearbeitung
Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind.
");
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
}
/*
order processed true or false
*/
public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
{
// mit der funktionen koennen nur erstauftraege abgewickelt koennen!!!
$internmodus = 0;
if($id!='')
{
$internmodus=1;
}
if($id==''){
$id = $this->app->Secure->GetGET('id');
}
$cmd = $this->app->Secure->GetGET("cmd");
if($cmd=="manually" && $id > 0)
{
$this->app->DB->Update(sprintf("UPDATE auftrag SET autoversand=1 WHERE id=%d AND status='freigegeben' LIMIT 1",$id));
}
@ignore_user_abort(true);
@set_time_limit(0);
// Prozess haengt so lange bis der nächste frei ist
$fp = $this->app->erp->ProzessLock('auftrag_autoversand');
$posids = $this->app->Secure->GetGET('posids');
if($posids)
{
$positionen = null;
$zwischenpositionen = null;
if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
{
$sida = explode(',',$posids);
foreach($sida as $v)
{
if(strpos($v, 'b') === 0)
{
$v = substr($v ,1);
$positionen[] = $v;
}else{
$v = substr($v ,1);
$zwischenpositionen[] = $v;
}
}
}
}
$this->app->erp->AuftragEinzelnBerechnen($id);
// artikel reservieren
$adresse = 0;
$versandart = '';
$projekt = 0;
$belegnr = '';
$tmpname = '';
$keinetrackingmail = 0;
$usereditid = 0;
$auftrag = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1");
if(!empty($auftrag)){
$adresse = $auftrag[0]['adresse'];
$versandart = $auftrag[0]['versandart'];
$projekt = (int)$auftrag[0]['projekt'];
$belegnr = $auftrag[0]['belegnr'];
$tmpname = $auftrag[0]['name'];
$keinetrackingmail = $auftrag[0]['keinetrackingmail'];
$usereditid = $auftrag[0]['usereditid'];//$this->app->DB->Select("SELECT usereditid FROM auftrag WHERE id='$id' LIMIT 1");
}
$useredittimestamp = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM auftrag WHERE id='$id' LIMIT 1");
$projektarr = null;
if($projekt > 0){
$projektarr = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1");
}
if(!empty($projektarr)){
$kommissionierverfahren = $projektarr['kommissionierverfahren'];//$this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
}else{
$kommissionierverfahren = '';
}
if($usereditid == $this->app->User->GetID())
{
$useredittimestamp = 1000;
}
$anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
if($anzahl_artikel <= 0)
{
$meldung = "Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!";
$this->app->erp->EventMitSystemLog($this->app->User->GetID(), $meldung, -1,'', 'alert', 1);
}
$ret = false;
$zusatzcheck = true;
$this->app->erp->RunHook('AuftragVersandZusatzcheck', 2, $id, $zusatzcheck);
if(($auftrag[0]['status']==='freigegeben' && $auftrag[0]['nachlieferung']=='0'
&& $auftrag[0]['lager_ok']=='1'&&$auftrag[0]['porto_ok']=='1'&&$auftrag[0]['ust_ok']=='1'
&& $auftrag[0]['vorkasse_ok']=='1'&&$auftrag[0]['nachnahme_ok']=='1' &&($auftrag[0]['liefertermin_ok']=='1' || $ignoriereliefertermin)
&& $auftrag[0]['check_ok']=='1' && $auftrag[0]['autoversand']=='1'
&& $auftrag[0]['kreditlimit_ok']=='1' && $auftrag[0]['liefersperre_ok']=='1' && ($useredittimestamp > 45 || $useredittimestamp <= 0 || $internmodus)
&& $anzahl_artikel >=1) && $zusatzcheck)
{
// Start
$ret = true;
$this->app->DB->Insert(
sprintf(
"INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
(%d,now(),'%s','Lieferschein an Versandzentrum übergeben')",
(int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
)
);
$this->app->erp->Protokoll("WeiterfuehrenAuftrag AB $belegnr Art: ".$auftrag[0]['art']);
// pruefe ob es lagerartikel gibt
/*$summe_lagerartikel = $this->app->DB->Select("SELECT SUM(ap.id) FROM auftrag_position ap,
artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel AND a.lagerartikel='1'");*/
$nurRestmenge = false;
//if($summe_lagerartikel >0 || $auftrag[0][art]=="rma")
//TODO wenn nur dienstleistung keinen lieferschein
if($auftrag[0]['art']==='lieferung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='')
{
if($posids) {
$lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
$this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB '.$belegnr);
}
else {
$lieferschein = $this->app->DB->Select(
sprintf(
"SELECT dn.id
FROM lieferschein AS dn
WHERE dn.auftragid = %d AND dn.status <> 'storniert'
LIMIT 1",
$id
)
);
if(empty($lieferschein)) {
$lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
$this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB ' . $belegnr);
}
else {
$nurRestmenge = true;
}
}
$ls_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($ls_belegnr==='' || $ls_belegnr==='0') {
$ls_belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$lieferschein);
}
$this->app->DB->Update("UPDATE lieferschein SET
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');
if(!($kommissionierverfahren==='lieferscheinlager' ||
$kommissionierverfahren==='lieferscheinlagerscan' ||
$kommissionierverfahren==='lieferschein')){
$this->app->erp->PDFArchivieren('lieferschein', $lieferschein);
}
$etiketten_positionen = 0;
$etiketten_art = '';
$etiketten_drucker = 0;
$etiketten_sort = 0;
if(!empty($projektarr))
{
$etiketten_positionen = $projektarr['etiketten_positionen'];//$this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
$etiketten_art = $projektarr['etiketten_art'];//$this->app->DB->Select("SELECT etiketten_art FROM projekt WHERE id='$projekt' LIMIT 1");
$etiketten_drucker = $projektarr['etiketten_drucker'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
$etiketten_sort= $projektarr['etiketten_sort'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
}
if($etiketten_positionen > 0)
{
$this->app->erp->LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort);
}
} else {
// sonst ist lieferschein = 0
$lieferschein = 0;
}
// rechnung immer außer es ist beistellung bzw. kostenlose lieferung
$rechnung = 0;
if(($auftrag[0]['art']==='rechnung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='') && !$this->app->erp->Projektdaten($projekt,'rechnungerzeugen'))
{
// nur erzeugen wenn positionen betrag hpoch genug ist
$artikelarrsumme = $this->app->DB->Select("SELECT SUM(preis*menge) FROM auftrag_position WHERE auftrag='$id' AND auftrag > 0");
$this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Preis ".$artikelarrsumme);
// wenn mindestesten zwei verschiedene steuersaetze und rechnung 0 ist dann muss man auch erzeugen
$anzahlsteuer = $this->app->DB->Select("Select sum(t.summe) FROM (
(SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'befreit' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer <> 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE steuersatz >= 0 and not isnull(steuersatz) AND auftrag = '$id' LIMIT 1) )t");
if($artikelarrsumme>=0.01 || $anzahlsteuer > 1)
{
// versand erzeugen (RE + LS) und verlinken und wenn vorkasse auftrag geld als bezahlt markieren in rechnung
if($posids) {
$rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id, $positionen, $zwischenpositionen);
}
else{
$rechnung = $this->app->DB->Select(
sprintf(
"SELECT i.id FROM rechnung AS i WHERE auftragid = %d AND status <> 'storniert' LIMIT 1",
$id
)
);
if(empty($rechnung)){
$rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
}
}
$this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferschein' WHERE id='$rechnung' LIMIT 1");
$re_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnung' LIMIT 1");
if($re_belegnr==='' || $re_belegnr==='0')
{
$re_belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$rechnung);
}
$this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr (id $id) RE $re_belegnr (id $rechnung)");
$this->app->DB->Update(
sprintf(
"UPDATE rechnung SET belegnr = '%s' WHERE id = %d AND (belegnr = '' OR belegnr = '0')",
$re_belegnr, $rechnung
)
);
$this->app->DB->Update(
sprintf(
"UPDATE rechnung SET status = 'freigegeben' WHERE status <> 'storniert' AND status <> 'versendet' AND id = %d",
$rechnung
)
);
$this->app->erp->RechnungProtokoll($rechnung, 'Rechnung freigegeben');
$this->app->DB->Update(
sprintf(
"UPDATE rechnung
SET buchhaltung='%s'
WHERE id=%d
LIMIT 1",
$this->app->DB->real_escape_string($this->app->User->GetDescription()), $rechnung
)
);
$this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung");
$this->app->erp->PDFArchivieren("rechnung",$rechnung);
}
}
// auftrag_position geliefert_menge und geliefert anpassen
$artikelarr = $this->app->DB->SelectArr(
sprintf(
"SELECT ap.id,ap.artikel,ap.menge
FROM auftrag_position AS ap
INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
WHERE ap.auftrag=%d AND ap.auftrag > 0",
(int)$id
)
);
$cartikelarr = $artikelarr?count($artikelarr):0;
for($i=0;$i<$cartikelarr; $i++)
{
$auftragspositionsid = $artikelarr[$i]['id'];
$artikel = $artikelarr[$i]['artikel'];
$menge= $artikelarr[$i]['menge'];
// lager teile reservieren
$this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
AND parameter='$id' AND artikel='$artikel' ");
$this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
}
// nur wenn autoversand projekt
$autoversand_pruefung = '';
$automailrechnung = '';
$autodruckrechnungstufe1mail = '';
if(!empty($projektarr)){
$autoversand_pruefung = $projektarr['autoversand'];// $this->app->DB->Select("SELECT autoversand FROM projekt WHERE id='$projekt' LIMIT 1");
$automailrechnung = $projektarr['automailrechnung'];//$this->app->DB->Select("SELECT automailrechnung FROM projekt WHERE id='$projekt' LIMIT 1");
$autodruckrechnungstufe1mail = $projektarr['autodruckrechnungstufe1mail'];//$this->app->DB->Select("SELECT autodruckrechnungstufe1mail FROM projekt WHERE id='$projekt' LIMIT 1");
}
$druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
$this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Kommissionierverfahren: $kommissionierverfahren Projekt $projekt");
switch($kommissionierverfahren)
{
case 'rechnungsmail':
// rechnung per mail versenden????
if($automailrechnung && $rechnung > 0)
{
// rechnung per mail versenden
// sende
// $this->app->erp->Rechnungsmail($rechnung);
}
$this->app->DB->Insert(
sprintf(
"INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
(%d,now(),'%s','Autoversand ausgeführt')",
(int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
)
);
break;
default:
if($kommissionierverfahren==='lieferschein' && $lieferschein > 0)
{
//FALL 1 Lieferschein mit Lagerplatz
$sql = "SELECT id FROM kommissionierung k WHERE k.auftrag = '".$id."'";
$vorkommissionierung = $this->app->DB->Select($sql);
if(!$vorkommissionierung)
{
$kommissionierung = $this->app->erp->GetNextKommissionierung();
} else {
$kommissionierung = false;
}
if($kommissionierung){
$this->app->DB->Update(
sprintf(
"UPDATE kommissionierung SET lieferschein = %d, auftrag = %d, adresse = %d WHERE id = %d LIMIT 1",
$lieferschein,
$id,
$adresse,
$kommissionierung
)
);
}
$auslagernresult =
$this->app->erp->LieferscheinAuslagern(
$lieferschein,
true,
(int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $id)),
'lieferschein',
true,
false,
$nurRestmenge
);
if($kommissionierung){
$this->app->DB->Update(
sprintf(
"UPDATE kommissionierung SET ausgelagert = 1 WHERE id = %d LIMIT 1",
$kommissionierung
)
);
foreach ($auslagernresult['storageMovements'] as $storageMovement) {
$this->app->DB->Update(
sprintf(
"INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)",
$kommissionierung,
$storageMovement['artikel'],
$storageMovement['lager_platz'],
$storageMovement['menge']
)
);
}
// Kommissionierschein drucken?
if ($projektarr['autodruckkommissionierscheinstufe1']) {
$Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true));
$Brief->GetKommissionierung($kommissionierung);
$tmpfile = $Brief->displayTMP();
for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) {
$druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
$this->app->printer->Drucken($druckercode, $tmpfile);
}
unlink($tmpfile);
}
}
// Prozesse ohne Versandzentrum
$this->app->erp->BriefpapierHintergrundDisable($druckercode);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('LieferscheinPDFCustom')) {
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}
else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($lieferschein);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument(false, true);
unlink($tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('LieferscheinPDFCustom')) {
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}
else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($lieferschein);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument(false, true);
//$this->app->printer->Drucken($druckercode,$tmpfile);
$fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
$this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$lieferschein,$without_log=false);
$sprache = $this->app->DB->Select("SELECT sprache FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($sprache=='')
{
$sprache='deutsch';
}
$text = $this->app->erp->GetGeschaeftsBriefText('Lieferschein',$sprache,$projekt);
$betreff = $this->app->erp->GetGeschaeftsBriefBetreff('Lieferschein',$sprache,$projekt);
if($betreff=='')
{
$betreff='Mitgesendet bei Lieferung';
}
$this->app->DB->Update("UPDATE lieferschein SET status='versendet',versendet='1',schreibschutz='1' WHERE id='$lieferschein' LIMIT 1");
$this->app->DB->Insert("INSERT INTO dokumente_send
(id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,dateiid) VALUES ('','lieferschein',NOW(),'".$this->app->User->GetName()."',
'$adresse','$lieferschein','versand','$betreff','$text','$projekt','','$fileid_lieferschein')");
$this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein versendet (Auto-Versand)');
unlink($tmpfile);
// Druck Auftrag Anhang wenn aktiv
if(1)//if($this->app->erp->Projektdaten($projekt,"autodruckanhang")=="1")
{
// alle anhaenge drucken! wo auftrag datei anhang
$this->app->erp->GetDateiSubjektObjekt('anhang','Auftrag',$id);
// for($i=0;$i<(!empty($tmpanhang)?count($tmpanhang):0);$i++)
// $this->app->printer->Drucken($druckercode,$tmpanhang[$i]);
$tmpanhang ='';
}
$this->app->DB->Insert(
sprintf(
"INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
(%d,now(),'%s','Auftrag an Versandzentrum übergeben')",
(int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
)
);
}
//FALL 2 // logistikzentrum
// auftrag_position geliefert_menge und geliefert anpassen
$artikelarr = $this->app->DB->SelectArr(
sprintf(
"SELECT ap.id, ap.artikel,ap.menge
FROM auftrag_position AS ap
INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
WHERE ap.auftrag=%d AND ap.auftrag > 0",
(int)$id
)
);
$cartikelarr = $artikelarr?count($artikelarr):0;
for($i=0;$i<$cartikelarr; $i++) {
$auftragspositionsid = $artikelarr[$i]['id'];
$artikel = $artikelarr[$i]['artikel'];
$menge= $artikelarr[$i]['menge'];
// lager teile reservieren
$this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
AND parameter='$id' AND artikel='$artikel' ");
if($kommissionierverfahren==='zweistufig' && $lieferschein > 0)
{
$this->app->DB->Insert("INSERT INTO lager_reserviert (id,adresse,artikel,menge,grund,projekt,
firma,bearbeiter,datum,objekt,parameter)
VALUES('','$adresse','$artikel','$menge','Versand für Auftrag $belegnr','$projekt',
'".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-01-01','lieferschein','$lieferschein')");
}
if($lieferschein > 0) {
$this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
}
}
//ende
$this->app->DB->Insert(
sprintf(
"INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
(%d,now(),'%s','Autoversand ausgeführt')",
(int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
)
);
}
$autodruckrechnungstufe1 = 0;
$autodruckrechnungstufe1menge = 0;
$exportdruckrechnungstufe1 = 0;
$printOrderQuantity = 0;
if(!empty($projektarr))
{
$autodruckrechnungstufe1 = $projektarr['autodruckrechnungstufe1'];
$autodruckrechnungstufe1menge = $projektarr['autodruckrechnungstufe1menge'];
$exportdruckrechnungstufe1 = $projektarr['exportdruckrechnungstufe1'];
if($projektarr['auftragdrucken'] == '1') {
$printOrderQuantity = $projektarr['auftragdruckenmenge'] > 1 ? $projektarr['auftragdruckenmenge'] : 1;
}
}
// Check for override in adresse
$sql = "SELECT rechnung_anzahlpapier, rechnung_anzahlpapier_abweichend FROM adresse WHERE id =".$adresse;
$rechnung_anzahlpapier = $this->app->DB->SelectArr($sql);
if ($rechnung_anzahlpapier[0]['rechnung_anzahlpapier_abweichend']) {
$autodruckrechnungstufe1menge = $rechnung_anzahlpapier[0]['rechnung_anzahlpapier'];
}
if($exportdruckrechnungstufe1)
{
if(!empty($projektarr))
{
$exportdruckrechnungstufe1menge = $projektarr['exportdruckrechnungstufe1menge'];//$this->app->DB->Select("SELECT exportdruckrechnungstufe1menge FROM projekt WHERE id='$projekt' LIMIT 1");
}else{
$exportdruckrechnungstufe1menge = 0;
}
$exportland = $this->app->DB->Select("SELECT if(abweichendelieferadresse = 1 AND lieferland <> '',lieferland, land) FROM auftrag WHERE id = '$id' LIMIT 1");
$exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
}
if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
{
$this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1");
$druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
$this->app->erp->BriefpapierHintergrundDisable($druckercode);
if(class_exists('RechnungPDFCustom'))
{
$Brief = new RechnungPDFCustom($this->app,$projekt);
}else{
$Brief = new RechnungPDF($this->app,$projekt);
}
$Brief->GetRechnung($rechnung);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
if($autodruckrechnungstufe1=='1')
{
for($imenge=0;$imenge<$autodruckrechnungstufe1menge;$imenge++) {
$this->app->printer->Drucken($druckercode, $tmpfile);
}
}
if($exportdruckrechnungstufe1 == '1')
{
for($imenge=0;$imenge<$exportdruckrechnungstufe1menge;$imenge++) {
$this->app->printer->Drucken($druckercode, $tmpfile);
}
}
unlink($tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('RechnungPDFCustom'))
{
$Brief = new RechnungPDFCustom($this->app,$projekt);
}else{
$Brief = new RechnungPDF($this->app,$projekt);
}
$Brief->GetRechnung($rechnung);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
unlink($tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
}
// Rechnungsmail was here, but now at the end to prioritise processing and printing over mail
// auftrag abschliessen
$this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1");
$this->app->erp->PDFArchivieren('auftrag',$id);
// auftrag abschliessen und event senden
$this->app->erp->ProzessUnlock($fp);
// kundenfreigabe loeschen wenn das im projekt eingestellt ist
if(!empty($projektarr))
{
$checkok = $projektarr['kundenfreigabe_loeschen'];//$this->app->DB->Select("SELECT kundenfreigabe_loeschen FROM projekt WHERE id='$projekt' LIMIT 1");
}else{
$checkok = 0;
}
if($checkok==1){
$this->app->DB->Update("UPDATE adresse SET kundenfreigabe='0' WHERE id='$adresse' LIMIT 1");
}
if($this->app->erp->ModulVorhanden('produktion') && method_exists($this->app->erp, 'ProduktionEinzelnBerechnen'))
{
$produktionen = $this->app->DB->SelectArr("SELECT id FROM produktion WHERE auftragid = '$id'");
if($produktionen)
{
foreach($produktionen as $v)
{
$this->app->erp->ProduktionEinzelnBerechnen($v['id']);
}
}
}
//if($internmodus && $lieferschein) // 2018-10-09 BS ab jetzt immer diese Optionen auswerten - nicht nur wenn es intern ist
if($lieferschein)
{
$paketmarkedruckenprojekt = !empty($projektarr['paketmarkedrucken'])?$projektarr['paketmarkedrucken']:0;
if($paketmarkedrucken && $paketmarkedruckenprojekt && !$this->app->erp->PaketmarkeDrucken($lieferschein, 'lieferschein'))
{
//$this->app->DB->Update("UPDATE auftrag SET schreibschutz = 0, status = 'freigegeben' WHERE id = '$id' LIMIT 1");
$this->app->erp->AuftragProtokoll($id, 'Paketmarke drucken fehlgeschlagen');
if(!empty($fp))
{
$this->app->erp->ProzessUnlock($fp);
}
return $ret;
}
$lieferscheinedruckenprojekt = !empty($projektarr['lieferscheinedrucken'])?$projektarr['lieferscheinedrucken']:0;
if($lieferscheinedruckenprojekt)
{
$lieferscheinedruckenmenge = !empty($projektarr['lieferscheinedruckenmenge'])?$projektarr['lieferscheinedruckenmenge']:0;//$this->app->DB->Select("SELECT lieferscheinedruckenmenge FROM projekt WHERE id = '$projekt' LIMIT 1");
if($lieferscheinedruckenmenge > 0)
{
$druckercode = !empty($projektarr['druckerlogistikstufe1'])?$projektarr['druckerlogistikstufe1']:0;//$this->app->DB->Select("SELECT druckerlogistikstufe1 FROM projekt WHERE id='$projekt' LIMIT 1");
if($druckercode <=0){
$druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
}
$this->app->erp->BriefpapierHintergrundDisable($druckercode);
if(class_exists('LieferscheinPDFCustom'))
{
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($lieferschein);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
for($imenge=0;$imenge<$lieferscheinedruckenmenge;$imenge++) {
$this->app->printer->Drucken($druckercode, $tmpfile);
}
unlink($tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('LieferscheinPDFCustom'))
{
$Brief = new LieferscheinPDFCustom($this->app,$projekt);
}else{
$Brief = new LieferscheinPDF($this->app,$projekt);
}
$Brief->GetLieferschein($lieferschein);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
unlink($tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
}
}
}
// Druck Auftrag Anhang wenn aktiv
if($this->app->erp->Projektdaten($projekt,'druckanhang')=='1') {
$obj = $this->app->erp->LoadModul('versanderzeugen');
if(!empty($obj) && method_exists($obj,'autoPrintAttachment'))
{
$obj->autoPrintAttachment($druckercode,$id,$lieferschein,$rechnung);
}
}
if($printOrderQuantity > 0 && $druckercode) {
if(class_exists('AuftragPDFCustom'))
{
$Brief = new AuftragPDFCustom($this->app,$projekt);
}else{
$Brief = new AuftragPDF($this->app,$projekt);
}
$Brief->GetAuftrag($id);
$tmpfile = $Brief->displayTMP();
for($printOrderQuantity; $printOrderQuantity > 0; $printOrderQuantity--) {
$this->app->printer->Drucken($druckercode, $tmpfile);
}
unlink($tmpfile);
}
// Send the invoice as last step
if($autodruckrechnungstufe1mail && $rechnung > 0)
{
$this->app->erp->Rechnungsmail($rechnung);
}
$this->app->erp->RunHook('auftrag_versand_ende', 1, $id);
// wenn per URL aufgerufen
if($internmodus!='1')
{
if(!empty($fp))
{
$this->app->erp->ProzessUnlock($fp);
}
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
}
if(!empty($fp))
{
$this->app->erp->ProzessUnlock($fp);
}
return $ret;
}
//$this->app->erp->ProzessUnlock("auftrag_autoversand");
$this->app->erp->ProzessUnlock($fp);
if($posids)
{
$this->app->Location->execute('index.php?module=auftrag&action=positionen&id='.$id);
}
// wenn per URL aufgerufen
if($internmodus!='1')
{
// $this->AuftragList();
//header("Location: index.php?module=auftrag&action=search");
if($id > 0){
$this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $id);
}
$this->app->Location->execute('index.php?module=auftrag&action=versandzentrum');
}
}
function AuftragSelbstabholerNachricht()
{
// kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
}
function AuftragSelbstabholerAbgeholt()
{
// kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
}
function AuftragNachlieferungCheck()
{
//echo "pruefe ob eine Nachlieferung gemacht werden kann";
}
function AuftragNachlieferung()
{
// kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
}
public function AuftragVerfuegbar()
{
$frame = $this->app->Secure->GetGET('frame');
$id = $this->app->Secure->GetGET('id');
if($frame=='false')
{
// hier nur fenster größe anpassen
$this->app->YUI->IframeDialog(600,400);
} else {
// nach page inhalt des dialogs ausgeben
$table = new EasyTable($this->app);
$table->Query("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT TRIM(SUM(lp.menge))+0 FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) as lager,
(SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') as reserviert,
if(((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)>=0,'',
TRIM((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)+0
) as fehlend
FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$id' AND a.lagerartikel=1");
$table->DisplayNEW('PAGE','Fehlende','noAction');
$this->app->BuildNavigation=false;
}
}
public function AuftragAmpel($id,$parsetarget)
{
$status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
if($status=='abgeschlossen' || $status=='storniert')
{
$go = '';
$stop = '';
$reserviert = '';
$check = '';
} else {
$go = '';
$stop = '';
$reserviert = '';
$check = '';
}
// offene Auftraege
$table = new EasyTable($this->app);
$sql = "SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr!='',a.belegnr,'ohne Nummer') as auftrag, a.internet, CONCAT('',a.name,'') as name, a.land, p.abkuerzung as projekt, a.zahlungsweise as per, a.gesamtsumme as soll,";
$subsql = "'0' as ist,";
$sql .= $subsql. "if(a.check_ok,'','$check') as AC,
if(a.reserviert_ok,'$reserviert','') as AR,
if(a.lager_ok,'$go','$stop') as LA,
if(a.porto_ok,'$go','$stop') as PO,
if(a.ust_ok,'$go',CONCAT('','$stop','')) as ST,
if(a.vorkasse_ok,'$go','$stop') as ZE,
if(a.nachnahme_ok,'$go','$stop') as N,
if(a.autoversand,'$go','$stop') as A,
if(a.liefertermin_ok,'$go','$stop') as LT,
a.id
FROM auftrag a, projekt p WHERE a.inbearbeitung=0 AND p.id=a.projekt AND a.id=$id LIMIT 1";
$table->Query($sql);
$table->DisplayNew($parsetarget, "
");
}
public function AuftraguebersichtMenu()
{
$backurl = $this->app->Secure->GetGET('backurl');
$backurl = $this->app->erp->base64_url_decode($backurl);
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','Ü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','Versandübergabe');
if(strlen($backurl)>5){
$this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
}
else{
$this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
}
$this->app->erp->RunMenuHook('auftrag_list');
}
/**
* @param string $description
* @param bool $escaped
*
* @return int
*/
public function createCronjobCommission(string $description = ''): int
{
$nextCronjobCommissionId = 1 + (int)$this->app->DB->Select(
'SELECT MAX(`cronjobkommissionierung`) FROM `auftrag`'
);
/* $this->app->DB->Insert(
"INSERT INTO `cronjob_kommissionierung` (`id`, `bezeichnung`)
VALUES ({$nextCronjobCommissionId}, '{$description}') "
);
if($this->app->DB->GetInsertID() > 0) {
return $this->app->DB->GetInsertID();
}
$this->app->DB->Update(
"UPDATE `cronjob_kommissionierung`
SET `bezeichnung` = '{$description}'
WHERE `id` = {$nextCronjobCommissionId}"
);*/
return $nextCronjobCommissionId;
}
public function AuftragVersandzentrum()
{
$this->AuftraguebersichtMenu();
$targetMessage = 'AUTOVERSANDBERECHNEN';
$this->app->Tpl->Add('MESSAGE','
Aufträge an Versand übergeben mit automatischem Druck und Mailversand. Zum Versand
');
$autoshipmentEnabled = true;
$this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
$plusCronjobs = $this->app->DB->SelectRow(
"SELECT art, periode
FROM prozessstarter
WHERE (parameter = 'autoversand' OR parameter = 'autoversand_plus') AND aktiv = 1
ORDER BY art = 'periodisch', periode >= 30
LIMIT 1"
);
if(!empty($plusCronjobs) && $plusCronjobs['art'] === 'periodisch' && $plusCronjobs['periode'] < 30) {
$message = 'Autoversand Cronjob ist mit '.$plusCronjobs['periode'].' Minuten zu kurz eingestellt (mindestens 30).';
$this->app->Tpl->Add('AUTOVERSANDBERECHNEN', '
'.$message.'
');
}
// ZAHLUNGSMAIL
$zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
if($zahlungsmail!=''){
$meineauftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben'
AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'");
$cmeineauftraege = $meineauftraege?count($meineauftraege):0;
for($i=0;$i<$cmeineauftraege;$i++) {
$this->app->erp->AuftragNeuberechnen($meineauftraege[$i]['id']);
$this->app->erp->AuftragEinzelnBerechnen($meineauftraege[$i]['id']);
$this->app->erp->AuftragZahlungsmail($meineauftraege[$i]['id']);
}
}
// AUFTAEGE ABSCHLIESSEN!
$submit = $this->app->Secure->GetPOST('submit');
$auftraegemarkiert = $this->app->Secure->GetPOST('auswahlcronjob');
$entfernen = $this->app->Secure->GetPOST('entfernen');
$bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
if($entfernen && $auftraegemarkiert){
$cauftraegemarkiert = (!empty($auftraegemarkiert)?count($auftraegemarkiert):0);
for($i=0;$i<$cauftraegemarkiert;$i++) {
$this->app->DB->Update("UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = '".$auftraegemarkiert[$i]."' LIMIT 1");
}
}
if($this->app->Secure->GetPOST('ausfuehren')){
$drucker = $this->app->Secure->GetPOST('seldruckerversand');
$aktion = $this->app->Secure->GetPOST('auftrag_versandauswahl');
// $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
$auftraegemarkiert = $this->app->Secure->GetPOST('auswahl');
$bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
$selectedIds = [];
if(!empty($auftraegemarkiert)) {
foreach($auftraegemarkiert as $selectedId) {
$selectedId = (int)$selectedId;
if($selectedId > 0) {
$selectedIds[] = $selectedId;
}
}
}
if($drucker > 0) {
$this->app->erp->BriefpapierHintergrundDisable($drucker);
}
if(is_array($auftraegemarkiert)){
switch($aktion){
case 'versandstarten':
/*
* If one of the cronjobs is active, orders only get marked. Sending will be handled by the cronjob.
* If not, sending will be done here.
*/
$cronjobActive = $this->app->DB->Select(
"SELECT ps.id
FROM `prozessstarter` AS `ps`
WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
LIMIT 1"
);
$check = $cronjobActive;
if(!$check){
$check = $this->app->DB->Select(
"SELECT id
FROM auftrag AS a
WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='')
AND a.status='freigegeben' AND a.autoversand='1' AND a.cronjobkommissionierung > 0
AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1'
AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
LIMIT 1"
);
}
if(!empty($auftraegemarkiert)){
$datuma = null;
foreach ($auftraegemarkiert as $k => $v) {
$datuma[$k] = $this->app->DB->Select(
sprintf(
'SELECT datum FROM auftrag WHERE id = %d LIMIT 1',
(int)$v
)
);
}
//Sortieren nach Datum
array_multisort($datuma, SORT_ASC, $auftraegemarkiert);
// aufsteigend sortieren erst die alten IDs
//sort($auftraegemarkiert);
}
if($check){
/* Send all to cronjob */
$maxcronjobkommissionierung = $this->createCronjobCommission((string)$bezeichnung);
$cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
for ($i = 0; $i < $cauftraegemarkiert; $i++) {
$this->app->DB->Update(
sprintf(
'UPDATE `auftrag`
SET `cronjobkommissionierung` = %d
WHERE `id` = %d
LIMIT 1',
$maxcronjobkommissionierung, $auftraegemarkiert[$i]
)
);
}
}
else {
/* Process here now */
$cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
for ($i = 0; $i < $cauftraegemarkiert; $i++) {
$projekt = (int)$this->app->DB->Select(
sprintf(
'SELECT `projekt` FROM `auftrag` WHERE `id` = %d LIMIT 1',
$auftraegemarkiert[$i]
)
);
$auftraegenachprojekt[$projekt][] = $auftraegemarkiert[$i];
}
foreach ($auftraegenachprojekt as $projekt => $auftraege) {
if(!is_array($auftraege) || empty($auftraege)) {
continue;
}
$processed_orders_num = 0;
foreach ($auftraege as $auftrag) {
/* Process each order */
if($this->AuftragVersand($auftrag, true)) {
$processed_orders_num++;
}
}
$this->app->Tpl->Set('MESSAGE','
'.$processed_orders_num.' Aufträge wurden verarbeitet.
');
}
}
break;
case 'drucken':
if($drucker){
foreach ($selectedIds as $v) {
$projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('AuftragPDFCustom')){
$Brief = new AuftragPDFCustom($this->app, $projekt);
}else{
$Brief = new AuftragPDF($this->app, $projekt);
}
$Brief->GetAuftrag($v);
$_tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
unlink($_tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('AuftragPDFCustom')){
$Brief = new AuftragPDFCustom($this->app, $projekt);
}else{
$Brief = new AuftragPDF($this->app, $projekt);
}
$Brief->GetAuftrag($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->printer->Drucken($drucker, $tmpfile);
$this->app->erp->AuftragProtokoll($v, "Auftrag versendet");
$this->app->erp->AuftragProtokoll($v, "In Versandübergabe gedruckt");
unlink($tmpfile);
}
}
break;
case 'vorkommissionieren':
if (!empty($auftraegemarkiert)) {
foreach ($auftraegemarkiert as $k => $v) {
$sql = "
SELECT
k.id,
a.belegnr,
a.adresse
FROM
kommissionierung k
LEFT JOIN
lieferschein l
ON
l.id = k.lieferschein
LEFT JOIN
auftrag al
ON
al.id = l.auftrag
LEFT JOIN
auftrag a
ON
a.id = k.auftrag
WHERE
a.id = $v OR al.id = $v
LIMIT 1
";
$check = $this->app->DB->SelectRow($sql);
if (!empty($check)) {
$this->app->Tpl->addMessage('Error',"Bereits Kommissioniert: ".$check['belegnr']);
break;
}
$kid = $this->app->erp->GetNextKommissionierung();
$sql = "UPDATE kommissionierung SET auftrag = $v, adresse = (SELECT adresse FROM auftrag WHERE id = ".$v.") WHERE id = $kid";
$this->app->DB->Update($sql);
$auslagernresult =
$this->app->erp->LieferscheinAuslagern(
lieferschein: $v,
anzeige_lagerplaetze_in_lieferschein: true,
standardlager: (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $v)),
belegtyp: 'auftrag',
chargenmhdnachprojekt: true,
forceseriennummerngeliefertsetzen: false,
nurrestmenge: false,
simulieren: true
);
foreach ($auslagernresult['storageMovements'] as $storageMovement) {
$this->app->DB->Update(
sprintf(
"INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)",
$kid,
$storageMovement['artikel'],
$storageMovement['lager_platz'],
$storageMovement['menge']
)
);
}
$this->app->erp->AuftragProtokoll($v,'Auftrag vorkommissioniert, Kommissionierung '.$kid);
$projektarr = $this->app->DB->SelectRow("SELECT projekt.* FROM projekt INNER JOIN auftrag ON projekt.id = auftrag.projekt WHERE auftrag.id = '".$v."'");
// Kommissionierschein drucken?
if ($projektarr['autodruckkommissionierscheinstufe1']) {
$Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true));
$Brief->GetKommissionierung($kid);
$tmpfile = $Brief->displayTMP();
for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) {
$druckercode = $this->app->erp->Projektdaten($projektarr['id'],'druckerlogistikstufe1');
$this->app->printer->Drucken($druckercode, $tmpfile);
}
unlink($tmpfile);
}
}
}
break;
}
}
}
$check = null;
$cronjobActive = $this->app->DB->Select(
"SELECT ps.id
FROM `prozessstarter` AS `ps`
WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
LIMIT 1"
);
if(!$cronjobActive) {
$check = $this->app->DB->Select(
sprintf(
"SELECT id
FROM auftrag AS a
WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.autoversand='1' AND
a.cronjobkommissionierung > 0
AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1' AND a.porto_ok='1'
AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND
liefersperre_ok='1'
LIMIT 1"
)
);
}
$unversendet = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.cronjobkommissionierung = 0 AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' " . $this->app->erp->ProjektRechte('p.id', true, 'a.vertriebid'));
$warteschleife = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.cronjobkommissionierung > 0 " . $this->app->erp->ProjektRechte('p.id', true, "a.vertriebid"));
if($unversendet > 0) {
$unversendet ='('.$unversendet.')';
}
else {
$unversendet='';
}
if($warteschleife > 0) {
$warteschleife ='('.$warteschleife.')';
}
else {
$warteschleife='';
}
$this->app->Tpl->Set('TABTEXT1','Bereit '.$unversendet);
$this->app->Tpl->Set('TABTEXT2','Ausstehend '.$warteschleife);
if($warteschleife != '' && is_null($cronjobActive)) {
$this->app->Tpl->Add(
'MESSAGE',
'
Der Prozessstarter "Autoversand Manuell" ist deaktivert,
es befinden sich aber ausstehende Aufträge in der Warteschlange.
Bitte aktieren Sie den Prozessstarter
oder entfernen Sie die betreffenden Aufträge in der Warteschlange