gestione gare pubbliche
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

<?
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 [];
}
}