Go to the documentation of this file.00001 <?php
00002
00007 class oxPayment extends oxI18n
00008 {
00014 protected $_oGroups = null;
00015
00022 protected $_aCountries = null;
00023
00029 protected $_sClassName = 'oxpayment';
00030
00036 protected $_aDynValues = null;
00037
00043 protected $_iPaymentError = null;
00044
00048 public function __construct()
00049 {
00050 parent::__construct();
00051 $this->init( 'oxpayments' );
00052 }
00053
00059 public function getGroups()
00060 {
00061 if ( $this->_oGroups == null && ( $sOxid = $this->getId() ) ) {
00062
00063
00064 $this->_oGroups = oxNew( 'oxlist', 'oxgroups' );
00065
00066
00067 $sSelect = 'select oxgroups.* from oxgroups, oxobject2group ';
00068 $sSelect .= "where oxobject2group.oxobjectid = '$sOxid' ";
00069 $sSelect .= 'and oxobject2group.oxgroupsid=oxgroups.oxid ';
00070 $this->_oGroups->selectString( $sSelect );
00071 }
00072
00073 return $this->_oGroups;
00074 }
00075
00083 public function setDynValues( $aDynValues )
00084 {
00085 $this->_aDynValues = $aDynValues;
00086 }
00087
00096 public function setDynValue( $oKey, $oVal )
00097 {
00098 $this->_aDynValues[$oKey] = $oVal;
00099 }
00100
00106 public function getDynValues()
00107 {
00108 if ( !$this->_aDynValues ) {
00109 $sRawDynValue = null;
00110 if ( is_object($this->oxpayments__oxvaldesc ) ) {
00111 $sRawDynValue = $this->oxpayments__oxvaldesc->getRawValue();
00112 }
00113
00114 $this->_aDynValues = oxUtils::getInstance()->assignValuesFromText( $sRawDynValue );
00115 }
00116 return $this->_aDynValues;
00117 }
00118
00126 public function getPaymentValue( $dBaseprice )
00127 {
00128 $dRet = 0;
00129
00130 if ( $this->oxpayments__oxaddsumtype->value == "%") {
00131 $dRet = $dBaseprice * $this->oxpayments__oxaddsum->value/100;
00132 } else {
00133 $oCur = $this->getConfig()->getActShopCurrencyObject();
00134 $dRet = $this->oxpayments__oxaddsum->value * $oCur->rate;
00135 }
00136
00137 if ( ($dRet * -1 ) > $dBaseprice ) {
00138 $dRet = $dBaseprice;
00139 }
00140
00141 return $dRet;
00142 }
00143
00151 public function getPaymentPrice( $oBasket )
00152 {
00153
00154 $dBasketPrice = $oBasket->getPriceForPayment();
00155 $dPrice = $this->getPaymentValue( $dBasketPrice );
00156
00157
00158 $oPrice = oxNew( 'oxPrice' );
00159 $oPrice->setBruttoPriceMode();
00160 $oPrice->setPrice( $dPrice );
00161
00162 if ( $this->getConfig()->getConfigParam( 'blCalcVATForPayCharge' ) && $dPrice > 0 ) {
00163 $oPrice->setVat( $oBasket->getMostUsedVatPercent() );
00164 }
00165
00166 return $oPrice;
00167 }
00168
00174 public function getCountries()
00175 {
00176 if ( $this->_aCountries === null ) {
00177
00178 $this->_aCountries = array();
00179 $sSelect = 'select oxobjectid from oxobject2payment where oxpaymentid="'.$this->getId().'" and oxtype = "oxcountry" ';
00180 $rs = oxDb::getDb()->Execute( $sSelect );
00181 if ( $rs && $rs->recordCount()) {
00182 while ( !$rs->EOF ) {
00183 $this->_aCountries[] = $rs->fields[0];
00184 $rs->moveNext();
00185 }
00186 }
00187 }
00188 return $this->_aCountries;
00189 }
00190
00198 public function delete( $sOXID = null )
00199 {
00200 if ( parent::delete( $sOXID ) ) {
00201
00202 $sOXID = $sOXID?$sOXID:$this->getId();
00203 $oDb = oxDb::getDb();
00204
00205
00206 $rs = $oDb->execute( "delete from oxobject2payment where oxpaymentid = ".$oDb->quote( $sOXID ) );
00207 return $rs->EOF;
00208 }
00209
00210 return false;
00211 }
00212
00224 public function isValidPayment( $aDynvalue, $sShopId, $oUser, $dBasketPrice, $sShipSetId )
00225 {
00226 $myConfig = $this->getConfig();
00227 if ( $this->oxpayments__oxid->value == 'oxempty' ) {
00228
00229 if ( !$this->oxpayments__oxactive->value || !$myConfig->getConfigParam( "blOtherCountryOrder" ) ) {
00230 $this->_iPaymentError = -2;
00231 return false;
00232 }
00233 if (count(oxDeliverySetList::getInstance()
00234 ->getDeliverySetList(
00235 $oUser,
00236 $oUser->getActiveCountry()
00237 )
00238 )) {
00239 $this->_iPaymentError = -3;
00240 return false;
00241 }
00242 return true;
00243 }
00244
00245 $oValidator = oxNew( 'oxinputvalidator' );
00246 if ( !$oValidator->validatePaymentInputData( $this->oxpayments__oxid->value, $aDynvalue ) ) {
00247 $this->_iPaymentError = 1;
00248 return false;
00249 }
00250
00251 $oCur = $myConfig->getActShopCurrencyObject();
00252 $dBasketPrice = $dBasketPrice / $oCur->rate;
00253
00254 if ( $sShipSetId ) {
00255 $aPaymentList = oxPaymentList::getInstance()->getPaymentList( $sShipSetId, $dBasketPrice, $oUser );
00256
00257 if ( !array_key_exists( $this->getId(), $aPaymentList ) ) {
00258 $this->_iPaymentError = -3;
00259 return false;
00260 }
00261 } else {
00262 $this->_iPaymentError = -2;
00263 return false;
00264 }
00265
00266 return true;
00267 }
00268
00274 public function getPaymentErrorNumber()
00275 {
00276 return $this->_iPaymentError;
00277 }
00278
00279 }