oximex.php

Go to the documentation of this file.
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                 // first time, write header
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                 // TODO: this place could be optimized. please check what we can do.
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            // Artikelnummer
00057                 //.";".$this->interForm($oArticle->oxarticles__oxshortdesc->value." ".$oArticle->oxarticles__oxvarselect->value) // Bezeichnung
00058                 .";".$nTitle." ".$this->interForm($oArticle->oxarticles__oxvarselect->value) // Bezeichnung
00059                 .";"."Stueck"                        // Einheit
00060                 .";".$oArticle->oxarticles__oxweight->value                  // Gewicht
00061                 .";".$oArticle->oxarticles__oxartnum->value                  // Matchcode
00062                 .";"."1,000"                         // Preis pro Anzahl
00063                 .";"                                  // Warengruppe
00064                 .";"                                  // Warengr.-Kurzbez.
00065                 .";"                                 // Warengr.-Steuersatz
00066                 .";"                                  // Warengr.-Konto Inland
00067                 .";"                                  // Warengr.-Konto Ausland
00068                 .";"                                  // Warengr.-Konto EG
00069                 .";".number_format($oArticle->oxarticles__oxprice->value, 2, '.', '')  // Preis 1
00070                 .";"                                  // Preis 2
00071                 .";"                                 // Preis 3
00072                 .";"                                 // Preis I/1
00073                 .";"                                 // Preis I/2
00074                 .";"                                  // Preis I/3
00075                 .";"                                  // Preis II/1
00076                 .";"                                  // Preis II/2
00077                 .";"                                  // Preis II/3
00078                 .";"                                  // Preis III/1
00079                 .";"                                  // Preis III/2
00080                 .";"                                  // Preis III/3
00081                 .";"                           // B/N
00082                 .";"                           // Lagerartikel
00083                 //.";".number_format($oArticle->oxarticles__oxtprice->value, 2, '.', '')// EK 1
00084                 // #343 fix
00085                 .";".number_format($oArticle->oxarticles__oxbprice->value, 2, '.', '')// EK 1
00086                 .";"                           // W�hrung EK1
00087                 .";"                           // EK 2
00088                 .";"                           // W�hrung EK2
00089                 .";"                           // Staffelmenge 1
00090                 .";"                           // Staffelmenge 2
00091                 .";"                           // Staffelmenge 3
00092                 .";"                           // Lieferantennummer 1
00093                 .";"                           // Lieferantennummer 2
00094                 .";"                           // Bestellmenge Lf.1
00095                 .";"                           // Bestellmenge Lf.2
00096                 .";"                           // Bestellnr. Lf.1
00097                 .";"                           // Bestellnr. Lf.2
00098                 .";"                           // Lieferzeit Lf.1
00099                 .";"                           // Lieferzeit Lf.2
00100                 .";".$oArticle->oxarticles__oxstock->value           // Lagerbestand
00101                 .";"                           // Mindestbestand
00102                 .";"                           // Lagerort
00103                 .";"                           // Bestellte Menge
00104                 .";"                           // St�ckliste
00105                 .";1"                              // Internet
00106                 .";".$this->interForm( $oArticle->oxarticles__oxshortdesc->value.$oArticle->getLongDesc())// Text
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     {   // thnx to Volker D�rk for this function and his help here
00148 
00149         // #387A skipping conversion for fields where info must be passed in original format
00150         $aFieldTypesToSkip = array("text", "oxshortdesc", "oxlongdesc");
00151         $blSkipStrpTags = false;
00152         if ( $oObj != null) {
00153             // using object field "fldtype", to skip processing because usually
00154             // this type of field is used for HTML text
00155             //
00156             // you may change field to "fldname" and add to $aFieldTypesToSkip
00157             // "oxlongdesc" value to skip only longdesc field
00158             //
00159             if ( in_array( $oObj->fldtype, $aFieldTypesToSkip ) || in_array( $oObj->fldname, $aFieldTypesToSkip ) ) {
00160                 $blSkipStripTags = true;
00161             }
00162         }
00163 
00164         //removing simple & (and not  &uuml; chars)
00165         //(not full just a simple check for existing customers for cases like Johnson&Johnson)
00166 
00167         $oStr = getStr();
00168         if ( $oStr->strpos( $nValue, "&" ) !== false && $oStr->strpos($nValue, ";" ) == false ) {
00169             $nValue = str_replace("&", "&amp;", $nValue);
00170         }
00171 
00172         $nValue = str_replace( "&nbsp;", " ", $nValue);
00173         $nValue = str_replace( "&auml;", "�", $nValue);
00174         $nValue = str_replace( "&ouml;", "�", $nValue);
00175         $nValue = str_replace( "&uuml;", "�", $nValue);
00176         $nValue = str_replace( "&Auml;", "�", $nValue);
00177         $nValue = str_replace( "&Ouml;", "�", $nValue);
00178         $nValue = str_replace( "&Uuml;", "�", $nValue);
00179         $nValue = str_replace( "&szlig;", "�", $nValue);
00180 
00181         // usually & symbol goes (or should go) like that:
00182         // "& text...", so we predict that this is a rule
00183         // and replace it with special HTML code
00184         $nValue = str_replace( "& ", "&amp; ", $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     {  // thnx to Volker D�rk for this function and his help here
00208         $nPrice = $this->interForm($nPrice);
00209         $nPrice = number_format( (double)$nPrice, 2, '.', '');
00210         return $nPrice;
00211     }
00212 
00221     function exportLexwareOrders( $iFromOrderNr = "", $iToOrderNr = "")
00222     {
00223         // thnx to Volker D�rk for this function and his help here
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             // Convert each amount of money with currency rate of the order
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>"./*$this->interForm($oUser->oxuser__oxcustnr->value).*/"</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             // lieferadresse
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             // ermitteln ob steuerbar oder nicht
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                 //$sExport .= "   <Artikelzusatzinfo><Nettostaffelpreis>".$this->InternPrice( $oOrderArt->oxorderarticles__oxnetprice->value)."</Nettostaffelpreis></Artikelzusatzinfo>$sNewLine";
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 }