|
359 | 359 | <div class="col-md-4"> |
360 | 360 | {[ "type": "checkbox", "label": "'.tr('Attività ricorrente').'", "name": "ricorsiva_add", "value": "" ]} |
361 | 361 | </div> |
362 | | -
|
363 | | - <div class="col-md-4 ricorrenza"> |
364 | | - {[ "type": "timestamp", "label": "'.tr('Data/ora inizio').'", "name": "data_inizio_ricorrenza", "value": "'.($data_richiesta ?: '-now-').'" ]} |
365 | | - </div> |
366 | | -
|
367 | | - <div class="col-md-4 ricorrenza"> |
368 | | - {[ "type": "number", "label": "'.tr('Periodicità').'", "name": "periodicita", "decimals": "0", "icon-after": "choice|period|months", "value": "1" ]} |
369 | | - </div> |
370 | 362 | </div> |
371 | 363 |
|
372 | | - <div class="row ricorrenza mt-3"> |
373 | | - <div class="col-md-4"> |
374 | | - {[ "type": "select", "label": "'.tr('Metodo fine ricorrenza').'", "name": "metodo_ricorrenza", "values": "list=\"data\":\"Data fine\",\"numero\":\"Numero ricorrenze\"" ]} |
375 | | - </div> |
376 | | -
|
377 | | - <div class="col-md-4"> |
378 | | - {[ "type": "timestamp", "label": "'.tr('Data/ora fine').'", "name": "data_fine_ricorrenza" ]} |
379 | | - </div> |
380 | | -
|
381 | | - <div class="col-md-4"> |
382 | | - {[ "type": "number", "label": "'.tr('Numero ricorrenze').'", "name": "numero_ricorrenze", "decimals": "0" ]} |
383 | | - </div> |
384 | | - </div> |
| 364 | + <div class="ricorrenza-config" style="display: none;"> |
| 365 | + <input type="hidden" name="data_inizio_ricorrenza" id="data_inizio_ricorrenza_hidden" value=""> |
385 | 366 |
|
386 | | - <div class="row ricorrenza mt-3"> |
387 | | - <div class="col-md-4"> |
388 | | - {[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "idstatoricorrenze", "values": "query=SELECT `in_statiintervento`.`id`,`in_statiintervento_lang`.`title` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `is_bloccato`=0 ORDER BY `title`" ]} |
| 367 | + <div class="row"> |
| 368 | + <div class="col-md-3"> |
| 369 | + {[ "type": "number", "label": "'.tr('Periodicità').'", "name": "periodicita", "decimals": "0", "icon-after": "choice|period|months", "value": "1" ]} |
| 370 | + </div> |
| 371 | + <div class="col-md-3"> |
| 372 | + {[ "type": "select", "label": "'.tr('Metodo fine ricorrenza').'", "name": "metodo_ricorrenza", "values": "list=\"data\":\"Data fine\",\"numero\":\"Numero ricorrenze\"" ]} |
| 373 | + </div> |
| 374 | + <div class="col-md-3 metodo-data"> |
| 375 | + {[ "type": "timestamp", "label": "'.tr('Data/ora fine').'", "name": "data_fine_ricorrenza" ]} |
| 376 | + </div> |
| 377 | + <div class="col-md-3 metodo-numero"> |
| 378 | + {[ "type": "number", "label": "'.tr('Numero ricorrenze').'", "name": "numero_ricorrenze", "decimals": "0" ]} |
| 379 | + </div> |
389 | 380 | </div> |
390 | 381 |
|
391 | | - <div class="col-md-4"> |
392 | | - {[ "type": "checkbox", "label": "'.tr('Riporta sessioni di lavoro').'", "name": "riporta_sessioni_add", "value": "" ]} |
| 382 | + <div class="row mt-3"> |
| 383 | + <div class="col-md-6"> |
| 384 | + {[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "idstatoricorrenze", "values": "query=SELECT `in_statiintervento`.`id`,`in_statiintervento_lang`.`title` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `is_bloccato`=0 ORDER BY `title`" ]} |
| 385 | + </div> |
| 386 | + <div class="col-md-6"> |
| 387 | + {[ "type": "checkbox", "label": "'.tr('Riporta sessioni di lavoro').'", "name": "riporta_sessioni_add", "value": "" ]} |
| 388 | + </div> |
393 | 389 | </div> |
394 | 390 | </div> |
395 | 391 | </div> |
@@ -718,6 +714,43 @@ function() { |
718 | 714 | var ref = "'.get('ref').'"; |
719 | 715 |
|
720 | 716 | async function salva(button) { |
| 717 | + // Validazione ricorrenza prima del salvataggio |
| 718 | + if ($("#ricorsiva_add").is(":checked")) { |
| 719 | + calculateDataInizioRicorrenza(); |
| 720 | + var dataInizio = $("#data_inizio_ricorrenza_hidden").val(); |
| 721 | + if (!dataInizio) { |
| 722 | + swal("Errore", "Impossibile calcolare la data di inizio ricorrenza", "error"); |
| 723 | + return false; |
| 724 | + } |
| 725 | +
|
| 726 | + var periodicita = $("#periodicita").val(); |
| 727 | + if (!periodicita || periodicita <= 0) { |
| 728 | + swal("Errore", "La periodicità deve essere un numero positivo", "error"); |
| 729 | + return false; |
| 730 | + } |
| 731 | +
|
| 732 | + var metodo = $("#metodo_ricorrenza").val(); |
| 733 | + if (!metodo) { |
| 734 | + swal("Errore", "Seleziona un metodo per terminare la ricorrenza", "error"); |
| 735 | + return false; |
| 736 | + } |
| 737 | +
|
| 738 | + if (metodo === "data" && !$("#data_fine_ricorrenza").val()) { |
| 739 | + swal("Errore", "La data di fine ricorrenza è obbligatoria", "error"); |
| 740 | + return false; |
| 741 | + } |
| 742 | +
|
| 743 | + if (metodo === "numero" && (!$("#numero_ricorrenze").val() || $("#numero_ricorrenze").val() <= 0)) { |
| 744 | + swal("Errore", "Il numero di ricorrenze deve essere maggiore di zero", "error"); |
| 745 | + return false; |
| 746 | + } |
| 747 | +
|
| 748 | + if (!$("#idstatoricorrenze").val()) { |
| 749 | + swal("Errore", "Seleziona uno stato per le ricorrenze", "error"); |
| 750 | + return false; |
| 751 | + } |
| 752 | + } |
| 753 | +
|
721 | 754 | // Submit attraverso ricaricamento della pagina |
722 | 755 | if (!ref) { |
723 | 756 | $("#add-form").submit(); |
@@ -777,34 +810,81 @@ function deassegnaTuttiTecnici() { |
777 | 810 | input("tecnici_assegnati").getElement().selectReset(); |
778 | 811 | } |
779 | 812 |
|
| 813 | + // Gestione ricorrenza |
780 | 814 | $("#ricorsiva_add").on("change", function(){ |
781 | 815 | if ($(this).is(":checked")) { |
782 | | - $(".ricorrenza").removeClass("hidden"); |
783 | | - $("#data_inizio_ricorrenza").attr("required", true); |
| 816 | + $(".ricorrenza-config").slideDown(300); |
784 | 817 | $("#metodo_ricorrenza").attr("required", true); |
785 | 818 | $("#idstatoricorrenze").attr("required", true); |
| 819 | + $("#periodicita").attr("required", true); |
| 820 | + calculateDataInizioRicorrenza(); |
786 | 821 | } else { |
787 | | - $(".ricorrenza").addClass("hidden"); |
788 | | - $("#data_inizio_ricorrenza").attr("required", false); |
| 822 | + $(".ricorrenza-config").slideUp(300); |
789 | 823 | $("#metodo_ricorrenza").attr("required", false); |
790 | 824 | $("#idstatoricorrenze").attr("required", false); |
| 825 | + $("#periodicita").attr("required", false); |
| 826 | + $("#data_fine_ricorrenza").attr("required", false); |
| 827 | + $("#numero_ricorrenze").attr("required", false); |
791 | 828 | } |
792 | 829 | }); |
793 | 830 |
|
794 | 831 | $("#metodo_ricorrenza").on("change", function(){ |
795 | | - if ($(this).val()=="data") { |
| 832 | + if ($(this).val() === "data") { |
| 833 | + $(".metodo-data").fadeIn(200); |
| 834 | + $(".metodo-numero").fadeOut(200); |
796 | 835 | input("data_fine_ricorrenza").enable(); |
797 | 836 | $("#data_fine_ricorrenza").attr("required", true); |
798 | 837 | input("numero_ricorrenze").disable(); |
799 | 838 | input("numero_ricorrenze").set(""); |
800 | | - } else { |
| 839 | + $("#numero_ricorrenze").attr("required", false); |
| 840 | + } else if ($(this).val() === "numero") { |
| 841 | + $(".metodo-numero").fadeIn(200); |
| 842 | + $(".metodo-data").fadeOut(200); |
801 | 843 | input("numero_ricorrenze").enable(); |
| 844 | + $("#numero_ricorrenze").attr("required", true); |
802 | 845 | input("data_fine_ricorrenza").disable(); |
803 | 846 | input("data_fine_ricorrenza").set(""); |
804 | 847 | $("#data_fine_ricorrenza").attr("required", false); |
| 848 | + } else { |
| 849 | + $(".metodo-data, .metodo-numero").fadeOut(200); |
| 850 | + input("data_fine_ricorrenza").disable(); |
| 851 | + input("numero_ricorrenze").disable(); |
| 852 | + $("#data_fine_ricorrenza").attr("required", false); |
| 853 | + $("#numero_ricorrenze").attr("required", false); |
| 854 | + } |
| 855 | + }); |
| 856 | +
|
| 857 | + function calculateDataInizioRicorrenza() { |
| 858 | + var dataInizio = ""; |
| 859 | + var orarioInizio = $("#orario_inizio").val(); |
| 860 | +
|
| 861 | + if (orarioInizio && orarioInizio.length >= 16) { |
| 862 | + dataInizio = orarioInizio; |
| 863 | + } else { |
| 864 | + var dataRichiesta = $("#data_richiesta").val(); |
| 865 | + if (dataRichiesta) { |
| 866 | + dataInizio = dataRichiesta + " 09:00:00"; |
| 867 | + } else { |
| 868 | + var now = new Date(); |
| 869 | + var year = now.getFullYear(); |
| 870 | + var month = String(now.getMonth() + 1).padStart(2, "0"); |
| 871 | + var day = String(now.getDate()).padStart(2, "0"); |
| 872 | + dataInizio = year + "-" + month + "-" + day + " 09:00:00"; |
| 873 | + } |
805 | 874 | } |
| 875 | + $("#data_inizio_ricorrenza_hidden").val(dataInizio); |
| 876 | + } |
| 877 | +
|
| 878 | + $("#orario_inizio, #data_richiesta").on("change", function() { |
| 879 | + setTimeout(calculateDataInizioRicorrenza, 100); |
806 | 880 | }); |
807 | 881 |
|
| 882 | + // Inizializzazione |
| 883 | + if (!$("#metodo_ricorrenza").val()) { |
| 884 | + $(".metodo-data, .metodo-numero").hide(); |
| 885 | + } |
| 886 | + calculateDataInizioRicorrenza(); |
| 887 | +
|
808 | 888 | var map = null; |
809 | 889 | function caricaMappa(lat, lng) { |
810 | 890 | if (!autoload_mappa){ |
|
0 commit comments