mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-17 03:51:06 +01:00
Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
db578cd342
@ -31,7 +31,7 @@ if (empty($record) || !$has_access) {
|
||||
<h3 class="text-muted">'.
|
||||
'<i class="fa fa-question-circle"></i> '.tr('Record non trovato').'
|
||||
<br><br>
|
||||
<small class="help-block">'.tr('Stai cercando di accedere ad un record eliminato o non presente').'</small>
|
||||
<small class="help-block">'.tr('Stai cercando di accedere ad un record eliminato o non presente').'.</small>
|
||||
</h3>
|
||||
<br>
|
||||
|
||||
|
@ -140,7 +140,7 @@ if (!empty($righe)) {
|
||||
// Q.tà da evadere
|
||||
echo '
|
||||
<td>
|
||||
{[ "type": "number", "name": "qta_da_evadere['.$r['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$r['qta_rimanente'].'", "extra" : "onkeyup=\"ricalcola_subtotale_riga('.$i.');\"", "decimals": "qta", "min-value": "0", "extra": "'.(($r['is_descrizione']) ? 'readonly' : '').'" ]}
|
||||
{[ "type": "number", "name": "qta_da_evadere['.$r['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$r['qta_rimanente'].'", "decimals": "qta", "min-value": "0", "extra": "'.(($r['is_descrizione']) ? 'readonly' : '').' onkeyup=\"ricalcola_subtotale_riga('.$i.');\"" ]}
|
||||
</td>';
|
||||
|
||||
// Subtotale
|
||||
|
@ -39,11 +39,11 @@ abstract class Row extends Description
|
||||
*/
|
||||
public function getImponibileScontatoAttribute()
|
||||
{
|
||||
$result = $this->prezzo_unitario_vendita > 0 ? $this->imponibile : -$this->imponibile;
|
||||
$result = $this->prezzo_unitario_vendita >= 0 ? $this->imponibile : -$this->imponibile;
|
||||
|
||||
$result -= $this->sconto;
|
||||
|
||||
return $result;
|
||||
return $this->prezzo_unitario_vendita >= 0 ? $result : -$result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -95,18 +95,17 @@ switch (post('op')) {
|
||||
|
||||
$check_vat_number = Validate::isValidVatNumber($partita_iva);
|
||||
if (empty($check_vat_number)) {
|
||||
flash()->warning(tr('Attenzione: la partita IVA _IVA_ sembra non essere valida', [
|
||||
flash()->warning(tr('Attenzione: la partita IVA _IVA_ potrebbe non essere valida', [
|
||||
'_IVA_' => $partita_iva,
|
||||
]));
|
||||
}
|
||||
|
||||
|
||||
// Validazione del Codice Fiscale, solo per anagrafiche Private e Aziende, ignoro controllo se codice fiscale e settato uguale alla p.iva
|
||||
$codice_fiscale = $anagrafica->codice_fiscale;
|
||||
if ($anagrafica->tipo != 'Ente pubblico' and $codice_fiscale != $partita_iva) {
|
||||
$check_codice_fiscale = Validate::isValidTaxCode($codice_fiscale);
|
||||
if ($anagrafica->tipo != 'Ente pubblico' and $anagrafica->codice_fiscale != $anagrafica->partita_iva) {
|
||||
$check_codice_fiscale = Validate::isValidTaxCode($anagrafica->codice_fiscale);
|
||||
if (empty($check_codice_fiscale)) {
|
||||
flash()->warning(tr('Attenzione: il codice fiscale _COD_ sembra non essere valido', [
|
||||
'_COD_' => $codice_fiscale,
|
||||
flash()->warning(tr('Attenzione: il codice fiscale _COD_ potrebbe non essere valido', [
|
||||
'_COD_' => $anagrafica->codice_fiscale,
|
||||
]));
|
||||
}
|
||||
}
|
||||
@ -166,7 +165,11 @@ switch (post('op')) {
|
||||
$anagrafica->email = post('email');
|
||||
$anagrafica->idrelazione = post('idrelazione');
|
||||
$anagrafica->idagente = $idagente;
|
||||
|
||||
$anagrafica->pec = post('pec');
|
||||
$anagrafica->tipo = post('tipo');
|
||||
$anagrafica->codice_destinatario = post('codice_destinatario');
|
||||
$anagrafica->id_nazione = post('id_nazione') ?: null;
|
||||
|
||||
$anagrafica->save();
|
||||
|
||||
if ($anagrafica->isAzienda()) {
|
||||
|
@ -54,10 +54,12 @@ echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Codice fiscale').'", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask" ]}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Relazione').'", "name": "idrelazione", "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM an_relazioni ORDER BY descrizione" ]}
|
||||
{[ "type": "select", "label": "'.tr('Tipologia').'", "name": "tipo", "values": "list=\"\": \"'.tr('Non specificato').'\", \"Azienda\": \"'.tr('Azienda').'\", \"Privato\": \"'.tr('Privato').'\", \"Ente pubblico\": \"'.tr('Ente pubblico').'\"" ]}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
@ -79,6 +81,11 @@ echo '
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Nazione').'", "name": "id_nazione", "values": "query=SELECT id AS id, CONCAT_WS(\' - \', iso2, nome) AS descrizione FROM an_nazioni ORDER BY CASE WHEN iso2=\'IT\' THEN -1 ELSE iso2 END" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Telefono').'", "name": "telefono", "class": "text-center", "icon-before": "<i class=\"fa fa-phone\"></i>" ]}
|
||||
</div>
|
||||
@ -86,11 +93,40 @@ echo '
|
||||
{[ "type": "text", "label": "'.tr('Cellulare').'", "name": "cellulare", "class": "text-center", "icon-before": "<i class=\"fa fa-mobile\"></i>" ]}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "class": "email-mask", "placeholder":"casella@dominio.ext", "icon-before": "<i class=\"fa fa-envelope\"></i>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('PEC').'", "name": "pec", "class": "email-mask", "placeholder":"pec@dominio.ext", "icon-before": "<i class=\'fa fa-envelope-o\'></i>" ]}
|
||||
</div>';
|
||||
|
||||
|
||||
$help_codice_destinatario = tr("Per impostare il codice specificare prima '<b>Tipologia</b>' e '<b>Nazione</b>' dell'anagrafica").':<br><br><ul><li>'.tr('Ente pubblico (B2G/PA) - Codice Univoco Ufficio (www.indicepa.gov.it), 6 caratteri').'</li><li>'.tr('Azienda (B2B) - Codice Destinatario, 7 caratteri').'</li><li>'.tr('Privato (B2C) - viene utilizzato il Codice Fiscale').'</li>'.'</ul>Se non si conosce il codice destinatario lasciare vuoto il campo. Verrà applicato in automatico quello previsto di default dal sistema (\'0000000\', \'999999\', \'XXXXXXX\').';
|
||||
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "text", "label": "'.tr('Codice destinatario').'", "name": "codice_destinatario", "required": 0, "class": "text-center text-uppercase alphanumeric-mask", "maxlength": "7", "extra": "", "help": "'.tr($help_codice_destinatario).'" ]}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Relazione').'", "name": "idrelazione", "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM an_relazioni ORDER BY descrizione" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>';
|
||||
@ -106,7 +142,7 @@ echo
|
||||
|
||||
<script>
|
||||
// Abilito solo ragione sociale oppure solo nome-cognome in base a cosa compilo
|
||||
$('#nome, #cognome', '#bs-popup, #bs-popup2').keyup(function(){
|
||||
$('#nome, #cognome', '#bs-popup, #bs-popup2').blur(function(){
|
||||
if ($('#nome', '#bs-popup, #bs-popup2').val() == '' && $('#cognome', '#bs-popup, #bs-popup2').val() == '' ){
|
||||
$('#nome, #cognome', '#bs-popup, #bs-popup2').prop('disabled', true).prop('required', false);
|
||||
$('#ragione_sociale', '#bs-popup, #bs-popup2').prop('disabled', false).prop('required', true);
|
||||
@ -116,7 +152,7 @@ echo
|
||||
}
|
||||
});
|
||||
|
||||
$('#ragione_sociale', '#bs-popup, #bs-popup2').keyup(function(){
|
||||
$('#ragione_sociale', '#bs-popup, #bs-popup2').blur(function(){
|
||||
if ($('#ragione_sociale', '#bs-popup, #bs-popup2').val() == '' ){
|
||||
$('#nome, #cognome', '#bs-popup, #bs-popup2').prop('disabled', false).prop('required', true);
|
||||
$('#ragione_sociale', '#bs-popup, #bs-popup2').prop('disabled', true).prop('required', false);
|
||||
|
@ -150,8 +150,8 @@ if (!$cliente) {
|
||||
{[ "type": "text", "label": "<?php echo tr('Provincia'); ?>", "name": "provincia", "maxlength": 2, "class": "text-center text-uppercase", "value": "$provincia$", "extra": "onkeyup=\"this.value = this.value.toUpperCase();\"" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Nazione'); ?>", "name": "id_nazione", "values": "query=SELECT id AS id, CONCAT_WS(' - ', iso2, nome) AS descrizione FROM an_nazioni ORDER BY nome ASC", "value": "$id_nazione$" ]}
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "label": "<?php echo tr('Nazione'); ?>", "name": "id_nazione", "values": "query=SELECT id AS id, CONCAT_WS(' - ', iso2, nome) AS descrizione FROM an_nazioni ORDER BY CASE WHEN iso2='IT' THEN -1 ELSE iso2 END", "value": "$id_nazione$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
|
@ -7,13 +7,14 @@ switch ($resource) {
|
||||
$query = 'SELECT
|
||||
mg_articoli.id,
|
||||
mg_articoli.codice,
|
||||
mg_articoli.descrizione,
|
||||
mg_articoli.descrizione,
|
||||
round(mg_articoli.qta,'.setting('Cifre decimali per quantità').') AS qta,
|
||||
mg_articoli.um,
|
||||
mg_articoli.idiva_vendita,
|
||||
mg_articoli.idconto_vendita,
|
||||
mg_articoli.idconto_acquisto,
|
||||
mg_articoli.prezzo_vendita,
|
||||
mg_articoli.prezzo_acquisto,
|
||||
mg_articoli.prezzo_acquisto,
|
||||
categoria.`nome` AS categoria,
|
||||
sottocategoria.`nome` AS sottocategoria,
|
||||
co_iva.descrizione AS iva_vendita,
|
||||
@ -47,7 +48,8 @@ switch ($resource) {
|
||||
'id' => 'id',
|
||||
'codice' => 'codice',
|
||||
'descrizione' => 'descrizione',
|
||||
'um' => 'um',
|
||||
'qta' => 'qta',
|
||||
'um' => 'um',
|
||||
'categoria' => 'categoria',
|
||||
'sottocategoria' => 'sottocategoria',
|
||||
'idiva_vendita' => 'idiva_vendita',
|
||||
@ -120,9 +122,10 @@ switch ($resource) {
|
||||
|
||||
$results[count($results) - 1]['children'][] = [
|
||||
'id' => $r['id'],
|
||||
'text' => $r['codice'].' - '.$r['descrizione'],
|
||||
'text' => $r['codice'].' - '.$r['descrizione'].' ('.Translator::numberToLocale($r['qta']).(!empty($r['um']) ? ' '.$r['um']: '').')',
|
||||
'codice' => $r['codice'],
|
||||
'descrizione' => $r['descrizione'],
|
||||
'qta' => $r['qta'],
|
||||
'um' => $r['um'],
|
||||
'idiva_vendita' => $idiva,
|
||||
'iva_vendita' => $iva,
|
||||
|
@ -352,7 +352,7 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
// Cambio stato precedente contratto in concluso (non più pianificabile)
|
||||
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE pianificabile = 0 AND fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record));
|
||||
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE is_pianificabile = 0 AND is_fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record));
|
||||
|
||||
flash()->info(tr('Contratto rinnovato!'));
|
||||
|
||||
|
@ -13,8 +13,8 @@ switch ($resource) {
|
||||
if (empty($elements)) {
|
||||
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
|
||||
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'pianificabile';
|
||||
$where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE '.$stato.' = 1)';
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_pianificabile';
|
||||
$where[] = 'idstato IN (SELECT `id` FROM `co_staticontratti` WHERE '.$stato.' = 1)';
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
|
@ -6,14 +6,14 @@ $rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontr
|
||||
|
||||
/* permetto di fatturare il contratto solo se contiene righe e si trova in uno stato fatturabile */
|
||||
echo '
|
||||
<button type="button" class="btn btn-info '.(($record['fatturabile'] && !empty($rs_documento)) ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').'">
|
||||
<button type="button" class="btn btn-info '.(($record['is_fatturabile'] && !empty($rs_documento)) ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').'">
|
||||
<i class="fa fa-magic"></i> '.tr('Crea fattura').'
|
||||
</button>';
|
||||
|
||||
if ($record['rinnovabile']) {
|
||||
$rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['pianificabile'];
|
||||
$rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['is_pianificabile'];
|
||||
|
||||
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `pianificabile` = 1')['stati_pianificabili'];
|
||||
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili'];
|
||||
|
||||
echo '
|
||||
<div class="tip" data-toggle="tooltip" title="'.tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno stato di questi stati: '.$stati_pianificabili).'" style="display:inline;">
|
||||
|
@ -5,8 +5,8 @@ include_once __DIR__.'/../../core.php';
|
||||
if (isset($id_record)) {
|
||||
$record = $dbo->fetchOne('SELECT *,
|
||||
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS tipo_anagrafica,
|
||||
(SELECT fatturabile FROM co_staticontratti WHERE id=idstato) AS fatturabile,
|
||||
(SELECT pianificabile FROM co_staticontratti WHERE id=idstato) AS pianificabile,
|
||||
(SELECT is_fatturabile FROM co_staticontratti WHERE id=idstato) AS is_fatturabile,
|
||||
(SELECT is_pianificabile FROM co_staticontratti WHERE id=idstato) AS is_pianificabile,
|
||||
(SELECT descrizione FROM co_staticontratti WHERE id=idstato) AS stato,
|
||||
(SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS idimpianti
|
||||
FROM co_contratti WHERE id='.prepare($id_record));
|
||||
|
@ -19,7 +19,7 @@ $mesi = [
|
||||
];
|
||||
|
||||
// Righe inserite
|
||||
$qp = "SELECT *, DATE_FORMAT( data_richiesta, '%m-%Y') AS mese, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_contratti.id=idcontratto) AS ragione_sociale, (SELECT CONCAT('Contratto ', numero, ' del ', DATE_FORMAT(data_bozza, '%d/%m/%Y'), ' - ', nome, ' [', (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , ']') FROM co_contratti WHERE id = co_promemoria.idcontratto) contratto, (SELECT id FROM co_contratti WHERE id = co_promemoria.idcontratto) idcontratto FROM co_promemoria WHERE idcontratto IN ( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_richiesta, '%Y-%m') ASC, ragione_sociale ASC";
|
||||
$qp = "SELECT *, DATE_FORMAT( data_richiesta, '%m-%Y') AS mese, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_contratti.id=idcontratto) AS ragione_sociale, (SELECT CONCAT('Contratto ', numero, ' del ', DATE_FORMAT(data_bozza, '%d/%m/%Y'), ' - ', nome, ' [', (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , ']') FROM co_contratti WHERE id = co_promemoria.idcontratto) contratto, (SELECT id FROM co_contratti WHERE id = co_promemoria.idcontratto) idcontratto FROM co_promemoria WHERE idcontratto IN ( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_richiesta, '%Y-%m') ASC, ragione_sociale ASC";
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
|
||||
if (!empty($rsp)) {
|
||||
|
@ -19,7 +19,7 @@ $mesi = [
|
||||
];
|
||||
|
||||
// Righe inserite
|
||||
$qp = "SELECT *, DATE_FORMAT( data_scadenza, '%m-%Y') AS mese, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id=idcontratto)) AS ragione_sociale, (SELECT matricola FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT nome FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT idsede FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS idsede FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_scadenza, '%m-%Y') ASC, idcliente ASC";
|
||||
$qp = "SELECT *, DATE_FORMAT( data_scadenza, '%m-%Y') AS mese, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id=idcontratto)) AS ragione_sociale, (SELECT matricola FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT nome FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT idsede FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS idsede FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_scadenza, '%m-%Y') ASC, idcliente ASC";
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
|
||||
if (!empty($rsp)) {
|
||||
|
@ -19,7 +19,7 @@ $mesi = [
|
||||
];
|
||||
|
||||
// Righe inserite
|
||||
//idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND
|
||||
//idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND
|
||||
$qp = "SELECT *,
|
||||
(SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_ordiniservizio_pianificazionefatture.idcontratto) AS budget_contratto,
|
||||
DATE_FORMAT(data_scadenza, '%m-%Y') AS mese,
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT *, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC');
|
||||
$rs = $dbo->fetchArray('SELECT *, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC');
|
||||
|
||||
if (!empty($rs)) {
|
||||
echo '
|
||||
|
@ -137,9 +137,9 @@ switch (get('op')) {
|
||||
$mese = $_GET['mese'];
|
||||
|
||||
// Righe inserite
|
||||
$qp = "SELECT co_promemoria.id, idcontratto, richiesta, DATE_FORMAT( data_richiesta, '%m%Y') AS mese, data_richiesta, an_anagrafiche.ragione_sociale, 'promemoria' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM (co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL
|
||||
$qp = "SELECT co_promemoria.id, idcontratto, richiesta, DATE_FORMAT( data_richiesta, '%m%Y') AS mese, data_richiesta, an_anagrafiche.ragione_sociale, 'promemoria' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM (co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL
|
||||
|
||||
UNION SELECT co_ordiniservizio.id, idcontratto, '', DATE_FORMAT( data_scadenza, '%m%Y') AS mese, data_scadenza, an_anagrafiche.ragione_sociale, 'ordine' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento='ODS') AS tipointervento FROM (co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL
|
||||
UNION SELECT co_ordiniservizio.id, idcontratto, '', DATE_FORMAT( data_scadenza, '%m%Y') AS mese, data_scadenza, an_anagrafiche.ragione_sociale, 'ordine' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento='ODS') AS tipointervento FROM (co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL
|
||||
|
||||
ORDER BY data_richiesta ASC";
|
||||
|
||||
|
@ -285,9 +285,9 @@ if ($total == 0) {
|
||||
</div>
|
||||
<br>
|
||||
<?php
|
||||
$qp = 'SELECT MONTH(data_richiesta) AS mese, YEAR(data_richiesta) AS anno FROM (co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL
|
||||
$qp = 'SELECT MONTH(data_richiesta) AS mese, YEAR(data_richiesta) AS anno FROM (co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL
|
||||
|
||||
UNION SELECT MONTH(data_scadenza) AS mese, YEAR(data_scadenza) AS anno FROM (co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL
|
||||
UNION SELECT MONTH(data_scadenza) AS mese, YEAR(data_scadenza) AS anno FROM (co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL
|
||||
|
||||
UNION SELECT MONTH(data_richiesta) AS mese, YEAR(data_richiesta) AS anno FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 ORDER BY anno,mese';
|
||||
$rsp = $dbo->fetchArray($qp);
|
||||
@ -309,9 +309,9 @@ if (!empty($rsp)) {
|
||||
<h4>'.tr('Promemoria da pianificare').'</h4>';
|
||||
|
||||
// Controllo pianificazioni mesi precedenti
|
||||
$qp_old = 'SELECT co_promemoria.id FROM co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_promemoria.data_richiesta, INTERVAL 1 DAY) <= NOW()
|
||||
$qp_old = 'SELECT co_promemoria.id FROM co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_promemoria.data_richiesta, INTERVAL 1 DAY) <= NOW()
|
||||
|
||||
UNION SELECT co_ordiniservizio.id FROM co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_ordiniservizio.data_scadenza, INTERVAL 1 DAY) <= NOW()
|
||||
UNION SELECT co_ordiniservizio.id FROM co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_ordiniservizio.data_scadenza, INTERVAL 1 DAY) <= NOW()
|
||||
|
||||
UNION SELECT in_interventi.id FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 AND DATE_ADD(in_interventi.data_richiesta, INTERVAL 1 DAY) <= NOW()';
|
||||
$rsp_old = $dbo->fetchNum($qp_old);
|
||||
|
@ -122,8 +122,8 @@ switch (post('op')) {
|
||||
// Elimino la scadenza e tutti i movimenti, poi se la fattura è emessa le ricalcolo
|
||||
if ($rs[0]['descrizione'] == 'Bozza' or $rs[0]['descrizione'] == 'Annullata') {
|
||||
elimina_scadenza($id_record);
|
||||
elimina_movimento($id_record, 0);
|
||||
// elimino movimento anche prima nota (se pagata o parzialmente pagata)
|
||||
//elimina_movimento($id_record, 0);
|
||||
//elimino movimento anche prima nota (se pagata o parzialmente pagata)
|
||||
elimina_movimento($id_record, 1);
|
||||
} elseif ($rs[0]['descrizione'] == 'Emessa') {
|
||||
elimina_scadenza($id_record);
|
||||
|
@ -453,7 +453,7 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
|
||||
</div>';
|
||||
|
||||
// Lettura contratti accettati, in attesa di conferma o in lavorazione
|
||||
$contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND co_contratti.id IN (SELECT idcontratto FROM co_righe_contratti WHERE co_righe_contratti.idcontratto = co_contratti.id AND (qta - qta_evasa) > 0)';
|
||||
$contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN( SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND co_contratti.id IN (SELECT idcontratto FROM co_righe_contratti WHERE co_righe_contratti.idcontratto = co_contratti.id AND (qta - qta_evasa) > 0)';
|
||||
$contratti = $dbo->fetchArray($contr_query)[0]['tot'];
|
||||
echo '
|
||||
<div class="tip" data-toggle="tooltip" title="'.tr('Contratti accettati, in attesa di conferma o in lavorazione.').'" style="display:inline;">
|
||||
|
@ -28,7 +28,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "text", "label": "Data", "name": "data", "required": 1, "class": "datepicker text-center", "value": "<?php $record['data']; ?>", "extra": "" ]}
|
||||
{[ "type": "date", "label": "Data", "name": "data", "required": 1, "class": "datepicker text-center", "value": "$data$", "extra": "" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -273,7 +273,7 @@ if (!empty($id_intervento)) {
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "<?php echo tr('Tecnici'); ?>", "multiple": "1", "name": "idtecnico[]", "required": <?php echo get('ref') ? 1 : 0; ?>, "ajax-source": "tecnici", "value": "<?php echo $idtecnico; ?>" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Tecnici'); ?>", "multiple": "1", "name": "idtecnico[]", "required": <?php echo get('ref') ? 1 : 0; ?>, "ajax-source": "tecnici", "value": "<?php echo $idtecnico; ?>", "icon-after": "add|<?php echo Modules::get('Anagrafiche')['id']; ?>|tipoanagrafica=Tecnico||<?php echo (empty($idtecnico)) ? '' : 'disabled'; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -340,7 +340,6 @@ switch (post('op')) {
|
||||
|
||||
for ($i = 0; $i < sizeof($rs_righe_preventivo); ++$i) {
|
||||
$righe_preventivo = [
|
||||
'data_evasione' => $rs_righe_preventivo[$i]['data_evasione'],
|
||||
'idpreventivo' => $id_record_new,
|
||||
'idarticolo' => $rs_righe_preventivo[$i]['idarticolo'],
|
||||
'is_descrizione' => $rs_righe_preventivo[$i]['is_descrizione'],
|
||||
|
@ -15,8 +15,8 @@ switch ($resource) {
|
||||
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
|
||||
$where[] = 'co_preventivi.default_revision=1';
|
||||
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'fatturabile';
|
||||
$where[] = 'idstato IN (SELECT `id` FROM co_staticontratti WHERE '.$stato.' = 1)';
|
||||
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_fatturabile';
|
||||
$where[] = 'idstato IN (SELECT `id` FROM `co_statipreventivi` WHERE '.$stato.' = 1)';
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
|
@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
|
||||
echo'
|
||||
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Duplicare questo preventivo?\') ){ $(\'#copia-preventivo\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica preventivo').'</button>';
|
||||
|
||||
$disabled = $record['fatturabile'] || $record['annullato'];
|
||||
$disabled = $record['is_fatturabile'] || $record['is_completato'];
|
||||
if (!$disabled) {
|
||||
echo '
|
||||
<button type="button" class="btn btn-warning" onclick="if(confirm(\'Vuoi creare un nuova revisione?\')){$(\'#crea-revisione\').submit();}"><i class="fa fa-edit"></i> '.tr('Crea nuova revisione...').'</button>';
|
||||
|
@ -7,8 +7,7 @@ if (isset($id_record)) {
|
||||
|
||||
$record = $dbo->fetchOne('SELECT *,
|
||||
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_preventivi.idanagrafica) AS tipo_anagrafica,
|
||||
(SELECT fatturabile FROM co_statipreventivi WHERE id=idstato) AS fatturabile,
|
||||
(SELECT annullato FROM co_statipreventivi WHERE id=idstato) AS annullato,
|
||||
(SELECT is_fatturabile FROM co_statipreventivi WHERE id=idstato) AS is_fatturabile,
|
||||
(SELECT descrizione FROM co_statipreventivi WHERE id=idstato) AS stato
|
||||
FROM co_preventivi
|
||||
WHERE id='.prepare($id_record));
|
||||
|
@ -37,7 +37,7 @@ switch (post('op')) {
|
||||
$all_ok = false;
|
||||
} else {
|
||||
$all_ok = true;
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
$id_record = $idmastrino;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -152,7 +152,7 @@ switch (post('op')) {
|
||||
if (!$dbo->query($query)) {
|
||||
$all_ok = false;
|
||||
} else {
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
$id_record = $idmastrino;
|
||||
/*
|
||||
Devo azzerare il totale pagato nello scadenziario perché verrà ricalcolato.
|
||||
Se c'erano delle rate già pagate ne devo tener conto per rigenerare il totale pagato
|
||||
|
@ -3,5 +3,5 @@
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$record = $dbo->fetchOne('SELECT * FROM co_movimenti WHERE id='.prepare($id_record));
|
||||
$record = $dbo->fetchOne('SELECT * FROM co_movimenti WHERE idmastrino='.prepare($id_record));
|
||||
}
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$operazione = filter('op');
|
||||
|
||||
// Pianificazione intervento
|
||||
switch (filter('op')) {
|
||||
switch ($operazione) {
|
||||
case 'add-promemoria':
|
||||
$dbo->insert('co_promemoria', [
|
||||
'idcontratto' => $id_parent,
|
||||
@ -24,7 +26,7 @@ switch (filter('op')) {
|
||||
], ['id' => $id_record]);
|
||||
|
||||
flash()->info(tr('Promemoria inserito!'));
|
||||
|
||||
|
||||
break;
|
||||
|
||||
// Eliminazione pianificazione
|
||||
|
@ -12,14 +12,14 @@ $contratto = $dbo->fetchOne('SELECT * FROM co_contratti WHERE id = :id', [
|
||||
$records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM co_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC');
|
||||
|
||||
// Intervento/promemoria pianificabile
|
||||
$pianificabile = $dbo->fetchOne('SELECT pianificabile FROM co_staticontratti WHERE id = :id', [
|
||||
$pianificabile = $dbo->fetchOne('SELECT is_pianificabile FROM co_staticontratti WHERE id = :id', [
|
||||
':id' => $contratto['idstato'],
|
||||
])['pianificabile'];
|
||||
])['is_pianificabile'];
|
||||
if ($pianificabile) {
|
||||
$pianificabile = (date('Y', strtotime($contratto['data_accettazione'])) > 1970 and date('Y', strtotime($contratto['data_conclusione'])) > 1970) ? true : false;
|
||||
}
|
||||
|
||||
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `pianificabile` = 1')['stati_pianificabili'];
|
||||
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili'];
|
||||
|
||||
echo '
|
||||
|
||||
|
@ -60,7 +60,12 @@ $orario_inizio = '09:00';
|
||||
$orario_fine = !empty($tempo_standard) ? date('H:i', strtotime($orario_inizio) + ((60 * 60) * $tempo_standard)) : '17:00';
|
||||
|
||||
echo '
|
||||
<form id="add_form" action="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_parent='.$id_parent.'&id_record='.$id_record.'" method="post">
|
||||
<form id="add_form" action="'.$rootdir.'/controller.php" method="post" role="form">
|
||||
|
||||
<input type="hidden" name="id_plugin" value="'.$id_plugin.'">
|
||||
<input type="hidden" name="id_parent" value="'.$id_parent.'">
|
||||
<input type="hidden" name="id_record" value="'.$id_record.'">
|
||||
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="'.(!empty($is_add) ? 'edit-promemoria' : 'pianificazione').'">';
|
||||
|
||||
|
@ -27,7 +27,7 @@ echo '
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "'.tr('Indirizzo').'", "name": "indirizzo", "id": "indirizzo_", "required": 1, "value": "$indirizzo$" ]}
|
||||
{[ "type": "text", "label": "'.tr('Indirizzo').'", "name": "indirizzo", "id": "indirizzo_", "required": 0, "value": "$indirizzo$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
@ -50,11 +50,11 @@ class FileManager implements ManagerInterface
|
||||
$where = '`id_module` '.(!empty($options['id_module']) && empty($options['id_plugin']) ? '= '.prepare($options['id_module']) : 'IS NULL').' AND `id_plugin` '.(!empty($options['id_plugin']) ? '= '.prepare($options['id_plugin']) : 'IS NULL').'';
|
||||
|
||||
// Categorie
|
||||
$categories = $dbo->fetchArray('SELECT DISTINCT `category` FROM `zz_files` WHERE '.$where.' ORDER BY `category`');
|
||||
$categories = $dbo->fetchArray('SELECT DISTINCT(BINARY `category`) AS `category` FROM `zz_files` WHERE '.$where.' ORDER BY `category`');
|
||||
foreach ($categories as $category) {
|
||||
$category = $category['category'];
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT * FROM `zz_files` WHERE `category`'.(!empty($category) ? '= '.prepare($category) : 'IS NULL').' AND `id_record` = '.prepare($options['id_record']).' AND '.$where);
|
||||
$rs = $dbo->fetchArray('SELECT * FROM `zz_files` WHERE BINARY `category`'.(!empty($category) ? '= '.prepare($category) : 'IS NULL').' AND `id_record` = '.prepare($options['id_record']).' AND '.$where);
|
||||
|
||||
if (!empty($rs)) {
|
||||
$result .= '
|
||||
@ -67,13 +67,16 @@ class FileManager implements ManagerInterface
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body no-padding">
|
||||
<table class="table">
|
||||
<div class="box-body no-padding table-responsive">
|
||||
<table class="table table-striped table-condensed ">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>'.tr('Nome').'</th>
|
||||
<th>'.tr('Data').'</th>
|
||||
<th width="15%" class="text-center">'.tr('Opzioni').'</th>
|
||||
</tr>';
|
||||
<th scope="col" >'.tr('Nome').'</th>
|
||||
<th scope="col" width="15%" >'.tr('Data').'</th>
|
||||
<th scope="col" width="15%" class="text-right"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>';
|
||||
|
||||
foreach ($rs as $r) {
|
||||
$file = Upload::find($r['id']);
|
||||
@ -83,10 +86,10 @@ class FileManager implements ManagerInterface
|
||||
<td align="left">
|
||||
<a href="'.ROOTDIR.'/view.php?file_id='.$r['id'].'" target="_blank">
|
||||
<i class="fa fa-external-link"></i> '.$r['name'].'
|
||||
</a> ('.$file->extension.')'.'
|
||||
</a><small> ('.$file->extension.')'.((!empty($file->size)) ? ' ('.\Util\FileSystem::formatBytes($file->size).')':'').'</small>'.'
|
||||
</td>
|
||||
<td>'.\Translator::timestampToLocale($r['created_at']).'</td>
|
||||
<td class="text-center">
|
||||
<td class="text-right">
|
||||
<a class="btn btn-xs btn-primary" href="'.ROOTDIR.'/actions.php?id_module='.$options['id_module'].'&op=download_file&id='.$r['id'].'&filename='.$r['filename'].'" target="_blank">
|
||||
<i class="fa fa-download"></i>
|
||||
</a>';
|
||||
@ -119,7 +122,8 @@ class FileManager implements ManagerInterface
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</table>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -215,6 +215,7 @@ class Uploads
|
||||
// Registrazione del file
|
||||
$data['filename'] = $filename;
|
||||
$data['original'] = $original;
|
||||
$data['size'] = $source['size'];
|
||||
self::register($data);
|
||||
|
||||
// Operazioni finali
|
||||
@ -240,6 +241,7 @@ class Uploads
|
||||
'id_module' => !empty($data['id_module']) && empty($data['id_plugin']) ? $data['id_module'] : null,
|
||||
'id_plugin' => !empty($data['id_plugin']) ? $data['id_plugin'] : null,
|
||||
'id_record' => $data['id_record'],
|
||||
'size' => $data['size'],
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,17 @@ class Query
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
// Sostituzione periodi temporali
|
||||
preg_match('|date_period\((.+?)\)|', $query, $matches);
|
||||
$dates = explode(',', $matches[1]);
|
||||
$date_filter = $matches[0];
|
||||
|
||||
$filters = [];
|
||||
foreach ($dates as $date) {
|
||||
$filters[] = $date." BETWEEN '|period_start|' AND '|period_end|'";
|
||||
}
|
||||
$date_query = !empty($filters) && !empty(self::$segments) ? ' AND ('.implode(' OR ', $filters).')' : '';
|
||||
|
||||
// Elenco delle sostituzioni
|
||||
$replace = [
|
||||
// Identificatori
|
||||
@ -68,6 +79,9 @@ class Query
|
||||
'|id_utente|' => prepare($user['id']),
|
||||
'|id_parent|' => prepare($id_parent),
|
||||
|
||||
// Filtro temporale
|
||||
'|'.$date_filter.'|' => $date_query,
|
||||
|
||||
// Date
|
||||
'|period_start|' => $_SESSION['period_start'],
|
||||
'|period_end|' => $_SESSION['period_end'],
|
||||
|
@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
|
||||
$module_name = 'Contratti';
|
||||
|
||||
// Lettura info fattura
|
||||
$records = $dbo->fetchArray('SELECT *, co_contratti.descrizione AS desc_contratto, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_interventi.id LIMIT 0,1) AS data, (SELECT fatturabile FROM co_staticontratti WHERE id=idstato) AS fatturabile, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS idimpianti, co_contratti.descrizione AS `cdescrizione`, co_contratti.idanagrafica AS `idanagrafica`, co_contratti.costo_orario AS costo_orario , co_contratti.costo_km AS costo_km FROM co_contratti LEFT OUTER JOIN (co_promemoria LEFT OUTER JOIN in_interventi ON co_promemoria.idintervento=in_interventi.id) ON co_contratti.id=co_promemoria.idcontratto WHERE co_contratti.id='.prepare($id_record));
|
||||
$records = $dbo->fetchArray('SELECT *, co_contratti.descrizione AS desc_contratto, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_interventi.id LIMIT 0,1) AS data, (SELECT is_fatturabile FROM co_staticontratti WHERE id=idstato) AS fatturabile, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS idimpianti, co_contratti.descrizione AS `cdescrizione`, co_contratti.idanagrafica AS `idanagrafica`, co_contratti.costo_orario AS costo_orario , co_contratti.costo_km AS costo_km FROM co_contratti LEFT OUTER JOIN (co_promemoria LEFT OUTER JOIN in_interventi ON co_promemoria.idintervento=in_interventi.id) ON co_contratti.id=co_promemoria.idcontratto WHERE co_contratti.id='.prepare($id_record));
|
||||
|
||||
$id_cliente = $records[0]['idanagrafica'];
|
||||
$id_sede = $records[0]['idsede'];
|
||||
|
@ -5,9 +5,10 @@ include_once __DIR__.'/../../core.php';
|
||||
$module_name = 'Interventi';
|
||||
|
||||
// carica intervento
|
||||
$query = 'SELECT in_interventi.*, (SELECT numero FROM co_contratti WHERE id=(SELECT idcontratto FROM co_promemoria WHERE idintervento=in_interventi.id)) AS numero_contratto, (SELECT numero FROM co_preventivi WHERE id=in_interventi.id_preventivo) AS numero_preventivo, (SELECT SUM(prezzo_dirittochiamata) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_dirittochiamata`, (SELECT SUM(km) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km`, (SELECT SUM(ore*prezzo_ore_unitario) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_ore_consuntivo`, (SELECT SUM(prezzo_km_consuntivo) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km_consuntivo`, in_interventi.descrizione AS `descrizione_intervento`, richiesta, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS tipointervento FROM in_interventi INNER JOIN in_tipiintervento ON in_interventi.idtipointervento=in_tipiintervento.idtipointervento WHERE id='.prepare($id_record);
|
||||
$query = 'SELECT in_interventi.*, (SELECT nome FROM co_contratti WHERE id=in_interventi.id_contratto) AS nome_contratto, (SELECT numero FROM co_contratti WHERE id=in_interventi.id_contratto) AS numero_contratto, (SELECT numero FROM co_preventivi WHERE id=in_interventi.id_preventivo) AS numero_preventivo, (SELECT SUM(prezzo_dirittochiamata) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_dirittochiamata`, (SELECT SUM(km) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km`, (SELECT SUM(ore*prezzo_ore_unitario) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_ore_consuntivo`, (SELECT SUM(prezzo_km_consuntivo) FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento=in_interventi.id) AS `tot_km_consuntivo`, in_interventi.descrizione AS `descrizione_intervento`, richiesta, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS tipointervento FROM in_interventi INNER JOIN in_tipiintervento ON in_interventi.idtipointervento=in_tipiintervento.idtipointervento WHERE id='.prepare($id_record);
|
||||
$records = $dbo->fetchArray($query);
|
||||
|
||||
|
||||
$costi_intervento = get_costi_intervento($id_record);
|
||||
|
||||
$id_cliente = $records[0]['idanagrafica'];
|
||||
|
@ -1,5 +1,40 @@
|
||||
<?php
|
||||
|
||||
include_once DOCROOT.'/modules/fatture/modutil.php';
|
||||
|
||||
// Fatture di vendita e acquisto
|
||||
$results = $dbo->fetchArray("SELECT co_documenti.id, co_statidocumento.descrizione AS stato_fattura
|
||||
FROM co_documenti
|
||||
INNER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id
|
||||
WHERE co_statidocumento.descrizione IN ('Emessa', 'Parzialmente pagato', 'Pagato', 'Bozza', 'Annullata')");
|
||||
|
||||
foreach ($results as $result) {
|
||||
$scadenze = $dbo->fetchArray('SELECT id, da_pagare, pagato, scadenza FROM co_scadenziario WHERE iddocumento = '.prepare($result['id']));
|
||||
|
||||
// Se esiste la scadenza la elimino
|
||||
if (!empty($scadenze)) {
|
||||
elimina_scadenza($result['id']);
|
||||
}
|
||||
|
||||
$is_pagato = null;
|
||||
if ($result['stato_fattura'] == 'Pagato') {
|
||||
$is_pagato = true;
|
||||
} elseif (in_array($result['stato_fattura'], ['Emessa', 'Parzialmente pagato'])) {
|
||||
$is_pagato = false;
|
||||
}
|
||||
|
||||
// Aggiungo la scadenza e la segno eventualmente come pagata
|
||||
if (isset($is_pagato)) {
|
||||
aggiungi_scadenza($result['id'], null, $is_pagato);
|
||||
}
|
||||
|
||||
if (!empty($scadenze) && $result['stato_fattura'] == 'Parzialmente pagato') {
|
||||
foreach ($scadenza as $scadenze) {
|
||||
$dbo->query('UPDATE co_scadenziario SET pagato = '.prepare($scadenza['pagato']).' WHERE scadenza = '.prepare($scadenza['scadenza']).' AND iddocumento = '.prepare($result['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// File e cartelle deprecate
|
||||
$files = [
|
||||
'plugins/xml/AT_v1.0.xml',
|
||||
@ -11,8 +46,8 @@ $files = [
|
||||
'plugins/xml/NS_v1.0.xml',
|
||||
'plugins/xml/RC_v1.0.xml',
|
||||
'plugins/xml/SE_v1.0.xml',
|
||||
'plugins/exportFE/view.php',
|
||||
'plugins/exportFE/src/stylesheet-1.2.1.xsl',
|
||||
'plugins/exportFE/view.php',
|
||||
'plugins/exportFE/src/stylesheet-1.2.1.xsl',
|
||||
];
|
||||
|
||||
foreach ($files as $key => $value) {
|
||||
|
@ -18,3 +18,68 @@ UPDATE `zz_settings` SET `valore` = '2' WHERE `zz_settings`.`nome` = 'Importo ma
|
||||
-- Stampa preventivo (senza totali)
|
||||
INSERT INTO `zz_prints` (`id`, `id_module`, `is_record`, `name`, `title`, `directory`, `previous`, `options`, `icon`, `version`, `compatibility`, `order`, `predefined`, `default`, `enabled`) VALUES
|
||||
(NULL, (SELECT id FROM zz_modules WHERE name='Preventivi'), 1, 'Preventivo (senza totali)', 'Preventivo (senza totali)', 'preventivi', 'idpreventivo', '{"pricing":true, "hide_total":true}', 'fa fa-print', '', '', 0, 0, 1, 1);
|
||||
|
||||
-- Dimensione dei file caricati
|
||||
ALTER TABLE `zz_files` ADD `size` INT(11) NULL AFTER `category`;
|
||||
|
||||
-- Elimino data_evasione da co_righe_preventivi
|
||||
ALTER TABLE `co_righe_preventivi` DROP `data_evasione`;
|
||||
|
||||
-- Allineo qta evase per le righe dei preventivi inseriti in una fattura
|
||||
UPDATE `co_righe_preventivi` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idpreventivo` = `co_righe_preventivi`.`idpreventivo` SET `co_righe_preventivi`.`qta_evasa` = `co_righe_documenti`.`qta`;
|
||||
|
||||
-- Allineo qta evase per le righe dei contratti inseriti in una fattura
|
||||
UPDATE `co_righe_contratti` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idcontratto` = `co_righe_contratti`.`idcontratto` SET `co_righe_contratti`.`qta_evasa` = `co_righe_documenti`.`qta`;
|
||||
|
||||
-- Standardizzazione stati preventivi e contratti
|
||||
ALTER TABLE `co_staticontratti` ADD `is_completato` BOOLEAN NOT NULL DEFAULT FALSE AFTER `pianificabile`;
|
||||
ALTER TABLE `co_statipreventivi` ADD `is_fatturabile` BOOLEAN NOT NULL DEFAULT FALSE AFTER `completato`;
|
||||
ALTER TABLE `co_statipreventivi` ADD `is_pianificabile` BOOLEAN NOT NULL DEFAULT FALSE AFTER `is_fatturabile`;
|
||||
ALTER TABLE `co_statipreventivi` DROP `annullato`;
|
||||
|
||||
ALTER TABLE `co_statipreventivi` CHANGE `completato` `is_completato` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
|
||||
ALTER TABLE `co_staticontratti` CHANGE `pianificabile` `is_pianificabile` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
ALTER TABLE `co_staticontratti` CHANGE `fatturabile` `is_fatturabile` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
|
||||
-- Fix degli stati predefiniti preventivi e contratti
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Bozza';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'In attesa di conferma';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Accettato';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Rifiutato';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 1, `is_fatturabile` = 1 WHERE `descrizione` = 'In lavorazione';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Fatturato';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Pagato';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Concluso';
|
||||
UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Parzialmente fatturato';
|
||||
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Bozza';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'In attesa di conferma';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Accettato';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Rifiutato';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 1, `is_fatturabile` = 1 WHERE `descrizione` = 'In lavorazione';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Fatturato';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Pagato';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Concluso';
|
||||
UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Parzialmente fatturato';
|
||||
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato, co_contratti.id, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE ispianificabile = 1)) AND idintervento IS NULL' WHERE `zz_widgets`.`name` = 'Ordini di servizio da impostare';
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_promemoria WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN (SELECT id FROM co_staticontratti WHERE is_pianificabile = 1)) AND idintervento IS NULL' WHERE `zz_widgets`.`name` = 'Interventi da pianificare';
|
||||
|
||||
-- Fix filtri per data
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` WHERE 1=1 AND `dir` = \'uscita\' |segment| |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(IF(numero_esterno=\'\', numero, numero_esterno) AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Fatture di acquisto';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id WHERE 1=1 AND dir = ''entrata'' |segment| |date_period(`data`)| HAVING 2=2 ORDER BY data DESC, CAST(numero_esterno AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Fatture di vendita';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM (`in_interventi` INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`) LEFT OUTER JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` WHERE 1=1 |date_period(`orario_inizio`,`data_richiesta`)| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY IFNULL(`orario_fine`, `data_richiesta`) DESC' WHERE `zz_modules`.`name` = 'Interventi';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_preventivi` WHERE 1=1 AND default_revision=1 |date_period(`data_bozza`)| HAVING 2=2 ORDER BY `id` DESC' WHERE `zz_modules`.`name` = 'Preventivi';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_contratti` WHERE 1=1 |date_period(`data_bozza`)| HAVING 2=2 ORDER BY `id` DESC' WHERE `zz_modules`.`name` = 'Contratti';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_movimenti` INNER JOIN `co_pianodeiconti3` ON `co_movimenti`.`idconto` = `co_pianodeiconti3`.`id` WHERE 1=1 AND `primanota` = 1 |date_period(`co_movimenti`.`data`)| GROUP BY `idmastrino`, `primanota`, `co_movimenti`.`data` HAVING 2=2 ORDER BY `co_movimenti`.`data` DESC' WHERE `zz_modules`.`name` = 'Prima nota';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `or_ordini` INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` WHERE 1=1 AND `dir` = ''entrata'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Ordini cliente';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `or_ordini` INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` WHERE 1=1 AND `dir` = ''uscita'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Ordini fornitore';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE 1=1 AND `dir` = ''entrata'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC,`dt_ddt`.created_at DESC' WHERE `zz_modules`.`name` = 'Ddt di vendita';
|
||||
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE 1=1 AND `dir` = ''uscita'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Ddt di acquisto';
|
||||
|
||||
UPDATE `zz_views` SET `query` = 'co_movimenti.idmastrino' WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota');
|
||||
|
||||
-- Stato FE (Attestazione di avvenuta trasmissione della fattura con impossibilità di recapito, estensione ricevuta .zip)
|
||||
INSERT INTO `fe_stati_documento` (`codice`, `descrizione`, `icon`) VALUES ('AT', 'Attestazione trasmissione', 'fa fa-check text-warning');
|
Loading…
x
Reference in New Issue
Block a user