/**
  * Salva un ordine sul DB
  * @param $elenco array di articoli che fanno parte dell'ordine
  * @param $cliente id cliente che ha effettuato l'ordine
  * @param Pagamento $pay il metodo di ordine scelto dal cliente
  * @param float $subtotale il prezzo dell'ordine
  * @return boolean true se il salvataggio va a buon fine, false altrimenti
  */
 public function salvaOrdine($elenco, $cliente_id, Pagamento $pay, $subtotale)
 {
     $mysqli = Db::getInstance()->connectDb();
     if (!isset($mysqli)) {
         error_log("[salvaOrdine] impossibile inizializzare il database");
         $mysqli->close();
         return false;
     }
     $stmt = $mysqli->stmt_init();
     $stmt2 = $mysqli->stmt_init();
     $insert_ordine = "insert into ordini (id, data_creazione, subtotale, cliente_id) \n            values (default, NOW(), ?, ?)";
     $insert_articoli = 'insert into articoli values
         (default, ?, ?, ?, ?, ?)';
     //stmt tab ordini
     $stmt->prepare($insert_ordine);
     if (!$stmt) {
         error_log("[salvaOrdine] impossibile" . " inizializzare il prepared statement");
         $mysqli->close();
         return false;
     }
     //stmt tab articoli
     $stmt2->prepare($insert_articoli);
     if (!$stmt2) {
         error_log("[salvaOrdine] impossibile" . " inizializzare il prepared statement 2");
         $mysqli->close();
         return false;
     }
     //stmt tab ordini
     if (!$stmt->bind_param('di', floatval($subtotale), intval($cliente_id))) {
         error_log("[salvaOrdine] impossibile" . " effettuare il binding in input stmt");
         $mysqli->close();
         return false;
     }
     //var stmt tab articoli
     $articolo_size = '';
     $articolo_qty = 0;
     $articolo_prezzo = 0.0;
     $articolo_pizza_id = 0;
     $ordine_id = 0;
     //stmt tab articoli
     if (!$stmt2->bind_param('sidii', $articolo_size, $articolo_qty, $articolo_prezzo, $articolo_pizza_id, $ordine_id)) {
         error_log("[salvaOrdine] impossibile" . " effettuare il binding in input stmt2");
         $mysqli->close();
         return false;
     }
     // inizio transazione
     $mysqli->autocommit(false);
     //        echo 'attuale:' . $pay->getSaldo() . '<br>';
     if ($pay->getSaldo() >= $subtotale) {
         PagamentoFactory::instance()->aggiornaSaldoPagamento($pay, $pay->getSaldo() - $subtotale);
         //        echo 'nuovo:' . $pay->getSaldo() . '<br>';
     } else {
         $mysqli->rollback();
         $mysqli->close();
         return false;
     }
     //stmt tab ordini
     if (!$stmt->execute()) {
         error_log("[salvaOrdine] impossibile" . " eseguire lo statement");
         $mysqli->rollback();
         $mysqli->close();
         return false;
     }
     //stmt tab articoli
     foreach ($elenco as $articolo) {
         $articolo_size = $articolo->getSize();
         $articolo_qty = $articolo->getQty();
         $articolo_prezzo = $articolo->getPrezzoArticolo();
         $articolo_pizza_id = $articolo->getPizza()->getId();
         $ordine_id = $stmt->insert_id;
         if (!$stmt2->execute()) {
             error_log("[salvaOrdine] impossibile" . " eseguire lo statement 2");
             $mysqli->rollback();
             $mysqli->close();
             return false;
         }
     }
     // tutto ok, posso rendere persistente il salvataggio
     $mysqli->commit();
     $mysqli->autocommit(true);
     $mysqli->close();
     return true;
 }