Esempio n. 1
0
    def update_actions_for_phase(cls, fase, piano, procedura_vas):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = 0
        for _a in piano.azioni.all():
            _order += 1

        # - Update Action state accordingly
        if fase.nome == FASE.anagrafica:
            _avvio_consultazioni_sca = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.avvio_consultazioni_sca).first()
            if _avvio_consultazioni_sca.stato == STATO_AZIONE.attesa:
                _avvio_consultazioni_sca.stato = STATO_AZIONE.nessuna
                _avvio_consultazioni_sca.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _avvio_consultazioni_sca.save()

                _pareri_vas_expire_days = getattr(settings,
                                                  'PARERI_VAS_EXPIRE_DAYS', 60)
                _pareri_sca = Azione(
                    tipologia=TIPOLOGIA_AZIONE.pareri_sca,
                    attore=TIPOLOGIA_ATTORE.sca,
                    order=_order,
                    stato=STATO_AZIONE.attesa,
                    data=datetime.datetime.now(timezone.get_current_timezone())
                    + datetime.timedelta(days=_pareri_vas_expire_days))
                _pareri_sca.save()
                _order += 1
                AzioniPiano.objects.get_or_create(azione=_pareri_sca,
                                                  piano=piano)
Esempio n. 2
0
    def update_actions_for_phase(cls, fase, piano, procedura_vas):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.anagrafica:
            _pareri_sca = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.pareri_sca).first()
            if _pareri_sca.stato == STATO_AZIONE.nessuna:

                _avvio_esame_pareri_sca = piano.azioni.filter(
                    tipologia=TIPOLOGIA_AZIONE.avvio_esame_pareri_sca).first()

                if _avvio_esame_pareri_sca.stato != STATO_AZIONE.nessuna:
                    _avvio_esame_pareri_sca.stato = STATO_AZIONE.nessuna
                    _avvio_esame_pareri_sca.data = datetime.datetime.now(timezone.get_current_timezone())
                    _avvio_esame_pareri_sca.save()

                    _upload_elaborati_vas = Azione(
                        tipologia=TIPOLOGIA_AZIONE.upload_elaborati_vas,
                        attore=TIPOLOGIA_ATTORE.comune,
                        order=_order,
                        stato=STATO_AZIONE.necessaria
                    )
                    _upload_elaborati_vas.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(azione=_upload_elaborati_vas, piano=piano)
        else:
            raise Exception(_("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 3
0
    def update_actions_for_phase(cls, fase, piano, procedura_avvio, user):
        # Update Azioni Piano
        # - Complete Current Actions
        _order = 0
        for _a in piano.azioni.all():
            _order += 1

        # - Update Action state accordingly
        if fase.nome == FASE.anagrafica:
            _richiesta_integrazioni = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.richiesta_integrazioni).first()
            if _richiesta_integrazioni and _richiesta_integrazioni.stato != STATO_AZIONE.nessuna:
                if procedura_avvio.messaggio_integrazione and \
                len(procedura_avvio.messaggio_integrazione) > 0 and \
                procedura_avvio.richiesta_integrazioni:
                    _richiesta_integrazioni.stato = STATO_AZIONE.nessuna
                    _richiesta_integrazioni.data = datetime.datetime.now(
                        timezone.get_current_timezone())
                    _richiesta_integrazioni.save()

                    _integrazioni_richieste = Azione(
                        tipologia=TIPOLOGIA_AZIONE.integrazioni_richieste,
                        attore=TIPOLOGIA_ATTORE.comune,
                        order=_order,
                        stato=STATO_AZIONE.attesa)
                    _integrazioni_richieste.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(
                        azione=_integrazioni_richieste, piano=piano)
Esempio n. 4
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user,
                                 token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.avvio:
            _esito_cp = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.esito_conferenza_paesaggistica
            ).first()

            if _esito_cp and _esito_cp.stato != STATO_AZIONE.nessuna:
                _esito_cp.stato = STATO_AZIONE.nessuna
                _esito_cp.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _esito_cp.save()

                _rev_piano_post_cp = Azione(
                    tipologia=TIPOLOGIA_AZIONE.rev_piano_post_cp,
                    attore=TIPOLOGIA_ATTORE.comune,
                    order=_order,
                    stato=STATO_AZIONE.necessaria)
                _rev_piano_post_cp.save()
                _order += 1
                AzioniPiano.objects.get_or_create(azione=_rev_piano_post_cp,
                                                  piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 5
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user,
                                 token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.avvio and \
        piano.procedura_vas and piano.procedura_vas.tipologia != TIPOLOGIA_VAS.non_necessaria:
            _parere_motivato_ac = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.parere_motivato_ac).first()

            if _parere_motivato_ac and _parere_motivato_ac.stato != STATO_AZIONE.nessuna:
                _parere_motivato_ac.stato = STATO_AZIONE.nessuna
                _parere_motivato_ac.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _parere_motivato_ac.save()

                _upload_elaborati_adozione_vas = Azione(
                    tipologia=TIPOLOGIA_AZIONE.upload_elaborati_adozione_vas,
                    attore=TIPOLOGIA_ATTORE.comune,
                    order=_order,
                    stato=STATO_AZIONE.attesa)
                _upload_elaborati_adozione_vas.save()
                _order += 1
                AzioniPiano.objects.get_or_create(
                    azione=_upload_elaborati_adozione_vas, piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 6
0
def check_join_pubblicazione_provvedimento(info, piano: Piano):

    pp_ap = piano.getFirstAction(
        TipologiaAzione.pubblicazione_provvedimento_verifica_ap)
    pp_ac = piano.getFirstAction(
        TipologiaAzione.pubblicazione_provvedimento_verifica_ac)

    if is_executed(pp_ap) and is_executed(pp_ac):

        _vas: ProceduraVAS = piano.procedura_vas

        if not _vas.assoggettamento:
            _vas.conclusa = True
            _vas.save()

            if try_and_close_avvio(piano):
                check_and_promote(piano, info)

        else:
            if _vas.tipologia == TipologiaVAS.PROCEDIMENTO_SEMPLIFICATO:
                crea_azione(
                    Azione(piano=piano,
                           tipologia=TipologiaAzione.redazione_documenti_vas,
                           qualifica_richiesta=QualificaRichiesta.COMUNE,
                           stato=StatoAzione.NECESSARIA))
            else:
                crea_azione(
                    Azione(piano=piano,
                           tipologia=TipologiaAzione.invio_doc_preliminare,
                           qualifica_richiesta=QualificaRichiesta.COMUNE,
                           stato=StatoAzione.NECESSARIA))
Esempio n. 7
0
    def update_actions_for_phase(cls, fase, piano, procedura_vas, user):
        ensure_fase(fase, Fase.ANAGRAFICA)

        _epv = piano.getFirstAction(
            TipologiaAzione.emissione_provvedimento_verifica)
        if needs_execution(_epv):
            now = get_now()
            chiudi_azione(_epv, now)

            procedura_vas.data_assoggettamento = now
            procedura_vas.verifica_effettuata = True
            procedura_vas.save()

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.
                    pubblicazione_provvedimento_verifica_ac,
                    qualifica_richiesta=QualificaRichiesta.AC,
                    stato=StatoAzione.NECESSARIA,
                ))

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.
                    pubblicazione_provvedimento_verifica_ap,
                    qualifica_richiesta=QualificaRichiesta.COMUNE,
                    stato=StatoAzione.NECESSARIA,
                ))
Esempio n. 8
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user,
                                 token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.avvio:
            _controdeduzioni = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.controdeduzioni).first()

            if _controdeduzioni and _controdeduzioni.stato != STATO_AZIONE.nessuna:
                _controdeduzioni.stato = STATO_AZIONE.nessuna
                _controdeduzioni.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _controdeduzioni.save()

                _piano_controdedotto = Azione(
                    tipologia=TIPOLOGIA_AZIONE.piano_controdedotto,
                    attore=TIPOLOGIA_ATTORE.comune,
                    order=_order,
                    stato=STATO_AZIONE.attesa)
                _piano_controdedotto.save()
                _order += 1
                AzioniPiano.objects.get_or_create(azione=_piano_controdedotto,
                                                  piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 9
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user):

        ensure_fase(fase, Fase.AVVIO)

        pubblicazione_burt = piano.getFirstAction(
            TipologiaAzione.pubblicazione_burt)

        if needs_execution(pubblicazione_burt):
            chiudi_azione(pubblicazione_burt)

            now = get_now()

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.osservazioni_enti,
                    qualifica_richiesta=QualificaRichiesta.REGIONE,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza((
                    now,  # ???
                    procedura_adozione.data_ricezione_osservazioni)))

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.osservazioni_regione,
                    qualifica_richiesta=QualificaRichiesta.REGIONE,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza((
                    now,  # ???
                    procedura_adozione.data_ricezione_osservazioni)))

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.upload_osservazioni_privati,
                    qualifica_richiesta=QualificaRichiesta.COMUNE,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza((
                    now,  # ???
                    procedura_adozione.data_ricezione_osservazioni)))

            if procedura_adozione.pubblicazione_burt_data and \
                    piano.procedura_vas.tipologia != TipologiaVAS.NON_NECESSARIA:

                _procedura_adozione_vas, created = ProceduraAdozioneVAS.objects.get_or_create(
                    piano=piano)

                crea_azione(
                    Azione(
                        piano=piano,
                        tipologia=TipologiaAzione.pareri_adozione_sca,
                        qualifica_richiesta=QualificaRichiesta.SCA,
                        stato=StatoAzione.ATTESA,
                    ).imposta_scadenza(
                        get_scadenza(
                            procedura_adozione.pubblicazione_burt_data,
                            TipoExpire.ADOZIONE_VAS_PARERI_SCA)))
Esempio n. 10
0
def crea_azione_post_cartografica(piano: Piano, tipologia: TipologiaAzione):
    if tipologia == TipologiaAzione.validazione_cartografia_adozione:
        utils.crea_azione(
            Azione(
                piano=piano,
                tipologia=TipologiaAzione.pubblicazione_burt,
                qualifica_richiesta=QualificaRichiesta.COMUNE,
                stato=StatoAzione.NECESSARIA,
            ))

    elif tipologia == TipologiaAzione.validazione_cartografia_controdedotta:
        procedura_adozione = piano.procedura_adozione
        if procedura_adozione.richiesta_conferenza_paesaggistica:
            utils.crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.esito_conferenza_paesaggistica,
                    qualifica_richiesta=QualificaRichiesta.REGIONE,
                    stato=StatoAzione.ATTESA))
        else:
            if piano_mutations.try_and_close_adozione(piano):
                piano_mutations.check_and_promote(piano)

    elif tipologia == TipologiaAzione.validazione_cartografia_cp_adozione:
        if piano_mutations.try_and_close_adozione(piano):
            piano_mutations.check_and_promote(piano)

    elif tipologia == TipologiaAzione.validazione_cartografia_approvazione:
        if not piano.procedura_adozione.richiesta_conferenza_paesaggistica:
            # Se non è stata fatta prima, va fatta ora...
            utils.crea_azione(
                Azione(piano=piano,
                       tipologia=TipologiaAzione.
                       esito_conferenza_paesaggistica_ap,
                       qualifica_richiesta=QualificaRichiesta.REGIONE,
                       stato=StatoAzione.ATTESA))

            procedura_approvazione = piano.procedura_approvazione
            procedura_approvazione.richiesta_conferenza_paesaggistica = True
            procedura_approvazione.save()

        else:
            utils.crea_azione(
                Azione(piano=piano,
                       tipologia=TipologiaAzione.pubblicazione_approvazione,
                       qualifica_richiesta=QualificaRichiesta.COMUNE,
                       stato=StatoAzione.NECESSARIA))

    elif tipologia == TipologiaAzione.validazione_cartografia_cp_approvazione:
        utils.crea_azione(
            Azione(piano=piano,
                   tipologia=TipologiaAzione.pubblicazione_approvazione,
                   qualifica_richiesta=QualificaRichiesta.COMUNE,
                   stato=StatoAzione.NECESSARIA))

    else:
        raise Exception(
            'Tipologia azione cartografica inaspettata [{}]'.format(tipologia))
Esempio n. 11
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user,
                                 token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.avvio:
            _osservazioni_enti = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.osservazioni_enti).first()

            _osservazioni_regione = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.osservazioni_regione).first()

            _upload_osservazioni_privati = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.upload_osservazioni_privati).first(
                )

            _organization = piano.ente

            if rules.test_rule('strt_core.api.is_actor', token
                               or (user, _organization), 'Regione'):
                if _osservazioni_regione and _osservazioni_regione.stato != STATO_AZIONE.nessuna:
                    _osservazioni_regione.stato = STATO_AZIONE.nessuna
                    _osservazioni_regione.data = datetime.datetime.now(
                        timezone.get_current_timezone())
                    _osservazioni_regione.save()

                    if _osservazioni_enti and _osservazioni_enti.stato != STATO_AZIONE.nessuna:
                        _osservazioni_enti.stato = STATO_AZIONE.nessuna
                        _osservazioni_enti.data = datetime.datetime.now(
                            timezone.get_current_timezone())
                        _osservazioni_enti.save()

            if rules.test_rule('strt_core.api.is_actor', token
                               or (user, _organization), 'Comune'):
                if _upload_osservazioni_privati and _upload_osservazioni_privati.stato != STATO_AZIONE.nessuna:
                    _upload_osservazioni_privati.stato = STATO_AZIONE.nessuna
                    _upload_osservazioni_privati.data = datetime.datetime.now(
                        timezone.get_current_timezone())
                    _upload_osservazioni_privati.save()

            if _upload_osservazioni_privati.stato == STATO_AZIONE.nessuna and \
            _osservazioni_regione.stato == STATO_AZIONE.nessuna:
                _controdeduzioni = Azione(
                    tipologia=TIPOLOGIA_AZIONE.controdeduzioni,
                    attore=TIPOLOGIA_ATTORE.comune,
                    order=_order,
                    stato=STATO_AZIONE.attesa)
                _controdeduzioni.save()
                _order += 1
                AzioniPiano.objects.get_or_create(azione=_controdeduzioni,
                                                  piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 12
0
    def update_actions_for_phase(cls, fase, piano, procedura_avvio, user):
        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.anagrafica:
            _avvio_procedimento = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.avvio_procedimento).first()
            if _avvio_procedimento and _avvio_procedimento.stato == STATO_AZIONE.nessuna:
                if procedura_avvio.conferenza_copianificazione == TIPOLOGIA_CONF_COPIANIFIZAZIONE.posticipata:

                    _richiesta_cc = piano.azioni.filter(
                        tipologia=TIPOLOGIA_AZIONE.
                        richiesta_conferenza_copianificazione).first()

                    if _richiesta_cc and _richiesta_cc.stato != STATO_AZIONE.nessuna:

                        _richiesta_cc.stato = STATO_AZIONE.nessuna
                        _richiesta_cc.save()

                        procedura_avvio.notifica_genio_civile = False
                        procedura_avvio.save()

                        _cc = ConferenzaCopianificazione.objects.get(
                            piano=piano)
                        _cc.data_richiesta_conferenza = datetime.datetime.now(
                            timezone.get_current_timezone())
                        _cc.data_scadenza_risposta = procedura_avvio.data_scadenza_risposta
                        _cc.save()

                        _conferenza_copianificazione = Azione(
                            tipologia=TIPOLOGIA_AZIONE.
                            esito_conferenza_copianificazione,
                            attore=TIPOLOGIA_ATTORE.regione,
                            order=_order,
                            stato=STATO_AZIONE.attesa,
                            data=procedura_avvio.data_scadenza_risposta)
                        _conferenza_copianificazione.save()
                        _order += 1
                        AzioniPiano.objects.get_or_create(
                            azione=_conferenza_copianificazione, piano=piano)

                        # Notify Users
                        piano_phase_changed.send(
                            sender=Piano,
                            user=user,
                            piano=piano,
                            message_type="conferenza_copianificazione")
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 13
0
    def update_actions_for_phase(cls, fase, piano, consultazione_vas, user):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = 0
        for _a in piano.azioni.all():
            _order += 1

        # - Update Action state accordingly
        if fase.nome == FASE.anagrafica:
            _avvio_consultazioni_sca = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.avvio_consultazioni_sca)
            for _ac in _avvio_consultazioni_sca:
                if _ac.stato != STATO_AZIONE.nessuna:
                    _avvio_consultazioni_sca = _ac
                    break
            if _avvio_consultazioni_sca and \
            not isinstance(_avvio_consultazioni_sca, QuerySet) and \
            _avvio_consultazioni_sca.stato != STATO_AZIONE.nessuna:
                _avvio_consultazioni_sca.stato = STATO_AZIONE.nessuna
                _avvio_consultazioni_sca.data = datetime.datetime.now(
                    timezone.get_current_timezone())

                consultazione_vas.data_avvio_consultazioni_sca = _avvio_consultazioni_sca.data

                # Notify Users
                piano_phase_changed.send(
                    sender=Piano,
                    user=user,
                    piano=piano,
                    message_type="piano_verifica_vas_updated")

                _avvio_consultazioni_sca.save()
                consultazione_vas.save()

                _pareri_vas_expire_days = getattr(settings,
                                                  'PARERI_VAS_EXPIRE_DAYS', 60)
                _pareri_sca = Azione(
                    tipologia=TIPOLOGIA_AZIONE.pareri_sca,
                    attore=TIPOLOGIA_ATTORE.sca,
                    order=_order,
                    stato=STATO_AZIONE.attesa,
                    data=datetime.datetime.now(timezone.get_current_timezone())
                    + datetime.timedelta(days=_pareri_vas_expire_days))
                _pareri_sca.save()
                _order += 1
                AzioniPiano.objects.get_or_create(azione=_pareri_sca,
                                                  piano=piano)
Esempio n. 14
0
    def update_actions_for_phase(cls, fase, piano, procedura_avvio, user):
        # Update Azioni Piano
        # - Complete Current Actions
        # - Update Action state accordingly

        ensure_fase(fase, Fase.ANAGRAFICA)

        _esito_cc = piano.getFirstAction(
            TipologiaAzione.esito_conferenza_copianificazione)
        if needs_execution(_esito_cc):
            chiudi_azione(_esito_cc, set_data=False)

            procedura_avvio.notifica_genio_civile = True
            procedura_avvio.save()

            now = get_now()

            _cc = ConferenzaCopianificazione.objects.get(piano=piano)
            _cc.data_chiusura_conferenza = now
            _cc.save()

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.protocollo_genio_civile,
                    qualifica_richiesta=QualificaRichiesta.GC,
                    stato=StatoAzione.NECESSARIA,
                ))
def inizializza_procedura_cartografica(parent: Azione):
    piano: Piano = parent.piano
    tipo_carto: TipologiaAzione = MAPPING_AZIONI_CARTO_NEXT[parent.tipologia]

    azione_carto = piano.getFirstAction(tipo_carto)

    # Le azioni di controllo cartografico possono fallire: in quel caso l'azione precedente viene resa nuovamente
    # eseguibile. Una volta che l'azione parent è nuovamente eseguita, non creeremo una nuova azione cartografica,
    # ma useremo quella precedentemente creata

    if azione_carto:
        riapri_azione(azione_carto)
    else:
        azione_carto = crea_azione(
            Azione(
                piano=piano,
                tipologia=tipo_carto,
                qualifica_richiesta=QualificaRichiesta.AUTO,
                stato=StatoAzione.NECESSARIA,
            ))

    lotto = LottoCartografico.objects.filter(azione=azione_carto).first()
    if lotto:
        ElaboratoCartografico.objects.filter(lotto=lotto).delete()
    else:
        lotto = LottoCartografico(piano=piano,
                                  azione=azione_carto,
                                  azione_parent=parent)
        lotto.save()

    esegui_procedura_cartografica.delay(lotto.id)
Esempio n. 16
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user):

        # Update Azioni Piano
        # - Complete Current Actions
        # - Update Action state accordingly
        ensure_fase(fase, Fase.AVVIO)

        if not piano.procedura_vas or (piano.procedura_vas
                                       and piano.procedura_vas.tipologia
                                       == TipologiaVAS.NON_NECESSARIA):
            raise Exception(
                "Tipologia VAS incongruente con l'azione richiesta")

        # TODO: controllare se possibile usare --> _pareri_sca = piano.getFirstAction(TIPOLOGIA_AZIONE.pareri_adozione_sca)
        _pareri_sca_list = piano.azioni(
            tipologia_azione=TipologiaAzione.pareri_adozione_sca)
        _pareri_sca = next((x for x in _pareri_sca_list if needs_execution(x)),
                           None)

        if _pareri_sca:
            chiudi_azione(_pareri_sca)

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.parere_motivato_ac,
                    qualifica_richiesta=QualificaRichiesta.AC,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza(
                    get_scadenza(procedura_adozione.pubblicazione_burt_data,
                                 TipoExpire.ADOZIONE_VAS_PARERE_MOTIVATO_AC)))
    def update_actions_for_phase(cls, fase, piano, procedura_approvazione,
                                 user):

        # Update Azioni Piano
        # - Complete Current Actions
        # - Update Action state accordingly

        ensure_fase(fase, Fase.ADOZIONE)

        _pubblicazione_approvazione = piano.getFirstAction(
            TipologiaAzione.pubblicazione_approvazione)

        if needs_execution(_pubblicazione_approvazione):
            chiudi_azione(_pubblicazione_approvazione)

            _trasmissione_approvazione = piano.getFirstAction(
                TipologiaAzione.trasmissione_approvazione)

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.attribuzione_conformita_pit,
                    qualifica_richiesta=QualificaRichiesta.REGIONE,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza(
                    get_scadenza(_trasmissione_approvazione.data,
                                 TipoExpire.ATTRIBUZIONE_CONFORMITA_PIT)))
Esempio n. 18
0
    def update_actions_for_phase(cls, fase, piano, procedura_vas, user):
        ensure_fase(fase, Fase.ANAGRAFICA)

        if procedura_vas.tipologia == TipologiaVAS.VERIFICA:
            exp = TipoExpire.EMISSIONE_PV_VERIFICA
        elif procedura_vas.tipologia == TipologiaVAS.PROCEDIMENTO_SEMPLIFICATO:
            exp = TipoExpire.EMISSIONE_PV_PROCEDIMENTOSEMPLIFICATO
        else:
            raise GraphQLError("Tipo procedura VAS inaspettata: {}".format(
                procedura_vas.tipologia),
                               code=403)

        _pareri_verifica_vas = piano.getFirstAction(
            TipologiaAzione.pareri_verifica_sca)
        if needs_execution(_pareri_verifica_vas):
            chiudi_azione(_pareri_verifica_vas)

            _azione_start_vas = piano.getFirstAction(
                TipologiaAzione.selezione_tipologia_vas)
            _data_start_vas = _azione_start_vas.data

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.emissione_provvedimento_verifica,
                    qualifica_richiesta=QualificaRichiesta.AC,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza(get_scadenza(_data_start_vas, exp)))
Esempio n. 19
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user,
                                 token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.avvio and \
        piano.procedura_vas and piano.procedura_vas.tipologia != TIPOLOGIA_VAS.non_necessaria:
            _pareri_sca = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.pareri_adozione_sca)
            for _psca in _pareri_sca:
                if _psca.stato != STATO_AZIONE.nessuna:
                    _pareri_sca = _psca
                    break

            if _pareri_sca and \
            (isinstance(_pareri_sca, QuerySet) or
             _pareri_sca.stato != STATO_AZIONE.nessuna):
                if isinstance(_pareri_sca, QuerySet):
                    _pareri_sca = _pareri_sca.last()

                _pareri_sca.stato = STATO_AZIONE.nessuna
                _pareri_sca.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _pareri_sca.save()

                _expire_days = getattr(
                    settings, 'ADOZIONE_VAS_PARERE_MOTIVATO_AC_EXPIRE_DAYS',
                    30)
                _alert_delta = datetime.timedelta(days=_expire_days)
                _parere_motivato_ac_expire = procedura_adozione.pubblicazione_burt_data + _alert_delta

                _parere_motivato_ac = Azione(
                    tipologia=TIPOLOGIA_AZIONE.parere_motivato_ac,
                    attore=TIPOLOGIA_ATTORE.ac,
                    order=_order,
                    stato=STATO_AZIONE.attesa,
                    data=_parere_motivato_ac_expire)
                _parere_motivato_ac.save()
                _order += 1
                AzioniPiano.objects.get_or_create(azione=_parere_motivato_ac,
                                                  piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 20
0
    def update_actions_for_phase(cls, fase, piano, procedura_avvio, user):
        # Update Azioni Piano
        # - Complete Current Actions
        _order = 0
        for _a in piano.azioni.all():
            _order += 1

        # - Update Action state accordingly
        if fase.nome == FASE.anagrafica:
            _avvio_procedimento = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.avvio_procedimento).first()
            if _avvio_procedimento and _avvio_procedimento.stato == STATO_AZIONE.nessuna:
                _esito_cc = piano.azioni.filter(
                    tipologia=TIPOLOGIA_AZIONE.
                    esito_conferenza_copianificazione).first()

                if _esito_cc and _esito_cc.stato != STATO_AZIONE.nessuna:

                    _esito_cc.stato = STATO_AZIONE.nessuna
                    _esito_cc.save()

                    procedura_avvio.notifica_genio_civile = True
                    procedura_avvio.save()

                    _cc = ConferenzaCopianificazione.objects.get(piano=piano)
                    _cc.data_chiusura_conferenza = datetime.datetime.now(
                        timezone.get_current_timezone())
                    _cc.save()

                    _protocollo_genio_civile = Azione(
                        tipologia=TIPOLOGIA_AZIONE.protocollo_genio_civile,
                        attore=TIPOLOGIA_ATTORE.comune,
                        order=_order,
                        stato=STATO_AZIONE.attesa,
                        data=procedura_avvio.data_scadenza_risposta)
                    _protocollo_genio_civile.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(
                        azione=_protocollo_genio_civile, piano=piano)

                    _protocollo_genio_civile_id = Azione(
                        tipologia=TIPOLOGIA_AZIONE.protocollo_genio_civile_id,
                        attore=TIPOLOGIA_ATTORE.genio_civile,
                        order=_order,
                        stato=STATO_AZIONE.necessaria)
                    _protocollo_genio_civile_id.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(
                        azione=_protocollo_genio_civile_id, piano=piano)

                    # Notify Users
                    piano_phase_changed.send(
                        sender=Piano,
                        user=user,
                        piano=piano,
                        message_type="protocollo_genio_civile")
Esempio n. 21
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user,
                                 token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.avvio:
            _piano_controdedotto = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.piano_controdedotto).first()

            if _piano_controdedotto and _piano_controdedotto.stato != STATO_AZIONE.nessuna:
                _piano_controdedotto.stato = STATO_AZIONE.nessuna
                _piano_controdedotto.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _piano_controdedotto.save()

                if not procedura_adozione.richiesta_conferenza_paesaggistica:
                    _procedura_adozione_vas = ProceduraAdozioneVAS.objects.filter(
                        piano=piano).last()
                    if not _procedura_adozione_vas or _procedura_adozione_vas.conclusa:
                        piano.chiudi_pendenti()
                    procedura_adozione.conclusa = True
                    procedura_adozione.save()

                    procedura_approvazione, created = ProceduraApprovazione.objects.get_or_create(
                        piano=piano, ente=piano.ente)
                    piano.procedura_approvazione = procedura_approvazione
                    piano.save()
                else:
                    _convocazione_cp = Azione(tipologia=TIPOLOGIA_AZIONE.
                                              esito_conferenza_paesaggistica,
                                              attore=TIPOLOGIA_ATTORE.regione,
                                              order=_order,
                                              stato=STATO_AZIONE.attesa)
                    _convocazione_cp.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(azione=_convocazione_cp,
                                                      piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 22
0
    def update_actions_for_phase(cls, fase, piano, procedura_avvio, user):

        ensure_fase(fase, Fase.ANAGRAFICA)

        _avvio_procedimento = piano.getFirstAction(
            TipologiaAzione.avvio_procedimento)
        if needs_execution(_avvio_procedimento):
            if not cls.autorita_ok(piano, [Qualifica.GC]):
                raise GraphQLError(
                    "Genio Civile non trovato tra i soggetti operanti",
                    code=400)

            if not cls.autorita_ok(piano, [Qualifica.OPREG]):
                raise GraphQLError(
                    "Pianificazione o Urbanistica non trovato tra i soggetti operanti",
                    code=400)

            if procedura_avvio.conferenza_copianificazione is None:
                raise GraphQLError("Conferenza copianificazione non impostata",
                                   code=400)

            chiudi_azione(_avvio_procedimento)

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.contributi_tecnici,
                    qualifica_richiesta=QualificaRichiesta.REGIONE,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza((
                    get_now(),  # ??
                    procedura_avvio.data_scadenza_risposta)))

            crea_azione(Azione(
                piano=piano,
                tipologia=TipologiaAzione.selezione_tipologia_vas,
                qualifica_richiesta=QualificaRichiesta.COMUNE,
                stato=StatoAzione.ATTESA,
            ),
                        send_mail=False)

            init_vas_procedure(piano, user)
Esempio n. 23
0
def crea_azione_ingestione(azione_validazione: Azione):
    tipo_validazione = azione_validazione.tipologia
    tipo_ingestione = MAPPING_AZIONI_VALIDAZIONECARTO_INGESTIONE[
        tipo_validazione]
    return utils.crea_azione(
        Azione(
            piano=azione_validazione.piano,
            tipologia=tipo_ingestione,
            qualifica_richiesta=QualificaRichiesta.AUTO,
            stato=StatoAzione.NECESSARIA,
        ))
Esempio n. 24
0
    def update_actions_for_phase(cls, fase, piano, procedura_avvio, user):

        ensure_fase(fase, Fase.ANAGRAFICA)

        # _avvio_procedimento = piano.getFirstAction(TIPOLOGIA_AZIONE.avvio_procedimento)
        # if isExecuted(_avvio_procedimento):
        if procedura_avvio.conferenza_copianificazione != TipologiaCopianificazione.POSTICIPATA:
            return GraphQLError(
                "Errore nello stato del piano - Tipologia copianificazione errata",
                code=400)

        _richiesta_cc = piano.getFirstAction(
            TipologiaAzione.richiesta_conferenza_copianificazione)
        if needs_execution(_richiesta_cc):
            chiudi_azione(_richiesta_cc, set_data=False)

            procedura_avvio.notifica_genio_civile = False
            procedura_avvio.save()

            _cc = ConferenzaCopianificazione.objects.get(piano=piano)
            _cc.data_richiesta_conferenza = get_now()
            _cc.data_scadenza_risposta = procedura_avvio.data_scadenza_risposta
            _cc.save()

            crea_azione(
                Azione(piano=piano,
                       tipologia=TipologiaAzione.richiesta_integrazioni,
                       qualifica_richiesta=QualificaRichiesta.REGIONE,
                       stato=StatoAzione.ATTESA))

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.
                    esito_conferenza_copianificazione,
                    qualifica_richiesta=QualificaRichiesta.REGIONE,
                    stato=StatoAzione.ATTESA,
                ))
Esempio n. 25
0
    def update_actions_for_phase(cls, fase, piano, procedura_approvazione,
                                 user, token):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.adozione:
            _trasmissione_approvazione = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.trasmissione_approvazione).first()

            _pubblicazione_approvazione = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.pubblicazione_approvazione).first()

            if _pubblicazione_approvazione and _pubblicazione_approvazione.stato != STATO_AZIONE.nessuna:
                _pubblicazione_approvazione.stato = STATO_AZIONE.nessuna
                _pubblicazione_approvazione.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _pubblicazione_approvazione.save()

                _expire_days = getattr(
                    settings, 'ATTRIBUZIONE_CONFORMITA_PIT_EXPIRE_DAYS', 30)
                _alert_delta = datetime.timedelta(days=_expire_days)
                _attribuzione_conformita_pit = Azione(
                    tipologia=TIPOLOGIA_AZIONE.attribuzione_conformita_pit,
                    attore=TIPOLOGIA_ATTORE.regione,
                    order=_order,
                    stato=STATO_AZIONE.attesa,
                    data=_trasmissione_approvazione.data + _alert_delta)
                _attribuzione_conformita_pit.save()
                _order += 1
                AzioniPiano.objects.get_or_create(
                    azione=_attribuzione_conformita_pit, piano=piano)
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))
Esempio n. 26
0
    def update_actions_for_phase(cls, fase, piano, procedura_adozione, user):

        ensure_fase(fase, Fase.AVVIO)

        _upload_osservazioni_privati = piano.getFirstAction(
            TipologiaAzione.upload_osservazioni_privati)
        if needs_execution(_upload_osservazioni_privati):
            chiudi_azione(_upload_osservazioni_privati)

            if not piano.getFirstAction(TipologiaAzione.controdeduzioni):
                crea_azione(
                    Azione(piano=piano,
                           tipologia=TipologiaAzione.controdeduzioni,
                           qualifica_richiesta=QualificaRichiesta.COMUNE,
                           stato=StatoAzione.ATTESA))
Esempio n. 27
0
    def update_actions_for_phase(cls, fase, piano, procedura_vas, user):

        ensure_fase(fase, Fase.ANAGRAFICA)

        _invio_doc_preliminare = piano.getFirstAction(
            TipologiaAzione.invio_doc_preliminare)
        if needs_execution(_invio_doc_preliminare):
            now = get_now()
            chiudi_azione(_invio_doc_preliminare, now)

            crea_azione(
                Azione(
                    piano=piano,
                    tipologia=TipologiaAzione.trasmissione_pareri_sca,
                    qualifica_richiesta=QualificaRichiesta.SCA,
                    stato=StatoAzione.ATTESA,
                ).imposta_scadenza(
                    get_scadenza(now, TipoExpire.TRASMISSIONE_PARERI_SCA)))

            crea_azione(
                Azione(piano=piano,
                       tipologia=TipologiaAzione.trasmissione_pareri_ac,
                       qualifica_richiesta=QualificaRichiesta.AC,
                       stato=StatoAzione.ATTESA))
Esempio n. 28
0
def check_join_redazione_documenti_vas(user, piano: Piano):

    tp_sca = piano.getFirstAction(TipologiaAzione.trasmissione_pareri_sca)
    tp_ac = piano.getFirstAction(TipologiaAzione.trasmissione_pareri_ac)

    if is_executed(tp_sca) and is_executed(tp_ac):
        crea_azione(
            Azione(piano=piano,
                   tipologia=TipologiaAzione.redazione_documenti_vas,
                   qualifica_richiesta=QualificaRichiesta.COMUNE,
                   stato=StatoAzione.NECESSARIA))

        return True

    return False
Esempio n. 29
0
def promuovi_piano(fase: Fase, piano):

    procedura_vas = piano.procedura_vas

    # Update Azioni Piano
    _order = Azione.count_by_piano(piano)

    # - Attach Actions Templates for the Next "Fase"
    for _a in AZIONI_BASE[fase]:
        crea_azione(
            Azione(piano=piano,
                   tipologia=_a["tipologia"],
                   qualifica_richiesta=_a["qualifica"],
                   order=_order,
                   stato=StatoAzione.NECESSARIA))
        _order += 1

    # - Update Action state accordingly
    if fase == Fase.ANAGRAFICA:
        _creato = piano.getFirstAction(TipologiaAzione.creato_piano)
        if _creato.stato != StatoAzione.NECESSARIA:
            raise Exception("Stato Inconsistente!")

        chiudi_azione(_creato)

    elif fase == Fase.AVVIO:
        ## TODO check -- WTF?????
        _richiesta_integrazioni = piano.getFirstAction(
            TipologiaAzione.richiesta_integrazioni)
        if needs_execution(_richiesta_integrazioni):
            chiudi_azione(_richiesta_integrazioni)

        _integrazioni_richieste = piano.getFirstAction(
            TipologiaAzione.integrazioni_richieste)
        if needs_execution(_integrazioni_richieste):
            chiudi_azione(_integrazioni_richieste)
Esempio n. 30
0
    def update_actions_for_phase(cls, fase, piano, procedura_approvazione,
                                 user):

        # Update Azioni Piano
        # - Complete Current Actions
        _order = piano.azioni.count()

        # - Update Action state accordingly
        if fase.nome == FASE.adozione:
            _trasmissione_approvazione = piano.azioni.filter(
                tipologia=TIPOLOGIA_AZIONE.trasmissione_approvazione).first()
            if _trasmissione_approvazione and _trasmissione_approvazione.stato != STATO_AZIONE.nessuna:
                _trasmissione_approvazione.stato = STATO_AZIONE.nessuna
                _trasmissione_approvazione.data = datetime.datetime.now(
                    timezone.get_current_timezone())
                _trasmissione_approvazione.save()

                if not piano.procedura_adozione.richiesta_conferenza_paesaggistica:
                    # Se non è stata fatta prima, va fatta ora...
                    _convocazione_cp = Azione(
                        tipologia=TIPOLOGIA_AZIONE.
                        esito_conferenza_paesaggistica_ap,
                        attore=TIPOLOGIA_ATTORE.regione,
                        order=_order,
                        stato=STATO_AZIONE.attesa)
                    _convocazione_cp.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(azione=_convocazione_cp,
                                                      piano=piano)
                else:
                    _pubblicazione_approvazione = Azione(
                        tipologia=TIPOLOGIA_AZIONE.pubblicazione_approvazione,
                        attore=TIPOLOGIA_ATTORE.comune,
                        order=_order,
                        stato=STATO_AZIONE.necessaria)
                    _pubblicazione_approvazione.save()
                    _order += 1
                    AzioniPiano.objects.get_or_create(
                        azione=_pubblicazione_approvazione, piano=piano)

                procedura_approvazione.richiesta_conferenza_paesaggistica = True
                procedura_approvazione.save()
        else:
            raise Exception(
                _("Fase Piano incongruente con l'azione richiesta"))