OpenXE/www/lib/versandarten/dhlversenden.php
2021-05-21 08:49:41 +02:00

2424 lines
105 KiB
PHP

<?php
/**
*
*/
use Xentral\Components\Logger\Logger;
require_once(dirname(__DIR__).'/class.versanddienstleister.php');
class Versandart_dhlversenden extends Versanddienstleister{
const API_URL = 'https://cig.dhl.de/cig-wsdls/com/dpdhl/wsdl/geschaeftskundenversand-api/1.0/geschaeftskundenversand-api-1.0.wsdl';
const API_URL2 = 'https://cig.dhl.de/cig-wsdls/com/dpdhl/wsdl/geschaeftskundenversand-api/1.1/geschaeftskundenversand-api-1.1.wsdl';
const API_URL22 = 'https://cig.dhl.de/cig-wsdls/com/dpdhl/wsdl/geschaeftskundenversand-api/2.2/geschaeftskundenversand-api-2.2.wsdl';
const SANDBOX_URL = 'https://cig.dhl.de/services/sandbox/soap';
const PRODUCTION_URL = 'https://cig.dhl.de/services/production/soap';
private $einstellungen;
private $info;
private $client;
public $paketmarke_drucker;
public $export_drucker;
public $errors;
public $name;
/** @var Logger */
private $logger;
/**
* Constructor for Shipment SDK
*
* @param type $api_einstellungen
* @param type $customer_info
*/
function __construct($app, $id) {
$land = '';
$this->id = $id;
$this->app = $app;
$einstellungenArr = $this->app->DB->SelectRow("SELECT einstellungen_json,paketmarke_drucker,export_drucker FROM versandarten WHERE id = '$id' LIMIT 1");
$einstellungen_json = $einstellungenArr['einstellungen_json'];
$this->paketmarke_drucker = $einstellungenArr['paketmarke_drucker'];
$this->export_drucker = $einstellungenArr['export_drucker'];
$this->name="DHL Versenden";
$this->logger = $app->Container->get('Logger');
if($einstellungen_json)
{
$this->einstellungen = json_decode($einstellungen_json,true);
}else{
$this->einstellungen = array();
}
$this->einstellungen = $this->einstellungen;
if(isset($this->einstellungen['intraship_partnerid']) && $this->einstellungen['intraship_partnerid'] )$this->einstellungen['partnerid'] = $this->einstellungen['intraship_partnerid'];
if(!isset($this->einstellungen['partnerid']))
{
$this->einstellungen['partnerid'] = '01';
}
if(!isset($this->einstellungen['partnerid']) || $this->einstellungen['partnerid']=="")
{
$this->einstellungen['partnerid'] = '01';
}
if($this->einstellungen['intraship_countryISOCode']=="") $this->einstellungen['intraship_countryISOCode'] = "DE";
$this->errors = array();
$data = $this->einstellungen;
$this->info = array(
'company_name' => $data['intraship_company_name'],
'street_name' => $data['intraship_street_name'],
'street_number' => $data['intraship_street_number'],
'zip' => $data['intraship_zip'],
'country' => $data['intraship_country'],
'countryISOCode' => $data['intraship_countryISOCode'],
'city' => $data['intraship_city'],
'email' => trim($data['intraship_email']),
'phone' => $data['intraship_phone'],
'internet' => $data['intraship_internet'],
'contact_person' => $data['intraship_contact_person'],
'export_reason' => $data['intraship_exportgrund']
);
if($land!=$this->einstellungen['intraship_countryISOCode'])
{
if(!empty($data['intraship_partnerid_welt']) && !empty($data['intraship_partnerid_welt']))$einstellungen['partnerid'] = $data['intraship_partnerid_welt'];
}
if(isset($data['intraship_retourenaccount']) && $data['intraship_retourenaccount'])$einstellungen['intraship_retourenaccount'] = $data['intraship_retourenaccount'];
/*
$this->einstellungen = $api_einstellungen;
$this->info = $customer_info;
if($this->einstellungen['partnerid']=="") $this->einstellungen['partnerid'] = '01';
$this->errors = array();
*/
}
public function GetBezeichnung()
{
return 'DHL Instrahship';
}
function EinstellungenStruktur()
{
return array(
'user' => array('typ'=>'text','bezeichnung'=>'Benutzer:','info'=>'geschaeftskunden_api (Versenden/Intraship-Benutzername)'),
'signature' => array('typ'=>'text','bezeichnung'=>'Signature:','info'=>'Dhl_ep_test1 (Versenden/IntrashipPasswort)'),
'ekp' => array('typ'=>'text','bezeichnung'=>'EKP','info'=>'5000000000 (gültige DHL Kundennummer)'),
'partnerid' => array('typ'=>'text','bezeichnung'=>'Partner ID Inland:','info'=>'meist 01, manchmal 02, 03 etc. bzw. wenn vier- und drittletzte Stelle anders hier 4-stellig angeben z.B. 8601'),
'partnerid_welt' => array('typ'=>'text','bezeichnung'=>'Partner ID Welt:','info'=>'Versand Welt (vierstellig meist 5301)'),
'partnerid_connect' => array('typ'=>'text','bezeichnung'=>'Partner ID EU oder Connect:','info'=>'Versand von DE nach EU oder von AT in ausgewählte Länder Europas (Komplette EKP mit Endung 5401 in DE oder 8701 in AT)'),
'euistwelt'=>array('typ'=>'checkbox','bezeichnung'=>'Bei EU immer Welt verwenden:'),
'premiumversand'=>array('typ'=>'checkbox','bezeichnung'=>'Premiumversand verwenden:'),
'intraship_retourenaccount' => array('typ'=>'text','bezeichnung'=>'Retouren Account:','info'=>'14 Stellige DHL-Retoure Abrechnungsnummer'),
'intraship_retourenlabel'=>array('typ'=>'checkbox','bezeichnung'=>'Vorauswahl Retourenlabel:','info'=>'Druckt Retourenlabel mit'),
'intraship_company_name' => array('typ'=>'text','bezeichnung'=>'Versender Firma:'),
'intraship_street_name' => array('typ'=>'text','bezeichnung'=>'Versender Strasse:'),
'intraship_street_number' => array('typ'=>'text','bezeichnung'=>'Versender Strasse Nr.:'),
//'intraship_name' => array('typ'=>'text','bezeichnung'=>'Versender Ansprechpartner:'),
'intraship_zip' => array('typ'=>'text','bezeichnung'=>'Versender PLZ:'),
'intraship_city' => array('typ'=>'text','bezeichnung'=>'Versender Stadt:'),
'intraship_country' => array('typ'=>'text','bezeichnung'=>'Versender Land:','info'=>'germany'),
'intraship_countryISOCode' => array('typ'=>'text','bezeichnung'=>'Versender ISO Code:','info'=>'DE'),
'intraship_email' => array('typ'=>'text','bezeichnung'=>'Versender E-Mail:'),
'intraship_phone' => array('typ'=>'text','bezeichnung'=>'Versender Telefon:'),
'intraship_internet' => array('typ'=>'text','bezeichnung'=>'Versender Web:'),
'intraship_contact_person' => array('typ'=>'text','bezeichnung'=>'Versender Ansprechpartner:'),
'intraship_account_owner' => array('typ'=>'text','bezeichnung'=>'Nachnahme Bank Inhaber:'),
'intraship_account_number' => array('typ'=>'text','bezeichnung'=>'Nachnahme Kontonummer:'),
'intraship_code' => array('typ'=>'text','bezeichnung'=>'Nachnahme BLZ:'),
'intraship_bank_name' => array('typ'=>'text','bezeichnung'=>'Nachnahme Bank Name:'),
'intraship_iban' => array('typ'=>'text','bezeichnung'=>'Nachnahme IBAN:'),
'intraship_bic' => array('typ'=>'text','bezeichnung'=>'Nachnahme BIC:'),
'nachnahmeextra' => array('typ'=>'checkbox','bezeichnung'=>'Nachnahme Gebühr aktivieren:'),
'nachnahmegebuehr' => array('typ'=>'text','bezeichnung'=>'Nachnahme Gebühr:','info'=>'z.B. 2,00 wird auf Rechnungsbetrag addiert, da DHL dies als extra Gebühr für sich behält'),
'intraship_exportgrund' => array('typ'=>'text','bezeichnung'=>'Export bzw. Sonstiges:','info'=>'z.B. Computer Zubehör'),
'intraship_WeightInKG' => array('typ'=>'text','bezeichnung'=>'Standard Gewicht:','info'=>'in KG'),
'runden' => array('typ'=>'checkbox','bezeichnung'=>'Gewicht runden auf Ganzzahl:'),
'intraship_LengthInCM' => array('typ'=>'text','bezeichnung'=>'Standard Länge:','info'=>'in cm'),
'intraship_WidthInCM' => array('typ'=>'text','bezeichnung'=>'Standard Breite:','info'=>'in cm'),
'intraship_HeightInCM' => array('typ'=>'text','bezeichnung'=>'Standard Höhe:','info'=>'in cm'),
'intraship_PackageType' => array('typ'=>'text','bezeichnung'=>'Standard Paket:','info'=>'z.B. PL'),
'intraship_Product' => array('typ'=>'text','bezeichnung'=>'Standard Produkt:','info'=>'z.B. in DE: V01PAK oder AT: V86PARCEL'),
'intraship_vorausverfuegung'=>array('typ'=>'select','bezeichnung'=>'Vorausverf&uuml;gung: ', 'optionen' => array('-' => 'keine Vorausverf&uuml;gung', 'IMMEDIATE' => 'Sofortige R&uuml;cksendung an den Absender', 'AFTER_DEADLINE' => 'R&uuml;cksenden an den Absender nach Ablauf der Frist', 'ABANDONMENT' => 'Preisgabe des Pakets durch den Absender (entgeltfrei)')),
'sperrgut' => array('typ'=>'checkbox','bezeichnung'=>'Sperrgut:'),
'keineversicherung' => array('typ'=>'checkbox','bezeichnung'=>'Extra Versicherung ausschalten:','info'=>'Option muss von Hand im Paketmarkendialog gesetzt werden.'),
'leitcodierung' => array('typ'=>'checkbox','bezeichnung'=>'Leitcodierung aktivieren:'),
'use_shipping_article_from_order_on_export' => ['typ' => 'checkbox', 'bezeichnung' => 'Bei Export Porto aus Auftrag senden:'],
'autotracking'=>array('typ'=>'checkbox','bezeichnung'=>'Tracking übernehmen:'),
'log'=>array('typ'=>'checkbox','bezeichnung'=>'Logging')
);
}
public function VersandartMindestgewicht()
{
if(!isset($this->einstellungen['intraship_WeightInKG']))return 2;
if($this->einstellungen['intraship_WeightInKG'] === '')return 2;
return str_replace(',','.',$this->einstellungen['intraship_WeightInKG']);
}
public function PaketmarkeDrucken($id, $sid)
{
$adressdaten = $this->GetAdressdaten($id, $sid);
$ret = $this->Paketmarke($sid, $id, '', false, $adressdaten);
if($sid === 'lieferschein'){
$deliverNoteRow = $this->app->DB->SelectRow(
sprintf('SELECT adresse, projekt, versandart FROM lieferschein WHERE id = %d LIMIT 1',
(int)$id
)
);
$adresse = $deliverNoteRow['adresse'];
$projekt = $deliverNoteRow['projekt'];
$versandart = $deliverNoteRow['versandart'];
$adressvalidation = 2;
if($ret) {
$adressvalidation = 1;
}
$tracking = '';
if(isset($adressdaten['tracking'])) {
$tracking = $adressdaten['tracking'];
}
if(!isset($adressdaten['versandid'])) {
$adressdaten['versandid'] = $this->app->DB->Select("SELECT id FROM versand WHERE abgeschlossen = 0 AND tracking = '' AND lieferschein = '$id' LIMIT 1");
}
if(method_exists($this,'deleteTrackingFromUserdata')) {
$this->deleteTrackingFromUserdata($tracking);
}
if(!isset($adressdaten['versandid']))
{
$this->app->DB->Insert("INSERT INTO versand (versandunternehmen, tracking,
versendet_am,abgeschlossen,lieferschein,freigegeben,firma,adresse,projekt,paketmarkegedruckt,adressvalidation)
VALUES ('$versandart','$tracking',NOW(),1,'$id',1,'1','$adresse','$projekt',1,'$adressvalidation') ");
$adressdaten['versandid'] = $this->app->DB->GetInsertID();
}elseif($tracking){
$this->app->DB->Update("UPDATE versand SET freigegeben = 1, abgeschlossen = 1, tracking =1, paketmarkegedruckt = 1, tracking= '$tracking',adressvalidation = '$adressvalidation', versendet_am = now() WHERE id = '".$adressdaten['versandid']."' LIMIT 1");
$this->app->DB->Update("UPDATE versand SET versandunternehmen = versandart WHERE id = '".$adressdaten['versandid']."' AND versandunternehmen = '' LIMIT 1");
$this->app->DB->Update("UPDATE versand SET versandunternehmen = '$versandart' WHERE id = '".$adressdaten['versandid']."' AND versandunternehmen = '' LIMIT 1");
}
$auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$id' LIMIT 1");
if($auftragid) {
$this->app->DB->Update("UPDATE auftrag SET schreibschutz = 1, status = 'abgeschlossen' WHERE id = '$auftragid' AND status = 'freigegeben' LIMIT 1");
}
if($adressvalidation == 1)
{
$this->app->erp->LieferscheinProtokoll($id, 'Paketmarke automatisch gedruckt');
if($adressdaten['versandid']) {
return $adressdaten['versandid'];
}
}elseif($adressvalidation == 2)
{
$this->app->erp->LieferscheinProtokoll($id, 'automatisches Paketmarke Drucken fehlgeschlagen');
}
}
return $ret;
}
public function GetName3($adressdaten = null)
{
if($adressdaten === null){
return $this->app->Secure->GetPOST('name3');
}
return !empty($adressdaten['name3'])?$adressdaten['name3']:'';
}
public function Paketmarke($doctyp, $docid, $target = '', $error = false, &$adressdaten = null)
{
$zusatz = '';
$typ = '';
$id = $docid;
$sid = $doctyp;
if($adressdaten === null) {
$drucken = $this->app->Secure->GetPOST('drucken');
$anders = $this->app->Secure->GetPOST('anders');
$land = $this->app->Secure->GetPOST('land');
$tracking_again = $this->app->Secure->GetGET('tracking_again');
$versandmit = $this->app->Secure->GetPOST('versandmit');
$trackingsubmit = $this->app->Secure->GetPOST('trackingsubmit');
$versandmitbutton = $this->app->Secure->GetPOST('versandmitbutton');
$tracking = $this->app->Secure->GetPOST('tracking');
$trackingsubmitcancel = $this->app->Secure->GetPOST('trackingsubmitcancel');
//$retourenlabel = $this->app->Secure->GetPOST('retourenlabel');
$kg = $this->app->Secure->GetPOST('kg1');
$name = $this->app->Secure->GetPOST('name');
$name2 = $this->app->Secure->GetPOST('name2');
$strasse = $this->app->Secure->GetPOST('strasse');
$hausnummer = $this->app->Secure->GetPOST('hausnummer');
$plz = $this->app->Secure->GetPOST('plz');
$ort = $this->app->Secure->GetPOST('ort');
$email = $this->app->Secure->GetPOST('email');
$phone = $this->app->Secure->GetPOST('telefon');
//$nummeraufbeleg = $this->app->Secure->GetPOST('nummeraufbeleg');
$sid= $this->app->Secure->GetGET('sid');
}else{
$drucken = 1;
$anders = '';
$land = $adressdaten['land'];
$tracking_again = '';
$versandmit = '';
$trackingsubmit = '';
$versandmitbutton = '';
$tracking = '';
$trackingsubmitcancel = '';
//$retourenlabel = '';
$kg = $adressdaten['standardkg'];
$name = $adressdaten['name'];
$name2 = $adressdaten['name2'];
$strasse = $adressdaten['strasse'];
$hausnummer = $adressdaten['hausnummer'];
$plz = $adressdaten['plz'];
$ort = $adressdaten['ort'];
$email = $adressdaten['email'];
$phone = $adressdaten['phone'];
//$nummeraufbeleg = 1;//$this->app->Secure->GetPOST('nummeraufbeleg');
}
$name3 = $this->GetName3($adressdaten);
if($adressdaten === null) {
if ($zusatz === 'express')
$this->app->Tpl->Set('ZUSATZ', 'Express');
if ($zusatz === 'export'){
$this->app->Tpl->Set('ZUSATZ', 'Export');
}
if ($this->einstellungen['keineversicherung'] == '1') {
$this->app->Tpl->Set('VERSICHERT', '');
$this->app->Tpl->Set('EXTRAVERSICHERT', '');
}
if ($this->einstellungen['leitcodierung'] == '1') {
$this->app->Tpl->Set('LEITCODIERUNG', ' checked="checked" ');
}
if ($this->einstellungen['intraship_retourenlabel'] == '1'){
$this->app->Tpl->Add('RETOURENLABEL', ' checked="checked" ');
}
$id = $this->app->Secure->GetGET('id');
$betrag = $this->app->Secure->GetPOST('betrag');
$nachnahme = $this->app->Secure->GetPOST('nachnahme');
$_altersfreigabe = $this->app->Secure->GetPOST('altersfreigabe');
$versichert = $this->app->Secure->GetPOST('versichert');
$leitcodierung = $this->app->Secure->GetPOST('leitcodierung');
$wunschtermin = $this->app->Secure->GetPOST('wunschtermin');
$wunschzeitraum = $this->app->Secure->GetPOST('wunschzeitraum');
$wunschlieferdatum = $this->app->Secure->GetPOST('wunschlieferdatum');
$versicherungssumme = $this->app->Secure->GetPOST('versicherungssumme');
if($leitcodierung!='1') {
$this->einstellungen['leitcodierung']=false;
}
}else{
$betrag = isset($adressdaten['betrag'])?$adressdaten['betrag']:'';
$nachnahme = isset($adressdaten['nachnahme'])?$adressdaten['nachnahme']:'';
$_altersfreigabe = isset($adressdaten['altersfreigabe'])?$adressdaten['altersfreigabe']:'';
$versichert = isset($adressdaten['altersfreigabe'])?$adressdaten['altersfreigabe']:'';
$wunschtermin = isset($adressdaten['wunschtermin'])?$adressdaten['wunschtermin']:'';
$wunschzeitraum = isset($adressdaten['wunschzeitraum'])?$adressdaten['wunschzeitraum']:'';
$wunschlieferdatum = isset($adressdaten['wunschlieferdatum'])?$adressdaten['wunschlieferdatum']:'';
$versicherungssumme = isset($adressdaten['versicherungssumme'])?$adressdaten['versicherungssumme']:'';
}
if($typ==='DHL' || $typ==='dhl'){
$versand = 'dhl';
}
else if($typ==='Intraship'){
$versand = 'intraship';
}
else {
$versand = $typ;
}
if($sid === 'versand')
{
if($adressdaten === null) {
$this->app->Tpl->Set("TRACKINGMANUELL",'&nbsp;<input type="button" value="Trackingnummer direkt eingeben" onclick="window.location.href=\'index.php?module=versanderzeugen&action=frankieren&id='.$id.'&tracking_again=1\'" name="anders">&nbsp;');
}
//$projekt = $this->app->DB->Select("SELECT projekt FROM versand WHERE id='$id' LIMIT 1");
}else{
//$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
}
/*$intraship_weightinkg = $this->app->DB->Select("SELECT intraship_weightinkg FROM projekt WHERE id='$projekt' LIMIT 1");
if($trackingsubmit == "" && $trackingsubmitcancel=="" && $drucken == "" && $tracking_again=="")
{
}*/
if($target) {
$this->app->YUI->DatePicker('wunschlieferdatum');
}
if(!$_POST && $target)
{
if($adressdaten)
{
$module = $doctyp;
}else{
$module = $this->app->Secure->GetGET('module');
}
//TODO Workarrond fuer lieferschein
if($module==='lieferschein')
{
$lieferschein = $id;
}
else {
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
if($lieferschein <=0) {
$lieferschein=$id;
}
}
//$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
//$lieferscheinnummer = "LS".$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
//pruefe ob es auftragsnummer gibt dann nehmen diese
$auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($auftragid > 0)
{
$versandbeschreibung = (String)$this->app->DB->Select("SELECT ap.beschreibung FROM auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id AND ap.auftrag = '$auftragid' AND art.porto = 1 LIMIT 1");
if($versandbeschreibung !== '')
{
if(preg_match_all('/([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2,4})\s([0-9]{1,2})\:([0-9]{2})/i', $versandbeschreibung,$matches, PREG_OFFSET_CAPTURE))
{
$_wunschdatum = $this->app->String->Convert((strlen($matches[3][0][0]) == 2?'20':'').$matches[3][0][0]."-".(strlen($matches[2][0][0]) == 1?'0':'').$matches[2][0][0]."-".(strlen($matches[1][0][0]) == 1?'0':'').$matches[1][0][0],'%1-%2-%3','%3.%2.%1');
$_wunschzeit = (String)(strlen($matches[4][0][0] == 1?'0':'').$matches[4][0][0]);
$this->app->Tpl->Set('WUNSCHTERMIN', ' checked="checked" ');
$this->app->Tpl->Set('WUNSCHLIEFERDATUM', $_wunschdatum);
switch($_wunschzeit)
{
case '10':
$this->app->Tpl->Set('WUNSCH10001200', ' checked="checked" ');
break;
case '12':
$this->app->Tpl->Set('WUNSCH12001400', ' checked="checked" ');
break;
case '14':
$this->app->Tpl->Set('WUNSCH14001600', ' checked="checked" ');
break;
case '16':
$this->app->Tpl->Set('WUNSCH16001800', ' checked="checked" ');
break;
case '18':
$this->app->Tpl->Set('WUNSCH18002000', ' checked="checked" ');
break;
case '19':
$this->app->Tpl->Set('WUNSCH19002100', ' checked="checked" ');
break;
}
}
}
}
}elseif($target && $_POST)
{
switch(substr($wunschzeitraum,0,2))
{
case '10':
$this->app->Tpl->Set('WUNSCH10001200', ' checked="checked" ');
break;
case '12':
$this->app->Tpl->Set('WUNSCH12001400', ' checked="checked" ');
break;
case '14':
$this->app->Tpl->Set('WUNSCH14001600', ' checked="checked" ');
break;
case '16':
$this->app->Tpl->Set('WUNSCH16001800', ' checked="checked" ');
break;
case '18':
$this->app->Tpl->Set('WUNSCH18002000', ' checked="checked" ');
break;
case '19':
$this->app->Tpl->Set('WUNSCH19002100', ' checked="checked" ');
break;
}
if($wunschtermin)$this->app->Tpl->Set('WUNSCHTERMIN', ' checked="checked" ');
$this->app->Tpl->Set('WUNSCHLIEFERDATUM', $wunschlieferdatum);
}
if($trackingsubmit!='' || $trackingsubmitcancel!='')
{
if($sid==='versand')
{
// falche tracingnummer bei DHL da wir in der Funktion PaketmarkeDHLEmbedded sind
if((strlen(trim($tracking)) < 12 || strlen(trim($tracking)) > 21) && $trackingsubmitcancel=="" && ($typ=="DHL" || $typ=="Intraship") && $this->einstellungen['intraship_countryISOCode']=="DE")
{
header("Location: index.php?module=versanderzeugen&action=frankieren&id=$id&land=$land&tracking_again=1");
exit;
}
if(method_exists($this,'deleteTrackingFromUserdata')) {
$this->deleteTrackingFromUserdata($tracking);
}
$this->app->DB->Update("UPDATE versand SET versandunternehmen='$versand', tracking='$tracking',
versendet_am=NOW(),versendet_am_zeitstempel=NOW(), abgeschlossen='1',logdatei=NOW() WHERE id='$id' LIMIT 1");
$this->app->erp->VersandAbschluss($id);
$this->app->erp->RunHook('versanderzeugen_frankieren_hook1', 1, $id);
//versand mail an kunden
$this->app->erp->Versandmail($id);
$weiterespaket=$this->app->Secure->GetPOST('weiterespaket');
$lieferscheinkopie=$this->app->Secure->GetPOST('lieferscheinkopie');
if($weiterespaket=='1')
{
if($lieferscheinkopie=='1') {
$lieferscheinkopie=0;
} else {
$lieferscheinkopie=1;
}
//$this->app->erp->LogFile("Lieferscheinkopie $lieferscheinkopie");
$all = $this->app->DB->SelectArr("SELECT * FROM versand WHERE id='$id' LIMIT 1");
$this->app->DB->Insert("INSERT INTO versand (id,adresse,rechnung,lieferschein,versandart,projekt,bearbeiter,versender,versandunternehmen,firma,
keinetrackingmail,gelesen,paketmarkegedruckt,papieregedruckt,weitererlieferschein)
VALUES ('','{$all[0]['adresse']}','{$all[0]['rechnung']}','{$all[0]['lieferschein']}','{$all[0]['versandart']}','{$all[0]['projekt']}',
'{$all[0]['bearbeiter']}','{$all[0]['versender']}','{$all[0]['versandunternehmen']}',
'{$all[0]['firma']}','{$all[0]['keinetrackingmail']}','{$all[0]['gelesen']}',0,$lieferscheinkopie,1)");
$newid = $this->app->DB->GetInsertID();
header("Location: index.php?module=versanderzeugen&action=einzel&id=$newid");
} else {
header("Location: index.php?module=versanderzeugen&action=offene");
}
exit;
}
//direkt aus dem Lieferschein
if($id > 0)
{
$adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1");
$kg = $this->app->Secure->GetPOST('kg1');
if($kg=='') {
$kg = $this->app->erp->VersandartMindestgewicht($id);
}
if(method_exists($this,'deleteTrackingFromUserdata')) {
$this->deleteTrackingFromUserdata($tracking);
}
$this->app->DB->Insert("INSERT INTO versand (id,versandunternehmen, tracking,
versendet_am,abgeschlossen,lieferschein,
freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete)
VALUES ('','$versand','$tracking',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') ");
$versandId = $this->app->DB->GetInsertID();
$auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$id'");
$shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1");
$auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1");
if($shop > 0 && $auftragabgleich=="1")
{
//$this->LogFile("Tracking gescannt");
$this->app->remote->RemoteUpdateAuftrag($shop,$auftrag);
}
$this->app->erp->sendPaymentStatus($versandId);
$this->app->Location->execute('index.php?module=lieferschein&action=paketmarke&id='.$id);
}
}
if($versandmitbutton!='')
{
if($sid==='versand')
{
$this->app->DB->Update("UPDATE versand SET versandunternehmen='$versandmit',
versendet_am=NOW(),versendet_am_zeitstempel=NOW(),abgeschlossen='1' WHERE id='$id' LIMIT 1");
$this->app->erp->VersandAbschluss($id);
//versand mail an kunden
$this->app->erp->Versandmail($id);
header("Location: index.php?module=versanderzeugen&action=offene");
exit;
}
}
if($sid==='versand')
{
// wenn paketmarke bereits gedruckt nur tracking scannen
$paketmarkegedruckt = $this->app->DB->Select("SELECT paketmarkegedruckt FROM versand WHERE id='$id' LIMIT 1");
if($paketmarkegedruckt>=1)
$tracking_again=1;
}
if($anders!='')
{
}
/*if(!($drucken!='' || $tracking_again=='1') || $error)
{
if($sid==='versand')
{
$tid = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
$rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1");
$sid = 'lieferschein';
} else {
$tid = $id;
}
}*/
else if(($drucken!='' || $tracking_again=='1') && !$error)
{
if($tracking_again!='1')
{
$kg = (float)str_replace(',','.',$kg);
$abholdatum = $this->app->Secure->GetPOST("abholdatum");
$retourenlabel= $this->app->Secure->GetPOST("retourenlabel");
if($retourenlabel)
{
$this->app->Tpl->Set('RETOURENLABEL', ' checked="checked" ');
$zusaetzlich['retourenlabel'] = 1;
}
if($abholdatum){
$this->app->Tpl->Set('ABHOLDATUM',$abholdatum);
$zusaetzlich['abholdatum'] = date('Y-m-d', strtotime($abholdatum));
$this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']);
}
$kg = (float)(str_replace(',','.',$kg));
$kg = round($kg,2);
$name = mb_substr($this->app->erp->ReadyForPDF($name), 0, 30, 'UTF-8');
$name2 = $this->app->erp->ReadyForPDF($name2);
$name3 = $this->app->erp->ReadyForPDF($name3);
$strasse = $this->app->erp->ReadyForPDF($strasse);
$hausnummer = $this->app->erp->ReadyForPDF($hausnummer);
$plz = $this->app->erp->ReadyForPDF($plz);
$ort = $this->app->erp->ReadyForPDF(html_entity_decode($ort));
$land = $this->app->erp->ReadyForPDF($land);
if(is_numeric($name) && strtolower($strasse)==='packstation' && $name2!='')
{
$tmp_name = $name;
$name = $name2;
$name2 =$tmp_name;
}
//SetKonfigurationValue($name,$value)
if($adressdaten === null){
$module = $this->app->Secure->GetGET('module');
}else{
$module = $doctyp;
}
//TODO Workarrond fuer lieferschein
if($module==='lieferschein')
{
$lieferschein = $id;
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
$versandId = 0;
}
elseif($module === 'retoure') {
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM retoure WHERE id='$id' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT projekt FROM retoure WHERE id='$id' LIMIT 1");
$versandId = 0;
}
else {
$versandId = $id;
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
if($lieferschein <=0) {
$lieferschein=$id;
}
$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
}
$lieferscheinnummer = 'LS'.$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
//pruefe ob es auftragsnummer gibt dann nehmen diese
$auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($auftragid > 0)
{
$nummeraufbeleg = 'AB'.$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1");
} else {
$nummeraufbeleg = $lieferscheinnummer;
}
$rechnung = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$lieferschein' LIMIT 1");
$invoiceCurrency = null;
$rechnung_data = $this->app->DB->SelectArr("SELECT * FROM rechnung WHERE id='$rechnung' LIMIT 1");
if($rechnung_data) {
$rechnungsnummer = $rechnung_data[0]['belegnr'];
$invoiceCurrency = $rechnung_data[0]['waehrung'];
}
// check if proformarechnung exists
$proformarechnungsnummer = $this->app->DB->Select("SELECT belegnr FROM proformarechnung WHERE lieferschein='$lieferschein' AND belegnr!='' LIMIT 1");
if($proformarechnungsnummer!="") {
$nummeraufbeleg = $proformarechnungsnummer;
}
$teillieferungvon = $this->app->DB->Select("SELECT teillieferungvon FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
$teillieferungvon2 = $this->app->DB->Select("SELECT id FROM lieferschein WHERE teillieferungvon='$lieferschein' LIMIT 1");
$rechnungssumme = $rechnung_data[0]['soll']; //XXX
$shippingFee = 0;
if($rechnung && $teillieferungvon <=0 && $teillieferungvon2 <=0){
$invoiceData = $this->app->DB->SelectRow(
"SELECT `zahlungsweise`, `soll`, `waehrung` FROM `rechnung` WHERE `id` = '{$rechnung}' LIMIT 1"
);
$zahlungsweise = $invoiceData['zahlungsweise'];
$soll = $invoiceData['soll'];
$invoiceCurrency = $invoiceData['waehrung'];
$this->app->Tpl->Set('BETRAG',$soll);
if($zahlungsweise==='nachnahme'){
$this->app->Tpl->Set('NACHNAHME', 'checked');
}
if($soll >= 500 && $soll <= 2500 && $this->einstellungen['keineversicherung']!='1'){
$this->app->Tpl->Set('VERSICHERT', 'checked');
}
if($soll > 2500 && $this->einstellungen['keineversicherung']!='1'){
$this->app->Tpl->Set('EXTRAVERSICHERT', 'checked');
}
$artikel_positionen = $this->app->DB->SelectArr(
"SELECT rp.*,if(lp.zolltarifnummer!='',lp.zolltarifnummer,rp.zolltarifnummer) as zolltarifnummer
FROM rechnung_position rp
LEFT JOIN lieferschein_position lp ON lp.auftrag_position_id=rp.auftrag_position_id AND lp.auftrag_position_id > 0
WHERE rp.rechnung='$rechnung'");
if($versicherungssumme==0) {
$versicherungssumme = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id = '$rechnung' LIMIT 1");
}
} else {
// wenn mindestens ein zollwert definiert ist dann nur diese nehmen
$checkzoll = $this->app->DB->Select("SELECT lp.id FROM lieferschein_position lp WHERE lp.lieferschein='$lieferschein' AND lp.zolleinzelwert>0 LIMIT 1");
if($checkzoll > 0)
{
$artikel_positionen = $this->app->DB->SelectArr("SELECT lp.menge, lp.bezeichnung,if(lp.zolleinzelwert>0,lp.zolleinzelwert,(ap.preis-(ap.preis/100*ap.rabatt))) as preis, lp.zolltarifnummer,
if(lp.zollwaehrung!='',lp.zollwaehrung,ap.waehrung) as waehrung,lp.artikel, lp.zolltarifnummer FROM lieferschein_position lp LEFT JOIN auftrag_position ap ON ap.id=lp.auftrag_position_id
LEFT JOIN artikel a ON a.id=lp.artikel WHERE lp.lieferschein='$lieferschein' AND ap.explodiert!=1 AND a.lagerartikel=1");
$rechnungssumme = $this->app->DB->Select("SELECT SUM(lp.menge*if(lp.zolleinzelwert>0,lp.zolleinzelwert,(ap.preis-(ap.preis/100*ap.rabatt))))
FROM lieferschein_position lp LEFT JOIN auftrag_position ap ON ap.id=lp.auftrag_position_id LEFT JOIN artikel a ON a.id=ap.artikel WHERE lp.lieferschein='$lieferschein' AND ap.explodiert!=1 AND a.porto!=1 ");
if($this->app->erp->Export($land) && $this->einstellungen['use_shipping_article_from_order_on_export'] == 1) {
$shippingFee = $this->app->DB->Select(
"SELECT SUM(ap.menge * IF(ap.zolleinzelwert>0, ap.zolleinzelwert, (ap.preis - (ap.preis / 100 * ap.rabatt))))
FROM `lieferschein` AS `l`
INNER JOIN `auftrag_position` AS `ap` ON ap.auftrag=l.auftragid
INNER JOIN `artikel` AS `a` ON a.id=ap.artikel
WHERE l.id = '{$lieferschein}' AND ap.explodiert != 1 AND a.porto = 1 "
);
}
else{
$shippingFee = $this->app->DB->Select("SELECT SUM(lp.menge*if(lp.zolleinzelwert>0,lp.zolleinzelwert,(ap.preis-(ap.preis/100*ap.rabatt))))
FROM lieferschein_position lp LEFT JOIN auftrag_position ap ON ap.id=lp.auftrag_position_id LEFT JOIN artikel a ON a.id=ap.artikel WHERE lp.lieferschein='$lieferschein' AND ap.explodiert!=1 AND a.porto=1 ");
}
} else {
$artikel_positionen = $this->app->DB->SelectArr("SELECT lp.menge, lp.bezeichnung,(ap.preis-(ap.preis/100*ap.rabatt)) as preis, lp.zolltarifnummer,
if(lp.zollwaehrung!='',lp.zollwaehrung,ap.waehrung) as waehrung,lp.artikel, lp.zolltarifnummer FROM lieferschein_position lp LEFT JOIN auftrag_position ap ON ap.id=lp.auftrag_position_id
LEFT JOIN artikel a ON a.id=lp.artikel WHERE lp.lieferschein='$lieferschein' AND a.lagerartikel=1 ");
$rechnungssumme = $this->app->DB->Select("SELECT SUM(lp.menge*(ap.preis-(ap.preis/100*ap.rabatt)))
FROM lieferschein_position lp LEFT JOIN auftrag_position ap ON ap.id=lp.auftrag_position_id LEFT JOIN artikel a ON a.id=ap.artikel WHERE lp.lieferschein='$lieferschein' AND a.porto!=1 ");
if($this->app->erp->Export($land) && $this->einstellungen['use_shipping_article_from_order_on_export'] == 1) {
$shippingFee = $this->app->DB->Select(
"SELECT SUM(ap.menge * (ap.preis-ap.preis / 100 * ap.rabatt))
FROM `lieferschein` AS `l`
INNER JOIN `auftrag_position` AS `ap` ON ap.auftrag=l.auftragid
INNER JOIN `artikel` AS `a` ON a.id=ap.artikel
WHERE l.id = '{$lieferschein}' AND ap.explodiert != 1 AND a.porto = 1 "
);
}
else{
$shippingFee = $this->app->DB->Select("SELECT SUM(lp.menge*(ap.preis-(ap.preis/100*ap.rabatt)))
FROM lieferschein_position lp LEFT JOIN auftrag_position ap ON ap.id=lp.auftrag_position_id LEFT JOIN artikel a ON a.id=ap.artikel WHERE lp.lieferschein='$lieferschein' AND a.porto=1 ");
}
}
if($versicherungssumme==0) $versicherungssumme = $rechnungssumme;
}
$gesamtgewichtzoll = $this->app->DB->Select("SELECT SUM(a.gewicht*lp.menge) FROM lieferschein_position lp LEFT JOIN artikel a ON a.id=lp.artikel WHERE lp.lieferschein='$lieferschein' AND a.lagerartikel=1");
$gesamtgewichtzoll = $gesamtgewichtzoll / $this->app->erp->GewichtzuKgFaktor();
if( ($kg>0 && $gesamtgewichtzoll > 0) && ($gesamtgewichtzoll > $kg))
{
$gewichtfaktor = $kg/$gesamtgewichtzoll;
} else $gewichtfaktor=1;
$altersfreigabe = 0;
$cartikel_positionen = !empty($artikel_positionen)?count($artikel_positionen):0;
for($i=0;$i<$cartikel_positionen;$i++)
{
$artikelaltersfreigabe = (int)$this->app->DB->Select("SELECT altersfreigabe FROM artikel WHERE id = '".$artikel_positionen[$i]['artikel']."' LIMIT 1");
if($artikelaltersfreigabe > $altersfreigabe)$altersfreigabe = $artikelaltersfreigabe;
//$lagerartikel = $this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id='".$artikel_positionen[$i]['artikel']."' LIMIT 1");
//if($lagerartikel=="1")
{
if($artikel_positionen[$i]['waehrung'] == ''){
if(!empty($invoiceCurrency)){
$artikel_positionen[$i]['waehrung'] = $invoiceCurrency;
}else{
$artikel_positionen[$i]['waehrung'] = 'EUR';
}
}
$gewicht = $this->app->DB->Select("SELECT gewicht FROM artikel WHERE id='".$artikel_positionen[$i]['artikel']."' LIMIT 1");
//$porto = $this->app->DB->Select("SELECT porto FROM artikel WHERE id='".$artikel_positionen[$i]['artikel']."' LIMIT 1");
$lagerartikel = $this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id='".$artikel_positionen[$i]['artikel']."' LIMIT 1");
$zolltarifnummer = ($artikel_positionen[$i]['zolltarifnummer']!="" && $artikel_positionen[$i]['zolltarifnummer']!="0"?$artikel_positionen[$i]['zolltarifnummer']:$this->app->DB->Select("SELECT zolltarifnummer FROM artikel WHERE id='".$artikel_positionen[$i]['artikel']."' LIMIT 1"));
$herkunftsland = $this->app->DB->Select("SELECT herkunftsland FROM artikel WHERE id='".$artikel_positionen[$i]['artikel']."' LIMIT 1");
if(strlen($herkunftsland) > 2) {
$herkunftsland = $this->app->erp->FindISOCountry($herkunftsland);
}
if(!$herkunftsland || strlen($herkunftsland) > 2) {
$herkunftsland = 'DE';
}
if($gewicht > 0) {
$gewicht = $artikel_positionen[$i]['menge']*$gewicht / $this->app->erp->GewichtzuKgFaktor();
}
else {
$gewicht = 0.1*$artikel_positionen[$i]['menge'];
}
//if($gewicht > 0) $gewicht = $artikel_positionen[$i]['menge']*$gewicht;
//else $gewicht = 0.1*$artikel_positionen[$i]['menge'];
if($lagerartikel!='1') {
$gewicht=0;
}
if( $gewicht > 0)
{
$artikel[] = array( 'description'=>mb_substr($artikel_positionen[$i]['bezeichnung'], 0, 40, 'UTF-8'),
'countrycode'=>$herkunftsland,
'commodity_code'=>$zolltarifnummer,
'amount'=>$artikel_positionen[$i]['menge'],
'netweightinkg'=>$gewicht*$gewichtfaktor,
'grossweightinkg'=>$gewicht*$gewichtfaktor,
'value'=>$artikel_positionen[$i]['preis'],
'currency'=>$artikel_positionen[$i]['waehrung']);
}
}
}
$data = $this->einstellungen;
if($land!=$this->einstellungen['intraship_countryISOCode'])
{
if(!empty($data['partnerid_welt']) && !empty($data['partnerid_welt'])) {
$this->einstellungen['partnerid'] = $data['partnerid_welt'];
}
}
if(isset($data['intraship_retourenaccount']) && $data['intraship_retourenaccount']) {
$einstellungen['intraship_retourenaccount'] = $data['intraship_retourenaccount'];
}
// your company info
/*$info = array(
'company_name' => $data['intraship_company_name'],
'street_name' => $data['intraship_street_name'],
'street_number' => $data['intraship_street_number'],
'zip' => $data['intraship_zip'],
'country' => $data['intraship_country'],
'city' => $data['intraship_city'],
'email' => trim($data['intraship_email']),
'phone' => $data['intraship_phone'],
'internet' => $data['intraship_internet'],
'contact_person' => $data['intraship_contact_person'],
'export_reason' => $data['intraship_exportgrund']
);*/
// receiver details
if (! (float) $rechnungssumme && !empty($artikel_positionen)) {
$fullAmount = 0;
foreach ($artikel_positionen as $position) {
if (is_array($position) && array_key_exists('preis', $position)) {
$fullAmount += (float) $position['preis'] * (float) $position['menge'];
}
}
$rechnungssumme = $fullAmount;
}
$rechnungssumme = max($rechnungssumme, 1);
$customer_details = array(
'name1' => $name,
'name2' => $name2,
'c/o' => $name3,
'name3' => $name3,
'street_name' => $strasse,
'street_number' => $hausnummer,
// 'country' => 'germany',
'country_code' => $land,
'zip' => $plz,
'city' => $ort,
'email' => trim($email),
'ordernumber' => $nummeraufbeleg,
'invoicenumber' => $rechnungsnummer,
'proformanumber' => $proformarechnungsnummer,
'weight' => $kg,
'amount' => str_replace(",",".",$rechnungssumme),
'shippingFee' => str_replace(",",".",$shippingFee),
'currency' => !empty($artikel_positionen[0]['waehrung']) ? $artikel_positionen[0]['waehrung'] : 'EUR'
);
if(!empty($phone)){
$customer_details['phone'] = $phone;
}
if(!is_null($zusaetzlich) && isset($zusaetzlich['abholdatum'])) {
$customer_details['abholdatum'] = $zusaetzlich['abholdatum'];
}
if(!is_null($zusaetzlich) && isset($zusaetzlich['retourenlabel'])) {
$customer_details['intraship_retourenlabel'] = $zusaetzlich['retourenlabel'];
}
if($altersfreigabe > 0 && $_altersfreigabe) {
$customer_details['altersfreigabe'] = $altersfreigabe;
}
if($versichert && $versicherungssumme)
{
$customer_details['versichert'] = $versichert;
$customer_details['versicherungssumme'] = $versicherungssumme;
}
if($wunschtermin)$customer_details['wunschtermin'] = $wunschtermin;
if($wunschzeitraum)$customer_details['wunschzeitraum'] = $wunschzeitraum;
if($wunschlieferdatum)
{
if(strpos($wunschlieferdatum,'.') !== false)
{
$customer_details['wunschlieferdatum'] = $this->app->String->Convert($wunschlieferdatum,'%1.%2.%3','%3-%2-%1');
}else{
$customer_details['wunschlieferdatum'] = $wunschlieferdatum;
}
}
//$dhl = new DHLBusinessShipment($einstellungen, $info);
$shipment_details['WeightInKG'] = $data['intraship_WeightInKG'];
$shipment_details['LengthInCM'] = $data['intraship_LengthInCM'];
$shipment_details['WidthInCM'] = $data['intraship_WidthInCM'];
$shipment_details['HeightInCM'] = $data['intraship_HeightInCM'];
$shipment_details['PackageType'] = $data['intraship_PackageType'];
if($data['intraship_note']=='') {
$data['intraship_note'] = $rechnungsnummer;
}
if($nachnahme && $betrag > 0)
{
$bank_details = array(
'account_owner' => $data['intraship_account_owner'],
'account_number' => $data['intraship_account_number'],
'bank_code' => $data['intraship_bank_code'],
'bank_name' => $data['intraship_bank_name'],
'note' => $data['intraship_note'],
'iban' => $data['intraship_iban'],
'bic' => $data['intraship_bic']
);
//if($this->einstellungen['nachnahmeextra']=="1") $betrag = $betrag + str_replace(',','.',$this->einstellungen['nachnahmegebuehr']);
$cod_details = array(
'amount'=>str_replace(',','.',$betrag),
'currency'=> !empty($artikel_positionen[0]['waehrung']) ? $artikel_positionen[0]['waehrung'] : 'EUR'
);
}
if($land==$this->einstellungen['intraship_countryISOCode'])
{
if($nachnahme && $betrag > 0)
{
$response = $this->createNationalShipment($customer_details,$shipment_details,$bank_details,$cod_details);
} else {
//$customer_details['ordernumber']="";
$response = $this->createNationalShipment($customer_details,$shipment_details);
}
} else {
$customer_details['EU'] = $this->app->erp->IstEU($land)?1:0;
$response = $this->createWeltShipment($customer_details,$shipment_details,$bank_details,$cod_details,$artikel);
if($response)
{
// Zoll Papiere
//$dhl = new DHLBusinessShipment($einstellungen, $info);
$response_export = $this->GetExportDocDD($response['shipment_number']);
}else{
$dump = $this->app->erp->VarAsString($this->errors);
$this->app->erp->Protokoll("Fehler DHL Versenden API beim Erstellen Label fuer Versand $id LS $lieferschein",$dump);
}
}
$data['intraship_drucker'] = $this->paketmarke_drucker;
$data['druckerlogistikstufe2'] = $this->export_drucker;
if($this->app->erp->GetStandardPaketmarkendrucker()>0){
$data['intraship_drucker'] = $this->app->erp->GetStandardPaketmarkendrucker();
}
if($this->app->erp->GetInstrashipExport($projekt)>0){
$data['druckerlogistikstufe2'] = $this->app->erp->GetInstrashipExport($projekt);
}
if($response)
{
//$response['label_url']
//$response['shipment_number']
$tmppdf = $this->app->erp->DownloadFile($response['label_url'],'Intraship_Versand_'.$id.'_','pdf');
if($this->einstellungen['autotracking']=='1'){
$this->SetTracking($response['shipment_number'],$sid==='versand'?$id:0, $lieferschein);
}
$this->app->erp->Protokoll("Erfolg Paketmarke Drucker ".$data['intraship_drucker']," Datei: $tmppdf URL: ".$response['label_url']);
$spoolerId = $this->app->printer->Drucken($data['intraship_drucker'],$tmppdf);
if($versandId && $spoolerId) {
$this->app->DB->Update(
sprintf(
'UPDATE versand SET lastspooler_id = %d, lastprinter = %d WHERE id = %d',
$spoolerId, $data['intraship_drucker'], $versandId
)
);
}
if($module === 'retoure')
{
if(@is_file($tmppdf) && @filesize($tmppdf))
{
$fileid = $this->app->erp->CreateDatei('Paketmarke_'.$this->app->DB->Select("SELECT belegnr FROM retoure WHERE id = '$id' LIMIT 1").'.pdf', 'Anhang', '', "", $tmppdf, $this->app->DB->real_escape_string($this->app->User->GetName()));
$this->app->erp->AddDateiStichwort($fileid, 'anhang', 'retoure', $id);
}
}
unlink($tmppdf);
} else {
$dump = $this->app->erp->VarAsString($this->errors);
$this->app->erp->Protokoll("Fehler DHL Versenden API beim Erstellen Label fuer Versand $id LS $lieferschein",$dump);
}
if($response_export)
{
$tmppdf = $this->app->erp->DownloadFile($response_export['export_url'],"Export_Intraship_Versand_".$id."_","pdf");
$this->app->erp->Protokoll("Erfolg Export Dokumente Drucker ".$data['druckerlogistikstufe2']," Datei: $tmppdf URL: ".$response_export['export_url']);
$spoolerId = $this->app->printer->Drucken($data['druckerlogistikstufe2'],$tmppdf);
if($versandId && $spoolerId) {
$this->app->DB->Update(
sprintf(
'UPDATE versand SET lastexportspooler_id = %d, lastexportprinter = %d WHERE id = %d',
$spoolerId, $data['druckerlogistikstufe2'], $versandId
)
);
}
if($module === 'retoure')
{
if(@is_file($tmppdf) && @filesize($tmppdf))
{
$fileid = $this->app->erp->CreateDatei('Export_'.$this->app->DB->Select("SELECT belegnr FROM retoure WHERE id = '$id' LIMIT 1").'.pdf', 'Anhang', '', "", $tmppdf, $this->app->DB->real_escape_string($this->app->User->GetName()));
$this->app->erp->AddDateiStichwort($fileid, 'anhang', 'retoure', $id);
}
}
unlink($tmppdf);
} elseif($land!=$this->einstellungen['intraship_countryISOCode']) {
$dump = $this->app->erp->VarAsString($this->errors);
$this->app->erp->Protokoll("Fehler DHL Versenden Export Dokument API beim Erstellen fuer Versand $id LS $lieferschein",$dump);
}
if($adressdaten)
{
if($response)
{
$adressdaten['tracking'] = $response['shipment_number'];
return true;
}
return false;
}
if($response){
return false;
}
return $this->errors;
}
if($this->app->Secure->GetPOST('drucken') || $this->app->Secure->GetPOST('anders'))
{
}else{
if(empty($this->einstellungen['retourenaccount']) || !$this->einstellungen['retourenaccount'])
{
$this->app->Tpl->Add('VORRETOURENLABEL', '<!--');
$this->app->Tpl->Add('NACHRETOURENLABEL', '-->');
}
if(isset($this->einstellungen['retourenlabel']) && $this->einstellungen['retourenlabel']) {
$this->app->Tpl->Add('RETOURENLABEL',' checked="checked" ');
}
if($target) {
$this->app->Tpl->Set('VERSICHERUNGSSUMME',$versicherungssumme);
}
}
}else{
if($adressdaten === null){
$module = $this->app->Secure->GetGET('module');
}
else {
$module = $doctyp;
}
//TODO Workarrond fuer lieferschein
if($module==='lieferschein')
{
$lieferschein = $id;
//$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
}elseif($module === 'retoure')
{
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM retoure WHERE id='$id' LIMIT 1");
//$projekt = $this->app->DB->Select("SELECT projekt FROM retoure WHERE id='$id' LIMIT 1");
} else {
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
//$projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($lieferschein <=0) {
$lieferschein=$id;
}
}
//$lieferscheinnummer = "LS".$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
//pruefe ob es auftragsnummer gibt dann nehmen diese
$auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($auftragid > 0)
{
//$nummeraufbeleg = "AB".$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1");
if($versicherungssumme==0) $versicherungssumme = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1");
} else {
//$nummeraufbeleg = $lieferscheinnummer;
}
$rechnung = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$lieferschein' LIMIT 1");
if($rechnung && $versicherungssumme==0) {
$versicherungssumme = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$rechnung' LIMIT 1");
}
if($target) {
$this->app->Tpl->Set('VERSICHERUNGSSUMME',$versicherungssumme);
}
}
// Schutz keine Retouren im Ausland
$checkland = $this->app->DB->Select("SELECT land FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
if($checkland!=$this->app->erp->Firmendaten('land')){
$this->app->Tpl->Set('RETOURENLABEL', '');
}
//$this->info = $customer_info;
if($target)
{
$this->app->YUI->HideFormular('versichert',array('checked'=>'','unchecked'=>'versicherung'));
$this->app->YUI->HideFormular('wunschtermin',array('checked'=>'','unchecked'=>'wunschzeitraum'));
$this->app->Tpl->Parse($target,'versandarten_dhlversenden.tpl');
}
}
public function Export($daten)
{
}
function Trackinglink($tracking, &$notsend, &$link, &$rawlink)
{
$notsend = 0;
$rawlink = 'http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$tracking;
$link = 'DHL Versand: '.$tracking.' ('.$rawlink.')';
return true;
}
private function log($message) {
if (isset($this->einstellungen['log'])) {
if (is_array($message) || is_object($message)) {
$this->logger->debug('DHL parameter', (array) $message);
} else {
$this->logger->debug($message);
}
}
}
function buildClient($retoure='', $altersfreigabe = false) {
$header = $this->buildAuthHeader();
$location = self::PRODUCTION_URL;
//$location = self::SANDBOX_URL;
$auth_params = array(
'login' => 'wawision_1',
'password' => '3KAuCebZmr9bu0ERtNHKcTI8sN5aY9',
'location' => $location,
'trace' => $this->einstellungen['log']?1:0,
'connection_timeout' => 30
);
$this->log($auth_params);
try {
$this->client = new SoapClient($altersfreigabe?self::API_URL22:($retoure?self::API_URL2:self::API_URL), $auth_params);
} catch(SoapFault $exception)
{
die('Verbindungsfehler: '.$exception->getMessage());
$this->errors[] = 'Verbindungsfehler: '.$exception->getMessage();
return;
}
try {
$this->client->__setSoapHeaders($header);
} catch(SoapFault $exception)
{
die('Verbindungsfehler: '.$exception->getMessage());
$this->errors[] = 'Verbindungsfehler: '.$exception->getMessage();
return;
}
$this->log($this->client);
}
function createNationalShipment($customer_details, $shipment_details = null, $bank_details = null, $cod_details = null) {
$api2 = false;
$api22 = (isset($customer_details['altersfreigabe']) && $customer_details['altersfreigabe']) || (isset($customer_details['wunschtermin']) && $customer_details['wunschtermin']) || (isset($customer_details['versichert']) && $customer_details['versichert'] && isset($customer_details['versicherungssumme']) && $customer_details['versicherungssumme']);
if(isset($customer_details['intraship_retourenlabel']) && $customer_details['intraship_retourenlabel'] && isset($this->einstellungen['intraship_retourenaccount']) && $this->einstellungen['intraship_retourenaccount']) {
$api2 = true;
}
if(isset($this->einstellungen['leitcodierung']) && $this->einstellungen['leitcodierung'])$api22 = true;
$api22 = true; // immer 26.05.2019 BS
$this->buildClient($api2, $api22);
$shipment = array();
// Version
$shipment['Version'] = array('majorRelease' => '1', 'minorRelease' => '0');
/*
if(isset($customer_details['intraship_retourenlabel']) && $customer_details['intraship_retourenlabel'] && isset($this->einstellungen['intraship_retourenaccount']) && $this->einstellungen['intraship_retourenaccount'])
{
$shipment['Version']['minorRelease'] = '1';
}
*/
if($api22)
{
$shipment['Version'] = array('majorRelease' => '2', 'minorRelease' => '0');
}
if($customer_details['country_code']=='' || $customer_details['country_code']=='DE')
{
$customer_details['country_code']='DE';
$customer_details['country_zip']='germany';
} else if ($customer_details['country_code']=='UK'){
$customer_details['country_zip']='england';
} else {
$customer_details['country_zip']='other';
}
// Order
$shipment['ShipmentOrder'] = array();
// Fixme
if($api22)
{
$shipment['ShipmentOrder']['sequenceNumber'] = '01';
}else{
$shipment['ShipmentOrder']['SequenceNumber'] = '1';
}
// Shipment
$s = array();
if($api22)
{
if($this->einstellungen['intraship_Product']=="") $this->einstellungen['intraship_Product']="V01PAK";
$s['product'] = $this->einstellungen['intraship_Product'];
}else{
$s['ProductCode'] = 'EPN';
}
if($customer_details['intraship_retourenlabel']=="1")
{
if($api22) {
$s['returnShipmentAccountNumber'] = $this->einstellungen['intraship_retourenaccount'];
$s['returnShipmentReference'] = $customer_details['ordernumber'];
} else {
$s['ReturnShipmentBillingNumber'] = $this->einstellungen['intraship_retourenaccount'];
}
}
if($api22)
{
if(!empty($customer_details['abholdatum']) && $customer_details['abholdatum']!="0000-00-00")
$s['shipmentDate'] = $customer_details['abholdatum'];
else
$s['shipmentDate'] = date('Y-m-d');
}else{
if(!empty($customer_details['abholdatum']) && $customer_details['abholdatum']!="0000-00-00")
$s['ShipmentDate'] = $customer_details['abholdatum'];
else
$s['ShipmentDate'] = date('Y-m-d');
}
if($this->einstellungen['runden']) {
$shipment_details['WeightInKG'] = round($shipment_details['WeightInKG']);
$customer_details['weight'] = round($customer_details['weight']);
}
if($api22)
{
$s['accountNumber'] = $this->einstellungen['ekp'].(strlen($this->einstellungen['partnerid']) <= 2?"01".$this->einstellungen['partnerid']:$this->einstellungen['partnerid']);
if ($shipment_details == null) {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['weightInKG'] = '5';
$s['ShipmentItem']['lengthInCM'] = '50';
$s['ShipmentItem']['widthInCM'] = '50';
$s['ShipmentItem']['heightInCM'] = '50';
} else {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['weightInKG'] = $shipment_details['WeightInKG'];
$s['ShipmentItem']['lengthInCM'] = $shipment_details['LengthInCM'];
$s['ShipmentItem']['widthInCM'] = $shipment_details['WidthInCM'];
$s['ShipmentItem']['heightInCM'] = $shipment_details['HeightInCM'];
}
// Falls ein Gewicht angegeben worden ist
if($customer_details['weight']!="")
$s['ShipmentItem']['weightInKG'] = $customer_details['weight'];
}else{
$s['EKP'] = $this->einstellungen['ekp'];
$s['Attendance'] = array();
$s['Attendance']['partnerID'] = substr($this->einstellungen['partnerid'],0,2);
if ($shipment_details == null) {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['WeightInKG'] = '5';
$s['ShipmentItem']['LengthInCM'] = '50';
$s['ShipmentItem']['WidthInCM'] = '50';
$s['ShipmentItem']['HeightInCM'] = '50';
// FIXME: What is this
$s['ShipmentItem']['PackageType'] = 'PL';
} else {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['WeightInKG'] = $shipment_details['WeightInKG'];
$s['ShipmentItem']['LengthInCM'] = $shipment_details['LengthInCM'];
$s['ShipmentItem']['WidthInCM'] = $shipment_details['WidthInCM'];
$s['ShipmentItem']['HeightInCM'] = $shipment_details['HeightInCM'];
// FIXME: What is this
$s['ShipmentItem']['PackageType'] = $shipment_details['PackageType'];
}
// Falls ein Gewicht angegeben worden ist
if($customer_details['weight']!="")
$s['ShipmentItem']['WeightInKG'] = $customer_details['weight'];
}
if(isset($this->einstellungen['intraship_vorausverfuegung']) && $this->einstellungen['intraship_vorausverfuegung'] != '' && $this->einstellungen['intraship_vorausverfuegung'] != '-' && $api22){
$s['Service']['Endorsement']['active'] = 1;
$s['Service']['Endorsement']['type'] = $this->einstellungen['intraship_vorausverfuegung'];
}
if($bank_details != null)
{
$s['BankData'] = array();
$s['BankData']['accountOwner'] = $bank_details['account_owner'];
$s['BankData']['accountNumber'] = $bank_details['account_number'];
$s['BankData']['bankCode'] = $bank_details['bank_code'];
$s['BankData']['bankName'] = $bank_details['bank_name'];
$s['BankData']['iban'] = $bank_details['iban'];
$s['BankData']['bic'] = $bank_details['bic'];
if($api22)
{
$s['BankData']['note1'] = $bank_details['note'];
}else{
$s['BankData']['note'] = $bank_details['note'];
}
}
if($cod_details != null)
{
if($this->einstellungen['nachnahmeextra']=="1") $cod_details['amount'] = $cod_details['amount'] + str_replace(',','.',$this->einstellungen['nachnahmegebuehr']);
if($api22)
{
if($this->einstellungen['intraship_countryISOCode']=='AT')
{
if($customer_details['country']=='DE') $s['product']='V87PARCEL.V87COD';
if($customer_details['country']=='AT') $s['product']='V86PARCEL.V86BLNN';
}
$s['Service']['CashOnDelivery'] = array();
$s['Service']['CashOnDelivery']['codAmount'] = $cod_details['amount'];
$s['Service']['CashOnDelivery']['active'] = 1;
}else{
//$s['Service'] = array();
//$s['Service']['ServiceGroupOther'] = array();
$s['Service']['ServiceGroupOther']['COD'] = array();
$s['Service']['ServiceGroupOther']['COD']['CODAmount'] = $cod_details['amount'];
$s['Service']['ServiceGroupOther']['COD']['CODCurrency'] = $cod_details['currency'];
}
}
// Auftragnummer auf Label
if($api22)
{
$s['customerReference']=$customer_details['ordernumber'];
if(isset($customer_details['altersfreigabe']) && $customer_details['altersfreigabe'])
{
if($customer_details['altersfreigabe'] >= 16)
{
$s['Service']['VisualCheckOfAge'] = array();
$s['Service']['VisualCheckOfAge']['active'] = 1;
$s['Service']['VisualCheckOfAge']['type'] = $customer_details['altersfreigabe'] > 16?'A18':'A16';
}
}
if(isset($customer_details['wunschtermin']) && $customer_details['wunschtermin'])
{
if(isset($customer_details['wunschzeitraum']) && $customer_details['wunschzeitraum'])
{
$s['Service']['PreferredTime'] = array();
$s['Service']['PreferredTime']['active'] = 1;
$s['Service']['PreferredTime']['type'] = $customer_details['wunschzeitraum'];
}
if(isset($customer_details['wunschlieferdatum']) && $customer_details['wunschlieferdatum'])
{
$s['Service']['PreferredDay'] = array();
$s['Service']['PreferredDay']['active'] = 1;
$s['Service']['PreferredDay']['details'] = $customer_details['wunschlieferdatum'];
if($s['product'] !== 'V01PAK' && $s['product'] !== 'V06PAK')
{
$s['product'] = 'V01PAK';
}
}
}
if(isset($customer_details['versichert']) && $customer_details['versichert'] && isset($customer_details['versicherungssumme']) && $customer_details['versicherungssumme'])
{
$s['Service']['AdditionalInsurance'] = array();
$s['Service']['AdditionalInsurance']['active'] = 1;
$s['Service']['AdditionalInsurance']['insuranceAmount'] = number_format(str_replace(',','.',$customer_details['versicherungssumme']),2,'.','');
}
}else{
$s['CustomerReference']=$customer_details['ordernumber'];
}
if($this->einstellungen['sperrgut'] == '1') {
$s['Service']['BulkyGoods'] = array();
$s['Service']['BulkyGoods']['active'] = 1;
}
$shipment['ShipmentOrder']['Shipment']['ShipmentDetails'] = $s;
//$shipment['ShipmentOrder']['Shipment']['ShipmentDetails'] = $s;
$shipper = array();
if($api22)
{
$shipper['Name'] = array();
$shipper['Name']['name1'] = $this->info['company_name'];
}else{
$shipper['Company'] = array();
$shipper['Company']['Company'] = array();
$shipper['Company']['Company']['name1'] = $this->info['company_name'];
}
$shipper['Address'] = array();
$shipper['Address']['streetName'] = $this->info['street_name'];
$shipper['Address']['streetNumber'] = $this->info['street_number'];
if($api22)
{
$shipper['Address']['zip'] = $this->info['zip'];
}else{
$shipper['Address']['Zip'] = array();
$shipper['Address']['Zip'][strtolower($this->info['country'])] = $this->info['zip'];
}
$shipper['Address']['city'] = $this->info['city'];
$shipper['Address']['Origin'] = array('countryISOCode' => $this->info['countryISOCode']);
$shipper['Communication'] = array();
if ($this->info['email']!="") {
$shipper['Communication']['email'] = $this->info['email'];
}
$shipper['Communication']['phone'] = $this->info['phone'];
$shipper['Communication']['internet'] = $this->info['internet'];
$shipper['Communication']['contactPerson'] = $this->info['contact_person'];
$shipment['ShipmentOrder']['Shipment']['Shipper'] = $shipper;
if($api22)
{
if(isset($this->einstellungen['leitcodierung']) && $this->einstellungen['leitcodierung'])
{
$shipment['ShipmentOrder']['PrintOnlyIfCodeable'] = array();
$shipment['ShipmentOrder']['PrintOnlyIfCodeable']['active'] = "1";
}
$receiver = array();
$receiver['name1'] = $customer_details['name1'];
$receiver['Address'] = array();
if(stripos($customer_details['street_name'], 'packstation') !== false) {
if(is_numeric($customer_details['name1']))
$receiver['Packstation']['postNumber']=$customer_details['name1'];
else if(is_numeric($customer_details['name2']) && $receiver['Packstation']['postNumber']=="")
$receiver['Packstation']['postNumber']=$customer_details['name2'];
$receiver['Packstation']['packstationNumber']=$customer_details['street_number'];
$receiver['Packstation']['zip']=$customer_details['zip'];
$receiver['Packstation']['city']=$customer_details['city'];
$receiver['Packstation']['Origin']=array('countryISOCode' => $customer_details['country_code']);
} //else {
if($customer_details['name2']!="")
$receiver['Address']['name2'] = $customer_details['name2'];
if($customer_details['name3']!="")
$receiver['Address']['name3'] = $customer_details['name3'];
if($customer_details['name2']!="")
$receiver['Address']['addressAddition'] = $customer_details['name2'];
if($customer_details['name3']!="")
$receiver['Address']['dispatchingInformation'] = $customer_details['name3'];
$receiver['Address']['streetName'] = $customer_details['street_name'];
$receiver['Address']['streetNumber'] = $customer_details['street_number'];
$receiver['Address']['zip'] = $customer_details['zip'];
$receiver['Address']['city'] = $customer_details['city'];
$receiver['Address']['Origin'] = array('countryISOCode' => $customer_details['country_code']);
//}
$receiver['Communication'] = array();
if($customer_details['c/o']=="") $customer_details['c/o'] = $customer_details['name2'];
if($customer_details['c/o']=="") $customer_details['c/o'] = $customer_details['name1'];
$receiver['Communication']['contactPerson'] = $customer_details['c/o'];
if ($customer_details['email']!="") {
$receiver['Communication']['email'] = $customer_details['email'];
}
if ($customer_details['phone']!="") {
$receiver['Communication']['phone'] = $customer_details['phone'];
}
$shipment['ShipmentOrder']['Shipment']['Receiver'] = $receiver;
}else{
$receiver = array();
$receiver['Company'] = array();
/*
$receiver['Company']['Person'] = array();
$receiver['Company']['Person']['firstname'] = $customer_details['first_name'];
$receiver['Company']['Person']['lastname'] = $customer_details['last_name'];
*/
$receiver['Company']['Company'] = array();
$receiver['Company']['Company']['name1'] = $customer_details['name1'];
$receiver['Company']['Company']['name2'] = $customer_details['name2'];
$receiver['Address'] = array();
$receiver['Address']['streetName'] = $customer_details['street_name'];
$receiver['Address']['streetNumber'] = $customer_details['street_number'];
$receiver['Address']['Zip'] = array();
$receiver['Address']['Zip'][strtolower($customer_details['country_zip'])] = $customer_details['zip'];
$receiver['Address']['city'] = $customer_details['city'];
$receiver['Communication'] = array();
$receiver['Communication']['contactPerson'] = $customer_details['c/o'];
if($customer_details['email']!="")
$receiver['Communication']['email'] = $customer_details['email'];
$receiver['Address']['Origin'] = array('countryISOCode' => $customer_details['country_code']);
$shipment['ShipmentOrder']['Shipment']['Receiver'] = $receiver;
}
if(isset($customer_details['intraship_retourenlabel']) && $customer_details['intraship_retourenlabel'] && isset($this->einstellungen['intraship_retourenaccount']) && $this->einstellungen['intraship_retourenaccount'])
{
$ReturnReceiver = array();
if($api22)
{
$ReturnReceiver['Name'] = array();
$ReturnReceiver['Name']['name1'] = $this->info['company_name'];
}else{
$ReturnReceiver['Company'] = array();
$ReturnReceiver['Company']['Company'] = array();
$ReturnReceiver['Company']['Company']['name1'] = $this->info['company_name'];
}
$ReturnReceiver['Address'] = array();
$ReturnReceiver['Address']['streetName'] = $this->info['street_name'];
$ReturnReceiver['Address']['streetNumber'] = $this->info['street_number'];
if($api22)
{
$ReturnReceiver['Address']['zip'] = $this->info['zip'];
}else{
$ReturnReceiver['Address']['Zip'] = array();
$ReturnReceiver['Address']['Zip'][strtolower($this->info['country'])] = $this->info['zip'];
}
$ReturnReceiver['Address']['city'] = $this->info['city'];
$ReturnReceiver['Address']['Origin'] = array('countryISOCode' => $this->info['countryISOCode']);
$ReturnReceiver['Communication'] = array();
if ($this->info['email']!="") {
$shipper['Communication']['email'] = $this->info['email'];
}
$ReturnReceiver['Communication']['phone'] = $this->info['phone'];
$ReturnReceiver['Communication']['internet'] = $this->info['internet'];
$ReturnReceiver['Communication']['contactPerson'] = $this->info['contact_person'];
$shipment['ShipmentOrder']['Shipment']['ReturnReceiver'] = $ReturnReceiver;
// $shipment['ShipmentOrder']['Shipment']['ShipmentDetails']['Service'] = ['PackagingReturn' => ['active' => 1]];
}
$this->app->erp->LogFile(['shipment'=>$shipment,'customer_details'=>$customer_details]);
try {
if(empty($this->client)) {
return;
}
if($api22)
{
$response = $this->client->createShipmentOrder($shipment);
}
else{
$response = $this->client->CreateShipmentDD($shipment);
}
} catch(SoapFault $exception)
{
if($this->einstellungen['log'])
{
$this->dumpRequest('request.xml',$this->client->__getLastRequest());
$this->dumpRequest('response.xml',$this->client->__getLastResponse());
}
if(trim($exception->getMessage()) == 'Authorization Required')
{
$this->errors[] = 'Fehlerhafte DHL Versenden Zugangsdaten';
return false;
}
$this->errors[] = 'Fehler von DHL Versenden: '.$exception->getMessage();
return;
}
if($this->einstellungen['log'])
{
$this->dumpRequest('request.xml',$this->client->__getLastRequest());
$this->dumpRequest('response.xml',$this->client->__getLastResponse());
}
if (is_soap_fault($response) || (isset($response->status) && $response->status->StatusCode != 0 || isset($response->Status) && $response->Status->statusCode != 0)) {
$this->errors[] = "<b>Fehlermeldung von DHL:</b>";
if (is_soap_fault($response)) {
$this->errors[] = $response->faultstring;
} else {
$responsetext = isset($response->status)?$response->status->StatusMessage:$response->Status->statusMessage;
if($responsetext=='In der Sendung trat mindestens ein harter Fehler auf.'){
$responsetext = 'Fehler bei der Leitcodierung in Adresse. Bitte korrekte Adresse angeben. ';
}
if($responsetext=='Die Gewichtsangabe ist kleiner als im CN23-Formular'){
$responsetext = 'Es müssen für alle Artikel das Gewicht in den Stammdaten gepflegt sein. Es fehlt bei Artikeln das Gewicht. ';
}
if($responsetext=='Der Nutzer des Webservice konnte nicht authentifiziert werden.'){
$responsetext = "DHL Login Failed. Das könnte an einem abgelaufenen Passwort liegen, da DHL in regelmäßigen Abständen ein neues Passwort für den DHL API-User vorschreibt. Mehr Informationen, wie Sie ein neues DHL Passwort vergeben können, finden Sie <a href=\"https://www.wawision.de/helpdesk/intraship#nav-fehlermeldung-beim-versuch-die-dhl-paketmarke-in-wawision-zu-erzeugen-\" target=\"_blank\">hier</a>.";
}
if($responsetext===$response->CreationState->LabelData->Status->statusMessage[1] && $responsetext!=''){
} else {
$responsetext .= ' '.$response->CreationState->LabelData->Status->statusMessage[1];
}
if($this->einstellungen['log'])
{
$this->dumpRequest('request.xml',$this->client->__getLastRequest());
$this->dumpRequest('response.xml',$this->client->__getLastResponse());
}
$this->errors[] = $responsetext;
}
if($response->CreationState->StatusMessage)
{
foreach($response->CreationState->StatusMessage as $v)
{
$found = false;
if($this->errors && is_array($this->errors))
{
foreach($this->errors as $err)
{
if($err == $v)$found = true;
}
}
if(!$found)$this->errors[] = $v;
}
}
return false;
}
$r = array();
if($api22)
{
$r['shipment_number'] = (String) $response->CreationState->LabelData->shipmentNumber;
$r['piece_number'] = (String) $response->CreationState->LabelData->licensePlate;
$r['label_url'] = (String) $response->CreationState->LabelData->labelUrl;
$r['gesamt'] = $response;
}else{
$r['shipment_number'] = (String) $response->CreationState->ShipmentNumber->shipmentNumber;
$r['piece_number'] = (String) $response->CreationState->PieceInformation->PieceNumber->licensePlate;
$r['label_url'] = (String) $response->CreationState->Labelurl;
}
return $r;
}
function createWeltShipment($customer_details, $shipment_details = null, $bank_details = null, $cod_details = null,$artikel=null) {
$api2 = false;
if(isset($customer_details['altersfreigabe']) && $customer_details['altersfreigabe']) $api22 = true;
if(isset($this->einstellungen['leitcodierung']) && $this->einstellungen['leitcodierung'])$api22 = true;
//if(isset($customer_details['intraship_retourenlabel']) && $customer_details['intraship_retourenlabel'] && isset($this->einstellungen['intraship_retourenaccount']) && $this->einstellungen['intraship_retourenaccount'])$api2 = true;
// TODO HACK
if($this->einstellungen['intraship_countryISOCode']=='AT') {
$api22 = true;
}
$api22 = true; // immer 26.05.2019 BS
$this->buildClient($api2, $api22);
$shipment = array();
if($customer_details['country_code']=='DE')
{
$customer_details['country']='germany';
} else if ($customer_details['country_code']=='UK')
{
$customer_details['country']='england';
} else {
$customer_details['country']='other';
}
// Version
if($api22)
{
$shipment['Version'] = array('majorRelease' => '2', 'minorRelease' => '0');
}else{
$shipment['Version'] = array('majorRelease' => '1', 'minorRelease' => '0');
/* if(isset($customer_details['intraship_retourenlabel']) && $customer_details['intraship_retourenlabel'] && isset($this->einstellungen['intraship_retourenaccount']) && $this->einstellungen['intraship_retourenaccount'])
{
$shipment['Version']['minorRelease'] = '1';
}
*/
}
// Order
$shipment['ShipmentOrder'] = array();
$s = array();
// Fixme
if($api22)
{
$shipment['ShipmentOrder']['sequenceNumber'] = '01';
if(!empty($customer_details['abholdatum']) && $customer_details['abholdatum']!="0000-00-00")
$s['shipmentDate'] = $customer_details['abholdatum'];
else
$s['shipmentDate'] = date('Y-m-d');
if($this->einstellungen['intraship_countryISOCode']=='AT')
{
//$s['product'] = isset($customer_details['EU'])&&$customer_details['EU']?"V87PARCEL": "V82PARCEL";
$s['product'] = ($customer_details['country_code']=="DE"||$customer_details['country_code']=="BE"||$customer_details['country_code']=="NL"||$customer_details['country_code']=="LU"||$customer_details['country_code']=="PL"||$customer_details['country_code']=="SK"||$customer_details['country_code']=="CZ")?"V87PARCEL": "V82PARCEL";
$s['accountNumber']= ($customer_details['country_code']=="DE"||$customer_details['country_code']=="BE"||$customer_details['country_code']=="NL"||$customer_details['country_code']=="LU"||$customer_details['country_code']=="PL"||$customer_details['country_code']=="SK"||$customer_details['country_code']=="CZ")?$this->einstellungen['ekp'].$this->einstellungen['partnerid_connect']:$this->einstellungen['ekp'].$this->einstellungen['partnerid_welt'];
}
else {
if($this->einstellungen['euistwelt'])
{
$s['product'] = "V53WPAK";
$s['accountNumber'] =$this->einstellungen['ekp'].(strlen($this->einstellungen['partnerid_welt'])<=2?"01".$this->einstellungen['partnerid_welt']:$this->einstellungen['partnerid_welt']);
}
else
{
if(substr($this->einstellungen['partnerid_connect'], -4)=="5501") $s['product'] = "V55PAK";
else $s['product'] = isset($customer_details['EU'])&&$customer_details['EU']?"V54EPAK": "V53WPAK";
$s['accountNumber'] =$this->einstellungen['ekp'].(isset($customer_details['EU'])&&$customer_details['EU']?$this->einstellungen['partnerid_connect']:$this->einstellungen['partnerid_welt']);
}
}
}else{
$shipment['ShipmentOrder']['SequenceNumber'] = '1';
$s['ProductCode'] = 'BPI';
if(!empty($customer_details['abholdatum']) && $customer_details['abholdatum']!="0000-00-00")
$s['ShipmentDate'] = $customer_details['abholdatum'];
else
$s['ShipmentDate'] = date('Y-m-d');
$s['EKP'] = $this->einstellungen['ekp'];
$s['Attendance'] = array();
$s['Attendance']['partnerID'] = $this->einstellungen['partnerid'];
}
if($customer_details['intraship_retourenlabel']=="1")
{
if($api22) {
// $s['Service']['ReturnReceipt'] = array();
// $s['Service']['ReturnReceipt']['active'] = 1;
$s['returnShipmentAccountNumber'] = $this->einstellungen['intraship_retourenaccount'];
$s['returnShipmentReference'] = $customer_details['ordernumber'];
} else {
$s['ReturnShipmentBillingNumber'] = $this->einstellungen['intraship_retourenaccount'];
}
}
if($this->einstellungen['runden'])$customer_details['weight'] = round($customer_details['weight']);
if($api22)
{
if ($shipment_details == null) {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['weightInKG'] = '3';
$s['ShipmentItem']['lengthInCM'] = '50';
$s['ShipmentItem']['widthInCM'] = '30';
$s['ShipmentItem']['heightInCM'] = '15';
}
else {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['weightInKG'] = $shipment_details['WeightInKG'];
$s['ShipmentItem']['lengthInCM'] = $shipment_details['LengthInCM'];
$s['ShipmentItem']['widthInCM'] = $shipment_details['WidthInCM'];
$s['ShipmentItem']['heightInCM'] = $shipment_details['HeightInCM'];
$s['ShipmentItem']['PackageType'] = $shipment_details['PackageType'];
}
// Falls ein Gewicht angegeben worden ist
if($customer_details['weight']!="")
$s['ShipmentItem']['weightInKG'] = $customer_details['weight'];
}else{
if ($shipment_details == null) {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['WeightInKG'] = '3';
$s['ShipmentItem']['LengthInCM'] = '50';
$s['ShipmentItem']['WidthInCM'] = '30';
$s['ShipmentItem']['HeightInCM'] = '15';
// FIXME: What is this
$s['ShipmentItem']['PackageType'] = 'PK';
}
else {
$s['ShipmentItem'] = array();
$s['ShipmentItem']['weightInKG'] = $shipment_details['WeightInKG'];
$s['ShipmentItem']['lengthInCM'] = $shipment_details['LengthInCM'];
$s['ShipmentItem']['widthInCM'] = $shipment_details['WidthInCM'];
$s['ShipmentItem']['heightInCM'] = $shipment_details['HeightInCM'];
$s['ShipmentItem']['PackageType'] = $shipment_details['PackageType'];
}
// Falls ein Gewicht angegeben worden ist
if($customer_details['weight']!="")
$s['ShipmentItem']['WeightInKG'] = $customer_details['weight'];
}
//$s['Service']['ServiceGroupBusinessPackInternational']['Economy'] = 'true';
$s['Service']['ServiceGroupBusinessPackInternational']['Premium'] = 'true';
if($bank_details != null)
{
$s['BankData'] = array();
$s['BankData']['accountOwner'] = $bank_details['account_owner'];
$s['BankData']['accountNumber'] = $bank_details['account_number'];
$s['BankData']['bankCode'] = $bank_details['bank_code'];
$s['BankData']['bankName'] = $bank_details['bank_name'];
$s['BankData']['iban'] = $bank_details['iban'];
$s['BankData']['bic'] = $bank_details['bic'];
$s['BankData']['note'] = $bank_details['note'];
}
if($cod_details != null)
{
//$s['Service'] = array();
//$s['Service']['ServiceGroupOther'] = array();
if($this->einstellungen['nachnahmeextra']=='1') $cod_details['amount'] = $cod_details['amount'] + str_replace(',','.',$this->einstellungen['nachnahmegebuehr']);
if($api22)
{
if($this->einstellungen['intraship_countryISOCode']=='AT')
{
if($customer_details['country']=='DE') $s['product']='V87PARCEL.V87COD';
if($customer_details['country']=='AT') $s['product']='V86PARCEL.V86BLNN';
}
$s['Service']['CashOnDelivery'] = array();
$s['Service']['CashOnDelivery']['codAmount'] = $cod_details['amount'];
$s['Service']['CashOnDelivery']['active'] = 1;
} else {
$s['Service']['ServiceGroupOther']['COD'] = array();
$s['Service']['ServiceGroupOther']['COD']['CODAmount'] = $cod_details['amount'];
$s['Service']['ServiceGroupOther']['COD']['CODCurrency'] = $cod_details['currency'];
}
}
// Auftragnummer auf Label
if($api22)
{
$s['customerReference']=$customer_details['ordernumber'];
if($customer_details['altersfreigabe'] >= 16)
{
$s['Service']['VisualCheckOfAge'] = array();
$s['Service']['VisualCheckOfAge']['active'] = 1;
$s['Service']['VisualCheckOfAge']['type'] = $customer_details['altersfreigabe'] > 16?'A18':'A16';
}
}else{
$s['CustomerReference']=$customer_details['ordernumber'];
}
if($this->einstellungen['premiumversand']=='1')
{
$s['Service']['Premium'] = array();
$s['Service']['Premium']['active'] = 1;
}
if($this->einstellungen['sperrgut'] == '1') {
$s['Service']['BulkyGoods'] = array();
$s['Service']['BulkyGoods']['active'] = 1;
}
//$s['Service']['ServiceGroupBusinessPackInternational']['Premium'] = 'true';
$shipment['ShipmentOrder']['Shipment']['ShipmentDetails'] = $s;
//$shipment['ShipmentOrder']['Shipment']['ShipmentDetails'] = $s;
$shipper = array();
if($api22)
{
$shipper['Name'] = array();
$shipper['Name']['name1'] = $this->info['company_name'];
}else{
$shipper['Company'] = array();
$shipper['Company']['Company'] = array();
$shipper['Company']['Company']['name1'] = $this->info['company_name'];
}
$shipper['Address'] = array();
$shipper['Address']['streetName'] = $this->info['street_name'];
$shipper['Address']['streetNumber'] = $this->info['street_number'];
if($api22)
{
$shipper['Address']['zip'] = $this->info['zip'];
}else{
$shipper['Address']['Zip'] = array();
$shipper['Address']['Zip'][strtolower($this->info['country'])] = $this->info['zip'];
}
$shipper['Address']['city'] = $this->info['city'];
$shipper['Address']['Origin'] = array('countryISOCode' => $this->info['countryISOCode']);
$shipper['Communication'] = array();
if ($this->info['email']!='') {
$shipper['Communication']['email'] = $this->info['email'];
}
if(empty($this->info['phone'])) {
$this->info['phone'] = '0';
}
$this->info['phone'] = str_replace('+','00',trim($this->info['phone']));
$this->info['phone'] = preg_replace('![^0-9]!', '', $this->info['phone']);
if(empty($this->info['phone'])) {
$this->info['phone'] = '0';
}
$shipper['Communication']['phone'] = $this->info['phone'];
$shipper['Communication']['internet'] = $this->info['internet'];
$shipper['Communication']['contactPerson'] = $this->info['contact_person'];
$shipment['ShipmentOrder']['Shipment']['Shipper'] = $shipper;
if($api22)
{
if(isset($this->einstellungen['leitcodierung']) && $this->einstellungen['leitcodierung'])
{
$shipment['ShipmentOrder']['PrintOnlyIfCodeable'] = array();
$shipment['ShipmentOrder']['PrintOnlyIfCodeable']['active'] = "1";
}
$receiver = array();
$receiver['name1'] = $customer_details['name1'];
if(stripos($customer_details['street_name'], 'packstation') !== false) {
if(is_numeric($customer_details['name1']))
$receiver['Packstation']['postNumber']=$customer_details['name1'];
else if(is_numeric($customer_details['name2']) && $receiver['Packstation']['postNumber']=="")
$receiver['Packstation']['postNumber']=$customer_details['name2'];
$receiver['Packstation']['packstationNumber']=$customer_details['street_number'];
$receiver['Packstation']['zip']=$customer_details['zip'];
$receiver['Packstation']['city']=$customer_details['city'];
$receiver['Packstation']['Origin']=array('countryISOCode' => $customer_details['country_code']);
} else {
$receiver['Address'] = array();
if($customer_details['name2']!="")
$receiver['Address']['addressAddition'] = $customer_details['name2'];
$receiver['Address']['streetName'] = $customer_details['street_name'];
$receiver['Address']['streetNumber'] = $customer_details['street_number'];
$receiver['Address']['zip'] = $customer_details['zip'];
$receiver['Address']['city'] = $customer_details['city'];
if($customer_details['country_code']==='AT' && strpos($customer_details['street_number'], '/') !== false )
{
$customer_details['street_number'] = str_replace(' ','',$customer_details['street_number']);
$tmpstiege = explode('/',$customer_details['street_number']);
//if(isset($tmpstiege[0]))
// $customer_details['street_number'] = $tmpstiege[0];
if(isset($tmpstiege[1]))
$receiver['Address']['addressAddition']=$tmpstiege[1];
if(isset($tmpstiege[2]))
$receiver['Address']['addressAddition2']=$tmpstiege[2];
//$customer_details['street_number'] = strstr ($customer_details['street_number'], '/',true);
//$receiver['Address']['streetNumber'] = strstr ($receiver['Address']['streetNumber'], '/',true);
}
$receiver['Address']['Origin'] = array('countryISOCode' => $customer_details['country_code']);
}
$receiver['Communication'] = array();
if($customer_details['c/o']=='') $customer_details['c/o'] = $customer_details['name2'];
if($customer_details['c/o']=='') $customer_details['c/o'] = $customer_details['name1'];
$receiver['Communication']['contactPerson'] = $customer_details['c/o'];
if ($customer_details['email']!='') {
$receiver['Communication']['email'] = $customer_details['email'];
}
if ($customer_details['phone']!='') {
$receiver['Communication']['phone'] = $customer_details['phone'];
}
$shipment['ShipmentOrder']['Shipment']['Receiver'] = $receiver;
}else{
$receiver = array();
$receiver['Company'] = array();
$receiver['Company']['Company'] = array();
$receiver['Company']['Company']['name1'] = $customer_details['name1'];
$receiver['Company']['Company']['name2'] = $customer_details['name2'];
if($customer_details['name2']!="")
$tmp_name = explode(' ',$customer_details['name2'],2);
else
$tmp_name = explode(' ',$customer_details['name1'],2);
if(isset($tmp_name[2]) && $tmp_name[2]){
$receiver['Company']['Person'] = array();
$receiver['Company']['Person']['firstname'] = $tmp_name[0];
$receiver['Company']['Person']['lastname'] = $tmp_name[1];
}
$receiver['Address'] = array();
$receiver['Address']['streetName'] = $customer_details['street_name'];
$receiver['Address']['streetNumber'] = $customer_details['street_number'];
$receiver['Address']['Zip'] = array();
$receiver['Address']['Zip'][strtolower($customer_details['country_zip'])] = $customer_details['zip'];
$receiver['Address']['city'] = $customer_details['city'];
$receiver['Communication'] = array();
if($customer_details['c/o']=="") $customer_details['c/o'] = $customer_details['name2'];
if($customer_details['c/o']=="") $customer_details['c/o'] = $customer_details['name1'];
$receiver['Communication']['contactPerson'] = $customer_details['c/o'];
if ($customer_details['email']!="") {
$receiver['Communication']['email'] = $customer_details['email'];
}
if(empty($customer_details['phone']))$customer_details['phone'] = '0';
$customer_details['phone'] = str_replace('+','00',trim($customer_details['phone']));
$customer_details['phone'] = preg_replace('![^0-9]!', '', $customer_details['phone']);
if(empty($customer_details['phone']))$customer_details['phone'] = '0';
$receiver['Communication']['phone'] = $customer_details['phone'];
$receiver['Address']['Origin'] = array('countryISOCode' => $customer_details['country_code']);
$shipment['ShipmentOrder']['Shipment']['Receiver'] = $receiver;
}
if(isset($customer_details['intraship_retourenlabel']) && $customer_details['intraship_retourenlabel'] && isset($this->einstellungen['intraship_retourenaccount']) && $this->einstellungen['intraship_retourenaccount'])
{
$ReturnReceiver = array();
$ReturnReceiver['Company'] = array();
$ReturnReceiver['Company']['Company'] = array();
$ReturnReceiver['Company']['Company']['name1'] = $this->info['company_name'];
$ReturnReceiver['Address'] = array();
$ReturnReceiver['Address']['streetName'] = $this->info['street_name'];
$ReturnReceiver['Address']['streetNumber'] = $this->info['street_number'];
if($api22)
{
$ReturnReceiver['Address']['zip'] = $this->info['zip'];
}else{
$ReturnReceiver['Address']['Zip'] = array();
$ReturnReceiver['Address']['Zip'][strtolower($this->info['country'])] = $this->info['zip'];
}
$ReturnReceiver['Address']['city'] = $this->info['city'];
$ReturnReceiver['Address']['Origin'] = array('countryISOCode' => $customer_details['country_code']);
$ReturnReceiver['Communication'] = array();
if ($this->info['email']!="") {
$shipper['Communication']['email'] = $this->info['email'];
}
$ReturnReceiver['Communication']['phone'] = $this->info['phone'];
$ReturnReceiver['Communication']['internet'] = $this->info['internet'];
$ReturnReceiver['Communication']['contactPerson'] = $this->info['contact_person'];
$shipment['ShipmentOrder']['Shipment']['ReturnReceiver'] = $ReturnReceiver;
}
$proformarechnungsnummer = $customer_details['proformanumber'];
if($proformarechnungsnummer=="")
{
$proformarechnungsnummer = ($customer_details['invoicenumber']!=""?$customer_details['invoicenumber']:$customer_details['ordernumber']);
}
if($api22)
{
//$export['invoiceType'] = "commercial";
//$export['invoiceDate'] = date('Y-m-d');
$export['invoiceNumber'] = $proformarechnungsnummer;
$export['exportType'] = "OTHER";
$export['exportTypeDescription'] = $this->info['export_reason'];
$export['commodityCode'] = "";
$export['termsOfTrade'] = "DDP";
$export['amount'] = count($artikel);
$export['placeOfCommital'] = $customer_details['city'];
//$export['Description'] = $this->info['export_reason'];
//$export['CountryCodeOrigin'] = "DE";
$export['additionalFee'] = number_format((float)$customer_details['shippingFee'],2,".","");
$export['customsValue'] = number_format($customer_details['amount'],2,".","");
$export['customsCurrency'] = $customer_details['currency'];
//$export['permitNumber'] = "";
}else{
$export['InvoiceType'] = "commercial";
$export['InvoiceDate'] = date('Y-m-d');
$export['InvoiceNumber'] = $proformarechnungsnummer;
$export['ExportType'] = 0;
$export['ExportTypeDescription'] = $this->info['export_reason'];
$export['CommodityCode'] = "";
$export['TermsOfTrade'] = "DDP";
$export['Amount'] = count($artikel);
$export['Description'] = $this->info['export_reason'];
$export['CountryCodeOrigin'] = "DE";
$export['AdditionalFee'] = number_format((float)$customer_details['shippingFee'],2,".","");
$export['CustomsValue'] = number_format($customer_details['value'],2,".","");
$export['CustomsCurrency'] = $customer_details['currency'];
$export['PermitNumber'] = "";
}
$p=0;
$cartikel = !empty($artikel)?count($artikel):0;
for($i=0;$i<$cartikel;$i++)
{
if($artikel[$i]['currency']=="") $artikel[$i]['currency']="EUR";
if($api22)
{
if($this->info['export_reason']!="")
$export['ExportDocPosition'][0]['description'] = $this->info['export_reason'];
else
$export['ExportDocPosition'][0]['description'] = "Additional Positions";
$export['ExportDocPosition'][0]['countryCodeOrigin'] = $artikel[$i]['countrycode'];
$export['ExportDocPosition'][0]['customsTariffNumber'] = $artikel[$i]['commodity_code'];
$export['ExportDocPosition'][0]['amount'] = 1;//+= intval($artikel[$i]['amount']);
if(!isset($export['ExportDocPosition'][0]['netWeightInKG'])){
$export['ExportDocPosition'][0]['netWeightInKG'] = number_format($artikel[$i]['netweightinkg'], 2, ".", "");
$export['ExportDocPosition'][0]['grossWeightInKG'] = number_format($artikel[$i]['grossweightinkg'], 2, ".", "");
}else{
$export['ExportDocPosition'][0]['netWeightInKG'] = number_format(
(float)$export['ExportDocPosition'][0]['netWeightInKG'] + (float)$artikel[$i]['netweightinkg'], 2, ".", ""
);
$export['ExportDocPosition'][0]['grossWeightInKG'] = number_format(
(float)$export['ExportDocPosition'][0]['grossWeightInKG'] + (float)$artikel[$i]['grossweightinkg'], 2, ".", ""
);
}
$export['ExportDocPosition'][0]['customsValue'] = number_format($customer_details['amount'],2,".","");
$export['ExportDocPosition'][0]['customsCurrency'] = $customer_details['currency'];
$export['ExportDocPosition'][0]['Currency'] = $customer_details['currency'];
}else{
if($this->info['export_reason']!="")
$export['ExportDocPosition'][0]['Description'] = $this->info['export_reason'];
else
$export['ExportDocPosition'][0]['Description'] = "Additional Positions";
$export['ExportDocPosition'][0]['CountryCodeOrigin'] = $artikel[$i]['countrycode'];
$export['ExportDocPosition'][0]['CommodityCode'] = $artikel[$i]['commodity_code'];
$export['ExportDocPosition'][0]['Amount'] = 1;//+= intval($artikel[$i]['amount']);
if(!isset($export['ExportDocPosition'][0]['netWeightInKG'])){
$export['ExportDocPosition'][0]['netWeightInKG'] = number_format($artikel[$i]['netweightinkg'], 2, ".", "");
$export['ExportDocPosition'][0]['grossWeightInKG'] = number_format($artikel[$i]['grossweightinkg'], 2, ".", "");
}else{
$export['ExportDocPosition'][0]['netWeightInKG'] = number_format(
(float)$export['ExportDocPosition'][0]['netWeightInKG'] + (float)$artikel[$i]['netweightinkg'], 2, ".", ""
);
$export['ExportDocPosition'][0]['grossWeightInKG'] = number_format(
(float)$export['ExportDocPosition'][0]['grossWeightInKG'] + (float)$artikel[$i]['grossweightinkg'], 2, ".", ""
);
}
$export['ExportDocPosition'][0]['CustomsValue'] = number_format($customer_details['amount'],2,".","");
$export['ExportDocPosition'][0]['CustomsCurrency'] = $customer_details['currency'];
$export['ExportDocPosition'][0]['Currency'] = $customer_details['currency'];
}
}
if(count($artikel)<=0)$this->errors[]="Bei den Artikel fehlen die Gewichte in den Stammdaten!";
$shipment['ShipmentOrder']['Shipment']['ExportDocument'] = $export;
try {
if(empty($this->client)) {
return;
}
if($api22)
{
$response = $this->client->createShipmentOrder($shipment);
}else{
$response = $this->client->CreateShipmentDD($shipment);
}
} catch(SoapFault $exception)
{
if($this->einstellungen['log'])
{
$this->dumpRequest("request.xml",$this->client->__getLastRequest());
$this->dumpRequest("response.xml",$this->client->__getLastResponse());
}
if(trim($exception->getMessage()) == 'Authorization Required')
{
$this->errors[] = 'Fehlerhafte DHL Versenden Zugangsdaten';
return false;
}
$this->errors[] = "Fehler von DHL Versenden: ".$exception->getMessage();
return;
}
if($this->einstellungen['log'])
{
$this->dumpRequest("request.xml",$this->client->__getLastRequest());
$this->dumpRequest("response.xml",$this->client->__getLastResponse());
}
if (((isset($response->status) && $response->status->StatusCode != 0)
|| (isset($response->Status) && $response->Status->statusCode != 0)) || is_soap_fault($response)) {
$this->errors[] = "<b>Fehlermeldung von DHL:</b>";
if (is_soap_fault($response)) {
$this->errors[] = $response->faultstring;
} else {
$responsetext = isset($response->status)?$response->status->StatusMessage:$response->Status->statusMessage;
if($responsetext=='In der Sendung trat mindestens ein harter Fehler auf.')
$responsetext = 'Fehler bei der Leitcodierung in Adresse. Bitte korrekte Adresse angeben. ';
if($responsetext=='Der Nutzer des Webservice konnte nicht authentifiziert werden.')
$responsetext = "DHL Login Failed. Das könnte an einem abgelaufenen Passwort liegen, da DHL in regelmäßigen Abständen ein neues Passwort für den DHL API-User vorschreibt. Mehr Informationen, wie Sie ein neues DHL Passwort vergeben können, finden Sie <a href=\"https://www.wawision.de/helpdesk/intraship#nav-fehlermeldung-beim-versuch-die-dhl-paketmarke-in-wawision-zu-erzeugen-\" target=\"_blank\">hier</a>.";
if($responsetext=='Exception in extension function java.util.MissingResourceException: Couldnt find 3-letter country code for GERMANY')
$responsetext = 'Bitte prüfen Sie die Herkunftsländer der Artikel in den Stammdaten. Es müssen 2-stellige ISO Codes angegeben sein.';
$secondMessage = (String)$response->CreationState->LabelData->Status->statusMessage[1];
if($secondMessage!="" && $secondMessage!=$responsetext)
{
$responsetext .= " ".$response->CreationState->LabelData->Status->statusMessage[1];
}
$this->errors[] = $responsetext;
}
if($response->CreationState->StatusMessage)
{
foreach($response->CreationState->StatusMessage as $v)
{
$found = false;
if($this->errors && is_array($this->errors))
{
foreach($this->errors as $err)
{
if($err == $v)$found = true;
}
}
if(!$found) {
$this->errors[] = $v;
}
}
}
return false;
}
if($api22)
{
$r['shipment_number'] = (String) $response->CreationState->LabelData->shipmentNumber;
$r['piece_number'] = (String) $response->CreationState->LabelData->licensePlate;
$r['label_url'] = (String) $response->CreationState->LabelData->labelUrl;
$r['gesamt'] = $response;
}else{
$r['shipment_number'] = (String) $response->CreationState->ShipmentNumber->shipmentNumber;
$r['piece_number'] = (String) $response->CreationState->PieceInformation->PieceNumber->licensePlate;
$r['label_url'] = (String) $response->CreationState->Labelurl;
}
return $r;
}
function dumpRequest($fileName, $contents){
$dir = $this->app->getTmpFolder();
file_put_contents("{$dir}$fileName", $contents);
}
function GetExportDocDD($shippment_number, $api22 = false) {
$this->buildClient();
$shipment = array();
// Version
if($api22)
{
$shipment['Version'] = array('majorRelease' => '2', 'minorRelease' => '0');
}else{
$shipment['Version'] = array('majorRelease' => '1', 'minorRelease' => '0');
}
// Order
$shipment['ShipmentNumber'] = array('shipmentNumber'=>$shippment_number);
//$shipment['DocType'] = 'PDF';
$shipment['DocType'] = 'URL';
if(empty($this->client))return false;
// Fixme
try {
if($api22)
$response = $this->client->getExportDoc($shipment);
else
$response = $this->client->GetExportDocDD($shipment);
} catch(SoapFault $exception)
{
if(trim($exception->getMessage()) === 'Authorization Required')
{
$this->errors[] = 'Fehlerhafte DHL Versenden Zugangsdaten';
return false;
}
$this->errors[] = 'Fehler von DHL Versenden: '.$exception->getMessage();
return false;
}
if (((isset($response->status) && $response->status->StatusCode != 0) ||
(isset($response->Status) && $response->Status->statusCode != 0)) ||
is_soap_fault($response)
) {
$this->errors[] = "<b>Fehlermeldung von DHL:</b>";
if (is_soap_fault($response)) {
$this->errors[] = $response->faultstring;
} else {
$this->errors[] = isset($response->status)?$response->status->StatusMessage:$response->Status->statusMessage;
}
return false;
}
$r = array();
if($api22)
{
$r['export_pdf'] = (String) $response->ExportDocData->exportDocData;
$r['export_url'] = (String) $response->ExportDocData->exportDocURL;
} else {
$r['export_pdf'] = (String) $response->ExportDocData->ExportDocPDFData;
$r['export_url'] = (String) $response->ExportDocData->ExportDocURL;
}
return $r;
}
private function buildAuthHeader() {
$head = $this->einstellungen;
$auth_params = array(
'user' => $this->einstellungen['user'],
'signature' => $this->einstellungen['signature'],
'type' => 0
);
try{
$erg = new SoapHeader('http://dhl.de/webservice/cisbase','Authentification', $auth_params);
} catch(SoapFault $exception)
{
$erg = false;
$this->errors[] = "Authentifizierungsfehler: ".$exception->getMessage();
}
return $erg;
}
}