0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0 ]; } krsort($result); return $result; } /** * @param array $remises */ public static function setRemisesParJour($remises) { self::setConfigValue('remises_par_jour', json_encode($remises)); } public function postActivation(ConnectionInterface $con = null) { /* try { Beds24ProductInfoQuery::create()->findOne(); } catch (\Exception $ex) {*/ $database = new Database($con->getWrappedConnection()); $database->insertSql(null, array(__DIR__ . '/Config/thelia.sql')); //} } /** * Retourne la remise en fnction du nombre de jours achetés * * @param \DateTime $dateDebut * @param \DateTime $dateFin * @return float */ public static function getRemiseDuree(\DateTime $dateDebut, \DateTime $dateFin, &$nombreDeJours) { $nombreDeJours = round(($dateFin->getTimeStamp() - $dateDebut->getTimeStamp()) / 86400); foreach (self::getRemisesParJour() as $nbJours => $remisePcent) { if ($nombreDeJours >= $nbJours) { return (float) $remisePcent / 100; } } return 0.0; } /** * Retourne le prix total remisé avec le supplément par personne en fonction du nombre de jours achetés. * * @param \DateTime $dateDebut * @param \DateTime $dateFin * @param float $prix * @param int $nbAdultes * @param int $nbEnfants * @param int $productId * @param float|null $nombreDeJours * @param float|null $remise * @param float|null $prixAvantRemise * @param float|null $prixOriginal * @return false|float */ public static function getPrixTotalRemise( \DateTime $dateDebut, \DateTime $dateFin, $prix, $nbAdultes, $nbEnfants, $productId, &$nombreDeJours = 0, &$remise = 0.0, &$prixAvantRemise = 0.0, &$prixOriginal = 0.0 ) { // Met de côté le prix d'origine $prixOriginal = $prix; // Prix avec le supplément par personne et par jour if (null !== $productInfo = Beds24ProductInfoQuery::create()->findOneByProductId($productId)) { // Calcul de la remise et de la durée $remise = self::getRemiseDuree($dateDebut, $dateFin, $nombreDeJours); $additionalAdultCost = $productInfo ? $productInfo->getAdditionalAdultCost() : []; $additionalChildrenCost = $productInfo ? $productInfo->getAdditionalChildrenCost() : []; $nbAdultesSupplementaires = max(0, $nbAdultes - $productInfo->getNbAdultesBase()); $nbEnfantsSupplementaires = max(0, $nbEnfants - $productInfo->getNbEnfantsBase()); if ($nbAdultesSupplementaires > 0 && isset($additionalAdultCost[$nbAdultesSupplementaires])) { $prix += $nombreDeJours * $additionalAdultCost[$nbAdultesSupplementaires]; } if ($nbEnfantsSupplementaires > 0 && isset($additionalChildrenCost[$nbEnfantsSupplementaires])) { $prix += $nombreDeJours * $additionalChildrenCost[$nbEnfantsSupplementaires]; } // Met de côté le prix avec supplément mais non remisé $prixAvantRemise = $prix; // Prix total remisé $prix = round($prixAvantRemise * (1 - $remise), 2); } return $prix; } }