00001 <?php
00002
00005 class oxImex extends oxBase
00006 {
00016 public function exportLexwareArticles( $iStart, $iLines, $sFilepath)
00017 {
00018 $myConfig = $this->getConfig();
00019 $oDB = oxDb::getDb();
00020
00021 $sArticleTable = getViewName('oxarticles');
00022
00023 $sSelect = "select count(oxid) from $sArticleTable ";
00024 $iSize = $oDB->getOne( $sSelect);
00025
00026 if ( $iStart < $iSize) {
00027 $fp = fopen( $sFilepath, "ab");
00028 if ( !$iStart) {
00029
00030 fwrite( $fp, "\"Artikelnummer\";\"Bezeichnung\";\"Einheit\";\"Gewicht\";\"Matchcode\";\"Preis pro Anzahl\";\"Warengruppe\";\"Warengr.-Kurzbez.\";\"Warengr.-Steuersatz\";\"Warengr.-Konto Inland\";\"Warengr.-Konto Ausland\";\"Warengr.-Konto EG\";\"Preis 1\";\"Preis 2\";\"Preis 3\";\"Preis I/1\";\"Preis I/2\";\"Preis I/3\";\"Preis II/1\";\"Preis II/2\";\"Preis II/3\";\"Preis III/1\";\"Preis III/2\";\"Preis III/3\";\"B/N\";\"Lagerartikel\";\"EK 1\";\"W�hrung EK1\";\"EK 2\";\"W�hrung EK2\";\"Staffelmenge 1\";\"Staffelmenge 2\";\"Staffelmenge 3\";\"Lieferantennummer 1\";\"Lieferantennummer 2\";\"Bestellmenge Lf.1\";\"Bestellmenge Lf.2\";\"Bestellnr. Lf.1\";\"Bestellnr. Lf.2\";\"Lieferzeit Lf.1\";\"Lieferzeit Lf.2\";\"Lagerbestand\";\"Mindestbestand\";\"Lagerort\";\"Bestellte Menge\";\"St�ckliste\";\"Internet\";\"Text\"\r\n");
00031 }
00032 $oldMode = $oDB->setFetchMode( ADODB_FETCH_ASSOC);
00033 $sSelect = "select * from $sArticleTable ";
00034 $rs = $oDB->selectLimit( $sSelect, $iLines, $iStart);
00035 $oDB->setFetchMode( $oldMode);
00036
00037 while (!$rs->EOF) {
00038 $oArticle = oxNew( "oxarticle" );
00039 $blAdmin = $this->isAdmin();
00040
00041 $this->setAdminMode( false );
00042 $oArticle->load( $rs->fields['OXID']);
00043 $this->setAdminMode( $blAdmin );
00044
00045 $sSelect = "select oxtitle from oxarticles where oxid = " . $oDB->quote( $oArticle->oxarticles__oxparentid->value );
00046 $oTitle = $oDB->getOne( $sSelect);
00047 if ($oTitle != false && strlen ($oTitle)) {
00048 $nTitle = $this->interForm($oTitle);
00049 } else {
00050 $nTitle = $this->interForm($oArticle->oxarticles__oxtitle->value);
00051 }
00052
00053
00054 $sToFile = $oArticle->oxarticles__oxartnum->value
00055
00056 .";".$nTitle." ".$this->interForm($oArticle->oxarticles__oxvarselect->value)
00057 .";"."Stueck"
00058 .";".$oArticle->oxarticles__oxweight->value
00059 .";".$oArticle->oxarticles__oxartnum->value
00060 .";"."1,000"
00061 .";"
00062 .";"
00063 .";"
00064 .";"
00065 .";"
00066 .";"
00067 .";".number_format($oArticle->oxarticles__oxprice->value, 2, '.', '')
00068 .";"
00069 .";"
00070 .";"
00071 .";"
00072 .";"
00073 .";"
00074 .";"
00075 .";"
00076 .";"
00077 .";"
00078 .";"
00079 .";"
00080 .";"
00081
00082
00083 .";".number_format($oArticle->oxarticles__oxbprice->value, 2, '.', '')
00084 .";"
00085 .";"
00086 .";"
00087 .";"
00088 .";"
00089 .";"
00090 .";"
00091 .";"
00092 .";"
00093 .";"
00094 .";"
00095 .";"
00096 .";"
00097 .";"
00098 .";".$oArticle->oxarticles__oxstock->value
00099 .";"
00100 .";"
00101 .";"
00102 .";"
00103 .";1"
00104 .";".$this->interForm( $oArticle->oxarticles__oxshortdesc->value.$oArticle->oxarticles__oxlongdesc->value)
00105 .";";
00106 $sToFile .= "\r\n";
00107
00108 fwrite( $fp, $sToFile);
00109 $rs->moveNext();
00110 }
00111
00112 fclose( $fp );
00113 return true;
00114 }
00115
00116 return false;
00117
00118 }
00119
00127 function interFormSimple( $nValue )
00128 {
00129 $nValue = str_replace( "\r", "", $nValue );
00130 $nValue = str_replace( "\n", " ", $nValue );
00131 $nValue = str_replace( '"', '""', $nValue );
00132 return $nValue;
00133 }
00134
00144 function interForm( $nValue, $oObj = null)
00145 {
00146
00147
00148 $aFieldTypesToSkip = array("text", "oxshortdesc", "oxlongdesc");
00149 $blSkipStrpTags = false;
00150 if ( $oObj != null) {
00151
00152
00153
00154
00155
00156
00157 if ( in_array( $oObj->fldtype, $aFieldTypesToSkip ) || in_array( $oObj->fldname, $aFieldTypesToSkip ) ) {
00158 $blSkipStripTags = true;
00159 }
00160 }
00161
00162
00163
00164
00165 $oStr = getStr();
00166 if ( $oStr->strpos( $nValue, "&" ) !== false && $oStr->strpos($nValue, ";" ) == false ) {
00167 $nValue = str_replace("&", "&", $nValue);
00168 }
00169
00170 $nValue = str_replace( " ", " ", $nValue);
00171 $nValue = str_replace( "ä", "�", $nValue);
00172 $nValue = str_replace( "ö", "�", $nValue);
00173 $nValue = str_replace( "ü", "�", $nValue);
00174 $nValue = str_replace( "Ä", "�", $nValue);
00175 $nValue = str_replace( "Ö", "�", $nValue);
00176 $nValue = str_replace( "Ü", "�", $nValue);
00177 $nValue = str_replace( "ß", "�", $nValue);
00178
00179
00180
00181
00182 $nValue = str_replace( "& ", "& ", $nValue);
00183
00184 $nValue = str_replace( "\"", "'", $nValue);
00185 $nValue = str_replace( "(", "'", $nValue);
00186 $nValue = str_replace( ")", "'", $nValue);
00187 $nValue = str_replace( "\r\n", "", $nValue);
00188 $nValue = str_replace( "\n", "", $nValue);
00189
00190 if ( !$blSkipStripTags) {
00191 $nValue = strip_tags( $nValue );
00192 }
00193
00194 return $nValue;
00195 }
00196
00204 function internPrice( $nPrice)
00205 {
00206 $nPrice = $this->interForm($nPrice);
00207 $nPrice = number_format( (double)$nPrice, 2, '.', '');
00208 return $nPrice;
00209 }
00210
00219 function exportLexwareOrders( $iFromOrderNr = "", $iToOrderNr = "")
00220 {
00221
00222 $myConfig = $this->getConfig();
00223
00224 $sNewLine = "\r\n";
00225
00226 $sSelect = "select * from oxorder where 1 ";
00227
00228 if ( $iFromOrderNr !== "" ) {
00229 $iFromOrderNr = (int)$iFromOrderNr;
00230 $sSelect .= "and oxordernr >= $iFromOrderNr ";
00231 }
00232
00233 if ( $iToOrderNr !== "" ) {
00234 $iToOrderNr = (int)$iToOrderNr;
00235 $sSelect .= "and oxordernr <= $iToOrderNr ";
00236 }
00237
00238 $oOrderlist = oxNew( "oxlist" );
00239 $oOrderlist->init( "oxorder" );
00240 $oOrderlist->selectString( $sSelect );
00241
00242 if ( !$oOrderlist->count() ) {
00243 return null;
00244 }
00245
00246 $sCharset = $this->_getCharset();
00247
00248 $sExport = "<?xml version=\"1.0\" encoding=\"{$sCharset}\"?>$sNewLine";
00249 $sExport .= "<Bestellliste>$sNewLine";
00250 $sRet = $sExport;
00251
00252 foreach ( $oOrderlist->arrayKeys() as $key ) {
00253 $oOrder = $oOrderlist[$key];
00254
00255 $dOrderCurRate = (double)$oOrder->oxorder__oxcurrate->value;
00256
00257 $oUser = oxNew( "oxuser" );
00258 $oUser->load( $oOrder->oxorder__oxuserid->value );
00259
00260 $sExport = "<Bestellung " . $this->_convertStr( "zur�ckgestellt" ) . "=\"Nein\" bearbeitet=\"Nein\" " . $this->_convertStr( "�bertragen" ) . "=\"Nein\">$sNewLine";
00261 $sExport .= "<Bestellnummer>".$oOrder->oxorder__oxordernr->value."</Bestellnummer>$sNewLine";
00262 $sExport .= "<Rechnungsnummer>".$oOrder->oxorder__oxbillnr->value."</Rechnungsnummer>$sNewLine";
00263 $sExport .= "<Standardwaehrung>978</Standardwaehrung>$sNewLine";
00264 $sExport .= "<Bestelldatum>$sNewLine";
00265 $sDBDate = oxUtilsDate::getInstance()->formatDBDate($oOrder->oxorder__oxorderdate->value);
00266 $sExport .= "<Datum>".substr($sDBDate, 0, 10)."</Datum>$sNewLine";
00267 $sExport .= "<Zeit>".substr($sDBDate, 11, 8)."</Zeit>$sNewLine";
00268 $sExport .= "</Bestelldatum>$sNewLine";
00269 $sExport .= "<Kunde>$sNewLine";
00270
00271 $sExport .= "<Kundennummer>"."</Kundennummer>$sNewLine";
00272 $sExport .= "<Firmenname>".$this->interForm($oOrder->oxorder__oxbillcompany->value)."</Firmenname>$sNewLine";
00273 $sExport .= "<Anrede>".$this->interForm(oxLang::getInstance()->translateString($oOrder->oxorder__oxbillsal->value))."</Anrede>$sNewLine";
00274 $sExport .= "<Vorname>".$this->interForm($oOrder->oxorder__oxbillfname->value)."</Vorname>$sNewLine";
00275 $sExport .= "<Name>".$this->interForm($oOrder->oxorder__oxbilllname->value)."</Name>$sNewLine";
00276 $sExport .= "<Strasse>".$this->interForm($oOrder->oxorder__oxbillstreet->value)." ".$this->interForm($oOrder->oxorder__oxbillstreetnr->value)."</Strasse>$sNewLine";
00277 $sExport .= "<PLZ>".$this->interForm($oOrder->oxorder__oxbillzip->value)."</PLZ>$sNewLine";
00278 $sExport .= "<Ort>".$this->interForm($oOrder->oxorder__oxbillcity->value)."</Ort>$sNewLine";
00279 $sExport .= "<Bundesland>".""."</Bundesland>$sNewLine";
00280 $sExport .= "<Land>".$this->interForm($oOrder->oxorder__oxbillcountry->value)."</Land>$sNewLine";
00281 $sExport .= "<Email>".$this->interForm($oOrder->oxorder__oxbillemail->value)."</Email>$sNewLine";
00282 $sExport .= "<Telefon>".$this->interForm($oOrder->oxorder__oxbillfon->value)."</Telefon>$sNewLine";
00283 $sExport .= "<Telefon2>".$this->interForm($oUser->oxuser__oxprivfon->value)."</Telefon2>$sNewLine";
00284 $sExport .= "<Fax>".$this->interForm($oOrder->oxorder__oxbillfax->value)."</Fax>$sNewLine";
00285
00286 $sDelComp = "";
00287 $sDelfName = "";
00288 $sDellName = "";
00289 $sDelStreet = "";
00290 $sDelZip = "";
00291 $sDelCity = "";
00292 $sDelCountry = "";
00293
00294
00295 if ( $oOrder->oxorder__oxdellname->value) {
00296 $sDelComp = $oOrder->oxorder__oxdelcompany->value;
00297 $sDelfName = $oOrder->oxorder__oxdelfname->value;
00298 $sDellName = $oOrder->oxorder__oxdellname->value;
00299 $sDelStreet = $oOrder->oxorder__oxdelstreet->value." ".$oOrder->oxorder__oxdelstreetnr->value;
00300 $sDelZip = $oOrder->oxorder__oxdelzip->value;
00301 $sDelCity = $oOrder->oxorder__oxdelcity->value;
00302 $sDelCountry= $oOrder->oxorder__oxdelcountry->value;
00303 }
00304
00305 $sExport .= "<Lieferadresse>$sNewLine";
00306 $sExport .= "<Firmenname>".$this->interForm($sDelComp)."</Firmenname>$sNewLine";
00307 $sExport .= "<Vorname>".$this->interForm($sDelfName)."</Vorname>$sNewLine";
00308 $sExport .= "<Name>".$this->interForm($sDellName)."</Name>$sNewLine";
00309 $sExport .= "<Strasse>".$this->interForm($sDelStreet)."</Strasse>$sNewLine";
00310 $sExport .= "<PLZ>".$this->interForm($sDelZip)."</PLZ>$sNewLine";
00311 $sExport .= "<Ort>".$this->interForm($sDelCity)."</Ort>$sNewLine";
00312 $sExport .= "<Bundesland>".""."</Bundesland>$sNewLine";
00313 $sExport .= "<Land>".$this->interForm($sDelCountry)."</Land>$sNewLine";
00314 $sExport .= "</Lieferadresse>$sNewLine";
00315 $sExport .= "<Matchcode>".$this->interForm($oOrder->oxorder__oxbilllname->value).", ".$this->interForm($oOrder->oxorder__oxbillfname->value)."</Matchcode>$sNewLine";
00316
00317
00318 $sCountry = strtolower( $oUser->oxuser__oxcountryid->value );
00319 $aHomeCountry = $myConfig->getConfigParam( 'aHomeCountry' );
00320 $sSteuerbar = ( is_array( $aHomeCountry ) && in_array( $sCountry, $aHomeCountry ) ) ? "ja" : "nein";
00321
00322 $sExport .= "<fSteuerbar>".$this->interForm( $sSteuerbar )."</fSteuerbar>$sNewLine";
00323 $sExport .= "</Kunde>$sNewLine";
00324 $sExport .= "<Artikelliste>$sNewLine";
00325 $sRet .= $sExport;
00326
00327 $dSumNetPrice = 0;
00328 $dSumBrutPrice = 0;
00329
00330 $oOrderArticles = $oOrder->getOrderArticles();
00331 foreach ($oOrderArticles->arrayKeys() as $key) {
00332 $oOrderArt = $oOrderArticles->offsetGet($key);
00333
00334 $dVATSet = array_search( $oOrderArt->oxorderarticles__oxvat->value, $myConfig->getConfigParam( 'aLexwareVAT' ) );
00335 $sExport = " <Artikel>$sNewLine";
00336
00337 $sExport .= " <Artikelzusatzinfo><Nettostaffelpreis></Nettostaffelpreis></Artikelzusatzinfo>$sNewLine";
00338 $sExport .= " <SteuersatzID>".$dVATSet."</SteuersatzID>$sNewLine";
00339 $sExport .= " <Steuersatz>".$this->internPrice($oOrderArt->oxorderarticles__oxvat->value/100)."</Steuersatz>$sNewLine";
00340 $sExport .= " <Artikelnummer>".$oOrderArt->oxorderarticles__oxartnum->value."</Artikelnummer>$sNewLine";
00341 $sExport .= " <Anzahl>".$oOrderArt->oxorderarticles__oxamount->value."</Anzahl>$sNewLine";
00342 $sExport .= " <Produktname>".$this->interForm( $oOrderArt->oxorderarticles__oxtitle->value);
00343 if ( $oOrderArt->oxorderarticles__oxselvariant->value) {
00344 $sExport .= "/".$oOrderArt->oxorderarticles__oxselvariant->value;
00345 }
00346 $sExport .= " </Produktname>$sNewLine";
00347 $sExport .= " <Rabatt>0.00</Rabatt>$sNewLine";
00348
00349 $dUnitPrice = $oOrderArt->oxorderarticles__oxbrutprice->value/$oOrderArt->oxorderarticles__oxamount->value;
00350 if ($dOrderCurRate > 0) {
00351 $dUnitPrice /= $dOrderCurRate;
00352 }
00353 $sExport .= " <Preis>".$this->internPrice($dUnitPrice)."</Preis>$sNewLine";
00354 $sExport .= " </Artikel>$sNewLine";
00355 $sRet .= $sExport;
00356
00357 $dSumNetPrice += $oOrderArt->oxorderarticles__oxnetprice->value;
00358 $dSumBrutPrice += $oOrderArt->oxorderarticles__oxbrutprice->value;
00359 }
00360
00361 $dDiscount = $oOrder->oxorder__oxvoucherdiscount->value + $oOrder->oxorder__oxdiscount->value;
00362 $dDelCost = $oOrder->oxorder__oxdelcost->value;
00363 $dPaymentCost = $oOrder->oxorder__oxpaycost->value;
00364 if ($dOrderCurRate > 0) {
00365 $dDiscount /= $dOrderCurRate;
00366 $dSumNetPrice /= $dOrderCurRate;
00367 $dDelCost /= $dOrderCurRate;
00368 $dSumBrutPrice /= $dOrderCurRate;
00369 $dPaymentCost /= $dOrderCurRate;
00370 }
00371 $sExport = "<GesamtRabatt>".$this->internPrice($dDiscount)."</GesamtRabatt>$sNewLine";
00372 $sExport .= "<GesamtNetto>".$this->internPrice($dSumNetPrice)."</GesamtNetto>$sNewLine";
00373 $sExport .= "<Lieferkosten>".$this->internPrice($dDelCost)."</Lieferkosten>$sNewLine";
00374 $sExport .= "<Zahlungsartkosten>".$this->internPrice($dPaymentCost)."</Zahlungsartkosten>$sNewLine";
00375 $sExport .= "<GesamtBrutto>".$this->internPrice($dSumBrutPrice)."</GesamtBrutto>$sNewLine";
00376 $sExport .= "<Bemerkung>".strip_tags( $oOrder->oxorder__oxremark->value)."</Bemerkung>$sNewLine";
00377 $sRet .= $sExport;
00378
00379 $sExport = "</Artikelliste>$sNewLine";
00380
00381 $sExport .= "<Zahlung>$sNewLine";
00382 $oPayment = oxNew( "oxpayment" );
00383 $oPayment->load( $oOrder->oxorder__oxpaymenttype->value);
00384
00385 $sExport .= "<Art>".$oPayment->oxpayments__oxdesc->value."</Art>$sNewLine";
00386 $sExport .= "</Zahlung>$sNewLine";
00387
00388 $sExport .= "</Bestellung>$sNewLine";
00389 $sRet .= $sExport;
00390
00391 $oOrder->oxorder__oxexport->setValue(1);
00392 $oOrder->save();
00393
00394 }
00395 $sExport = "</Bestellliste>$sNewLine";
00396 $sRet .= $sExport;
00397
00398 return $sRet;
00399 }
00400
00406 protected function _getCharset()
00407 {
00408 return oxLang::getInstance()->translateString( 'charset' );
00409 }
00410
00418 protected function _convertStr( $sStr )
00419 {
00420 $sCharset = $this->_getCharset();
00421
00422 if ( $sCharset == 'ISO-8859-15' ) {
00423 return $sStr;
00424 }
00425
00426 return $sStr = iconv( 'ISO-8859-15', $sCharset, $sStr );
00427 }
00428 }