public async Task <IHttpActionResult> EsportaGrigliaExcel(Guid id, OrdinamentoEnum ordine, ClientModeEnum mode,
                                                                  bool is_report = false)
        {
            try
            {
                var session = await GetSession();

                if (session._currentRole != RuoliIntEnum.Amministratore_PEM &&
                    session._currentRole != RuoliIntEnum.Segreteria_Assemblea)
                {
                    if (is_report)
                    {
                        return(BadRequest("Operazione non eseguibile per il ruolo assegnato"));
                    }
                }

                var persona = await _logicPersone.GetPersona(session);

                if (is_report)
                {
                    return(ResponseMessage(await _logicEsporta.EsportaGrigliaReportExcel(id, ordine, mode, persona)));
                }

                var file = await _logicEsporta.EsportaGrigliaExcel(id, ordine, mode, persona);

                return(ResponseMessage(file));
            }
            catch (Exception e)
            {
                Log.Error("EsportaGrigliaXLS", e);
                return(ErrorHandler(e));
            }
        }
        private async Task <string> ComposeWordTable(Guid attoUID, OrdinamentoEnum ordine, ClientModeEnum mode, PersonaDto persona)
        {
            var personeInDb = await _unitOfWork.Persone.GetAll();

            var personeInDbLight = personeInDb.Select(Mapper.Map <View_UTENTI, PersonaLightDto>).ToList();
            var emList           = await _logicEm.ScaricaEmendamenti(attoUID, ordine, mode, persona, personeInDbLight, open_data_enabled : false, true);

            var body = "<html>";

            body += "<body style='page-orientation: landscape'>";
            body += "<table>";

            body += "<thead>";
            body += "<tr>";
            body += ComposeHeaderColumn("Ordine");
            body += ComposeHeaderColumn("EM/SUB");
            body += ComposeHeaderColumn("Testo");
            body += ComposeHeaderColumn("Relazione");
            body += ComposeHeaderColumn("Proponente");
            body += ComposeHeaderColumn("Stato");
            body += "</tr>";
            body += "</thead>";

            body += "<tbody>";
            body  = emList.Aggregate(body, (current, em) => current + ComposeBodyRow(em));
            body += "</tbody>";

            body += "</table>";
            body += "</body>";
            body += "</html>";
            return(body);
        }
Example #3
0
        public async Task RimuoviFascicoliObsoleti(Guid attoUId, OrdinamentoEnum ordinamento)
        {
            var oldStampe = await PRContext
                            .STAMPE
                            .Where(s => s.UIDAtto == attoUId && s.Da == 0 && s.A == 0 && s.Ordine == (int)ordinamento)
                            .ToListAsync();

            PRContext.STAMPE.RemoveRange(oldStampe);
        }
Example #4
0
        /// <summary>
        ///     Ritorna la query emednamenti da stampare
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="persona"></param>
        /// <param name="ordine"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public string GetAll_Query(Guid attoUId, PersonaDto persona, OrdinamentoEnum ordine, Filter <EM> filtro = null)
        {
            var query = PRContext.EM
                        .Where(em =>
                               em.UIDAtto == attoUId &&
                               !em.Eliminato &&
                               (em.IDStato != (int)StatiEnum.Bozza ||
                                em.IDStato == (int)StatiEnum.Bozza &&
                                (em.UIDPersonaCreazione == persona.UID_persona ||
                                 em.UIDPersonaProponente == persona.UID_persona)));

            if (persona.CurrentRole != RuoliIntEnum.Amministratore_PEM &&
                persona.CurrentRole != RuoliIntEnum.Segreteria_Assemblea)
            {
                query = query
                        .Where(em => em.id_gruppo == persona.Gruppo.id_gruppo);
            }
            else if (ordine == OrdinamentoEnum.Default)
            {
                ordine = OrdinamentoEnum.Presentazione;
            }

            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 (ordine)
            {
            case OrdinamentoEnum.Presentazione:
                query = query.OrderBy(em => em.SubProgressivo).ThenBy(em => em.Timestamp);
                break;

            case OrdinamentoEnum.Votazione:
                query = query.OrderBy(em => em.OrdineVotazione);
                break;

            case OrdinamentoEnum.Default:
                query = query.OrderBy(em => em.IDStato)
                        .ThenBy(em => em.Progressivo)
                        .ThenBy(em => em.Timestamp);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(ordine), ordine, null);
            }

            var sql = query.ToTraceQuery();

            return(sql);
        }
        public async Task <IEnumerable <EM> > GetAll_RichiestaPropriaFirma(Guid id, PersonaDto persona,
                                                                           OrdinamentoEnum ordine, int page, int size, int mode)
        {
            var emendamenti_da_firmare = new List <Guid>();

            var notifiche = await PRContext
                            .NOTIFICHE
                            .Where(n => n.UIDAtto == id && !n.Chiuso && n.EM.IDStato <= (int)StatiEnum.Depositato)
                            .Select(n => n.UIDNotifica)
                            .ToListAsync();

            if (notifiche.Any())
            {
                var my_em_notifiche = await PRContext
                                      .NOTIFICHE_DESTINATARI
                                      .Include(n => n.NOTIFICHE)
                                      .Where(n => n.UIDPersona == persona.UID_persona && !n.Chiuso && notifiche.Contains(n.UIDNotifica))
                                      .ToListAsync();

                foreach (var emUid in my_em_notifiche.Select(n => n.NOTIFICHE.UIDEM))
                {
                    var check_firmato = await PRContext.FIRME.AnyAsync(f =>
                                                                       f.UIDEM == emUid &&
                                                                       f.UID_persona == persona.UID_persona &&
                                                                       string.IsNullOrEmpty(f.Data_ritirofirma));

                    if (!check_firmato)
                    {
                        emendamenti_da_firmare.Add(emUid);
                    }
                }
            }

            var my_em_proponente = await PRContext
                                   .EM
                                   .Where(em => em.UIDPersonaProponente == persona.UID_persona &&
                                          !em.UIDPersonaPrimaFirma.HasValue &&
                                          em.UIDAtto == id &&
                                          em.IDStato <= (int)StatiEnum.Bozza &&
                                          !em.Eliminato)
                                   .Select(em => em.UIDEM)
                                   .ToListAsync();

            foreach (var emUid in my_em_proponente)
            {
                emendamenti_da_firmare.Add(emUid);
            }

            var result = await GetEmendamentiByArray(emendamenti_da_firmare);

            return(result
                   .Skip((page - 1) * size)
                   .Take(size));
        }
        public async Task <HttpResponseMessage> EsportaGrigliaReportExcel(Guid id, OrdinamentoEnum ordine, ClientModeEnum mode, PersonaDto persona)
        {
            try
            {
                var FilePathComplete = GetLocalPath("xlsx");

                IWorkbook workbook = new XSSFWorkbook();
                var       style    = workbook.CreateCellStyle();
                style.FillForegroundColor = HSSFColor.Grey25Percent.Index;
                style.FillPattern         = FillPattern.SolidForeground;
                var styleReport = workbook.CreateCellStyle();
                styleReport.FillForegroundColor = HSSFColor.LightGreen.Index;
                styleReport.FillPattern         = FillPattern.SolidForeground;
                styleReport.Alignment           = HorizontalAlignment.Center;
                var personeInDb = await _unitOfWork.Persone.GetAll();

                var personeInDbLight = personeInDb.Select(Mapper.Map <View_UTENTI, PersonaLightDto>).ToList();
                var emList           = await _logicEm.ScaricaEmendamenti(id, ordine, mode, persona, personeInDbLight);

                var uolaSheet =
                    await NewSheet(
                        workbook.CreateSheet(
                            nameof(ReportType.UOLA)),
                        id,
                        ReportType.UOLA,
                        emList
                        .OrderBy(em => em.OrdineVotazione)
                        .ThenBy(em => em.Rif_UIDEM)
                        .ThenBy(em => em.IDStato),
                        style,
                        styleReport);

                var pcrSheet = await NewSheet(workbook.CreateSheet(nameof(ReportType.PCR)), id, ReportType.PCR, emList
                                              .OrderBy(em => em.OrdineVotazione)
                                              .ThenBy(em => em.Rif_UIDEM)
                                              .ThenBy(em => em.IDStato),
                                              style,
                                              styleReport);

                var progSheet = await NewSheet(workbook.CreateSheet(nameof(ReportType.PROGRESSIVO)), id,
                                               ReportType.PROGRESSIVO, emList.OrderBy(em => em.Rif_UIDEM)
                                               .ThenBy(em => em.OrdinePresentazione),
                                               style,
                                               styleReport);

                return(await Response(FilePathComplete, workbook));
            }
            catch (Exception e)
            {
                Log.Error("Logic - EsportaGrigliaReportXLS", e);
                throw e;
            }
        }
Example #7
0
        public async Task <ActionResult> EsportaDOC(Guid id, OrdinamentoEnum ordine, ClientModeEnum mode)
        {
            try
            {
                var apiGateway = new ApiGateway(_Token);
                var file       = await apiGateway.Esporta.EsportaWORD(id, ordine, mode);

                return(Json(Convert.ToBase64String(file.Content), JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(Json(new ErrorResponse(e.Message), JsonRequestBehavior.AllowGet));
            }
        }
Example #8
0
        public async Task <ActionResult> EsportaDOC(Guid id, OrdinamentoEnum ordine)
        {
            try
            {
                var file = await ApiGateway.EsportaWORD(id, ordine);

                return(File(file.Content, "application/doc", file.FileName));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(Json(new ErrorResponse {
                    message = e.Message
                }, JsonRequestBehavior.AllowGet));
            }
        }
Example #9
0
        public async Task <ActionResult> EsportaXLS(Guid id, OrdinamentoEnum ordine = OrdinamentoEnum.Default,
                                                    ClientModeEnum mode             = ClientModeEnum.GRUPPI,
                                                    bool is_report = false)
        {
            try
            {
                var apiGateway = new ApiGateway(_Token);
                var file       = await apiGateway.Esporta.EsportaXLS(id, ordine, mode, is_report);

                return(Json(Convert.ToBase64String(file.Content), JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                Log.Error("EsportaXLS", e);
                return(Json(new ErrorResponse(e.Message), JsonRequestBehavior.AllowGet));
            }
        }
Example #10
0
        public async Task <ActionResult> RiepilogoEmendamenti(Guid id, ClientModeEnum mode = ClientModeEnum.GRUPPI,
                                                              OrdinamentoEnum ordine       = OrdinamentoEnum.Presentazione, ViewModeEnum view = ViewModeEnum.GRID, int page = 1,
                                                              int size = 50)
        {
            var apiGateway = new ApiGateway(_Token);
            EmendamentiViewModel model;
            var view_require_my_sign = Convert.ToBoolean(Request.QueryString["require_my_sign"]);

            if (Session["RicaricaFiltri"] is bool)
            {
                if (Convert.ToBoolean(Session["RicaricaFiltri"]))
                {
                    Session["RicaricaFiltri"] = false; //reset sessione
                    if (Session["RiepilogoEmendamenti"] is EmendamentiViewModel old_model)
                    {
                        try
                        {
                            if (HttpContext.User.IsInRole(RuoliExt.Amministratore_PEM) ||
                                HttpContext.User.IsInRole(RuoliExt.Segreteria_Assemblea))
                            {
                                return(View("RiepilogoEM_Admin", old_model));
                            }

                            return(View("RiepilogoEM", old_model));
                        }
                        catch (Exception e)
                        {
                            Session["RiepilogoEmendamenti"] = null;
                        }
                    }
                }
            }

            SetCache(page, size, ordine, view);

            var composeModel = await ComposeModel(id, mode, ordine, view, page, size, view_require_my_sign);

            Session["RiepilogoEmendamenti"] = composeModel;

            if (HttpContext.User.IsInRole(RuoliExt.Amministratore_PEM) ||
                HttpContext.User.IsInRole(RuoliExt.Segreteria_Assemblea))
            {
                return(View("RiepilogoEM_Admin", composeModel));
            }
            return(View("RiepilogoEM", composeModel));
        }
Example #11
0
        public async Task <ActionResult> EsportaXLS(Guid id, OrdinamentoEnum ordine)
        {
            try
            {
                var file = await ApiGateway.EsportaXLS(id, ordine);

                return(File(file.Content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                            file.FileName));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(Json(new ErrorResponse {
                    message = e.Message
                }, JsonRequestBehavior.AllowGet));
            }
        }
        public async Task <HttpResponseMessage> HTMLtoWORD(Guid attoUId, OrdinamentoEnum ordine, ClientModeEnum mode, PersonaDto persona)
        {
            try
            {
                var FilePathComplete = GetLocalPath("docx");

                using (var generatedDocument = new MemoryStream())
                {
                    using (var package =
                               WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
                    {
                        var mainPart = package.MainDocumentPart;
                        if (mainPart == null)
                        {
                            mainPart = package.AddMainDocumentPart();
                            new Document(new Body()).Save(mainPart);
                        }

                        var converter = new HtmlConverter(mainPart);
                        converter.ParseHtml(await ComposeWordTable(attoUId, ordine, mode, persona));

                        mainPart.Document.Save();
                    }

                    File.WriteAllBytes(FilePathComplete, generatedDocument.ToArray());
                    var result = new HttpResponseMessage(HttpStatusCode.OK)
                    {
                        Content = new ByteArrayContent(generatedDocument.ToArray())
                    };
                    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                    {
                        FileName = Path.GetFileName(FilePathComplete)
                    };
                    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/doc");

                    return(result);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public async Task <IHttpActionResult> EsportaGrigliaWord(Guid id, OrdinamentoEnum ordine, ClientModeEnum mode)
        {
            try
            {
                var session = await GetSession();

                var persona = await _logicPersone.GetPersona(session);

                var response =
                    ResponseMessage(await _logicEsporta.HTMLtoWORD(id, ordine, mode, persona));

                return(response);
            }
            catch (Exception e)
            {
                Log.Error("EsportaGrigliaDOC", e);
                return(ErrorHandler(e));
            }
        }
Example #14
0
        private void SetCache(int page, int size, OrdinamentoEnum ordine, ViewModeEnum view)
        {
            HttpContext.Cache.Insert(
                "OrdinamentoEM",
                (int)ordine,
                null,
                Cache.NoAbsoluteExpiration,
                Cache.NoSlidingExpiration,
                CacheItemPriority.NotRemovable,
                (key, value, reason) => { Console.WriteLine("Cache removed"); }
                );

            HttpContext.Cache.Insert(
                "ViewMode",
                view,
                null,
                Cache.NoAbsoluteExpiration,
                Cache.NoSlidingExpiration,
                CacheItemPriority.NotRemovable,
                (key, value, reason) => { Console.WriteLine("Cache removed"); }
                );

            HttpContext.Cache.Insert(
                "Page",
                page,
                null,
                Cache.NoAbsoluteExpiration,
                Cache.NoSlidingExpiration,
                CacheItemPriority.NotRemovable,
                (key, value, reason) => { Console.WriteLine("Cache removed"); }
                );

            HttpContext.Cache.Insert(
                "Size",
                size,
                null,
                Cache.NoAbsoluteExpiration,
                Cache.NoSlidingExpiration,
                CacheItemPriority.NotRemovable,
                (key, value, reason) => { Console.WriteLine("Cache removed"); }
                );
        }
        public static async Task <FileResponse> EsportaWORD(Guid attoUId, OrdinamentoEnum ordine, ClientModeEnum mode)
        {
            try
            {
                var requestUrl = $"{apiUrl}/emendamenti/esporta-griglia-doc?id={attoUId}&ordine={ordine}&mode={mode}";

                var lst = await GetFile(requestUrl);

                return(lst);
            }
            catch (UnauthorizedAccessException ex)
            {
                Log.Error("EsportaWORD", ex);
                throw ex;
            }
            catch (Exception ex)
            {
                Log.Error("EsportaWORD", ex);
                throw ex;
            }
        }
Example #16
0
        public async Task <ActionResult> RiepilogoEmendamenti(Guid id, ClientModeEnum mode,
                                                              OrdinamentoEnum ordine = OrdinamentoEnum.Presentazione, int page = 1, int size = 50)
        {
            HttpContext.Cache.Insert(
                "OrdinamentoEM",
                (int)ordine,
                null,
                DateTime.Now.AddMinutes(2),
                Cache.NoSlidingExpiration,
                CacheItemPriority.NotRemovable,
                (key, value, reason) => { Console.WriteLine("Cache removed"); }
                );

            var model = await ApiGateway.GetEmendamenti(id, mode, ordine, page, size);

            if (HttpContext.User.IsInRole(RuoliEnum.Amministratore_PEM) ||
                HttpContext.User.IsInRole(RuoliEnum.Segreteria_Assemblea))
            {
                //foreach (var emendamentiDto in model.Data.Results)
                //    emendamentiDto.BodyEM = await ApiGateway.GetBodyEM(emendamentiDto.UIDEM, TemplateTypeEnum.PDF);

                return(View("RiepilogoEM_Admin", model));
            }

            //foreach (var emendamentiDto in model.Data.Results)
            //    if (emendamentiDto.STATI_EM.IDStato <= (int) StatiEnum.Depositato)
            //    {
            //        if (emendamentiDto.ConteggioFirme > 0)
            //            emendamentiDto.Firmatari = await Utility.GetFirmatariEM(
            //                await ApiGateway.GetFirmatari(emendamentiDto.UIDEM, FirmeTipoEnum.TUTTE),
            //                CurrentUser.UID_persona, FirmeTipoEnum.TUTTE, true);

            //        emendamentiDto.Destinatari =
            //            await Utility.GetDestinatariNotifica(await ApiGateway.GetInvitati(emendamentiDto.UIDEM));
            //    }

            return(View("RiepilogoEM", model));
        }
        public async Task <FileResponse> EsportaXLS(Guid attoUId, OrdinamentoEnum ordine, ClientModeEnum mode,
                                                    bool is_report = false)
        {
            try
            {
                var requestUrl =
                    $"{apiUrl}/emendamenti/esporta-griglia-xls?id={attoUId}&ordine={ordine}&mode={mode}&is_report={is_report}";

                var lst = await GetFile(requestUrl, _token);

                return(lst);
            }
            catch (UnauthorizedAccessException ex)
            {
                Log.Error("EsportaXLS", ex);
                throw ex;
            }
            catch (Exception ex)
            {
                Log.Error("EsportaXLS", ex);
                throw ex;
            }
        }
Example #18
0
        public async Task <EmendamentiViewModel> Get_RichiestaPropriaFirma(Guid attoUId, ClientModeEnum mode,
                                                                           OrdinamentoEnum ordine,
                                                                           int page, int size)
        {
            try
            {
                var requestUrl = $"{apiUrl}/emendamenti/view-richiesta-propria-firma";

                var param = new Dictionary <string, object> {
                    { "CLIENT_MODE", (int)mode }
                };

                var model = new BaseRequest <AttiDto>
                {
                    id     = attoUId,
                    page   = page,
                    size   = size,
                    ordine = ordine,
                    param  = param
                };
                var body = JsonConvert.SerializeObject(model);

                var lst = JsonConvert.DeserializeObject <EmendamentiViewModel>(await Post(requestUrl, body, _token));

                return(lst);
            }
            catch (UnauthorizedAccessException ex)
            {
                Log.Error("GetEmendamenti_RichiestaPropriaFirma", ex);
                throw ex;
            }
            catch (Exception ex)
            {
                Log.Error("GetEmendamenti_RichiestaPropriaFirma", ex);
                throw ex;
            }
        }
Example #19
0
        public async Task <HttpResponseMessage> EsportaGrigliaExcel(Guid id, OrdinamentoEnum ordine, PersonaDto persona)
        {
            try
            {
                var _pathTemp = AppSettingsConfiguration.CartellaTemp;
                if (!Directory.Exists(_pathTemp))
                {
                    Directory.CreateDirectory(_pathTemp);
                }

                var nameFileXLS      = $"PEM_{DateTime.Now:ddMMyyyy_hhmmss}.xlsx";
                var FilePathComplete = Path.Combine(_pathTemp, nameFileXLS);

                var atto = await _unitOfWork.Atti.Get(id);

                using (var fs = new FileStream(FilePathComplete, FileMode.Create, FileAccess.Write))
                {
                    IWorkbook workbook   = new XSSFWorkbook();
                    var       excelSheet = workbook.CreateSheet($"{atto.TIPI_ATTO.Tipo_Atto} {atto.NAtto}");

                    var row = excelSheet.CreateRow(0);

                    if (atto.OrdineVotazione.HasValue)
                    {
                        if (atto.OrdineVotazione.Value)
                        {
                            row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("OrdineVotazione");
                        }
                    }

                    if (persona.CurrentRole == RuoliIntEnum.Amministratore_PEM)
                    {
                        row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("IDEM");
                        row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Atto");
                    }

                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Numero EM");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Data Deposito");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Stato");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Tipo");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Parte");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Articolo");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Comma");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Lettera");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Titolo");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Capo");

                    if (atto.VIS_Mis_Prog)
                    {
                        row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Missione");
                        row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Programma");
                        row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("TitoloB");
                    }

                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Proponente");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Area Politica");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Firmatari");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("Firmatari dopo deposito");
                    row.CreateCell(GetColumn(row.LastCellNum)).SetCellValue("LinkEM");

                    var emList = await _logicEm.GetEmendamenti(new BaseRequest <EmendamentiDto>
                    {
                        id     = id,
                        ordine = ordine,
                        page   = 1,
                        size   = 50
                    }, persona, (int)ClientModeEnum.GRUPPI);

                    foreach (var em in emList)
                    {
                        var rowEm = excelSheet.CreateRow(excelSheet.LastRowNum + 1);

                        if (atto.OrdineVotazione.HasValue)
                        {
                            if (atto.OrdineVotazione.Value)
                            {
                                rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.OrdineVotazione);
                            }
                        }

                        if (persona.CurrentRole == RuoliIntEnum.Amministratore_PEM)
                        {
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.UIDEM.ToString());
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                            .SetCellValue(
                                $"{atto.TIPI_ATTO.Tipo_Atto}-{atto.NAtto}-{atto.SEDUTE.legislature.num_legislatura}");
                        }

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(
                            GetNomeEM(em,
                                      em.Rif_UIDEM.HasValue
                                    ? Mapper.Map <EM, EmendamentiDto>(await _logicEm.GetEM(em.Rif_UIDEM.Value))
                                    : null));
                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(
                            !string.IsNullOrEmpty(em.DataDeposito)
                                ? Decrypt(em.DataDeposito)
                                : "--");

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                                ? $"{em.STATI_EM.IDStato}-{em.STATI_EM.Stato}"
                                : em.STATI_EM.Stato);

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                                ? $"{em.TIPI_EM.IDTipo_EM}-{em.TIPI_EM.Tipo_EM}"
                                : em.TIPI_EM.Tipo_EM);

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                                ? $"{em.PARTI_TESTO.IDParte}-{em.PARTI_TESTO.Parte}"
                                : em.PARTI_TESTO.Parte);

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(em.UIDArticolo.HasValue ? em.ARTICOLI.Articolo : "");
                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(em.UIDComma.HasValue ? em.COMMI.Comma : "");
                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(em.UIDLettera.HasValue ? em.LETTERE.Lettera : em.NLettera);

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.NTitolo);
                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.NCapo);

                        if (atto.VIS_Mis_Prog)
                        {
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.NMissione.ToString());
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.NProgramma.ToString());
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue(em.NTitoloB.ToString());
                        }

                        var proponente =
                            Mapper.Map <View_UTENTI, PersonaDto>(await _unitOfWork.Persone.Get(em.UIDPersonaProponente.Value));
                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue(persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                                ? $"{proponente.id_persona}-{proponente.DisplayName}"
                                : proponente.DisplayName);

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue("");

                        if (!string.IsNullOrEmpty(em.DataDeposito))
                        {
                            var firme = await _logicFirme.GetFirme(Mapper.Map <EmendamentiDto, EM>(em),
                                                                   FirmeTipoEnum.TUTTE);

                            var firmeDto = firme.Select(Mapper.Map <FIRME, FirmeDto>)
                                           .ToList();

                            var firmeAnte = firmeDto.Where(f =>
                                                           f.Timestamp < Convert.ToDateTime(Decrypt(em.DataDeposito)));
                            var firmePost = firmeDto.Where(f =>
                                                           f.Timestamp > Convert.ToDateTime(Decrypt(em.DataDeposito)));

                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                            .SetCellValue(GetFirmatariEM_OPENDATA(firmeAnte,
                                                                  persona.CurrentRole));
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                            .SetCellValue(GetFirmatariEM_OPENDATA(firmePost,
                                                                  persona.CurrentRole));
                        }
                        else
                        {
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue("--");
                            rowEm.CreateCell(GetColumn(rowEm.LastCellNum)).SetCellValue("--");
                        }

                        rowEm.CreateCell(GetColumn(rowEm.LastCellNum))
                        .SetCellValue($"{AppSettingsConfiguration.urlPEM}/{em.UID_QRCode}");
                    }

                    workbook.Write(fs);
                }

                var stream = new MemoryStream();
                using (var fileStream = new FileStream(FilePathComplete, FileMode.Open))
                {
                    await fileStream.CopyToAsync(stream);
                }

                stream.Position = 0;
                var result = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new ByteArrayContent(stream.GetBuffer())
                };
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = nameFileXLS
                };
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

                return(result);
            }
            catch (Exception e)
            {
                Log.Error("Logic - EsportaGrigliaXLS", e);
                throw e;
            }
        }
        /// <summary>
        ///     Ritorna la query emednamenti da stampare
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="persona"></param>
        /// <param name="ordine"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public string GetAll_Query(Guid attoUId, PersonaDto persona, OrdinamentoEnum ordine, Filter <EM> filtro = null, int CLIENT_MODE = (int)ClientModeEnum.GRUPPI)
        {
            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 (CLIENT_MODE == (int)ClientModeEnum.TRATTAZIONE ||
                (persona.CurrentRole == RuoliIntEnum.Amministratore_PEM ||
                 persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea ||
                 persona.CurrentRole == RuoliIntEnum.Presidente_Regione))
            {
                switch (ordine)
                {
                case OrdinamentoEnum.Default:
                case OrdinamentoEnum.Presentazione:
                    query = query.OrderBy(em => em.Rif_UIDEM)
                            .ThenBy(em => em.OrdinePresentazione)
                            .ThenBy(em => em.IDStato);
                    break;

                case OrdinamentoEnum.Votazione:
                    query = query.OrderBy(em => em.OrdineVotazione)
                            .ThenBy(em => em.Rif_UIDEM)
                            .ThenBy(em => em.IDStato);
                    break;

                default:
                    query = query.OrderBy(em => em.IDStato).ThenBy(em => em.DataCreazione);
                    break;
                }
            }
            else
            {
                query = query.OrderBy(em => em.IDStato).ThenBy(em => em.Timestamp).ThenBy(em => em.Progressivo).ThenBy(em => em.SubProgressivo);
            }

            var sql = query.ToTraceQuery();

            return(sql);
        }
        /// <summary>
        ///     Riepilogo emendamenti
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="persona"></param>
        /// <param name="ordine"></param>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <param name="CLIENT_MODE"></param>
        /// <param name="filtro"></param>
        /// <param name="firmatari"></param>
        /// <param name="requireMySign"></param>
        /// <returns></returns>
        public async Task <IEnumerable <Guid> > GetAll(Guid attoUId, PersonaDto persona, OrdinamentoEnum ordine, int?page,
                                                       int?size, 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)
            {
                var atto = await PRContext
                           .ATTI
                           .SingleAsync(a => a.UIDAtto == attoUId);

                if (atto.OrdinePresentazione == false && ordine == OrdinamentoEnum.Presentazione)
                {
                    return(new List <Guid>());
                }

                if (atto.OrdineVotazione == false && ordine == OrdinamentoEnum.Votazione)
                {
                    return(new List <Guid>());
                }

                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));
                }
            }

            if (CLIENT_MODE == (int)ClientModeEnum.TRATTAZIONE ||
                (persona.CurrentRole == RuoliIntEnum.Amministratore_PEM ||
                 persona.CurrentRole == RuoliIntEnum.Segreteria_Assemblea ||
                 persona.CurrentRole == RuoliIntEnum.Presidente_Regione))
            {
                switch (ordine)
                {
                case OrdinamentoEnum.Presentazione:
                    query = query.OrderBy(em => em.OrdinePresentazione);
                    break;

                case OrdinamentoEnum.Votazione:
                    query = query.OrderBy(em => em.OrdineVotazione);
                    break;

                default:
                    query = query.OrderBy(em => em.IDStato).ThenByDescending(em => em.DataCreazione);
                    break;
                }
            }
            else
            {
                query = query.OrderBy(em => em.IDStato).ThenBy(em => em.Timestamp).ThenBy(em => em.Progressivo).ThenBy(em => em.SubProgressivo);
            }

            return(await query
                   .Select(em => em.UIDEM)
                   .Skip((page.Value - 1) * size.Value)
                   .Take(size.Value)
                   .ToListAsync());
        }
Example #22
0
        private async Task <EmendamentiViewModel> ComposeModel(Guid id, ClientModeEnum mode,
                                                               OrdinamentoEnum ordine, ViewModeEnum view, int page,
                                                               int size, bool view_require_my_sign)
        {
            try
            {
                var apiGateway = new ApiGateway(_Token);
                EmendamentiViewModel model;
                if (view_require_my_sign == false)
                {
                    model = await apiGateway.Emendamento.Get(id, mode, ordine, page, size);
                }
                else
                {
                    model = await apiGateway.Emendamento.Get_RichiestaPropriaFirma(id, mode, ordine, page, size);
                }
                model.ViewMode = view;
                if (view == ViewModeEnum.PREVIEW)
                {
                    foreach (var emendamentiDto in model.Data.Results)
                    {
                        emendamentiDto.BodyEM =
                            await apiGateway.Emendamento.GetBody(emendamentiDto.UIDEM, TemplateTypeEnum.HTML);
                    }
                }

                if (HttpContext.User.IsInRole(RuoliExt.Amministratore_PEM) ||
                    HttpContext.User.IsInRole(RuoliExt.Segreteria_Assemblea))
                {
                    return(model);
                }

                if (mode == ClientModeEnum.GRUPPI)
                {
                    foreach (var emendamentiDto in model.Data.Results)
                    {
                        if (emendamentiDto.IDStato <= (int)StatiEnum.Depositato)
                        {
                            if (emendamentiDto.ConteggioFirme > 0)
                            {
                                emendamentiDto.Firmatari = await Utility.GetFirmatariEM(
                                    await apiGateway.Emendamento.GetFirmatari(emendamentiDto.UIDEM,
                                                                              FirmeTipoEnum.TUTTE),
                                    _CurrentUser.UID_persona, FirmeTipoEnum.TUTTE, _Token, true);
                            }

                            emendamentiDto.Destinatari =
                                await Utility.GetDestinatariNotifica(
                                    await apiGateway.Emendamento.GetInvitati(emendamentiDto.UIDEM), _Token);
                        }
                    }
                }

                return(model);
            }
            catch (Exception e)
            {
                Log.Error("ComposeModel", e);
                throw;
            }
        }
Example #23
0
        public async Task <HttpResponseMessage> EsportaGrigliaWord(Guid id, OrdinamentoEnum ordine, PersonaDto persona)
        {
            try
            {
                var _pathTemp = AppSettingsConfiguration.CartellaTemp;
                if (!Directory.Exists(_pathTemp))
                {
                    Directory.CreateDirectory(_pathTemp);
                }

                var nameFileDOC      = $"EstrazioneEM_{DateTime.Now:ddMMyyyy_hhmmss}.docx";
                var FilePathComplete = Path.Combine(_pathTemp, nameFileDOC);

                var atto = await _unitOfWork.Atti.Get(id);

                using (var fs = new FileStream(FilePathComplete, FileMode.Create, FileAccess.Write))
                {
                    var doc  = new XWPFDocument();
                    var para = doc.CreateParagraph();
                    para.Alignment = ParagraphAlignment.CENTER;
                    var r0 = para.CreateRun();
                    r0.IsBold = true;
                    r0.SetText($"{atto.TIPI_ATTO.Tipo_Atto} {atto.NAtto}");

                    var table = doc.CreateTable(1, 7);

                    #region HEADERS

                    var c0          = table.GetRow(0).GetCell(0);
                    var headerCell0 = c0.AddParagraph();
                    headerCell0.Alignment = ParagraphAlignment.CENTER;
                    var headerCell0_Run = headerCell0.CreateRun();
                    headerCell0_Run.IsBold = true;
                    headerCell0_Run.SetText("Ordine di Votazione");

                    var c1          = table.GetRow(0).GetCell(1);
                    var headerCell1 = c1.AddParagraph();
                    headerCell1.Alignment = ParagraphAlignment.CENTER;
                    var headerCell1_Run = headerCell1.CreateRun();
                    headerCell1_Run.IsBold = true;
                    headerCell1_Run.SetText("N.EM/SUBEM");

                    var c2          = table.GetRow(0).GetCell(2);
                    var headerCell2 = c2.AddParagraph();
                    headerCell2.Alignment = ParagraphAlignment.CENTER;
                    var headerCell2_Run = headerCell2.CreateRun();
                    headerCell2_Run.IsBold = true;
                    headerCell2_Run.SetText("Testo EM/SUBEM");

                    var c3          = table.GetRow(0).GetCell(3);
                    var headerCell3 = c3.AddParagraph();
                    headerCell3.Alignment = ParagraphAlignment.CENTER;
                    var headerCell3_Run = headerCell3.CreateRun();
                    headerCell3_Run.IsBold = true;
                    headerCell3_Run.SetText("Relazione Illustrativa");

                    var c4          = table.GetRow(0).GetCell(4);
                    var headerCell4 = c4.AddParagraph();
                    headerCell4.Alignment = ParagraphAlignment.CENTER;
                    var headerCell4_Run = headerCell4.CreateRun();
                    headerCell4_Run.IsBold = true;
                    headerCell4_Run.SetText("Proponente");

                    var c5          = table.GetRow(0).GetCell(5);
                    var headerCell5 = c5.AddParagraph();
                    headerCell5.Alignment = ParagraphAlignment.CENTER;
                    var headerCell5_Run = headerCell5.CreateRun();
                    headerCell5_Run.IsBold = true;
                    headerCell5_Run.SetText("Firme prima del deposito");

                    var c6          = table.GetRow(0).GetCell(6);
                    var headerCell6 = c6.AddParagraph();
                    headerCell6.Alignment = ParagraphAlignment.CENTER;
                    var headerCell6_Run = headerCell6.CreateRun();
                    headerCell6_Run.IsBold = true;
                    headerCell6_Run.SetText("Stato");

                    #endregion

                    var emList = await _logicEm.GetEmendamenti(new BaseRequest <EmendamentiDto>
                    {
                        id     = id,
                        ordine = ordine,
                        page   = 1,
                        size   = 50
                    }, persona,
                                                               (int)ClientModeEnum.GRUPPI);

                    foreach (var em in emList)
                    {
                        var row = table.CreateRow();

                        var c0_em          = row.GetCell(0);
                        var headerCell0_em = c0_em.AddParagraph();
                        headerCell0_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell0_Run_em = headerCell0_em.CreateRun();
                        headerCell0_Run_em.SetText(em.OrdineVotazione.ToString());

                        var c1_em          = row.GetCell(1);
                        var headerCell1_em = c1_em.AddParagraph();
                        headerCell1_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell1_Run_em = headerCell1_em.CreateRun();
                        headerCell1_Run_em.SetText(GetNomeEM(em,
                                                             em.Rif_UIDEM.HasValue
                                ? Mapper.Map <EM, EmendamentiDto>(await _logicEm.GetEM(em.Rif_UIDEM.Value))
                                : null));

                        var c2_em          = row.GetCell(2);
                        var headerCell2_em = c2_em.AddParagraph();
                        headerCell2_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell2_Run_em = headerCell2_em.CreateRun();
                        headerCell2_Run_em.SetText(em.TestoEM_originale);

                        var c3_em          = row.GetCell(3);
                        var headerCell3_em = c3_em.AddParagraph();
                        headerCell3_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell3_Run_em = headerCell3_em.CreateRun();
                        headerCell3_Run_em.SetText(string.IsNullOrEmpty(em.TestoREL_originale)
                            ? ""
                            : em.TestoREL_originale);

                        var proponente =
                            await _logicPersone.GetPersona(em.UIDPersonaProponente.Value,
                                                           em.id_gruppo >= AppSettingsConfiguration.GIUNTA_REGIONALE_ID);

                        var c4_em          = row.GetCell(4);
                        var headerCell4_em = c4_em.AddParagraph();
                        headerCell4_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell4_Run_em = headerCell4_em.CreateRun();
                        headerCell4_Run_em.SetText(proponente.DisplayName);

                        var firme = await _logicFirme.GetFirme(Mapper.Map <EmendamentiDto, EM>(em), FirmeTipoEnum.TUTTE);

                        var firmeDto = firme.Select(Mapper.Map <FIRME, FirmeDto>).ToList();

                        var firmeAnte = firmeDto.Where(f =>
                                                       f.Timestamp < Convert.ToDateTime(Decrypt(em.DataDeposito)));

                        var c5_em          = row.GetCell(5);
                        var headerCell5_em = c5_em.AddParagraph();
                        headerCell5_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell5_Run_em = headerCell5_em.CreateRun();
                        headerCell5_Run_em.SetText(GetFirmatariEM_OPENDATA(firmeAnte,
                                                                           persona.CurrentRole));

                        var c6_em          = row.GetCell(6);
                        var headerCell6_em = c6_em.AddParagraph();
                        headerCell6_em.Alignment = ParagraphAlignment.CENTER;
                        var headerCell6_Run_em = headerCell6_em.CreateRun();
                        headerCell6_Run_em.SetText(em.STATI_EM.Stato);
                    }

                    doc.Write(fs);
                }

                var stream = new MemoryStream();
                using (var fileStream = new FileStream(FilePathComplete, FileMode.Open))
                {
                    await fileStream.CopyToAsync(stream);
                }

                stream.Position = 0;
                var result = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new ByteArrayContent(stream.GetBuffer())
                };
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = nameFileDOC
                };
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

                return(result);
            }
            catch (Exception e)
            {
                Log.Error("Logic - EsportaGrigliaXLS", e);
                throw e;
            }
        }
Example #24
0
        /// <summary>
        ///     Riepilogo emendamenti
        /// </summary>
        /// <param name="attoUId"></param>
        /// <param name="persona"></param>
        /// <param name="ordine"></param>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public async Task <IEnumerable <EM> > GetAll(Guid attoUId, PersonaDto persona, OrdinamentoEnum ordine, int?page,
                                                     int?size, 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 (ordine)
            {
            case OrdinamentoEnum.Presentazione:
                query = query.OrderBy(em => em.SubProgressivo).ThenBy(em => em.Timestamp);
                break;

            case OrdinamentoEnum.Votazione:
                query = query.OrderBy(em => em.OrdineVotazione);
                break;

            default:
                query = query.OrderBy(em => em.IDStato)
                        .ThenBy(em => em.Progressivo)
                        .ThenBy(em => em.SubProgressivo);
                break;
            }

            return(await query
                   .Skip((page.Value - 1) *size.Value)
                   .Take(size.Value)
                   .ToListAsync());
        }
        public async Task <HttpResponseMessage> EsportaGrigliaExcel(Guid id, OrdinamentoEnum ordine, ClientModeEnum mode, PersonaDto persona)
        {
            try
            {
                var FilePathComplete = GetLocalPath("xlsx");

                var atto = await _unitOfWork.Atti.Get(id);


                IWorkbook workbook   = new XSSFWorkbook();
                var       excelSheet = workbook.CreateSheet($"{atto.TIPI_ATTO.Tipo_Atto} {atto.NAtto}");

                var row = excelSheet.CreateRow(0);
                SetColumnValue(ref row, "Ordine");
                if (persona.CurrentRole == RuoliIntEnum.Amministratore_PEM)
                {
                    SetColumnValue(ref row, "IDEM");
                    SetColumnValue(ref row, "Atto");
                }

                SetColumnValue(ref row, "Numero EM");
                SetColumnValue(ref row, "Data Deposito");
                SetColumnValue(ref row, "Stato");
                SetColumnValue(ref row, "Tipo");
                SetColumnValue(ref row, "Parte");
                SetColumnValue(ref row, "Articolo");
                SetColumnValue(ref row, "Comma");
                SetColumnValue(ref row, "Lettera");
                SetColumnValue(ref row, "Titolo");
                SetColumnValue(ref row, "Capo");

                if (atto.VIS_Mis_Prog)
                {
                    SetColumnValue(ref row, "Missione");
                    SetColumnValue(ref row, "Programma");
                    SetColumnValue(ref row, "TitoloB");
                }

                SetColumnValue(ref row, "Proponente");
                SetColumnValue(ref row, "Area Politica");
                SetColumnValue(ref row, "Firmatari");
                SetColumnValue(ref row, "Firmatari dopo deposito");
                SetColumnValue(ref row, "LinkEM");

                var personeInDb = await _unitOfWork.Persone.GetAll();

                var personeInDbLight = personeInDb.Select(Mapper.Map <View_UTENTI, PersonaLightDto>).ToList();
                var emList           = await _logicEm.ScaricaEmendamenti(id, ordine, mode, persona, personeInDbLight, false, true);

                var totalProcessTime = 0f;
                foreach (var em in emList)
                {
                    var startTimer = DateTime.Now;
                    var rowEm      = excelSheet.CreateRow(excelSheet.LastRowNum + 1);

                    if (ordine == OrdinamentoEnum.Presentazione)
                    {
                        SetColumnValue(ref rowEm, em.OrdinePresentazione.ToString());
                    }
                    else if (ordine == OrdinamentoEnum.Votazione)
                    {
                        SetColumnValue(ref rowEm, em.OrdineVotazione.ToString());
                    }

                    if (persona.CurrentRole == RuoliIntEnum.Amministratore_PEM)
                    {
                        SetColumnValue(ref rowEm, em.UIDEM.ToString());
                        var legislatura = await _unitOfWork.Legislature.Get(atto.SEDUTE.id_legislatura);

                        SetColumnValue(ref rowEm,
                                       $"{atto.TIPI_ATTO.Tipo_Atto}-{atto.NAtto}-{legislatura.num_legislatura}");
                    }

                    SetColumnValue(ref rowEm, em.N_EM);
                    SetColumnValue(ref rowEm, em.DataDeposito);
                    SetColumnValue(ref rowEm, persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                        ? $"{em.STATI_EM.IDStato}-{em.STATI_EM.Stato}"
                        : em.STATI_EM.Stato);

                    SetColumnValue(ref rowEm, persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                        ? $"{em.TIPI_EM.IDTipo_EM}-{em.TIPI_EM.Tipo_EM}"
                        : em.TIPI_EM.Tipo_EM);

                    SetColumnValue(ref rowEm, persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                        ? $"{em.IDParte}-{em.PARTI_TESTO.Parte}"
                        : em.PARTI_TESTO.Parte);

                    SetColumnValue(ref rowEm,
                                   em.UIDArticolo.HasValue && em.UIDArticolo.Value != Guid.Empty ? em.ARTICOLI.Articolo : "");
                    SetColumnValue(ref rowEm,
                                   em.UIDComma.HasValue && em.UIDComma.Value != Guid.Empty ? em.COMMI.Comma : "");
                    SetColumnValue(ref rowEm,
                                   em.UIDLettera.HasValue && em.UIDLettera.Value != Guid.Empty ? em.LETTERE.Lettera : em.NLettera);
                    SetColumnValue(ref rowEm, em.NTitolo);
                    SetColumnValue(ref rowEm, em.NCapo);

                    if (atto.VIS_Mis_Prog)
                    {
                        SetColumnValue(ref rowEm, em.NMissione.ToString());
                        SetColumnValue(ref rowEm, em.NProgramma.ToString());
                        SetColumnValue(ref rowEm, em.NTitoloB.ToString());
                    }

                    SetColumnValue(ref rowEm, persona.CurrentRole == RuoliIntEnum.Amministratore_PEM
                        ? $"{em.PersonaProponente.UID_persona}-{em.PersonaProponente.DisplayName}"
                        : em.PersonaProponente.DisplayName);
                    SetColumnValue(ref rowEm, "");

                    if (!string.IsNullOrEmpty(em.DataDeposito))
                    {
                        var firme = await _logicFirme.GetFirme((EM)em, FirmeTipoEnum.TUTTE);

                        var firmeDto = firme.ToList();

                        var firmatari_opendata_ante = "--";
                        try
                        {
                            if (firmeDto.Any(f =>
                                             f.Timestamp < Convert.ToDateTime(em.DataDeposito)))
                            {
                                firmatari_opendata_ante = await _logicEm.GetFirmatariEM_OPENDATA(firmeDto.Where(f =>
                                                                                                                f.Timestamp < Convert.ToDateTime(em.DataDeposito)),
                                                                                                 persona.CurrentRole, personeInDbLight);
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }

                        var firmatari_opendata_post = "--";
                        try
                        {
                            if (firmeDto.Any(f =>
                                             f.Timestamp > Convert.ToDateTime(em.DataDeposito)))
                            {
                                firmatari_opendata_post = await _logicEm.GetFirmatariEM_OPENDATA(firmeDto.Where(f =>
                                                                                                                f.Timestamp > Convert.ToDateTime(em.DataDeposito)),
                                                                                                 persona.CurrentRole, personeInDbLight);
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }

                        SetColumnValue(ref rowEm, firmatari_opendata_ante);
                        SetColumnValue(ref rowEm, firmatari_opendata_post);
                    }
                    else
                    {
                        SetColumnValue(ref rowEm, "--");
                        SetColumnValue(ref rowEm, "--");
                    }

                    SetColumnValue(ref rowEm, $"{AppSettingsConfiguration.urlPEM_ViewEM}{em.UID_QRCode}");
                    var spentTime = Math.Round((DateTime.Now - startTimer).TotalSeconds, 2);
                    totalProcessTime += (float)spentTime;
                }
                Log.Debug($"EsportaGrigliaXLS: Compilazione XLS eseguita in {totalProcessTime} s");

                Console.WriteLine($"Excel row count: {excelSheet.LastRowNum}");
                return(await Response(FilePathComplete, workbook));
            }
            catch (Exception e)
            {
                Log.Error("Logic - EsportaGrigliaXLS", e);
                throw e;
            }
        }