/// <summary>
        ///     Controlla che il progressivo sia unico all'interno dell'atto
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="encrypt_progressivo"></param>
        /// <param name="counter_emendamenti"></param>
        /// <returns></returns>
        public async Task <bool> CheckProgressivo(Guid attoUId, string encrypt_progressivo,
                                                  CounterEmendamentiEnum counter_emendamenti)
        {
            var query = PRContext
                        .EM
                        .Where(e => true);

            switch (counter_emendamenti)
            {
            case CounterEmendamentiEnum.NONE:
                return(false);

            case CounterEmendamentiEnum.EM:
                return(!await query.AnyAsync(e => e.UIDAtto == attoUId && e.N_EM == encrypt_progressivo));

            case CounterEmendamentiEnum.SUB_EM:
                return(!await query.AnyAsync(e => e.UIDAtto == attoUId && e.N_SUBEM == encrypt_progressivo));

            default:
                throw new ArgumentOutOfRangeException(nameof(counter_emendamenti), counter_emendamenti, null);
            }
        }
        /// <summary>
        ///     Conteggio emendamenti nell'atto
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="persona"></param>
        /// <returns></returns>
        public async Task <int> Count(Guid attoUId, PersonaDto persona, CounterEmendamentiEnum counter_emendamenti,
                                      int CLIENT_MODE,
                                      Filter <EM> filtro = null, List <Guid> firmatari = null)
        {
            var query = PRContext.EM
                        .Where(em =>
                               em.UIDAtto == attoUId &&
                               !em.Eliminato);

            if (CLIENT_MODE == (int)ClientModeEnum.TRATTAZIONE)
            {
                query = query.Where(em => em.IDStato >= (int)StatiEnum.Depositato && !string.IsNullOrEmpty(em.DataDeposito));
            }
            else
            {
                query = query.Where(em => em.IDStato != (int)StatiEnum.Bozza_Riservata ||
                                    em.IDStato == (int)StatiEnum.Bozza_Riservata &&
                                    (em.UIDPersonaCreazione == persona.UID_persona ||
                                     em.UIDPersonaProponente == persona.UID_persona));

                if (persona.IsGiunta())
                {
                    query = query
                            .Where(em => em.id_gruppo >= AppSettingsConfiguration.GIUNTA_REGIONALE_ID);
                }
                else if (persona.CurrentRole != RuoliIntEnum.Amministratore_PEM &&
                         persona.CurrentRole != RuoliIntEnum.Segreteria_Assemblea &&
                         persona.CurrentRole != RuoliIntEnum.Presidente_Regione)
                {
                    query = query
                            .Where(em => em.id_gruppo == persona.Gruppo.id_gruppo);
                }

                if (persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea)
                {
                    query = query.Where(em =>
                                        !string.IsNullOrEmpty(em.DataDeposito) ||
                                        em.idRuoloCreazione == (int)RuoliIntEnum.Segreteria_Assemblea);
                }
            }

            filtro?.BuildExpression(ref query);

            if (firmatari != null)
            {
                if (firmatari.Count > 0)
                {
                    //Avvio ricerca firmatari
                    var firme = await PRContext
                                .FIRME
                                .Where(f => firmatari.Contains(f.UID_persona))
                                .Select(f => f.UIDEM)
                                .ToListAsync();

                    query = query
                            .Where(em => firme.Contains(em.UIDEM));
                }
            }

            switch (counter_emendamenti)
            {
            case CounterEmendamentiEnum.NONE:
            {
                return(await query.CountAsync());
            }

            case CounterEmendamentiEnum.EM:
                if (persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea)
                {
                    return(await query.CountAsync(e =>
                                                  !string.IsNullOrEmpty(e.N_EM) && string.IsNullOrEmpty(e.N_SUBEM)));
                }
                else
                {
                    return(await query.CountAsync(e => string.IsNullOrEmpty(e.N_SUBEM)));
                }

            case CounterEmendamentiEnum.SUB_EM:
                if (persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea)
                {
                    return(await query.CountAsync(e => string.IsNullOrEmpty(e.N_EM)));
                }
                else
                {
                    return(await query.CountAsync(e =>
                                                  string.IsNullOrEmpty(e.N_EM) && !string.IsNullOrEmpty(e.N_SUBEM)));
                }

            default:
                return(0);
            }
        }
Beispiel #3
0
        /// <summary>
        ///     Conteggio emendamenti nell'atto
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="persona"></param>
        /// <returns></returns>
        public async Task <int> Count(Guid attoUId, PersonaDto persona, CounterEmendamentiEnum counter_emendamenti,
                                      int CLIENT_MODE,
                                      Filter <EM> filtro = null)
        {
            var query = PRContext.EM
                        .Where(em =>
                               em.UIDAtto == attoUId &&
                               !em.Eliminato);

            if (CLIENT_MODE == (int)ClientModeEnum.TRATTAZIONE)
            {
                query = query.Where(em => em.IDStato >= (int)StatiEnum.Depositato);
            }
            else
            {
                query = query.Where(em => em.IDStato != (int)StatiEnum.Bozza_Riservata ||
                                    em.IDStato == (int)StatiEnum.Bozza_Riservata &&
                                    (em.UIDPersonaCreazione == persona.UID_persona ||
                                     em.UIDPersonaProponente == persona.UID_persona));

                if (persona.CurrentRole == RuoliIntEnum.Amministratore_Giunta)
                {
                    query = query
                            .Where(em => em.id_gruppo >= 10000);
                }
                else if (persona.CurrentRole != RuoliIntEnum.Amministratore_PEM &&
                         persona.CurrentRole != RuoliIntEnum.Segreteria_Assemblea)
                {
                    query = query
                            .Where(em => em.id_gruppo == persona.Gruppo.id_gruppo);
                }

                if (persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea)
                {
                    query = query.Where(em =>
                                        !string.IsNullOrEmpty(em.DataDeposito) ||
                                        em.idRuoloCreazione == (int)RuoliIntEnum.Segreteria_Assemblea);
                }
            }

            filtro?.BuildExpression(ref query);

            switch (counter_emendamenti)
            {
            case CounterEmendamentiEnum.NONE:
            {
                return((await query.ToListAsync()).Count);
            }

            case CounterEmendamentiEnum.EM:
                if (persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea)
                {
                    return(await query.CountAsync(e =>
                                                  !string.IsNullOrEmpty(e.N_EM) && string.IsNullOrEmpty(e.N_SUBEM)));
                }
                else
                {
                    return(await query.CountAsync(e => string.IsNullOrEmpty(e.N_SUBEM)));
                }

            case CounterEmendamentiEnum.SUB_EM:
                if (persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea)
                {
                    return(await query.CountAsync(e => string.IsNullOrEmpty(e.N_EM)));
                }
                else
                {
                    return(await query.CountAsync(e =>
                                                  string.IsNullOrEmpty(e.N_EM) && !string.IsNullOrEmpty(e.N_SUBEM)));
                }

            default:
                return(0);
            }
        }