Aggiunta azione di gruppo Rinnova contratti

This commit is contained in:
MatteoPistorello 2021-12-21 15:51:40 +01:00
parent 670853e9f7
commit 2faf0cc1cf
2 changed files with 111 additions and 2 deletions

View File

@ -19,11 +19,14 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
use Carbon\Carbon;
use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Contratti\Contratto; use Modules\Contratti\Contratto;
use Modules\Contratti\Stato as StatoContratto;
use Modules\Fatture\Fattura; use Modules\Fatture\Fattura;
use Modules\Fatture\Stato; use Modules\Fatture\Stato;
use Modules\Fatture\Tipo; use Modules\Fatture\Tipo;
use Plugins\PianificazioneInterventi\Promemoria;
$module_fatture = 'Fatture di vendita'; $module_fatture = 'Fatture di vendita';
@ -39,6 +42,7 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
'predefined' => 1, 'predefined' => 1,
'dir' => 'entrata', 'dir' => 'entrata',
])['id']; ])['id'];
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili'];
switch (post('op')) { switch (post('op')) {
case 'crea_fattura': case 'crea_fattura':
@ -115,7 +119,101 @@ switch (post('op')) {
} }
if ($numero_totale > 0) { if ($numero_totale > 0) {
flash()->info(tr('_NUM_ contratto fatturati!', [ flash()->info(tr('_NUM_ contratti fatturati!', [
'_NUM_' => $numero_totale,
]));
} else {
flash()->warning(tr('Nessun contratto fatturato!'));
}
break;
case 'renew_contratto':
$numero_totale = 0;
// Lettura righe selezionate
foreach ($id_records as $id) {
$contratto = Contratto::find($id);
$rinnova = !empty($contratto->data_accettazione) && !empty($contratto->data_conclusione) && $contratto->data_accettazione != '0000-00-00' && $contratto->data_conclusione != '0000-00-00' && $contratto->stato->is_pianificabile && $contratto->rinnovabile;
if($rinnova) {
$diff = $contratto->data_conclusione->diffAsCarbonInterval($contratto->data_accettazione);
$new_contratto = $contratto->replicate();
$new_contratto->numero = Contratto::getNextNumero();
$new_contratto->idcontratto_prev = $contratto->id;
$new_contratto->data_accettazione = $contratto->data_conclusione->copy()->addDays(1);
$new_contratto->data_conclusione = $new_contratto->data_accettazione->copy()->add($diff);
$new_contratto->data_bozza = Carbon::now();
$stato = StatoContratto::where('descrizione', '=', 'Bozza')->first();
$new_contratto->stato()->associate($stato);
$new_contratto->save();
$new_idcontratto = $new_contratto->id;
// Correzioni dei prezzi per gli interventi
$dbo->query('DELETE FROM co_contratti_tipiintervento WHERE idcontratto='.prepare($new_idcontratto));
$dbo->query('INSERT INTO co_contratti_tipiintervento(idcontratto, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico) SELECT '.prepare($new_idcontratto).', idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico FROM co_contratti_tipiintervento AS z WHERE idcontratto='.prepare($contratto->id));
$new_contratto->save();
// Replico le righe del contratto
$righe = $contratto->getRighe();
foreach ($righe as $riga) {
$new_riga = $riga->replicate();
$new_riga->qta_evasa = 0;
$new_riga->idcontratto = $new_contratto->id;
$new_riga->save();
}
// Replicazione degli impianti
$impianti = $dbo->fetchArray('SELECT idimpianto FROM my_impianti_contratti WHERE idcontratto='.prepare($contratto->id));
$dbo->sync('my_impianti_contratti', ['idcontratto' => $new_idcontratto], ['idimpianto' => array_column($impianti, 'idimpianto')]);
// Replicazione dei promemoria
$promemoria = $dbo->fetchArray('SELECT * FROM co_promemoria WHERE idcontratto='.prepare($contratto->id));
$giorni = $contratto->data_conclusione->diffInDays($contratto->data_accettazione);
foreach ($promemoria as $p) {
$dbo->insert('co_promemoria', [
'idcontratto' => $new_idcontratto,
'data_richiesta' => date('Y-m-d', strtotime($p['data_richiesta'].' +'.$giorni.' day')),
'idtipointervento' => $p['idtipointervento'],
'richiesta' => $p['richiesta'],
'idimpianti' => $p['idimpianti'],
]);
$id_promemoria = $dbo->lastInsertedID();
$promemoria = Promemoria::find($p['id']);
$righe = $promemoria->getRighe();
foreach ($righe as $riga) {
$new_riga = $riga->replicate();
$new_riga->id_promemoria = $id_promemoria;
$new_riga->save();
}
// Copia degli allegati
$allegati = $promemoria->uploads();
foreach ($allegati as $allegato) {
$allegato->copia([
'id_module' => $id_module,
'id_plugin' => Plugins::get('Pianificazione interventi')['id'],
'id_record' => $id_promemoria,
]);
}
}
// Cambio stato precedente contratto in concluso (non più pianificabile)
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE is_pianificabile = 0 AND is_fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = '.prepare($contratto->id));
$numero_totale++;
}
}
if ($numero_totale > 0) {
flash()->info(tr('_NUM_ contratti rinnovati!', [
'_NUM_' => $numero_totale, '_NUM_' => $numero_totale,
])); ]));
} else { } else {
@ -137,4 +235,15 @@ $operations['crea_fattura'] = [
], ],
]; ];
$operations['renew_contratto'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Rinnova contratti').'</span>',
'data' => [
'title' => tr('Rinnovare i contratti selezionati?').'</span>',
'msg' => ''.tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno di questi stati: _STATE_LIST_', ['_STATE_LIST_' => $stati_pianificabili]),
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
],
];
return $operations; return $operations;

View File

@ -40,7 +40,7 @@ $rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusi
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili']; $stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili'];
echo ' echo '
<div class="tip" data-toggle="tooltip" title="'.tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno stato di questi stati: _STATE_LIST_', [ <div class="tip" data-toggle="tooltip" title="'.tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno di questi stati: _STATE_LIST_', [
'_STATE_LIST_' => $stati_pianificabili, '_STATE_LIST_' => $stati_pianificabili,
]).'" id="rinnova"> ]).'" id="rinnova">
<button type="button" class="btn btn-warning ask '.($rinnova ? '' : 'disabled').'" data-backto="record-edit" data-op="renew" data-msg="'.tr('Rinnovare questo contratto?').'" data-button="'.tr('Rinnova').'" data-class="btn btn-lg btn-warning"> <button type="button" class="btn btn-warning ask '.($rinnova ? '' : 'disabled').'" data-backto="record-edit" data-op="renew" data-msg="'.tr('Rinnovare questo contratto?').'" data-button="'.tr('Rinnova').'" data-class="btn btn-lg btn-warning">