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.
 
 
 
 
 

425 righe
18 KiB

<?
if (!empty($gara)) {
$vocabolario["link"] = $_SESSION["config"]["link_sito"]."/gare/dettaglio.php?codice=".$gara->info["codice"];
$vocabolario["gestore"] = Ente::getInfoFromID($_SESSION["ente"]->codice)[0] ?? [];
$vocabolario["beneficiario"] = Ente::getInfoFromID($record["codice_ente"])[0] ?? [];
$vocabolario["gara"] = $gara->info;
$vocabolario["gara"]["procedura"] = $gara->getProcedura()["descrizioni"][0]["titolo"];
$extraInfo = json_decode($gara->info["extraInfo"],true);
if (!empty($extraInfo)) {
$vocabolario["gara"] += $extraInfo;
}
if (!empty($gara->lotto)) {
$vocabolario["lotto"] = $gara->lotto;
$vocabolario["lotto"]["criterio"] = getCriteri()[$gara->lotto["criterio"]]["titolo"];
$extraInfo = json_decode($gara->lotto["extraInfo"],true);
if (!empty($extraInfo)) {
$vocabolario["lotto"] += $extraInfo;
}
}
$vocabolario["fase"] = $gara->round;
$extraInfo = json_decode($gara->round["extraInfo"],true);
if (!empty($extraInfo)) {
$vocabolario["fase"] += $extraInfo;
}
if (!empty($seduta)) {
$vocabolario["data_seduta"] = mysql2completedate($seduta["data"]);
}
$incaricati = $gara->getManagerIncarichi()->getIncaricati();
if (!empty($incaricati)) {
foreach($incaricati AS $incaricato) {
if ($incaricato["ruolo"] == 14) { // 14: ruolo RUP
$vocabolario["gara"]["rup"] = "{$incaricato["extraInfo"]["cognome"]} {$incaricato["extraInfo"]["nome"]}";
}
}
}
$managerSeggio = $gara->getManagerCommissione("seggio");
$vocabolario["gara"]["numero_atto_seggio"] = $managerSeggio->getInfo()["numero_atto"];
$vocabolario["gara"]["data_atto_seggio"] = $managerSeggio->getInfo()["data_atto"];
foreach(cpvManager::getInfo($gara->getCategorieMerceologiche()) AS $cpv) {
$vocabolario["gara"]["cpv"] = $cpv["codice_completo"] . " - " . $cpv["IT"];
}
$seggio = $managerSeggio->getCommissari();
$firme = "";
if (!empty($seggio)) {
ob_start();
foreach($seggio AS $c) {
echo "<strong>{$c["ruolo"]}</strong> - {$c["cognome"]} {$c["nome"]}<br>";
}
$firme = ob_get_clean();
}
$vocabolario["seggio"] = $firme;
$managerCommissione = $gara->getManagerCommissione("commissione");
$vocabolario["gara"]["numero_atto_commissione"] = $managerCommissione->getInfo()["numero_atto"];
$vocabolario["gara"]["data_atto_commissione"] = $managerCommissione->getInfo()["data_atto"];
$seggio = $managerCommissione->getCommissari();
$firme = "";
if (!empty($commissione)) {
ob_start();
foreach($commissione AS $c) {
echo "<strong>{$c["ruolo"]}</strong> - {$c["cognome"]} {$c["nome"]}<br>";
}
$firme = ob_get_clean();
}
$vocabolario["commissione"] = $firme;
$lotti = $gara->getLotti();
ob_start();
echo "<table style='width:100%'>
<thead>
<tr>
<th>Numero</th>
<th>CIG</th>
<th>CUP</th>
<th>Oggetto</th>
<th>".__(getTipologieAffidamento(false, $gara->info["timestamp_creazione"])[$gara->info["tipologia"]]["titolo"])."</th>
<th>Costo manodopera</th>
<th>Oneri non soggetti a ribasso</th>
</tr>
</thead><tbody>";
$totaleImportoBase = 0;
$totaleManodopera = 0;
$totaleOneri = 0;
foreach($lotti AS $lottoElenco) {
$totaleImportoBase += $lottoElenco["importoBase"];
$totaleManodopera += $lottoElenco["importoManodopera"];
$totaleOneri += $lottoElenco["oneriNoRibasso"];
$lottoElenco = gara::formatLotto($lottoElenco);
echo "<tr>
<td>{$lottoElenco["numero"]}</td>
<td>{$lottoElenco["cig"]}</td>
<td>{$lottoElenco["cup"]}</td>
<td>{$lottoElenco["oggetto"]}</td>
<td style=\"text-align:right\">{$lottoElenco["importoBase"]}</td>
<td style=\"text-align:right\">{$lottoElenco["importoManodopera"]}</td>
<td style=\"text-align:right\">{$lottoElenco["oneriNoRibasso"]}</td>
</tr>";
}
echo "</tbody></table>";
$vocabolario["elencolotti"] = ob_get_clean();
$vocabolario["gara"]["totaleImportoBase"] = number_format($totaleImportoBase,2,",",".");
$vocabolario["gara"]["totaleManodopera"] = number_format($totaleImportoBase,2,",",".");
$vocabolario["gara"]["totaleOneri"] = number_format($totaleOneri,2,",",".");
$criteri = $gara->getMacroCriteri();
if (!empty($criteri)) {
ob_start();
echo "<table style='width:100%'>
<thead>
<tr>
<th>Criterio</th>
<th>Peso</th>
<th colspan=\"2\">Sottocriteri</th>
</tr>
</thead><tbody>";
$totaleTecnico = 0;
$totaleEconomico = 0;
foreach($criteri AS $criterio) {
$sub = $gara->getSubCriteri($criterio["codice"]);
$rowspan = "";
if (count($sub) > 1) {
$rowspan="rowspan=\"".count($sub)."\"";
}
echo "<tr>
<td {$rowspan}>{$criterio["denominazione"]}<br><small>{$criterio["descrizione"]}</small></td>
<td {$rowspan}>{$criterio["peso"]}</td>
";
$first = true;
if (!empty($sub)) {
foreach($sub AS $s) {
if (!$first) {
echo "</tr><tr>";
} else {
$first = false;
}
echo "
<td>{$s["denominazione"]}<br><small>{$criterio["descrizione"]}</small></td>
<td>{$s["peso"]}</td>";
}
} else {
echo "<td colspan=\"2\"></td>";
}
echo "</tr>";
if ($criterio["economico"] == "S") {
$totaleEconomico += $criterio["peso"];
} else {
$totaleTecnico += $criterio["peso"];
}
}
echo "</tbody></table>";
$vocabolario["gara"]["tabellaCriteri"] = ob_get_clean();
$vocabolario["gara"]["punteggioMassimoTecnico"] = $totaleTecnico;
$vocabolario["gara"]["punteggioMassimoEconomico"] = $totaleEconomico;
}
if (!empty($gara->lotto)) {
$lottoFormatted = gara::formatLotto($gara->lotto);
$importoAggiudicazione = $lottoFormatted["importoAggiudicazione"];
$importoNetto = $importoAggiudicazione - $lottoFormatted["importoNonRibassabile"];
$vocabolario["lotto"]["ribassoAggiudicazione"] = $lottoFormatted["importoRibassabile"] != 0 ? (100 - ($importoAggiudicazione * 100 / $lottoFormatted["importoRibassabile"])) : null;
$vocabolario["lotto"]["riepilogoAnomalia"] = "";
if (!empty($vocabolario["lotto"]["info-anomalia-{$gara->round["codice"]}"])) {
$infoAnomalia = json_decode($vocabolario["lotto"]["info-anomalia-{$gara->round["codice"]}"],true);
$vocabolario["lotto"]["riepilogoAnomalia"] = $infoAnomalia["riepilogo"] ?? "";
}
$bind = [":codice_lotto"=>$gara->lotto["codice"],":codice"=>$round["codice"]];
$sql = "SELECT b_gare_buste.codice_partecipante,b_gare_buste.codice_richiesta,b_gare_buste.timestamp_decrypt, b_gare_richieste.busta,r_partecipanti_gare.codice_fiscale,r_partecipanti_gare.ragione_sociale
FROM b_gare_buste JOIN b_gare_richieste ON b_gare_buste.codice_richiesta = b_gare_richieste.codice
JOIN r_partecipanti_gare ON b_gare_buste.codice_partecipante = r_partecipanti_gare.codice
WHERE b_gare_buste.open = 'S'
AND r_partecipanti_gare.codice_lotto = :codice_lotto
AND r_partecipanti_gare.codice_round = :codice ";
if (!empty($dataInizio)) {
$tipologie = [""];
$sql .= " AND b_gare_buste.timestamp_decrypt BETWEEN :inizio AND :fine ";
$bind[":inizio"] = $dataInizio;
$bind[":fine"] = $dataFine;
} else {
$tipologie = ["amministrativa","tecnica","economica"];
$sql .= " AND b_gare_richieste.busta = :busta ";
}
$sql .= " ORDER BY b_gare_buste.timestamp_decrypt ";
foreach($tipologie AS $tipologia) {
if (empty($dataInizio)) {
$bind[":busta"] = $tipologia;
}
$aperture = $pdo->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC);
$timing = "";
if (!empty($aperture)) {
$tipiBuste = gara::tipologieBusta();
ob_start();
echo "<table style='width:100%'>";
foreach($aperture AS $apertura) {
echo "<tr><td>" . mysql2completedate($apertura["timestamp_decrypt"]) . "</td><td>" . __($tipiBuste[$apertura["busta"]]["titolo"]) . "</td><td>" . $apertura["codice_fiscale"] . "</td><td>" . $apertura["ragione_sociale"] . "</td></tr>";
}
echo "</table>";
$timing = ob_get_clean();
}
if (!empty($tipologia)) {
$tipologia = "_{$tipologia}";
}
$vocabolario["timing_apertura{$tipologia}"] = $timing;
}
$partecipanti = $gara->getPartecipanti();
$vocabolario["totalePartecipanti"] = count($partecipanti);
$esclusi = "";
$aggiudicatari = "";
$tablePartecipanti = "";
$headElenco = "<table style='width:100%'><thead><tr><th>#</th><th>ID Univoco</th><th>Codice Fiscale</th><th>Denominazione</th></tr></thead><tbody>";
$footElenco = "</tbody></table>";
$i = 1;
foreach($partecipanti AS $partecipante) {
$row = "<tr><td>{$i}</td><td>" . $partecipante["codice"] . "</td><td>" . $partecipante["codice_fiscale"] . "</td><td>" . $partecipante["ragione_sociale"] . "<td></tr>";
if ($partecipante["escluso"] == "S") {
$esclusi .= $row;
}
if ($partecipante["aggiudicatario"] == "S") {
$aggiudicatari .= $row;
}
$tablePartecipanti .= $row;
$i ++;
}
$vocabolario["partecipanti"] = $headElenco . $tablePartecipanti . $footElenco;
$vocabolario["aggiudicatario"] = $headElenco . $aggiudicatari . $footElenco;
$vocabolario["esclusi"] = $headElenco . $esclusi . $footElenco;
$invitati = $gara->getInvitati();
$invitatiManuali = $gara->getInvitatiManuali();
$vocabolario["totaleInvitati"] = count($invitati) + count($invitatiManuali);
ob_start();
echo "<table style='width:100%'>
<thead>
<tr>
<th>#</th>
<th>Codice Fiscale</th>
<th>Denominazione</th>
</tr>
</thead>
<tbody>";
$i = 1;
if (!empty($invitati)) {
foreach($invitati AS $invitato) {
$oeInfo = oeManager::getOE($invitato['codice_operatore']);
$row = "<tr>
<td>{$i}</td>
<td>" . $oeInfo["codice_fiscale_impresa"] . "</td>
<td>" . $oeInfo["ragione_sociale"] . "<td>
</tr>";
echo $row;
$i ++;
}
}
if (!empty($invitatiManuali)) {
foreach($invitatiManuali AS $invitato) {
$row = "<tr>
<td>{$i}</td>
<td>" . $oeInfo["codice_fiscale_operatore"] . "</td>
<td>" . $oeInfo["denominazione"] . "<td>
</tr>";
echo $row;
$i ++;
}
}
echo "</tbody></table>";
$vocabolario["invitati"] = ob_get_clean();
$graduatoria = $gara->getImportoAggiudicazionePartecipanti(true,false);
$graduatoriaNominativi = $graduatoriaRibassi = $graduatoriaImporti = $graduatoriaTotale = $graduatoriaTecnica = "<table style='width:100%'><thead><tr><th>#</th><th>ID Univoco</th><th>Codice Fiscale</th><th>Denominazione</th>";
$graduatoriaImporti .= "<th>Importo offerto</th>";
$graduatoriaRibassi .= "<th>Ribasso offerto</th>";
if ($gara->soloEconomica()) {
$graduatoriaTotale .= "<th>Punteggio</th>";
} else {
$graduatoriaTotale .= "<th>Punteggio Tecnico</th><th>Punteggio Economico</th><th>Totale</th>";
$graduatoriaTecnica .= "<th>Punteggio Tecnico</th>";
}
$graduatoriaTotale .= "</tr></thead><tbody>";
$graduatoriaTecnica .= "</tr></thead><tbody>";
$i = 1;
foreach($graduatoria AS $partecipante) {
$row = $rowNominativi = $rowRibassi = $rowImporti = $rowTecnica = "<tr><td>{$i}</td><td>" . $partecipante["codice"] . "</td><td>" . $partecipante["codice_fiscale"] . "</td><td>" . $partecipante["ragione_sociale"] . "</td>";
$rowImporti .= "<td style='text-align:center'>&euro; " . ((!empty($partecipante["totaleEconomico"])) ? number_format(($partecipante["offerta"] ?? 0),2,",",".") : "") . "</td>";
$ribasso = 100 - ((($partecipante["offerta"] ?? 0) * 100) / $lottoElenco["importoRibassabile"]);
$rowRibassi .= "<td style='text-align:center'>" . ((!empty($partecipante["totaleEconomico"])) ? number_format($ribasso,9,",",".") : "") . "%</td>";
if ($gara->soloEconomica()) {
$row .= "<td style='text-align:center'>{$partecipante["totale"]}</td>";
} else {
$row .= "<td style='text-align:center'>" . ((!empty($partecipante["totaleTecnico"])) ? $partecipante["totaleTecnico"] : __("Escluso")) . "</td>";
$row .= "<td style='text-align:center'>" . ((!empty($partecipante["totaleEconomico"])) ? $partecipante["totaleEconomico"] : __("Escluso")) . "</td>";
$row .= "<td style='text-align:center'>" . ((!empty($partecipante["totale"])) ? $partecipante["totale"] : __("Escluso")) . "</td>";
$rowTecnica .= "<td style='text-align:center'>" . ((!empty($partecipante["totaleTecnico"])) ? $partecipante["totaleTecnico"] : __("Escluso")) . "</td>";
}
$rowNominativi .= "</tr>";
$rowRibassi .= "</tr>";
$rowImporti .= "</tr>";
$rowTecnica .= "</tr>";
$row .= "</tr>";
$i ++;
$graduatoriaNominativi .= $rowNominativi;
$graduatoriaRibassi .= $rowRibassi;
$graduatoriaImporti .= $rowImporti;
$graduatoriaTecnica .= $rowTecnica;
$graduatoriaTotale .= $row;
}
$graduatoriaImporti .= "</table>";
$graduatoriaTotale .= "</table>";
$graduatoriaTecnica .= "</table>";
$vocabolario["graduatoria"] = $graduatoriaTotale;
$vocabolario["graduatoria-tecnica"] = $graduatoriaTecnica;
$vocabolario["graduatoria-importi"] = $graduatoriaImporti;
$vocabolario["graduatoria-nominativi"] = $graduatoriaNominativi;
$vocabolario["graduatoria-ribassi"] = $graduatoriaRibassi;
$manager = $gara->getManagerRichieste();
$esito_controllo_documentazione = "";
ob_start();
$richieste =$manager->getRichieste(["attivo"=>"S"]);
if (!empty($richieste)) {
echo "Sono state attivate le seguenti procedure di soccorso istruttorio:<br><br>
<table style='width:100%'>
<tr>
<th>Operatore Economico</th>
<th>Richiesta</th>
<th>Termine di presentazione</th>
</tr>";
foreach($richieste AS $richiesta) {
$ooee = $manager->getOE($richiesta["codice"]);
?>
<tr>
<td>
<?
foreach($ooee AS $oe) {
foreach($partecipanti AS $partecipante) {
if ($partecipante["codice_operatore"] == $oe["codice_operatore"]) {
echo $partecipante["codice_fiscale"] . " " . $partecipante["ragione_sociale"] . "<br>";
}
}
} ?>
</td>
<td><?= $richiesta["titolo"] ?></td>
<td><?= mysql2datetime($richiesta["scadenza"]) ?></td>
</tr>
<?
}
echo "</table>";
}
$esito_controllo_documentazione .= ob_get_clean() . "<br><br>Dal controllo effettuato dalla Commissione di gara risulta che la documentazione &egrave; conforme e le ditte concorrenti di cui sopra vengono ammesse alla fase successiva di gara";
if (!empty($esclusi)) {
$esito_controllo_documentazione .= ", tranne i seguenti:<br><table style='width:100%'>" . $esclusi . "</table>";
} else {
$esito_controllo_documentazione .= ".";
}
$vocabolario["esito_controllo_documentazione"] = $esito_controllo_documentazione;
}
$esito_richieste_oscuramento = "";
$richieste = $gara->getRichieste();
$segreti = [];
if (!empty($richieste) && !empty($partecipanti)) {
foreach($richieste AS $richiesta) {
foreach($partecipanti AS $partecipante) {
$busta = $gara->getBusta($partecipante["codice"],$richiesta["codice"]);
$segreto = null;
if (!empty($busta)) {
$emendamento = $gara->getEmendamento($partecipante["codice"],$richiesta["codice"]);
if (!empty($emendamento) && $emendamento["accettata"] == "S") {
if ($emendamento["segreta"] == "S") {
$segreto = $gara->getBustaSecretata($partecipante["codice"],$richiesta["codice"],"emendamento");
}
} else if ($busta["segreta"] == "S") {
$segreto = $gara->getBustaSecretata($partecipante["codice"],$richiesta["codice"],"busta");
}
if (!empty($segreto)) {
$segreti[] = ["codice_fiscale"=>$partecipante["codice_fiscale"],"ragione_sociale"=>$partecipante["ragione_sociale"],"richiesta"=>$richiesta["titolo"],"accettata"=>$segreto["accettata"],"motivazione"=>$segreto["motivazione"]];
}
}
}
}
if (!empty($segreti)) {
ob_start();
?>
Sono state valutate le seguenti richieste di oscuramento dei documenti:
<table>
<thead>
<tr>
<th>Richiesta</th>
<th>Operatore economico</th>
<th>Esito</th>
</tr>
</thead>
<tbody>
<? foreach($segreti AS $segreto) { ?>
<tr>
<td><?= $segreto["richiesta"] ?></td>
<td><?= $segreto["codice_fiscale"] ?> <?= $segreto["ragione_sociale"] ?></td>
<td>
<? if ($segreto["accettata"] == "S") { ?>
Richiesta accettata
<? } else { ?>
Richiesta rifiutata per le seguenti motivazioni:<br>
<?= $segreto["motivazione"] ?>
<? } ?>
</td>
</tr>
<? } ?>
</tbody>
</table>
<?
$esito_richieste_oscuramento = ob_get_clean();
}
$vocabolario["esito_richieste_oscuramento"] = $esito_richieste_oscuramento;
}
}
?>