1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-24 15:27:43 +01:00

Fix pianificazione interventi per contratti: Non veniva creato il primo intervento

This commit is contained in:
Luca 2018-08-01 11:31:28 +02:00
parent ccc7168b4e
commit 490268d9e8
2 changed files with 120 additions and 82 deletions

View File

@ -16,7 +16,6 @@ $idanagrafica = $dbo->fetchArray('SELECT `idanagrafica` FROM `co_contratti` WHER
$idimpianti = $dbo->fetchArray('SELECT GROUP_CONCAT(`idimpianto`) AS idimpianti FROM `my_impianti_contratti` WHERE `idcontratto` = '.prepare($id_record))[0]['idimpianti']; $idimpianti = $dbo->fetchArray('SELECT GROUP_CONCAT(`idimpianto`) AS idimpianti FROM `my_impianti_contratti` WHERE `idcontratto` = '.prepare($id_record))[0]['idimpianti'];
$idimpianto = explode(",", $idimpianti); $idimpianto = explode(",", $idimpianti);
//solo se ho selezionato un solo impianto nel contratto, altrimenti non so quale sede e tecnico prendere //solo se ho selezionato un solo impianto nel contratto, altrimenti non so quale sede e tecnico prendere
if (count($idimpianto)<2){ if (count($idimpianto)<2){
@ -212,7 +211,7 @@ echo '
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "extra": "disabled" ]} {[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "extra": "disabled", "value": "'.$idtecnico.'" ]}
</div> </div>

View File

@ -77,7 +77,9 @@ switch (filter('op')) {
$intervallo = filter('intervallo'); $intervallo = filter('intervallo');
$parti_da_oggi = post('parti_da_oggi'); $parti_da_oggi = post('parti_da_oggi');
//if principale
if (!empty($idcontratto_riga) && !empty($intervallo)) { if (!empty($idcontratto_riga) && !empty($intervallo)) {
$qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, '. $qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, '.
'(SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria '. '(SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria '.
'WHERE co_contratti_promemoria.id = '.$idcontratto_riga; 'WHERE co_contratti_promemoria.id = '.$idcontratto_riga;
@ -105,14 +107,27 @@ switch (filter('op')) {
} }
//inizio controllo data_conclusione, data valida e maggiore della $min_date //inizio controllo data_conclusione, data valida e maggiore della $min_date
if ((date('Y', strtotime($data_conclusione)) > 1970) && (date('Y-m-d', strtotime($min_date)) < date('Y-m-d', strtotime($data_conclusione)))) { if ((date('Y', strtotime($data_conclusione)) > 1970) && (date('Y-m-d', strtotime($min_date)) <= date('Y-m-d', strtotime($data_conclusione)))) {
//$_SESSION['errors'][] = '1';
$i = 0;
//Ciclo partendo dalla data_richiesta fino all data conclusione del contratto //Ciclo partendo dalla data_richiesta fino all data conclusione del contratto
while (date('Y-m-d', strtotime($data_richiesta)) < date('Y-m-d', strtotime($data_conclusione))) { while (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione))) {
//calcolo nuova data richiesta //$_SESSION['errors'][] = '2';
$data_richiesta = date('Y-m-d', strtotime($data_richiesta.' + '.intval($intervallo).' days'));
//calcolo nuova data richiesta, non considero l'intervallo al primo ciclo
$data_richiesta = date('Y-m-d', strtotime($data_richiesta.' + '.(($i==0) ? 0 : $intervallo).' days'));
$i++;
//$_SESSION['errors'][] = 'data_richiesta: '.date('Y-m-d', strtotime($data_richiesta));
//$_SESSION['errors'][] = 'data_conclusione: '.date('Y-m-d', strtotime($data_conclusione));
//$_SESSION['errors'][] = 'min_date: '.$min_date;
//controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto //controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto
if ((date('Y-m-d', strtotime($data_richiesta)) >= $min_date) && (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione)))) { if ((date('Y-m-d', strtotime($data_richiesta)) >= $min_date) && (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione)))) {
//$_SESSION['errors'][] = '3';
//Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta. //Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta.
if (count($dbo->fetchArray("SELECT id FROM co_contratti_promemoria WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0) { if (count($dbo->fetchArray("SELECT id FROM co_contratti_promemoria WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0) {
//inserisco il nuovo promemoria //inserisco il nuovo promemoria
@ -128,104 +143,125 @@ switch (filter('op')) {
$dbo->query('INSERT INTO co_righe_contratti_articoli (idarticolo, id_riga_contratto,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idriga.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' '); $dbo->query('INSERT INTO co_righe_contratti_articoli (idarticolo, id_riga_contratto,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idriga.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
$_SESSION['infos'][] = tr('Promemoria intervento pianificato!'); $_SESSION['infos'][] = tr('Promemoria intervento pianificato!');
}
}else{
//pianificare anche l' intervento? $_SESSION['warnings'][] = tr('Esiste già un promemoria pianificato per il '.readDate($data_richiesta).'.');
if ($post['pianifica_intervento']) {
/*$orario_inizio = post('orario_inizio');
$orario_fine = post('orario_fine');*/
//$idanagrafica = 2; }
//intervento sempre nello stato "In programmazione" //Controllo che non esista già un intervento collegato a questo promemoria e, se ho spuntato di creare l'intervento, creo già anche quello
$idstatointervento = 'WIP'; if ((empty($dbo->fetchArray("SELECT idintervento FROM co_contratti_promemoria WHERE id = '".((empty($idriga)) ? $idcontratto_riga : $idriga)."'")[0]['idintervento'])) and ($post['pianifica_intervento'])) {
//calcolo codice intervento //pianificare anche l' intervento?
$formato = get_var('Formato codice intervento'); //if ($post['pianifica_intervento']) {
$template = str_replace('#', '%', $formato); /*$orario_inizio = post('orario_inizio');
$orario_fine = post('orario_fine');*/
$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'); //$idanagrafica = 2;
if (!empty($rs[0]['codice']))
$codice = Util\Generator::generate($formato, $rs[0]['codice']);
if (empty($codice)) { //intervento sempre nello stato "In programmazione"
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1'); $idstatointervento = 'WIP';
$codice = Util\Generator::generate($formato, $rs[0]['codice']);
} //calcolo codice intervento
$formato = get_var('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']);
}
// Creo intervento
$dbo->insert('in_interventi', [
'idanagrafica' => $idanagrafica,
'idclientefinale' => post('idclientefinale') ?: 0,
'idstatointervento' => $idstatointervento,
'idtipointervento' => $idtipointervento,
'idsede' => $idsede ?: 0,
'idautomezzo' => $idautomezzo ?: 0,
'codice' => $codice,
'data_richiesta' => $data_richiesta,
'richiesta' => $richiesta,
]);
// Creo intervento $idintervento = $dbo->lastInsertedID();
$dbo->insert('in_interventi', [
'idanagrafica' => $idanagrafica,
'idclientefinale' => post('idclientefinale') ?: 0,
'idstatointervento' => $idstatointervento,
'idtipointervento' => $idtipointervento,
'idsede' => $idsede ?: 0,
'idautomezzo' => $idautomezzo ?: 0,
'codice' => $codice, $idtecnici = post('idtecnico');
'data_richiesta' => $data_richiesta,
'richiesta' => $richiesta,
]);
$idintervento = $dbo->lastInsertedID(); //aggiungo i tecnici
foreach ($idtecnici as $idtecnico) {
add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record);
}
$idtecnici = post('idtecnico'); //collego l'intervento ai promemoria
$dbo->query('UPDATE co_contratti_promemoria SET idintervento='.prepare($idintervento).' WHERE id='.prepare(((empty($idriga)) ? $idcontratto_riga : $idriga)));
//aggiungo i tecnici //copio le righe dal promemoria all'intervento
foreach ($idtecnici as $idtecnico) { $dbo->query('INSERT INTO in_righe_interventi (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,idintervento,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$idintervento.',sconto,sconto_unitario,tipo_sconto FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.$idcontratto_riga.' ');
add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record);
}
//collego l'intervento ai promemoria //copio gli articoli dal promemoria all'intervento
$dbo->query('UPDATE co_contratti_promemoria SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga)); $dbo->query('INSERT INTO mg_articoli_interventi (idarticolo, idintervento,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idintervento.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
//copio le righe dal promemoria all'intervento //copio gli allegati dal promemoria all'intervento
$dbo->query('INSERT INTO in_righe_interventi (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,idintervento,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$idintervento.',sconto,sconto_unitario,tipo_sconto FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.$idcontratto_riga.' '); $dbo->query('INSERT INTO zz_files (nome,filename,original,category,id_module,id_record) SELECT t.nome, t.filename, t.original, t.category, '.Modules::get('Interventi')['id'].', '.$idintervento.' FROM zz_files t WHERE t.id_record = '.$idcontratto_riga.' AND t.id_plugin = '.$id_plugin.'' );
//copio gli articoli dal promemoria all'intervento // Decremento la quantità per ogni articolo copiato
$dbo->query('INSERT INTO mg_articoli_interventi (idarticolo, idintervento,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idintervento.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' '); $rs_articoli = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento = '.$idintervento.' ');
foreach ($rs_articoli as $rs_articolo) {
add_movimento_magazzino($rs_articolo['idarticolo'], -force_decimal($rs_articolo['qta']), ['idautomezzo' => $rs_articolo['idautomezzo'], 'idintervento' => $idintervento]);
}
//copio gli allegati dal promemoria all'intervento // Collego gli impianti del promemoria all' intervento appena inserito
$dbo->query('INSERT INTO zz_files (nome,filename,original,category,id_module,id_record) SELECT t.nome, t.filename, t.original, t.category, '.Modules::get('Interventi')['id'].', '.$idintervento.' FROM zz_files t WHERE t.id_record = '.$idcontratto_riga.' AND t.id_plugin = '.$id_plugin.'' ); if (!empty($idimpianti)){
$rs_idimpianti = explode(',', $idimpianti);
// Decremento la quantità per ogni articolo copiato foreach ($rs_idimpianti as $idimpianto) {
$rs_articoli = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento = '.$idintervento.' '); $dbo->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.$idintervento.', '.prepare($idimpianto).' )');
foreach ($rs_articoli as $rs_articolo) {
add_movimento_magazzino($rs_articolo['idarticolo'], -force_decimal($rs_articolo['qta']), ['idautomezzo' => $rs_articolo['idautomezzo'], 'idintervento' => $idintervento]);
}
// Collego gli impianti del promemoria all' intervento appena inserito
if (!empty($idimpianti)){
$rs_idimpianti = explode(',', $idimpianti);
foreach ($rs_idimpianti as $idimpianto) {
$dbo->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.$idintervento.', '.prepare($idimpianto).' )');
}
} }
}
// $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.'); // $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.');
$_SESSION['infos'][] = tr('Interventi pianificati correttamente.'); $_SESSION['infos'][] = tr('Interventi pianificati correttamente.');
} //fine if pianificazione intervento
//fine if pianificazione intervento
} else { //}
}else if ($post['pianifica_intervento']) {
$_SESSION['warnings'][] = tr('Esiste già un intervento pianificato per il '.readDate($data_richiesta).'.');
}
}
//fine controllo nuova data richiesta
/*}else {
$_SESSION['errors'][] = tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga); $_SESSION['errors'][] = tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga);
} }*/
} else {
$_SESSION['warnings'][] = tr('Esiste già un promemoria pianificato per il '.readDate($data_richiesta).'.');
}
} }
//fine controllo nuova data richiesta //fine ciclo while
}
//fine ciclo while
} else { } else {
$_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.'.$qp); $_SESSION['errors'][] = tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.');
} }
//fine controllo data_conclusione //fine controllo data_conclusione
} else { } else {
$_SESSION['errors'][] = tr('Errore durante la pianificazione. #'.$idcontratto_riga); $_SESSION['errors'][] = tr('Errore durante la pianificazione. #'.$idcontratto_riga);
} }
//fine if principale
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin); redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
break; break;
@ -235,15 +271,18 @@ switch (filter('op')) {
$qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC'; $qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC';
$rsp = $dbo->fetchArray($qp); $rsp = $dbo->fetchArray($qp);
//intervento/promemoria pianificabile
$pianificabile = $dbo->fetchNum('SELECT id FROM co_staticontratti WHERE pianificabile = 1 AND descrizione = '.prepare($records[0]['stato'])); $pianificabile = $dbo->fetchNum('SELECT id FROM co_staticontratti WHERE pianificabile = 1 AND descrizione = '.prepare($records[0]['stato']));
$stati_pianificabili = $dbo->fetchArray('SELECT GROUP_CONCAT(`descrizione`) AS stati_pianificabili FROM `co_staticontratti` WHERE `pianificabile` = 1')[0]['stati_pianificabili'];
echo ' echo '
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title"><span class="tip" title="'.tr('I promemoria verranno visualizzati sulla \'Dashboard\' e serviranno per semplificare la pianificazione del giorno dell\'intervento, ad esempio nel caso di interventi con cadenza mensile.').'"" >'.tr('Pianificazione interventi').' <i class="fa fa-question-circle-o"></i></span> </h3> <h3 class="box-title"><span class="tip" title="'.tr('I promemoria verranno visualizzati sulla \'Dashboard\' e serviranno per semplificare la pianificazione del giorno dell\'intervento, ad esempio nel caso di interventi con cadenza mensile.').'"" >'.tr('Pianificazione interventi').' <i class="fa fa-question-circle-o"></i></span> </h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<p>'.tr('Puoi <b>pianificare dei "promemoria" o direttamente gli interventi</b> da effettuare entro determinate scadenze. Per poter pianificare i promemoria il contratto deve essere <b>attivo</b> e la <b>data di conclusione</b> definita').'.</p>'; <p>'.tr('Puoi <b>pianificare dei "promemoria" o direttamente gli interventi</b> da effettuare entro determinate scadenze. Per poter pianificare i promemoria il contratto deve essere in uno dei seguenti stati: <b>'.$stati_pianificabili.'</b> e la <b>data di conclusione</b> definita').'.</p>';
// Nessun intervento pianificato // Nessun intervento pianificato
if (count($rsp) != 0) { if (count($rsp) != 0) {
@ -357,7 +396,7 @@ if (count($rsp) != 0) {
<td align="right">'; <td align="right">';
echo ' echo '
<button type="button" class="btn btn-warning btn-sm" title="Pianifica..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica\', \''.$rootdir.'/modules/contratti/plugins/addpianficazione.php?id_module='.Modules::get('Contratti')['id'].'&id_plugin='.Plugins::get('Pianificazione interventi')['id'].'&ref=interventi_contratti&id_record='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.((!empty($pianificabile) && strtotime($records[0]['data_conclusione'])) ? '' : ' disabled').'><i class="fa fa-clock-o"></i></button>'; <button type="button" class="btn btn-warning btn-sm" title="Pianifica..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica\', \''.$rootdir.'/modules/contratti/plugins/addpianficazione.php?id_module='.Modules::get('Contratti')['id'].'&id_plugin='.Plugins::get('Pianificazione interventi')['id'].'&ref=interventi_contratti&id_record='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.((!empty($pianificabile) && strtotime($records[0]['data_conclusione'])) ? '' : ' disabled').'><i class="fa fa-clock-o"></i></button>';
echo ' echo '
<button type="button" '.$disabled.' class="btn btn-primary btn-sm '.$disabled.' " title="Pianifica intervento ora..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica intervento\', \''.$rootdir.'/add.php?id_module='.Modules::get('Interventi')['id'].'&ref=interventi_contratti&idcontratto='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.(!empty($pianificabile) ? '' : ' disabled').'><i class="fa fa-calendar"></i></button>'; <button type="button" '.$disabled.' class="btn btn-primary btn-sm '.$disabled.' " title="Pianifica intervento ora..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica intervento\', \''.$rootdir.'/add.php?id_module='.Modules::get('Interventi')['id'].'&ref=interventi_contratti&idcontratto='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.(!empty($pianificabile) ? '' : ' disabled').'><i class="fa fa-calendar"></i></button>';