oximex.php

Go to the documentation of this file.
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                 // first time, write header
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                 // TODO: this place could be optimized. please check what we can do.
00041                 $this->setAdminMode( false );
00042                 $oArticle->load( $rs->fields['OXID']);
00043                 $this->setAdminMode( $blAdmin );
00044 
00045                 $sSelect = "select oxtitle from ".$oArticle->getViewName()." 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            // Artikelnummer
00055                 //.";".$this->interForm($oArticle->oxarticles__oxshortdesc->value." ".$oArticle->oxarticles__oxvarselect->value) // Bezeichnung
00056                 .";".$nTitle." ".$this->interForm($oArticle->oxarticles__oxvarselect->value) // Bezeichnung
00057                 .";"."Stueck"                        // Einheit
00058                 .";".$oArticle->oxarticles__oxweight->value                  // Gewicht
00059                 .";".$oArticle->oxarticles__oxartnum->value                  // Matchcode
00060                 .";"."1,000"                         // Preis pro Anzahl
00061                 .";"                                  // Warengruppe
00062                 .";"                                  // Warengr.-Kurzbez.
00063                 .";"                                 // Warengr.-Steuersatz
00064                 .";"                                  // Warengr.-Konto Inland
00065                 .";"                                  // Warengr.-Konto Ausland
00066                 .";"                                  // Warengr.-Konto EG
00067                 .";".number_format($oArticle->oxarticles__oxprice->value, 2, '.', '')  // Preis 1
00068                 .";"                                  // Preis 2
00069                 .";"                                 // Preis 3
00070                 .";"                                 // Preis I/1
00071                 .";"                                 // Preis I/2
00072                 .";"                                  // Preis I/3
00073                 .";"                                  // Preis II/1
00074                 .";"                                  // Preis II/2
00075                 .";"                                  // Preis II/3
00076                 .";"                                  // Preis III/1
00077                 .";"                                  // Preis III/2
00078                 .";"                                  // Preis III/3
00079                 .";"                           // B/N
00080                 .";"                           // Lagerartikel
00081                 //.";".number_format($oArticle->oxarticles__oxtprice->value, 2, '.', '')// EK 1
00082                 // #343 fix
00083                 .";".number_format($oArticle->oxarticles__oxbprice->value, 2, '.', '')// EK 1
00084                 .";"                           // W�hrung EK1
00085                 .";"                           // EK 2
00086                 .";"                           // W�hrung EK2
00087                 .";"                           // Staffelmenge 1
00088                 .";"                           // Staffelmenge 2
00089                 .";"                           // Staffelmenge 3
00090                 .";"                           // Lieferantennummer 1
00091                 .";"                           // Lieferantennummer 2
00092                 .";"                           // Bestellmenge Lf.1
00093                 .";"                           // Bestellmenge Lf.2
00094                 .";"                           // Bestellnr. Lf.1
00095                 .";"                           // Bestellnr. Lf.2
00096                 .";"                           // Lieferzeit Lf.1
00097                 .";"                           // Lieferzeit Lf.2
00098                 .";".$oArticle->oxarticles__oxstock->value           // Lagerbestand
00099                 .";"                           // Mindestbestand
00100                 .";"                           // Lagerort
00101                 .";"                           // Bestellte Menge
00102                 .";"                           // St�ckliste
00103                 .";1"                              // Internet
00104                 .";".$this->interForm( $oArticle->oxarticles__oxshortdesc->value.$oArticle->getLongDesc())// Text
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     {   // thnx to Volker D�rk for this function and his help here
00146 
00147         // #387A skipping conversion for fields where info must be passed in original format
00148         $aFieldTypesToSkip = array("text", "oxshortdesc", "oxlongdesc");
00149         $blSkipStrpTags = false;
00150         if ( $oObj != null) {
00151             // using object field "fldtype", to skip processing because usually
00152             // this type of field is used for HTML text
00153             //
00154             // you may change field to "fldname" and add to $aFieldTypesToSkip
00155             // "oxlongdesc" value to skip only longdesc field
00156             //
00157             if ( in_array( $oObj->fldtype, $aFieldTypesToSkip ) || in_array( $oObj->fldname, $aFieldTypesToSkip ) ) {
00158                 $blSkipStripTags = true;
00159             }
00160         }
00161 
00162         //removing simple & (and not  &uuml; chars)
00163         //(not full just a simple check for existing customers for cases like Johnson&Johnson)
00164 
00165         $oStr = getStr();
00166         if ( $oStr->strpos( $nValue, "&" ) !== false && $oStr->strpos($nValue, ";" ) == false ) {
00167             $nValue = str_replace("&", "&amp;", $nValue);
00168         }
00169 
00170         $nValue = str_replace( "&nbsp;", " ", $nValue);
00171         $nValue = str_replace( "&auml;", "�", $nValue);
00172         $nValue = str_replace( "&ouml;", "�", $nValue);
00173         $nValue = str_replace( "&uuml;", "�", $nValue);
00174         $nValue = str_replace( "&Auml;", "�", $nValue);
00175         $nValue = str_replace( "&Ouml;", "�", $nValue);
00176         $nValue = str_replace( "&Uuml;", "�", $nValue);
00177         $nValue = str_replace( "&szlig;", "�", $nValue);
00178 
00179         // usually & symbol goes (or should go) like that:
00180         // "& text...", so we predict that this is a rule
00181         // and replace it with special HTML code
00182         $nValue = str_replace( "& ", "&amp; ", $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     {  // thnx to Volker D�rk for this function and his help here
00206         $nPrice = $this->interForm($nPrice);
00207         $nPrice = number_format( (double)$nPrice, 2, '.', '');
00208         return $nPrice;
00209     }
00210 
00219     function exportLexwareOrders( $iFromOrderNr = "", $iToOrderNr = "")
00220     {
00221         // thnx to Volker D�rk for this function and his help here
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 as $oOrder ) {
00253             // Convert each amount of money with currency rate of the order
00254             $dOrderCurRate = (double)$oOrder->oxorder__oxcurrate->value;
00255 
00256             $oUser = oxNew( "oxuser" );
00257             $oUser->load( $oOrder->oxorder__oxuserid->value );
00258 
00259             $sExport  = "<Bestellung " . $this->_convertStr( "zur�ckgestellt" ) . "=\"Nein\" bearbeitet=\"Nein\" " . $this->_convertStr( "�bertragen" ) . "=\"Nein\">$sNewLine";
00260             $sExport .= "<Bestellnummer>".$oOrder->oxorder__oxordernr->value."</Bestellnummer>$sNewLine";
00261             $sExport .= "<Rechnungsnummer>".$oOrder->oxorder__oxbillnr->value."</Rechnungsnummer>$sNewLine";
00262             $sExport .= "<Standardwaehrung>978</Standardwaehrung>$sNewLine";
00263             $sExport .= "<Bestelldatum>$sNewLine";
00264             $sDBDate = oxUtilsDate::getInstance()->formatDBDate($oOrder->oxorder__oxorderdate->value);
00265             $sExport .= "<Datum>".substr($sDBDate, 0, 10)."</Datum>$sNewLine";
00266             $sExport .= "<Zeit>".substr($sDBDate, 11, 8)."</Zeit>$sNewLine";
00267             $sExport .= "</Bestelldatum>$sNewLine";
00268             $sExport .= "<Kunde>$sNewLine";
00269 
00270             $sExport .= "<Kundennummer>"./*$this->interForm($oUser->oxuser__oxcustnr->value).*/"</Kundennummer>$sNewLine";
00271             $sExport .= "<Firmenname>".$this->interForm($oOrder->oxorder__oxbillcompany->value)."</Firmenname>$sNewLine";
00272             $sExport .= "<Anrede>".$this->interForm(oxLang::getInstance()->translateString($oOrder->oxorder__oxbillsal->value))."</Anrede>$sNewLine";
00273             $sExport .= "<Vorname>".$this->interForm($oOrder->oxorder__oxbillfname->value)."</Vorname>$sNewLine";
00274             $sExport .= "<Name>".$this->interForm($oOrder->oxorder__oxbilllname->value)."</Name>$sNewLine";
00275             $sExport .= "<Strasse>".$this->interForm($oOrder->oxorder__oxbillstreet->value)." ".$this->interForm($oOrder->oxorder__oxbillstreetnr->value)."</Strasse>$sNewLine";
00276             $sExport .= "<PLZ>".$this->interForm($oOrder->oxorder__oxbillzip->value)."</PLZ>$sNewLine";
00277             $sExport .= "<Ort>".$this->interForm($oOrder->oxorder__oxbillcity->value)."</Ort>$sNewLine";
00278             $sExport .= "<Bundesland>".""."</Bundesland>$sNewLine";
00279             $sExport .= "<Land>".$this->interForm($oOrder->oxorder__oxbillcountry->value)."</Land>$sNewLine";
00280             $sExport .= "<Email>".$this->interForm($oOrder->oxorder__oxbillemail->value)."</Email>$sNewLine";
00281             $sExport .= "<Telefon>".$this->interForm($oOrder->oxorder__oxbillfon->value)."</Telefon>$sNewLine";
00282             $sExport .= "<Telefon2>".$this->interForm($oUser->oxuser__oxprivfon->value)."</Telefon2>$sNewLine";
00283             $sExport .= "<Fax>".$this->interForm($oOrder->oxorder__oxbillfax->value)."</Fax>$sNewLine";
00284 
00285             $sDelComp    = "";
00286             $sDelfName   = "";
00287             $sDellName   = "";
00288             $sDelStreet  = "";
00289             $sDelZip     = "";
00290             $sDelCity    = "";
00291             $sDelCountry = "";
00292 
00293             // lieferadresse
00294             if ( $oOrder->oxorder__oxdellname->value) {
00295                 $sDelComp   = $oOrder->oxorder__oxdelcompany->value;
00296                 $sDelfName  = $oOrder->oxorder__oxdelfname->value;
00297                 $sDellName  = $oOrder->oxorder__oxdellname->value;
00298                 $sDelStreet = $oOrder->oxorder__oxdelstreet->value." ".$oOrder->oxorder__oxdelstreetnr->value;
00299                 $sDelZip    = $oOrder->oxorder__oxdelzip->value;
00300                 $sDelCity   = $oOrder->oxorder__oxdelcity->value;
00301                 $sDelCountry= $oOrder->oxorder__oxdelcountry->value;
00302             }
00303 
00304             $sExport .= "<Lieferadresse>$sNewLine";
00305             $sExport .= "<Firmenname>".$this->interForm($sDelComp)."</Firmenname>$sNewLine";
00306             $sExport .= "<Vorname>".$this->interForm($sDelfName)."</Vorname>$sNewLine";
00307             $sExport .= "<Name>".$this->interForm($sDellName)."</Name>$sNewLine";
00308             $sExport .= "<Strasse>".$this->interForm($sDelStreet)."</Strasse>$sNewLine";
00309             $sExport .= "<PLZ>".$this->interForm($sDelZip)."</PLZ>$sNewLine";
00310             $sExport .= "<Ort>".$this->interForm($sDelCity)."</Ort>$sNewLine";
00311             $sExport .= "<Bundesland>".""."</Bundesland>$sNewLine";
00312             $sExport .= "<Land>".$this->interForm($sDelCountry)."</Land>$sNewLine";
00313             $sExport .= "</Lieferadresse>$sNewLine";
00314             $sExport .= "<Matchcode>".$this->interForm($oOrder->oxorder__oxbilllname->value).", ".$this->interForm($oOrder->oxorder__oxbillfname->value)."</Matchcode>$sNewLine";
00315 
00316             // ermitteln ob steuerbar oder nicht
00317             $sCountry = strtolower( $oUser->oxuser__oxcountryid->value );
00318             $aHomeCountry = $myConfig->getConfigParam( 'aHomeCountry' );
00319             $sSteuerbar = ( is_array( $aHomeCountry ) && in_array( $sCountry, $aHomeCountry ) ) ? "ja" : "nein";
00320 
00321             $sExport .= "<fSteuerbar>".$this->interForm( $sSteuerbar )."</fSteuerbar>$sNewLine";
00322             $sExport .= "</Kunde>$sNewLine";
00323             $sExport .= "<Artikelliste>$sNewLine";
00324             $sRet .= $sExport;
00325 
00326             $dSumNetPrice = 0;
00327             $dSumBrutPrice = 0;
00328 
00329             $oOrderArticles = $oOrder->getOrderArticles();
00330             foreach ($oOrderArticles as $oOrderArt) {
00331 
00332                 $dVATSet = array_search( $oOrderArt->oxorderarticles__oxvat->value, $myConfig->getConfigParam( 'aLexwareVAT' ) );
00333                 $sExport  = "   <Artikel>$sNewLine";
00334                 //$sExport .= "   <Artikelzusatzinfo><Nettostaffelpreis>".$this->InternPrice( $oOrderArt->oxorderarticles__oxnetprice->value)."</Nettostaffelpreis></Artikelzusatzinfo>$sNewLine";
00335                 $sExport .= "   <Artikelzusatzinfo><Nettostaffelpreis></Nettostaffelpreis></Artikelzusatzinfo>$sNewLine";
00336                 $sExport .= "   <SteuersatzID>".$dVATSet."</SteuersatzID>$sNewLine";
00337                 $sExport .= "   <Steuersatz>".$this->internPrice($oOrderArt->oxorderarticles__oxvat->value/100)."</Steuersatz>$sNewLine";
00338                 $sExport .= "   <Artikelnummer>".$oOrderArt->oxorderarticles__oxartnum->value."</Artikelnummer>$sNewLine";
00339                 $sExport .= "   <Anzahl>".$oOrderArt->oxorderarticles__oxamount->value."</Anzahl>$sNewLine";
00340                 $sExport .= "   <Produktname>".$this->interForm( $oOrderArt->oxorderarticles__oxtitle->value);
00341                 if ( $oOrderArt->oxorderarticles__oxselvariant->value) {
00342                     $sExport .= "/".$oOrderArt->oxorderarticles__oxselvariant->value;
00343                 }
00344                 $sExport .= "   </Produktname>$sNewLine";
00345                 $sExport .= "   <Rabatt>0.00</Rabatt>$sNewLine";
00346 
00347                 $dUnitPrice = $oOrderArt->oxorderarticles__oxbrutprice->value/$oOrderArt->oxorderarticles__oxamount->value;
00348                 if ($dOrderCurRate > 0) {
00349                     $dUnitPrice /= $dOrderCurRate;
00350                 }
00351                 $sExport .= "   <Preis>".$this->internPrice($dUnitPrice)."</Preis>$sNewLine";
00352                 $sExport .= "   </Artikel>$sNewLine";
00353                 $sRet .= $sExport;
00354 
00355                 $dSumNetPrice   += $oOrderArt->oxorderarticles__oxnetprice->value;
00356                 $dSumBrutPrice  += $oOrderArt->oxorderarticles__oxbrutprice->value;
00357             }
00358 
00359             $dDiscount = $oOrder->oxorder__oxvoucherdiscount->value + $oOrder->oxorder__oxdiscount->value;
00360             $dDelCost = $oOrder->oxorder__oxdelcost->value;
00361             $dPaymentCost = $oOrder->oxorder__oxpaycost->value;
00362             if ($dOrderCurRate > 0) {
00363                 $dDiscount /= $dOrderCurRate;
00364                 $dSumNetPrice /= $dOrderCurRate;
00365                 $dDelCost /= $dOrderCurRate;
00366                 $dSumBrutPrice /= $dOrderCurRate;
00367                 $dPaymentCost /= $dOrderCurRate;
00368             }
00369             $sExport  = "<GesamtRabatt>".$this->internPrice($dDiscount)."</GesamtRabatt>$sNewLine";
00370             $sExport .= "<GesamtNetto>".$this->internPrice($dSumNetPrice)."</GesamtNetto>$sNewLine";
00371             $sExport .= "<Lieferkosten>".$this->internPrice($dDelCost)."</Lieferkosten>$sNewLine";
00372             $sExport .= "<Zahlungsartkosten>".$this->internPrice($dPaymentCost)."</Zahlungsartkosten>$sNewLine";
00373             $sExport .= "<GesamtBrutto>".$this->internPrice($dSumBrutPrice)."</GesamtBrutto>$sNewLine";
00374             $sExport .= "<Bemerkung>".strip_tags( $oOrder->oxorder__oxremark->value)."</Bemerkung>$sNewLine";
00375             $sRet .= $sExport;
00376 
00377             $sExport  = "</Artikelliste>$sNewLine";
00378 
00379             $sExport .= "<Zahlung>$sNewLine";
00380             $oPayment = oxNew( "oxpayment" );
00381             $oPayment->load( $oOrder->oxorder__oxpaymenttype->value);
00382 
00383             $sExport .= "<Art>".$oPayment->oxpayments__oxdesc->value."</Art>$sNewLine";
00384             $sExport .= "</Zahlung>$sNewLine";
00385 
00386             $sExport .= "</Bestellung>$sNewLine";
00387             $sRet .= $sExport;
00388 
00389             $oOrder->oxorder__oxexport->setValue(1);
00390             $oOrder->save();
00391         }
00392         $sExport = "</Bestellliste>$sNewLine";
00393         $sRet .= $sExport;
00394 
00395         return $sRet;
00396     }
00397 
00403     protected function _getCharset()
00404     {
00405         return oxLang::getInstance()->translateString( 'charset' );
00406     }
00407 
00415     protected function _convertStr( $sStr )
00416     {
00417         $sCharset = $this->_getCharset();
00418 
00419         if ( $sCharset == 'ISO-8859-15' ) {
00420             return $sStr;
00421         }
00422 
00423         return $sStr = iconv( 'ISO-8859-15', $sCharset, $sStr );
00424     }
00425 }