Skip to content

Commit 95a57c5

Browse files
feat: gestione ddt di rientro
1 parent ef32124 commit 95a57c5

7 files changed

Lines changed: 131 additions & 15 deletions

File tree

modules/ddt/actions.php

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,5 +857,72 @@
857857
flash()->warning(tr('Nessuna aliquota IVA modificata!'));
858858
}
859859

860+
break;
861+
862+
case 'add_ddt_rientrato':
863+
$class = post('class');
864+
$id_documento = post('id_documento');
865+
866+
// Individuazione del documento originale
867+
if (!is_subclass_of($class, Common\Document::class)) {
868+
return;
869+
}
870+
$documento = $class::find($id_documento);
871+
872+
$tipo = Tipo::where('dir', '!=', $documento->direzione)->first();
873+
$stato = Stato::where('name', 'Evaso')->first()->id;
874+
875+
// Duplicazione documento
876+
$id_segment = post('id_segment');
877+
if (get('id_segment')) {
878+
$id_segment = get('id_segment');
879+
}
880+
881+
if (post('create_document') == 'on') {
882+
$ddt = DDT::build($documento->anagrafica, $tipo, $documento->data, $id_segment);
883+
$ddt->stato()->associate($stato);
884+
$ddt->idcausalet = post('id_causale_trasporto');
885+
$ddt->idpagamento = $documento->idpagamento;
886+
$ddt->idsede_partenza = $documento->idsede_destinazione;
887+
$ddt->idsede_destinazione = $documento->idsede_partenza;
888+
$ddt->save();
889+
890+
$id_record = $ddt->id;
891+
}
892+
893+
$evadi_qta_parent = true;
894+
$righe = $documento->getRighe();
895+
foreach ($righe as $riga) {
896+
if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) {
897+
$qta = post('qta_da_evadere')[$riga->id];
898+
899+
$copia = $riga->copiaIn($ddt, $qta, $evadi_qta_parent);
900+
$id_iva = ($ddt->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
901+
$copia->setPrezzoUnitario(0, $id_iva);
902+
903+
// Aggiornamento seriali dalla riga dell'ordine
904+
if ($copia->isArticolo()) {
905+
$serials = is_array(post('serial')[$riga->id]) ? post('serial')[$riga->id] : [];
906+
$copia->serials = $serials;
907+
}
908+
909+
$copia->save();
910+
}
911+
}
912+
913+
// Modifica finale dello stato
914+
if (post('create_document') == 'on') {
915+
$ddt->idstatoddt = post('id_stato');
916+
$ddt->save();
917+
}
918+
919+
ricalcola_costiagg_ddt($id_record);
920+
921+
// Messaggio informativo
922+
$message = tr('_DOC_ aggiunto!', [
923+
'_DOC_' => $ddt->getReference(),
924+
]);
925+
flash()->info($message);
926+
860927
break;
861928
}

modules/ddt/buttons.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,22 @@
1919
*/
2020

2121
use Models\Module;
22+
use Modules\DDT\Causale;
2223

2324
include_once __DIR__.'/../../core.php';
2425

2526
$id_module_collegamento = $ddt->direzione == 'entrata' ? Module::where('name', 'Ddt in entrata')->first()->id : Module::where('name', 'Ddt in uscita')->first()->id;
2627

28+
$causale = Causale::find($ddt->idcausalet);
29+
if ($causale->is_rientrabile && $ddt->direzione == 'entrata') {
30+
echo '
31+
<div class="tip" data-widget="tooltip" title="'.tr("Questo è un DDT rientrabile: per completare la movimentazione, è necessario generare un DDT in entrata tramite questo pulsante").'.">
32+
<button class="btn btn-warning '.($ddt->isImportabile() ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-widget="modal" data-title="'.tr('Crea ddt in entrata').'">
33+
<i class="fa fa-truck"></i> '.tr('Crea ddt di rientro').'
34+
</button>
35+
</div>';
36+
}
37+
2738
// Informazioni sui movimenti interni
2839
if (!empty($ddt->id_ddt_trasporto_interno)) {
2940
echo '

modules/ddt/crea_documento.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,27 @@
2525
use Modules\Fatture\Fattura;
2626

2727
$documento = DDT::find($id_record);
28-
$tipo_documento_finale = Fattura::class;
29-
3028
$module = Module::find($id_module);
3129

32-
if ($module->name == 'Ddt in uscita') {
30+
if (get('documento') == 'ddt') {
31+
$final_module = 'Ddt in entrata';
32+
$dir = 'uscita';
33+
$op = 'add_ddt_rientrato';
34+
$tipo_documento_finale = DDT::class;
35+
} elseif ($module->name == 'Ddt in uscita') {
3336
$final_module = 'Fatture di vendita';
3437
$dir = 'entrata';
38+
$op = 'add_documento';
39+
$tipo_documento_finale = Fattura::class;
3540
} else {
3641
$final_module = 'Fatture di acquisto';
3742
$dir = 'uscita';
43+
$op = 'add_documento';
44+
$tipo_documento_finale = Fattura::class;
3845
}
3946

4047
$options = [
41-
'op' => 'add_documento',
48+
'op' => $op,
4249
'type' => 'ddt',
4350
'module' => $final_module,
4451
'serials' => true,

modules/ddt/init.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,28 @@
104104
GROUP BY
105105
id
106106
107+
UNION
108+
109+
SELECT
110+
`dt_ddt`.`id`,
111+
`dt_ddt`.`data`,
112+
`dt_ddt`.`numero`,
113+
`dt_ddt`.`numero_esterno`,
114+
`dt_tipiddt_lang`.`title` AS tipo_documento,
115+
IF(`dt_tipiddt`.`dir` = \'entrata\', \'Ddt in uscita\', \'Ddt in entrata\') AS modulo,
116+
GROUP_CONCAT(CONCAT(`original_id`, " - ", `qta`) SEPARATOR ", ") AS righe,
117+
`dt_statiddt_lang`.`title` AS stato_documento
118+
FROM
119+
`dt_ddt`
120+
JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
121+
INNER JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
122+
LEFT JOIN `dt_tipiddt_lang` ON (`dt_tipiddt_lang`.`id_record` = `dt_tipiddt`.`id` AND `dt_tipiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
123+
LEFT JOIN dt_statiddt ON dt_ddt.idstatoddt=dt_statiddt.id LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
124+
WHERE
125+
(`dt_righe_ddt`.`original_document_id` = '.prepare($id_record).' AND `dt_righe_ddt`.`original_document_type` = \'Modules\\\\DDT\\\\DDT\')
126+
GROUP BY
127+
id
128+
107129
ORDER BY `modulo`');
108130

109131
$is_anagrafica_deleted = !$ddt->anagrafica;

modules/ddt/row-list.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
$evasione_bar = [
3131
'Fatture di vendita' => 'success',
3232
'Interventi' => 'warning',
33+
'Ddt in entrata' => 'info',
34+
'Ddt in uscita' => 'info',
3335
];
3436

3537
echo '
@@ -469,6 +471,10 @@
469471
<span class="pull-left icon" style="background-color:#ffc107;"></span>
470472
<span class="text">&nbsp;'.tr('Attività').'</span>
471473
</div>
474+
<div class="col-md-2">
475+
<span class="pull-left icon" style="background-color:#17a2b8;"></span>
476+
<span class="text">&nbsp;'.tr('DDT').'</span>
477+
</div>
472478
</div>
473479
</div>
474480

update/2_10.sql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- Aggiunta vista per le newsletter
2+
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Anagrafiche';
3+
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `avg`, `default`) VALUES
4+
(@id_module, 'Opt-in newsletter', 'IF(an_anagrafiche.enable_newsletter=1,\'SI\',\'NO\')', '20', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '1');
5+
6+
SELECT @id_record := `id` FROM `zz_views` WHERE `id_module` = @id_module AND `name` = 'Opt-in newsletter';
7+
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
8+
(1, @id_record, 'Opt-in newsletter'),
9+
(2, @id_record, 'Opt-in newsletter');
10+
11+
-- Aggiornamento flag Rientrabile
12+
UPDATE `dt_causalet` SET `is_rientrabile` = '1' WHERE `dt_causalet`.`name` = 'Conto lavorazione';
13+
UPDATE `dt_causalet` SET `is_rientrabile` = '1' WHERE `dt_causalet`.`name` = 'Conto visione';

update/2_9_2.sql

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,2 @@
11
-- fix permessi otp token
2-
ALTER TABLE `zz_otp_tokens` CHANGE `permessi` `permessi` ENUM('r','rw','ra','rwa') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL;
3-
4-
-- Aggiunta vista per le newslette
5-
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Anagrafiche';
6-
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `avg`, `default`) VALUES
7-
(@id_module, 'Opt-in newsletter', 'IF(an_anagrafiche.enable_newsletter=1,\'SI\',\'NO\')', '20', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '1');
8-
9-
SELECT @id_record := `id` FROM `zz_views` WHERE `id_module` = @id_module AND `name` = 'Opt-in newsletter';
10-
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
11-
(1, @id_record, 'Opt-in newsletter'),
12-
(2, @id_record, 'Opt-in newsletter');
2+
ALTER TABLE `zz_otp_tokens` CHANGE `permessi` `permessi` ENUM('r','rw','ra','rwa') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL;

0 commit comments

Comments
 (0)