'.tr('Pianificare interventi?').'
@@ -227,7 +213,7 @@ echo '
- '.tr('Pianifica').'
+ '.tr('Pianifica').'
';
@@ -300,11 +286,7 @@ echo '
});
- function refreshArticoli(id){
- $("#articoli").load("'.$plugin->fileurl('ajax_articoli.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$is_add.'");
- }
-
function refreshRighe(id){
- $("#righe").load("'.$plugin->fileurl('row-list.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$is_add.'");
+ $("#righe").load("'.$plugin->fileurl('row-list.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$block_edit.'");
}
';
diff --git a/plugins/pianificazione_interventi/row-add.php b/plugins/pianificazione_interventi/row-add.php
new file mode 100755
index 000000000..f19837be8
--- /dev/null
+++ b/plugins/pianificazione_interventi/row-add.php
@@ -0,0 +1,78 @@
+ 'manage_riga',
+ 'action' => 'add',
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale_imponibile' => $documento->totale_imponibile,
+ 'id_plugin' => $id_plugin, // Modificato
+];
+
+// Dati di default
+$result = [
+ 'descrizione' => '',
+ 'qta' => 1,
+ 'um' => '',
+ 'prezzo' => 0,
+ 'sconto_unitario' => 0,
+ 'tipo_sconto' => '',
+ 'idiva' => '',
+ 'idconto' => $idconto,
+ 'ritenuta_contributi' => true,
+];
+
+// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
+$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
+$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
+
+// Importazione della gestione dedicata
+$file = 'riga';
+if (get('is_descrizione') !== null) {
+ $file = 'descrizione';
+
+ $options['op'] = 'manage_descrizione';
+} elseif (get('is_articolo') !== null) {
+ $file = 'articolo';
+
+ // Aggiunta sconto di default da listino per le vendite
+ $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
+
+ if (!empty($listino['prc_guadagno'])) {
+ $result['sconto_percentuale'] = $listino['prc_guadagno'];
+ $result['tipo_sconto'] = 'PRC';
+ }
+
+ $options['op'] = 'manage_articolo';
+} elseif (get('is_sconto') !== null) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
+}
+
+// Modificato
+echo '
+
';
+
+echo App::load($file.'.php', $result, $options);
+
+echo '
+
+';
diff --git a/plugins/pianificazione_interventi/row-edit.php b/plugins/pianificazione_interventi/row-edit.php
new file mode 100755
index 000000000..9f10e5eee
--- /dev/null
+++ b/plugins/pianificazione_interventi/row-edit.php
@@ -0,0 +1,61 @@
+ 'manage_riga',
+ 'action' => 'edit',
+ 'dir' => $documento->direzione,
+ 'idanagrafica' => $documento['idanagrafica'],
+ 'totale_imponibile' => $documento->totale_imponibile,
+ 'id_plugin' => $id_plugin, // Modificato
+];
+
+// Dati della riga
+$id_riga = get('idriga');
+$type = get('type');
+$riga = $documento->getRiga($type, $id_riga);
+
+$result = $riga->toArray();
+$result['prezzo'] = $riga->prezzo_unitario;
+
+// Importazione della gestione dedicata
+$file = 'riga';
+if ($riga->isDescrizione()) {
+ $file = 'descrizione';
+
+ $options['op'] = 'manage_descrizione';
+} elseif ($riga->isArticolo()) {
+ $file = 'articolo';
+
+ $options['op'] = 'manage_articolo';
+} elseif ($riga->isSconto()) {
+ $file = 'sconto';
+
+ $options['op'] = 'manage_sconto';
+}
+
+// Modificato
+echo '
+
';
+
+echo App::load($file.'.php', $result, $options);
+
+echo '
+
+';
diff --git a/plugins/pianificazione_interventi/row-list.php b/plugins/pianificazione_interventi/row-list.php
new file mode 100755
index 000000000..84a27215f
--- /dev/null
+++ b/plugins/pianificazione_interventi/row-list.php
@@ -0,0 +1,172 @@
+getRighe();
+
+if (!$righe->isEmpty()) {
+ echo '
+
+
+
+ '.tr('Descrizione').'
+ '.tr('Q.tà').'
+ '.tr('Prezzo di acquisto').' ';
+
+ if ($show_prezzi) {
+ echo '
+ '.tr('Prezzo di vendita').'
+ '.tr('Iva').'
+ '.tr('Imponibile').' ';
+ }
+
+ if (!$block_edit) {
+ echo '
+ '.tr('#').' ';
+ }
+ echo '
+
+
+
+ ';
+
+ foreach ($righe as $riga) {
+ $r = $riga->toArray();
+
+ $extra = '';
+ $mancanti = $riga->isArticolo() ? $riga->missing_serials_number : 0;
+ if ($mancanti > 0) {
+ $extra = 'class="warning"';
+ }
+ $descrizione = (!empty($riga->articolo) ? $riga->articolo->codice.' - ' : '').$riga['descrizione'];
+
+ echo '
+
+
+ '.Modules::link($riga->isArticolo() ? Modules::get('Articoli')['id'] : null, $riga->isArticolo() ? $riga['idarticolo'] : null, $descrizione);
+
+ if ($riga->isArticolo()) {
+ if (!empty($mancanti)) {
+ echo '
+ '.tr('_NUM_ serial mancanti', [
+ '_NUM_' => $mancanti,
+ ]).' ';
+ }
+
+ $serials = $riga->serials;
+ if (!empty($serials)) {
+ echo '
+ '.tr('SN').': '.implode(', ', $serials);
+ }
+ }
+
+ echo '
+ ';
+
+ // Quantità
+ echo '
+
+ '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].'
+ ';
+
+ //Costo unitario
+ echo '
+
+ '.moneyFormat($riga->costo_unitario).'
+ ';
+
+ if ($show_prezzi) {
+ // Prezzo unitario
+ echo '
+
+ '.moneyFormat($riga->prezzo_unitario);
+
+ if (abs($r['sconto_unitario']) > 0) {
+ $text = $r['sconto_unitario'] > 0 ? tr('sconto _TOT_ _TYPE_') : tr('maggiorazione _TOT_ _TYPE_');
+
+ echo '
+ '.replace($text, [
+ '_TOT_' => Translator::numberToLocale(abs($r['sconto_unitario'])),
+ '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()),
+ ]).' ';
+ }
+
+ echo '
+ ';
+
+ echo '
+
+ '.moneyFormat($r['iva']).'
+ ';
+
+ // Prezzo di vendita
+ echo '
+
+ '.moneyFormat($riga->imponibile).'
+ ';
+ }
+
+ // Pulsante per riportare nel magazzino centrale.
+ // Visibile solo se l'intervento non è stato nè fatturato nè completato.
+ if (!$block_edit) {
+ echo '
+ ';
+
+ if ($r['abilita_serial']) {
+ echo '
+
+
+ ';
+ }
+
+ echo '
+
+
+
+
+
+
+
+ ';
+ }
+ echo '
+ ';
+ }
+
+ echo '
+
+
';
+} else {
+ echo '
+
'.tr('Nessuna riga presente').'.
';
+}
+
+?>
+
+
diff --git a/plugins/pianificazione_interventi/src/Components/Articolo.php b/plugins/pianificazione_interventi/src/Components/Articolo.php
new file mode 100755
index 000000000..5a4558ee8
--- /dev/null
+++ b/plugins/pianificazione_interventi/src/Components/Articolo.php
@@ -0,0 +1,39 @@
+contratto->tipo->dir;
+ }
+}
diff --git a/plugins/pianificazione_interventi/src/Components/Descrizione.php b/plugins/pianificazione_interventi/src/Components/Descrizione.php
new file mode 100755
index 000000000..e100513eb
--- /dev/null
+++ b/plugins/pianificazione_interventi/src/Components/Descrizione.php
@@ -0,0 +1,26 @@
+belongsTo(Promemoria::class, $this->getParentID());
+ }
+
+ public function contratto()
+ {
+ return $this->parent();
+ }
+
+ public function fixIvaIndetraibile()
+ {
+ }
+
+ public function getQtaEvasaAttribute()
+ {
+ return 0;
+ }
+
+ public function setQtaEvasaAttribute($value)
+ {
+ }
+
+ /**
+ * Effettua i conti per il subtotale della riga.
+ */
+ protected function fixSubtotale()
+ {
+ $this->fixIva();
+ }
+}
diff --git a/plugins/pianificazione_interventi/src/Components/Riga.php b/plugins/pianificazione_interventi/src/Components/Riga.php
new file mode 100755
index 000000000..5e50afd99
--- /dev/null
+++ b/plugins/pianificazione_interventi/src/Components/Riga.php
@@ -0,0 +1,26 @@
+contratto()->associate($contratto);
+ $model->tipo()->associate($tipo);
+
+ $model->data_richiesta = $data_richiesta;
+ $model->idsede = $contratto->idsede;
+
+ // Salvataggio delle informazioni
+ $model->save();
+
+ return $model;
+ }
+
+ public function getPluginAttribute()
+ {
+ return 'Pianificazione interventi';
+ }
+
+ public function getDirezioneAttribute()
+ {
+ return 'entrata';
+ }
+
+ public function pianifica(Intervento $intervento)
+ {
+ $this->intervento()->associate($intervento); // Collego l'intervento ai promemoria
+ $this->save();
+
+ // Copia delle righe
+ $righe = $this->getRighe();
+ foreach ($righe as $riga) {
+ $copia = $riga->copiaIn($intervento, $riga->qta);
+
+ if ($copia->isArticolo()) {
+ $copia->movimenta($copia->qta);
+ }
+ }
+
+ // Copia degli allegati
+ $allegati = $this->uploads();
+ foreach ($allegati as $allegato) {
+ $allegato->copia([
+ 'id_module' => $intervento->getModule()->id,
+ 'id_record' => $intervento->id,
+ ]);
+ }
+
+ // Collego gli impianti del promemoria all'intervento
+ $database = database();
+ if (!empty($this->idimpianti)) {
+ $impianti = explode(',', $this->idimpianti);
+ foreach ($impianti as $impianto) {
+ $database->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.prepare($intervento->id).', '.prepare($impianto).' )');
+ }
+ }
+ }
+
+ public function anagrafica()
+ {
+ return $this->contratto->anagrafica();
+ }
+
+ public function contratto()
+ {
+ return $this->belongsTo(Contratto::class, 'idcontratto');
+ }
+
+ public function intervento()
+ {
+ return $this->belongsTo(Intervento::class, 'idintervento');
+ }
+
+ public function tipo()
+ {
+ return $this->belongsTo(TipoSessione::class, 'idtipointervento');
+ }
+
+ public function articoli()
+ {
+ return $this->hasMany(Components\Articolo::class, 'id_promemoria');
+ }
+
+ public function righe()
+ {
+ return $this->hasMany(Components\Riga::class, 'id_promemoria');
+ }
+
+ public function sconti()
+ {
+ return $this->hasMany(Components\Sconto::class, 'id_promemoria');
+ }
+
+ public function descrizioni()
+ {
+ return $this->hasMany(Components\Descrizione::class, 'id_promemoria');
+ }
+}
diff --git a/src/App.php b/src/App.php
index cac9089b4..cbb360f4a 100755
--- a/src/App.php
+++ b/src/App.php
@@ -253,6 +253,7 @@ class App
$id_module = $module['id'];
$id_record = filter('id_record');
+ $id_plugin = $options['id_plugin'];
$directory = empty($directory) ? 'include|custom|/common/' : $directory;
diff --git a/update/2_4_14.sql b/update/2_4_14.sql
index 0d238329b..25cfe4f90 100755
--- a/update/2_4_14.sql
+++ b/update/2_4_14.sql
@@ -42,16 +42,11 @@ ALTER TABLE `in_righe_interventi` ADD `old_id` int(11);
INSERT INTO `in_righe_interventi` (`old_id`, `idarticolo`, `idintervento`, `is_descrizione`, `is_sconto`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto`) SELECT `id`, `idarticolo`, `idintervento`, `is_descrizione`, `is_sconto`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto` FROM `mg_articoli_interventi`;
-UPDATE `mg_prodotti` SET `id_riga_intervento` = (SELECT `id` FROM `in_righe_interventi` WHERE `in_righe_interventi`.`old_id` = `id_riga_intervento`) WHERE `id_riga_intervento` IS NOT NULL;
-ALTER TABLE `in_righe_interventi` DROP `old_id`;
+ALTER TABLE `co_promemoria_righe` ADD `abilita_serial` boolean NOT NULL DEFAULT '0' AFTER `um`, ADD `idimpianto` int(11), ADD `idarticolo` int(11), ADD FOREIGN KEY (`idarticolo`) REFERENCES `mg_articoli`(`id`) ON DELETE SET NULL, CHANGE `um` `um` varchar(25);
+ALTER TABLE `co_promemoria_righe` ADD `is_descrizione` TINYINT(1) DEFAULT FALSE NOT NULL, ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
+
+INSERT INTO `co_promemoria_righe` (`idarticolo`, `id_promemoria`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto`) SELECT `idarticolo`, `id_promemoria`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto` FROM `co_promemoria_articoli`;
-ALTER TABLE `in_righe_interventi` CHANGE `prezzo_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`,
- CHANGE `prezzo_vendita` `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`,
- ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`,
- ADD `prezzo_unitario_ivato` decimal(12,6) NOT NULL AFTER `iva_unitaria`,
- ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
- ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
- ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`;
ALTER TABLE `co_righe_documenti` CHANGE `prezzo_unitario_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`,
ADD `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`,
ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`,
@@ -87,38 +82,76 @@ ALTER TABLE `or_righe_ordini` CHANGE `prezzo_unitario_acquisto` `costo_unitario`
ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_percentuale`,
ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`;
+ALTER TABLE `in_righe_interventi` CHANGE `prezzo_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`,
+ CHANGE `prezzo_vendita` `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`,
+ ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`,
+ ADD `prezzo_unitario_ivato` decimal(12,6) NOT NULL AFTER `iva_unitaria`,
+ ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
+ ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
+ ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`;
+ALTER TABLE `co_promemoria_righe` CHANGE `prezzo_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`,
+ CHANGE `prezzo_vendita` `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`,
+ ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`,
+ ADD `prezzo_unitario_ivato` decimal(12,6) NOT NULL AFTER `iva_unitaria`,
+ ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
+ ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_unitario`,
+ ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`;
UPDATE `co_righe_documenti` SET `qta` = IF(`qta` = 0, 1, `qta`),
`prezzo_unitario` = `subtotale` / `qta`,
+ `iva_unitaria` = `iva` / `qta`,
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva`,
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
`sconto_unitario_ivato` = `sconto_unitario`;
UPDATE `co_righe_preventivi` SET `qta` = IF(`qta` = 0, 1, `qta`),
`prezzo_unitario` = `subtotale` / `qta`,
- `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`,
+ `iva_unitaria` = `iva` / `qta`,
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
`sconto_unitario_ivato` = `sconto_unitario`;
UPDATE `co_righe_contratti` SET `qta` = IF(`qta` = 0, 1, `qta`),
`prezzo_unitario` = `subtotale` / `qta`,
+ `iva_unitaria` = `iva` / `qta`,
`prezzo_unitario_ivato` = `prezzo_unitario` + `iva`,
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
`sconto_unitario_ivato` = `sconto_unitario`;
UPDATE `dt_righe_ddt` SET `qta` = IF(`qta` = 0, 1, `qta`),
`prezzo_unitario` = `subtotale` / `qta`,
- `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`,
+ `iva_unitaria` = `iva` / `qta`,
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
`sconto_unitario_ivato` = `sconto_unitario`;
UPDATE `or_righe_ordini` SET `qta` = IF(`qta` = 0, 1, `qta`),
`prezzo_unitario` = `subtotale` / `qta`,
- `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`,
+ `iva_unitaria` = `iva` / `qta`,
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
`sconto_unitario_ivato` = `sconto_unitario`,
`sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
`sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
`sconto_unitario_ivato` = `sconto_unitario`;
+UPDATE `in_righe_interventi` SET `qta` = IF(`qta` = 0, 1, `qta`),
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
+ `iva_unitaria` = `iva` / `qta`,
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
+ `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
+ `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
+ `sconto_unitario_ivato` = `sconto_unitario`;
+UPDATE `co_promemoria_righe` SET `qta` = IF(`qta` = 0, 1, `qta`),
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
+ `iva_unitaria` = `iva` / `qta`,
+ `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`,
+ `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0),
+ `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`),
+ `sconto_unitario_ivato` = `sconto_unitario`;
+
+ALTER TABLE `co_promemoria_righe` RENAME TO `co_righe_promemoria`;
+
+DROP TABLE `mg_articoli_interventi`;
+DROP TABLE `co_promemoria_articoli`;
-- Aggiunta supporto a prezzi ivati
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `updated_at`, `order`, `help`) VALUES (NULL, 'Utilizza prezzi di vendita con IVA incorporata', '0', 'boolean', '1', 'Fatturazione', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, 'Abilita la gestione degli importi ivati per i documenti di vendita.');