Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
370 righe
11 KiB
370 righe
11 KiB
<? |
|
class Market { |
|
|
|
public $info; |
|
protected $contratto; |
|
public $codice_ente; |
|
protected $db; |
|
|
|
|
|
/** |
|
* Ritorna tutte informazioni sul prodotto |
|
* incluso tutte le relazioni |
|
* |
|
* @param mixed $codice |
|
* @param mixed $codice_oe |
|
* @param mixed $relation |
|
* @return void |
|
*/ |
|
public static function getInfoProduct(Int $codice, Int $codice_oe, Bool $relation = true) |
|
{ |
|
|
|
if(!empty($codice) && !empty($codice_oe)){ |
|
|
|
global $pdo; |
|
|
|
$oe = self::getOeInMercato(['codice_oe' => $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 []; |
|
} |
|
|
|
}
|
|
|