- {[ "type": "text", "label": "", "help": "Obbligatorio per valorizzare CIG/CUP. È possible inserire:
- N. determina
- RDO
- Ordine MEPA
"); ?>","name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20 ]}
+ {[ "type": "text", "label": "", "help": "Obbligatorio per valorizzare CIG/CUP. È possible inserire:
- N. determina
- RDO
- Ordine MEPA
'); ?>","name": "id_documento_fe", "required": 0, "value": "$id_documento_fe$", "maxlength": 20 ]}
diff --git a/modules/contratti/row-add.php b/modules/contratti/row-add.php
index ba4e6d7de..3b44b342f 100644
--- a/modules/contratti/row-add.php
+++ b/modules/contratti/row-add.php
@@ -32,7 +32,7 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
-if( $listino[0]['prc_guadagno'] > 0 ){
+if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
$result['tipo_sconto'] = 'PRC';
}
diff --git a/modules/contratti/src/Components/Articolo.php b/modules/contratti/src/Components/Articolo.php
new file mode 100644
index 000000000..718e14057
--- /dev/null
+++ b/modules/contratti/src/Components/Articolo.php
@@ -0,0 +1,58 @@
+contratto;
+ $tipo = $contratto->tipo;
+
+ $numero = $contratto->numero_esterno ?: $contratto->numero;
+ $data = $contratto->data;
+
+ $carico = ($tipo->dir == 'entrata') ? tr('Ripristino articolo da _TYPE_ _NUM_') : tr('Carico magazzino da _TYPE_ numero _NUM_');
+ $scarico = ($tipo->dir == 'entrata') ? tr('Scarico magazzino per _TYPE_ numero _NUM_') : tr('Rimozione articolo da _TYPE_ _NUM_');
+
+ $qta = ($tipo->dir == 'uscita') ? -$qta : $qta;
+ $movimento = ($qta < 0) ? $carico : $scarico;
+
+ $movimento = replace($movimento, [
+ '_TYPE_' => $tipo->descrizione,
+ '_NUM_' => $numero,
+ ]);
+
+ $this->articolo->movimenta(-$qta, $movimento, $data, false, [
+ 'iddocumento' => $contratto->id,
+ ]);
+ }
+
+ public function getDirection()
+ {
+ return $this->contratto->tipo->dir;
+ }
+}
diff --git a/modules/contratti/src/Components/Descrizione.php b/modules/contratti/src/Components/Descrizione.php
new file mode 100644
index 000000000..f5e83f131
--- /dev/null
+++ b/modules/contratti/src/Components/Descrizione.php
@@ -0,0 +1,27 @@
+belongsTo(Contratto::class, $this->getParentID());
+ }
+
+ public function contratto()
+ {
+ return $this->parent();
+ }
+}
diff --git a/modules/contratti/src/Components/Riga.php b/modules/contratti/src/Components/Riga.php
new file mode 100644
index 000000000..b9df4a0d2
--- /dev/null
+++ b/modules/contratti/src/Components/Riga.php
@@ -0,0 +1,27 @@
+scontoGlobale;
+
+ if ($model == null) {
+ $model = parent::build();
+
+ $model->setContratto($contratto);
+ }
+
+ return $model;
+ }
+}
diff --git a/modules/contratti/src/Contratto.php b/modules/contratti/src/Contratto.php
new file mode 100644
index 000000000..7072005a9
--- /dev/null
+++ b/modules/contratti/src/Contratto.php
@@ -0,0 +1,157 @@
+first();
+
+ $id_anagrafica = $anagrafica->id;
+ $id_agente = $anagrafica->idagente;
+
+ $id_pagamento = $anagrafica->idpagamento_vendite;
+ if (empty($id_pagamento)) {
+ $id_pagamento = setting('Tipo di pagamento predefinito');
+ }
+
+ $model->anagrafica()->associate($anagrafica);
+ $model->stato()->associate($stato_documento);
+
+ $model->numero = static::getNextNumero();
+
+ // Salvataggio delle informazioni
+ $model->nome = $nome;
+ $model->data_bozza = Carbon::now();
+
+ if (!empty($id_agente)) {
+ $model->idagente = $id_agente;
+ }
+
+ if (!empty($id_pagamento)) {
+ $model->idpagamento = $id_pagamento;
+ }
+
+ $model->save();
+
+ $model->fixTipiSessioni();
+
+ return $model;
+ }
+
+ public function fixTipiSessioni()
+ {
+ $database = database();
+ $database->query('DELETE FROM co_contratti_tipiintervento WHERE idcontratto = '.prepare($this->id));
+
+ // Aggiunta associazioni costi unitari al contratto
+ $tipi = TipoSessione::where('costo_orario', '<>', 0)
+ ->where('costo_km', '<>', 0)
+ ->where('costo_diritto_chiamata', '<>', 0)
+ ->get();
+
+ foreach ($tipi as $tipo) {
+ $database->insert('co_contratti_tipiintervento', [
+ 'idcontratto' => $this->id,
+ 'idtipointervento' => $tipo->id,
+ 'costo_ore' => $tipo->costo_orario,
+ 'costo_km' => $tipo->costo_km,
+ 'costo_dirittochiamata' => $tipo->costo_diritto_chiamata,
+ 'costo_ore_tecnico' => $tipo->costo_orario_tecnico,
+ 'costo_km_tecnico' => $tipo->costo_km_tecnico,
+ 'costo_dirittochiamata_tecnico' => $tipo->costo_diritto_chiamata_tecnico,
+ ]);
+ }
+ }
+
+ /**
+ * Restituisce il nome del modulo a cui l'oggetto è collegato.
+ *
+ * @return string
+ */
+ public function getModuleAttribute()
+ {
+ return 'Contratti';
+ }
+
+ public function updateSconto()
+ {
+ // Aggiornamento sconto
+ aggiorna_sconto([
+ 'parent' => 'co_preventivi',
+ 'row' => 'co_righe_preventivi',
+ ], [
+ 'parent' => 'id',
+ 'row' => 'idcontratto',
+ ], $this->id);
+ }
+
+ public function anagrafica()
+ {
+ return $this->belongsTo(Anagrafica::class, 'idanagrafica');
+ }
+
+ public function stato()
+ {
+ return $this->belongsTo(Stato::class, 'idstato');
+ }
+
+ public function articoli()
+ {
+ return $this->hasMany(Components\Articolo::class, 'idcontratto');
+ }
+
+ public function righe()
+ {
+ return $this->hasMany(Components\Riga::class, 'idcontratto');
+ }
+
+ public function descrizioni()
+ {
+ return $this->hasMany(Components\Descrizione::class, 'idcontratto');
+ }
+
+ public function scontoGlobale()
+ {
+ return $this->hasOne(Components\Sconto::class, 'idcontratto');
+ }
+
+ // Metodi statici
+
+ /**
+ * Calcola il nuovo numero di contratto.
+ *
+ * @return string
+ */
+ public static function getNextNumero()
+ {
+ $maschera = setting('Formato codice contratti');
+
+ $ultimo = Generator::getPreviousFrom($maschera, 'co_contratti', 'numero');
+ $numero = Generator::generate($maschera, $ultimo);
+
+ return $numero;
+ }
+}
diff --git a/modules/contratti/src/Stato.php b/modules/contratti/src/Stato.php
new file mode 100644
index 000000000..68998fb54
--- /dev/null
+++ b/modules/contratti/src/Stato.php
@@ -0,0 +1,15 @@
+hasMany(Contratto::class, 'idstato');
+ }
+}
diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php
index c8fdf9aff..33278ae23 100644
--- a/modules/ddt/actions.php
+++ b/modules/ddt/actions.php
@@ -31,7 +31,7 @@ switch (post('op')) {
flash()->info(tr('Aggiunto ddt in _TYPE_ numero _NUM_!', [
'_TYPE_' => $dir,
- '_NUM_' => $numero,
+ '_NUM_' => $ddt->numero,
]));
break;
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php
index c1d4549fb..c12440076 100644
--- a/modules/ddt/edit.php
+++ b/modules/ddt/edit.php
@@ -116,7 +116,7 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
- {[ "type": "select", "label": "", "name": "idporto", "placeholder": "-", "help": "
Franco: pagamento del trasporto a carico del mittente Assegnato pagamento del trasporto a carico del destinatario "); ?>", "values": "query=SELECT id, descrizione FROM dt_porto ORDER BY descrizione ASC", "value": "$idporto$", "readonly": "" ]}
+ {[ "type": "select", "label": "", "name": "idporto", "placeholder": "-", "help": "Franco: pagamento del trasporto a carico del mittente Assegnato pagamento del trasporto a carico del destinatario '); ?>", "values": "query=SELECT id, descrizione FROM dt_porto ORDER BY descrizione ASC", "value": "$idporto$", "readonly": "" ]}
diff --git a/modules/ddt/row-add.php b/modules/ddt/row-add.php
index 729e932b1..8ec671dbb 100644
--- a/modules/ddt/row-add.php
+++ b/modules/ddt/row-add.php
@@ -38,7 +38,7 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
-if( $listino[0]['prc_guadagno'] > 0 ){
+if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
$result['tipo_sconto'] = 'PRC';
}
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php
index 184612ad7..4405199b9 100644
--- a/modules/fatture/edit.php
+++ b/modules/fatture/edit.php
@@ -520,7 +520,7 @@ include $docroot.'/modules/fatture/row-list.php';
'.tr('Per allegare un documento alla fattura elettronica caricare il file specificando come categoria "Fattura Elettronica"').'.
';
}
?>
diff --git a/modules/fatture/row-add.php b/modules/fatture/row-add.php
index 11cc5a471..1157cf24e 100644
--- a/modules/fatture/row-add.php
+++ b/modules/fatture/row-add.php
@@ -47,7 +47,7 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
-if( $listino[0]['prc_guadagno'] > 0 ){
+if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
$result['tipo_sconto'] = 'PRC';
}
diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php
index 1e37e9f14..73c7bc340 100644
--- a/modules/ordini/actions.php
+++ b/modules/ordini/actions.php
@@ -32,7 +32,7 @@ switch (post('op')) {
$id_record = $ordine->id;
flash()->info(tr('Aggiunto ordine numero _NUM_!', [
- '_NUM_' => $numero,
+ '_NUM_' => $ordine->numero,
]));
break;
diff --git a/modules/ordini/row-add.php b/modules/ordini/row-add.php
index f4bc2ead3..2271c8b2a 100644
--- a/modules/ordini/row-add.php
+++ b/modules/ordini/row-add.php
@@ -38,7 +38,7 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
-if( $listino[0]['prc_guadagno'] > 0 ){
+if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
$result['tipo_sconto'] = 'PRC';
}
diff --git a/modules/preventivi/row-add.php b/modules/preventivi/row-add.php
index 6be4e597a..a685a58a0 100644
--- a/modules/preventivi/row-add.php
+++ b/modules/preventivi/row-add.php
@@ -32,7 +32,7 @@ $result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
// Aggiunta sconto di default da listino per le vendite
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
-if( $listino[0]['prc_guadagno'] > 0 ){
+if ($listino[0]['prc_guadagno'] > 0) {
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
$result['tipo_sconto'] = 'PRC';
}
diff --git a/modules/tecnici_tariffe/edit.php b/modules/tecnici_tariffe/edit.php
index bb33e3334..e6840e75e 100644
--- a/modules/tecnici_tariffe/edit.php
+++ b/modules/tecnici_tariffe/edit.php
@@ -23,13 +23,13 @@ if (!empty($tecnici)) {
'.$tecnico['ragione_sociale'].' |
'.tr('Attività').' |
- '.tr('Addebito orario').' |
- '.tr('Addebito km').' |
- '.tr('Addebito diritto ch.').' |
+ '.tr('Addebito orario').' |
+ '.tr('Addebito km').' |
+ '.tr('Addebito diritto ch.').' |
- '.tr('Costo orario').' |
- '.tr('Costo km').' |
- '.tr('Costo diritto ch.').' |
+ '.tr('Costo orario').' |
+ '.tr('Costo km').' |
+ '.tr('Costo diritto ch.').' |
|
';
diff --git a/plugins/exportFE/edit.php b/plugins/exportFE/edit.php
index cc707b054..18ac02db6 100644
--- a/plugins/exportFE/edit.php
+++ b/plugins/exportFE/edit.php
@@ -141,17 +141,19 @@ echo '
'.tr('Scarica').'
';
+ $file = $generated ? Models\Upload::where('filename', $fattura_pa->getFilename())->where('id_record', $id_record)->first() : null;
+
echo '
-
+
'.tr('Visualizza').'
';
- $send = Interaction::isEnabled() && $generated && $record['codice_stato_fe'] == 'GEN';
+$send = Interaction::isEnabled() && $generated && $record['codice_stato_fe'] == 'GEN';
- echo '
+echo '
diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php
index 87effbb8b..5460c0ec3 100644
--- a/plugins/exportFE/src/FatturaElettronica.php
+++ b/plugins/exportFE/src/FatturaElettronica.php
@@ -465,9 +465,10 @@ class FatturaElettronica
if (!empty($anagrafica['provincia']) && $anagrafica->nazione->iso2 == 'IT') {
$result['Provincia'] = strtoupper($anagrafica['provincia']);
}
-
- if (!empty($anagrafica->nazione->iso2))
- $result['Nazione'] = $anagrafica->nazione->iso2;
+
+ if (!empty($anagrafica->nazione->iso2)) {
+ $result['Nazione'] = $anagrafica->nazione->iso2;
+ }
return $result;
}
diff --git a/plugins/exportFE/view.php b/plugins/exportFE/view.php
deleted file mode 100644
index ae8922eb7..000000000
--- a/plugins/exportFE/view.php
+++ /dev/null
@@ -1,17 +0,0 @@
-loadXML($fattura_pa->toXML());
-
-// XSL
-$xsl = new DOMDocument();
-$xsl->load(__DIR__.'/src/stylesheet-1.2.1.xsl');
-
-// XSLT
-$xslt = new XSLTProcessor();
-$xslt->importStylesheet($xsl);
-
-echo $xslt->transformToXML($xml);
diff --git a/src/Extensions/MessageHandler.php b/src/Extensions/MessageHandler.php
index 44d0318da..0ca6ccebd 100644
--- a/src/Extensions/MessageHandler.php
+++ b/src/Extensions/MessageHandler.php
@@ -13,7 +13,7 @@ class MessageHandler extends AbstractProcessingHandler
{
protected function write(array $record)
{
- if (isAjaxRequest()) {
+ if (\Whoops\Util\Misc::isAjaxRequest()) {
return;
}
diff --git a/src/HTMLBuilder/HTMLBuilder.php b/src/HTMLBuilder/HTMLBuilder.php
index 04d900d8e..275a2e197 100644
--- a/src/HTMLBuilder/HTMLBuilder.php
+++ b/src/HTMLBuilder/HTMLBuilder.php
@@ -106,7 +106,18 @@ class HTMLBuilder
$json = self::decode($value, 'manager');
$class = self::getManager($json['name']);
- $result = !empty($class) ? $class->manage($json) : '';
+ $result = '';
+ try {
+ $result = !empty($class) ? $class->manage($json) : '';
+ } catch (\Exception $exception) {
+ logger()->error($exception->getMessage(), [
+ 'code' => $exception->getCode(),
+ 'message' => $exception->getMessage(),
+ 'file' => $exception->getFile(),
+ 'line' => $exception->getLine(),
+ 'trace' => $exception->getTraceAsString(),
+ ]);
+ }
// Ricorsione
if ($depth < self::$max_recursion) {
@@ -121,7 +132,19 @@ class HTMLBuilder
foreach ($handlers[0] as $value) {
$json = self::decode($value, 'handler');
- $result = self::generate($json);
+
+ $result = null;
+ try {
+ $result = self::generate($json);
+ } catch (\Exception $exception) {
+ logger()->error($exception->getMessage(), [
+ 'code' => $exception->getCode(),
+ 'message' => $exception->getMessage(),
+ 'file' => $exception->getFile(),
+ 'line' => $exception->getLine(),
+ 'trace' => $exception->getTraceAsString(),
+ ]);
+ }
// Ricorsione
if ($depth < self::$max_recursion) {
diff --git a/src/HTMLBuilder/Manager/FileManager.php b/src/HTMLBuilder/Manager/FileManager.php
index 68227b6ef..179897476 100644
--- a/src/HTMLBuilder/Manager/FileManager.php
+++ b/src/HTMLBuilder/Manager/FileManager.php
@@ -2,6 +2,8 @@
namespace HTMLBuilder\Manager;
+use Models\Upload;
+
/**
* Gestione allegati.
*
@@ -77,13 +79,14 @@ class FileManager implements ManagerInterface
';
foreach ($rs as $r) {
- $extension = pathinfo($r['original'])['extension'];
+ $file = Upload::find($r['id']);
+
$result .= '
'.$r['name'].'
- ('.$extension.')'.'
+ ('.$file->extension.')'.'
|
'.\Translator::timestampToLocale($r['created_at']).' |
@@ -92,31 +95,11 @@ class FileManager implements ManagerInterface
';
// Anteprime supportate dal browser
- $supported_extensions = ['pdf', 'jpg', 'png', 'gif', 'jpeg', 'bmp'];
- if (in_array(strtolower($extension), $supported_extensions)) {
- $result .= "
- ";
-
- if ($extension == 'pdf') {
- $result .= '
- ';
- } else {
- $result .= '
- ';
- }
-
+ if ($file->hasPreview()) {
$result .= '
- ';
-
- $result .= '
- |