Skip to content

Commit c52779d

Browse files
committed
feat: gestione ajax documenti collegati anagrafiche e articoli
1 parent f5f5b97 commit c52779d

4 files changed

Lines changed: 713 additions & 135 deletions

File tree

ajax_documenti_collegati.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@
103103
case 'Ddt in uscita':
104104
$tipo_record = 'ddt';
105105
break;
106+
case 'Articoli':
107+
$tipo_record = 'articolo';
108+
break;
109+
case 'Anagrafiche':
110+
$tipo_record = 'anagrafica';
111+
break;
106112
default:
107113
// Per altri moduli, usa il default
108114
$tipo_record = 'intervento';

modules/anagrafiche/edit.php

Lines changed: 80 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -796,82 +796,94 @@ function risolviConto(tipo){
796796
<div class="alert alert-info">'.tr('Per impostare il <b>logo dell\'azienda</b>, caricare un\'immagine specificando come nome "<b>Logo azienda</b>"').'.</div>';
797797
}
798798

799-
// Collegamenti diretti
800-
// Fatture, ddt, preventivi, contratti, ordini, interventi, utenti collegati a questa anagrafica
801-
$elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_statidocumento_lang`.`title` AS stato_documento, `co_tipidocumento_lang`.`title` AS tipo_documento, `co_tipidocumento`.`dir`, NULL AS `deleted_at` FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento`.`id` = `co_statidocumento_lang`.`id_record` AND `co_statidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `co_documenti`.`idanagrafica` = '.prepare($id_record).'
802-
803-
UNION
804-
SELECT `zz_users`.`idgruppo` AS id, `zz_users`.`created_at` AS data, `zz_users`.`username` AS numero, 0 AS `numero_esterno`, "" AS stato_documento, "Utente" AS tipo_documento, 0 AS `dir`, NULL AS `deleted_at` FROM `zz_users` WHERE `zz_users`.`idanagrafica` = '.prepare($id_record).'
805-
806-
UNION
807-
SELECT `or_ordini`.`id`, `or_ordini`.`data`, `or_ordini`.`numero`, `or_ordini`.`numero_esterno`, `or_statiordine_lang`.`title` AS stato_documento, `or_tipiordine_lang`.`title` AS tipo_documento, `or_tipiordine`.`dir`, NULL AS `deleted_at` FROM `or_ordini` INNER JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine` LEFT JOIN `or_tipiordine_lang` ON (`or_tipiordine`.`id` = `or_tipiordine_lang`.`id_record` AND `or_tipiordine_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `or_ordini`.`idanagrafica` = '.prepare($id_record).'
808-
809-
UNION
810-
SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_statiddt_lang`.`title` AS stato_documento, `dt_tipiddt_lang`.`title` AS tipo_documento, `dt_tipiddt`.`dir`, NULL AS `deleted_at` FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` LEFT JOIN `dt_tipiddt_lang` ON (`dt_tipiddt`.`id` = `dt_tipiddt_lang`.`id_record` AND `dt_tipiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN dt_statiddt ON dt_ddt.idstatoddt=dt_statiddt.id LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `dt_ddt`.`idanagrafica` = '.prepare($id_record).'
811-
812-
UNION
813-
SELECT `in_interventi`.`id`, `in_interventi`.`data_richiesta`, `in_interventi`.`codice` AS numero, 0 AS numero_esterno, `in_statiintervento_lang`.`title` AS stato_documento, "Attività" AS tipo_documento, 0 AS dir, in_interventi.deleted_at AS `deleted_at` FROM `in_interventi` LEFT JOIN `in_interventi_tecnici` ON `in_interventi`.`id` = `in_interventi_tecnici`.`idintervento` LEFT JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.id LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `in_interventi`.`id` IN (SELECT `idintervento` FROM `in_interventi_tecnici` WHERE `idtecnico` = '.prepare($id_record).') OR `in_interventi`.`idanagrafica` = '.prepare($id_record).'
814-
815-
UNION
816-
SELECT `co_contratti`.`id`, `co_contratti`.`data_bozza`, `co_contratti`.`numero`, 0 AS numero_esterno, `co_staticontratti_lang`.`title` AS stato_documento, "Contratto" AS tipo_documento, 0 AS dir, NULL AS `deleted_at` FROM `co_contratti` LEFT JOIN co_staticontratti ON co_contratti.idstato=co_staticontratti.id LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `co_contratti`.`idanagrafica` = '.prepare($id_record).'
817-
818-
UNION
819-
SELECT `co_preventivi`.`id`, `co_preventivi`.`data_bozza`, `co_preventivi`.`numero`, 0 AS numero_esterno, `co_statipreventivi_lang`.`title` AS stato_documento , "Preventivo" AS tipo_documento, 0 AS dir, NULL AS `deleted_at` FROM `co_preventivi` LEFT JOIN co_statipreventivi ON co_preventivi.idstato=co_statipreventivi.id LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id` = `co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `co_preventivi`.`idanagrafica` = '.prepare($id_record).' AND `default_revision` = 1
820-
821-
ORDER BY `data`');
822-
823-
if (!empty($elementi)) {
824-
echo '
825-
<div class="card card-warning collapsable collapsed-card">
799+
// Documenti collegati - Caricamento via AJAX
800+
echo '
801+
<div class="card card-warning collapsable collapsed-card" id="documenti-collegati-card">
826802
<div class="card-header with-border">
827-
<h3 class="card-title"><i class="fa fa-warning"></i> '.tr('Documenti collegati: _NUM_', [
828-
'_NUM_' => count($elementi),
829-
]).'</h3>
803+
<h3 class="card-title"><i class="fa fa-warning"></i> <span id="documenti-collegati-title">'.tr('Documenti collegati').'</span></h3>
830804
<div class="card-tools pull-right">
831-
<button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fa fa-plus"></i></button>
805+
<button type="button" class="btn btn-tool" data-card-widget="collapse" id="documenti-collegati-toggle"><i class="fa fa-plus"></i></button>
832806
</div>
833807
</div>
834-
<div class="card-body">
835-
<ul>';
836-
837-
foreach ($elementi as $elemento) {
838-
$descrizione = tr('_DOC_ _NUM_ del _DATE_ _DELETED_AT_ _STATO_', [
839-
'_DOC_' => $elemento['tipo_documento'],
840-
'_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'],
841-
'_DATE_' => Translator::dateToLocale($elemento['data']),
842-
'_DELETED_AT_' => (!empty($elemento['deleted_at']) ? tr('Eliminato il:').' '.Translator::dateToLocale($elemento['deleted_at']) : ''),
843-
'_STATO_' => (!empty($elemento['stato_documento']) ? '('.$elemento['stato_documento'].')' : ''),
844-
]);
845-
846-
// se non è un preventivo è un ddt o una fattura
847-
// se non è un ddt è una fattura.
848-
if (in_array($elemento['tipo_documento'], ['Utente'])) {
849-
$modulo = 'Utenti e permessi';
850-
} elseif (in_array($elemento['tipo_documento'], ['Attività'])) {
851-
$modulo = 'Interventi';
852-
} elseif (in_array($elemento['tipo_documento'], ['Preventivo'])) {
853-
$modulo = 'Preventivi';
854-
} elseif (in_array($elemento['tipo_documento'], ['Contratto'])) {
855-
$modulo = 'Contratti';
856-
} elseif (in_array($elemento['tipo_documento'], ['Ordine cliente', 'Ordine fornitore'])) {
857-
$modulo = ($elemento['dir'] == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore';
858-
} elseif (in_array($elemento['tipo_documento'], ['Ddt in uscita', 'Ddt in entrata'])) {
859-
$modulo = ($elemento['dir'] == 'entrata') ? 'Ddt in uscita' : 'Ddt in entrata';
860-
} else {
861-
$modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
862-
}
808+
<div class="card-body" id="documenti-collegati-body">
809+
<div class="text-center" id="documenti-collegati-loading">
810+
<i class="fa fa-spinner fa-spin"></i> '.tr('Caricamento documenti collegati in corso').'
811+
</div>
812+
<div id="documenti-collegati-content" style="display: none;"></div>
813+
</div>
814+
</div>';
863815

864-
$id = $elemento['id'];
816+
echo '
817+
<script type="text/javascript">
818+
// Funzioni per i documenti collegati
819+
var documentiCaricati = false;
820+
821+
function caricaConteggioDocumenti() {
822+
$.get(globals.rootdir + "/ajax_documenti_collegati.php", {
823+
id_module: globals.id_module,
824+
id_record: globals.id_record,
825+
count_only: 1
826+
})
827+
.done(function(data) {
828+
var title = $("#documenti-collegati-title");
829+
var card = $("#documenti-collegati-card");
830+
831+
if (data.count > 0) {
832+
card.removeClass("card-secondary").addClass("card-warning");
833+
title.html("'.tr('Documenti collegati').' (" + data.count + ")");
834+
} else {
835+
card.removeClass("card-warning").addClass("card-secondary");
836+
title.html("'.tr('Documenti collegati').'");
837+
}
838+
})
839+
.fail(function() {
840+
var title = $("#documenti-collegati-title");
841+
var card = $("#documenti-collegati-card");
842+
card.removeClass("card-warning").addClass("card-secondary");
843+
title.html("'.tr('Documenti collegati').'");
844+
});
845+
}
865846
866-
echo '
867-
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
847+
function caricaDocumentiCollegati() {
848+
$("#documenti-collegati-loading").show();
849+
$("#documenti-collegati-content").hide();
850+
851+
$.get(globals.rootdir + "/ajax_documenti_collegati.php", {
852+
id_module: globals.id_module,
853+
id_record: globals.id_record
854+
})
855+
.done(function(data) {
856+
$("#documenti-collegati-loading").hide();
857+
$("#documenti-collegati-content").html(data).show();
858+
documentiCaricati = true;
859+
})
860+
.fail(function() {
861+
$("#documenti-collegati-loading").hide();
862+
$("#documenti-collegati-content").html("<div class=\\"alert alert-danger\\">'.tr('Errore durante il caricamento dei documenti collegati').'</div>").show();
863+
});
868864
}
869865
870-
echo '
871-
</ul>
872-
</div>
873-
</div>';
874-
}
866+
$(document).ready(function() {
867+
// Carica il conteggio dei documenti collegati
868+
caricaConteggioDocumenti();
869+
870+
// Carica i documenti quando la card viene espansa
871+
$("#documenti-collegati-card").on("expanded.lte.cardwidget", function() {
872+
if (!documentiCaricati) {
873+
caricaDocumentiCollegati();
874+
}
875+
});
876+
877+
// Aggiorna l\'icona quando la card viene espansa/collassata
878+
$("#documenti-collegati-card").on("expanded.lte.cardwidget", function() {
879+
$("#documenti-collegati-toggle i").removeClass("fa-plus").addClass("fa-minus");
880+
});
881+
882+
$("#documenti-collegati-card").on("collapsed.lte.cardwidget", function() {
883+
$("#documenti-collegati-toggle i").removeClass("fa-minus").addClass("fa-plus");
884+
});
885+
});
886+
</script>';
875887

876888
if (empty($record['deleted_at'])) {
877889
if (!in_array($id_azienda, $tipi_anagrafica)) {

0 commit comments

Comments
 (0)