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 '