Aggiunta tabella or_statiordine_lang

This commit is contained in:
Pek5892 2024-03-01 11:32:13 +01:00
parent 6168165bcb
commit 98259586f1
44 changed files with 427 additions and 216 deletions

View File

@ -19,6 +19,7 @@
use Modules\Contratti\Stato as StatoContratto;
use Modules\Fatture\Stato as StatoFattura;
use Modules\Ordini\Stato as StatoOrdine;
use Modules\DDT\Stato;
use Plugins\ListinoFornitori\DettaglioFornitore;
@ -153,11 +154,11 @@ if (!empty($options['create_document'])) {
// Opzioni aggiuntive per gli Ordini
elseif (in_array($final_module['name'], ['Ordini cliente', 'Ordini fornitore'])) {
$stato_predefinito = $database->fetchOne("SELECT * FROM or_statiordine WHERE descrizione = 'Bozza'");
$stato_predefinito = (new StatoOrdine())->getByName('Bozza')->id_record;
echo '
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM or_statiordine WHERE descrizione IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\', \'Annullato\')", "value": "'.$stato_predefinito['id'].'" ]}
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `name` IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\', \'Annullato\')", "value": "'.$stato_predefinito['id'].'" ]}
</div>';
}

View File

@ -21,6 +21,8 @@ include_once __DIR__.'/../../core.php';
use Modules\DDT\DDT;
use Modules\Ordini\Ordine;
use Modules\DDT\Stato as StatoDDT;
use Modules\Ordini\Stato as StatoOrdine;
// Informazioni generali sulla riga
$source_type = filter('riga_type');
@ -52,7 +54,8 @@ $direzione_richiesta = $source->getDocument()->direzione == 'entrata' ? 'uscita'
// Individuazione DDT disponibili
$ddt = DDT::whereHas('stato', function ($query) {
$query->where('descrizione', '!=', 'Bozza');
$id_stato = (new StatoDDT())->getByName('Bozza')->id_record;
$query->where('id', '!=', $id_stato);
})->whereHas('tipo', function ($query) use ($direzione_richiesta) {
$query->where('dir', '=', $direzione_richiesta);
})->get();
@ -67,7 +70,8 @@ foreach ($ddt as $elemento) {
// Individuazione ordini disponibili
$tipo_ordini = $direzione_richiesta == 'entrata' ? 'cliente' : 'fornitore';
$ordini = Ordine::whereHas('stato', function ($query) {
$query->where('descrizione', '!=', 'Bozza');
$id_stato = (new StatoOrdine())->getByName('Bozza')->id_record;
$query->where('id', '!=', $id_stato);
})->whereHas('tipo', function ($query) use ($direzione_richiesta) {
$query->where('dir', '=', $direzione_richiesta);
})->get();

View File

@ -63,10 +63,8 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface
];
$joins[] = [
'`an_tipianagrafiche_lang`',
'`an_tipianagrafiche_lang`.`id_record`',
'`an_tipianagrafiche`.`id`',
];
'an_tipianagrafiche_lang' => '`an_tipianagrafiche_lang`.`idrecord` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`idlang` = '.setting('Lingua'),
];
$where[] = ['`an_tipianagrafiche_lang`.`name`', '=', $type];
}

View File

@ -23,23 +23,28 @@ $impegnato = 0;
$ordinato = 0;
$query = 'SELECT
or_ordini.id AS id,
or_ordini.numero,
or_ordini.numero_esterno,
data,
SUM(or_righe_ordini.qta) AS qta_ordinata,
SUM(or_righe_ordini.qta - or_righe_ordini.qta_evasa) AS qta_impegnata,
or_righe_ordini.um
FROM or_ordini
INNER JOIN or_righe_ordini ON or_ordini.id = or_righe_ordini.idordine
INNER JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id
WHERE idarticolo = '.prepare($articolo->id)."
AND (SELECT dir FROM or_tipiordine WHERE or_tipiordine.id=or_ordini.idtipoordine) = '|dir|'
AND (or_righe_ordini.qta - or_righe_ordini.qta_evasa) > 0
AND or_righe_ordini.confermato = 1
AND or_statiordine.impegnato = 1
GROUP BY or_ordini.id
HAVING qta_ordinata > 0";
`or_ordini`.`id` AS id,
`or_ordini`.`numero`,
`or_ordini`.`numero_esterno`,
`data`,
SUM(`or_righe_ordini`.`qta`) AS qta_ordinata,
SUM(`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) AS qta_impegnata,
`or_righe_ordini`.`um`
FROM
`or_ordini`
INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id`
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipiordine`=`or_tipiordine`.`id`
WHERE
`idarticolo` = '.prepare($articolo->id)."
AND `or_tipiordine`.`dir`= '|dir|'
AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0
AND `or_righe_ordini`.`confermato` = 1
AND `or_statiordine`.`impegnato` = 1
GROUP BY
`or_ordini`.`id`
HAVING
`qta_ordinata` > 0";
echo '
<div class="panel panel-primary">

View File

@ -50,10 +50,8 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
];
$joins[] = [
'mg_categorie_lang AS categorie_lang',
'mg_categorie.id',
'categorie_lang.id_record',
];
'mg_categorie_lang AS categorie_lang' => 'mg_categorie_lang.id_record = categorie.id AND mg_categorie_lang.id_lang = '.setting('Lingua'),
];
$joins[] = [
'mg_categorie AS sottocategorie',
@ -62,9 +60,7 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
];
$joins[] = [
'mg_categorie_lang AS sottocategorie_lang',
'mg_categorie.id',
'sottocategorie_lang.id_record',
'mg_categorie_lang AS sottocategorie_lang' => 'mg_categorie_lang.id_record = sottocategorie.id AND mg_categorie_lang.id_lang = '.setting('Lingua'),
];
$where[] = ['mg_articoli.deleted_at', '=', null];

View File

@ -165,7 +165,7 @@ switch (post('op')) {
$new_contratto->data_conclusione = $new_contratto->data_accettazione->copy()->add($diff);
$new_contratto->data_bozza = Carbon::now();
$stato = StatoContratto::where('descrizione', '=', 'Bozza')->first();
$stato = (new StatoContratto())->getByName('Bozza')->id_record;
$new_contratto->stato()->associate($stato);
$new_contratto->save();

View File

@ -127,10 +127,10 @@ if (!empty($interventi)) {
$tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
// Raggruppamento per stato intervento
$stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore;
$stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore;
$stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
$stati_intervento[$intervento->stato->name]['colore'] = $intervento->stato->colore;
$stati_intervento[$intervento->stato->name]['ore'] += $sessione->ore;
$stati_intervento[$intervento->stato->name]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$stati_intervento[$intervento->stato->name]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
}
echo '

View File

@ -22,6 +22,7 @@ include_once __DIR__.'/../../core.php';
use Models\Module;
use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Ordini\Stato as StatoOrdine;
use Modules\DDT\Components\Articolo;
use Modules\DDT\Components\Descrizione;
use Modules\DDT\Components\Riga;
@ -472,7 +473,7 @@ switch (filter('op')) {
*/
case 'completa_trasporto':
$tipo = Tipo::where('dir', '!=', $ddt->direzione)->first();
$stato = Stato::where('descrizione', '=', 'Evaso')->first();
$stato = (new Stato())->getByName('Evaso')->id_record;
// Duplicazione DDT
$id_segment = post('id_segment');
@ -732,9 +733,10 @@ switch (filter('op')) {
// Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase
if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati')) {
$rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idordine!=0');
$rs = $dbo->fetchArray('SELECT `idordine` FROM `dt_righe_ddt` WHERE `idddt`='.prepare($id_record).' AND `idordine`!=0');
for ($i = 0; $i < sizeof($rs); ++$i) {
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
$stato = (new StatoOrdine())->getByName(get_stato_ordine($rs[$i]['idordine']))->id_record;
$dbo->query('UPDATE `or_ordini` SET `idstatoordine`='.prepare($stato).'") WHERE `id` = '.prepare($rs[$i]['idordine']));
}
}

View File

@ -49,7 +49,7 @@ $id_anagrafica = $documento_finale->idanagrafica;
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT or_ordini.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM or_ordini WHERE idanagrafica='.prepare($id_anagrafica).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).' LIMIT 0,1) AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
{[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT `or_ordini`.`id`, CONCAT(IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\')) AS descrizione FROM `or_ordini` INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine`=`or_tipiordine`.`id` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id`=`or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `or_statiordine_lang`.`name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\') AND `dir`='.prepare($dir).' AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0 ORDER BY `data` DESC, `numero` DESC" ]}
</div>
</div>

View File

@ -530,7 +530,20 @@ if ($dir == 'entrata') {
if (!$block_edit) {
// Lettura ordini (cliente o fornitore)
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)';
$ordini_query = 'SELECT
COUNT(*) AS tot
FROM
`or_ordini`
INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id`
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipiordine`=`or_tipiordine`.`id`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = "'.prepare(setting('Lingua')).'")
WHERE
`idanagrafica`='.prepare($record['idanagrafica']).'
AND `or_statiordine_lang`.`name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\'))
AND `dir`='.prepare($dir).')
AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0)
GROUP BY `or_ordini`.`id`';
$tot_ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
$ddt_query = 'SELECT
@ -544,7 +557,8 @@ if (!$block_edit) {
WHERE
`name` IN("Evaso", "Parzialmente evaso", "Parzialmente fatturato") AND
`dt_tipiddt`.`dir`="'.($dir == 'entrata' ? 'uscita' : 'entrata').'") AND
(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0';
(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0
GROUP BY `dt_ddt`.`id`';
$tot_ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
// Form di inserimento riga documento

View File

@ -134,7 +134,7 @@ class DDT extends Document
$causale = $database->fetchOne('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(setting('Lingua')).') WHERE `dt_causalet`.`id` = '.prepare($this->idcausalet));
return $causale['is_importabile'] && in_array($this->stato->descrizione, $stati_importabili);
return $causale['is_importabile'] && in_array($this->stato->name, $stati_importabili);
}
public function getReversedAttribute()
@ -242,7 +242,7 @@ class DDT extends Document
$descrizione = $parziale_fatturato ? 'Parzialmente fatturato' : 'Fatturato';
}
$stato = Stato::where('descrizione', $descrizione)->first();
$stato = (new Stato())->getByName($descrizione)->id_record;
$this->stato()->associate($stato);
$this->save();
}

View File

@ -50,7 +50,7 @@ $id_anagrafica = $documento_finale->idanagrafica;
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT or_ordini.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\'), \' [\', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , \']\') AS descrizione FROM or_ordini WHERE idanagrafica='.prepare($id_anagrafica).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).' LIMIT 0,1) AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
{[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT `or_ordini`.`id`, CONCAT(IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\'), \' [\', `or_statiordine_lang`.`name` , \']\') AS descrizione FROM `or_ordini` INNER JOIN `or_statiordine` ON `or_ordini.idstatoordine`=`or_statiordine.id` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine.id`=`or_statiordine_lang.id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine`=`or_tipiordine`.`id` INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND `dir`='.prepare($dir).' AND (`or_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0 GROUP BY `or_ordini`.`id` ORDER BY `data` DESC, `numero` DESC" ]}
</div>
</div>

View File

@ -24,46 +24,52 @@ switch ($resource) {
$where = implode(' OR ', $search_fields);
$where = $where ? '('.$where.')' : '1=1';
$query_ordini = "SELECT or_ordini.id,
CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS text,
'Ordini' AS optgroup,
'ordine' AS tipo,
'uscita' AS dir
FROM or_ordini
INNER JOIN or_righe_ordini ON or_righe_ordini.idordine = or_ordini.id
WHERE idanagrafica = ".prepare($id_anagrafica)." AND
idstatoordine IN (
SELECT id FROM or_statiordine WHERE descrizione != 'Fatturato'
) AND
idtipoordine IN (
SELECT id FROM or_tipiordine WHERE dir = ".prepare($direzione).'
) AND |where|
GROUP BY or_ordini.id
HAVING SUM(or_righe_ordini.qta - or_righe_ordini.qta_evasa) > 0
ORDER BY data DESC, numero DESC';
$query_ordini = "SELECT
`or_ordini`.`id`,
CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`name` , ']') AS text,
'Ordini' AS optgroup,
'ordine' AS tipo,
'uscita' AS dir
FROM
`or_ordini`
INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id`
INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine` = `or_statiordine`.`id`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).")
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
WHERE
`idanagrafica` = ".prepare($id_anagrafica)."
AND `name` != 'Fatturato'
AND `dir` = ".prepare($direzione)."
AND |where|
GROUP BY
`or_ordini`.`id`
HAVING
SUM(`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0
ORDER BY
`data` DESC, `numero` DESC";
$query_ddt = "SELECT
`dt_ddt`.`id`,
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text,
'DDT' AS optgroup,
'ddt' AS tipo,
'uscita' AS dir
FROM `dt_ddt`
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id`
INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id`
LEFT JOIN dt_statiddt_lang ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).")
WHERE
`idanagrafica` = ".prepare($id_anagrafica)." AND
`dt_statiddt_lang`.`name` != 'Fatturato' AND
`dt_tipiddt`.`dir`=".prepare($direzione).'AND
|where|
GROUP BY
`dt_ddt`.`id`
HAVING
SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0
ORDER BY
`data` DESC, `numero` DESC';
`dt_ddt`.`id`,
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text,
'DDT' AS optgroup,
'ddt' AS tipo,
'uscita' AS dir
FROM `dt_ddt`
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id`
INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id`
LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).")
WHERE
`idanagrafica` = ".prepare($id_anagrafica)." AND
`dt_statiddt_lang`.`name` != 'Fatturato' AND
`dt_tipiddt`.`dir`=".prepare($direzione).'AND
|where|
GROUP BY
`dt_ddt`.`id`
HAVING
SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0
ORDER BY
`data` DESC, `numero` DESC';
// Sostituzione per la ricerca
$query_ordini = replace($query_ordini, [
@ -97,45 +103,50 @@ switch ($resource) {
$where = implode(' OR ', $search_fields);
$where = $where ? '('.$where.')' : '1=1';
$query_ordini = "SELECT or_ordini.id,
CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS text,
'Ordini' AS optgroup,
'ordine' AS tipo,
'entrata' AS dir
FROM or_ordini
INNER JOIN or_righe_ordini ON or_righe_ordini.idordine = or_ordini.id
WHERE idarticolo = ".prepare($id_articolo)." AND
idstatoordine IN (
SELECT id FROM or_statiordine WHERE descrizione != 'Fatturato'
) AND
idtipoordine IN (
SELECT id FROM or_tipiordine WHERE dir = ".prepare($direzione).'
) AND |where|
GROUP BY or_ordini.id
ORDER BY data DESC, numero DESC';
$query_ordini = "SELECT
`or_ordini`.`id`,
CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`name`, ']') AS text,
'Ordini' AS optgroup,
'ordine' AS tipo,
'entrata' AS dir
FROM `or_ordini`
INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id`
INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine` = `or_statiordine`.`id`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).")
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipiordine` = `or_tipiordine`.`id`
WHERE
`idarticolo` = ".prepare($id_articolo)."
AND `name` != 'Fatturato'
AND `dir` = ".prepare($direzione).'
AND |where|
GROUP BY
`or_ordini`.`id`
ORDER BY
`data` DESC, `numero` DESC';
$query_ddt = "SELECT
`dt_ddt`.`id`,
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text,
'DDT' AS optgroup,
'ddt' AS tipo,
'entrata' AS dir
FROM `dt_ddt`
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id`
LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).")
INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id`
WHERE
`idarticolo` = ".prepare($id_articolo)." AND
`dt_stati_lang`.`name` != 'Fatturato' AND
`dt_tipiddt`.`dir`=".prepare($direzione).'AND
|where|
GROUP BY
`dt_ddt`.`id`
HAVING
SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0
ORDER BY
`data` DESC, `numero` DESC';
`dt_ddt`.`id`,
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text,
'DDT' AS optgroup,
'ddt' AS tipo,
'entrata' AS dir
FROM
`dt_ddt`
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id`
LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).")
INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id`
WHERE
`idarticolo` = ".prepare($id_articolo)." AND
`dt_stati_lang`.`name` != 'Fatturato' AND
`dt_tipiddt`.`dir`=".prepare($direzione).'AND
|where|
GROUP BY
`dt_ddt`.`id`
HAVING
SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0
ORDER BY
`data` DESC, `numero` DESC';
// Sostituzione per la ricerca
$query_ordini = replace($query_ordini, [

View File

@ -809,7 +809,19 @@ if (!$block_edit) {
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
// Lettura ordini (cliente o fornitore)
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)';
$ordini_query = 'SELECT
COUNT(*) AS tot
FROM
`or_ordini`
INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).')
INNER JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine`
WHERE
idanagrafica='.prepare($record['idanagrafica']).'
AND `name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\'))
AND `dir`='.prepare($dir).')
AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0';
$ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
}

View File

@ -5,6 +5,7 @@ use Modules\Anagrafiche\Anagrafica;
use Modules\Contratti\Contratto;
use Modules\Fatture\Fattura;
use Modules\Preventivi\Preventivo;
use Modules\Fatture\Stato;
include_once __DIR__.'/../../core.php';
@ -57,7 +58,7 @@ switch ($op) {
if (!$preventivi->isEmpty()) {
foreach ($preventivi as $preventivo) {
echo '
<li>'.$preventivo->getReference().' ['.$preventivo->stato->descrizione.']</li>';
<li>'.$preventivo->getReference().' ['.$preventivo->stato->name.']</li>';
}
} else {
echo '
@ -74,7 +75,9 @@ switch ($op) {
// Fatture attive
$fatture = Fattura::where('idanagrafica', '=', $id_anagrafica)
->whereHas('stato', function ($query) {
$query->whereIn('descrizione', ['Emessa', 'Parzialmente pagato']);
$id_bozza = (new Stato())->getByName('Bozza')->id_record;
$id_parz_pagato = (new Stato())->getByName('Parziale pagato')->id_record;
$query->whereIn('id', [$id_bozza, $id_parz_pagato]);
})
->latest()->take($numero_documenti)->get();
echo '

View File

@ -51,9 +51,7 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface,
];
$joins[] = [
'in_statiintervento_lang',
'in_statiintervento_lang.id_record',
'in_statiintervento.id',
'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.setting('Lingua'),
];
$joins[] = [

View File

@ -140,16 +140,16 @@ switch (post('op')) {
$ordine->save();
if ($dbo->query($query)) {
$query = 'SELECT `descrizione` FROM `or_statiordine` WHERE `id`='.prepare($idstatoordine);
$query = 'SELECT `name` FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `or_statiordine`.`id`='.prepare($idstatoordine);
$rs = $dbo->fetchArray($query);
// Ricalcolo inps, ritenuta e bollo (se l'ordine non è stato evaso)
if ($dir == 'entrata') {
if ($rs[0]['descrizione'] != 'Evaso') {
if ($rs[0]['name'] != 'Evaso') {
ricalcola_costiagg_ordine($id_record);
}
} else {
if ($rs[0]['descrizione'] != 'Evaso') {
if ($rs[0]['name'] != 'Evaso') {
ricalcola_costiagg_ordine($id_record, $idrivalsainps, $idritenutaacconto, $bollo);
}
}

View File

@ -26,24 +26,29 @@ switch ($resource) {
*/
case 'ordini-cliente':
if (isset($superselect['idanagrafica'])) {
$query = 'SELECT or_ordini.id AS id,
CONCAT("Ordine ", numero_esterno, " del ", DATE_FORMAT(data, "%d/%m/%Y"), " [", (SELECT `descrizione` FROM `or_statiordine` WHERE `or_statiordine`.`id` = `idstatoordine`) , "]") AS descrizione
FROM or_ordini
INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id
INNER JOIN an_anagrafiche ON or_ordini.idanagrafica = an_anagrafiche.idanagrafica
$query = 'SELECT
`or_ordini`.`id` AS id,
CONCAT("Ordine ", `numero_esterno`, " del ", DATE_FORMAT(data, "%d/%m/%Y"), " [", `or_statiordine_lang`.`name` , "]") AS descrizione
FROM
`or_ordini`
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine` = `or_statiordine`.`id`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).')
|where|
ORDER BY or_ordini.id';
ORDER BY
`or_ordini`.`id`';
foreach ($elements as $element) {
$filter[] = 'or_ordini.id='.prepare($element);
$filter[] = '`or_ordini`.`id`='.prepare($element);
}
$where[] = 'or_tipiordine.dir='.prepare('entrata');
$where[] = '`or_tipiordine`.`dir`='.prepare('entrata');
if (empty($elements)) {
$where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = '`an_anagrafiche`.`idanagrafica`='.prepare($superselect['idanagrafica']);
$stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_fatturabile';
$where[] = 'idstatoordine IN (SELECT `id` FROM `or_statiordine` WHERE '.$stato.' = 1)';
$where[] = '`or_statiordine`.'.$stato.' = 1)';
}
}

View File

@ -64,7 +64,7 @@ switch (post('op')) {
$id_anagrafica = $anagrafica->id;
// Proseguo solo se i documenti scelti sono fatturabili
$ordine = $dbo->fetchOne('SELECT or_statiordine.descrizione AS stato FROM or_ordini LEFT JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id WHERE or_ordini.id='.prepare($id))['stato'];
$ordine = $dbo->fetchOne('SELECT `or_statiordine_lang`.`name` AS stato FROM `or_ordini` INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id`=`or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang`= '.prepare(setting('Lingua')).') WHERE `or_ordini`.`id`='.prepare($id))['stato'];
if (!in_array($ordine, ['Fatturato', 'Evaso', 'Bozza', 'In attesa di conferma', 'Annullato'])) {
$righe = $documento_import->getRighe();
if (!empty($righe)) {
@ -176,7 +176,7 @@ switch (post('op')) {
foreach ($id_records as $id) {
$ordine = Ordine::find($id);
if (in_array($ordine->stato->descrizione, ['Bozza', 'In attesa di conferma', 'Accettato'])) {
if (in_array($ordine->stato->name, ['Bozza', 'In attesa di conferma', 'Accettato'])) {
// Controllo se è già stato creato un nuovo ordine per l'anagrafica
if (in_array($ordine->idanagrafica, array_keys($new_ordini))) {
$new_ordine = Ordine::find($new_ordini[$ordine->idanagrafica]);
@ -235,7 +235,7 @@ if ($module['name'] == 'Ordini cliente') {
'title' => tr('Unire gli ordini selezionati?'),
'msg' => tr('Gli ordini saranno processati solo se in uno dei seguenti stati: Bozza, In attesa di conferma, Accettato.<br>Tutti gli ordini processati verranno eliminati e verrà creato un nuovo ordine unificato per fornitore.').'
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_module, 'is_sezionale' => 1]).', "value": "'.$id_segment_ordini.'", "select-options-escape": true ]}
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione FROM or_statiordine" ]}
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `or_statiordine`.`id`, `name` FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') ORDER BY `name` ASC" ]}
{[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
@ -250,7 +250,7 @@ $operations['cambia_stato'] = [
'data' => [
'title' => tr('Vuoi davvero cambiare lo stato per questi ordini?'),
'msg' => tr('Seleziona lo stato in cui spostare tutti gli ordini').'.<br>
<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione, colore as _bgcolor_ FROM or_statiordine" ]}',
<br>{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `or_statiordine`.`id`, `name`, `colore` as _bgcolor_ FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') ORDER BY `name` ASC" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,

View File

@ -31,9 +31,9 @@ function duplicaOrdine() {
}
</script>';
$stati = $dbo->fetchArray('SELECT descrizione FROM `or_statiordine` WHERE `is_fatturabile` = 1');
$stati = $dbo->fetchArray('SELECT `name` FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id`=`or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang`= '.prepare(setting('Lingua')).') WHERE `is_fatturabile` = 1');
foreach ($stati as $stato) {
$stati_importabili[] = $stato['descrizione'];
$stati_importabili[] = $stato['name'];
}
echo '

View File

@ -74,16 +74,16 @@ if ($righe_vuote) {
if (setting('Cambia automaticamente stato ordini fatturati')) {
if ($record['stato'] == 'Evaso' || $record['stato'] == 'Parzialmente evaso' || $record['stato'] == 'Fatturato' || $record['stato'] == 'Parzialmente fatturato') {
?>
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM or_statiordine ORDER BY descrizione", "value": "$idstatoordine$", "extra": "readonly", "class": "unblockable" ]}
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, `or_statiordine_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = <?php echo prepare(setting('Lingua')); ?>) ORDER BY `name`", "value": "$idstatoordine$", "extra": "readonly", "class": "unblockable" ]}
<?php
} else {
?>
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM or_statiordine WHERE (is_fatturabile = 0 AND descrizione != 'Fatturato' || descrizione = 'Accettato') ORDER BY descrizione", "value": "$idstatoordine$", "class": "unblockable" ]}
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, `or_statiordine_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = <?php echo prepare(setting('Lingua')); ?>) WHERE (`is_fatturabile` = 0 AND `name` != 'Fatturato' || `name` = 'Accettato') ORDER BY `name`", "value": "$idstatoordine$", "class": "unblockable" ]}
<?php
}
} else {
?>
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM or_statiordine ORDER BY descrizione", "value": "$idstatoordine$", "class": "unblockable" ]}
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, `colore` AS _bgcolor_, `or_statiordine_lang`.`name` as descrizione FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = <?php echo prepare(setting('Lingua')); ?>) ORDER BY `name`", "value": "$idstatoordine$", "class": "unblockable" ]}
<?php
}
?>

View File

@ -25,16 +25,20 @@ if (isset($id_record)) {
$ordine = Ordine::with('tipo', 'stato')->find($id_record);
$record = $dbo->fetchOne('SELECT *,
or_ordini.note,
or_ordini.idpagamento,
or_ordini.id AS idordine,
or_ordini.idagente AS idagente,
or_statiordine.descrizione AS `stato`,
or_tipiordine.descrizione AS `descrizione_tipodoc`,
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = or_ordini.idanagrafica) AS tipo_anagrafica,
(SELECT completato FROM or_statiordine WHERE or_statiordine.id=or_ordini.idstatoordine) AS flag_completato
FROM or_ordini LEFT OUTER JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id
INNER JOIN an_anagrafiche ON or_ordini.idanagrafica=an_anagrafiche.idanagrafica
INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id
WHERE or_ordini.id='.prepare($id_record));
`or_ordini`.`note`,
`or_ordini`.`idpagamento`,
`or_ordini`.`id` AS idordine,
`or_ordini`.`idagente` AS idagente,
`or_statiordine_lang`.`name` AS `stato`,
`or_tipiordine`.`descrizione` AS `descrizione_tipodoc`,
`an_anagrafiche`.`tipo` AS tipo_anagrafica,
`or_statiordine`.`completato` AS flag_completato
FROM
`or_ordini`
INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id`
LEFT JOIN `or_statiordine_lang` ON `or_statiordine_lang`.`id_record`=`or_statiordine`.`id`
INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine`=`or_tipiordine`.`id`
WHERE
`or_ordini`.`id`='.prepare($id_record));
}

View File

@ -30,7 +30,7 @@ echo '
</div>
<div class="col-md-3">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatoordine", "required": 1, "values": "query=SELECT * FROM or_statiordine WHERE descrizione IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\')", "value": "1" ]}
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatoordine", "required": 1, "values": "query=SELECT * FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record`=`or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang`= '.prepare(setting('Lingua')).') WHERE `name` IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\')", "value": "1" ]}
</div>
<div class="col-md-3">

View File

@ -124,10 +124,10 @@ if (!empty($interventi)) {
$tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
// Raggruppamento per stato intervento
$stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore;
$stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore;
$stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
$stati_intervento[$intervento->stato->name]['colore'] = $intervento->stato->colore;
$stati_intervento[$intervento->stato->name]['ore'] += $sessione->ore;
$stati_intervento[$intervento->stato->name]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$stati_intervento[$intervento->stato->name]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
}
echo '

View File

@ -51,14 +51,21 @@ foreach ($articoli as $elenco) {
$codice = $articolo ? $articolo->codice : tr('Articolo eliminato');
$descrizione = $articolo ? $articolo->name : $elenco->first()->name;
$qta_impegnata = $database->fetchOne("SELECT SUM(qta) as qta
FROM or_righe_ordini
JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine
WHERE idstatoordine = (SELECT id FROM or_statiordine WHERE descrizione = 'Bozza')
AND idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = 'entrata')
AND confermato = 1
AND idarticolo=".prepare($articolo->id).'
GROUP BY idarticolo')['qta'];
$qta_impegnata = $database->fetchOne("SELECT
SUM(`qta`) as qta
FROM
`or_righe_ordini`
INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).")
INNER JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine`
WHERE
`or_statiordine`.`name` = 'Bozza'
AND `dir` = 'entrata'
AND `confermato` = 1
AND `idarticolo`=".prepare($articolo->id).'
GROUP BY
`idarticolo`')['qta'];
$qta_impegnata = floatval($qta_impegnata);
$class = $qta_impegnata + $qta > $articolo->qta ? 'danger' : 'success';

View File

@ -56,7 +56,7 @@ class Ordine extends Document
{
$model = new static();
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
$stato_documento = (new Stato())->getByName('Bozza')->id_record;
$direzione = $tipo_documento->dir;
$id_segment = $id_segment ?: getSegmentPredefined($model->getModule()->id);

View File

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

@ -48,7 +48,7 @@ switch (post('op')) {
// Informazioni della fattura
$tipo_documento = Tipo::where('id', post('idtipodocumento'))->first();
$stato_documenti_accodabili = StatoFattura::where('descrizione', 'Bozza')->first();
$stato_documenti_accodabili = (new StatoFattura())->getByName('Bozza')->id_record;
$accodare = post('accodare');
$data = date('Y-m-d');

View File

@ -124,10 +124,10 @@ if (!empty($interventi)) {
$tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
// Raggruppamento per stato intervento
$stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore;
$stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore;
$stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
$stati_intervento[$intervento->stato->name]['colore'] = $intervento->stato->colore;
$stati_intervento[$intervento->stato->name]['ore'] += $sessione->ore;
$stati_intervento[$intervento->stato->name]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
$stati_intervento[$intervento->stato->name]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata;
}
echo '

View File

@ -40,6 +40,7 @@ class StatiContratti extends Resource implements RetrieveInterface
return [
'select' => $select,
'table' => $table,
'where' => $where,
];
}

View File

@ -27,7 +27,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$", "extra": "readonly" ]}
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$name$", "extra": "readonly" ]}
</div>
<div class="col-md-3">

View File

@ -35,6 +35,10 @@ class StatiInterventi extends Resource implements RetrieveInterface
];
}
$join = [
'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.setting('Lingua'),
];
$where = $request['where'];
if (empty($where['deleted_at'])) {
$where['deleted_at'] = null;
@ -43,6 +47,8 @@ class StatiInterventi extends Resource implements RetrieveInterface
return [
'select' => $select,
'table' => $table,
'join' => $join,
'where' => $where,
];
}
}

View File

@ -19,10 +19,12 @@
include_once __DIR__.'/../../core.php';
use Modules\Ordini\Stato;
switch (post('op')) {
case 'update':
$id_stato= (new Stato())->getByName(post('descrizione'))->id_record;
$dbo->update('or_statiordine', [
'descrizione' => (count($dbo->fetchArray('SELECT descrizione FROM or_statiordine WHERE descrizione = '.prepare(post('descrizione')))) > 0) ? $dbo->fetchOne('SELECT descrizione FROM or_statiordine WHERE id ='.$id_record)['descrizione'] : post('descrizione'),
'icona' => post('icona'),
'colore' => post('colore'),
'completato' => post('completato') ?: null,
@ -30,6 +32,10 @@ switch (post('op')) {
'impegnato' => post('impegnato') ?: null,
], ['id' => $id_record]);
$dbo->update('or_statiordine_lang', [
'name' => $id_stato ? $id_stato->name : post('descrizione'),
], ['id_record' => $id_record, 'id_lang' => setting('Lingua')]);
flash()->info(tr('Informazioni salvate correttamente.'));
break;
@ -43,12 +49,13 @@ switch (post('op')) {
$impegnato = post('impegnato') ?: null;
// controlla descrizione che non sia duplicata
if (count($dbo->fetchArray('SELECT descrizione FROM or_statiordine WHERE descrizione='.prepare($descrizione))) > 0) {
$id_stato= (new Stato())->getByName(post('descrizione'))->id_record;
if ($id_stato) {
flash()->error(tr('Stato ordine già esistente.'));
} else {
$query = 'INSERT INTO or_statiordine(descrizione, icona, colore, completato, is_fatturabile, impegnato) VALUES ('.prepare($descrizione).', '.prepare($icona).', '.prepare($colore).','.prepare($completato).', '.prepare($is_fatturabile).', '.prepare($impegnato).' )';
$dbo->query($query);
$dbo->query('INSERT INTO `or_statiordine` (icona, colore, completato, is_fatturabile, impegnato) VALUES ('.prepare($icona).', '.prepare($colore).','.prepare($completato).', '.prepare($is_fatturabile).', '.prepare($impegnato).' )');
$id_record = $dbo->lastInsertedID();
$dbo->query('INSERT INTO `or_statiordine_lang` (`name`, `id_record`, `id_lang`) VALUES ('.prepare($descrizione).', '.prepare($id_record).', '.prepare(setting('Lingua')).')');
flash()->info(tr('Nuovo stato ordine aggiunto.'));
}
@ -56,10 +63,10 @@ switch (post('op')) {
case 'delete':
// scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato negli ordini
if (count($dbo->fetchArray('SELECT id FROM or_statiordine WHERE id='.prepare($id_record))) > 0) {
$query = 'UPDATE or_statiordine SET deleted_at = NOW() WHERE can_delete = 1 AND id='.prepare($id_record);
if (count($dbo->fetchArray('SELECT `id` FROM `or_statiordine` WHERE `id`='.prepare($id_record))) > 0) {
$query = 'UPDATE `or_statiordine` SET `deleted_at` = NOW() WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
} else {
$query = 'DELETE FROM or_statiordine WHERE can_delete = 1 AND id='.prepare($id_record);
$query = 'DELETE FROM `or_statiordine` 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">
@ -63,7 +63,7 @@ if ($record['can_delete']) {
<?php
$ordini = $dbo->fetchNum('SELECT id FROM or_ordini WHERE idstatoordine='.prepare($id_record));
$ordini = $dbo->fetchNum('SELECT `id` FROM `or_ordini` WHERE `idstatoordine`='.prepare($id_record));
if (!empty($ordini)) {
echo '

View File

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

View File

@ -32,6 +32,10 @@ class StatiOrdini extends Resource implements RetrieveInterface
'*',
];
$joins = [
'or_statiordine_lang' => 'or_statiordine_lang.id_record = or_statiordine.id AND or_statiordine_lang.id_lang = '.setting('Lingua'),
];
$where = $request['where'];
if (empty($where['deleted_at'])) {
$where['deleted_at'] = null;
@ -40,6 +44,8 @@ class StatiOrdini extends Resource implements RetrieveInterface
return [
'select' => $select,
'table' => $table,
'join' => $joins,
'where' => $where,
];
}
}

View File

@ -495,25 +495,29 @@ switch (filter('op')) {
// cerco per quell'ordine
if (empty($collegamento)) {
$ordine = $dati_ordini[$numero_linea];
$query = "SELECT or_righe_ordini.id, or_righe_ordini.idordine AS id_documento, or_righe_ordini.is_descrizione, or_righe_ordini.idarticolo, or_righe_ordini.is_sconto, 'ordine' AS ref,
CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS opzione
FROM or_righe_ordini
INNER JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine
$query = "SELECT
`or_righe_ordini`.`id`,
`or_righe_ordini`.`idordine` AS id_documento,
`or_righe_ordini`.`is_descrizione`,
`or_righe_ordini`.`idarticolo`,
`or_righe_ordini`.`is_sconto`,
'ordine' AS ref,
CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`name` , ']') AS opzione
FROM `or_righe_ordini`
INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
LEFT JOIN `or_statiordine_lang` ON `or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua'))."
WHERE
or_ordini.numero_esterno = ".prepare($ordine['numero']).'
AND
YEAR(or_ordini.data) = '.prepare($ordine['anno']).'
AND
or_ordini.idanagrafica = '.prepare($anagrafica->id).'
AND
or_righe_ordini.qta > or_righe_ordini.qta_evasa
AND
|where|';
`or_ordini`.`numero_esterno` = ".prepare($ordine['numero']).'
AND YEAR(`or_ordini`.`data`) = '.prepare($ordine['anno']).'
AND `or_ordini`.`idanagrafica` = '.prepare($anagrafica->id).'
AND `or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa`
AND |where|';
// Ricerca di righe Ordine con stesso Articolo
if (!empty($id_articolo)) {
$query_articolo = replace($query, [
'|where|' => 'or_righe_ordini.idarticolo = '.prepare($id_articolo),
'|where|' => '`or_righe_ordini`.`idarticolo` = '.prepare($id_articolo),
]);
$collegamento = $database->fetchOne($query_articolo);
@ -522,7 +526,7 @@ switch (filter('op')) {
// Ricerca di righe Ordine per stessa descrizione
if (empty($collegamento)) {
$query_descrizione = replace($query, [
'|where|' => 'or_righe_ordini.descrizione = '.prepare($riga['Descrizione']),
'|where|' => '`or_righe_ordini`.`descrizione` = '.prepare($riga['Descrizione']),
]);
$collegamento = $database->fetchOne($query_descrizione);
@ -568,12 +572,15 @@ switch (filter('op')) {
FROM
`or_righe_ordini`
INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).")
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
WHERE
`or_ordini`.`idanagrafica` = ".prepare($anagrafica->id)." AND
|where_ordini| AND
`or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` AND
`or_ordini`.`idstatoordine` IN (SELECT `id` FROM `or_statiordine` WHERE `descrizione` != 'Fatturato') AND
`idtipoordine` IN (SELECT `id` FROM `or_tipiordine` WHERE `dir` ='uscita')";
`or_statiordine_lang` WHERE `name` != 'Fatturato' AND
`or_tipiordine`.`dir` ='uscita'";
// Ricerca di righe DDT/Ordine con stesso Articolo
if (!empty($id_articolo)) {

View File

@ -21,19 +21,21 @@ use Plugins\PianificazioneFatturazione\Pianificazione;
include_once __DIR__.'/../../core.php';
use Modules\Contratti\Stato;
$action = post('action');
$ret = '';
switch ($action) {
case 'update_table':
$month = post('currentMonth');
$year = post('currentYear');
$pianificazioni = Pianificazione::doesntHave('fattura')
->whereHas('contratto', function ($q) {
$q->whereHas('stato', function ($q) {
$stato_concluso = (new Stato())->getByName('Concluso')->id_record;
$q
->where('is_fatturabile', 1)
->where('descrizione', '<>', 'Concluso');
->where('id', '!=', $stato_concluso);
});
})
->whereYear('co_fatturazione_contratti.data_scadenza', $year)
@ -70,9 +72,10 @@ switch ($action) {
$pianificazioni = Pianificazione::doesntHave('fattura')
->whereHas('contratto', function ($q) {
$q->whereHas('stato', function ($q) {
$stato_concluso = (new Stato())->getByName('Concluso')->id_record;
$q
->where('is_fatturabile', 1)
->where('descrizione', '<>', 'Concluso');
->where('id', '!=', $stato_concluso);
});
})
->whereYear('co_fatturazione_contratti.data_scadenza', $year)

View File

@ -30,7 +30,7 @@ if (empty($contratto)) {
$is_pianificabile = $contratto->stato->is_pianificabile && !empty($contratto['data_accettazione']) && !empty($contratto['data_conclusione']); // Contratto permette la pianificazione
$is_pianificato = false;
$stati_pianificabili = Stato::where('is_pianificabile', 1)->get();
$elenco_stati = $stati_pianificabili->implode('descrizione', ', ');
$elenco_stati = $stati_pianificabili->implode('name', ', ');
echo '
<p>'.tr('Qui puoi pianificare la suddivisione del budget del contratto in rate uguali fatturabili in modo separato').'. '.tr('Questa procedura può essere effettuata solo una volta, e sovrascriverà in modo irreversibile tutte le righe del contratto').'.</p>

View File

@ -31,7 +31,7 @@ $is_pianificabile = $contratto->stato->is_pianificabile && !empty($contratto['da
$elenco_promemoria = $contratto->promemoria->sortBy('data_richiesta');
$stati_pianificabili = Stato::where('is_pianificabile', 1)->get();
$elenco_stati = $stati_pianificabili->implode('descrizione', ', ');
$elenco_stati = $stati_pianificabili->implode('name', ', ');
echo '
<p>'.tr('Puoi <b>pianificare dei "promemoria" o direttamente gli interventi</b> da effettuare entro determinate scadenze').'. '.tr('Per poter pianificare i promemoria, il contratto deve avere <b>data accettazione</b> e <b>data conclusione</b> definita ed essere in uno dei seguenti stati: _LINK_', [

View File

@ -22,6 +22,7 @@ namespace API\App\v1;
use API\App\AppResource;
use Illuminate\Database\Eloquent\Builder;
use Modules\Impianti\Impianto;
use Modules\Anagrafiche\Tipo;
class Impianti extends AppResource
{
@ -44,7 +45,8 @@ class Impianti extends AppResource
{
$statement = Impianto::select('id', 'updated_at', 'idtecnico')
->whereHas('anagrafica.tipi', function (Builder $query) {
$query->where('descrizione', '=', 'Cliente');
$tipo_cliente = (new Tipo())->getByName('Cliente')->id_record;
$query->where('id', '=', $tipo_cliente);
});
// Limite impianti visualizzabili dal tecnico

View File

@ -22,6 +22,7 @@ namespace API\App\v1;
use API\App\AppResource;
use Illuminate\Database\Eloquent\Builder;
use Modules\Anagrafiche\Anagrafica;
use Modules\Anagrafiche\Tipo;
class Tecnici extends AppResource
{
@ -34,7 +35,8 @@ class Tecnici extends AppResource
{
$statement = Anagrafica::select('idanagrafica', 'updated_at')
->whereHas('tipi', function (Builder $query) {
$query->where('descrizione', '=', 'Tecnico');
$tipo_tecnico = (new Tipo())->getByName('Tecnico')->id_record;
$query->where('id', '=', $tipo_tecnico);
});
// Filtro per data

View File

@ -438,6 +438,7 @@ WHERE
HAVING
2=2" WHERE `name` = 'Stati fatture';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Stati fatture' 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_statidocumento`.`id`' WHERE `zz_modules`.`name` = 'Stati fatture' AND `zz_views`.`name` = 'id';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Fatture di vendita' AND `zz_views`.`name` = 'icon_title_Stato';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Fatture di acquisto' AND `zz_views`.`name` = 'icon_title_Stato';
@ -1617,4 +1618,88 @@ WHERE
`mg_combinazioni`.`deleted_at` IS NULL
HAVING
2=2" WHERE `name` = 'Combinazioni';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_combinazioni_lang`.`name`' WHERE `zz_modules`.`name` = 'Combinazioni' AND `zz_views`.`name` = 'Nome';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_combinazioni_lang`.`name`' WHERE `zz_modules`.`name` = 'Combinazioni' AND `zz_views`.`name` = 'Nome';
-- Aggiunta tabella or_statiordine_lang
CREATE TABLE IF NOT EXISTS `or_statiordine_lang` (
`id` int NOT NULL,
`id_lang` int NOT NULL,
`id_record` int NOT NULL,
`name` VARCHAR(255) NOT NULL
);
ALTER TABLE `or_statiordine_lang`
ADD PRIMARY KEY (`id`);
ALTER TABLE `or_statiordine_lang`
MODIFY `id` int NOT NULL AUTO_INCREMENT;
INSERT INTO `or_statiordine_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `or_statiordine`;
ALTER TABLE `or_statiordine`
DROP `descrizione`;
ALTER TABLE `or_statiordine` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT;
ALTER TABLE `or_statiordine_lang` ADD CONSTRAINT `or_statiordine_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `or_statiordine`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
-- Allineamento vista Stati degli ordini
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`or_statiordine`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.|lang|)
WHERE
1=1 AND
deleted_at IS NULL
HAVING
2=2" WHERE `name` = 'Stati degli ordini';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine`.`id`' WHERE `zz_modules`.`name` = 'Stati degli ordini' AND `zz_views`.`name` = 'id';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine_lang`.`name`' WHERE `zz_modules`.`name` = 'Stati degli ordini' AND `zz_views`.`name` = 'Descrizione';
-- Allineamento vista Ordini fornitore
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`or_ordini`
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN (SELECT `idordine`, SUM(`qta` - `qta_evasa`) AS `qta_da_evadere`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `or_righe_ordini` GROUP BY `idordine`) AS righe ON `or_ordini`.`id` = `righe`.`idordine`
LEFT JOIN (SELECT `idordine`, MIN(`data_evasione`) AS `data_evasione` FROM `or_righe_ordini` WHERE (`qta` - `qta_evasa`)>0 GROUP BY `idordine`) AS `righe_da_evadere` ON `righe`.`idordine`=`righe_da_evadere`.`idordine`
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.|lang|)
LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT co_documenti.numero_esterno SEPARATOR ', ') AS info, co_righe_documenti.original_document_id AS idordine FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id = co_righe_documenti.iddocumento WHERE original_document_type='Modules\\Ordini\\Ordine' GROUP BY idordine, original_document_id) AS fattura ON fattura.idordine = or_ordini.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` = 'Ordini fornitore') AND `zz_operations`.`op` = 'send-email' GROUP BY `em_emails`.`id_record`) AS email ON `email`.`id_record` = `or_ordini`.`id`
WHERE
1=1 |segment(`or_ordini`.`id_segment`)| AND `dir` = 'uscita' |date_period(`or_ordini`.`data`)|
HAVING
2=2
ORDER BY
`data` DESC,
CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine_lang`.`name`' WHERE `zz_modules`.`name` = 'Ordini fornitore' AND `zz_views`.`name` = 'icon_title_Stato';
-- Allineamento vista Ordini cliente
UPDATE `zz_modules` SET `options` = "
SELECT
|select|
FROM
`or_ordini`
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN (SELECT `idordine`, SUM(`qta` - `qta_evasa`) AS `qta_da_evadere`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `or_righe_ordini` GROUP BY `idordine`) AS righe ON `or_ordini`.`id` = `righe`.`idordine`
LEFT JOIN (SELECT `idordine`, MIN(`data_evasione`) AS `data_evasione` FROM `or_righe_ordini` WHERE (`qta` - `qta_evasa`)>0 GROUP BY `idordine`) AS `righe_da_evadere` ON `righe`.`idordine`=`righe_da_evadere`.`idordine`
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.|lang|)
LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT 'Fattura ',`co_documenti`.`numero_esterno` SEPARATOR ', ') AS `info`, `co_righe_documenti`.`original_document_id` AS `idordine` FROM `co_documenti` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento` WHERE `original_document_type`='Modules\\Ordini\\Ordine' GROUP BY original_document_id) AS `fattura` ON `fattura`.`idordine` = `or_ordini`.`id`
LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT 'DDT ', `dt_ddt`.`numero_esterno` SEPARATOR ', ') AS `info`, `dt_righe_ddt`.`original_document_id` AS `idddt` FROM `dt_ddt` INNER JOIN `dt_righe_ddt` ON `dt_ddt`.`id`=`dt_righe_ddt`.`idddt` WHERE `original_document_type`='Modules\\Ordini\\Ordine' GROUP BY original_document_id) AS `ddt` ON `ddt`.`idddt`=`or_ordini`.`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` = 'Ordini cliente') AND `zz_operations`.`op` = 'send-email' GROUP BY id_record) AS email ON `email`.`id_record` = `or_ordini`.`id`
WHERE
1=1 |segment(`or_ordini`.`id_segment`)| AND `dir` = 'entrata' |date_period(`or_ordini`.`data`)|
HAVING
2=2
ORDER BY
`data` DESC,
CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini cliente';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine_lang`.`name`' WHERE `zz_modules`.`name` = 'Ordini cliente' AND `zz_views`.`name` = 'icon_title_Stato';

View File

@ -149,6 +149,7 @@ return [
'or_ordini',
'or_righe_ordini',
'or_statiordine',
'or_statiordine_lang',
'or_tipiordine',
'zz_api_resources',
'zz_cache',