Go to the documentation of this file.00001 <?php
00002
00008 class Order_Article extends oxAdminDetails
00009 {
00015 protected $_oSearchProduct = null;
00016
00024 protected $_oSearchProductList = null;
00025
00031 protected $_oMainSearchProduct = null;
00032
00038 protected $_oEditObject = null;
00039
00047 public function render()
00048 {
00049 parent::render();
00050
00051 if ( $oOrder = $this->getEditObject() ) {
00052 $this->_aViewData["edit"] = $oOrder;
00053 $this->_aViewData["aProductVats"] = $oOrder->getProductVats();
00054 }
00055
00056 return "order_article.tpl";
00057 }
00058
00064 public function getEditObject()
00065 {
00066 $soxId = oxConfig::getParameter( "oxid" );
00067 if ( $this->_oEditObject === null && isset( $soxId ) && $soxId != "-1" ) {
00068 $this->_oEditObject = oxNew( "oxorder" );
00069 $this->_oEditObject->load( $soxId );
00070 }
00071 return $this->_oEditObject;
00072 }
00073
00079 public function getSearchProductArtNr()
00080 {
00081 return oxConfig::getParameter( 'sSearchArtNum' );
00082 }
00083
00089 public function getSearchProduct()
00090 {
00091 if ( $this->_oSearchProduct === null ) {
00092 $this->_oSearchProduct = false;
00093 $sSearchArtNum = $this->getSearchProductArtNr();
00094
00095 foreach ( $this->getProductList() as $oProduct ) {
00096 if ( $oProduct->oxarticles__oxartnum->value == $sSearchArtNum ) {
00097 $this->_oSearchProduct = $oProduct;
00098 break;
00099 }
00100 }
00101 }
00102
00103 return $this->_oSearchProduct;
00104 }
00105
00111 public function getMainProduct()
00112 {
00113 if ( $this->_oMainSearchProduct === null && ( $sArtNum = $this->getSearchProductArtNr() ) ) {
00114 $this->_oMainSearchProduct = false;
00115 $sArtId = null;
00116
00117
00118 $oDb = oxDb::getDb(true);
00119 $sQ = "select oxid, oxparentid from oxarticles where oxarticles.oxartnum = ".$oDb->quote( $sArtNum )." limit 1";
00120 $rs = $oDb->execute( $sQ );
00121 if ($rs != false && $rs->recordCount() > 0) {
00122 $sArtId = $rs->fields['oxparentid'] ? $rs->fields['oxparentid'] : $rs->fields['oxid'];
00123 $oProduct = oxNew( "oxarticle" );
00124 if ( $oProduct->load( $sArtId ) ) {
00125 $this->_oMainSearchProduct = $oProduct;
00126 }
00127 }
00128 }
00129
00130 return $this->_oMainSearchProduct;
00131 }
00132
00138 public function getProductList()
00139 {
00140 if ( $this->_oSearchProductList === null ) {
00141 $this->_oSearchProductList = oxNew( "oxlist" );
00142
00143
00144 if ( $oMainSearchProduct = $this->getMainProduct() ) {
00145
00146 $this->_oSearchProductList->offsetSet( $oMainSearchProduct->getId(), $oMainSearchProduct );
00147
00148
00149 foreach ( $oMainSearchProduct->getVariants() as $oVariant ) {
00150 $this->_oSearchProductList->offsetSet( $oVariant->getId(), $oVariant );
00151 }
00152 }
00153 }
00154
00155 return $this->_oSearchProductList;
00156 }
00157
00163 public function addThisArticle()
00164 {
00165 $sOxid = oxConfig::getParameter( 'aid' );
00166 $dAmount = oxConfig::getParameter( 'am' );
00167 $oProduct = oxNew( "oxarticle" );
00168
00169 if ( $sOxid && $dAmount && $oProduct->load( $sOxid ) ) {
00170
00171 $sOrderId = oxConfig::getParameter( 'oxid' );
00172 $oOrder = oxNew( 'oxorder' );
00173 if ( $sOrderId && $oOrder->load( $sOrderId ) ) {
00174 $oOrderArticle = oxNew( 'oxorderArticle' );
00175 $oOrderArticle->oxorderarticles__oxartid = new oxField( $oProduct->getId() );
00176 $oOrderArticle->oxorderarticles__oxartnum = new oxField( $oProduct->oxarticles__oxartnum->value );
00177 $oOrderArticle->oxorderarticles__oxamount = new oxField( $dAmount );
00178 $oOrderArticle->oxorderarticles__oxselvariant = new oxField( oxConfig::getParameter( 'sel' ) );
00179 $oOrder->recalculateOrder( array( $oOrderArticle ) );
00180 }
00181 }
00182 }
00183
00189 public function deleteThisArticle()
00190 {
00191
00192 $sOrderArtId = oxConfig::getParameter( 'sArtID' );
00193 $sOrderId = oxConfig::getParameter( 'oxid' );
00194
00195 $oOrderArticle = oxNew( 'oxorderarticle' );
00196 $oOrder = oxNew( 'oxorder' );
00197
00198
00199 if ( $oOrderArticle->load( $sOrderArtId ) && $oOrder->load( $sOrderId ) ) {
00200 $myConfig = $this->getConfig();
00201
00202
00203 $oOrderArticle->delete();
00204
00205
00206 $oOrder->recalculateOrder();
00207 }
00208 }
00209
00215 public function storno()
00216 {
00217 $myConfig = $this->getConfig();
00218
00219 $sOrderArtId = oxConfig::getParameter( 'sArtID' );
00220 $oArticle = oxNew( 'oxorderarticle' );
00221 $oArticle->load( $sOrderArtId );
00222
00223 if ( $oArticle->oxorderarticles__oxstorno->value == 1 ) {
00224 $oArticle->oxorderarticles__oxstorno->setValue( 0 );
00225 $sStockSign = -1;
00226 } else {
00227 $oArticle->oxorderarticles__oxstorno->setValue( 1 );
00228 $sStockSign = 1;
00229 }
00230
00231
00232 if ( $myConfig->getConfigParam( 'blUseStock' ) ) {
00233 $oArticle->updateArticleStock( $oArticle->oxorderarticles__oxamount->value * $sStockSign, $myConfig->getConfigParam('blAllowNegativeStock') );
00234 }
00235
00236 $oDb = oxDb::getDb();
00237 $sQ = "update oxorderarticles set oxstorno = ".$oDb->quote( $oArticle->oxorderarticles__oxstorno->value )." where oxid = ".$oDb->quote( $sOrderArtId );
00238 $oDb->execute( $sQ );
00239
00240
00241 $sQ = "select oxartid from oxorderarticles where oxid = ".$oDb->quote( $sOrderArtId );
00242 if ( ( $sArtId = oxDb::getDb()->getOne( $sQ ) ) ) {
00243 $oOrder = oxNew( 'oxorder' );
00244 if ( $oOrder->load( oxConfig::getParameter( 'oxid' ) ) ) {
00245 $oOrder->recalculateOrder();
00246 }
00247 }
00248 }
00249
00255 public function updateOrder()
00256 {
00257 $aOrderArticles = oxConfig::getParameter( 'aOrderArticles' );
00258
00259 $oOrder = oxNew( 'oxorder' );
00260 if ( is_array( $aOrderArticles ) && $oOrder->load( oxConfig::getParameter( 'oxid' ) ) ) {
00261
00262 $myConfig = $this->getConfig();
00263 $oOrderArticles = $oOrder->getOrderArticles();
00264
00265 $blUseStock = $myConfig->getConfigParam( 'blUseStock' );
00266 foreach ( $oOrderArticles as $oOrderArticle ) {
00267 $sItemId = $oOrderArticle->getId();
00268 if ( isset( $aOrderArticles[$sItemId] ) ) {
00269
00270
00271 if ( $blUseStock ) {
00272 $oOrderArticle->setNewAmount( $aOrderArticles[$sItemId]['oxamount'] );
00273 } else {
00274 $oOrderArticle->assign( $aOrderArticles[$sItemId] );
00275 $oOrderArticle->save();
00276 }
00277 }
00278 }
00279
00280
00281 $oOrder->recalculateOrder();
00282 }
00283 }
00284 }