Compare commits

...

5 Commits

Author SHA1 Message Date
Pek5892 b4d2fec82b Fix minore 2024-04-10 17:43:54 +02:00
Matteo edda7c38e2 Fix per api cleanup checklist 2024-04-10 17:15:20 +02:00
Pek5892 c1f86dace3 Fix #1463 2024-04-10 16:12:02 +02:00
Pek5892 b975cbc24e Fix caricamento promemoria da pianificare in dashboard 2024-04-10 14:53:26 +02:00
Pek5892 6172a7c89b Fix aggiunta attività con php8.1 2024-04-10 12:43:32 +02:00
18 changed files with 68 additions and 43 deletions

View File

@ -248,8 +248,8 @@ if (!API\Response::isAPIRequest()) {
$plugin = Plugins::getCurrent();
$structure = isset($plugin) ? $plugin : $module;
$id_module = $module ? $module['id'] : null;
$id_plugin = $plugin ? $plugin['id'] : null;
$id_module = $module ? $module->id : null;
$id_plugin = $plugin ? $plugin->id : null;
$user = Auth::user();

View File

@ -48,10 +48,10 @@ switch (post('op')) {
case 'addtech':
$idtecnico = post('idtecnico');
$data_inizio = post('data_inizio');
$data_fine = null;
$data_fine = post('data_fine');
// Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio
if (!empty(post('data_fine'))) {
if (!empty($data_fine)) {
if (new DateTime(post('data_fine')) >= new DateTime($data_inizio)) {
$data_fine = post('data_fine');
}
@ -74,13 +74,14 @@ switch (post('op')) {
$errors = 0;
foreach (post('data_inizio') as $idautomezzotecnico => $data) {
$idtecnico = post('idtecnico')[$idautomezzotecnico];
$data_inizio = post('data_inizio')[$idautomezzotecnico];
$data_fine = null;
$data_fine = post('data_fine')[$idautomezzotecnico];
// Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio
if (!empty(post('data_fine')[$idautomezzotecnico])) {
if (new DateTime(post('data_fine')[$idautomezzotecnico]) >= new DateTime($data_inizio)) {
$data_fine = post('data_fine')[$idautomezzotecnico];
if (!empty($data_fine)) {
if (new DateTime($data_fine) < new DateTime($data_inizio)) {
$data_fine = null;
}
}
$data_fine ??= '0000-00-00';

View File

@ -24,7 +24,7 @@ if (!empty($rs_art)) {
echo '
<tr>
<td>
<input type="hidden" name="idautomezzotecnico[]" value="'.$r['id'].'">
<input type="hidden" name="idtecnico['.$r['id'].']" value="'.$r['idtecnico'].'">
'.$r['ragione_sociale'].'
</td>';
@ -37,7 +37,7 @@ if (!empty($rs_art)) {
// Data di fine
echo '
<td>
{[ "type": "date", "name": "data_fine['.$r['id'].']", "required": 1, "value": "'.$r['data_fine'].'", "min-date": "'.$r['data_inizio'].'" ]}
{[ "type": "date", "name": "data_fine['.$r['id'].']", "value": "'.$r['data_fine'].'", "min-date": "'.$r['data_inizio'].'" ]}
</td>';
// Pulsanti per aggiornamento date tecnici

View File

@ -64,6 +64,7 @@ if ($main_check) {
$.post('<?php echo $rootdir; ?>/modules/checklists/ajax.php', {
op: "edit_check",
id_module: globals.id_module,
id_record: "<?php echo $id_record; ?>",
content: input('content_edit').get(),
is_titolo: input('is_titolo').get(),

View File

@ -211,6 +211,8 @@ function delete_check(id){
op: "delete_check",
id: id,
main_check: 1,
id_module: globals.id_module,
id_record: id,
}, function(){
location.reload();
});

View File

@ -424,7 +424,7 @@ switch (filter('op')) {
`co_contratti`.`data_bozza` AS data_contratto,
DATE_FORMAT( `data_richiesta`, '%m%Y') AS mese,
`data_richiesta` AS data_richiesta,
`data_scadenza` AS data_scadenza,
IF(`co_promemoria`.`data_scadenza` IS NULL, '', `co_promemoria`.`data_scadenza`) AS data_scadenza,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale,
'promemoria' AS ref,
`in_tipiintervento_lang`.`name` AS tipo_intervento,
@ -437,7 +437,7 @@ switch (filter('op')) {
INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id`
INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
INNER JOIN `in_tipiintervento` ON `co_promemoria`.`idtipointervento` = `in_tipiintervento`.`id`
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare($lingua)."
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id)."
WHERE
`idintervento` IS NULL AND `co_staticontratti`.`is_pianificabile` = 1)
UNION
@ -450,7 +450,7 @@ switch (filter('op')) {
'' AS data_contratto,
DATE_FORMAT(IF(`in_interventi`.`data_scadenza` IS NULL, `in_interventi`.`data_richiesta`, `in_interventi`.`data_scadenza`), '%m%Y') AS mese,
`in_interventi`.`data_richiesta` AS data_richiesta,
`in_interventi`.`data_scadenza` AS data_scadenza,
IF(`in_interventi`.`data_scadenza` IS NULL, '', `in_interventi`.`data_scadenza`) AS data_scadenza,
`an_anagrafiche`.`ragione_sociale` AS ragione_sociale,
'intervento' AS ref,
`in_tipiintervento_lang`.`name` AS tipo_intervento,
@ -460,8 +460,8 @@ switch (filter('op')) {
FROM
`in_interventi`
INNER JOIN `in_tipiintervento` ON `in_interventi`.`idtipointervento` = `in_tipiintervento`.`id`
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare($lingua).'
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`';
LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).")
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`";
// Visualizzo solo promemoria del tecnico loggato
if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) {

View File

@ -346,7 +346,7 @@ if (!empty($risultati_da_programmare)) {
foreach ($mesi as $mese) {
$data = Carbon::parse($mese['data']);
$chiave = $data->format('mY');
$testo = $data->formatLocalized('%B %Y');
$testo = $data->isoFormat('MMMM YYYY');
if (checkdate($data->format('m'), $data->format('d'), $data->format('Y'))) {
echo '

View File

@ -46,7 +46,7 @@ $plugin_impianti = (new Plugin())->getByField('name', 'Impianti', Models\Locale:
switch (post('op')) {
case 'update':
$idcontratto = post('idcontratto');
$idcontratto = post('idcontratto')?: null;
$id_promemoria = post('idcontratto_riga');
// Rimozione del collegamento al promemoria
@ -71,9 +71,9 @@ switch (post('op')) {
$intervento->idstatointervento = post('idstatointervento');
$intervento->idsede_partenza = post('idsede_partenza');
$intervento->idsede_destinazione = post('idsede_destinazione');
$intervento->id_preventivo = post('idpreventivo');
$intervento->id_preventivo = post('idpreventivo') ?: null;
$intervento->id_contratto = $idcontratto;
$intervento->id_ordine = post('idordine');
$intervento->id_ordine = post('idordine')?: null;
$intervento->idpagamento = post('idpagamento');
$intervento->id_documento_fe = post('id_documento_fe');
@ -210,10 +210,10 @@ switch (post('op')) {
$intervento->idclientefinale = post('idclientefinale');
}
$intervento->id_preventivo = post('idpreventivo');
$intervento->id_contratto = post('idcontratto');
$intervento->id_ordine = post('idordine');
$intervento->idreferente = post('idreferente');
$intervento->id_preventivo = $idpreventivo ?: null;
$intervento->id_contratto = $idcontratto?: null;
$intervento->id_ordine = post('idordine') ?: null;
$intervento->idreferente = post('idreferente') ?: null;
$intervento->richiesta = post('richiesta');
$intervento->descrizione = post('descrizione');
$intervento->idsede_destinazione = $idsede_destinazione;
@ -228,9 +228,9 @@ switch (post('op')) {
}
// Collegamenti intervento/impianti
$impianti = (array) post('idimpianti');
$impianti = post('idimpianti');
if (!empty($impianti)) {
$impianti = array_unique($impianti);
$impianti = array_unique(array($impianti));
foreach ($impianti as $impianto) {
$dbo->insert('my_impianti_interventi', [
'idintervento' => $id_record,
@ -276,19 +276,23 @@ switch (post('op')) {
// Collegamenti tecnici/interventi
if (!empty(post('orario_inizio')) && !empty(post('orario_fine'))) {
$idtecnici = post('idtecnico');
$idtecnici = post('idtecnico') ?: null;
foreach ($idtecnici as $idtecnico) {
add_tecnico($id_record, $idtecnico, post('orario_inizio'), post('orario_fine'), $idcontratto);
}
}
// Assegnazione dei tecnici all'intervento
$tecnici_assegnati = (array) post('tecnici_assegnati');
$dbo->sync('in_interventi_tecnici_assegnati', [
'id_intervento' => $id_record,
], [
'id_tecnico' => $tecnici_assegnati,
]);
$tecnici_assegnati = post('tecnici_assegnati');
if (!empty($tecnici_assegnati)) {
$tecnici_assegnati = array_unique($tecnici_assegnati);
$dbo->sync('in_interventi_tecnici_assegnati', [
'id_intervento' => $id_record,
], [
'id_tecnico' => $tecnici_assegnati,
]);
}
foreach ($tecnici_assegnati as $tecnico_assegnato) {
$tecnico = Anagrafica::find($tecnico_assegnato);

View File

@ -28,7 +28,7 @@ $block_edit = $record['flag_completato'];
$id_modulo_anagrafiche = (new Module())->getByField('name', 'Anagrafiche', Models\Locale::getPredefined()->id);
// Verifica aggiuntive sulla sequenzialità dei numeri
$numero_previsto = verifica_numero_intervento($intervento);
$numero_previsto = verifica_numero_intervento($intervento, $id_segment);
if (!empty($numero_previsto) && intval(setting('Verifica numero intervento'))) {
echo '

View File

@ -338,7 +338,7 @@ if (!function_exists('aggiungi_intervento_in_fattura')) {
* @return bool|string
*/
if (!function_exists('verifica_numero_intervento')) {
function verifica_numero_intervento(Intervento $intervento)
function verifica_numero_intervento(Intervento $intervento, $id_segment)
{
if (empty($intervento->codice)) {
return null;
@ -349,7 +349,7 @@ if (!function_exists('verifica_numero_intervento')) {
->get();
// Recupero maschera per questo segmento
$maschera = setting('Formato codice attività');
$maschera = Generator::getMaschera($id_segment);
if ((strpos($maschera, 'YYYY') == false) or (strpos($maschera, 'yy') == false)) {
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [

View File

@ -29,7 +29,7 @@ $interventi_da_pianificare = Intervento::doesntHave('sessioni')
$raggruppamenti = $interventi_da_pianificare->groupBy(function ($item, $key) {
$data = $item->data_scadenza ?: $item->data_richiesta;
return ucfirst($data->formatLocalized('%B %Y'));
return ucfirst($data->isoFormat('MMMM YYYY'));
});
$counter = 0;

View File

@ -162,6 +162,8 @@ function delete_check(id){
$.post("'.$checklist_module->fileurl('ajax.php').'", {
op: "delete_check",
id: id,
id_module: globals.id_module,
id_record: id,
}, function(){
location.reload();
});

View File

@ -67,7 +67,7 @@ if (!$pianificazioni->isEmpty()) {
if (!$pianificazione->data_scadenza->equalTo($previous)) {
$previous = $pianificazione->data_scadenza;
echo '
<b>'.ucfirst($pianificazione->data_scadenza->formatLocalized('%B %Y')).'</b>';
<b>'.ucfirst($pianificazione->data_scadenza->isoFormat('MMMM YYYY')).'</b>';
}
echo '

View File

@ -58,7 +58,7 @@ foreach ($raggruppamenti as $mese => $raggruppamento) {
echo "
<h4>
<a class='clickable' onclick=\"if( $('#promemoria_pianificare_".$counter."').css('display') == 'none' ){ $(this).children('i').removeClass('fa-plus-circle'); $(this).children('i').addClass('fa-minus-circle'); }else{ $(this).children('i').addClass('fa-plus-circle'); $(this).children('i').removeClass('fa-minus-circle'); } $('#promemoria_pianificare_".$counter."').slideToggle();\">
<i class='fa ".$class."'></i> ".ucfirst($nome_mese->formatLocalized('%B %Y')).'
<i class='fa ".$class."'></i> ".ucfirst($nome_mese->isoFormat('MMMM YYYY')).'
</a>
</h4>';

View File

@ -90,7 +90,22 @@ class Checklists extends AppResource
$da_interventi = array_column($records, 'id');
}
$mancanti = $this->getMissingIDs('zz_checks', 'id', $last_sync_at);
$rs_mancanti = database()
->table('zz_operations')
->select('zz_operations.id_record')
->distinct()
->join('zz_modules', 'zz_modules.id', '=', 'zz_operations.id_module')
->leftJoin('zz_modules_lang', function ($join) {
$join->on('zz_modules.id', '=', 'zz_modules_lang.id_record')
->where('zz_modules_lang.id_lang', '=', \Models\Locale::getDefault()->id);
})
->where('zz_modules_lang.name', '=', 'Interventi')
->where('zz_operations.op', '=', 'delete_check')
->where('zz_operations.created_at', '>', $last_sync_at)
->pluck('id_record')
->toArray();
$mancanti = array_column($rs_mancanti, 'id_record');
$results = array_unique(array_merge($da_interventi, $mancanti));

View File

@ -64,7 +64,7 @@ if ($calendar['format'] == 'week') {
$where = ' (in_interventi_tecnici.orario_inizio) <= '.prepare($max_date).' AND (in_interventi_tecnici.orario_inizio) >= '.prepare($min_date).' AND ';
} else {
$title = $date->formatLocalized('%B %Y');
$title = $date->isoFormat('MMMM YYYY');
$min_date = $date->copy()->startOfMonth();
$max_date = $date->copy()->endOfMonth();
@ -154,7 +154,7 @@ for ($i = 0; $i < $count; $i = $i + 7) {
$element = $list[$i + $c];
echo '
<th>'.ucfirst($element['date']->formatLocalized('%A %d/%m')).'</th>';
<th>'.ucfirst($element['date']->isoFormat('MMMM YYYY')).'</th>';
}
echo '

View File

@ -125,7 +125,7 @@ for ($i = 0; $i < $count; $i = $i + 7) {
$element = $list[$i + $c];
echo '
<div class="divCell" align="center">'.ucfirst($element['date']->formatLocalized('%A %d/%m')).'</div>';
<div class="divCell" align="center">'.ucfirst($element['date']->isoFormat('MMMM YYYY')).'</div>';
}
echo '

View File

@ -58,7 +58,7 @@ $totale_finale = 0;
// Nel fatturato totale è corretto NON tenere in considerazione eventuali rivalse, ritenute acconto o contributi.
foreach ($raggruppamenti as $raggruppamento) {
$data = new Carbon\Carbon($raggruppamento['data_competenza']);
$mese = ucfirst($data->formatLocalized('%B %Y'));
$mese = ucfirst($data->isoFormat('MMMM YYYY'));
$imponibile = SUM($raggruppamento['imponibile'], null, 2);
$iva = SUM($raggruppamento['iva'], null, 2);