Aggiunta tabella co_statipreventivi_lang

This commit is contained in:
Pek5892 2024-02-26 10:50:43 +01:00
parent 17e004f0f7
commit fe6677e760
29 changed files with 335 additions and 148 deletions

View File

@ -52,20 +52,24 @@ $righe = $dbo->fetchArray(
$ultimo_prezzo_preventivo = $dbo->fetchArray(
'SELECT
co_righe_contratti.idarticolo,
co_righe_preventivi.prezzo_unitario,
DATE(co_righe_preventivi.updated_at) AS updated_at
FROM
co_preventivi
INNER JOIN co_righe_preventivi ON co_righe_preventivi.idpreventivo = co_preventivi.id
INNER JOIN mg_articoli ON mg_articoli.id = co_righe_preventivi.idarticolo
INNER JOIN co_righe_contratti ON co_righe_contratti.idarticolo = mg_articoli.id
WHERE
co_preventivi.idanagrafica ='.prepare($id_anagrafica).' AND co_righe_contratti.idarticolo ='.prepare($riga['idarticolo']).' AND co_preventivi.idstato NOT IN (SELECT id FROM co_statipreventivi WHERE descrizione = "Bozza" OR descrizione = "In attesa di conferma" OR descrizione = "Rifiutato")
GROUP BY
mg_articoli.id, co_righe_preventivi.id
ORDER BY
updated_at DESC'
`co_righe_contratti`.`idarticolo`,
`co_righe_preventivi`.`prezzo_unitario`,
DATE(`co_righe_preventivi`.`updated_at`) AS updated_at
FROM
`co_preventivi`
INNER JOIN `co_righe_preventivi` ON `co_righe_preventivi`.`idpreventivo` = `co_preventivi`.`id`
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `co_righe_preventivi`.`idarticolo`
INNER JOIN `co_righe_contratti` ON `co_righe_contratti`.`idarticolo` = `mg_articoli`.`id`
LEFT JOIN `co_statipreventivi` ON `co_statipreventivi`.`id` = `co_preventivi`.`idstato`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
`co_preventivi`.`idanagrafica` ='.prepare($id_anagrafica).' AND
`co_righe_contratti`.`idarticolo` ='.prepare($riga['idarticolo']).' AND
`co_statipreventivi_lang`.`name` NOT IN ("Bozza", "In attesa di conferma", "Rifiutato")
GROUP BY
`mg_articoli`.`id`, `co_righe_preventivi`.`id`
ORDER BY
`updated_at` DESC'
)[0];
$ultimo_prezzo_vendita = $dbo->fetchArray(

View File

@ -123,22 +123,25 @@ switch (filter('op')) {
if (setting('Visualizza informazioni aggiuntive sul calendario')) {
// # Box allDay preventivi
$query = 'SELECT
co_preventivi.id,
co_preventivi.nome,
co_preventivi.numero,
co_preventivi.data_accettazione,
co_preventivi.data_conclusione,
co_statipreventivi.is_pianificabile,
co_statipreventivi.descrizione as stato,
co_statipreventivi.is_completato,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = co_preventivi.idanagrafica) AS cliente,
(SELECT id FROM zz_files WHERE id_record = co_preventivi.id AND id_module = '.prepare($modulo_preventivi->id).' LIMIT 1) AS have_attachments
FROM co_preventivi
LEFT JOIN co_statipreventivi ON co_preventivi.idstato = co_statipreventivi.id
`co_preventivi`.`id`,
`co_preventivi`.`nome`,
`co_preventivi`.`numero`,
`co_preventivi`.`data_accettazione`,
`co_preventivi`.`data_conclusione`,
`co_statipreventivi`.`is_pianificabile`,
`co_statipreventivi_lang`.`name` as stato,
`co_statipreventivi`.`is_completato`,
`an_anagrafiche`. `ragione_sociale` AS cliente,
`zz_files`.`id` AS have_attachments
FROM `co_preventivi`
INNER JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `zz_files` ON `zz_files`.`id_record` = `co_preventivi`.`id` AND `zz_files`.`id_module` = '.prepare($modulo_preventivi->id).'
LEFT JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
(
(co_preventivi.data_accettazione >= '.prepare($start).' AND co_preventivi.data_accettazione <= '.prepare($end).')
OR (co_preventivi.data_conclusione >= '.prepare($start).' AND co_preventivi.data_conclusione <= '.prepare($end).')
(`co_preventivi`.`data_accettazione` >= '.prepare($start).' AND `co_preventivi`.`data_accettazione` <= '.prepare($end).')
OR (`co_preventivi`.`data_conclusione` >= '.prepare($start).' AND `co_preventivi`.`data_conclusione` <= '.prepare($end).')
)';
$preventivi = $dbo->fetchArray($query);
@ -146,7 +149,7 @@ switch (filter('op')) {
foreach ($preventivi as $preventivo) {
if ($preventivo['is_pianificabile'] == 1 || $preventivo['stato'] = 'In attesa di conferma') {
if (!empty($preventivo['data_accettazione']) && $preventivo['data_accettazione'] != '0000-00-00') {
$query.'AND co_statipreventivi.is_pianificabile=1';
$query.'AND `co_statipreventivi`.`is_pianificabile`=1';
$results[] = [
'id' => 'A_'.$modulo_preventivi->id.'_'.$preventivo['id'],
'idintervento' => $preventivo['id'],
@ -335,15 +338,20 @@ switch (filter('op')) {
}
} else {
$query = 'SELECT
co_preventivi.nome,
co_preventivi.numero,
co_preventivi.data_accettazione,
co_preventivi.data_conclusione,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = co_preventivi.idanagrafica) AS cliente,
(SELECT id FROM zz_files WHERE id_record = '.prepare($id).' AND id_module = '.prepare($modulo_preventivi->id).' LIMIT 1) AS have_attachments
FROM co_preventivi
LEFT JOIN co_statipreventivi ON co_preventivi.idstato = co_statipreventivi.id
WHERE co_preventivi.id='.prepare($id);
`co_preventivi`.`nome`,
`co_preventivi`.`numero`,
`co_preventivi`.`data_accettazione`,
`co_preventivi`.`data_conclusione`,
`an_anagrafiche`.`ragione_sociale` AS cliente,
`zz_files`.`id` AS have_attachments
FROM
`co_preventivi`
INNER JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN zz_files ON zz_files.id_record = co_preventivi.id AND zz_files.id_module = '.prepare($modulo_preventivi->id).'
LEFT JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
`co_preventivi`.`id`='.prepare($id);
$rs = $dbo->fetchArray($query);

View File

@ -54,7 +54,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');

View File

@ -53,20 +53,22 @@ $righe = $dbo->fetchArray(
$ultimo_prezzo_preventivo = $dbo->fetchArray(
'SELECT
dt_righe_ddt.idarticolo,
co_righe_preventivi.prezzo_unitario,
DATE(co_righe_preventivi.updated_at) AS updated_at
FROM
co_preventivi
INNER JOIN co_righe_preventivi ON co_righe_preventivi.idpreventivo = co_preventivi.id
INNER JOIN mg_articoli ON mg_articoli.id = co_righe_preventivi.idarticolo
INNER JOIN dt_righe_ddt ON dt_righe_ddt.idarticolo = mg_articoli.id
WHERE
co_preventivi.idanagrafica = '.prepare($id_anagrafica).' AND dt_righe_ddt.idarticolo = '.prepare($riga['idarticolo']).' AND co_preventivi.idstato NOT IN (SELECT id FROM co_statipreventivi WHERE descrizione = "Bozza" OR descrizione = "In attesa di conferma" OR descrizione = "Rifiutato")
GROUP BY
mg_articoli.id, co_righe_preventivi.id
ORDER BY
updated_at DESC'
`dt_righe_ddt`.`idarticolo`,
`co_righe_preventivi`.`prezzo_unitario`,
DATE(`co_righe_preventivi`.`updated_at`) AS updated_at
FROM
`co_preventivi`
INNER JOIN `co_righe_preventivi` ON `co_righe_preventivi`.`idpreventivo` = `co_preventivi`.`id`
LEFT JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`lang` = '.prepare(setting('Lingua')).')
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `co_righe_preventivi`.`idarticolo`
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idarticolo` = `mg_articoli`.`id`
WHERE
`co_preventivi`.`idanagrafica` = '.prepare($id_anagrafica).' AND `dt_righe_ddt`.`idarticolo` = '.prepare($riga['idarticolo']).' AND `co_statipreventivi_lang`.`name` NOT IN ("Bozza", "In attesa di conferma", "Rifiutato")
GROUP BY
`mg_articoli`.`id`, `co_righe_preventivi`.`id`
ORDER BY
`updated_at` DESC'
)[0];
$ultimo_prezzo_vendita = $dbo->fetchArray(

View File

@ -770,7 +770,14 @@ if (!$block_edit) {
}
// Lettura preventivi accettati, in attesa di conferma o in lavorazione
$prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN(SELECT id FROM co_statipreventivi WHERE is_fatturabile = 1) AND default_revision=1 AND co_preventivi.id IN (SELECT idpreventivo FROM co_righe_preventivi WHERE co_righe_preventivi.idpreventivo = co_preventivi.id AND (qta - qta_evasa) > 0)';
$prev_query = 'SELECT
COUNT(*) AS tot
FROM
`co_preventivi`
LEFT JOIN `co_righe_preventivi` ON `co_preventivi`.id = `co_righe_preventivi`.idpreventivo
INNER JOIN `co_statipreventivi` ON `co_statipreventivi`.id = `co_preventivi`.idstato
WHERE
`idanagrafica`='.prepare($record['idanagrafica']).' AND `co_statipreventivi`.`is_fatturabile` = 1 AND `default_revision` = 1 AND (`co_righe_preventivi`.`qta` - `co_righe_preventivi`.`qta_evasa`) > 0';
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
// Lettura contratti accettati, in attesa di conferma o in lavorazione

View File

@ -53,20 +53,21 @@ $righe = $dbo->fetchArray(
$ultimo_prezzo_preventivo = $dbo->fetchArray(
'SELECT
co_righe_documenti.idarticolo,
co_righe_preventivi.prezzo_unitario,
DATE(co_righe_preventivi.updated_at) AS updated_at
FROM
co_preventivi
INNER JOIN co_righe_preventivi ON co_righe_preventivi.idpreventivo = co_preventivi.id
INNER JOIN mg_articoli ON mg_articoli.id = co_righe_preventivi.idarticolo
INNER JOIN co_righe_documenti ON co_righe_documenti.idarticolo = mg_articoli.id
WHERE
co_preventivi.idanagrafica = '.prepare($id_anagrafica).' AND co_righe_documenti.idarticolo = '.prepare($riga['idarticolo']).' AND co_preventivi.idstato NOT IN (SELECT id FROM co_statipreventivi WHERE descrizione = "Bozza" OR descrizione = "In attesa di conferma" OR descrizione = "Rifiutato")
GROUP BY
mg_articoli.id, co_righe_preventivi.id
ORDER BY
updated_at DESC'
`co_righe_documenti`.`idarticolo`,
`co_righe_preventivi`.`prezzo_unitario`,
DATE(`co_righe_preventivi`.`updated_at`) AS updated_at
FROM
`co_preventivi`
INNER JOIN `co_righe_preventivi` ON `co_righe_preventivi`.`idpreventivo` = `co_preventivi`.`id`
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `co_righe_preventivi`.`idarticolo`
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idarticolo` = `mg_articoli`.`id`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
WHERE
`co_preventivi`.`idanagrafica` = '.prepare($id_anagrafica).' AND `co_righe_documenti`.`idarticolo` = '.prepare($riga['idarticolo']).' AND `co_statipreventivi`.`id` NOT IN ("Bozza", "In attesa di conferma", "Rifiutato")
GROUP BY
`mg_articoli`.`id`, `co_righe_preventivi`.`id`
ORDER BY
`updated_at` DESC'
)[0];
$ultimo_prezzo_vendita = $dbo->fetchArray(

View File

@ -488,7 +488,14 @@ if (!empty($record['idcontratto'])) {
if (!$block_edit) {
// Lettura preventivi accettati, in attesa di conferma o in lavorazione
$prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN(SELECT id FROM co_statipreventivi WHERE is_fatturabile = 1) AND default_revision=1 AND co_preventivi.id IN (SELECT idpreventivo FROM co_righe_preventivi WHERE co_righe_preventivi.idpreventivo = co_preventivi.id AND (qta - qta_evasa) > 0)';
$prev_query = 'SELECT
COUNT(*) AS tot
FROM
`co_preventivi`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
INNER JOIN `co_righe_preventivi` ON `co_preventivi`.`id` = `co_righe_preventivi`.`idpreventivo`
WHERE
idanagrafica='.prepare($record['idanagrafica']).' AND `co_statipreventivi`.`is_fatturabile` = 1 AND `default_revision`=1 AND ((`co_righe_preventivi`.`qta` - `co_righe_preventivi`.`qta_evasa`) > 0)';
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
// Lettura contratti accettati, in attesa di conferma o in lavorazione

View File

@ -53,20 +53,22 @@ $righe = $dbo->fetchArray(
$ultimo_prezzo_preventivo = $dbo->fetchArray(
'SELECT
in_righe_interventi.idarticolo,
co_righe_preventivi.prezzo_unitario,
DATE(co_righe_preventivi.updated_at) AS updated_at
FROM
co_preventivi
INNER JOIN co_righe_preventivi ON co_righe_preventivi.idpreventivo = co_preventivi.id
INNER JOIN mg_articoli ON mg_articoli.id = co_righe_preventivi.idarticolo
INNER JOIN in_righe_interventi ON in_righe_interventi.idarticolo = mg_articoli.id
WHERE
co_preventivi.idanagrafica ='.prepare($id_anagrafica).' AND in_righe_interventi.idarticolo ='.prepare($riga['idarticolo']).' AND co_preventivi.idstato NOT IN (SELECT id FROM co_statipreventivi WHERE descrizione = "Bozza" OR descrizione = "In attesa di conferma" OR descrizione = "Rifiutato")
GROUP BY
mg_articoli.id, co_righe_preventivi.id
ORDER BY
updated_at DESC'
`in_righe_interventi`.`idarticolo`,
`co_righe_preventivi`.`prezzo_unitario`,
DATE(`co_righe_preventivi`.`updated_at`) AS updated_at
FROM
`co_preventivi`
INNER JOIN `co_righe_preventivi` ON `co_righe_preventivi`.`idpreventivo` = `co_preventivi`.`id`
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `co_righe_preventivi`.`idarticolo`
INNER JOIN `in_righe_interventi` ON `in_righe_interventi`.`idarticolo` = `mg_articoli`.`id`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
`co_preventivi`.`idanagrafica` ='.prepare($id_anagrafica).' AND `in_righe_interventi`.`idarticolo` ='.prepare($riga['idarticolo']).' AND `co_statipreventivi_lang`.`name` NOT IN ("Bozza", "In attesa di conferma", "Rifiutato")
GROUP BY
`mg_articoli`.`id`, `co_righe_preventivi`.`id`
ORDER BY
`updated_at` DESC'
)[0];
$ultimo_prezzo_vendita = $dbo->fetchArray(

View File

@ -238,7 +238,14 @@ echo '
<div class="panel-body">';
if (!$block_edit) {
$prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN(SELECT id FROM co_statipreventivi WHERE is_fatturabile = 1) AND default_revision=1 AND co_preventivi.id IN (SELECT idpreventivo FROM co_righe_preventivi WHERE co_righe_preventivi.idpreventivo = co_preventivi.id AND (qta - qta_evasa) > 0)';
$prev_query = 'SELECT
COUNT(*) AS tot
FROM
`co_preventivi`
INNER JOIN `co_statipreventivi` ON `co_statipreventivi`.`id` = `co_preventivi`.`idstato`
INNER JOIN `co_righe_preventivi` ON `co_preventivi`.`id` = `co_righe_preventivi`.`idpreventivo`
WHERE
`idanagrafica`='.prepare($record['idanagrafica']).' AND `co_statipreventivi`.`is_fatturabile` = 1 AND `default_revision`=1 AND (`co_righe_preventivi`.`qta` - `co_righe_preventivi`.`qta_evasa` > 0)';
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
echo '
<div class="clearfix"></div>';

View File

@ -53,20 +53,22 @@ $righe = $dbo->fetchArray(
$ultimo_prezzo_preventivo = $dbo->fetchArray(
'SELECT
or_righe_ordini.idarticolo,
co_righe_preventivi.prezzo_unitario,
DATE(co_righe_preventivi.updated_at) AS updated_at
FROM
co_preventivi
INNER JOIN co_righe_preventivi ON co_righe_preventivi.idpreventivo = co_preventivi.id
INNER JOIN mg_articoli ON mg_articoli.id = co_righe_preventivi.idarticolo
INNER JOIN or_righe_ordini ON or_righe_ordini.idarticolo = mg_articoli.id
WHERE
co_preventivi.idanagrafica ='.prepare($id_anagrafica).' AND or_righe_ordini.idarticolo ='.prepare($riga['idarticolo']).' AND co_preventivi.idstato NOT IN (SELECT id FROM co_statipreventivi WHERE descrizione = "Bozza" OR descrizione = "In attesa di conferma" OR descrizione = "Rifiutato")
GROUP BY
mg_articoli.id, co_righe_preventivi.id
ORDER BY
updated_at DESC'
`or_righe_ordini`.`idarticolo`,
`co_righe_preventivi`.`prezzo_unitario`,
DATE(`co_righe_preventivi`.`updated_at`) AS updated_at
FROM
`co_preventivi`
INNER JOIN `co_righe_preventivi` ON `co_righe_preventivi`.`idpreventivo` = `co_preventivi`.`id`
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `co_righe_preventivi`.`idarticolo`
INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idarticolo` = `mg_articoli`.`id`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).'
WHERE
`co_preventivi`.`idanagrafica` ='.prepare($id_anagrafica).' AND `or_righe_ordini`.`idarticolo` ='.prepare($riga['idarticolo']).' AND `co_statipreventivi_lang`.`name` NOT IN ("Bozza", "In attesa di conferma", "Rifiutato")
GROUP BY
`mg_articoli`.`id`, `co_righe_preventivi`.`id`
ORDER BY
`updated_at` DESC'
)[0];
$ultimo_prezzo_vendita = $dbo->fetchArray(

View File

@ -148,7 +148,7 @@ switch (post('op')) {
], ['id' => $idintervento]);
// Imposto il preventivo nello stato "In lavorazione" se inizio ad aggiungere interventi
$dbo->query("UPDATE `co_preventivi` SET idstato=(SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='In lavorazione') WHERE `id`=".prepare($id_record));
$dbo->query("UPDATE `co_preventivi` SET `idstato`=(SELECT `id` FROM `co_statipreventivi` LEFT JOIN `co_statipreventivi_lang ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = ".prepare(setting('Lingua')).") WHERE `name`='In lavorazione') WHERE `co_preventivi`.`id`=".prepare($id_record));
flash()->info(tr('Intervento _NUM_ aggiunto!', [
'_NUM_' => $rs[0]['codice'],

View File

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

View File

@ -27,22 +27,39 @@ switch ($resource) {
*/
case 'preventivi':
if (isset($superselect['idanagrafica'])) {
$query = 'SELECT co_preventivi.id AS id, an_anagrafiche.idanagrafica, CONCAT("Preventivo ", numero, " del ", DATE_FORMAT(data_bozza, "%d/%m/%Y"), " - ", co_preventivi.nome, " [", (SELECT `descrizione` FROM `co_statipreventivi` WHERE `co_statipreventivi`.`id` = `idstato`) , "]") AS descrizione, co_preventivi.idtipointervento, (SELECT descrizione FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento = co_preventivi.idtipointervento) AS idtipointervento_descrizione, (SELECT tempo_standard FROM in_tipiintervento WHERE in_tipiintervento.idtipointervento = co_preventivi.idtipointervento) AS tempo_standard, (SELECT SUM(subtotale) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS totale, (SELECT SUM(sconto) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS sconto FROM co_preventivi INNER JOIN an_anagrafiche ON co_preventivi.idanagrafica=an_anagrafiche.idanagrafica |where| ORDER BY id';
$query = 'SELECT
`co_preventivi`.`id` AS id,
`an_anagrafiche`.`idanagrafica`,
CONCAT("Preventivo ", numero, " del ", DATE_FORMAT(`data_bozza`, "%d/%m/%Y"), " - ", `co_preventivi`.`nome`, " [", `co_statipreventivi_lang`.`name` , "]") AS descrizione,
`co_preventivi`.`idtipointervento`,
`in_tipiintervento`.`descrizione` AS idtipointervento_descrizione,
`in_tipiintervento`.`tempo_standard` AS tempo_standard,
(SELECT SUM(subtotale) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS totale,
(SELECT SUM(sconto) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS sconto
FROM
`co_preventivi`
INNER JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato`=`co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_preventivi`.`idstato`=`co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang`='.prepare(setting('Lingua')).')
LEFT JOIN `in_tipiintervento` ON (`co_preventivi`.`idtipointervento`=`in_tipiintervento`.`idtipointervento`)
|where|
ORDER BY
`id`';
foreach ($elements as $element) {
$filter[] = 'id='.prepare($element);
}
if (empty($elements)) {
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = 'co_preventivi.default_revision=1';
$where[] = '`an_anagrafiche`.`idanagrafica`='.prepare($superselect['idanagrafica']);
$where[] = '`co_preventivi`.`default_revision`=1';
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_pianificabile';
$where[] = 'idstato IN (SELECT `id` FROM `co_statipreventivi` WHERE '.$stato.' = 1)';
$where[] = '('.$stato.' = 1)';
}
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');
$search_fields[] = '`nome` LIKE '.prepare('%'.$search.'%');
}
}

View File

@ -186,7 +186,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 preventivi?'),
'msg' => '<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione, colore as _bgcolor_ FROM co_statipreventivi ORDER BY descrizione" ]}',
'msg' => '<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_statipreventivi`.`id`, `co_statipreventivi_lang`.`name` AS descrizione, `colore` as _bgcolor_ FROM `co_statipreventivi` LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id` = `co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).') ORDER BY `name`" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,

View File

@ -19,7 +19,7 @@
include_once __DIR__.'/../../core.php';
$stati_abilitati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_abilitati FROM `co_statipreventivi` WHERE `is_revisionabile` = 1 ')['stati_abilitati'];
$stati_abilitati = $dbo->fetchOne('SELECT GROUP_CONCAT(`name` SEPARATOR ", ") AS stati_abilitati FROM `co_statipreventivi` LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id` = `co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).' WHERE `is_revisionabile` = 1 ')['stati_abilitati'];
// Crea revisione
echo '
@ -35,7 +35,7 @@ $rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE idprev
$disabled = ($record['is_fatturabile'] || $record['is_completato']) && !empty($rs_documento);
$stati_abilitati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_abilitati FROM `co_statipreventivi` WHERE `is_fatturabile` = 1 OR `is_completato` = 1 ')['stati_abilitati'];
$stati_abilitati = $dbo->fetchOne('SELECT GROUP_CONCAT(`name` SEPARATOR ", ") AS stati_abilitati FROM `co_statipreventivi` LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id` = `co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).' WHERE `is_fatturabile` = 1 OR `is_completato` = 1 ')['stati_abilitati'];
// Creazione altri documenti
echo '

View File

@ -115,7 +115,7 @@ echo '
</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_statipreventivi ORDER BY descrizione", "value": "$idstato$", "class": "unblockable" ]}
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstato", "required": 1, "values": "query=SELECT `co_statipreventivi`.`id`, `co_statipreventivi_lang`.`name` AS descrizione, `colore` AS _bgcolor_ FROM `co_statipreventivi` LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = <?php echo prepare(setting('Lingua')); ?>) ORDER BY `name`", "value": "$idstato$", "class": "unblockable" ]}
</div>
</div>

View File

@ -22,13 +22,19 @@ include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
$preventivo = Modules\Preventivi\Preventivo::with('stato')->find($id_record);
$record = $dbo->fetchOne('SELECT co_preventivi.*,
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_preventivi.idanagrafica) AS tipo_anagrafica,
co_statipreventivi.is_fatturabile,
co_statipreventivi.is_pianificabile,
co_statipreventivi.is_completato,
co_statipreventivi.is_revisionabile,
co_statipreventivi.descrizione AS stato
FROM co_preventivi LEFT JOIN co_statipreventivi ON co_preventivi.idstato=co_statipreventivi.id
WHERE co_preventivi.id='.prepare($id_record));
$record = $dbo->fetchOne('SELECT
`co_preventivi`.*,
`an_anagrafiche`.`tipo` AS tipo_anagrafica,
`co_statipreventivi`.`is_fatturabile`,
`co_statipreventivi`.`is_pianificabile`,
`co_statipreventivi`.`is_completato`,
`co_statipreventivi`.`is_revisionabile`,
`co_statipreventivi_lang`.`name` AS stato
FROM
`co_preventivi`
INNER JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
LEFT JOIN `co_statipreventivi` ON `co_preventivi`.`idstato`=`co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_preventivi`.`idstato`=`co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang`='.prepare(setting('Lingua')).')
WHERE
`co_preventivi`.`id`='.prepare($id_record));
}

View File

@ -52,19 +52,21 @@ $righe = $dbo->fetchArray(
$ultimo_prezzo_preventivo = $dbo->fetchArray(
'SELECT
co_righe_preventivi.idarticolo,
co_righe_preventivi.prezzo_unitario,
DATE(co_righe_preventivi.updated_at) AS updated_at
`co_righe_preventivi`.`idarticolo`,
`co_righe_preventivi`.`prezzo_unitario`,
DATE(`co_righe_preventivi`.`updated_at`) AS updated_at
FROM
co_preventivi
INNER JOIN co_righe_preventivi ON co_righe_preventivi.idpreventivo = co_preventivi.id
INNER JOIN mg_articoli ON mg_articoli.id = co_righe_preventivi.idarticolo
`co_preventivi`
INNER JOIN `co_righe_preventivi` ON `co_righe_preventivi`.`idpreventivo` = `co_preventivi`.`id`
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `co_righe_preventivi`.`idarticolo`
INNER JOIN `co_statipreventivi` ON `co_statipreventivi`.`id` = `co_preventivi`.`idstato`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
co_preventivi.idanagrafica ='.prepare($id_anagrafica).' AND co_righe_preventivi.idarticolo ='.prepare($riga['idarticolo']).' AND co_preventivi.idstato NOT IN (SELECT id FROM co_statipreventivi WHERE descrizione = "Bozza" OR descrizione = "In attesa di conferma" OR descrizione = "Rifiutato")
`co_preventivi`.`idanagrafica` ='.prepare($id_anagrafica).' AND `co_righe_preventivi`.`idarticolo` ='.prepare($riga['idarticolo']).' AND `co_statipreventivi_lang`.`name` NOT IN ("Bozza", "In attesa di conferma", "Rifiutato")
GROUP BY
mg_articoli.id, co_righe_preventivi.id
`mg_articoli`.`id`, `co_righe_preventivi`.`id`
ORDER BY
updated_at DESC'
`updated_at` DESC'
)[0];
$ultimo_prezzo_vendita = $dbo->fetchArray(

View File

@ -105,7 +105,7 @@ class CSV extends CSVImporter
$preventivo = Preventivo::build($anagrafica, $tipo, $record['nome'], new Carbon($record['data_bozza']), 0);
$preventivo->numero = $record['numero'];
$preventivo->idstato = Stato::where('descrizione', 'Bozza')->first()->id;
$preventivo->idstato = (new Stato())->getByName('Bozza')->id_record;
$preventivo->descrizione = $record['descrizione'];
$preventivo->save();
}

View File

@ -68,7 +68,7 @@ class Preventivo extends Document
{
$model = new static();
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
$stato_documento = (new Stato())->getByName('Bozza')->id_record;
$id_agente = $anagrafica->idagente;
$id_pagamento = $anagrafica->idpagamento_vendite;

View File

@ -32,4 +32,34 @@ class Stato extends Model
{
return $this->hasMany(Preventivo::class, 'idstatopreventivo');
}
/**
* Ritorna l'attributo name dello stato del preventivo.
*
* @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 del preventivo 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

@ -21,7 +21,18 @@ include_once __DIR__.'/../../../core.php';
$id_module = Modules::get('Preventivi')['id'];
$rs = $dbo->fetchArray("SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_preventivi.idanagrafica) AS ragione_sociale FROM co_preventivi WHERE idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='In lavorazione') AND default_revision = 1 ORDER BY data_conclusione ASC");
$rs = $dbo->fetchArray("SELECT *,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale
FROM
`co_preventivi`
INNER JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato`=`co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id`=`co_statipreventivi_lang`.`id_record` AND `co_statipreventivi_lang`.`id_lang` = ".prepare(setting('Lingua')).")
WHERE
`co_statipreventivi_lang`.`name` = 'In lavorazione'
AND `default_revision` = 1
ORDER BY
`data_conclusione` ASC");
if (!empty($rs)) {
echo "

View File

@ -23,7 +23,18 @@ use Modules\Preventivi\Stato;
$id_module = Modules::get('Preventivi')['id'];
$rs = $dbo->fetchArray('SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_preventivi.idanagrafica) AS ragione_sociale FROM co_preventivi WHERE idstato IN (SELECT id FROM co_statipreventivi WHERE is_fatturabile = 1) AND default_revision = 1 ORDER BY data_conclusione ASC');
$rs = $dbo->fetchArray('SELECT *,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale
FROM
`co_preventivi`
INNER JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
INNER JOIN `co_statipreventivi` ON `co_preventivi`.`idstato`=`co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_statipreventivi`.`id` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
`is_fatturabile` = 1
AND `default_revision` = 1
ORDER BY
`data_conclusione` ASC');
if (!empty($rs)) {
echo "

View File

@ -22,7 +22,6 @@ include_once __DIR__.'/../../core.php';
switch (post('op')) {
case 'update':
$dbo->update('co_statipreventivi', [
'descrizione' => (count($dbo->fetchArray('SELECT descrizione FROM co_statipreventivi WHERE descrizione = '.prepare(post('descrizione')))) > 0) ? $dbo->fetchOne('SELECT descrizione FROM co_statipreventivi WHERE id ='.$id_record)['descrizione'] : post('descrizione'),
'icona' => post('icona'),
'colore' => post('colore'),
'is_completato' => post('is_completato') ?: null,
@ -31,6 +30,10 @@ switch (post('op')) {
'is_revisionabile' => post('is_revisionabile') ?: null,
], ['id' => $id_record]);
$dbo->update('co_statipreventivi_lang', [
'name' => post('descrizione'),
], ['id_record' => $id_record]);
flash()->info(tr('Informazioni salvate correttamente.'));
break;
@ -44,23 +47,23 @@ switch (post('op')) {
$is_pianificabile = post('is_pianificabile') ?: null;
// controlla descrizione che non sia duplicata
if (count($dbo->fetchArray('SELECT descrizione FROM co_statipreventivi WHERE descrizione='.prepare($descrizione))) > 0) {
flash()->error(tr('Stato di preventivo già esistente.'));
if (count($dbo->fetchArray('SELECT `name` FROM `co_statipreventivi_lang` WHERE `name`='.prepare($descrizione))) > 0) {
flash()->error(tr('Esiste già uno stato dei preventivi con questo nome.'));
} else {
$query = 'INSERT INTO co_statipreventivi(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_statipreventivi` (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();
flash()->info(tr('Nuovo stato preventivo aggiunto.'));
$dbo->query('INSERT INTO `co_statipreventivi_lang` (`name`, `id_record`, `id_lang`) VALUES ('.prepare($descrizione).', '.prepare($id_record).', '.prepare(setting('Lingua')).' )');
flash()->info(tr('Nuovo stato dei preventivi aggiunto.'));
}
break;
case 'delete':
// scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato nei preventivi
if (count($dbo->fetchArray('SELECT id FROM co_preventivi WHERE idstato='.prepare($id_record))) > 0) {
$query = 'UPDATE co_statipreventivi SET deleted_at = NOW() WHERE can_delete = 1 AND id='.prepare($id_record);
if (count($dbo->fetchArray('SELECT `id` FROM `co_preventivi` WHERE `idstato`='.prepare($id_record))) > 0) {
$query = 'UPDATE `co_statipreventivi` SET `deleted_at` = NOW() WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
} else {
$query = 'DELETE FROM co_statipreventivi WHERE can_delete = 1 AND id='.prepare($id_record);
$query = 'DELETE FROM `co_statipreventivi` WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
}
$dbo->query($query);

View File

@ -34,7 +34,7 @@ if ($record['can_delete']) {
<div class="row">
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$", "extra": "<?php echo $attr; ?>" ]}
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$name$", "extra": "<?php echo $attr; ?>" ]}
</div>
<div class="col-md-3">

View File

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

View File

@ -26,11 +26,15 @@ class Preventivi extends AppResource implements RetrieveInterface
{
public function getCleanupData($last_sync_at)
{
$query = 'SELECT DISTINCT(co_preventivi.id) AS id FROM co_preventivi
INNER JOIN co_statipreventivi ON co_statipreventivi.id = co_preventivi.idstato
WHERE co_statipreventivi.is_pianificabile = 0';
$query = 'SELECT
DISTINCT(`co_preventivi`.`id`) AS id
FROM
`co_preventivi`
INNER JOIN `co_statipreventivi` ON `co_statipreventivi`.`id` = `co_preventivi`.`idstato`
WHERE
`co_statipreventivi`.`is_pianificabile` = 0';
if ($last_sync_at) {
$query .= ' AND (co_preventivi.updated_at > '.prepare($last_sync_at).' OR co_statipreventivi.updated_at > '.prepare($last_sync_at).')';
$query .= ' AND (`co_preventivi`.`updated_at` > '.prepare($last_sync_at).' OR `co_statipreventivi`.`updated_at` > '.prepare($last_sync_at).')';
}
$records = database()->fetchArray($query);
@ -76,10 +80,11 @@ class Preventivi extends AppResource implements RetrieveInterface
`co_preventivi`.`nome`,
`co_preventivi`.`numero`,
`co_preventivi`.`data_bozza`,
`co_statipreventivi`.`descrizione` AS stato
`co_statipreventivi_lang`.`name` AS stato
FROM
`co_preventivi`
INNER JOIN `co_statipreventivi` ON `co_statipreventivi`.`id` = `co_preventivi`.`idstato`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi_lang`.`id_record` = `co_preventivi`.`idstato` AND `co_statipreventivi_lang`.`id_lang` = '.prepare(setting('Lingua')).')
WHERE
`co_preventivi`.`id` = '.prepare($id);

View File

@ -646,3 +646,62 @@ INSERT INTO an_sdi (nome, codice) VALUES
('Extreme software', 'E2VWRNU'),
('Unimatica', 'E06UCUD'),
('CompEd', 'WHP7LTE');
-- Aggiunta tabella co_statipreventivi_lang
CREATE TABLE IF NOT EXISTS `co_statipreventivi_lang` (
`id` int NOT NULL,
`id_lang` int NOT NULL,
`id_record` int NOT NULL,
`name` VARCHAR(255) NOT NULL
);
ALTER TABLE `co_statipreventivi_lang`
ADD PRIMARY KEY (`id`);
ALTER TABLE `co_statipreventivi_lang`
MODIFY `id` int NOT NULL AUTO_INCREMENT;
INSERT INTO `co_statipreventivi_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `co_statipreventivi`;
ALTER TABLE `co_statipreventivi`
DROP `descrizione`;
ALTER TABLE `co_statipreventivi` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT;
ALTER TABLE `co_statipreventivi_lang` ADD CONSTRAINT `co_statipreventivi_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `co_statipreventivi`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
-- Allineamento vista Stati dei preventivi
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`co_statipreventivi`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id` = `co_statipreventivi_lang`.`id_record` AND |lang|)
WHERE
1=1
HAVING
2=2" WHERE `name` = 'Stati dei preventivi';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statipreventivi_lang`.`name`' WHERE `zz_modules`.`name` = 'Stati dei preventivi' AND `zz_views`.`name` = 'Descrizione';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statipreventivi`.`id`' WHERE `zz_modules`.`name` = 'Stati dei preventivi' AND `zz_views`.`name` = 'id';
-- Allineamento vista Preventivi
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`co_preventivi`
LEFT JOIN `an_anagrafiche` ON `co_preventivi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `co_statipreventivi` ON `co_preventivi`.`idstato` = `co_statipreventivi`.`id`
LEFT JOIN `co_statipreventivi_lang` ON (`co_statipreventivi`.`id` = `co_statipreventivi_lang`.`id_record` AND co_statipreventivi_lang.|lang|)
LEFT JOIN (SELECT `idpreventivo`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `co_righe_preventivi` GROUP BY `idpreventivo`) AS righe ON `co_preventivi`.`id` = `righe`.`idpreventivo`
LEFT JOIN (SELECT `an_anagrafiche`.`idanagrafica`, `an_anagrafiche`.`ragione_sociale` AS nome FROM `an_anagrafiche`)AS agente ON `agente`.`idanagrafica`=`co_preventivi`.`idagente`
LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT `co_documenti`.`numero_esterno` SEPARATOR ', ') AS `info`, `co_righe_documenti`.`original_document_id` AS `idpreventivo` FROM `co_documenti` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento` WHERE `original_document_type`='Modules\\Preventivi\\Preventivo' GROUP BY `idpreventivo`, `original_document_id`) AS `fattura` ON `fattura`.`idpreventivo` = `co_preventivi`.`id`
LEFT JOIN (SELECT COUNT(id) as emails, em_emails.id_record FROM em_emails INNER JOIN zz_operations ON zz_operations.id_email = em_emails.id WHERE id_module IN(SELECT id FROM zz_modules WHERE name = 'Preventivi') AND `zz_operations`.`op` = 'send-email' GROUP BY em_emails.id_record) AS `email` ON `email`.`id_record` = `co_preventivi`.`id`
WHERE
1=1 |segment(`co_preventivi`.`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)| AND `default_revision` = 1
GROUP BY
`co_preventivi`.`id`, `fattura`.`info`
HAVING
2=2
ORDER BY
`co_preventivi`.`id` DESC" WHERE `name` = 'Preventivi';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statipreventivi_lang`.`name`' WHERE `zz_modules`.`name` = 'Preventivi' AND `zz_views`.`name` = 'icon_title_Stato';

View File

@ -53,6 +53,7 @@ return [
'co_statidocumento',
'co_statidocumento_lang',
'co_statipreventivi',
'co_statipreventivi_lang',
'co_tipidocumento',
'co_tipi_scadenze',
'co_stampecontabili',