app=$app; //parent::Briefpapier(); $this->doctype="lieferschein"; $this->doctypeOrig="Lieferschein"; parent::__construct($this->app,$projekt); } /** * @param array $articleList * * @return array */ protected function sortAricleExploded($articleList) { if(empty($articleList)) { return $articleList; } $ret = []; $articleIdToKey = []; $children = []; foreach($articleList as $aricleKey => $article) { $articleIdToKey[$article['id']] = $aricleKey; if(!empty($article['explodiert_parent_artikel'])) { $children[$article['explodiert_parent']][] = $aricleKey; } elseif(empty($ret)) { $ret[] = $article; unset($articleList[$aricleKey]); } } if(empty($ret)) { $ret[] = reset($articleList); $key = array_keys($articleList); $key = reset($key); unset($articleList[$key]); } while(!empty($articleList)) { $cRet = count($ret); for($i = $cRet -1; $i >= 0; $i--) { $last= $ret[$i]; if(!empty($children[$last['id']])) { $child = reset($children[$last['id']]); $childKey = array_keys($children[$last['id']]); $childKey = reset($childKey); $ret[] = $articleList[$child]; unset($articleList[$child]); unset($children[$last['id']][$childKey]); break; } } if($cRet === count($ret)) { $ret[] = reset($articleList); $key = array_keys($articleList); $key = reset($key); unset($articleList[$key]); } } return $ret; } function GetLieferschein($id,$info="",$extrafreitext="") { $this->doctypeid = $id; $this->parameter = $info; if(method_exists($this->app->erp,'LieferscheinSeriennummernberechnen')) { $this->app->erp->LieferscheinSeriennummernberechnen($id); } $briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden'); $briefpapier_vertrieb_ausblenden = $this->app->erp->Firmendaten('briefpapier_vertrieb_ausblenden'); $lvl = null; // das muss vom lieferschein sein!!!! $this->setRecipientLieferadresse($id,"lieferschein"); // OfferNo, customerId, OfferDate $data = $this->app->DB->SelectRow("SELECT kundennummer,adresse,sprache,auftragid,vertrieb,bearbeiter, DATE_FORMAT(datum,'%d.%m.%Y') as datum,ohne_artikeltext, DATE_FORMAT(datum,'%Y%m%d') as datum2, belegnr,land,freitext,projekt,bodyzusatz,ohne_briefpapier,ihrebestellnummer, email, telefon, abweichendebezeichnung as lieferscheinersatz FROM lieferschein WHERE id='$id'"); extract($data,EXTR_OVERWRITE); $kundennummer = $data['kundennummer']; $adresse = $data['adresse']; $sprache = $data['sprache']; $auftragid = $data['auftragid']; $vertrieb = $data['vertrieb']; $bearbeiter = $data['bearbeiter']; $datum = $data['datum']; $ohne_artikeltext = $data['ohne_artikeltext']; $datum2 = $data['datum2']; $belegnr = $data['belegnr']; $land = $data['land']; $freitext = $data['freitext']; $projekt = $data['projekt']; $bodyzusatz = $data['bodyzusatz']; $ohne_briefpapier = $data['ohne_briefpapier']; $ihrebestellnummer = $data['ihrebestellnummer']; $lieferscheinersatz = $data['lieferscheinersatz']; $email = $data['email']; $telefon = $data['telefon']; $this->projekt = $projekt; if(empty($kundennummer)) { $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$adresse' LIMIT 1"); } if(empty($sprache)) { $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); } $this->sprache = $sprache; $this->app->erp->BeschriftungSprache($sprache); $auftrag = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1"); $bearbeiter = $this->app->erp->ReadyForPDF($bearbeiter); $vertrieb = $this->app->erp->ReadyForPDF($vertrieb); $ihrebestellnummer = $this->app->erp->ReadyForPDF($ihrebestellnummer); $trackingnummer = $this->app->DB->Select("SELECT tracking FROM versand WHERE lieferschein='$id' LIMIT 1"); if($ohne_briefpapier=="1") { $this->logofile = ""; $this->briefpapier=""; $this->briefpapier2=""; } if($belegnr=="" || $belegnr=="0") $belegnr = "- ".$this->app->erp->Beschriftung("dokument_entwurf"); $this->zusatzfooter = " (LS$belegnr)"; $isKommsionierschein = $info==='kommissionierschein'; if($isKommsionierschein) { $this->doctypeOrig = $this->app->erp->Beschriftung("dokument_kommissionierschein") . " $belegnr"; } else { if($lieferscheinersatz){ $this->doctypeOrig = ($this->app->erp->Beschriftung("bezeichnunglieferscheinersatz") ? $this->app->erp->Beschriftung("bezeichnunglieferscheinersatz") : $this->app->erp->Beschriftung("dokument_lieferschein")) . $info . " $belegnr"; } else { $this->doctypeOrig = $this->app->erp->Beschriftung("dokument_lieferschein").$info." $belegnr"; } } $lieferschein = "-"; if($kundennummer=="") $kundennummer= "-"; if($bearbeiter==$vertrieb) $vertrieb=""; $projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt)); $bearbeiteremail = $this->app->DB->Select("SELECT b.email FROM lieferschein l LEFT JOIN adresse b ON b.id=l.bearbeiterid WHERE l.id='$id' LIMIT 1"); $bearbeitertelefon = $this->app->DB->Select("SELECT b.telefon FROM lieferschein l LEFT JOIN adresse b ON b.id=l.bearbeiterid WHERE l.id='$id' LIMIT 1"); /** @var \Xentral\Modules\Company\Service\DocumentCustomizationService $service */ $service = $this->app->Container->get('DocumentCustomizationService'); if($block = $service->findActiveBlock('corr', 'delivery_note', $projekt)) { $sCD = $service->parseBlockAsArray($this->getLanguageCodeFrom($this->sprache),'corr', 'delivery_note',[ 'LIEFERSCHEINNUMMER' => $belegnr, 'DATUM' => $datum, 'KUNDENNUMMER' => $kundennummer, 'BEARBEITER' => $bearbeiter, 'BEARBEITEREMAIL' => $bearbeiteremail, 'BEARBEITERTELEFON' => $bearbeitertelefon, 'VERTRIEB' => $vertrieb, 'PROJEKT' => $projektabkuerzung, 'IHREBESTELLNUMMER' => $ihrebestellnummer, 'AUFTRAGSNUMMER' => $auftrag, 'EMAIL' => $email, 'TELEFON' => $telefon, 'TRACKINGNUMMER' => $trackingnummer ], $projekt); if(!empty($sCD)) { switch($block['fontstyle']) { case 'f': $this->setBoldCorrDetails($sCD); break; case 'i': $this->setItalicCorrDetails($sCD); break; case 'fi': $this->setItalicBoldCorrDetails($sCD); break; default: $this->setCorrDetails($sCD, true); break; } } }else{ if($briefpapier_bearbeiter_ausblenden || $briefpapier_vertrieb_ausblenden){ $sCD = array($this->app->erp->Beschriftung("dokument_auftrag") => $auftrag, $this->app->erp->Beschriftung("bezeichnungkundennummer") => $kundennummer, $this->app->erp->Beschriftung("auftrag_bezeichnung_bestellnummer") => $ihrebestellnummer, $this->app->erp->Beschriftung("dokument_lieferdatum") => $datum); if(!$briefpapier_bearbeiter_ausblenden){ if($bearbeiter) $sCD[$this->app->erp->Beschriftung("auftrag_bezeichnung_bearbeiter")] = $bearbeiter; }elseif(!$briefpapier_vertrieb_ausblenden){ if($vertrieb) $sCD[$this->app->erp->Beschriftung("auftrag_bezeichnung_vertrieb")] = $vertrieb; } $this->setCorrDetails($sCD); }else{ $this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_auftrag") => $auftrag, $this->app->erp->Beschriftung("bezeichnungkundennummer") => $kundennummer, $this->app->erp->Beschriftung("auftrag_bezeichnung_bestellnummer") => $ihrebestellnummer, $this->app->erp->Beschriftung("dokument_lieferdatum") => $datum, $this->app->erp->Beschriftung("auftrag_bezeichnung_bearbeiter") => $bearbeiter, $this->app->erp->Beschriftung("auftrag_bezeichnung_vertrieb") => $vertrieb)); } } $body=$this->app->erp->Beschriftung("lieferschein_header"); if($bodyzusatz!="") $body=$body."\r\n".$bodyzusatz; $body = $this->app->erp->ParseUserVars("lieferschein",$id,$body); if ($versandart!="" && $trackingnummer!="" && $this->app->erp->Firmendaten("festetrackingnummer")=="1"){ $versandinfo = "$versandart: $trackingnummer\r\n"; }else{ $versandinfo ="";} if($this->app->erp->Firmendaten("footer_reihenfolge_lieferschein_aktivieren")=="1") { $footervorlage = $this->app->erp->Firmendaten("footer_reihenfolge_lieferschein"); if($footervorlage=='') { $footervorlage = "{FOOTERVERSANDINFO}{FOOTERFREITEXT}{FOOTEREXTRAFREITEXT}\r\n{FOOTERTEXTVORLAGELIEFERSCHEIN}"; } $footervorlage = str_replace('{FOOTERVERSANDINFO}',$versandinfo,$footervorlage); $footervorlage = str_replace('{FOOTERFREITEXT}',$freitext,$footervorlage); $footervorlage = str_replace('{FOOTEREXTRAFREITEXT}',$extrafreitext,$footervorlage); $footervorlage = str_replace('{FOOTERTEXTVORLAGELIEFERSCHEIN}',$this->app->erp->Beschriftung("lieferschein_footer"),$footervorlage); $footervorlage = $this->app->erp->ParseUserVars("lieferschein",$id,$footervorlage); $footer = $footervorlage; } else { $footer = $versandinfo."$freitext\r\n$extrafreitext\r\n".$this->app->erp->ParseUserVars("lieferschein",$id,$this->app->erp->Beschriftung("lieferschein_footer")); } $this->setTextDetails( array( 'body' => $body, 'footer'=> $footer ) ); $orderpicking_sort = $this->app->erp->Projektdaten($this->projekt, 'orderpicking_sort'); if($isKommsionierschein && in_array($orderpicking_sort, ['storagelocationrow','storagelocationrowpartlist'])) { $artikel = $this->app->DB->SelectArr( sprintf("SELECT lp.*, storage.rownumber FROM lieferschein_position AS lp LEFT JOIN objekt_lager_platz AS olp ON lp.id = olp.parameter AND olp.objekt = 'lieferschein' LEFT JOIN lager_platz AS storage ON olp.lager_platz = storage.id WHERE lp.lieferschein=%d GROUP BY lp.id ORDER BY IFNULL(storage.rownumber, 0), lp.sort", $id ) ); if($orderpicking_sort === 'storagelocationrow' && !empty($artikel)) { $artikel = $this->sortAricleExploded($artikel); } } else{ $artikel = $this->app->DB->SelectArr( sprintf( 'SELECT lp.* FROM lieferschein_position AS lp WHERE lp.lieferschein=%d ORDER By lp.sort', $id ) ); $this->app->erp->RunHook('lieferscheinpdf_getlieferschein', 2, $id, $artikel); } $belege_subpositionenstuecklisten = $this->app->erp->Firmendaten('belege_subpositionenstuecklisten'); $belege_stuecklisteneinrueckenmm = $this->app->erp->Firmendaten('belege_stuecklisteneinrueckenmm'); //$waehrung = $this->app->DB->Select("SELECT waehrung FROM lieferschein_position WHERE lieferschein='$id' LIMIT 1"); $ausblenden = []; $kommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='".$this->projekt."'"); $lagerplatzlieferscheinausblenden = $this->app->DB->Select("SELECT lagerplatzlieferscheinausblenden FROM projekt WHERE id='".$this->projekt."'"); foreach($artikel as $key=>$value) { $snummer = ''; $seriennummernliste=""; $value['herstellernummer'] = $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); $value['hersteller'] = $this->app->DB->Select("SELECT hersteller FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); if($value['explodiert_parent_artikel'] > 0) { if($belege_subpositionenstuecklisten || $belege_stuecklisteneinrueckenmm) { $value['bezeichnung'] = ltrim(ltrim($value['bezeichnung'],'*')); } if(isset($lvl[$value['explodiert_parent']])) { $value['lvl'] = $lvl[$value['explodiert_parent']] + 1; }else{ $value['lvl'] = 1; } $lvl[$value['id']] = $value['lvl']; $check_ausblenden = $this->app->DB->Select("SELECT keineeinzelartikelanzeigen FROM artikel WHERE id='".$value['explodiert_parent_artikel']."' LIMIT 1"); if($info==='kommissionierschein') { $check_ausblenden=0; } if(!$check_ausblenden && in_array($value['explodiert_parent'], $ausblenden)) { $check_ausblenden = true; } if($check_ausblenden) { $ausblenden[] = $value['id']; } } else { $check_ausblenden=0; $lvl[$value['id']] = 0; } if(!$this->app->erp->Export($land)) { $value['zolltarifnummer']=""; $value['herkunftsland']=""; } if($ohne_artikeltext=="1") $value['beschreibung']=""; $value['menge'] = (float)$value['menge']; // nur wenn kommissionierverfahren lieferscheinlager lieferscheinlagerscan if($lagerplatzlieferscheinausblenden=='1' || ($kommissionierverfahren !=='lieferscheinlager' && $kommissionierverfahren !=='lieferscheinlagerscan' && $info!=='kommissionierschein')){ $value['lagertext'] = ''; } if($value['ausblenden_im_pdf'] && $info !=='kommissionierschein') $check_ausblenden=1; if($check_ausblenden!=1) { $this->addItem(array( 'belegposition'=>$value['id'], 'amount'=>$value['menge'],'lvl'=>$value['lvl'], 'itemno'=>$value['nummer'], 'pos_id'=>$value['id'], 'artikel'=>$value['artikel'], 'desc'=>ltrim($value['beschreibung']).(strpos($value['beschreibung'], str_replace(' ', '', $value['lagertext'])) !== false?'':($value['beschreibung']!=""?"\r\n":'').$value['lagertext']), 'unit'=>$value['einheit'], 'hersteller'=>$value['hersteller'], 'artikelnummerkunde'=>$value['artikelnummerkunde'], 'lieferdatum'=>$value['lieferdatum'], 'lieferdatumkw'=>$value['lieferdatumkw'], 'zolltarifnummer'=>$value['zolltarifnummer'], 'herkunftsland'=>$value['herkunftsland'], 'herstellernummer'=>trim($value['herstellernummer']), 'freifeld1'=>$value['freifeld1'], 'freifeld2'=>$value['freifeld2'], 'freifeld3'=>$value['freifeld3'], 'freifeld4'=>$value['freifeld4'], 'freifeld5'=>$value['freifeld5'], 'freifeld6'=>$value['freifeld6'], 'freifeld7'=>$value['freifeld7'], 'freifeld8'=>$value['freifeld8'], 'freifeld9'=>$value['freifeld9'], 'freifeld10'=>$value['freifeld10'], 'freifeld11'=>$value['freifeld11'], 'freifeld12'=>$value['freifeld12'], 'freifeld13'=>$value['freifeld13'], 'freifeld14'=>$value['freifeld14'], 'freifeld15'=>$value['freifeld15'], 'freifeld16'=>$value['freifeld16'], 'freifeld17'=>$value['freifeld17'], 'freifeld18'=>$value['freifeld18'], 'freifeld19'=>$value['freifeld19'], 'freifeld20'=>$value['freifeld20'], 'freifeld21'=>$value['freifeld21'], 'freifeld22'=>$value['freifeld22'], 'freifeld23'=>$value['freifeld23'], 'freifeld24'=>$value['freifeld24'], 'freifeld25'=>$value['freifeld25'], 'freifeld26'=>$value['freifeld26'], 'freifeld27'=>$value['freifeld27'], 'freifeld28'=>$value['freifeld28'], 'freifeld29'=>$value['freifeld29'], 'freifeld30'=>$value['freifeld30'], 'freifeld31'=>$value['freifeld31'], 'freifeld32'=>$value['freifeld32'], 'freifeld33'=>$value['freifeld33'], 'freifeld34'=>$value['freifeld34'], 'freifeld35'=>$value['freifeld35'], 'freifeld36'=>$value['freifeld36'], 'freifeld37'=>$value['freifeld37'], 'freifeld38'=>$value['freifeld38'], 'freifeld39'=>$value['freifeld39'], 'freifeld40'=>$value['freifeld40'], "name"=>$value['bezeichnung'])); } } /* Dateiname */ //$tmp_name = str_replace(' ','',trim($this->recipient['enterprise'])); //$tmp_name = str_replace('.','',$tmp_name); $this->filename = $datum2."_LS".$belegnr.".pdf"; $this->setBarcode($belegnr); } }