コード例 #1
0
        public void GetRuoliRiferimentoEsterni(out DataSet dataSet, DocsPaVO.addressbook.QueryCorrispondenteAutorizzato qc, DocsPaVO.utente.UnitaOrganizzativa uo)
        {
            DocsPaUtils.Query q        = DocsPaUtils.InitQuery.getInstance().getQuery("S_J_DPA_CORR_GLOBALI__TIPO_RUOLO3");
            string            idUO     = uo.systemId;
            string            strWhere = "";

            //condizione sulle autorizzazioni (registro, nodo di titolario)
            //condizione sulla gerarchia
            //elisa e sabri
            System.Collections.ArrayList ListaUO = new System.Collections.ArrayList();
            if (qc.ragione.tipoDestinatario.ToString() == DocsPaVO.trasmissione.TipoGerarchia.SUPERIORE.ToString())
            {
                DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                ListaUO = gerarchia.getParentUO(qc.ruolo);
                ListaUO.Add(qc.ruolo.uo.systemId);
            }
            else if (qc.ragione.tipoDestinatario.ToString() == DocsPaVO.trasmissione.TipoGerarchia.INFERIORE.ToString())
            {
                DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                ListaUO = gerarchia.getChildrenUO(qc.ruolo);
                ListaUO.Add(qc.ruolo.uo.systemId);
            }
            else if (qc.ragione.tipoDestinatario.ToString() == DocsPaVO.trasmissione.TipoGerarchia.PARILIVELLO.ToString())
            {
                DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                ListaUO = gerarchia.getPariUO(qc.ruolo);
                ListaUO.Add(qc.ruolo.uo.systemId);
            }
            else
            {
                //				DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                ListaUO = null;
                //				ListaUO.Add(qc.ruolo.uo.systemId);
            }


            //			strWhere = getQueryAut(qc.tipoOggetto,qc.idRegistro,qc.idNodoTitolario,qc.ruolo,null,qc.ragione.tipoDestinatario.ToString());
            strWhere  = getQueryAut(qc.tipoOggetto, null, qc.idNodoTitolario, qc.ruolo, ListaUO, qc.ragione.tipoDestinatario.ToString());
            strWhere += " AND A.CHA_TIPO_URP='R' AND A.ID_UO=" + idUO + " AND A.CHA_TIPO_IE = 'I'";
            if (qc.queryCorrispondente != null && qc.queryCorrispondente.fineValidita)
            {
                strWhere += " AND A.DTA_FINE IS NULL";
            }
            q.setParam("param1", strWhere);
            string sql = q.getSQL();

            logger.Debug(sql);
            this.ExecuteQuery(out dataSet, "RUOLI_RIF_EST", sql);
        }
コード例 #2
0
        public void filtra_trasmissioni(DocsPaVO.rubrica.ParametriRicercaRubrica qr, ref ArrayList ers)
        {
            ArrayList a = new ArrayList();
            ArrayList ruoli_autorizzati = new ArrayList();

            DocsPaVO.trasmissione.TipoOggetto tipo_oggetto;
            tipo_oggetto = (qr.ObjectType.StartsWith("F:")) ? DocsPaVO.trasmissione.TipoOggetto.FASCICOLO : DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO;
            string id_nodo_titolario = (tipo_oggetto == DocsPaVO.trasmissione.TipoOggetto.FASCICOLO) ? qr.ObjectType.Substring(2) : null;

            DocsPaVO.utente.Ruolo    r = BusinessLogic.Utenti.UserManager.getRuolo(qr.caller.IdRuolo);
            DocsPaDB.Utils.Gerarchia g = new DocsPaDB.Utils.Gerarchia();

            switch (qr.calltype)
            {
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_ALL:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_ALL:
                ruoli_autorizzati = g.getRuoliAut(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_SUP:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_SUP:
                ruoli_autorizzati = g.getGerarchiaSup(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_INF:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_INF:
                ruoli_autorizzati = g.getGerarchiaInf(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_MODELLI_TRASM_PARILIVELLO:
            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_TRASM_PARILIVELLO:
                ruoli_autorizzati = g.getGerarchiaPariLiv(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                break;

            case DocsPaVO.rubrica.ParametriRicercaRubrica.CallType.CALLTYPE_PROTO_INT_DEST:
                DocsPaVO.trasmissione.RagioneTrasmissione rTo = BusinessLogic.Trasmissioni.RagioniManager.GetRagione("TO", _user.idAmministrazione);
                DocsPaVO.trasmissione.TipoGerarchia       gTo = rTo.tipoDestinatario;

                switch (gTo)
                {
                case DocsPaVO.trasmissione.TipoGerarchia.INFERIORE:
                    ruoli_autorizzati = g.getGerarchiaInf(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                    break;

                case DocsPaVO.trasmissione.TipoGerarchia.PARILIVELLO:
                    ruoli_autorizzati = g.getGerarchiaPariLiv(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                    break;

                case DocsPaVO.trasmissione.TipoGerarchia.SUPERIORE:
                    ruoli_autorizzati = g.getGerarchiaSup(r, qr.caller.IdRegistro, id_nodo_titolario, tipo_oggetto);
                    break;

                case DocsPaVO.trasmissione.TipoGerarchia.TUTTI:
                    ruoli_autorizzati = g.getRuoliAut(r, qr.caller.IdRegistro, null, tipo_oggetto);
                    break;
                }
                break;

            default:
                return;
            }
            string[] c_ruoli_aut = new string[ruoli_autorizzati.Count];
            for (int i = 0; i < ruoli_autorizzati.Count; i++)
            {
                c_ruoli_aut[i] = ((DocsPaVO.utente.Ruolo)ruoli_autorizzati[i]).codiceRubrica;
            }

            Array.Sort(c_ruoli_aut);

            foreach (DocsPaVO.rubrica.ElementoRubrica er in ers)
            {
                try
                {
                    switch (er.tipo)
                    {
                    case "U":
                        if (uo_is_autorizzata((er.interno ? "I" : "E") + @"\" + er.codice, r, c_ruoli_aut) || (qr.ObjectType == "G"))
                        {
                            a.Add(er);
                        }
                        break;

                    case "R":
                        if (ruolo_is_autorizzato(er.codice, c_ruoli_aut) || (qr.ObjectType == "G"))
                        {
                            a.Add(er);
                        }
                        break;

                    case "P":
                        if (utente_is_autorizzato((er.interno ? "I" : "E") + @"\" + er.codice, c_ruoli_aut) || (qr.ObjectType == "G"))
                        {
                            a.Add(er);
                        }
                        break;

                    case "L":
                    case "F":
                        //if (utente_is_autorizzato ((er.interno ? "I" : "E") + @"\" + er.codice, c_ruoli_aut) || (qr.ObjectType == "G"))
                        a.Add(er);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            ers = a;
        }
コード例 #3
0
        public string GeneratePrintByRanges(string anno, string counterId, string numRepStart, string numRepEnd, string idRegistro, string dataStampa, bool ultimastampa)
        {
            string retVal = "";

            logger.Info("START");
            DocsPaDB.Query_DocsPAWS.Conservazione dbCons = new DocsPaDB.Query_DocsPAWS.Conservazione();

            // uguale al metodo precedente tranne che per questo pezzo.
            //DocsPaVO.areaConservazione.StampaRegistro stReg = dbCons.getInfoStampaReperiorio(idDoc);

            DocsPaVO.areaConservazione.StampaRegistro stReg = new DocsPaVO.areaConservazione.StampaRegistro();

            stReg.anno          = anno;
            stReg.idRepertorio  = counterId;
            stReg.numProtoStart = numRepStart;
            if (!string.IsNullOrEmpty(numRepEnd))
            {
                stReg.numProtoEnd = numRepEnd;
            }
            stReg.idRegistro           = idRegistro;
            stReg.dtaStampaTruncString = dataStampa;

            DocsPaDB.Query_DocsPAWS.RegistriRepertorioPrintManager manager = new DocsPaDB.Query_DocsPAWS.RegistriRepertorioPrintManager();

            List <RegistroRepertorioPrint> reg1 = manager.GetRegistersToPrintByCounter(stReg.idRepertorio);

            foreach (RegistroRepertorioPrint print in reg1)
            {
                if (print.RegistryId == stReg.idRegistro || print.RFId == stReg.idRegistro)
                {
                    logger.DebugFormat("Stampa del repertorio {0} della tipologia {5}, per l'anno {1}, su registro {2} o RF {3}, responsabile {4}",
                                       print.CounterDescription, stReg.anno, print.RegistryId, print.RFId, print.PrinterUser.userId, print.TipologyDescription);

                    InfoUtente userInfo = new InfoUtente()
                    {
                        idAmministrazione = print.PrinterUser.idAmministrazione,
                        idCorrGlobali     = print.PrinterUser.systemId,
                        idGruppo          = print.PrinterRole.idGruppo,
                        idPeople          = print.PrinterUser.idPeople,
                        userId            = print.PrinterUser.userId
                    };

                    //RepertorioPrintRange rpr = manager.GetRepertoriPrintRangesByYear(counterId, print.RegistryId, print.RFId, year);
                    // Generazione filtri per la stampa
                    List <FiltroRicerca> filters = null;
                    string minX = stReg.numProtoStart;
                    if (!ultimastampa)
                    {
                        string maxX = stReg.numProtoEnd;
                        logger.DebugFormat("Limite inferiore {0}, superiore {1}", minX, maxX);

                        filters = new List <FiltroRicerca>()
                        {
                            new FiltroRicerca()
                            {
                                argomento = "idCounter", valore = stReg.idRepertorio
                            },
                            new FiltroRicerca()
                            {
                                argomento = "idRegistry", valore = print.RegistryId
                            },
                            new FiltroRicerca()
                            {
                                argomento = "idRf", valore = print.RFId
                            },
                            new FiltroRicerca()
                            {
                                argomento = "year", valore = stReg.anno
                            },
                            new FiltroRicerca()
                            {
                                argomento = "lastPrintedNumber", valore = minX
                            },
                            new FiltroRicerca()
                            {
                                argomento = "lastNumberToPrint", valore = maxX
                            },
                            new FiltroRicerca()
                            {
                                argomento = "RECUPERO_evitaMod", valore = "true"
                            }
                        };
                    }
                    else
                    {
                        logger.DebugFormat("Limite inferiore {0}", minX);

                        filters = new List <FiltroRicerca>()
                        {
                            new FiltroRicerca()
                            {
                                argomento = "idCounter", valore = stReg.idRepertorio
                            },
                            new FiltroRicerca()
                            {
                                argomento = "idRegistry", valore = print.RegistryId
                            },
                            new FiltroRicerca()
                            {
                                argomento = "idRf", valore = print.RFId
                            },
                            new FiltroRicerca()
                            {
                                argomento = "year", valore = stReg.anno
                            },
                            new FiltroRicerca()
                            {
                                argomento = "lastPrintedNumber", valore = minX
                            }
                        };
                    }

                    // Creazione della stampa
                    FileDocumento fileDocument = BusinessLogic.Reporting.ReportGeneratorCommand.GetReport(
                        new DocsPaVO.Report.PrintReportRequest()
                    {
                        UserInfo              = userInfo,
                        SearchFilters         = filters,
                        ReportType            = DocsPaVO.Report.ReportTypeEnum.PDF,
                        ReportKey             = "StampaRegistriRepertori",
                        ContextName           = "StampaRegistriRepertori",
                        AdditionalInformation = String.Format(" Stampa del repertorio per l'anno {0} dal n. {1} al n. {2} - stampa di recupero del giorno {3}. La presente stampa riporta tutte le registrazioni giornaliere di repertorio nell'intervallo indicato. Si è resa necessaria in quanto problematiche tecniche del sistema avevano inizialmente impedito la corretta stampa.", stReg.anno, minX, numRepEnd, dataStampa)
                    }).Document;

                    using (DocsPaDB.TransactionContext transactionContext = new DocsPaDB.TransactionContext())
                    {
                        if (userInfo != null && string.IsNullOrEmpty(userInfo.dst))
                        {
                            userInfo.dst = BusinessLogic.Utenti.UserManager.getSuperUserAuthenticationToken();
                        }

                        // Reperimento del nome della tipologia
                        string tipologia = manager.GetNomeTipologia(stReg.idRepertorio);

                        // Creazione della scheda documento
                        SchedaDocumento document = InitializeDocument(userInfo, print.RegistryId, print.RFId, stReg.anno, minX, numRepEnd, tipologia);
                        document.oggetto.descrizione += " - RECUPERO";

                        Ruolo[] roles = new Ruolo[] { };
                        // Salvataggio del documento
                        String docNumber = this.SaveDocument(userInfo, print.PrinterRole, document, fileDocument, out roles);

                        if (String.IsNullOrEmpty(docNumber))
                        {
                            throw new Exception("Errore durante la creazione della stampa");
                        }

                        retVal = docNumber;

                        // Aggiornamento del registro delle stampe e del prossimo numero da stampare
                        if (!manager.UpdatePrinterManager(stReg.idRepertorio, minX, numRepEnd, docNumber, print.RegistryId, print.RFId, stReg.anno))
                        {
                            throw new Exception("Errore durante l'aggiornamento dell'anagrafica delle stampe effettuate");
                        }

                        int rights = 0;
                        // Assegnazione della visibilità della stampa al responsabile di repertorio (se impostato)
                        if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToResponsable(userInfo, docNumber, stReg.idRepertorio, print.RFId, print.RegistryId, out rights))
                        {
                            throw new Exception("Errore assegnazione visiblità a ruolo responsabile");
                        }

                        // Se ci sono ruoli superiori, viene assegnata la visibilità
                        foreach (Ruolo r in roles)
                        {
                            if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToRole(userInfo, docNumber, stReg.idRepertorio, print.RFId, print.RegistryId, r.idGruppo, rights))
                            {
                                throw new Exception(String.Format("Errore assegnazione visiblità al ruolo {0}", r.codice));
                            }
                        }

                        //assegnazione visibilità nel caso di repertori di tipologia/RF
                        if ((string.IsNullOrEmpty(print.RFId) && string.IsNullOrEmpty(print.RegistryId)) ||
                            (!string.IsNullOrEmpty(print.RFId)))
                        {
                            DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                            object[] supRolePrinter            = gerarchia.getGerarchiaSup(print.PrinterRole, ((DocsPaVO.utente.Registro)print.PrinterRole.registri[0]).systemId, null, DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO).ToArray();
                            foreach (Ruolo r in supRolePrinter)
                            {
                                if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToRole(userInfo, docNumber, stReg.idRepertorio, print.RFId, print.RegistryId, r.idGruppo, rights))
                                {
                                    throw new Exception(String.Format("Errore assegnazione visiblità al ruolo {0}", r.codice));
                                }
                            }
                        }

                        // Completamento transazione
                        transactionContext.Complete();
                    }

                    if (!string.IsNullOrEmpty(retVal))
                    {
                        DocsPaDB.Query_DocsPAWS.Report dbreport = new DocsPaDB.Query_DocsPAWS.Report();
                        dbreport.UpdStampaExp(retVal, stReg.dtaStampaTruncString);
                    }
                }
            }
            return(retVal);
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="counterId"></param>
        /// <param name="registryId"></param>
        /// <param name="rfId"></param>
        /// <param name="userInfo"></param>
        /// <param name="role"></param>
        /// <param name="year"></param>
        /// <param name="lastPrintedNumber"></param>
        /// <param name="lastNumberToPrint"></param>
        public void GeneratePrint(String counterId, String registryId, String rfId, InfoUtente userInfo, Ruolo role, String year, String lastPrintedNumber, String lastNumberToPrint)
        {
            RegistriRepertorioPrintManager manager = new RegistriRepertorioPrintManager();

            // Generazione filtri per la stampa
            List <FiltroRicerca> filters = new List <FiltroRicerca>()
            {
                new FiltroRicerca()
                {
                    argomento = "idCounter", valore = counterId
                },
                new FiltroRicerca()
                {
                    argomento = "idRegistry", valore = registryId
                },
                new FiltroRicerca()
                {
                    argomento = "idRf", valore = rfId
                },
                new FiltroRicerca()
                {
                    argomento = "year", valore = year
                },
                new FiltroRicerca()
                {
                    argomento = "lastPrintedNumber", valore = lastPrintedNumber
                },
                new FiltroRicerca()
                {
                    argomento = "lastNumberToPrint", valore = lastNumberToPrint
                }
            };

            // Creazione della stampa
            FileDocumento fileDocument = BusinessLogic.Reporting.ReportGeneratorCommand.GetReport(
                new DocsPaVO.Report.PrintReportRequest()
            {
                UserInfo              = userInfo,
                SearchFilters         = filters,
                ReportType            = DocsPaVO.Report.ReportTypeEnum.PDF,
                ReportKey             = "StampaRegistriRepertori",
                ContextName           = "StampaRegistriRepertori",
                AdditionalInformation = String.Format("Stampa del repertorio per l'anno {0} dal n. {1} al n. {2}", year, Convert.ToInt32(lastPrintedNumber), lastNumberToPrint)
            }).Document;

            // Apertura di un contesto transazionale
            using (DocsPaDB.TransactionContext transactionContext = new DocsPaDB.TransactionContext())
            {
                if (userInfo != null && string.IsNullOrEmpty(userInfo.dst))
                {
                    userInfo.dst = BusinessLogic.Utenti.UserManager.getSuperUserAuthenticationToken();
                }

                // Reperimento del nome della tipologia
                string tipologia = manager.GetNomeTipologia(counterId);

                // Creazione della scheda documento
                SchedaDocumento document = InitializeDocument(userInfo, registryId, rfId, year, lastPrintedNumber, lastNumberToPrint, tipologia);

                Ruolo[] roles = new Ruolo[] { };
                // Salvataggio del documento
                String docNumber = this.SaveDocument(userInfo, role, document, fileDocument, out roles);

                if (String.IsNullOrEmpty(docNumber))
                {
                    throw new Exception("Errore durante la creazione della stampa");
                }

                // Aggiornamento del registro delle stampe e del prossimo numero da stampare
                if (!manager.UpdatePrinterManager(counterId, lastPrintedNumber, lastNumberToPrint, docNumber, registryId, rfId, year))
                {
                    throw new Exception("Errore durante l'aggiornamento dell'anagrafica delle stampe effettuate");
                }
                int rights = 0;
                // Assegnazione della visibilità della stampa al responsabile di repertorio (se impostato)
                if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToResponsable(userInfo, docNumber, counterId, rfId, registryId, out rights))
                {
                    throw new Exception("Errore assegnazione visiblità a ruolo responsabile");
                }

                // Se ci sono ruoli superiori, viene assegnata la visibilità
                foreach (Ruolo r in roles)
                {
                    if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToRole(userInfo, docNumber, counterId, rfId, registryId, r.idGruppo, rights))
                    {
                        throw new Exception(String.Format("Errore assegnazione visiblità al ruolo {0}", r.codice));
                    }
                }

                //assegnazione visibilità nel caso di repertori di tipologia/RF
                if ((string.IsNullOrEmpty(rfId) && string.IsNullOrEmpty(registryId)) ||
                    (!string.IsNullOrEmpty(rfId)))
                {
                    DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                    object[] supRolePrinter            = gerarchia.getGerarchiaSup(role, ((DocsPaVO.utente.Registro)role.registri[0]).systemId, null, DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO).ToArray();
                    foreach (Ruolo r in supRolePrinter)
                    {
                        if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToRole(userInfo, docNumber, counterId, rfId, registryId, r.idGruppo, rights))
                        {
                            throw new Exception(String.Format("Errore assegnazione visiblità al ruolo {0}", r.codice));
                        }
                    }
                }

                // Invio in conservazione
                Conservazione.ConservazioneManager cons = new Conservazione.ConservazioneManager();
                if (cons.GetStatoAttivazione(userInfo.idAmministrazione) && this.IsStampaRepDaConservare(counterId))
                {
                    this.InviaInConservazione(docNumber, userInfo.idAmministrazione);
                }

                // Completamento transazione
                transactionContext.Complete();
            }
        }
コード例 #5
0
        public void GeneratePrintByYear(string counterId, string year)
        {
            logger.Info("START");
            DocsPaDB.Query_DocsPAWS.RegistriRepertorioPrintManager manager = new DocsPaDB.Query_DocsPAWS.RegistriRepertorioPrintManager();

            List <RegistroRepertorioPrint> reg1 = manager.GetRegistersToPrintByCounter(counterId);

            foreach (RegistroRepertorioPrint print in reg1)
            {
                logger.DebugFormat("Stampa del repertorio {0} della tipologia {5}, per l'anno {1}, su registro {2} o RF {3}, responsabile {4}",
                                   print.CounterDescription, year, print.RegistryId, print.RFId, print.PrinterUser.userId, print.TipologyDescription);
                InfoUtente userInfo = new InfoUtente()
                {
                    idAmministrazione = print.PrinterUser.idAmministrazione,
                    idCorrGlobali     = print.PrinterUser.systemId,
                    idGruppo          = print.PrinterRole.idGruppo,
                    idPeople          = print.PrinterUser.idPeople,
                    userId            = print.PrinterUser.userId
                };

                RepertorioPrintRange rpr = manager.GetRepertoriPrintRangesByYear(counterId, print.RegistryId, print.RFId, year);
                // Generazione filtri per la stampa
                if (rpr != null && rpr.LastNumber != null && rpr.LastNumber != 0 && (rpr.LastNumber - rpr.FirstNumber) > 0)
                {
                    string minX = rpr.FirstNumber.ToString();
                    string maxX = rpr.LastNumber.ToString();
                    logger.DebugFormat("Limite inferiore {0}, superiore {1}", minX, maxX);

                    List <FiltroRicerca> filters = new List <FiltroRicerca>()
                    {
                        new FiltroRicerca()
                        {
                            argomento = "idCounter", valore = counterId
                        },
                        new FiltroRicerca()
                        {
                            argomento = "idRegistry", valore = print.RegistryId
                        },
                        new FiltroRicerca()
                        {
                            argomento = "idRf", valore = print.RFId
                        },
                        new FiltroRicerca()
                        {
                            argomento = "year", valore = year
                        },
                        new FiltroRicerca()
                        {
                            argomento = "lastPrintedNumber", valore = minX
                        },
                        new FiltroRicerca()
                        {
                            argomento = "lastNumberToPrint", valore = maxX
                        }
                    };

                    // Creazione della stampa
                    FileDocumento fileDocument = BusinessLogic.Reporting.ReportGeneratorCommand.GetReport(
                        new DocsPaVO.Report.PrintReportRequest()
                    {
                        UserInfo              = userInfo,
                        SearchFilters         = filters,
                        ReportType            = DocsPaVO.Report.ReportTypeEnum.PDF,
                        ReportKey             = "StampaRegistriRepertori",
                        ContextName           = "StampaRegistriRepertori",
                        AdditionalInformation = String.Format(" Stampa del repertorio per l'anno {0} dal n. {1} al n. {2}. La presente stampa riporta tutte le registrazioni giornaliere di repertorio nell'intervallo indicato. Si è resa necessaria in quanto problematiche tecniche del sistema avevano inizialmente impedito la regolare stampa.", year, minX, maxX)
                    }).Document;

                    using (DocsPaDB.TransactionContext transactionContext = new DocsPaDB.TransactionContext())
                    {
                        if (userInfo != null && string.IsNullOrEmpty(userInfo.dst))
                        {
                            userInfo.dst = BusinessLogic.Utenti.UserManager.getSuperUserAuthenticationToken();
                        }

                        // Reperimento del nome della tipologia
                        string tipologia = manager.GetNomeTipologia(counterId);

                        // Creazione della scheda documento
                        SchedaDocumento document = InitializeDocument(userInfo, print.RegistryId, print.RFId, year, minX, maxX, tipologia);

                        document.oggetto.descrizione += " - RECUPERO";
                        Ruolo[] roles = new Ruolo[] { };
                        // Salvataggio del documento
                        String docNumber = this.SaveDocument(userInfo, print.PrinterRole, document, fileDocument, out roles);

                        if (String.IsNullOrEmpty(docNumber))
                        {
                            throw new Exception("Errore durante la creazione della stampa");
                        }
                        // Aggiornamento del registro delle stampe e del prossimo numero da stampare
                        if (!manager.UpdatePrinterManager(counterId, minX, maxX, docNumber, print.RegistryId, print.RFId, year))
                        {
                            throw new Exception("Errore durante l'aggiornamento dell'anagrafica delle stampe effettuate");
                        }

                        int rights = 0;
                        // Assegnazione della visibilità della stampa al responsabile di repertorio (se impostato)
                        if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToResponsable(userInfo, docNumber, counterId, print.RFId, print.RegistryId, out rights))
                        {
                            throw new Exception("Errore assegnazione visiblità a ruolo responsabile");
                        }

                        // Se ci sono ruoli superiori, viene assegnata la visibilità
                        foreach (Ruolo r in roles)
                        {
                            if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToRole(userInfo, docNumber, counterId, print.RFId, print.RegistryId, r.idGruppo, rights))
                            {
                                throw new Exception(String.Format("Errore assegnazione visiblità al ruolo {0}", r.codice));
                            }
                        }

                        //assegnazione visibilità nel caso di repertori di tipologia/RF
                        if ((string.IsNullOrEmpty(print.RFId) && string.IsNullOrEmpty(print.RegistryId)) ||
                            (!string.IsNullOrEmpty(print.RFId)))
                        {
                            DocsPaDB.Utils.Gerarchia gerarchia = new DocsPaDB.Utils.Gerarchia();
                            object[] supRolePrinter            = gerarchia.getGerarchiaSup(print.PrinterRole, ((DocsPaVO.utente.Registro)print.PrinterRole.registri[0]).systemId, null, DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO).ToArray();
                            foreach (Ruolo r in supRolePrinter)
                            {
                                if (!BusinessLogic.utenti.RegistriRepertorioPrintManager.AssignDocumentVisibilityToRole(userInfo, docNumber, counterId, print.RFId, print.RegistryId, r.idGruppo, rights))
                                {
                                    throw new Exception(String.Format("Errore assegnazione visiblità al ruolo {0}", r.codice));
                                }
                            }
                        }

                        // Completamento transazione
                        transactionContext.Complete();
                    }
                }
            }
        }