_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('Invalid amount or not initialized'); if (!HIPAY_MAPI_UTILS::is_an_array_of($this->tax, 'HIPAY_MAPI_Tax')) throw new Exception('Invalid taxes or not initialized'); 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(); } }