/// <summary>
 /// Crea una Spedizione di archiviazione ottica valida
 /// </summary>
 public SpedizioneArchiviazioneOttica(TipoDocumentoArchiviazione tipo, string descrizione, string file, DateTime data, Azienda azienda)
 {
     Tipo = tipo;
     Descrizione = descrizione;
     File = file;
     Azienda = azienda;
     Data = data;
 }
Пример #2
0
        public DocumentInfo GetDocument(string id, int idAzienda, TipoDocumentoArchiviazione tipoDocumento)
        {
            byte[] bytes;
 
            try
            {
                bytes = _rm.GetBytes(id);
                if (bytes == null)
                {
                    _log.ErrorFormat("Il documento con id: {0} non è stato trovato - DBDocument.GetDocument()", id);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il recupero del documento con id: {0} DBDocument.GetDocument()", ex, id);
                throw;
            } 
            
            return new DocumentInfo(bytes, id, _rm.FileName, null);
        }
Пример #3
0
 public DocumentoFilter(int idAzienda, TipoDocumentoArchiviazione? tipo, int? codiceCondominio, int? codiceEsercizio, int? codiceFascicoloImmobiliare, int? codiceFascicoloCondominio, int? codiceFornitore, string numeroFattura, DateTime? dataFatturaIniziale, DateTime? dataFatturaFinale, decimal? importoMinimo, decimal? importoMassimo, int? detrazione, int? idPratica, string freeText, bool? visibileCondomino)
 {
     IdAzienda = idAzienda;
     Tipo = tipo;
     CodiceCondominio = codiceCondominio;
     CodiceEsercizio = codiceEsercizio;
     CodiceFascicoloImmobiliare = codiceFascicoloImmobiliare;
     CodiceFascicoloCondominio = codiceFascicoloCondominio;
     CodiceFornitore = codiceFornitore;
     NumeroFattura = numeroFattura;
     DataFatturaIniziale = dataFatturaIniziale;
     DataFatturaFinale = dataFatturaFinale;
     ImportoMinimo = importoMinimo;
     ImportoMassimo = importoMassimo;
     Detrazione = detrazione;
     IdPratica = idPratica;
     FreeText = freeText;
     VisibileCondomino = visibileCondomino;
     PageNumber = 0;
     PageSize = 0;
 }
Пример #4
0
        public DocumentInfo GetDocument(string id, int idAzienda, TipoDocumentoArchiviazione tipoDocumento)
        {
            byte[] bytes = null;
            var fileName = string.Empty;

            try
            {
                var fileInfo = GetFileInfo(id, idAzienda);
                if (fileInfo != null)
                {
                    var infile = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read);
                    bytes = new byte[infile.Length];
                    infile.Read(bytes, 0, bytes.Length);
                    fileName = fileInfo.FullName;
                    infile.Position = 0;
                    infile.Dispose();
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il recupero del documento - {0} id:{1}", ex, Utility.GetMethodDescription(), id);
                throw;
            }

            var fileExtension = string.Empty;
            var fileNameToOpen = string.Empty;
            if (!string.IsNullOrEmpty(fileName))
            {
                var file = new FileInfo(fileName);
                fileNameToOpen = file.Name;
            }

            var document = new DocumentInfo(bytes, id, fileNameToOpen, fileExtension);
            document.FileExtension = GetFileExtension(document);

            return document;
        }
Пример #5
0
        public DocumentInfo GetDocument(string id, int idAzienda, TipoDocumentoArchiviazione tipoDocumento)
        {
            try
            {
                if (!string.IsNullOrEmpty(id))
                {
                    string anno = string.Empty;
                    if (id.Contains(" - "))
                        anno = id.Split('-')[2].Trim();
                    else if(id.Length >= 13)
                        anno = id.Substring(10, 4);
                    
                    id = id.Replace(" - ", "");

                    // ========================================================================================
                    // Recupero anno di riferimento --> ANNO SPEDIZIONE
                    // ========================================================================================
                    if (tipoDocumento == TipoDocumentoArchiviazione.FatturaPassiva)
                    {
                        var spesa = _spesaService.GetByIdentificativo(idAzienda, id);
                        if (spesa != null)
                            anno = spesa.AnnoArchiviazioneOttica.GetValueOrDefault().ToString();
                        else
                        {
                            var testataMovimento = _movimentiContabiliService.GetByIdentificativo(idAzienda, id);
                            if (testataMovimento != null)
                                anno = testataMovimento.AnnoArchiviazioneOttica.GetValueOrDefault().ToString();
                        }
                    }

                    var document = _documentService.GetDocument(id, idAzienda, tipoDocumento);
                    if (document.Body == null)
                    {
                        var impostazioni = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(idAzienda);
                        if (impostazioni != null &&
                            !string.IsNullOrEmpty(impostazioni.NomeApplicazioneArchiviazioneOttica) &&
                            !string.IsNullOrEmpty(impostazioni.UtenteArchiviazioneOttica) &&
                            !string.IsNullOrEmpty(impostazioni.PasswordArchiviazioneOttica) &&
                            !string.IsNullOrEmpty(impostazioni.IndiceContrattiArchiviazioneOttica))
                        {
                            _service = new ArchivaASP.ArchivaASP {Timeout = 60*60*10000};

                            long mRsaKeyLength = 0;

                            //=========================================================================
                            // OGGETTI PER CRITTOGRAFIA
                            //=========================================================================
                            // ----------------------------------------------------
                            //  Richiesta della chiave pubblica al server
                            // ----------------------------------------------------
                            var sKey = "";
                            if (_service.GetKey(ref sKey, ref mRsaKeyLength) != 0)
                            {
                                _log.ErrorFormat("Errore dal web service archiva - CHIAVE PUBBLICA DAL SERVER - {0} - application:{1} - user:{2} - password:{3} - id:{4}", Library.Utility.GetMethodDescription(), impostazioni.NomeApplicazioneArchiviazioneOttica, impostazioni.UtenteArchiviazioneOttica, impostazioni.PasswordArchiviazioneOttica, id);
                                return new DocumentInfo(new byte[0], id, null, null);
                            }

                            // creo il servizio RSA per il server
                            _mRsaServer = new RSACryptoServiceProvider((int) mRsaKeyLength);
                            var serverKey = (ArchivaASP_KEY) ArchivaASP_SERIALIZER.DeserializeObject(sKey, typeof (ArchivaASP_KEY));
                            var serverParameters = new RSAParameters {Exponent = serverKey.Exp, Modulus = serverKey.Mod};
                            _mRsaServer.ImportParameters(serverParameters);

                            //=========================================================================
                            // LOGIN
                            //=========================================================================

                            // creo il servizio RSA per il client
                            _mRsaClient = new RSACryptoServiceProvider((int) mRsaKeyLength);
                            var rsaParam = _mRsaClient.ExportParameters(false);
                            _mUserKey = new ArchivaASP_KEY {Mod = rsaParam.Modulus, Exp = rsaParam.Exponent};

                            // creo la struttura dei parametri
                            _mUserSession = new ArchivaASP_LOGIN
                            {
                                SessionId = 0,
                                Application = impostazioni.NomeApplicazioneArchiviazioneOttica,
                                User = impostazioni.UtenteArchiviazioneOttica,
                                Password = impostazioni.PasswordArchiviazioneOttica
                            };

                            // creo una index list vuota
                            var indexList = new ArchivaASP_INDEXLIST();

                            // Crypto service
                            var crypto = new ArchivaASP_CRY();

                            // cripto la descrizione XML dei parametri
                            var abXmlUserSession = crypto.EncryptXML(_mUserSession, _mUserSession.GetType(), _mRsaServer);
                            // cripto la chiave del client XML dei parametri
                            var abXmlUserKey = crypto.EncryptXML(_mUserKey, _mUserKey.GetType(), _mRsaServer);

                            byte[] abXmlIndexList;

                            // effettuo il login
                            var lLoginError = _service.Login(ref abXmlUserSession, abXmlUserKey, out abXmlIndexList);

                            // decripto le info di login
                            if (lLoginError == 0)
                            {
                                _mUserSession = (ArchivaASP_LOGIN)crypto.DecryptXML(abXmlUserSession, typeof(ArchivaASP_LOGIN), _mRsaClient);
                                indexList = (ArchivaASP_INDEXLIST)crypto.DecryptXML(abXmlIndexList, typeof(ArchivaASP_INDEXLIST), _mRsaClient);
                            }
                            else
                            {
                                _log.ErrorFormat("Errore dal web service archiva - LOGIN ERROR - {0} - application:{1} - user:{2} - password:{3} - id:{4}", Library.Utility.GetMethodDescription(), impostazioni.NomeApplicazioneArchiviazioneOttica, impostazioni.UtenteArchiviazioneOttica, impostazioni.PasswordArchiviazioneOttica, id);
                            }

                            //=========================================================================
                            // ESECUZIONE DELLA RICERCA - I PARAMETRI DEVONO SELEZIONARE UN SOLO DOCUMENTO
                            //=========================================================================

                            // ---------------------------------------------------
                            //  Parametri di Login - abXmlUserSession
                            // ---------------------------------------------------
                            // cripto la descrizione XML dei parametri
                            abXmlUserSession = crypto.EncryptXML(_mUserSession, typeof (ArchivaASP_LOGIN), _mRsaServer);

                            // ---------------------------------------------------
                            //  Lista degli indice selezionati - abXmlIndexList
                            // ---------------------------------------------------
                            // cripto la index list XML dei parametri
                            indexList.Indexes.Clear();
                            if (tipoDocumento == TipoDocumentoArchiviazione.Contratto)
                                indexList.Indexes.Add(impostazioni.IndiceContrattiArchiviazioneOttica);
                            else
                                // TODO: Calcolare l'anno corretto
                                indexList.Indexes.Add(impostazioni.IndiceFattureArchiviazioneOttica + " " + anno);
                            abXmlIndexList = crypto.EncryptXML(indexList, typeof (ArchivaASP_INDEXLIST), _mRsaServer);

                            // ---------------------------------------------------
                            //  Lista dei campi selezionati - abXmlFieldName
                            // ---------------------------------------------------
                            // campi da visualizzare
                            var fieldList = new ArchivaASP_FIELDLIST();
                            fieldList.Fields.Add("IDENTIFICATIVO UNIVOCO");

                            // cripto la lista dei campi fornibili XML dei parametri
                            var abXmlFieldName = crypto.EncryptXML(fieldList, typeof(ArchivaASP_FIELDLIST), _mRsaServer);

                            // ---------------------------------------------------
                            //  Condizioni di ricerca - abXmlFieldCondition
                            // ---------------------------------------------------
                            // TODO: Impostare qui i parametri di ricerca
                            var parameters = "=(IDENTIFICATIVO UNIVOCO, $" + id + "$)";

                            // cripto la condizione XML dei parametri
                            var abXmlFieldCondition = crypto.EncryptXML(parameters, typeof (String), _mRsaServer);

                            // ----------------------------------------------------------------
                            //  Esecuzione della ricerca ritorna direttamente il documento PDF
                            // ----------------------------------------------------------------
                            byte[] abDocumentBuffer;
                            var lSearchError = _service.SearchDocumentWithUniqueData(abXmlUserSession, abXmlIndexList, abXmlFieldCondition, abXmlFieldName, out abDocumentBuffer);
                            if (lSearchError != 0)
                            {
                                var sError = "";
                                _service.GetErrorDescription(lSearchError, ref sError);
                                
                                _log.ErrorFormat("Errore dal web service archiva - LETTURA DOCUMENTO - {0} - codice:{1} - descrizione:{2} - id:{3}", Library.Utility.GetMethodDescription(), lSearchError, sError, id);

                                _service.Logout(ref abXmlUserSession);

                                return new DocumentInfo(new byte[0], id, sError, null);
                            }

                            document = new DocumentInfo(abDocumentBuffer, id, "Archiva", ".pdf");
                            _documentService.SaveDocument(document.Body, id + ".pdf", ".pdf", id, idAzienda);

                            // Logout dal servizio
                            _service.Logout(ref abXmlUserSession);
                        }
                    }
                    else
                        document.FileName = "Archiva";

                    return document;
                }
                return new DocumentInfo(new byte[0], id, null, null);
            }
            catch(OutOfMemoryException ex)
            {
                _log.ErrorFormat("Errore inaspettato nel metodo - OUT OF MEMORY - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), id);
                return new DocumentInfo(new byte[0], id, "Il documento in questo momento non è disponibile di prega di riprovare più tardi", null);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nel metodo - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), id);
                throw;
            }
        }
Пример #6
0
 public DocumentInfo GetBodyById(string id, TipoDocumentoArchiviazione tipo)
 {
     var result = GetServiceClient().GetDocumentInfoByIdentificativo(id, tipo, GetUserInfo());
     CloseService();
     return result;
 }
Пример #7
0
        public DocumentInfo GetDocumentInfo(Documento doc, TipoDocumentoArchiviazione tipo)
        {
            var docInfo = new DocumentInfo();
            if (doc != null)
            {
                var docService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IDocumentService>("savedocument.FileSystem");
                docInfo = docService.GetDocument(doc.Checksum, _info.Azienda, tipo);
                docInfo.FileName = doc.FileName;
            }

            return docInfo;
        }
Пример #8
0
        public DocumentInfo GetDocumentInfo(int id, TipoDocumentoArchiviazione tipo)
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var doc = daoFactory.GetDocumentoDao().Find(id, false);

                if (doc != null)
                {
                    IDocumentService service;
                    string identificativo;
                    if (string.IsNullOrEmpty(doc.IdentificativoArchiviazioneOttica))
                    {
                        identificativo = doc.Checksum;
                        service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IDocumentService>("savedocument.FileSystem");
                    }
                    else
                    {
                        identificativo = doc.IdentificativoArchiviazioneOttica.Trim();
                        service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IDocumentService>("savedocument.Archiva");
                    }

                    var docInfo = service.GetDocument(identificativo, _info.Azienda, tipo);
                    if (docInfo.FileName == "Archiva")
                    {
                        docInfo.FileName = doc.FileName;
                        docInfo.FileExtension = ".pdf";
                    }
                    else
                    {
                        docInfo.FileName = doc.FileName;
                        docInfo.FileExtension = service.GetFileExtension(docInfo);
                    }

                    var index = docInfo.FileName.LastIndexOf(".");
                    if (index > -1)
                        docInfo.FileName = docInfo.FileName.Substring(0, index);

                    return docInfo;
                }

                return new DocumentInfo();
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento del documento - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), id);
                throw;
            }
        }
Пример #9
0
        public DocumentInfo GetDocumentBody(string identificativo, TipoDocumentoArchiviazione tipo)
        {
            try
            {
                var service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IDocumentService>("savedocument.Archiva");
                var docInfo = service.GetDocument(identificativo, _info.Azienda, tipo);
                docInfo.FileName = identificativo;

                return docInfo;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento del documento - {0} - identificativo:{1}", ex, Library.Utility.GetMethodDescription(), identificativo);
                throw;
            }
        }
        public string CreateFileIndici(TipoDocumentoArchiviazione tipoDocumento, IList<CondominioDTO> condomini, bool automatedEmail, bool returnTextFile)
        {
            var idCondomini = condomini.Select(dto => dto.ID).ToList();

            var fileBody = GetServiceClient().CreateFileArchiviazioneOttica(tipoDocumento, idCondomini, automatedEmail, returnTextFile, GetUserInfo());
            var message = fileBody;
            
            if (returnTextFile && !string.IsNullOrEmpty(fileBody) && fileBody != "OK" && !fileBody.StartsWith("KO"))
            {
                message = "OK";
                var docInfo = new DocumentInfo {BodyText = fileBody};

                switch (tipoDocumento)
                { 
                    case TipoDocumentoArchiviazione.FatturaPassiva:
                        docInfo.FileName = "Archiva_FatturePassive.csv";
                        break;

                    case TipoDocumentoArchiviazione.Contratto:
                        docInfo.FileName = "Archivia_Contratti.csv";
                        break;

                    case TipoDocumentoArchiviazione.FatturaAttiva:
                        docInfo.FileName = "Archiva_FattureAttive.csv";
                        break;
                }

                _manageDocumentService.Open(docInfo, docInfo.FileName, false, MergeFieldType.Default);
            }
            CloseService();

            return message;
        }
        public FileIndice RistampaFileIndici(TipoDocumentoArchiviazione tipoDocumento, IList<SpedizioneArchiviazioneOtticaDTO> spedizioni, bool automatedEmail, bool returnTextFile)
        {
            var idSpedizioni = spedizioni.Select(dto => dto.ID).ToList();
            var fileIndice = GetServiceClient().RistampaSpedizioneArchiviazioneOttica(tipoDocumento, idSpedizioni, automatedEmail, GetUserInfo());

            if (returnTextFile && string.IsNullOrEmpty(fileIndice.FatalMessage) && !string.IsNullOrEmpty(fileIndice.File))
            {
                var docInfo = new DocumentInfo { BodyText = fileIndice.File };

                switch (tipoDocumento)
                {
                    case TipoDocumentoArchiviazione.FatturaPassiva:
                        docInfo.FileName = "Archiva_FatturePassive.csv";
                        break;

                    case TipoDocumentoArchiviazione.Contratto:
                        docInfo.FileName = "Archivia_Contratti.csv";
                        break;

                    case TipoDocumentoArchiviazione.FatturaAttiva:
                        docInfo.FileName = "Archiva_FattureAttive.csv";
                        break;
                }

                _manageDocumentService.Open(docInfo, docInfo.FileName, false, MergeFieldType.Default);
            }

            CloseService();

            return fileIndice;
        }
Пример #12
0
        public FileIndice RistampaSpedizione(TipoDocumentoArchiviazione tipo, IList<int> idSpedizioni, int idAzienda, bool automatedEmail)
        {
            var file = new StringBuilder();
            var fatalMessage = string.Empty;
            var warnMessage = string.Empty;

            if (idSpedizioni != null && idSpedizioni.Count > 0)
            {
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                try
                {
                    var dettagli = _daoFactory.GetSpedizioneArchiviazioneOtticaDettaglioDao().GetBySpedizioniTipo(tipo, idSpedizioni);

                    // ============================================================
                    //  Fatture Passive
                    // ============================================================

                    // ------------------------------------------------------------
                    //  Creazione File
                    // ============================================================
                    if (tipo == TipoDocumentoArchiviazione.FatturaPassiva)
                    {
                        // --------------------------------------------
                        //  Spese / Fatture
                        // --------------------------------------------
                        var dettagliFatture = dettagli.Where(item => item.SpesaRiferimento != null).ToList();
                        if (dettagliFatture.Any())
                        {
                            file.AppendLine("IdentificativoUnivoco;TipoDocumento;RagioneSocialeFornitore;IndirizzoFornitore;CapFornitore;ComuneFornitore;ProvinciaFornitore;NumeroDocumento;DataDocumento;PartitaIvaFornitore;CodiceFiscaleFornitore;ImportoTotaleDocumento;CodiceCondominio;AnnoRegistrazione;NumeroProtocollo;CodiceFiscaleCondominio;CodiceStudio;IdentificativoSfera");
                            foreach (var dettaglio in dettagliFatture)
                            {
                                try
                                {
                                    var spesa = dettaglio.SpesaRiferimento;
                                    var linea = new StringBuilder();
                                    decimal importo;
                                    if ((spesa.ImportoLordo >= 0 || spesa.ImportoBolletta >= 0) && spesa.TipoDocumento != "NOTACC")
                                    {
                                        importo = spesa.TipoDocumento == "BOLLETTA" ? spesa.ImportoBolletta.GetValueOrDefault() : spesa.ImportoLordo;
                                        linea.Append(getIdentificativoArchiviazione(spesa, false) + ";F;");
                                    }
                                    else
                                    {
                                        linea.Append(getIdentificativoArchiviazione(spesa, false) + ";N;");
                                        importo = spesa.ImportoLordo * -1;
                                    }

                                    linea.Append(spesa.FornitoreRiferimento.DisplayName.Replace(';', ',').Trim() + ";");

                                    if (spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza != null)
                                    {
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Indirizzo.Replace(';', ',').Trim() + ";");
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Cap.Replace(';', ',').Trim() + ";");
                                        if (spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune != null)
                                        {
                                            linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione.Replace(';', ',').Trim() + ";");
                                            linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice.Replace(';', ',').Trim() + ";");
                                        }
                                        else
                                            linea.Append(";;");
                                    }
                                    else
                                        linea.Append(";;;;");

                                    linea.Append(spesa.NumeroDocumento.Replace(';', ',').Trim() + ";");
                                    linea.Append(spesa.DataDocumento.GetValueOrDefault().ToShortDateString() + ";");

                                    if (!string.IsNullOrEmpty(spesa.FornitoreRiferimento.PersonaRiferimento.PartitaIva))
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.PartitaIva.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    if (!string.IsNullOrEmpty(spesa.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale))
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    linea.Append(importo.ToString().Replace(';', ',').Trim() + ";");
                                    linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";");
                                    linea.Append(spesa.DataDocumento.GetValueOrDefault().Year + ";");
                                    linea.Append(spesa.NumeroProtocollo.GetValueOrDefault() + ";");

                                    if (!string.IsNullOrEmpty(spesa.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale))
                                        linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    if (!string.IsNullOrEmpty(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice))
                                        linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice.Replace(';', ',').Trim().PadLeft(4, '0') + ";");
                                    else
                                        linea.Append(";");

                                    linea.Append(spesa.ID.ToString());

                                    file.Append(linea + Environment.NewLine);
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola spesa - {0} - deattaglio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), dettaglio.ID, idAzienda);
                                    throw;
                                }
                            }
                        }


                        // --------------------------------------------
                        //  Movimenti contabili
                        // --------------------------------------------
                        var dettagliMovimenti = dettagli.Where(item => item.TestataMovimentoRiferimento != null).ToList();
                        if (dettagliMovimenti.Any())
                        {
                            foreach (var dettaglio in dettagliMovimenti)
                            {
                                try
                                {
                                    var testata = dettaglio.TestataMovimentoRiferimento;
                                    var linea = new StringBuilder();
                                    linea.Append(getIdentificativoArchiviazione(testata, false) + ";M;");
                                    linea.Append(";;;;;;;;;");

                                    decimal? importo = testata.GetImportoSpesa();
                                    if (importo != null)
                                        linea.Append(importo.Value.ToString().Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";;");

                                    linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";");
                                    linea.Append(testata.DataRegistrazione.GetValueOrDefault().Year + ";");
                                    linea.Append(testata.NumeroProtocollo.GetValueOrDefault() + ";");

                                    if (!string.IsNullOrEmpty(testata.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale))
                                        linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    if (!string.IsNullOrEmpty(testata.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice))
                                        linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice.Replace(';', ',').Trim().PadLeft(4, '0') + ";");
                                    else
                                        linea.Append(";");

                                    linea.Append(testata.ID.ToString());

                                    file.Append(linea + Environment.NewLine);
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva - singola testata di movimento contabile - {0} - dettaglio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), dettaglio.ID, idAzienda);
                                    throw;
                                }
                            }
                        }
                    }

                    // ============================================================
                    //  Documenti
                    // ============================================================

                    // ------------------------------------------------------------
                    //  Creazione File
                    // ============================================================
                    if (tipo == TipoDocumentoArchiviazione.Contratto)
                    {
                        // --------------------------------------------
                        //  Documenti
                        // --------------------------------------------
                        var dettagliDocumenti = dettagli.Where(item => item.DocumentoRiferimento != null).ToList();
                        if (dettagliDocumenti.Count > 0)
                        {
                            file.AppendLine("IdentificativoUnivoco;TipoDocumento;CodiceStudio;CodiceCondominio;NumeroProtocollo;TipologiaContratto;Data;Fornitore;IdentificativoSfera");
                            foreach (var dettaglio in dettagliDocumenti)
                            {
                                try
                                {
                                    var documento = dettaglio.DocumentoRiferimento;
                                    var condominio = documento.GetCondominioRiferimento();
                                    if (condominio != null)
                                    {
                                        var fascicolo = documento.Fascicoli.FirstOrDefault();
                                        if (fascicolo != null)
                                        {
                                            var linea = new StringBuilder();

                                            var identificativoArchiviazione = getIdentificativoArchiviazione(documento, condominio, false);
                                            linea.Append(identificativoArchiviazione + ";F" + fascicolo.DettaglioFascicolo.Codice + ";");
                                            documento.IdentificativoArchiviazioneOttica = identificativoArchiviazione;

                                            linea.Append(condominio.Azienda.Codice.Replace(';', ',').Trim() + ";");
                                            linea.Append(condominio.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";");
                                            linea.Append(documento.NumeroProtocollo.GetValueOrDefault() + ";");

                                            if (documento.ContrattoRiferimento != null)
                                                linea.Append(documento.ContrattoRiferimento.Tipo.Descrizione + ";");
                                            else
                                                linea.Append(";");

                                            if (documento.Data != null)
                                                linea.Append(documento.Data.GetValueOrDefault().ToShortDateString() + ";");
                                            else
                                                linea.Append(";");

                                            if (documento.FornitoreRiferimento != null)
                                                linea.Append(documento.FornitoreRiferimento.DisplayName.Replace(';', ',').Trim() + ";");
                                            else
                                                linea.Append(";");

                                            linea.Append(documento.ID.ToString());

                                            file.Append(linea + Environment.NewLine);
                                        }
                                        else
                                        {
                                            warnMessage += string.Format("Per il documento: '{0}' del condominio: '{1}' non è stato trovato il fascicolo di riferimento", documento.Descrizione, condominio.DisplayName) + Environment.NewLine;
                                            _log.WarnFormat("Non trovato fascicolo per il documento - SINGOLO DOCUMENTO - {0} - documento:{1} - dettaglio:{2} - azienda:{3}", Utility.GetMethodDescription(), documento.ID, dettaglio.ID, idAzienda);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva - SINGOLA SPESA - {0} - dettaglio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), dettaglio.ID, idAzienda);
                                    throw;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), idAzienda);
                    throw;
                }

                if (automatedEmail && !string.IsNullOrEmpty(file.ToString()))
                {
                    string fileName;
                    switch (tipo)
                    {
                        case TipoDocumentoArchiviazione.Contratto:
                            fileName = azienda.NomeCompatto + "_Contratti";
                            break;
                        case TipoDocumentoArchiviazione.FatturaPassiva:
                            fileName = azienda.NomeCompatto + "_FattureFornitori";
                            break;
                        default:
                            fileName = azienda.NomeCompatto + "_FattureFornitori";
                            break;
                    }

                    var allegati = new List<DocumentInfo> { new DocumentInfo { FileName = fileName, FileExtension = ".csv", Body = Conversione.ToByteArray(file.ToString()) } };

                    var emailAddresses = ConfigurationManager.AppSettings["emailAddressArchiviazioneOttica"].Split(',');
                    var destinatari = new List<string>(emailAddresses.Length);
                    destinatari.AddRange(emailAddresses.Select(t => t.Trim()));

                    _messageService.InvioMessaggio(idAzienda, null, null, null, null, null, null, MotivoMessaggio.FileIndiceArchiviazione, "File indice per Archiva", "Allego il file indice per i documenti che abbiamo inviato." + Environment.NewLine + Environment.NewLine + "Cordiali saluti" + Environment.NewLine + "Nadir s.r.l.", destinatari, "*****@*****.**", "*****@*****.**", allegati, new ParametriInvioLettera { Asincrono = true });
                }
            }
            else
                fatalMessage = "Non è stata effettuata nessuna selezione";

            return new FileIndice(file.ToString(), fatalMessage, warnMessage);
        }
Пример #13
0
        // TODO: Quando possibile rivedere tutta la funzione interfaccia utente compresa
        public string CreateSpedizione(TipoDocumentoArchiviazione tipo, int idAzienda, IList<int> idCondomini, bool automatedEmail, bool returnFileText)
        {
            var file = new StringBuilder();
            var message = string.Empty;

            if (idCondomini != null && idCondomini.Count > 0)
            {
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                try
                {
                    // ============================================================
                    //  Fatture Passive
                    // ============================================================

                    // ------------------------------------------------------------
                    //  Creazione File
                    // ============================================================
                    if (tipo == TipoDocumentoArchiviazione.FatturaPassiva)
                    {
                        // --------------------------------------------
                        //  Spese / Fatture
                        // --------------------------------------------
                        var speseDaArchiviare = getSpeseDaArchiviare(idAzienda, idCondomini);

                        if (speseDaArchiviare.Any())
                        {
                            file.AppendLine("IdentificativoUnivoco;TipoDocumento;RagioneSocialeFornitore;IndirizzoFornitore;CapFornitore;ComuneFornitore;ProvinciaFornitore;NumeroDocumento;DataDocumento;PartitaIvaFornitore;CodiceFiscaleFornitore;ImportoTotaleDocumento;CodiceCondominio;AnnoRegistrazione;NumeroProtocollo;CodiceFiscaleCondominio;CodiceStudio;IdentificativoSfera");
                            foreach (var spesa in speseDaArchiviare)
                            {
                                try
                                {
                                    var linea = new StringBuilder();
                                    decimal importo;
                                    if ((spesa.ImportoLordo >= 0 || spesa.ImportoBolletta >= 0) && spesa.TipoDocumento != "NOTACC")
                                    {
                                        importo = spesa.TipoDocumento == "BOLLETTA" ? spesa.ImportoBolletta.GetValueOrDefault() : spesa.ImportoLordo;
                                        linea.Append(getIdentificativoArchiviazione(spesa, false) + ";F;");
                                    }
                                    else
                                    {
                                        linea.Append(getIdentificativoArchiviazione(spesa, false) + ";N;");
                                        importo = spesa.ImportoLordo*-1;
                                    }

                                    linea.Append(spesa.FornitoreRiferimento.DisplayName.Replace(';', ',').Trim() + ";");

                                    if (spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza != null)
                                    {
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Indirizzo.Replace(';', ',').Trim() + ";");
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Cap.Replace(';', ',').Trim() + ";");
                                        if (spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune != null)
                                        {
                                            linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione.Replace(';', ',').Trim() + ";");
                                            linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice.Replace(';', ',').Trim() + ";");
                                        }
                                        else
                                            linea.Append(";;");
                                    }
                                    else
                                        linea.Append(";;;;");

                                    linea.Append(spesa.NumeroDocumento.Replace(';', ',').Trim() + ";");
                                    linea.Append(spesa.DataDocumento.GetValueOrDefault().ToShortDateString() + ";");

                                    if (!string.IsNullOrEmpty(spesa.FornitoreRiferimento.PersonaRiferimento.PartitaIva))
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.PartitaIva.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    if (!string.IsNullOrEmpty(spesa.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale))
                                        linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    linea.Append(importo.ToString().Replace(';', ',').Trim() + ";");
                                    linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";");
                                    linea.Append(spesa.DataDocumento.GetValueOrDefault().Year + ";");
                                    linea.Append(spesa.NumeroProtocollo.GetValueOrDefault() + ";");

                                    if (!string.IsNullOrEmpty(spesa.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale))
                                        linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    if (!string.IsNullOrEmpty(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice))
                                        linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice.Replace(';', ',').Trim().PadLeft(4, '0') + ";");
                                    else
                                        linea.Append(";");

                                    linea.Append(spesa.ID.ToString());

                                    file.Append(linea + Environment.NewLine);
                                }
                                catch (Exception ex)
                                {
                                    
                                    _log.Error("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola spesa - " + Utility.GetMethodDescription() + " - idSpesa: " + spesa.ID + " - idAzienda:" + idAzienda, ex);
                                    throw;
                                }
                            }
                        }

                        // --------------------------------------------
                        //  Movimenti contabili
                        // --------------------------------------------
                        var testateMovimentiDaArchiviare = getMovimentiDaArchiviare(idAzienda, idCondomini);

                        if (testateMovimentiDaArchiviare.Count > 0)
                        {
                            foreach (var testata in testateMovimentiDaArchiviare)
                            {
                                try
                                {
                                    var linea = new StringBuilder();
                                    linea.Append(getIdentificativoArchiviazione(testata, false) + ";M;");
                                    linea.Append(";;;;;;;;;");

                                    decimal? importo = testata.GetImportoSpesa();
                                    if (importo != null)
                                        linea.Append(importo.Value.ToString().Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";;");

                                    linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";");
                                    linea.Append(testata.DataRegistrazione.GetValueOrDefault().Year + ";");
                                    linea.Append(testata.NumeroProtocollo.GetValueOrDefault() + ";");

                                    if (!string.IsNullOrEmpty(testata.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale))
                                        linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";");
                                    else
                                        linea.Append(";");

                                    if (!string.IsNullOrEmpty(testata.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice))
                                        linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice.Replace(';', ',').Trim().PadLeft(4, '0') + ";");
                                    else
                                        linea.Append(";");

                                    linea.Append(testata.ID.ToString());

                                    file.Append(linea + Environment.NewLine);
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola testata di movimento contabile - {0} - spesa:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), testata.ID, idAzienda);
                                    throw;
                                }
                            }
                        }

                        // ------------------------------------------------------------
                        //  Creazione spedizione
                        // ============================================================
                        if (speseDaArchiviare != null && (speseDaArchiviare.Any() || testateMovimentiDaArchiviare.Any()))
                        {
                            var spedizione = new SpedizioneArchiviazioneOttica(tipo, "Fatture spedite il:" + DateTime.Today.ToShortDateString(), file.ToString(), DateTime.Today, azienda);
                            foreach (var spesa in speseDaArchiviare)
                                spedizione.Dettaglio.Add(new SpedizioneArchiviazioneOtticaDettaglio(spedizione, spesa));
                            foreach (var testata in testateMovimentiDaArchiviare)
                                spedizione.Dettaglio.Add(new SpedizioneArchiviazioneOtticaDettaglio(spedizione, testata));

                            _daoFactory.GetSpedizioneArchiviazioneOtticaDao().SaveOrUpdate(spedizione);
                        }
                    }

                    // ============================================================
                    //  Documenti
                    // ============================================================

                    // ------------------------------------------------------------
                    //  Creazione File
                    // ============================================================
                    if (tipo == TipoDocumentoArchiviazione.Contratto)
                    {
                        // --------------------------------------------
                        //  Documenti
                        // --------------------------------------------
                        var documenti = getDocumentiDaArchiviare(idAzienda, idCondomini);

                        if (documenti.Count > 0)
                        {
                            file.AppendLine("IdentificativoUnivoco;TipoDocumento;CodiceStudio;CodiceCondominio;NumeroProtocollo;TipologiaContratto;Data;Fornitore;IdentificativoSfera");
                            foreach (var documento in documenti)
                            {
                                try
                                {
                                    var condominio = documento.GetCondominioRiferimento();
                                    if (condominio != null)
                                    {
                                        var fascicolo = IesiGenericCollections<FascicoloCondominio>.GetByIndex(documento.Fascicoli, 0);
                                        if (fascicolo != null)
                                        {
                                            var linea = new StringBuilder();

                                            var identificativoArchiviazione = getIdentificativoArchiviazione(documento, condominio, false);
                                            linea.Append(identificativoArchiviazione + ";F" + fascicolo.DettaglioFascicolo.Codice + ";");
                                            documento.IdentificativoArchiviazioneOttica = identificativoArchiviazione;

                                            linea.Append(condominio.Azienda.Codice.Replace(';', ',').Trim() + ";");
                                            linea.Append(condominio.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";");
                                            linea.Append(documento.NumeroProtocollo.GetValueOrDefault() + ";");

                                            if (documento.ContrattoRiferimento != null)
                                            {
                                                if(documento.ContrattoRiferimento.Tipo != null)
                                                    linea.Append(documento.ContrattoRiferimento.Tipo.Descrizione + ";");
                                                else
                                                    linea.Append(documento.Tipo + ";");
                                            }
                                            else
                                                linea.Append(";");

                                            if (documento.Data != null)
                                                linea.Append(documento.Data.GetValueOrDefault().ToShortDateString() + ";");
                                            else
                                                linea.Append(";");

                                            if (documento.FornitoreRiferimento != null)
                                                linea.Append(documento.FornitoreRiferimento.DisplayName.Replace(';', ',').Trim() + ";");
                                            else
                                                linea.Append(";");

                                            linea.Append(documento.ID.ToString());

                                            file.Append(linea + Environment.NewLine);
                                        }
                                        else
                                        {
                                            message += string.Format(" - Il documento '{0}' del condominio '{1}' non può essere inviato perchè non è presente il fascicolo condominio.{2}", documento.Descrizione, condominio.DisplayName, Environment.NewLine);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola spesa - {0} - documento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), documento.ID, idAzienda);
                                    throw;
                                }
                            }
                        }

                        // ------------------------------------------------------------
                        //  Creazione spedizione
                        // ============================================================
                        if (documenti.Count > 0)
                        {
                            if (string.IsNullOrEmpty(message))
                            {
                                var spedizione = new SpedizioneArchiviazioneOttica(tipo, "Documenti spediti il:" + DateTime.Today.ToShortDateString(), file.ToString(), DateTime.Today, azienda);
                                foreach (var documento in documenti)
                                    spedizione.Dettaglio.Add(new SpedizioneArchiviazioneOtticaDettaglio(spedizione, documento));

                                _daoFactory.GetSpedizioneArchiviazioneOtticaDao().SaveOrUpdate(spedizione);
                                _log.InfoFormat("Creato il file per archiviazione ottica - {0} - id:{1}", Utility.GetMethodDescription(), spedizione.ID);
                            }
                            else
                            {
                                _log.ErrorFormat("Errore nella creazione del file indice - {0} - messaggio:{1} - azienda:{2}", Utility.GetMethodDescription(), message, idAzienda);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), idAzienda);
                    throw;
                }

                if (!string.IsNullOrEmpty(file.ToString()) && string.IsNullOrEmpty(message))
                    message = "OK";

                if (automatedEmail && !string.IsNullOrEmpty(file.ToString()) && message == "OK")
                {
                    string fileName;
                    switch (tipo)
                    {
                        case TipoDocumentoArchiviazione.Contratto:
                            fileName = azienda.NomeCompatto + "_Contratti.csv";
                            break;
                        case TipoDocumentoArchiviazione.FatturaPassiva:
                            fileName = azienda.NomeCompatto + "_FattureFornitori.csv";
                            break;
                        default:
                            fileName = azienda.NomeCompatto + "_FattureFornitori.csv";
                            break;
                    }

                    var allegati = new List<DocumentInfo> {new DocumentInfo {FileName = fileName, FileExtension = ".csv", Body = Conversione.ToByteArray(file.ToString())}};

                    var emailAddresses = ConfigurationManager.AppSettings["emailAddressArchiviazioneOttica"].Split(',');
                    var destinatari = new List<string>(emailAddresses.Length);
                    destinatari.AddRange(emailAddresses.Select(t => t.Trim()));

                    _messageService.InvioMessaggio(idAzienda, null, null, null, null, null, null, MotivoMessaggio.FileIndiceArchiviazione, "File indice per Archiva", "Allego il file indice per i documenti che abbiamo inviato." + Environment.NewLine + Environment.NewLine + "Cordiali saluti" + Environment.NewLine + "Nadir s.r.l.", destinatari, "*****@*****.**", "*****@*****.**", allegati, new ParametriInvioLettera { Asincrono = true });
                }
            }
            else
                message = "Non è stata effettuata nessuna selezione";

            // Ritorno il corpo del file, oppure KO se si è verificato un errore, OK se è tutto a posto
            if (returnFileText && !string.IsNullOrEmpty(file.ToString()) &&  message == "OK")
                return file.ToString();

            if (message == "OK")
                return message;

            return "KO$" + message;
        }
Пример #14
0
		public DocumentInfo GetDocument(int id, TipoDocumentoArchiviazione tipo, UserInfo userinfo)
		{
            var retryCount = 10;
            var success = false;
            var windsorRep = new WindsorConfigRepository();
            var item = new DocumentInfo();
            while (retryCount >= 0 && !success)
            {
                try
                {
                    windsorRep.BeginTransaction(userinfo);
                    var rep = new DocumentoRepository(userinfo, windsorRep);
                    item = rep.GetDocumentInfo(id, tipo);
                    windsorRep.Commit();
                    success = true;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nella lettura di un documento - TENTATIVO:{0} - {1} - id:{2} - azienda:{3} - number:{4}", ex, (11 - retryCount), Utility.GetMethodDescription(), id, userinfo.Azienda, getExceptionId(ex));

                    windsorRep.Rollback();
                    if (!isRetryException(ex))
                        throw;

                    // Add delay here if you wish. 
                    System.Threading.Thread.Sleep(1000 * (11 - retryCount));
                    retryCount--;
                    _log.InfoFormat("Lettura di un documento - INIZIO TENTATIVO:{0} - {1} - id:{2} - azienda:{3}", (11 - retryCount), Utility.GetMethodDescription(), id, userinfo.Azienda);
                }
            }

            if (!success)
                windsorRep.Rollback();

            return item;
		}
Пример #15
0
 public DocumentInfo GetDocumentInfoByIdentificativo(string id, TipoDocumentoArchiviazione tipo, UserInfo userinfo)
 {
     var windsorRep = new WindsorConfigRepository();
     try
     {
         windsorRep.BeginTransaction(userinfo);
         var repo = new DocumentoRepository(userinfo, windsorRep);
         var item = repo.GetDocumentBody(id, tipo);
         windsorRep.Commit();
         return item;
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nella lettura di un documento - {0} - id:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), id, userinfo.Azienda);
         windsorRep.Rollback();
         throw;
     }
 }
Пример #16
0
 public FileIndice RistampaSpedizioneArchiviazioneOttica(TipoDocumentoArchiviazione tipo, IList<int> idSpedizioni, bool automatedEmail, UserInfo userinfo)
 {
     var windsorRep = new WindsorConfigRepository();
     try
     {
         windsorRep.BeginTransaction(userinfo);
         var archiviazioneService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IArchiviazioneOtticaService>();
         var item = archiviazioneService.RistampaSpedizione(tipo, idSpedizioni, userinfo.Azienda, automatedEmail);
         windsorRep.Commit();
         return item;
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore inaspettato durante la ristampa delle spedizioni per archiviazione ottica  - {0} - tipo:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), tipo, userinfo.Azienda);
         windsorRep.Rollback();
         throw;
     }
 }