app = $app; if ($id === null || $id === 0) return; $this->id = $id; $row = $this->app->DB->SelectRow("SELECT * FROM versandarten WHERE id=$this->id"); $this->type = $row['type']; $this->projectId = $row['projekt']; $this->labelPrinterId = $row['paketmarke_drucker']; $this->documentPrinterId = $row['export_drucker']; $this->shippingMail = $row['versandmail']; $this->businessLetterTemplateId = $row['geschaeftsbrief_vorlage']; $this->settings = json_decode($row['einstellungen_json']); } public function isEtikettenDrucker(): bool { return false; } public function GetAdressdaten($id, $sid) { $auftragId = $lieferscheinId = $rechnungId = $versandId = 0; if($sid==='rechnung') $rechnungId = $id; if($sid==='lieferschein') { $lieferscheinId = $id; $auftragId = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id=$lieferscheinId LIMIT 1"); $rechnungId = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein = '$lieferscheinId' LIMIT 1"); if($rechnungId <= 0) $rechnungId = $this->app->DB->Select("SELECT rechnungid FROM lieferschein WHERE id='$lieferscheinId' LIMIT 1"); } if($sid==='versand') { $versandId = $id; $lieferscheinId = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$versandId' LIMIT 1"); $rechnungId = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$versandId' LIMIT 1"); $sid = 'lieferschein'; } if ($auftragId <= 0 && $rechnungId > 0) $auftragId = $this->app->DB->Select("SELECT auftragid FROM rechnung WHERE id=$rechnungId LIMIT 1"); if($sid==='rechnung' || $sid==='lieferschein' || $sid==='adresse') { $docArr = $this->app->DB->SelectRow("SELECT * FROM `$sid` WHERE id = $id LIMIT 1"); $addressfields = ['name', 'adresszusatz', 'abteilung', 'ansprechpartner', 'unterabteilung', 'ort', 'plz', 'strasse', 'land', 'telefon', 'email']; $ret = array_filter($docArr, fn($key)=>in_array($key, $addressfields), ARRAY_FILTER_USE_KEY); $name2 = trim($docArr['adresszusatz']); $abt = 0; if($name2==='') { $name2 = trim($docArr['abteilung']); $abt=1; } $name3 = trim($docArr['ansprechpartner']); if($name3==='' && $abt!==1){ $name3 = trim($docArr['abteilung']); } //unterabteilung versuchen einzublenden if($name2==='') { $name2 = trim($docArr['unterabteilung']); } else if ($name3==='') { $name3 = trim($docArr['unterabteilung']); } if($name3!=='' && $name2==='') { $name2=$name3; $name3=''; } $ret['name2'] = $name2; $ret['name3'] = $name3; $strasse = trim($docArr['strasse']); $ret['streetwithnumber'] = $strasse; $hausnummer = trim($this->app->erp->ExtractStreetnumber($strasse)); $strasse = trim(str_replace($hausnummer,'',$strasse)); $strasse = str_replace('.','',$strasse); if($strasse=='') { $strasse = trim($hausnummer); $hausnummer = ''; } $ret['strasse'] = $strasse; $ret['hausnummer'] = $hausnummer; } // wenn rechnung im spiel entweder durch versand oder direkt rechnung if($rechnungId >0) { $invoice_data = $this->app->DB->SelectRow("SELECT zahlungsweise, soll, belegnr FROM rechnung WHERE id='$rechnungId' LIMIT 1"); $ret['zahlungsweise'] = $invoice_data['zahlungsweise']; $ret['betrag'] = $invoice_data['soll']; $ret['invoice_number'] = $invoice_data['belegnr']; if($invoice_data['zahlungsweise']==='nachnahme'){ $ret['nachnahme'] = true; } } $sql = "SELECT lp.bezeichnung, lp.menge, coalesce(nullif(lp.zolltarifnummer, ''), nullif(rp.zolltarifnummer, ''), nullif(a.zolltarifnummer, '')) zolltarifnummer, coalesce(nullif(lp.herkunftsland, ''), nullif(rp.herkunftsland, ''), nullif(a.herkunftsland, '')) herkunftsland, coalesce(nullif(lp.zolleinzelwert, '0'), rp.preis *(1-rp.rabatt/100)) zolleinzelwert, coalesce(nullif(lp.zolleinzelgewicht, 0), a.gewicht) zolleinzelgewicht, lp.zollwaehrung FROM lieferschein_position lp JOIN artikel a on lp.artikel = a.id LEFT JOIN auftrag_position ap on lp.auftrag_position_id = ap.id LEFT JOIN rechnung_position rp on ap.id = rp.auftrag_position_id WHERE lp.lieferschein = $lieferscheinId ORDER BY lp.sort"; $ret['positions'] = $this->app->DB->SelectArr($sql); if($sid==="lieferschein"){ $standardkg = $this->app->erp->VersandartMindestgewicht($lieferscheinId); } else{ $standardkg = $this->app->erp->VersandartMindestgewicht(); } $ret['weight'] = $standardkg; return $ret; } /** * Returns an array of additional field definitions to be stored for this module: * [ * 'field_name' => [ * 'typ' => text(default)|textarea|checkbox|select * 'default' => default value * 'optionen' => just for selects [key=>value] * 'size' => size attribute for text fields * 'placeholder' => placeholder attribute for text fields * ] * ] * * @return array */ public function AdditionalSettings(): array { return []; } /** * Renders all additional settings as fields into $target * @param string $target template placeholder for rendered output * @param array $form data for form values (from database or form submit) * @return void */ public function RenderAdditionalSettings(string $target, array $form): void { $fields = $this->AdditionalSettings(); if($this->app->Secure->GetPOST('speichern')) { $json = $this->app->DB->Select("SELECT einstellungen_json FROM versandarten WHERE id = '".$this->id."' LIMIT 1"); $modul = $this->app->DB->Select("SELECT modul FROM versandarten WHERE id = '".$this->id."' LIMIT 1"); if(!empty($json)) { $json = @json_decode($json, true); }else{ $json = array(); foreach($fields as $name => $val) { if(isset($val['default'])) { $json[$name] = $val['default']; } } } if(empty($json)) { $json = null; } foreach($fields as $name => $val) { if($modul === $this->app->Secure->GetPOST('modul_name')) { $json[$name] = $this->app->Secure->GetPOST($name, '','', 1); } if(isset($val['replace'])) { switch($val['replace']) { case 'lieferantennummer': $json[$name] = $this->app->erp->ReplaceLieferantennummer(1,$json[$name],1); break; } } } $json_str = $this->app->DB->real_escape_string(json_encode($json)); $this->app->DB->Update("UPDATE versandarten SET einstellungen_json = '$json_str' WHERE id = '".$this->id."' LIMIT 1"); } $html = ''; foreach($fields as $name => $val) // set missing default values { if(isset($val['default']) && !isset($form[$name])) { $form[$name] = $val['default']; } } foreach($fields as $name => $val) { if(isset($val['heading'])) $html .= '