• Home
  • Forum
  • Fare Web
  • PHP

[PHP]Funzione di calcolo prezzo di una camera in un range di date

  • Creatore Discussione Creatore Discussione maxnegri
  • Data di inizio Data di inizio 19 Gen 2019
  • Tag Tag
    calcolo funzione prezzo
Prec.
  • 1
  • 2
  • 3
  • 4
Succ.
Primo Prec. 2 di 4 Succ. Ultimo

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #21
Allora ho fatto tutto come mi hai indicato. Le query da sole funzionano correttamente ma se le inserisco nella funzione il risultato è sempre NULL. Ho modificato anche tutti i parametri date e room e non credo ci siano ancora errori.
Puoi testarla anche tu? Grazie!
PHP:
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DB";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){

   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];


$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
//print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
//print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


var_dump($model_result);
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 20 Gen 2019
  • #22
maxnegri ha scritto:
var_dump($model_result);
Clicca per allargare...
Certo che model_result è vuoto, è il ritorno della funzione....
Aggiungi mysqli dentro la funzione o lo passi alla funzione.
quindi....
PHP:
//intestazione funzione
function cal_price_($room,$start_date,$end_date){
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DB";
$mysqli =new mysqli($hostname,$muser,$pass,$db);
   $date_diff=get_diff_Date($start_date,$end_date);
........//tutto il contenuto sotto

}
//dopo la chiusura della funzione
print_r(cal_price_($room,$start_date,$end_date));
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #23
Il problema non sta nelle query che se le utilizzo da sole sono corrette mi danno i risultati.
Se invece le inserisco nella funzione il risultato è null. Ho cambiato anche ci con mysqli ma nulla.
Puoi testare tutto il codice che ti posto anche tu?
PHP:
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno()) 
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   $mysqli=&get_instance();
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


var_dump($model_result);
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #24
Scusami ma hai testato il codice perché come da tue indicazioni comunque non mi stampa nulla.
Puoi cortesemente provare questo codice in una pagina test?

PHP:
function cal_price_($room,$start_date,$end_date){
$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno()) 
{
  die(mysqli_connect_error());
}

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   $mysqli=&get_instance();
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];
$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);

$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}
}
//dopo la chiusura della funzione
print_r(cal_price_($room,$start_date,$end_date));
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 20 Gen 2019
  • #25
maxnegri ha scritto:
Scusami ma hai testato il codice perché come da tue indicazioni comunque non mi stampa nulla.
Clicca per allargare...
Il dubbio non mi viene sul codice, ma su come lo chiami tu in quanto non richiami nulla!!!!
La connessione nella funziona non la passi e non la crei come fa a fare la query???

maxnegri ha scritto:
Se invece le inserisco nella funzione il risultato è null. Ho cambiato anche ci con mysqli ma nulla.
Clicca per allargare...
Ma la funzione tu non la chiami, come ti fa a dare risultato????

Qui l'esempio con il codice funzionante....
https://perms.madi-solution.it/test_calcolo


PHP:
/*$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}*/

$room="1";
$start_date="2019-08-26"; // data di arrivo
$end_date="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$data_out->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
 //  $mysqli=&get_instance();
 $mysqli=new mysqli('host','user','pass','database');
 $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

$query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
$data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data);


$query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
$data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


//var_dump($model_result);
var_dump(cal_price_($room,$start_data,$end_data));

QUI IL FILE FUNZIONANTE
PHP:
<?php
/**
* Created by PhpS.
* User: macus
* Date: 20/01/2019
* Time: 14:27
*/
/*$hostname = "localhost";
$pass   = "PASSWORD";
$muser  = "USER";
$db ="DATABASE";
$mysqli = @new mysqli($hostname, $muser, $pass, $db);
if( mysqli_connect_errno())
{
  die(mysqli_connect_error());
}*/

$room="1";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$end_date->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   //  $mysqli=&get_instance();
   $mysqli=new mysqli('host','user','pass','database');
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}


//var_dump($model_result);
var_dump(cal_price_($room,$start_data,$end_data));
 
Ultima modifica: 20 Gen 2019

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 20 Gen 2019
  • #26
Qui il file funzionante con il codice
https://perms.madi-solution.it/_a/test/index.php
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #27
Ho copiato il tuo codice ed inserito anche la parte mancante della funzione get_diff_Date
Ricevo questo errore: PHP Fatal error: Call to a member function diff() on null

Non riesco a capire perchè a te ti funzioni e a me no. Assurdo!
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 20 Gen 2019
  • #28
Utilizzando Crhome...
vai qui:https://perms.madi-solution.it/_a/test/index.php
premi CTRL+U
entri in view-source
e leggi il codice!

Lo riporto anche sotto per comodità!
PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$room="1";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_date=new DateTime($dt1);
   $end_date=new DateTime($dt2);
   $diff=$end_date->diff($start_date);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_date->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_date->format('d/m/Y'),
            'day'=>$start_date->format('w'),
            'label_day'=>$start_date->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_date,$end_date){
   //  $mysqli=&get_instance();
   include_once('params.php');
   $mysqli=new mysqli($host,$user,$pass,$db);
   $date_diff=get_diff_Date($start_date,$end_date);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_date.'" AND "'.$end_date.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}



//QUI LA VARIABILE NON É DICHIARATA E FORSE SONO PATATE
echo 'la prima volta è errore in quanto model_result è dichiarato nella funzione e non accessibile dall\'esterno<br>';
var_dump($model_result);

echo 'il risultato della funzione <br>';
//QUI CI VA LA FUNZIONE NON model_result
var_dump(cal_price_($room,$start_data,$end_data));
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #29
Si adesso finalmente ricevo i risultati. Grazie mille!!!
Un consiglio per utilizzare anche gli sconti aggiungo i campi nella tabella room_custom_price giusto?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 20 Gen 2019
  • #30
dove meglio credi.... cambia poco.... sarebbe meglio separarli e creare un modello diverso...!
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #31
Ok grazie mille di tutto. Sei una persona molto disponibile!
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #32
Scusami ultima cosa perchè quando provo a stampare il totale complessivo causa un errore?
PHP:
echo $model_result['total'];
dovrebbe essere così oppure come al solito continuo a sbagliare.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 20 Gen 2019
  • #33
La funzione torna un valore di natura array.... non puoi accedere a "model_result" fuori la funzione....
PHP:
$risultato_da_funzione=cal_price_($room,$start_data,$end_data);
echo $risultato_da_funzione['total'];
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 20 Gen 2019
  • #34
Perfetto ancora mille grazie!
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 21 Gen 2019
  • #35
Ciao, ho la seguente query che mi prende le camere disponibili per ogni struttura ricettiva disponibile:
PHP:
$sqlselezione="SELECT * FROM room c WHERE c.coupon_shop='".$shopid."' AND c.capacita >= '".$ospiti."' AND c.coupon_city='1'  AND c.coupon_status='A' AND c.coupon_startdate <=now() AND c.coupon_enddate > now() AND c.id NOT IN ( SELECT couponid FROM coupons_purchase AS p WHERE ( p.stato='A' AND p.data_partenza > ".$data_post_arrivo_convertita." AND p.data_arrivo < ".$data_post_partenza_convertita." ) OR ( p.stato='A' AND p.data_partenza <= ".$data_post_arrivo_convertita." AND p.data_partenza >= ".$data_post_partenza_convertita." )) ORDER BY DESC LIMIT 1";
$resultselezione = mysqli_query($conn, $sqlselezione);
Come posso prendere la camera che ha il prezzo totale più basso ricavato dalla funzione di calcolo
PHP:
$risultato_da_funzione=cal_price_($room,$start_data,$end_data);
Quello che sono riuscito a fare è la somma dei prezzi c.price_mon + c.price_tue ecc... ed ordinarli nella query con ORDER BY per la somma più bassa ma non credo che sia corretto. Hai qualche idea su come fare? Grazie!
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 22 Gen 2019
  • #36
Ciao facendo dei controlli ho scoperto che la funzione di calcolo non effettua la somma correttamente.
Infatti se esistono dei prezzi custom li somma a quelli di base non escludendoli.

Es. in room il prezzo per tutti i giorni della settimana è di 70 euro.
In room_custom_price per il giorno 2019-08-27 ed il giorno 2019-08-28 ho impostato rispettivamente i prezzi di 80euro e 90euro.
Quindi il calcolo dovrebbe essere :
1 notte a 70
2 notte a 70
3 notte a 80
4 notte a 90
Totale 310 Euro mentre la funzione mi calcola un totale di 450 Euro

PHP:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$room="7";
$start_data="2019-08-26"; // data di arrivo
$end_data="2019-08-30"; // data di partenza


function get_diff_Date($dt1,$dt2){
   $start_data=new DateTime($dt1);
   $end_data=new DateTime($dt2);
   $diff=$end_data->diff($start_data);
   $create_date=[];
   for ($i=1;$i<=$diff->days;$i++) {
      $start_data->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$start_data->format('d/m/Y'),
            'day'=>$start_data->format('w'),
            'label_day'=>$start_data->format('l')
         ];
   }
   return $create_date;
}

function find_sconto(){
   /*
      'sconto'=>0,
   //percentuale o fisso (fixed)
      'type'=>'percentage',
      'skip_if_0'=>TRUE
   /*/
   $model_return=['sconto'=>0,'type'=>'percentage','ship_0'=>TRUE];
   return $model_return;
}

function cal_price_($room,$start_data,$end_data){
   //  $mysqli=&get_instance();
   $host = "localhost";
$pass   = "PASSWORD";
$user  = "USER";
$db ="DB";
   $mysqli=new mysqli($host,$user,$pass,$db);
   $date_diff=get_diff_Date($start_data,$end_data);
   $model_result=
      [
         'operation'=>
            [
               'plus'=>[
                  'custom'=>0,
                  'normal'=>0
               ],
//da implementare le regole di calcolo
               'minus'=>find_sconto()
            ],
         'total'=>0,
         'per_night'=>0
      ];

   $query=$mysqli->query('SELECT * FROM room WHERE id = '.$room);
   $data=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data);


   $query=$mysqli->query('SELECT * FROM room_custom_price WHERE (DATE(certain_date) BETWEEN "'.$start_data.'" AND "'.$end_data.'")');
   $data_custom=json_decode(json_encode($query->fetch_all(MYSQLI_ASSOC)));
   //print_r($data_custom);

   $map=['price_sun','price_mon','price_tue','price_wed','price_thu','price_fri','price_sat'];

   if(!empty($data_custom)){
      //non ci sono prezzi personalizzati
      foreach ($data_custom as $k=>$items){
         $model_result['operation']['plus']['custom']+=$items->price;
      }
   }
   foreach ($date_diff as $k=>$v){
      foreach ($data as $jey_q=>$value_q){
         $day=$map[$v['day']];
         $model_result['operation']['plus']['normal']+=$value_q->$day;
      }
   }
   foreach ($model_result['operation']['plus'] as $k=>$v){
      $model_result['total']+=$v;
   }
   $model_result['per_night']=$model_result['total']/count($date_diff);

   return $model_result;
}



$risultato_da_funzione=cal_price_($room,$start_data,$end_data);

$current_amount_calcolo=$risultato_da_funzione['total'];

echo "Totale $current_amount_calcolo";

Quale potrebbe essere l'errore?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 22 Gen 2019
  • #37
Alla funzione get_Diff_date mi sono dimenticato di valorizzare il giorno in ingresso....
modifica come segue....
PHP:
function get_diff_Date($dt1,$dt2){
   $data_in=new DateTime($dt1);
   $data_out=new DateTime($dt2);
   $diff=$data_out->diff($data_in);
   $create_date=[];
/*******************************PARTE MANCANTE**************************************/   
$create_date[]=
      [
         'date'=>$data_in->format('d/m/Y'),
         'day'=>$data_in->format('w'),
         'label_day'=>$data_in->format('l')
      ];
/********************************FINE***************************************************/
   for ($i=1;$i<=$diff->days;$i++) {
      $data_in->add(new DateInterval('P1D'));
      $create_date[]=
         [
            'date'=>$data_in->format('d/m/Y'),
            'day'=>$data_in->format('w'),
            'label_day'=>$data_in->format('l')
         ];
   }
   return $create_date;
}
Ho aggiunto i dati che hai segnalato qui per verificare i calcoli.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 22 Gen 2019
  • #38
maxnegri ha scritto:
Come posso prendere la camera che ha il prezzo totale più basso ricavato dalla funzione di calcolo
Clicca per allargare...
Fai la procedura di ieri
macus_adi ha scritto:
Utilizzando Crhome...
vai qui:https://perms.madi-solution.it/_a/test/index.php
premi CTRL+U
entri in view-source
e leggi il codice!
Clicca per allargare...
Adattalo alle tue specifiche, testato e funzionante....
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
  • 22 Gen 2019
  • #39
Ho copiato il codice ed aggiornato i campi delle tabelle che mancavano ma il risultato finale è comunque errato
maxnegri ha scritto:
Quindi il calcolo dovrebbe essere :
1 notte a 70
2 notte a 70
3 notte a 80
4 notte a 90
Totale 310 Euro mentre la funzione mi calcola un totale di 450 Euro
Clicca per allargare...

Non riesco a comprendere ma nel tuo risultato i data price vengono sostituiti in quelli custom price se esistenti?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
  • 22 Gen 2019
  • #40
macus_adi ha scritto:
$create_date[]=
[
'date'=>$data_in->format('d/m/Y'),
'day'=>$data_in->format('w'),
'label_day'=>$data_in->format('l')
];
Clicca per allargare...
Manca questo nel get_diff_Date
 
Prec.
  • 1
  • 2
  • 3
  • 4
Succ.
Primo Prec. 2 di 4 Succ. Ultimo
Devi accedere o registrarti per poter rispondere.

Discussioni simili

[Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress
  • Lino80
  • 9 Gen 2023
  • Offerte e Richieste di Lavoro e/o Collaborazione
Risposte
0
Visite
3K
Offerte e Richieste di Lavoro e/o Collaborazione 9 Gen 2023
Lino80
P
Funzione jQuery Ajax invio file a php
  • Peterrey76
  • 9 Mar 2021
  • jQuery
Risposte
1
Visite
3K
jQuery 9 Mar 2021
Max 1
M
Utilizzare la funzione mysql_num_rows() in PHP 5
  • miagy
  • 16 Ago 2020
  • PHP
Risposte
3
Visite
1K
PHP 17 Ago 2020
Hormus
H
D
Come usare funzione php
  • dilaila
  • 21 Lug 2020
  • PHP
Risposte
6
Visite
1K
PHP 22 Lug 2020
dilaila
D
Modificare funzione php
  • Shyson
  • 2 Apr 2020
  • PHP
Risposte
15
Visite
2K
PHP 3 Apr 2020
marino51
Visualizzazione dati in php da mysql con funzione matematica in javascript
  • pjtertdj
  • 31 Lug 2019
  • PHP
Risposte
1
Visite
1K
PHP 31 Lug 2019
Max 1
L
Problema funzione mail() PHP
  • lorenzocanal24
  • 8 Mag 2019
  • PHP
Risposte
3
Visite
2K
PHP 10 Mag 2019
marino51
L
[PHP] problema count messo in una funzione.
  • luigi777
  • 17 Dic 2018
  • PHP
Risposte
1
Visite
1K
PHP 18 Dic 2018
macus_adi
funzione php si ripete due volte
  • Monital
  • 24 Nov 2018
  • PHP
Risposte
6
Visite
2K
PHP 25 Nov 2018
Monital
[PHP] [HTML] Disabilitare un link in funzione della piattaforma
  • GiErre
  • 21 Nov 2018
  • PHP
Risposte
7
Visite
2K
PHP 20 Dic 2018
macus_adi
Funzione php e campo database come variabile
  • Monital
  • 13 Nov 2018
  • PHP
Risposte
6
Visite
1K
PHP 16 Nov 2018
Monital
M
PHP - Funzione non e scrive il risultato
  • mendia
  • 28 Ott 2018
  • PHP
Risposte
3
Visite
2K
PHP 3 Nov 2018
mendia
M
F
[PHP] La funzione setcookie
  • francesco1976
  • 1 Ott 2018
  • PHP
Risposte
0
Visite
2K
PHP 1 Ott 2018
francesco1976
F
C
  • Bloccata
[RISOLTO][PHP] Funzione ONclick
  • Coby
  • 18 Ago 2018
  • PHP
Risposte
14
Visite
3K
PHP 23 Ago 2018
Max 1
A
[PHP] Problema invio mail con funzione mail()
  • Alex@1983
  • 17 Ago 2018
  • PHP
Risposte
3
Visite
5K
PHP 24 Ago 2018
borgo italia
C
richiamare una funzione in un altro script php
  • cosmo98
  • 1 Giu 2018
  • PHP
Risposte
1
Visite
5K
PHP 4 Giu 2018
bubino8
S
[PHP] errore funzione sleep
  • steve97
  • 26 Mar 2018
  • PHP
Risposte
5
Visite
2K
PHP 27 Mar 2018
borgo italia
[PHP] Verifica dell'input utente tramite funzione generica.
  • MarcoGrazia
  • 21 Set 2017
  • PHP
Risposte
0
Visite
2K
PHP 21 Set 2017
MarcoGrazia
B
[PHP]la pagina php non si carica se aggiungo funzione while
  • blablabla
  • 5 Apr 2017
  • PHP
Risposte
10
Visite
3K
PHP 5 Apr 2017
marino51
A
Chiamata funzione PHP con onclick
  • Andrea Crocco
  • 27 Feb 2017
  • PHP
Risposte
8
Visite
7K
PHP 28 Feb 2017
otto9due
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?