00001 <?php
00002
00007 class oxImex extends oxBase
00008 {
00018 public function exportLexwareArticles( $iStart, $iLines, $sFilepath)
00019 {
00020 $myConfig = $this->getConfig();
00021 $oDb = oxDb::getDb();
00022
00023 $sArticleTable = getViewName('oxarticles');
00024
00025 $sSelect = "select count(oxid) from $sArticleTable ";
00026 $iSize = (int) $oDb->getOne( $sSelect );
00027
00028 if ( $iStart < $iSize) {
00029 $fp = fopen( $sFilepath, "ab");
00030 if ( !$iStart) {
00031
00032 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");
00033 }
00034 $oldMode = $oDb->setFetchMode( oxDb::FETCH_MODE_ASSOC );
00035 $sSelect = "select * from $sArticleTable ";
00036 $rs = $oDb->selectLimit( $sSelect, $iLines, $iStart);
00037 $oDb->setFetchMode( $oldMode);
00038
00039 while (!$rs->EOF) {
00040 $oArticle = oxNew( "oxarticle" );
00041 $blAdmin = $this->isAdmin();
00042
00043 $this->setAdminMode( false );
00044 $oArticle->load( $rs->fields['OXID']);
00045 $this->setAdminMode( $blAdmin );
00046
00047 $sSelect = "select oxtitle from ".$oArticle->getViewName()." where oxid = " . $oDb->quote( $oArticle->oxarticles__oxparentid->value );
00048 $oTitle = $oDb->getOne( $sSelect );
00049 if ($oTitle != false && strlen ($oTitle)) {
00050 $nTitle = $this->interForm($oTitle);
00051 } else {
00052 $nTitle = $this->interForm($oArticle->oxarticles__oxtitle->value);
00053 }
00054
00055
00056 $sToFile = $oArticle->oxarticles__oxartnum->value
00057
00058 .";".$nTitle." ".$this->interForm($oArticle->oxarticles__oxvarselect->value)
00059 .";"."Stueck"
00060 .";".$oArticle->oxarticles__oxweight->value
00061 .";".$oArticle->oxarticles__oxartnum->value
00062 .";"."1,000"
00063 .";"
00064 .";"
00065 .";"
00066 .";"
00067 .";"
00068 .";"
00069 .";".number_format($oArticle->oxarticles__oxprice->value, 2, '.', '')
00070 .";"
00071 .";"
00072 .";"
00073 .";"
00074 .";"
00075 .";"
00076 .";"
00077 .";"
00078 .";"
00079 .";"
00080 .";"
00081 .";"
00082 .";"
00083
00084
00085 .";".number_format($oArticle->oxarticles__oxbprice->value, 2, '.', '')
00086 .";"
00087 .";"
00088 .";"
00089 .";"
00090 .";"
00091 .";"
00092 .";"
00093 .";"
00094 .";"
00095 .";"
00096 .";"
00097 .";"
00098 .";"
00099 .";"
00100 .";".$oArticle->oxarticles__oxstock->value
00101 .";"
00102 .";"
00103 .";"
00104 .";"
00105 .";1"
00106 .";".$this->interForm( $oArticle->oxarticles__oxshortdesc->value.$oArticle->getLongDesc())
00107 .";";
00108 $sToFile .= "\r\n";
00109
00110 fwrite( $fp, $sToFile);
00111 $rs->moveNext();
00112 }
00113
00114 fclose( $fp );
00115 return true;
00116 }
00117
00118 return false;
00119
00120 }
00121
00129 function interFormSimple( $nValue )
00130 {
00131 $nValue = str_replace( "\r", "", $nValue );
00132 $nValue = str_replace( "\n", " ", $nValue );
00133 $nValue = str_replace( '"', '""', $nValue );
00134 return $nValue;
00135 }
00136
00146 function interForm( $nValue, $oObj = null)
00147 {
00148
00149
00150 $aFieldTypesToSkip = array("text", "oxshortdesc", "oxlongdesc");
00151 $blSkipStrpTags = false;
00152 if ( $oObj != null) {
00153
00154
00155
00156
00157
00158
00159 if ( in_array( $oObj->fldtype, $aFieldTypesToSkip ) || in_array( $oObj->fldname, $aFieldTypesToSkip ) ) {
00160 $blSkipStripTags = true;
00161 }
00162 }
00163
00164
00165
00166
00167 $oStr = getStr();
00168 if ( $oStr->strpos( $nValue, "&" ) !== false && $oStr->strpos($nValue, ";" ) == false ) {
00169 $nValue = str_replace("&", "&", $nValue);
00170 }
00171
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 $nValue = str_replace( "Ü", "�", $nValue);
00179 $nValue = str_replace( "ß", "�", $nValue);
00180
00181
00182
00183
00184 $nValue = str_replace( "& ", "& ", $nValue);
00185
00186 $nValue = str_replace( "\"", "'", $nValue);
00187 $nValue = str_replace( "(", "'", $nValue);
00188 $nValue = str_replace( ")", "'", $nValue);
00189 $nValue = str_replace( "\r\n", "", $nValue);
00190 $nValue = str_replace( "\n", "", $nValue);
00191
00192 if ( !$blSkipStripTags) {
00193 $nValue = strip_tags( $nValue );
00194 }
00195
00196 return $nValue;
00197 }
00198
00206 function internPrice( $nPrice)
00207 {
00208 $nPrice = $this->interForm($nPrice);
00209 $nPrice = number_format( (double)$nPrice, 2, '.', '');
00210 return $nPrice;
00211 }
00212
00221 function exportLexwareOrders( $iFromOrderNr = "", $iToOrderNr = "")
00222 {
00223
00224 $myConfig = $this->getConfig();
00225
00226 $sNewLine = "\r\n";
00227
00228 $sSelect = "select * from oxorder where 1 ";
00229
00230 if ( $iFromOrderNr !== "" ) {
00231 $iFromOrderNr = (int)$iFromOrderNr;
00232 $sSelect .= "and oxordernr >= $iFromOrderNr ";
00233 }
00234
00235 if ( $iToOrderNr !== "" ) {
00236 $iToOrderNr = (int)$iToOrderNr;
00237 $sSelect .= "and oxordernr <= $iToOrderNr ";
00238 }
00239
00240 $oOrderlist = oxNew( "oxlist" );
00241 $oOrderlist->init( "oxorder" );
00242 $oOrderlist->selectString( $sSelect );
00243
00244 if ( !$oOrderlist->count() ) {
00245 return null;
00246 }
00247
00248 $sCharset = $this->_getCharset();
00249
00250 $sExport = "<?xml version=\"1.0\" encoding=\"{$sCharset}\"?>$sNewLine";
00251 $sExport .= "<Bestellliste>$sNewLine";
00252 $sRet = $sExport;
00253
00254 foreach ( $oOrderlist as $oOrder ) {
00255
00256 $dOrderCurRate = (double)$oOrder->oxorder__oxcurrate->value;
00257
00258 $oUser = oxNew( "oxuser" );
00259 $oUser->load( $oOrder->oxorder__oxuserid->value );
00260
00261 $sExport = "<Bestellung " . $this->_convertStr( "zur�ckgestellt" ) . "=\"Nein\" bearbeitet=\"Nein\" " . $this->_convertStr( "�bertragen" ) . "=\"Nein\">$sNewLine";
00262 $sExport .= "<Bestellnummer>".$oOrder->oxorder__oxordernr->value."</Bestellnummer>$sNewLine";
00263 $sExport .= "<Rechnungsnummer>".$oOrder->oxorder__oxbillnr->value."</Rechnungsnummer>$sNewLine";
00264 $sExport .= "<Standardwaehrung>978</Standardwaehrung>$sNewLine";
00265 $sExport .= "<Bestelldatum>$sNewLine";
00266 $sDBDate = oxRegistry::get("oxUtilsDate")->formatDBDate($oOrder->oxorder__oxorderdate->value);
00267 $sExport .= "<Datum>".substr($sDBDate, 0, 10)."</Datum>$sNewLine";
00268 $sExport .= "<Zeit>".substr($sDBDate, 11, 8)."</Zeit>$sNewLine";
00269 $sExport .= "</Bestelldatum>$sNewLine";
00270 $sExport .= "<Kunde>$sNewLine";
00271
00272 $sExport .= "<Kundennummer>"."</Kundennummer>$sNewLine";
00273 $sExport .= "<Firmenname>".$this->interForm($oOrder->oxorder__oxbillcompany->value)."</Firmenname>$sNewLine";
00274 $sExport .= "<Anrede>".$this->interForm(oxRegistry::getLang()->translateString($oOrder->oxorder__oxbillsal->value))."</Anrede>$sNewLine";
00275 $sExport .= "<Vorname>".$this->interForm($oOrder->oxorder__oxbillfname->value)."</Vorname>$sNewLine";
00276 $sExport .= "<Name>".$this->interForm($oOrder->oxorder__oxbilllname->value)."</Name>$sNewLine";
00277 $sExport .= "<Strasse>".$this->interForm($oOrder->oxorder__oxbillstreet->value)." ".$this->interForm($oOrder->oxorder__oxbillstreetnr->value)."</Strasse>$sNewLine";
00278 $sExport .= "<PLZ>".$this->interForm($oOrder->oxorder__oxbillzip->value)."</PLZ>$sNewLine";
00279 $sExport .= "<Ort>".$this->interForm($oOrder->oxorder__oxbillcity->value)."</Ort>$sNewLine";
00280 $sExport .= "<Bundesland>".""."</Bundesland>$sNewLine";
00281 $sExport .= "<Land>".$this->interForm($oOrder->oxorder__oxbillcountry->value)."</Land>$sNewLine";
00282 $sExport .= "<Email>".$this->interForm($oOrder->oxorder__oxbillemail->value)."</Email>$sNewLine";
00283 $sExport .= "<Telefon>".$this->interForm($oOrder->oxorder__oxbillfon->value)."</Telefon>$sNewLine";
00284 $sExport .= "<Telefon2>".$this->interForm($oUser->oxuser__oxprivfon->value)."</Telefon2>$sNewLine";
00285 $sExport .= "<Fax>".$this->interForm($oOrder->oxorder__oxbillfax->value)."</Fax>$sNewLine";
00286
00287 $sDelComp = "";
00288 $sDelfName = "";
00289 $sDellName = "";
00290 $sDelStreet = "";
00291 $sDelZip = "";
00292 $sDelCity = "";
00293 $sDelCountry = "";
00294
00295
00296 if ( $oOrder->oxorder__oxdellname->value) {
00297 $sDelComp = $oOrder->oxorder__oxdelcompany->value;
00298 $sDelfName = $oOrder->oxorder__oxdelfname->value;
00299 $sDellName = $oOrder->oxorder__oxdellname->value;
00300 $sDelStreet = $oOrder->oxorder__oxdelstreet->value." ".$oOrder->oxorder__oxdelstreetnr->value;
00301 $sDelZip = $oOrder->oxorder__oxdelzip->value;
00302 $sDelCity = $oOrder->oxorder__oxdelcity->value;
00303 $sDelCountry= $oOrder->oxorder__oxdelcountry->value;
00304 }
00305
00306 $sExport .= "<Lieferadresse>$sNewLine";
00307 $sExport .= "<Firmenname>".$this->interForm($sDelComp)."</Firmenname>$sNewLine";
00308 $sExport .= "<Vorname>".$this->interForm($sDelfName)."</Vorname>$sNewLine";
00309 $sExport .= "<Name>".$this->interForm($sDellName)."</Name>$sNewLine";
00310 $sExport .= "<Strasse>".$this->interForm($sDelStreet)."</Strasse>$sNewLine";
00311 $sExport .= "<PLZ>".$this->interForm($sDelZip)."</PLZ>$sNewLine";
00312 $sExport .= "<Ort>".$this->interForm($sDelCity)."</Ort>$sNewLine";
00313 $sExport .= "<Bundesland>".""."</Bundesland>$sNewLine";
00314 $sExport .= "<Land>".$this->interForm($sDelCountry)."</Land>$sNewLine";
00315 $sExport .= "</Lieferadresse>$sNewLine";
00316 $sExport .= "<Matchcode>".$this->interForm($oOrder->oxorder__oxbilllname->value).", ".$this->interForm($oOrder->oxorder__oxbillfname->value)."</Matchcode>$sNewLine";
00317
00318
00319 $sCountry = strtolower( $oUser->oxuser__oxcountryid->value );
00320 $aHomeCountry = $myConfig->getConfigParam( 'aHomeCountry' );
00321 $sSteuerbar = ( is_array( $aHomeCountry ) && in_array( $sCountry, $aHomeCountry ) ) ? "ja" : "nein";
00322
00323 $sExport .= "<fSteuerbar>".$this->interForm( $sSteuerbar )."</fSteuerbar>$sNewLine";
00324 $sExport .= "</Kunde>$sNewLine";
00325 $sExport .= "<Artikelliste>$sNewLine";
00326 $sRet .= $sExport;
00327
00328 $dSumNetPrice = 0;
00329 $dSumBrutPrice = 0;
00330
00331 $oOrderArticles = $oOrder->getOrderArticles( true );
00332 foreach ($oOrderArticles as $oOrderArt) {
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 $sExport = "</Bestellliste>$sNewLine";
00395 $sRet .= $sExport;
00396
00397 return $sRet;
00398 }
00399
00405 protected function _getCharset()
00406 {
00407 return oxRegistry::getLang()->translateString( 'charset' );
00408 }
00409
00417 protected function _convertStr( $sStr )
00418 {
00419 $sCharset = $this->_getCharset();
00420
00421 if ( $sCharset == 'ISO-8859-15' ) {
00422 return $sStr;
00423 }
00424
00425 return $sStr = iconv( 'ISO-8859-15', $sCharset, $sStr );
00426 }
00427 }