diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 523769b80..30801035d 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -2,9 +2,12 @@ include_once __DIR__.'/../../core.php'; +use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\Interventi\Components\Articolo; use Modules\Interventi\Intervento; +use Modules\Interventi\Stato; +use Modules\Interventi\TipoSessione; switch (post('op')) { case 'update': @@ -100,18 +103,19 @@ switch (post('op')) { case 'add': if (post('id_intervento') == null) { - $formato = setting('Formato codice intervento'); - $template = str_replace('#', '%', $formato); + $idanagrafica = post('idanagrafica'); + $idtipointervento = post('idtipointervento'); + $idstatointervento = post('idstatointervento'); + $data_richiesta = post('data_richiesta'); - $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare(Util\Generator::complete($template)).' ORDER BY codice DESC LIMIT 0,1'); - if (!empty($rs[0]['codice'])) { - $codice = Util\Generator::generate($formato, $rs[0]['codice']); - } + $anagrafica = Anagrafica::find($idanagrafica); + $tipo = TipoSessione::find($idtipointervento); + $stato = Stato::find($idstatointervento); - if (empty($codice)) { - $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare(Util\Generator::complete($template)).' ORDER BY codice DESC LIMIT 0,1'); - $codice = Util\Generator::generate($formato, $rs[0]['codice']); - } + $intervento = Intervento::build($anagrafica, $tipo, $stato, $data_richiesta); + $id_record = $intervento->id; + + flash()->info(tr('Aggiunto nuovo intervento!')); // Informazioni di base $idpreventivo = post('idpreventivo'); @@ -119,31 +123,20 @@ switch (post('op')) { $idcontratto_riga = post('idcontratto_riga'); $idtipointervento = post('idtipointervento'); $idsede = post('idsede'); - $data_richiesta = post('data_richiesta'); $richiesta = post('richiesta'); $idautomezzo = null; - if (!empty($codice) && !empty(post('idanagrafica')) && !empty(post('idtipointervento'))) { - // Salvataggio modifiche intervento - $dbo->insert('in_interventi', [ - 'idanagrafica' => post('idanagrafica'), - 'idclientefinale' => post('idclientefinale') ?: 0, - 'idstatointervento' => post('idstatointervento'), - 'idtipointervento' => $idtipointervento, - 'idsede' => $idsede ?: 0, - 'idautomezzo' => $idautomezzo ?: 0, - 'id_preventivo' => $idpreventivo, - - 'codice' => $codice, - 'data_richiesta' => $data_richiesta, - 'richiesta' => $richiesta, - ]); - - $id_record = $dbo->lastInsertedID(); - - flash()->info(tr('Aggiunto nuovo intervento!')); + if (post('idclientefinale')) { + $intervento->idclientefinale = post('idclientefinale'); } + if (post('idsede')) { + $intervento->idsede = post('idsede'); + } + + $intervento->id_preventivo = post('$idpreventivo'); + $intervento->richiesta = post('richiesta'); + // Collego l'intervento al contratto if (!empty($idcontratto)) { $array = [ diff --git a/modules/interventi/add.php b/modules/interventi/add.php index a967c0917..ac3fe410d 100644 --- a/modules/interventi/add.php +++ b/modules/interventi/add.php @@ -8,18 +8,7 @@ unset($_SESSION['superselect']['idsede']); unset($_SESSION['superselect']['non_fatturato']); // Calcolo del nuovo codice -$idintervento_template = setting('Formato codice intervento'); -$idintervento_template = str_replace('#', '%', $idintervento_template); - -$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare(Util\Generator::complete($idintervento_template)).' ORDER BY codice DESC LIMIT 0,1'); -if (!empty($rs[0]['codice'])) { - $new_codice = Util\Generator::generate(setting('Formato codice intervento'), $rs[0]['codice']); -} - -if (empty($new_codice)) { - $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare(Util\Generator::complete($idintervento_template)).' ORDER BY codice DESC LIMIT 0,1'); - $new_codice = Util\Generator::generate(setting('Formato codice intervento'), $rs[0]['codice']); -} +$new_codice = \Modules\Interventi\Intervento::getNextCodice(); // Se ho passato l'idanagrafica, carico il tipo di intervento di default $idanagrafica = filter('idanagrafica'); diff --git a/modules/interventi/src/Components/Articolo.php b/modules/interventi/src/Components/Articolo.php index a9b162bed..51440faea 100644 --- a/modules/interventi/src/Components/Articolo.php +++ b/modules/interventi/src/Components/Articolo.php @@ -88,26 +88,4 @@ class Articolo extends Article { return 'entrata'; } - - /** - * Effettua i conti per l'IVA indetraibile. - */ - public function fixIvaIndetraibile() - { - } - - public function getSubtotaleAttribute() - { - return $this->prezzo_vendita * $this->qta; - } - - /** - * Effettua i conti per il subtotale della riga. - */ - protected function fixSubtotale() - { - $this->prezzo_vendita = $this->prezzo_unitario_vendita; - - $this->fixIva(); - } } diff --git a/modules/interventi/src/Components/RelationTrait.php b/modules/interventi/src/Components/RelationTrait.php index b8784725c..3c5694b44 100644 --- a/modules/interventi/src/Components/RelationTrait.php +++ b/modules/interventi/src/Components/RelationTrait.php @@ -20,4 +20,31 @@ trait RelationTrait { return $this->parent(); } + + public function fixIvaIndetraibile() + { + } + + public function fixRivalsaINPS() + { + } + + public function fixRitenutaAcconto() + { + } + + public function getSubtotaleAttribute() + { + return $this->prezzo_vendita * $this->qta; + } + + /** + * Effettua i conti per il subtotale della riga. + */ + protected function fixSubtotale() + { + $this->prezzo_vendita = $this->prezzo_unitario_vendita; + + $this->fixIva(); + } } diff --git a/modules/interventi/src/Intervento.php b/modules/interventi/src/Intervento.php index 97ae51ecf..5f90f09ce 100644 --- a/modules/interventi/src/Intervento.php +++ b/modules/interventi/src/Intervento.php @@ -6,21 +6,59 @@ use Common\Document; use Modules\Anagrafiche\Anagrafica; use Modules\Interventi\Components\Articolo; use Modules\Interventi\Components\Riga; +use Modules\Preventivi\Preventivo; +use Util\Generator; class Intervento extends Document { protected $table = 'in_interventi'; + /** + * Crea un nuovo preventivo. + * + * @param Anagrafica $anagrafica + * @param TipoSessione $tipo_sessione + * @param Stato $stato + * @param string $data_richiesta + * + * @return self + */ + public static function build(Anagrafica $anagrafica, TipoSessione $tipo_sessione, Stato $stato, $data_richiesta) + { + $model = parent::build(); + + $model->anagrafica()->associate($anagrafica); + $model->stato()->associate($stato); + $model->tipoSessione()->associate($tipo_sessione); + + $model->codice = static::getNextCodice(); + $model->data_richiesta = $data_richiesta; + + $model->save(); + + return $model; + } + public function anagrafica() { return $this->belongsTo(Anagrafica::class, 'idanagrafica'); } + public function preventivo() + { + return $this->hasOne(Preventivo::class, 'id_preventivo'); + } + public function stato() { return $this->belongsTo(Stato::class, 'idstatointervento'); } + public function tipoSessione() + { + return $this->belongsTo(TipoSessione::class, 'idtipointervento'); + } + public function articoli() { return $this->hasMany(Articolo::class, 'idintervento'); @@ -40,4 +78,21 @@ class Intervento extends Document { return null; } + + // Metodi statici + + /** + * Calcola il nuovo codice di intervento. + * + * @return string + */ + public static function getNextCodice() + { + $maschera = setting('Formato codice intervento'); + + $ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice'); + $numero = Generator::generate($maschera, $ultimo); + + return $numero; + } } diff --git a/modules/interventi/src/Stato.php b/modules/interventi/src/Stato.php index bf8221865..91185ed20 100644 --- a/modules/interventi/src/Stato.php +++ b/modules/interventi/src/Stato.php @@ -6,10 +6,11 @@ use Common\Model; class Stato extends Model { + public $primaryKey = 'idstatointervento'; protected $table = 'in_statiintervento'; public function interventi() { - return $this->hasMany(Ordine::class, 'idstatointervento'); + return $this->hasMany(Intervento::class, 'idstatointervento'); } } diff --git a/modules/interventi/src/TipoSessione.php b/modules/interventi/src/TipoSessione.php index 2ac51db75..8fa194118 100644 --- a/modules/interventi/src/TipoSessione.php +++ b/modules/interventi/src/TipoSessione.php @@ -24,4 +24,9 @@ class TipoSessione extends Model { return $this->hasMany(Preventivo::class, 'idtipointervento'); } + + public function interventi() + { + return $this->hasMany(Intervento::class, 'idtipointervento'); + } } diff --git a/modules/preventivi/src/Preventivo.php b/modules/preventivi/src/Preventivo.php index 6b1403639..922c9cc5b 100644 --- a/modules/preventivi/src/Preventivo.php +++ b/modules/preventivi/src/Preventivo.php @@ -18,9 +18,9 @@ class Preventivo extends Document /** * Crea un nuovo preventivo. * - * @param Anagrafica $anagrafica - * @param TipoIntervento $tipo_sessione - * @param string $nome + * @param Anagrafica $anagrafica + * @param TipoSessione $tipo_sessione + * @param string $nome * * @return self */ diff --git a/plugins/pianificazione_interventi/actions.php b/plugins/pianificazione_interventi/actions.php index 8eec88772..347718b59 100644 --- a/plugins/pianificazione_interventi/actions.php +++ b/plugins/pianificazione_interventi/actions.php @@ -144,19 +144,7 @@ switch (filter('op')) { // intervento sempre nello stato "In programmazione" $idstatointervento = 'WIP'; - // calcolo codice intervento - $formato = setting('Formato codice intervento'); - $template = str_replace('#', '%', $formato); - - $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); - if (!empty($rs[0]['codice'])) { - $codice = Util\Generator::generate($formato, $rs[0]['codice']); - } - - if (empty($codice)) { - $rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); - $codice = Util\Generator::generate($formato, $rs[0]['codice']); - } + $codice = \Modules\Interventi\Intervento::getNextCodice(); // Creo intervento $dbo->insert('in_interventi', [ diff --git a/src/Extensions/MessageHandler.php b/src/Extensions/MessageHandler.php index 0d0f26e76..348b7ba50 100644 --- a/src/Extensions/MessageHandler.php +++ b/src/Extensions/MessageHandler.php @@ -13,15 +13,19 @@ class MessageHandler extends AbstractProcessingHandler { protected function write(array $record) { - $message = tr("Si è verificato un'errore").'.'; + $message = tr("Si è verificato un'errore").' [uid: '.$record['extra']['uid'].'].'; if (auth()->check()) { $message .= ' - '.tr('Se il problema persiste siete pregati di chiedere assistenza tramite la sezione Bug').'. + '.tr('Se il problema persiste siete pregati di chiedere assistenza tramite la sezione Bug').'. '; + + if (auth()->isAdmin()) { + $message .= '
'.$record['message'].''; + } } - //flash()->error($message); + flash()->error($message); echo '