Comunidad de diseño web y desarrollo en internet online

Trabajo con Temporadas - Precios Habitación php

Citar            
MensajeEscrito el 14 Ene 2016 08:43 am
Tengo el siguiente código que me está dando 5 errores que están comentados y no se por que, no controlo mucho php con clases así que a ver si hay alguien que me heche una manita. Código:

Código PHP :

 <?php

$desde = $_GET['FDesde'];
$hasta = $_GET["FHasta"];
                                                      
$precioAlta = $row_ConsultaHabitaciones['intPrecio_Alta']; 
$precioMedia = $row_ConsultaHabitaciones['intPrecio_Media'];
$precioBaja = $row_ConsultaHabitaciones['intPrecio_Baja']; 
$PrecioEspecial = $row_ConsultaHabitaciones['intPrecio_Especial'];


class Temporadas {

    protected $temporadas = []; // ESTA LÍNEA ME DA ERROR

    protected $acumulador = 0.0;

    public function __construct($baja, $media, $alta, $especial) {
        $this->temporadas['baja']      = $baja;
        $this->temporadas['media']     = $media;
        $this->temporadas['alta']      = $alta;
        $this->temporadas['especial']  = $especial;
    }

    protected function esTemporada($temporada, $dia) {
        foreach($this->temporadas[$temporada] as $rango) {
            $desde = $this->getTime($rango[0]);
            $hasta = $this->getTime($rango[1]);

            if ($dia >= $desde && $dia <= $hasta) {
                return true;
            }
        }

        return false;
    }

    public function esTemporadaBaja($dia) {
        return $this->esTemporada('baja', $dia);
    }

    public function esTemporadaMedia($dia) {
        return $this->esTemporada('media', $dia);
    }

    public function esTemporadaAlta($dia) {
        return $this->esTemporada('alta', $dia);
    }

    public function esEspecial($dia) {
        return $this->esTemporada('especial', $dia);
    }

    public function acumular($precio) {
        $this->acumulador += floatval($precio);
    }

    public function precioTotal() {
        return $this->acumulador;
    }

    public function getTime($dia) {
        // Cambia el orden para strtotime, es mm/dd/yyyy
        list($dia, $mes) = explode('/', $dia);
        return strtotime($mes . '/' . $dia . '/' . date('Y'));
    }
}


// Temporada Baja = 13/01 al 10/03  -  07/04 al 14/06  -  01/09 al 26/11
// Temporada Media =  11/03 al 26/03  -  15/06 al 31/07  -  27/11 al 14/12
// Temporada Alta = 27/03 al 06/04  -  01/08 al 31/08  -  01/08 al 31/08

$temporadaBaja = [
    ['13/01', '10/03'],
    ['07/04', '14/06'],
    ['01/09', '26/11']
];  // ESTA LÍNEA ME DA ERROR

$temporadaMedia = [
    ['11/03', '26/03'],
    ['15/06', '31/07'],
    ['27/11', '14/12']
];  // ESTA LÍNEA ME DA ERROR

$temporadaAlta = [
    ['27/03', '06/04'],
    ['01/08', '31/08'],
    ['01/08', '31/08']
];  // ESTA LÍNEA ME DA ERROR

$especial = [
    ['01/01', '12/01']
];  // ESTA LÍNEA ME DA ERROR

// Precios por temporada
$precioBaja     = number_format(10.00, 2) . ' €';
$precioMedia    = number_format(15.50, 2) . ' €';
$precioAlta     = number_format(19.99, 2) . ' €';
$precioEspecial = number_format( 5.95, 2) . ' €';

$helper = new Temporadas($temporadaBaja, $temporadaMedia, $temporadaAlta, $especial);

// Fechas seleccionadas
$inicio = $helper->getTime('30/08');
$final  = $helper->getTime('04/09');

echo <<<TABLE
<table width="50%" border="1">
    <thead>
    <tr>
        <th>Fecha (dd/mm/yyyy)</th>
        <th>Temporada</th>
        <th>Precio</th>
    </tr>
    </thead>
    <tbody>
TABLE;

for ($i = $inicio; $i < $final; $i += 60 * 60 * 24) {
    echo '<tr>';

    if ($helper->esEspecial($i)) {
        // Acumular precio
        $helper->acumular($precioEspecial);
        echo "<td>".date('d/m/Y',$i)."</td><td>Precio Especial</td><td>$precioEspecial</td>";

    } else if ($helper->esTemporadaAlta($i)) {
        // Acumular precio
        $helper->acumular($precioAlta);
        echo "<td>".date('d/m/Y',$i)."</td><td>Temporada Alta</td><td>$precioAlta</td>";

    } else if ($helper->esTemporadaMedia($i)) {
        // Acumular precio
        $helper->acumular($precioMedia);
        echo "<td>".date('d/m/Y',$i)."</td><td>Temporada Media</td><td>$precioMedia</td>";

    } else if ($helper->esTemporadaBaja($i)) {
        // Acumular precio
        $helper->acumular($precioBaja);
        echo "<td>".date('d/m/Y',$i)."</td><td>Temporada baja</td><td>$precioBaja</td>";

    }

    echo '</tr>';
}

$total = number_format($helper->precioTotal(), 2) . ' €';

echo <<<ENDTABLE
    <tr>
        <td colspan='2'><b>TOTAL:</b></td>
        <td>$total</td>
    </tr>
    </tbody>
</table>
ENDTABLE;
?> 
Muchísimas gracias de antemano.
Un saludo: manyblue

Por manyblue

19 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Ene 2016 05:31 pm
En vista de que nadie contesta lo contestaré yo pues tengo la solución:

Código PHP :

<?php
                                                      
$desde = date('d/m', strtotime($_GET['FDesde']));
$hasta = date('d/m', strtotime($_GET['FHasta']));


class Temporadas {
 
   protected $temporadas = array(); 

 
   protected $acumulador = 0.0;
 
   public function __construct($baja, $media, $alta, $especial) {
      $this->temporadas['baja']      = $baja;
      $this->temporadas['media']     = $media;
      $this->temporadas['alta']      = $alta;
      $this->temporadas['especial']  = $especial;
   }
 
   protected function esTemporada($temporada, $dia) {
      foreach($this->temporadas[$temporada] as $rango) {
         $desde = $this->getTime($rango[0]);
         $hasta = $this->getTime($rango[1]);
 
         if ($dia >= $desde && $dia <= $hasta) {
            return true;
         }
      }
 
      return false;
   }
 
   public function esTemporadaBaja($dia) {
      return $this->esTemporada('baja', $dia);
   }
 
   public function esTemporadaMedia($dia) {
      return $this->esTemporada('media', $dia);
   }
 
   public function esTemporadaAlta($dia) {
      return $this->esTemporada('alta', $dia);
   }
 
   public function esEspecial($dia) {
      return $this->esTemporada('especial', $dia);
   }
 
   public function acumular($precio) {
      $this->acumulador += floatval($precio);
   }
 
   public function precioTotal() {
      return $this->acumulador;
   }
 
   public function getTime($dia) {
      // Cambia el orden para strtotime, es mm/dd/yyyy

      list($dia, $mes) = explode('/', $dia);
      return strtotime($mes . '/' . $dia . '/' . date('Y'));
   }
}


$temporadaBaja = array(
   array('13/01', '10/03'),
   array('07/04', '14/06'),
   array('01/09', '26/11'));

$temporadaMedia = array(
   array('11/03', '26/03'),
   array('15/06', '31/07'),
   array('27/11', '14/12'));

$temporadaAlta = array(
   array('27/03', '06/04'),
   array('01/08', '31/08'),
   array('01/08', '31/08'));

$especial = array(
   array('01/01', '12/01'));
 
// Precios por temporada

$precioBaja     = number_format($row_ConsultaHabitaciones['intPrecio_Baja'], 2) . ' €';
$precioMedia    = number_format($row_ConsultaHabitaciones['intPrecio_Media'], 2) . ' €';
$precioAlta     = number_format($row_ConsultaHabitaciones['intPrecio_Alta'], 2) . ' €';
$precioEspecial = number_format($row_ConsultaHabitaciones['intPrecio_Especial'], 2) . ' €';
 
$helper = new Temporadas($temporadaBaja, $temporadaMedia, $temporadaAlta, $especial);
 
// Fechas seleccionadas

$inicio = $helper->getTime($desde);
$final  = $helper->getTime($hasta);
 
 
for ($i = $inicio; $i < $final; $i += 60 * 60 * 24) {
  
 
   if ($helper->esEspecial($i)) {
      // Acumular precio

      $helper->acumular($precioEspecial);
       "<td>".date('d/m/Y',$i)."</td><td>Precio Especial</td><td>$precioEspecial</td>";
 
   } else if ($helper->esTemporadaAlta($i)) {
      // Acumular precio

      $helper->acumular($precioAlta);
       "<td>".date('d/m/Y',$i)."</td><td>Temporada Alta</td><td>$precioAlta</td>";
 
   } else if ($helper->esTemporadaMedia($i)) {
      // Acumular precio

      $helper->acumular($precioMedia);
       "<td>".date('d/m/Y',$i)."</td><td>Temporada Media</td><td>$precioMedia</td>";
 
   } else if ($helper->esTemporadaBaja($i)) {
      // Acumular precio

      $helper->acumular($precioBaja);
       "<td>".date('d/m/Y',$i)."</td><td>Temporada baja</td><td>$precioBaja</td>";
 
   }
 
   
}
 
$total = $helper->precioTotal();



// DIFERENCIA DE DIAS ENTRE Fdesde HASTA Fhasta //
$inicio = strtotime($_GET['FDesde']);
$fin = strtotime($_GET["FHasta"]);
$dateDiff = $fin - $inicio;
?>
<img src="imagenes/paypal.jpg">
<br /><br />
<strong>Reserva Habitación: Nº <?php echo $row_ConsultaHabitaciones['intNumero_Habitacion']; ?> de: <?php echo $row_DatosDatosConsulta['strNombre']; ?></strong>
<br />
<strong>Desde el:</strong> <?php if(isset($_GET['FDesde'])) echo $_GET['FDesde']; ?>&nbsp;&nbsp;<strong>Hasta el:</strong> <?php if(isset($_GET["FHasta"])) echo $_GET["FHasta"]; ?>
<br />

<?php
echo "<strong>Días Totales:</strong> ".($dateDiffTotal = floor($dateDiff/(60*60*24)))." días";
echo "<br />"; 
?>
<strong>Fecha Factura:</strong> <?php echo date("d-m-Y");?><br />
<strong>Cliente:</strong> 
<?php echo ObtenerNombreUsuario($row_DatosDatosConsulta['refUsuario']); ?>
<?php echo ObtenerAlellidosUsuario($row_DatosDatosConsulta['refUsuario']); ?>
<br />

<?php
$Impuesto = $row_ConsultaHabitaciones['intValor_Impuesto'];
$NombreImpuesto = $row_ConsultaHabitaciones['strNombre_Impuesto'];
$Impuestos = (($Impuesto * $total) / 100);
$TotalImpuestos = number_format($Impuestos, 2);
echo "<strong>SUB TOTAL:</strong> ".$total." €";
echo "<br />";
echo "<strong>".$Impuesto."% ".$NombreImpuesto.":</strong> ".$TotalImpuestos." €";
echo "<br />";
echo "<strong>TOTAL:</strong> ".$Total = number_format($TotalImpuestos + $total, 2)." €";
?> 

Muchas gracias por todo y un saludo: Manyblue

Por manyblue

19 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.