_locked) return false; $price = sprintf('%.02f',(float)$price); if ($price<0) return false; $this->price=$price; return true; } /** * Retourne le montant HT * * @return float */ public function getPrice() { return $this->price; } /** * Défini s'il s'agit du premier paiement ou des suivants et le délai de déclenchement * * @param boolean $first * @param string $paymentDelay * @return boolean */ public function setFirst($first,$paymentDelay) { if ($this->_locked) return false; if (!is_bool($first)) return false; $paymentDelay=trim($paymentDelay); if ($first) { if (!preg_match("#[0-9]+[HDM]#",$paymentDelay)) { return false; } } else { if (!preg_match("#[0-9]+[DM]#",$paymentDelay)) { return false; } } $num = (int)substr($paymentDelay,0,strlen($paymentDelay)-1); if (($num<1 && !$first) || ($num<0 && $first) || $num>365) { return false; } $this->first=$first; $this->paymentDelay=$paymentDelay; return true; } /** * Assigne les taxes s'appliquant à ce paiement * * @param array $tax * @return boolean */ public function setTax($tax) { if ($this->_locked) return false; if (!HIPAY_MAPI_UTILS::is_an_array_of($tax,'HIPAY_MAPI_Tax')) return false; foreach ($tax as $obj) $this->tax[]= clone $obj; return true; } /** * assigne le timestamp du premier paiement ou des paiements récurrents * */ public function setDelayTS( $baseTS=0 ) { if( (int)$baseTS <= 0 ) { $baseTS = time(); } switch( substr($this->paymentDelay, -1, 1) ) { case 'd': case 'D': $unit='day'; break; case 'm': case 'M': $unit='month'; break; case 'h': case 'H': default : $unit='hour'; break; } $this->_delayTS = strtotime( '+'.substr($this->paymentDelay, 0, -1).' '.$unit, $baseTS ); } /** * Retourne les taxes s'appliquant à ce paiement * * @return array */ public function getTax() { return $this->tax; } /** * Retourne s'il s'agit du premier paiement * * @return boolean */ public function getFirst() { return $this->first; } /** * Retourne le délai de déclenchement * * @return string */ public function getPaymentDelay() { return $this->paymentDelay; } /** * retourne le timestamp du premier paiement * */ public function getDelayTS() { return $this->_delayTS; } /** * Vérifie si l'objet est correctement initialisé * * @return float */ public function check() { if ($this->price<0) throw new Exception('Montant invalide ou pas initilisé'); if (!HIPAY_MAPI_UTILS::is_an_array_of($this->tax,'HIPAY_MAPI_Tax')) throw new Exception('Taxes invalides ou pas initialisées'); foreach($this->tax as $obj) { if (!$obj->check()) return false; } if (!is_bool($this->first)) throw new Exception('Premier paiement ou suivant n\'est pas initialisé'); return true; } protected function init() { $this->price = -1; $this->tax = array(); $this->first = ''; $this->paymentDelay = ''; $this->_delayTS = ''; } function __construct() { $this->init(); parent::__construct(); } } ?>