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.
 
 
 
 
 

373 righe
13 KiB

<?php
// Boot
$configPath = substr(__DIR__, 0, strpos(__DIR__, "/public_html")) . "/config.php";
include_once($configPath);
// Modulo corrente
$modulo = "npa";
// Modulo collegato
$modulo_riferimento = !empty($_GET["modulo_riferimento"]) ? $_GET["modulo_riferimento"] : null;
// Codice del modulo collegato
$id_riferimento = !empty($_GET["id_riferimento"]) ? (int) $_GET["id_riferimento"] : null;
// Codice round del modulo collegato
$codice_round = !empty($_GET["codice_round"]) ? (int) $_GET["codice_round"] : null;
// Codice scheda
$tipo_scheda = $_GET["scheda"] ?? null;
// Cerchiamo i metadata di questa scheda
$metadata = NuovaPiattaformaAppalti::getCardsMetadata()[$tipo_scheda] ?? [];
if(empty($metadata)) { die_forbidden(); }
// Codice lotto
$codice_lotto = isset($_GET["codice_lotto"]) ? intval($_GET["codice_lotto"]) : null;
// Determina se la creazione è forzata
$force_create = false;
$codice = intval($_GET["codice"] ?? 0);
$sdk_version = NuovaPiattaformaAppalti::AUTOMATICALLY_GET_SDK_VERSION;
// Se il codice è 0
if($codice <= 0) {
// Le nuove schede vanno generate con il nuovo SDK
$sdk_version = NuovaPiattaformaAppalti::LATEST_SDK_VERSION;
// Dobbiamo essere collegati a qualcosa, altrimenti non possiamo ritrovare le info
if($modulo_riferimento == null || $id_riferimento == null) {
die_forbidden();
}
// Verifichiamo che sia multipla
if($metadata["multipla"] ?? false) {
// Se è multipla, dobbiamo crearne una nuova
$force_create = true;
} else {
$criteri_ricerca = [
"id_scheda" => $tipo_scheda,
"modulo_riferimento" => $modulo_riferimento,
"id_riferimento" => $id_riferimento,
"codice_lotto" => $codice_lotto ?? 0,
];
// Se non lo è, dobbiamo verificare che ne esista già una
$scheda = NuovaPiattaformaAppalti::fetchSchede(["s.codice"], $criteri_ricerca, true, false);
// Se non esiste la dobbiamo creare
if(empty($scheda)) {
$force_create = true;
// Se invece esiste carichiamo proprio lei
} else {
$codice = intval($scheda["codice"]);
parse_str($_SERVER['QUERY_STRING'], $query);
$query["codice"] = $codice;
$query = http_build_query($query);
$url = "/backend/npa/edit.php?{$query}";
die("<meta http-equiv='refresh' content='0;URL={$url}'>");
}
}
}
try {
$npa = NuovaPiattaformaAppalti::init(null, $codice, $tipo_scheda, $modulo_riferimento, $id_riferimento, $sdk_version);
} catch(Exception $e) {
if($e->getCode() == 999) {
die_forbidden();
}
}
if(!is_a($npa, "NuovaPiattaformaAppalti")) {
die_forbidden("/");
}
if (!empty($npa->fascicolo["codice"])) {
$modulo_riferimento = $npa->fascicolo["modulo_riferimento"];
$id_riferimento = $npa->fascicolo["id_riferimento"];
}
// Verifica di integrità
if (empty($npa) || empty($modulo_riferimento) || !in_array($modulo_riferimento, NuovaPiattaformaAppalti::MODULI_COLLEGATI) || empty($id_riferimento) || empty($_SESSION["utente"])) {
die_forbidden();
}
// Verifica permessi
if (!$_SESSION["utente"]->permission($modulo_riferimento, $id_riferimento) || !$_SESSION["utente"]->permission("npa", $codice ?? null)) {
die_forbidden();
}
// Verifica blocco
$lock = $npa->checkLock();
// Verifica associazione ad un lotto
if ($npa->metadataSchede[$npa->scheda["id_scheda"]]["lotto"]) {
if (empty($codice_lotto)) {
die_forbidden();
}
$npa->setLotto($codice_lotto);
}
if(!empty($npa->scheda["codice_lotto"]))
$codice_lotto = $npa->scheda["codice_lotto"];
if ($force_create) {
$saveData = $npa->scheda;
$saveData["bozza"] = 1;
$saveData["codice_ente"] = $npa->oggetto->info["codice_ente"];
if (!empty($codice_lotto)) {
$saveData["codice_lotto"] = $codice_lotto;
}
$saveData["modulo_riferimento"] = $modulo_riferimento;
$saveData["id_riferimento"] = $id_riferimento;
$saveData["round_riferimento"] = $codice_round;
if (!empty($codice_rettifica)) {
$saveData["codice_rettifica"] = $codice_rettifica;
}
if (!empty($codice_modifica)) {
$saveData["codice_modifica"] = $codice_modifica;
}
$saveData["npa"] = [];
$result = $npa->save($saveData);
if (!empty($result["codice"])) {
$codice = $result["codice"];
parse_str($_SERVER['QUERY_STRING'], $query);
$query["codice"] = $codice;
$query = http_build_query($query);
$url = "/backend/npa/edit.php?{$query}";
die("<meta http-equiv='refresh' content='0;URL={$url}'>");
}
die_forbidden();
}
$required_js[] = "/src/js/extra/select2.js";
$required_css[] = "/src/css/extra/select2.css";
$required_css[] = "/src/css/extra/select2-bootstrap.css";
$query = [];
$query["codice"] = $npa->scheda["codice"];
$query["scheda"] = $npa->scheda["id_scheda"];
// Costruzione breadcrumb
$breadcrumb = [];
if (!empty($npa->fascicolo["modulo_riferimento"]) && !empty($npa->fascicolo["id_riferimento"])) {
$breadcrumb["/{$npa->fascicolo["modulo_riferimento"]}"] = Modulo::getInfo($npa->fascicolo["modulo_riferimento"])["titolo"];
$breadcrumb["/{$npa->fascicolo["modulo_riferimento"]}/panel.php?codice={$npa->fascicolo["id_riferimento"]}"] = __("Pannello");
$breadcrumb["/{$npa->fascicolo["modulo_riferimento"]}/npa/index.php?codice={$npa->fascicolo["id_riferimento"]}"] = __("ANAC");
if (!empty($codice_lotto)) {
$breadcrumb["/npa/lotti/panel.php?codice_lotto={$codice_lotto}&codice_fascicolo={$npa->fascicolo["codice"]}"] = "LOTTO #{$codice_lotto}";
}
$query["modulo"] = $npa->fascicolo["modulo_riferimento"];
$query["id_riferimento"] = $npa->fascicolo["id_riferimento"];
}
$query = http_build_query($query);
$breadcrumb[] = __("Scheda ") . str_replace("_", ".", $npa->scheda["id_scheda"]);
//Istazione l'alertManager
$alertManager = new alertManager("npa-{$npa->fascicolo["codice"]}");
// Tasti navigazione
ob_start();
include_once "./inc/components/navigation_buttons.php";
$navigation_buttons = ob_get_clean();
$small_navigation_buttons = str_replace('class="nav-text ml-2"', 'style="display:none;"', $navigation_buttons);
include_once $beRoot . "/layout/top.php";
include_once "./inc/components/service_status.php";
?>
<div id="npa-big-nav-placeholder">
<div class="row">
<div class="col flex-grow-1">
<div class="pt-5 pb-3">
<div class="row">
<div class="col-12">
<h2>
<?= Modulo::header($radice) ?>
</h2>
<hr>
<h3><?= str_replace("_", ".", $npa->scheda["id_scheda"]) . ") {$npa->metadataSchede[$npa->scheda["id_scheda"]]["titolo"]}" ?></h3>
</div>
</div>
</div>
</div>
<div class="col flex-grow-0 align-self-center">
<div class="row">
<div id="npa-big-nav" class="col-12 px-4 d-flex justify-content-end text-nowrap">
<?= $navigation_buttons; ?>
</div>
</div>
</div>
</div>
<style>
.npa-tabs.nav-tabs {
position: sticky;
top: 0;
padding-top: 0.33em;
flex-wrap: nowrap;
overflow-x: auto;
overflow-y: hidden;
z-index: 999;
background: var(--white);
}
.npa-tabs .nav-item {
white-space: pre;
}
</style>
<?php include_once "./inc/components/timeline.php"; ?>
<?php include_once "./inc/components/suggestions.php"; ?>
</div>
<?
$npa->getSuggestions();
if(!empty($npa->scheda["codice_rettifica"] || !empty($npa->scheda["codice_modifica"]))) {
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.codiceFiscale";
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.codiceCentroCosto";
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.codiceAusa";
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.funzioniSvolte.*.codice";
$npa->locked_fields[] = "anacForm.stazioniAppaltanti.*.saTitolare";
}
if (!$lock) {
?>
<form id="npa-form" rel="validate" method="post" action="ajax/save.php">
<input type="hidden" id="bozza-input" name="bozza" value="0">
<input type="hidden" name="token" value="<?= tokenGen() ?>">
<input type="hidden" name="codice" value="<?= $npa->scheda["codice"] ?>">
<input type="hidden" name="id_scheda" value="<?= $npa->scheda["id_scheda"] ?>">
<input type="hidden" name="codice_ente" value="<?= $npa->oggetto->info["codice_ente"] ?>">
<? if (!empty($codice_lotto)) { ?><input type="hidden" name="codice_lotto" value="<?= $codice_lotto ?>"><? } ?>
<input type="hidden" name="modulo_riferimento" value="<?= $modulo_riferimento ?>">
<input type="hidden" name="id_riferimento" value="<?= $id_riferimento ?>">
<input type="hidden" name="round_riferimento" value="<?= $codice_round ?>">
<?php if(!empty($codice_rettifica) ) : ?>
<input type='hidden' name='codice_rettifica' value="<?= $codice_rettifica ?>">
<?php endif; ?>
<?
}
?>
<div class="row">
<div class="col-12 col-md-3 order-2" id="guue-commands">
<div class="row">
<div class="col-sm-12">
<div class="ml-1 mb-3 justify-content-center" id="npa-small-nav" style="transition: height 0.25s ease-out, opacity 0.15s ease-out; display: none;">
<?= $small_navigation_buttons; ?>
</div>
</div>
<div id="npa-checklist" class="col-sm-12 mb-3">
<?php if(!empty($npa->check)): ?>
<?php if($npa->check["espd"]["required"]): ?>
<?php
$espd_url = "/backend/{$npa->fascicolo["modulo_riferimento"]}/dgue/index.php?codice={$npa->oggetto->info["codice"]}";
if(isset($npa->oggetto->round["codice"])) {
$espd_url .= "&codice_round={$npa->oggetto->round["codice"]}";
}
$_ready = $npa->check["espd"]["ready"];
?>
<a href="<?= $espd_url ?>" class="btn btn-block text-left my-1 btn-<?= $_ready ? "success" : "danger" ?>">
<i class='fa fa-<?= $_ready ? "check" : "exclamation-triangle" ?> mr-2'></i>
Richiesta DGUE <?= $_ready? "Presente" : "Necessaria" ?>
</a>
<?php endif; ?>
<?php if($npa->check["eform"]["required"]): ?>
<?php
$_color = "danger";
$_ready = $npa->check["eform"]["ready"];
if($_ready) {
$_ready_for_transmission = $npa->check["eform"]["ready_for_transmission"];
$_color = $_ready_for_transmission ? "success" : "warning";
/**
* @var TedEsender
*/
$ted = $npa->check["eform"]["ted"] ?? null;
if($ted) {
$_chosen = $ted->info["codice"];
$_chosen_id = $ted->info["form"];
}
}
$available = $npa->fetchCompatibleGUUECards(true, true);
?>
<a onclick="showModalWithURL('/backend/npa/ajax/scelta_guue.php?codice=<?= $npa->scheda['codice'] ?>')" class="btn btn-block text-left my-1 btn-<?= $_color ?>">
<i class='fa fa-<?= $_ready ? "check" : "exclamation-triangle" ?> mr-2'></i>
Scheda GUUE <?= $_ready? "{$_chosen_id} Presente (n°{$_chosen})" : "Necessaria" ?>
<?php if(!$_ready): ?>
- <?= count($available) ?> disponibil<?= count($available) === 1 ? "e" : "i" ?>
<?php endif; ?>
<?php if($_ready && !$_ready_for_transmission): ?>
<p class="mb-0">
<i class="fa fa-exclamation-circle mr-2"></i> La scheda GUUE selezionata è in bozza. Confermala prima di trasmettere.
</p>
<?php endif; ?>
</a>
<?php endif; ?>
<?php endif; ?>
</div>
<div id="guue-sections" class="col-sm-12">
<div class="list-group">
</div>
</div>
<div class="col-sm-12 mt-3">
<div class="alert alert-success" id="npa-autosave-status" role="alert">
Placeholder
</div>
</div>
</div>
</div>
<div class="col-12 col-md-9 order-1">
<div class="alert alert-info py-3 d-none" role="alert" id="npa-empty-form">
<h5><span class="fa fa-info-circle mr-1"></span> <?= __("Questa scheda non contiene campi da compilare dall'utente.") ?></h5>
<p class="mb-0"><?= __("Se hai già compilato le eventuali schede GUUE necessarie, puoi procedere alla trasmissione.") ?></p>
</div>
<fieldset id='master-fieldset' <?= $lock ? "disabled" : "" ?>>
<div class="row">
<?php $npa->printForm(); ?>
</div>
</fieldset>
</div>
</div>
<?php if (! $_SESSION["utente"]->readOnly) { echo NuovaPiattaformaAppalti::printJavascriptBoilerplate(); } ?>
<?php if (! $lock) : ?>
</form>
<?php else : ?>
<script type="text/javascript">
$(":input").not(".ignore-lock")
.attr("disabled", "disabled")
.trigger("chosen:updated");
</script>
<?php endif; ?>
<?php
if (!empty($alertManager->alerts)) { $alertManager->printModal(); }
include_once $beRoot . "/layout/bottom.php";