$codice_oe]); if(!empty($oe)){ $prodotto = new Market(); $prodotto = get_campi("b_prodotti"); $sql = "SELECT * FROM b_prodotti WHERE codice = :codice AND codice_oe = :codice_oe AND attivo = 'S' AND confermato = 'S' "; $prodotto = $pdo->go($sql, [':codice' => $codice, ':codice_oe' => $codice_oe ])->fetch(PDO::FETCH_ASSOC); if(!empty($prodotto)){ if($relation){ $each = [ 'cpv' => [ 'select' => 'cpv', 'table' => 'r_cpv_prodotti' ], // 'prezzi' => [ // 'select' => 'codice, codice_prodotto, prezzo, ordineMinimo, ordineMassimo', // 'table' => 'b_prodotti_prezzi' // ], 'spedizioni' => [ 'select' => 'codice,stato, descrizione, ordineMinimo, ordineMassimo, prezzo', 'table' => 'b_prodotti_spedizioni' ], 'traduzioni' => [ 'select' => 'codice, lingua, denominazione, descrizione, garanzia', 'table' => 'b_prodotti_traduzioni' ] ]; foreach ($each as $chiave => $value) { $sql = "SELECT {$value['select']} FROM {$value['table']} WHERE codice_prodotto = :codice_prodotto"; if($chiave != 'cpv'){ $sql .= " AND soft_delete = 'N' "; } $prodotto[$chiave] = $pdo->go($sql, [ ':codice_prodotto' => $prodotto['codice'] ])->fetchAll(PDO::FETCH_ASSOC); } } return $prodotto; }else{ return false; } }else{ return false; } } return []; } /** * Ritorna un elenco di tutti i prodotti creati dai vari OE * * @param mixed $filter * @return void */ public static function getProducts(Array $filter = []) { if(!empty($_SESSION["utente"]) && !empty($_SESSION['ente'])){ global $pdo; $codici_oe = self::getOeInMercato(); if(!empty($codici_oe)){ $codici_oe = implode(',',purifyInput($codici_oe)); $sql = "SELECT b_prodotti.* FROM b_prodotti WHERE codice_oe IN ($codici_oe) AND b_prodotti.soft_delete = 'N' AND b_prodotti.attivo = 'S' AND b_prodotti.confermato = 'S' AND b_prodotti.codice NOT IN ( SELECT codice_aggiornamento FROM b_prodotti WHERE confermato = 'S' AND codice_aggiornamento IS NOT NULL )"; if(!empty($filter)){ if(!empty($filter['codici_prodotti'])){ $ids = arrayIsNumeric($filter['codici_prodotti']); $sql .= "AND b_prodotti.codice IN ($ids) "; } } return $pdo->go($sql)->fetchAll(PDO::FETCH_ASSOC); } } return []; } /** * Controlla se l'oe ha almeno un una qualidica di tipologia mercato elettronico * * @param mixed $filter * @return void */ public static function getOeInMercato(Array $filter = []) { global $pdo; if(!empty($_SESSION["utente"])){ $bind = []; $sql = "SELECT r_partecipanti_albo.codice_operatore FROM r_partecipanti_albo LEFT JOIN b_bandi_albo ON r_partecipanti_albo.codice_elenco = b_bandi_albo.codice WHERE r_partecipanti_albo.conferma = 'S' AND b_bandi_albo.tipologia = 'M' AND r_partecipanti_albo.ammesso = 'S' "; if(!empty($filter)){ if(!empty($filter['codice_oe'])){ $sql .= " AND r_partecipanti_albo.codice_operatore = :codice_oe "; $bind[':codice_oe'] = $filter['codice_oe']; } } return $pdo->go($sql, $bind)->fetchAll(PDO::FETCH_COLUMN) ?? []; } return false; } /** * getProductsInCart * Ritorna la quantità totale dei prodotti presenti nel carrello e una lista dei prodotti * Se non viene passato nessun paramentro alla funzione, restituirà la quantità dei prodotti e relative chiavi * Se viene passato il prodotto, restituirà la quantita totale dei prodotti nel carrelo, e la quantità di quel relativo prodotto * @param mixed $prodotto * @return Array */ public static function getProductsInCart( $prodotto = []) { global $pdo; $return = [ 'totCarrello' => 0, 'prodotti' => [] ]; $sql = "SELECT SUM(b_carrello.quantita) as quantita, b_carrello.codice, b_carrello.codice_prodotto, b_prodotti.codice_oe, b_prodotti.codice_aggiornamento, b_prodotti.idVenditore, b_prodotti.denominazione, b_prodotti.brand, b_prodotti.prezzo, b_prodotti.attivo, b_prodotti.confermato, b_prodotti.ordineMinimo, b_prodotti.ordineMassimo FROM b_carrello LEFT JOIN b_prodotti ON b_carrello.codice_prodotto = b_prodotti.codice WHERE b_prodotti.soft_delete = 'N' "; $bind = []; $sql .= " GROUP BY codice_prodotto "; $tmp = $pdo->go($sql, $bind)->fetchAll(PDO::FETCH_ASSOC); if(!empty($tmp)){ foreach ($tmp as $key => $value) { // se il prodotto ha un aggiornamento, escludi il vecchio prodotto da tutti i conteggi e riporta il nuovo id $hasUpdate = self::productHasUpdate($value['codice_prodotto']); if(!empty($hasUpdate)){ $value['newVersion'] = $hasUpdate['codice']; $value['attivo'] = $hasUpdate['attivo']; }else{ $return['totCarrello'] += $value['quantita']; } if(empty($value['newVersion']) || (!empty($value['newVersion']) && $value['attivo'] == 'S')){ $return['prodotti'][$key] = $value; } } // raggruppamento prodotto if(!empty($prodotto['codice'])){ unset($return['prodotti']); $return['quantitaProdotto'] = 0; foreach ($tmp as $value) { if($prodotto['codice'] === $value['codice_prodotto']){ $return['quantitaProdotto'] += $value['quantita']; } } } } return (Array) $return; } /** * Ritorna solo una lista dei prodotti acquistabili * * @param mixed $withoutNewVersion * @return Array */ public static function getPurchasableProductsInCart($withoutNewVersion = true) :Array { $productInCart = self::getProductsInCart(); if($withoutNewVersion != false){ // escludi tutti i prodotti che hanno un aggiornamento // funzione utilizzata in ordine.php if($withoutNewVersion){ $tmp = []; foreach ($productInCart['prodotti'] as $key => $prodotto) { if(empty($prodotto['newVersion'])){ $tmp[] = $prodotto; } } $productInCart['prodotti'] = $tmp; } } return $productInCart; } /** * Funziona ricorsiva che ritorna l'ultimo aggiornamento del prodotto * @param mixed $codice_prodotto * @return Bool */ public static function productHasUpdate($codice_prodotto) { if(!empty($codice_prodotto)){ global $pdo; $sql = "SELECT codice, attivo FROM b_prodotti WHERE confermato = 'S' AND soft_delete = 'N' AND codice_aggiornamento = :codice_prodotto "; $ris = $pdo->go($sql, [':codice_prodotto' => $codice_prodotto])->fetch(PDO::FETCH_ASSOC); if(!empty($ris)){ $ris2 = self::productHasUpdate($ris['codice']); if(!empty($ris2)){ return $ris2; }else{ return $ris; } } return false; } return false; } /** * updateCart * * @param mixed $prodotto * @param mixed $quantita * @return Bool */ public static function updateCart( $prodotto = [], Int $quantita = null) :Bool { if(!empty($prodotto['codice']) && !empty($quantita)){ global $pdo; $sql = "INSERT INTO b_carrello (codice_prodotto, codice_oe, quantita, utente_modifica) VALUES (:codice_prodotto, :codice_oe, :quantita, :utente_modifica) ON DUPLICATE KEY UPDATE codice_prodotto = :codice_prodotto, codice_oe = :codice_oe, quantita = :quantita , utente_modifica = :utente_modifica"; $ris = $pdo->go($sql, [ ':quantita' => $quantita, ':codice_prodotto' => $prodotto['codice'], ':codice_oe' => $prodotto['codice_oe'], ':utente_modifica' => $_SESSION['utente']->codice ]); if($ris->rowCount() >= 1){ return true; } } return false; } /** * ordine * * @param mixed $codici_carrello * @return Array */ public static function ordine(Array $codici_carrello = []) :?Array { if(!empty($codici_carrello)){ global $pdo; $codici_carrello = implode(',', $codici_carrello); $sql = "SELECT b_carrello.codice, b_carrello.codice_prodotto, b_carrello.quantita, b_prodotti.denominazione, b_prodotti.prezzo, b_prodotti.um FROM b_carrello LEFT JOIN b_prodotti ON b_carrello.codice_prodotto = b_prodotti.codice WHERE b_carrello.codice IN ($codici_carrello) AND b_prodotti.soft_delete = 'N' AND b_prodotti.attivo = 'S' " ; return $pdo->go($sql)->fetchAll(PDO::FETCH_ASSOC); } return []; } }