Aggiunta tabella co_staticontratti_lang

This commit is contained in:
Pek5892 2024-02-09 12:08:55 +01:00
parent 17fa885d33
commit 94c630b8de
25 changed files with 307 additions and 145 deletions

View File

@ -135,11 +135,11 @@ if (!empty($options['create_document'])) {
// Opzioni aggiuntive per i Contratti
elseif ($final_module['name'] == 'Contratti') {
$stato_predefinito = $database->fetchOne("SELECT * FROM co_staticontratti WHERE descrizione = 'Bozza'");
$stato_predefinito = $database->fetchOne('SELECT * FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).") WHERE `name` = 'Bozza'");
echo '
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione FROM co_staticontratti", "value": "'.$stato_predefinito['id'].'" ]}
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_staticontratti`.`id`, `co_staticontratti_lang`.`name` AS descrizione FROM co_staticontratti LEFT JOIN `co_staticontratti`_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).')", "value": "'.$stato_predefinito['id'].'" ]}
</div>';
}

View File

@ -49,10 +49,10 @@ switch ($resource) {
LEFT JOIN `an_relazioni` ON `an_anagrafiche`.`idrelazione`=`an_relazioni`.`id`
LEFT JOIN `an_relazioni_lang` ON (`an_relazioni`.`id`=`an_relazioni_lang`.`id_record` AND `an_relazioni_lang`.`id_lang`= '.setting('Lingua').")
LEFT JOIN
(SELECT `co_contratti`.`id`, `idanagrafica`, CONCAT('Contratto ', `numero`, ' del ', DATE_FORMAT(`data_bozza`, '%d/%m/%Y'), ' - ', `co_contratti`.`nome`, ' [', `co_staticontratti`.`descrizione` , ']') AS descrizione FROM `co_contratti` LEFT JOIN `co_staticontratti` ON `co_contratti`.`idstato`=`co_staticontratti`.`id` WHERE `co_contratti`.`predefined`=1 AND `is_pianificabile`=1) AS contratto
(SELECT `co_contratti`.`id`, `idanagrafica`, CONCAT('Contratto ', `numero`, ' del ', DATE_FORMAT(`data_bozza`, '%d/%m/%Y'), ' - ', `co_contratti`.`nome`, ' [', `co_staticontratti_lang`.`name` , ']') AS descrizione 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`= ".setting('Lingua').') WHERE `co_contratti`.`predefined`=1 AND `is_pianificabile`=1) AS contratto
ON `an_anagrafiche`.`idanagrafica`=`contratto`.`idanagrafica`
LEFT JOIN `co_pagamenti` ON `an_anagrafiche`.`idpagamento_vendite`=`co_pagamenti`.`id`
LEFT JOIN `co_pagamenti_lang` ON (`co_pagamenti`.`id`=`co_pagamenti_lang`.`id_record` AND `co_pagamenti_lang`.`id_lang`= ".prepare(setting('Lingua')).')
LEFT JOIN `co_pagamenti_lang` ON (`co_pagamenti`.`id`=`co_pagamenti_lang`.`id_record` AND `co_pagamenti_lang`.`id_lang`= '.prepare(setting('Lingua')).')
LEFT JOIN
`co_banche` banca_vendite
ON `co_pagamenti`.`idconto_vendite` = `banca_vendite`.`id_pianodeiconti3` AND `banca_vendite`.`id_anagrafica` = '.prepare($id_azienda).' AND `banca_vendite`.`deleted_at` IS NULL AND `banca_vendite`.`predefined` = 1

View File

@ -145,7 +145,7 @@ switch (post('op')) {
$new = $contratto->replicate(['idcontratto_prev']);
$new->numero = Contratto::getNextNumero($contratto->data_bozza, $contratto->id_segment);
$stato = Stato::where('descrizione', '=', 'Bozza')->first();
$stato = (new Stato())->getByName('Bozza')->id_record;
$new->stato()->associate($stato);
$new->save();
@ -373,7 +373,7 @@ switch (post('op')) {
$new_contratto->data_bozza = Carbon::now();
$new_contratto->numero = Contratto::getNextNumero($new_contratto->data_bozza, $new_contratto->id_segment);
$stato = Stato::where('descrizione', '=', 'Bozza')->first();
$stato = (new Stato())->getByName('Bozza')->id_record;
$new_contratto->stato()->associate($stato);
$new_contratto->save();
@ -431,7 +431,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 descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record));
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT `co_staticontratti`.`id` FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id`=`co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang`= '.setting('Lingua').') WHERE `name` = \'Concluso\') WHERE `co_staticontratti`.`id` = '.prepare($id_record));
flash()->info(tr('Contratto rinnovato!'));

View File

@ -18,11 +18,13 @@
*/
include_once __DIR__.'/../../core.php';
use Modules\Contratti\Stato;
$id_anagrafica = !empty(get('idanagrafica')) ? get('idanagrafica') : '';
$stati = get('pianificabile') ? 'SELECT id, descrizione FROM co_staticontratti WHERE is_pianificabile=1' : 'SELECT id, descrizione FROM co_staticontratti';
$stato = $database->query('SELECT id, descrizione FROM co_staticontratti WHERE descrizione = "Bozza"');
$stati = get('pianificabile') ? 'SELECT `co_staticontratti`.`id`, `name` AS descrizione FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `is_pianificabile`=1' : 'SELECT `co_staticontratti`.`id`, `name` AS descrizione FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).')';
$stato = (new Stato())->getByName('Bozza')->id_record;
echo '
<form action="" method="post" id="add-form">

View File

@ -26,21 +26,21 @@ switch ($resource) {
* - stato
*/
case 'contratti':
$query = 'SELECT co_contratti.id AS id, CONCAT("Contratto ", numero, " del ", DATE_FORMAT(data_bozza, "%d/%m/%Y"), " - ", co_contratti.nome, " [", (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , "]") AS descrizione, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS totale, (SELECT SUM(sconto) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS sconto, (SELECT COUNT(id) FROM co_righe_contratti WHERE idcontratto=co_contratti.id) AS n_righe FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
$query = 'SELECT `co_contratti`.`id` AS id, CONCAT("Contratto ", `numero`, " del ", DATE_FORMAT(`data_bozza`, "%d/%m/%Y"), " - ", `co_contratti`.`nome`, " [", (SELECT `name` FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `co_staticontratti`.`id` = `idstato`) , "]") AS descrizione, (SELECT SUM(`subtotale`) FROM `co_righe_contratti` WHERE `idcontratto`=`co_contratti`.`id`) AS totale, (SELECT SUM(`sconto`) FROM `co_righe_contratti` WHERE `idcontratto`=`co_contratti`.`id`) AS sconto, (SELECT COUNT(`id`) FROM `co_righe_contratti` WHERE `idcontratto`=`co_contratti`.`id`) AS n_righe FROM `co_contratti` INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` |where| ORDER BY `co_contratti`.`id`';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
$filter[] = '`co_contratti`.`id`='.prepare($element);
}
if (empty($elements)) {
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = '`an_anagrafiche`.`idanagrafica`='.prepare($superselect['idanagrafica']);
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_pianificabile';
$where[] = 'idstato IN (SELECT `id` FROM `co_staticontratti` WHERE '.$stato.' = 1)';
$where[] = '`idstato` IN (SELECT `id` FROM `co_staticontratti` WHERE '.$stato.' = 1)';
}
if (!empty($search)) {
$search_fields[] = 'co_contratti.nome LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`co_contratti`.`nome` LIKE '.prepare('%'.$search.'%');
}
break;

View File

@ -42,7 +42,7 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
'predefined' => 1,
'dir' => 'entrata',
])['id'];
$stati_completati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_completati FROM `co_staticontratti` WHERE `is_completato` = 1')['stati_completati'];
$stati_completati = $dbo->fetchOne('SELECT GROUP_CONCAT(`name` SEPARATOR ", ") AS stati_completati FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `is_completato` = 1')['stati_completati'];
switch (post('op')) {
case 'crea_fattura':
@ -52,7 +52,7 @@ switch (post('op')) {
// Informazioni della fattura
$tipo_documento = Tipo::where('id', post('idtipodocumento'))->first();
$stato_documenti_accodabili = Stato::where('descrizione', 'Bozza')->first();
$stato_documenti_accodabili = (new Stato())->getByName('Bozza'->id_record);
$accodare = post('accodare');
$data = date('Y-m-d');
@ -223,7 +223,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 descrizione = \'Concluso\') WHERE `id` = '.prepare($contratto->id));
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT `co_staticontratti`.`id` FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `name` = \'Concluso\') WHERE `co_staticontratti`.`id` = '.prepare($contratto->id));
++$numero_totale;
}
@ -294,7 +294,7 @@ $operations['cambia_stato'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Cambia stato'),
'data' => [
'title' => tr('Vuoi davvero aggiornare lo stato di questi contratti?'),
'msg' => '<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione, colore as _bgcolor_ FROM co_staticontratti ORDER BY descrizione" ]}',
'msg' => '<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_staticontratti`.`id`, `name` AS descrizione, `colore` as _bgcolor_ FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') ORDER BY `name`" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,

View File

@ -23,7 +23,7 @@ $rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontr
$is_fatturabile = $record['is_fatturabile'] && !empty($rs_documento);
$stati_fatturabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_abilitati FROM `co_staticontratti` WHERE `is_fatturabile` = 1')['stati_abilitati'];
$stati_fatturabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`name` SEPARATOR ", ") AS stati_abilitati FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `is_fatturabile` = 1')['stati_abilitati'];
/* permetto di fatturare il contratto solo se contiene righe e si trova in uno stato fatturabile */
echo '
@ -37,7 +37,7 @@ echo '
$rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['is_completato'] && $record['rinnovabile'];
$stati_completati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_completati FROM `co_staticontratti` WHERE `is_completato` = 1')['stati_completati'];
$stati_completati = $dbo->fetchOne('SELECT GROUP_CONCAT(`name` SEPARATOR ", ") AS stati_completati FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `is_completato` = 1')['stati_completati'];
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 di questi stati: _STATE_LIST_', [

View File

@ -97,11 +97,11 @@ echo '
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "values": "query=SELECT `co_pagamenti`.`id`, `co_pagamenti_lang`.`name` AS `descrizione` FROM `co_pagamenti` LEFT JOIN `co_pagamenti_lang` ON (`co_pagamenti`.`id` = `co_pagamenti_lang`.`id_record` AND `co_pagamenti_lang`.`id_lang` = ".prepare(setting('Lingua')).") GROUP BY `descrizione` ORDER BY `descrizione`", "value": "$idpagamento$" ]}
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "values": "query=SELECT `co_pagamenti`.`id`, `co_pagamenti_lang`.`name` AS `descrizione` FROM `co_pagamenti` LEFT JOIN `co_pagamenti_lang` ON (`co_pagamenti`.`id` = `co_pagamenti_lang`.`id_record` AND `co_pagamenti_lang`.`id_lang` = <?php echo prepare(setting('Lingua')); ?>) GROUP BY `descrizione` ORDER BY `descrizione`", "value": "$idpagamento$" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstato", "required": 1, "values": "query=SELECT id, descrizione, colore AS _bgcolor_ FROM co_staticontratti ORDER BY descrizione", "value": "$idstato$", "class": "unblockable" ]}
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstato", "required": 1, "values": "query=SELECT `co_staticontratti`.`id`, `name` as `descrizione`, `colore` AS _bgcolor_ FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = <?php echo prepare(setting('Lingua')); ?>) ORDER BY `name`", "value": "$idstato$", "class": "unblockable" ]}
</div>
</div>

View File

@ -24,12 +24,21 @@ use Modules\Contratti\Contratto;
if (isset($id_record)) {
$contratto = Contratto::find($id_record);
$record = $dbo->fetchOne('SELECT *,
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS tipo_anagrafica,
(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 is_completato FROM co_staticontratti WHERE id=idstato) AS is_completato,
(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));
$record = $dbo->fetchOne('SELECT
*,
`co_contratti`.`nome` AS nome,
`an_anagrafiche`.`tipo` AS tipo_anagrafica,
`co_staticontratti`.`is_fatturabile` AS is_fatturabile,
`co_staticontratti`.`is_pianificabile` AS is_pianificabile,
`co_staticontratti`.`is_completato` AS is_completato,
`co_staticontratti_lang`.`name` AS stato,
GROUP_CONCAT(`my_impianti_contratti`.`idimpianto`) AS idimpianti
FROM
`co_contratti`
INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
INNER 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(setting('Lingua')).')
LEFT JOIN `my_impianti_contratti` ON `my_impianti_contratti`.`idcontratto` = `co_contratti`.`id`
WHERE
`co_contratti`.`id`='.prepare($id_record));
}

View File

@ -67,9 +67,8 @@ class Contratto extends Document
{
$model = new static();
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
$stato_documento = (new Stato())->getByName('Bozza')->id_record;
$id_anagrafica = $anagrafica->id;
$id_agente = $anagrafica->idagente;
$id_segment = $id_segment ?: getSegmentPredefined($model->getModule()->id);
@ -249,7 +248,7 @@ class Contratto extends Document
$codice_intervento = 'FAT';
}
$stato = Stato::where('descrizione', $descrizione)->first();
$stato = (new Stato())->getByName($descrizione)->id_record;
$this->stato()->associate($stato);
$this->save();

View File

@ -32,4 +32,34 @@ class Stato extends Model
{
return $this->hasMany(Contratto::class, 'idstato');
}
/**
* Ritorna l'attributo name dello stato contratto.
*
* @return string
*/
public function getNameAttribute()
{
return database()->table($this->table.'_lang')
->select('name')
->where('id_record', '=', $this->id)
->where('id_lang', '=', setting('Lingua'))
->first()->name;
}
/**
* Ritorna l'id dello stato contratto a partire dal nome.
*
* @param string $name il nome da ricercare
*
* @return \Illuminate\Support\Collection
*/
public function getByName($name)
{
return database()->table($this->table.'_lang')
->select('id_record')
->where('name', '=', $name)
->where('id_lang', '=', setting('Lingua'))
->first();
}
}

View File

@ -19,21 +19,35 @@
include_once __DIR__.'/../../../core.php';
$rs = $dbo->fetchArray('SELECT co_contratti.id, co_contratti.nome, co_contratti.data_accettazione,
((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti,
DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti,
data_conclusione,
ore_preavviso_rinnovo,
giorni_preavviso_rinnovo,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale
FROM co_contratti INNER JOIN co_staticontratti ON co_contratti.idstato=co_staticontratti.id
WHERE
rinnovabile = 1 AND
YEAR(data_conclusione) > 1970 AND
co_contratti.id NOT IN (SELECT idcontratto_prev FROM co_contratti contratti) AND
co_staticontratti.descrizione NOT IN ("Concluso", "Rifiutato", "Bozza")
HAVING (ore_rimanenti <= ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) <= ABS(giorni_preavviso_rinnovo))
ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC');
$rs = $dbo->fetchArray('SELECT
`co_contratti`.`id`,
`co_contratti`.`nome`,
`co_contratti`.`data_accettazione`,
(SUM(`co_righe_contratti`.`qta`) - SUM(`in_interventi_tecnici`.`ore`)) AS ore_rimanenti,
DATEDIFF(`data_conclusione`, NOW()) AS giorni_rimanenti,
`data_conclusione`,
`ore_preavviso_rinnovo`,
`giorni_preavviso_rinnovo`,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale
FROM
`co_contratti`
INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica`=`co_contratti`.`idanagrafica`
INNER JOIN `co_righe_contratti` ON (`co_righe_contratti`.`idcontratto`=`co_contratti`.`id` AND `co_righe_contratti`.`um`=\'ore\')
INNER 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(setting('Lingua')).')
LEFT JOIN `in_interventi` ON (`in_interventi`.`id_contratto` = `co_contratti`.`id` AND `in_interventi`.`idstatointervento` IN (SELECT `in_statiintervento`.`idstatointervento` FROM `in_statiintervento` WHERE `in_statiintervento`.`is_completato` = 1))
LEFT JOIN `in_interventi_tecnici` ON (`in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`)
WHERE
`co_contratti`.`rinnovabile` = 1 AND
YEAR(`data_conclusione`) > 1970 AND
`co_contratti`.`id` NOT IN (SELECT `idcontratto_prev` FROM `co_contratti` contratti) AND
`co_staticontratti_lang`.`name` NOT IN ("Concluso", "Rifiutato", "Bozza")
GROUP BY
`co_contratti`.`id`
HAVING
(`ore_rimanenti` <= `ore_preavviso_rinnovo` OR DATEDIFF(`data_conclusione`, NOW()) <= ABS(`giorni_preavviso_rinnovo`))
ORDER BY
`giorni_rimanenti` ASC, `ore_rimanenti` ASC');
if (!empty($rs)) {
echo '

View File

@ -378,58 +378,65 @@ switch (filter('op')) {
// Promemoria da contratti con stato pianificabile
$query_promemoria_contratti = "SELECT
co_promemoria.id,
idcontratto,
richiesta,
co_contratti.nome AS nome_contratto,
co_contratti.numero AS numero_contratto,
co_contratti.data_bozza AS data_contratto,
DATE_FORMAT( data_richiesta, '%m%Y') AS mese,
data_richiesta,
an_anagrafiche.ragione_sociale,
`co_promemoria`.`id`,
`idcontratto`,
`richiesta`,
`co_contratti`.`nome` AS nome_contratto,
`co_contratti`.`numero` AS numero_contratto,
`co_contratti`.`data_bozza` AS data_contratto,
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 tipo_intervento
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 idintervento IS NULL AND
idcontratto IN (SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1))
ORDER BY data_richiesta ASC";
`in_tipiintervento`.`descrizione` AS tipo_intervento
FROM `co_promemoria`
INNER JOIN `co_contratti` ON `co_promemoria`.`idcontratto` = `co_contratti`.`id`
INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id`
INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `in_tipiintervento` ON `co_promemoria`.`idtipointervento` = `in_tipiintervento`.`idtipointervento`
WHERE `idintervento` IS NULL AND `co_staticontratti`.`is_pianificabile` = 1
ORDER BY `data_richiesta` ASC";
$promemoria_contratti = $dbo->fetchArray($query_promemoria_contratti);
// Promemoria da interventi con stato NON completato
$query_interventi = "SELECT in_interventi.id,
in_interventi.richiesta,
in_interventi.id_contratto AS idcontratto,
in_interventi_tecnici_assegnati.id_tecnico AS id_tecnico,
tecnico.ragione_sociale AS ragione_sociale_tecnico,
DATE_FORMAT(IF(in_interventi.data_scadenza IS NULL, in_interventi.data_richiesta, in_interventi.data_scadenza), '%m%Y') AS mese,
IF(in_interventi.data_scadenza IS NULL, in_interventi.data_richiesta, in_interventi.data_scadenza) AS data_richiesta,
in_interventi.data_scadenza,
an_anagrafiche.ragione_sociale,
tecnico.colore,
$query_interventi = "SELECT `in_interventi`.`id`,
`in_interventi`.`richiesta`,
`in_interventi`.`id_contratto` AS idcontratto,
`in_interventi_tecnici_assegnati`.`id_tecnico` AS id_tecnico,
`tecnico`.`ragione_sociale` AS ragione_sociale_tecnico,
DATE_FORMAT(IF(`in_interventi`.`data_scadenza` IS NULL, `in_interventi`.`data_richiesta`, `in_interventi`.`data_scadenza`), '%m%Y') AS mese,
IF(`in_interventi`.`data_scadenza` IS NULL, `in_interventi`.`data_richiesta`, `in_interventi`.`data_scadenza`) AS data_richiesta,
`in_interventi`.`data_scadenza`,
`an_anagrafiche`.`ragione_sociale`,
`tecnico`.`colore`,
'intervento' AS ref,
(SELECT descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento=in_interventi.idtipointervento) AS tipo_intervento
FROM in_interventi
INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica";
`in_tipiintervento`.`descrizione` AS tipo_intervento
FROM
`in_interventi`
INNER JOIN `in_tipiintervento` ON `in_interventi`.`idtipointervento` = `in_tipiintervento`.`idtipointervento`
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`";
// Visualizzo solo promemoria del tecnico loggato
if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) {
$query_interventi .= '
INNER JOIN in_interventi_tecnici_assegnati ON in_interventi.id = in_interventi_tecnici_assegnati.id_intervento AND id_tecnico = '.prepare($id_tecnico);
INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico);
} else {
$query_interventi .= '
LEFT JOIN in_interventi_tecnici_assegnati ON in_interventi.id = in_interventi_tecnici_assegnati.id_intervento';
LEFT JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento`';
}
$query_interventi .= '
LEFT JOIN in_interventi_tecnici ON in_interventi_tecnici.idintervento = in_interventi.id
INNER JOIN in_statiintervento ON in_interventi.idstatointervento = in_statiintervento.idstatointervento
LEFT JOIN an_anagrafiche AS tecnico ON in_interventi_tecnici_assegnati.id_tecnico = tecnico.idanagrafica
WHERE in_statiintervento.is_completato = 0
GROUP BY in_interventi.id, in_interventi_tecnici_assegnati.id_tecnico
HAVING COUNT(in_interventi_tecnici.id) = 0
ORDER BY data_richiesta ASC';
LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`
INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`idstatointervento`
LEFT JOIN `an_anagrafiche` AS tecnico ON `in_interventi_tecnici_assegnati`.`id_tecnico` = `tecnico`.`idanagrafica`
WHERE
`in_statiintervento`.`is_completato` = 0
GROUP BY
`in_interventi`.`id`, `in_interventi_tecnici_assegnati`.`id_tecnico`
HAVING
COUNT(`in_interventi_tecnici`.`id`) = 0
ORDER BY
`data_richiesta` ASC';
$promemoria_interventi = $dbo->fetchArray($query_interventi);
$promemoria = array_merge($promemoria_contratti, $promemoria_interventi);

View File

@ -242,15 +242,23 @@ if ($user['gruppo'] == 'Tecnici' && !empty($user['idanagrafica'])) {
$id_tecnico = $user['idanagrafica'];
}
$query_da_programmare = 'SELECT data_richiesta AS data 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
$query_da_programmare = 'SELECT
`data_richiesta` AS data
FROM
`co_promemoria`
INNER JOIN `co_contratti` ON `co_promemoria`.`idcontratto` = `co_contratti`.`id`
INNER 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(setting('Lingua')).')
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
`co_staticontratti`.`is_pianificabile` = 1 AND `idintervento` IS NULL
UNION SELECT IF(data_scadenza IS NULL, data_richiesta, data_scadenza) AS data FROM in_interventi
INNER JOIN an_anagrafiche ON in_interventi.idanagrafica = an_anagrafiche.idanagrafica';
UNION
SELECT
IF(`data_scadenza` IS NULL, `data_richiesta`, `data_scadenza`) AS data
FROM
`in_interventi`
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`';
// Visualizzo solo promemoria del tecnico loggato
if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) {

View File

@ -759,7 +759,7 @@ if (!$block_edit) {
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
// 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 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)';
$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'];
}

View File

@ -469,7 +469,7 @@ if (!$block_edit) {
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
// 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 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)';
$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'];
// Lettura ddt (entrata o uscita)

View File

@ -19,10 +19,12 @@
include_once __DIR__.'/../../core.php';
use Modules\Contratti\Stato;
switch (post('op')) {
case 'update':
$id_stato = (new Stato())->getByName(post('descrizione'))->id_record;
$dbo->update('co_staticontratti', [
'descrizione' => (count($dbo->fetchArray('SELECT descrizione FROM co_staticontratti WHERE descrizione = '.prepare(post('descrizione')))) > 0) ? $dbo->fetchOne('SELECT descrizione FROM co_staticontratti WHERE id ='.$id_record)['descrizione'] : post('descrizione'),
'icona' => post('icona'),
'colore' => post('colore'),
'is_completato' => post('is_completato') ?: null,
@ -30,6 +32,10 @@ switch (post('op')) {
'is_pianificabile' => post('is_pianificabile') ?: null,
], ['id' => $id_record]);
$dbo->update('co_staticontratti_lang', [
'name' => post('descrizione'),
], ['id_record' => $id_stato]);
flash()->info(tr('Informazioni salvate correttamente.'));
break;
@ -43,12 +49,13 @@ switch (post('op')) {
$is_pianificabile = post('is_pianificabile') ?: null;
// controlla descrizione che non sia duplicata
if (count($dbo->fetchArray('SELECT descrizione FROM co_staticontratti WHERE descrizione='.prepare($descrizione))) > 0) {
flash()->error(tr('Stato di contratto già esistente.'));
if ((new Stato())->getByName($descrizione)->id_record) {
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato dei contratti.'));
} else {
$query = 'INSERT INTO co_staticontratti(descrizione, icona, colore, is_completato, is_fatturabile, is_pianificabile) VALUES ('.prepare($descrizione).', '.prepare($icona).', '.prepare($colore).', '.prepare($is_completato).', '.prepare($is_fatturabile).', '.prepare($is_pianificabile).' )';
$dbo->query($query);
$dbo->query('INSERT INTO `co_staticontratti` (`icona`, `colore`, `is_completato`, `is_fatturabile`, `is_pianificabile`) VALUES ('.prepare($icona).', '.prepare($colore).', '.prepare($is_completato).', '.prepare($is_fatturabile).', '.prepare($is_pianificabile).' )');
$id_record = $dbo->lastInsertedID();
$dbo->query('INSERT INTO `co_staticontratti_lang` (`name`, `id_record`, `id_lang`) VALUES ('.prepare($descrizione).', '.prepare($id_record).', '.prepare(setting('Lingua')).' )');
flash()->info(tr('Nuovo stato contratto aggiunto.'));
}
@ -56,15 +63,15 @@ switch (post('op')) {
case 'delete':
// scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato nei contratti
if (count($dbo->fetchArray('SELECT id FROM co_contratti WHERE idstato='.prepare($id_record))) > 0) {
$query = 'UPDATE co_staticontratti SET deleted_at = NOW() WHERE can_delete = 1 AND id='.prepare($id_record);
if (count($dbo->fetchArray('SELECT `id` FROM `co_contratti` WHERE `idstato`='.prepare($id_record))) > 0) {
$query = 'UPDATE `co_staticontratti` SET `deleted_at` = NOW() WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
} else {
$query = 'DELETE FROM co_staticontratti WHERE can_delete = 1 AND id='.prepare($id_record);
$query = 'DELETE FROM `co_staticontratti` WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
}
$dbo->query($query);
flash()->info(tr('Stato contratto eliminato.'));
flash()->info(tr('Questo stato dei contratti è stato correttamente eliminato.'));
break;
}

View File

@ -20,5 +20,5 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM co_staticontratti WHERE id='.prepare($id_record));
$record = $dbo->fetchOne('SELECT * FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON `co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` WHERE `co_staticontratti`.`id`='.prepare($id_record));
}

View File

@ -42,4 +42,34 @@ class StatiContratti extends Resource implements RetrieveInterface
'table' => $table,
];
}
/**
* Ritorna l'attributo name dello stato contratto.
*
* @return string
*/
public function getNameAttribute()
{
return database()->table($this->table.'_lang')
->select('name')
->where('id_record', '=', $this->id)
->where('id_lang', '=', setting('Lingua'))
->first()->name;
}
/**
* Ritorna l'id dello stato contratto a partire dal nome.
*
* @param string $name il nome da ricercare
*
* @return \Illuminate\Support\Collection
*/
public function getByName($name)
{
return database()->table($this->table.'_lang')
->select('id_record')
->where('name', '=', $name)
->where('id_lang', '=', setting('Lingua'))
->first();
}
}

View File

@ -20,5 +20,5 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
$record = $dbo->fetchOne('SELECT *, (SELECT is_pianificabile FROM co_staticontratti WHERE id=idstato) AS is_pianificabile FROM co_contratti WHERE id='.prepare($id_record));
$record = $dbo->fetchOne('SELECT *, `co_staticontratti`.`is_pianificabile` AS is_pianificabile FROM `co_contratti` INNER JOIN `co_stationtratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id` WHERE `co_contratti`.`id`='.prepare($id_record));
}

View File

@ -26,11 +26,11 @@ class Contratti extends AppResource implements RetrieveInterface
{
public function getCleanupData($last_sync_at)
{
$query = 'SELECT DISTINCT(co_contratti.id) AS id FROM co_contratti
INNER JOIN co_staticontratti ON co_staticontratti.id = co_contratti.idstato
WHERE co_staticontratti.is_pianificabile = 0';
$query = 'SELECT DISTINCT(`co_contratti`.`id`) AS id FROM `co_contratti`
INNER JOIN `co_staticontratti` ON `co_staticontratti`.`id` = `co_contratti`.`idstato`
WHERE `co_staticontratti`.`is_pianificabile` = 0';
if ($last_sync_at) {
$query .= ' AND (co_contratti.updated_at > '.prepare($last_sync_at).' OR co_staticontratti.updated_at > '.prepare($last_sync_at).')';
$query .= ' AND (`co_contratti`.`updated_at` > '.prepare($last_sync_at).' OR `co_staticontratti`.`updated_at` > '.prepare($last_sync_at).')';
}
$records = database()->fetchArray($query);
@ -59,7 +59,7 @@ class Contratti extends AppResource implements RetrieveInterface
// Filtro per data
if ($last_sync_at) {
$query .= ' AND co_contratti.updated_at > '.prepare($last_sync_at);
$query .= ' AND `co_contratti`.`updated_at` > '.prepare($last_sync_at);
}
$records = database()->fetchArray($query);
@ -70,16 +70,17 @@ class Contratti extends AppResource implements RetrieveInterface
public function retrieveRecord($id)
{
// Gestione della visualizzazione dei dettagli del record
$query = 'SELECT co_contratti.id,
co_contratti.idanagrafica AS id_cliente,
IF(co_contratti.idsede = 0, NULL, co_contratti.idsede) AS id_sede,
co_contratti.nome,
co_contratti.numero,
co_contratti.data_bozza,
co_staticontratti.descrizione AS stato
FROM co_contratti
INNER JOIN co_staticontratti ON co_staticontratti.id = co_contratti.idstato
WHERE co_contratti.id = '.prepare($id);
$query = 'SELECT `co_contratti`.`id`,
`co_contratti`.`idanagrafica` AS id_cliente,
IF(`co_contratti`.`idsede` = 0, NULL, `co_contratti`.`idsede`) AS id_sede,
`co_contratti`.`nome`,
`co_contratti`.`numero`,
`co_contratti`.`data_bozza`,
`co_staticontratti_lang`.`name` AS stato
FROM `co_contratti`
INNER JOIN `co_staticontratti` ON `co_staticontratti`.`id` = `co_contratti`.`idstato`
LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti_lang`.`id_record` = `co_staticontratti`.`id` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE `co_contratti`.`id` = '.prepare($id);
$record = database()->fetchOne($query);

View File

@ -25,13 +25,13 @@ class TariffeContratti extends AppResource
{
public function getCleanupData($last_sync_at)
{
$query = 'SELECT CONCAT(idtipointervento, "-", idcontratto) AS id
FROM co_contratti_tipiintervento
INNER JOIN co_contratti ON co_contratti.id = co_contratti_tipiintervento.idcontratto
INNER JOIN co_staticontratti ON co_staticontratti.id = co_contratti.idstato
WHERE co_staticontratti.is_pianificabile = 0';
$query = 'SELECT CONCAT(`idtipointervento`, "-", `idcontratto`) AS id
FROM `co_contratti_tipiintervento`
INNER JOIN `co_contratti` ON `co_contratti`.`id` = `co_contratti_tipiintervento`.`idcontratto`
INNER JOIN `co_staticontratti` ON `co_staticontratti`.`id` = `co_contratti`.`idstato`
WHERE `co_staticontratti`.`is_pianificabile` = 0';
if ($last_sync_at) {
$query .= ' AND (co_contratti.updated_at > '.prepare($last_sync_at).' OR co_staticontratti.updated_at > '.prepare($last_sync_at).')';
$query .= ' AND (`co_contratti`.`updated_at` > '.prepare($last_sync_at).' OR `co_staticontratti`.`updated_at` > '.prepare($last_sync_at).')';
}
$records = database()->fetchArray($query);
@ -45,16 +45,16 @@ class TariffeContratti extends AppResource
public function getModifiedRecords($last_sync_at)
{
$query = 'SELECT
CONCAT(idtipointervento, "-", idcontratto) AS id,
co_contratti_tipiintervento.updated_at
FROM co_contratti_tipiintervento
INNER JOIN co_contratti ON co_contratti.id = co_contratti_tipiintervento.idcontratto
INNER JOIN co_staticontratti ON co_staticontratti.id = co_contratti.idstato
WHERE co_staticontratti.is_pianificabile = 1';
CONCAT(`idtipointervento`, "-", `idcontratto`) AS id,
`co_contratti_tipiintervento`.`updated_at`
FROM `co_contratti_tipiintervento`
INNER JOIN `co_contratti` ON `co_contratti`.`id` = `co_contratti_tipiintervento`.`idcontratto`
INNER JOIN `co_staticontratti` ON `co_staticontratti`.`id` = `co_contratti`.`idstato`
WHERE `co_staticontratti`.`is_pianificabile` = 1';
// Filtro per data
if ($last_sync_at) {
$query .= ' AND co_contratti_tipiintervento.updated_at > '.prepare($last_sync_at);
$query .= ' AND `co_contratti_tipiintervento`.`updated_at` > '.prepare($last_sync_at);
}
$records = database()->fetchArray($query);
@ -69,15 +69,15 @@ class TariffeContratti extends AppResource
$id_contratto = $pieces[1];
// Gestione della visualizzazione dei dettagli del record
$query = 'SELECT CONCAT(idtipointervento, "-", idcontratto) AS id,
$query = 'SELECT CONCAT(`idtipointervento`, "-", `idcontratto`) AS id,
NULL AS id_tecnico,
idtipointervento AS id_tipo_intervento,
idcontratto AS id_contratto,
costo_ore AS prezzo_orario,
costo_km AS prezzo_chilometrico,
costo_dirittochiamata AS prezzo_diritto_chiamata
FROM co_contratti_tipiintervento
WHERE co_contratti_tipiintervento.idtipointervento = '.prepare($id_tipo_intervento).' AND co_contratti_tipiintervento.idcontratto = '.prepare($id_contratto);
`idtipointervento` AS id_tipo_intervento,
`idcontratto` AS id_contratto,
`costo_ore` AS prezzo_orario,
`costo_km` AS prezzo_chilometrico,
`costo_dirittochiamata` AS prezzo_diritto_chiamata
FROM `co_contratti_tipiintervento`
WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_tipo_intervento).' AND `co_contratti_tipiintervento`.`idcontratto` = '.prepare($id_contratto);
$record = database()->fetchOne($query);

View File

@ -1,10 +1,9 @@
<?php
/*Fix per file sql di update aggiornato dopo rilascio 2.4.35*/
/* Fix per file sql di update aggiornato dopo rilascio 2.4.35 */
$has_column = null;
$col_righe = $database->fetchArray('SHOW COLUMNS FROM `zz_groups`');
$has_column = array_search('id_module_start', array_column($col_righe, 'Field'));
if (empty($has_column)) {
$database->query('ALTER TABLE `zz_groups` ADD `id_module_start` INT NULL AFTER `editable`');
}

View File

@ -427,4 +427,59 @@ UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(an_anagrafiche.idanagrafica) AS
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(an_anagrafiche.idanagrafica) AS dato FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.id LEFT JOIN an_tipianagrafiche_lang ON (an_tipianagrafiche_lang.id_record = an_tipianagrafiche.id AND |lang|)) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE 1=1 AND name=\"Vettore\" AND `deleted_at` IS NULL HAVING 2=2' WHERE `zz_widgets`.`name` = 'Numero di vettori';
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(an_anagrafiche.idanagrafica) AS dato FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.id LEFT JOIN an_tipianagrafiche_lang ON (an_tipianagrafiche_lang.id_record = an_tipianagrafiche.id AND |lang|)) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE 1=1 AND `deleted_at` IS NULL HAVING 2=2' WHERE `zz_widgets`.`name` = 'Tutte le anagrafiche';
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(an_anagrafiche.idanagrafica) AS dato FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.id LEFT JOIN an_tipianagrafiche_lang ON (an_tipianagrafiche_lang.id_record = an_tipianagrafiche.id AND |lang|)) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE 1=1 AND `deleted_at` IS NULL HAVING 2=2' WHERE `zz_widgets`.`name` = 'Tutte le anagrafiche';
-- Aggiunta tabella co_staticontratti_lang
CREATE TABLE IF NOT EXISTS `co_staticontratti_lang` (
`id` int NOT NULL,
`id_lang` int NOT NULL,
`id_record` int NOT NULL,
`name` VARCHAR(255) NOT NULL
);
ALTER TABLE `co_staticontratti_lang`
ADD PRIMARY KEY (`id`);
ALTER TABLE `co_staticontratti_lang`
MODIFY `id` int NOT NULL AUTO_INCREMENT;
INSERT INTO `co_staticontratti_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `co_staticontratti`;
ALTER TABLE `co_staticontratti`
DROP `descrizione`;
ALTER TABLE `co_staticontratti` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT;
ALTER TABLE `co_staticontratti_lang` ADD CONSTRAINT `co_staticontratti_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `co_staticontratti`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
-- Allineamento vista Stati dei contratti
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`co_staticontratti`
LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND |lang|)
WHERE
1=1 AND deleted_at IS NULL
HAVING
2=2" WHERE `name` = 'Stati dei contratti';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_staticontratti_lang`.`name`' WHERE `zz_modules`.`name` = 'Stati dei contratti' AND `zz_views`.`name` = 'Descrizione';
-- Allineamento vista Contratti
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`co_contratti`
LEFT JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `an_anagrafiche` AS `agente` ON `co_contratti`.`idagente` = `agente`.`idanagrafica`
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 |lang|)
LEFT JOIN (SELECT `idcontratto`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `co_righe_contratti` GROUP BY `idcontratto`) AS righe ON `co_contratti`.`id` = `righe`.`idcontratto`
LEFT JOIN (SELECT GROUP_CONCAT(CONCAT(matricola, IF(nome != '', CONCAT(' - ', nome), '')) SEPARATOR '<br>') AS descrizione, my_impianti_contratti.idcontratto FROM my_impianti INNER JOIN my_impianti_contratti ON my_impianti.id = my_impianti_contratti.idimpianto GROUP BY my_impianti_contratti.idcontratto) AS impianti ON impianti.idcontratto = co_contratti.id
LEFT JOIN(SELECT um, SUM(qta) AS somma, idcontratto FROM co_righe_contratti GROUP BY um, idcontratto) AS orecontratti ON orecontratti.um = 'ore' AND orecontratti.idcontratto = co_contratti.id
LEFT JOIN(SELECT in_interventi.id_contratto, SUM(ore) AS sommatecnici FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id GROUP BY in_interventi.id_contratto) AS tecnici ON tecnici.id_contratto = co_contratti.id
WHERE
1=1 |segment(`co_contratti`.`id_segment`)| |date_period(custom,'|period_start|' >= `data_bozza` AND '|period_start|' <= `data_conclusione`,'|period_end|' >= `data_bozza` AND '|period_end|' <= `data_conclusione`,`data_bozza` >= '|period_start|' AND `data_bozza` <= '|period_end|',`data_conclusione` >= '|period_start|' AND `data_conclusione` <= '|period_end|',`data_bozza` >= '|period_start|' AND `data_conclusione` = NULL)|
HAVING
2=2" WHERE `name` = 'Contratti';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_staticontratti_lang`.`name`' WHERE `zz_modules`.`name` = 'Contratti' AND `zz_views`.`name` = 'icon_title_Stato';

View File

@ -49,6 +49,7 @@ return [
'co_rivalse',
'co_scadenziario',
'co_staticontratti',
'co_staticontratti_lang',
'co_statidocumento',
'co_statipreventivi',
'co_tipidocumento',