public ResultCreazioneFile GetQuadroAC(int azienda, int anno, TipoModuloQuadroAC tipoModulo)
 {
     return new ResultCreazioneFile(null, "PDF non attivo");
 }
        public ResultCreazioneFile GetQuadroAC(int idAzienda, int anno, TipoModuloQuadroAC tipoModulo)
        {
            byte[] bytes = null;
            var message = string.Empty;
            const int progressivoInvioTelematico = 0;
            const int numeroInviiTelematici = 0;

            var numeroRecordC = 0;

            StreamWriter sw = null;
            try
            {
                var fileName = Path.GetTempPath() + "\\" + Guid.NewGuid();
                if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
                    fileName = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory + "\\" + Guid.NewGuid();
                if (File.Exists(fileName))
                    File.Delete(fileName);

                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                // =============================================================================================
                // Spese da inserire nel Quadro AC
                // =============================================================================================
                var riepilogo = GetRiepilogoSpeseQuadroAC(idAzienda, anno);

                // =============================================================================================
                // Creazione del file
                // =============================================================================================
                using (sw = File.CreateText(fileName))
                {
                    var codiceFiscale = azienda.CodiceFiscale;
                    var codiceFornitura = "U50";
                    if (tipoModulo == TipoModuloQuadroAC.PersoneFisiche)
                    {
                        codiceFornitura = "UNI";
                        codiceFiscale = azienda.Amministratore.PersonaRiferimento.CodiceFiscale;
                    }
                    if (tipoModulo == TipoModuloQuadroAC.SocietaCapitale)
                        codiceFornitura = "U60";

                    writeTestataA(codiceFornitura, codiceFiscale, anno, progressivoInvioTelematico, numeroInviiTelematici, sw);
                    writeRowBQuadroAC(azienda, codiceFiscale, anno, tipoModulo, sw);

                    // ---------------------------------------------------------------------
                    //  Scrittura quadro AC
                    // ---------------------------------------------------------------------
                    var datiAC = new Dictionary<Fornitore, decimal>();
                    var pagamentiPerCondominio = from item in riepilogo
                                                 group item by item.IdCondominio into itemPerCondominio
                                                 select itemPerCondominio;


                    var index = 0;
                    var countRow = 0;
                    foreach (var itemGroup in pagamentiPerCondominio)
                    {
                        foreach (var itemSpesa in itemGroup)
                        {
                            countRow++;
                            datiAC.Add(_daoFactory.GetFornitoreDao().GetById(itemSpesa.IdFornitore, false), itemSpesa.Importo);
                            if (countRow == 5)
                            {
                                index++;
                                var condominio = _daoFactory.GetCondominioDao().GetById(itemGroup.Key, false);
                                writeRowCQuadroAC(azienda, condominio, codiceFiscale, index, datiAC, itemSpesa.Spese.Any(item => item.Detraibile.GetValueOrDefault()), sw);
                                numeroRecordC++;
                                countRow = 0;
                                datiAC.Clear();
                            }
                        
                        }

                        // Condomini con meno di 5 fornitori
                        if (datiAC.Count > 0)
                        {
                            index++;
                            var condominio = _daoFactory.GetCondominioDao().GetById(itemGroup.Key, false);
                            writeRowCQuadroAC(azienda, condominio, codiceFiscale, index, datiAC, itemGroup.SelectMany(item => item.Spese).Any(item => item.Detraibile.GetValueOrDefault()), sw);
                            numeroRecordC++;
                            countRow = 0;
                            datiAC.Clear();
                        }
                    }

                    writePiedeZ(1, numeroRecordC, 0, sw);
                }

                var infile = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                bytes = new byte[infile.Length];
                infile.Read(bytes, 0, bytes.Length);

                return new ResultCreazioneFile(bytes, message);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione del file per il Quadro AC - {0} - azienda:{1} - anno:{2}", ex, Library.Utility.GetMethodDescription(), idAzienda, anno);
                message = "Si sono verificati problemi inaspettati durante la generazione del Quadro AC." + Environment.NewLine + "Controllare il log per ulteriori dettagli.";
                return new ResultCreazioneFile(bytes, message);
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                    sw.Dispose();
                }
            }
        }
 public List<IdMessage> IsAllowGenerazioneQuadroAC(int azienda, int anno, TipoModuloQuadroAC tipoModuloQuadroAC)
 {
     return new List<IdMessage>();
 }
        public List<IdMessage> IsAllowGenerazioneQuadroAC(int idAzienda, int anno, TipoModuloQuadroAC tipoModuloQuadroAC)
        {
            try
            {
                var idmessage = new List<IdMessage>();

                // =============================================================================================
                // Spese da inserire nel Quadro AC
                // =============================================================================================
                var riepilogo = GetRiepilogoSpeseQuadroAC(idAzienda, anno);

                // -----------------------------------------------------------------
                // Controllo Azienda
                // -----------------------------------------------------------------
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                if (string.IsNullOrEmpty(azienda.CodiceFiscale))
                {
                    var message = "Per lo studio " + azienda.Descrizione + " non è presente il <b>CODICE FISCALE</b>" + Environment.NewLine;
                    idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                }

                if(azienda.Amministratore == null)
                {
                    var message = "Per lo studio " + azienda.Descrizione + " non è definito l'<b>AMMINISTRATORE</b>" + Environment.NewLine;
                    idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                }
                else 
                {
                    if (azienda.Amministratore.PersonaRiferimento.ComuneNascita == null)
                    {
                        var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito il <b>COMUNE DI NASCITA</b>" + Environment.NewLine;
                        idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                    }

                    if (string.IsNullOrEmpty(azienda.Amministratore.PersonaRiferimento.Cognome))
                    {
                        var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito il <b>COGNOME/b>" + Environment.NewLine;
                        idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                    }
                    if (string.IsNullOrEmpty(azienda.Amministratore.PersonaRiferimento.Nome))
                    {
                        var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito il <b>NOME</b>" + Environment.NewLine;
                        idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                    }
                    if (azienda.Amministratore.PersonaRiferimento.Sesso.GetValueOrDefault() == SessoEnum.Undefined)
                    {
                        var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito il <b>SESSO</b>" + Environment.NewLine;
                        idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                    }
                    if (string.IsNullOrEmpty(azienda.Amministratore.PersonaRiferimento.CodiceFiscale))
                    {
                        var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito il <b>CODICE FISCALE</b>" + Environment.NewLine;
                        idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                    }

                    if (tipoModuloQuadroAC == TipoModuloQuadroAC.PersoneFisiche)
                    {
                        if (azienda.Amministratore.PersonaRiferimento.IndirizzoResidenza == null)
                        {
                            var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito l'<b>INDIRIZZO</b>" + Environment.NewLine;
                            idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                        }
                        else if (azienda.Amministratore.PersonaRiferimento.IndirizzoResidenza.Comune == null)
                        {
                            var message = "Per l'amministratore dello studio " + azienda.Descrizione + " non è definito il <b>COMUNE DI RESIDENZA</b>" + Environment.NewLine;
                            idmessage.Add(new IdMessage(azienda.ID, TipoNominativo.Studio, azienda.Descrizione, message));
                        }
                    }
                }

                // -----------------------------------------------------------------
                // Raggruppamento per condominio
                // -----------------------------------------------------------------
                var spesePerCondominio = from item in riepilogo
                                         group item by item.IdCondominio into itemPerCondominio
                                         select itemPerCondominio;
                // Controllo condomini
                foreach (var itemGroup in spesePerCondominio)
                {
                    var message = string.Empty;
                    var condominio = _daoFactory.GetCondominioDao().GetById(itemGroup.Key, false);
                    if (condominio.Indirizzo == null)
                        message += "Per il condominio " + condominio.DisplayName + " non è presente l'<b>INDIRIZZO</b>." + Environment.NewLine;
                    else
                    {
                        if (condominio.Indirizzo.Comune == null)
                            message += "Per il condominio " + condominio.DisplayName + " non è presente il <b>COMUNE</b>." + Environment.NewLine;
                    }

                    // solo se sono presenti spese detraibili
                    if (itemGroup.SelectMany(item => item.Spese).Any(item => item.Detraibile.GetValueOrDefault()))
                    {
                        if (condominio.FoglioCatastale == null)
                            message += "Per il condominio " + condominio.DisplayName + " non è presente il <b>FOGLIO CATASTALE</b>." + Environment.NewLine;
                        if (condominio.MappaleCatastale == null)
                            message += "Per il condominio " + condominio.DisplayName + " non è presente il <b>MAPPALE CATASTALE</b>." + Environment.NewLine;

                        if (!string.IsNullOrEmpty(message))
                            idmessage.Add(new IdMessage(condominio.ID, TipoNominativo.Condominio, condominio.DisplayName, message));
                    }

                }

                // -----------------------------------------------------------------
                // Raggruppamento per fornitore
                // -----------------------------------------------------------------
                var spesePerFornitore = from item in riepilogo
                                        group item by item.IdFornitore into itemPerFornitore
                                        select itemPerFornitore;

                // Controllo fornitori
                foreach (var itemGroup in spesePerFornitore)
                {
                    var message = string.Empty;
                    var fornitore = _daoFactory.GetFornitoreDao().GetById(itemGroup.Key, false);
                    if (fornitore.PersonaRiferimento.IndirizzoResidenza == null)
                        message += "Per il fornitore " + fornitore.DisplayName + " non è presente l'<b>INDIRIZZO</b>." + Environment.NewLine;
                    else
                    {
                        if (fornitore.PersonaRiferimento.IndirizzoResidenza.Comune == null)
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>COMUNE DI RESIDENZA</b>." + Environment.NewLine;
                        if (string.IsNullOrEmpty(fornitore.PersonaRiferimento.IndirizzoResidenza.Indirizzo))
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente l'<b>INDIRIZZO</b>." + Environment.NewLine;
                    }

                    if (string.IsNullOrEmpty(fornitore.GetCodiceFiscale()))
                        message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>CODICE FISCALE</b>." + Environment.NewLine;

                    if (fornitore.PersonaRiferimento.TipoPersona == null || fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Undefined)
                        message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>TIPO DI PERSONA (fisica o giuridica)</b>." + Environment.NewLine;
                    else if (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica)
                    {
                        if (string.IsNullOrEmpty(fornitore.PersonaRiferimento.Cognome))
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>COGNOME</b>." + Environment.NewLine;
                        if (string.IsNullOrEmpty(fornitore.PersonaRiferimento.Nome))
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>NOME</b>." + Environment.NewLine;
                        if (fornitore.PersonaRiferimento.Sesso.GetValueOrDefault() == SessoEnum.Undefined)
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>SESSO</b>." + Environment.NewLine;
                        if (fornitore.PersonaRiferimento.ComuneNascita == null)
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente il <b>COMUNE DI NASCITA</b>." + Environment.NewLine;
                        if (fornitore.PersonaRiferimento.DataNascita == null)
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente la <b>DATA DI NASCITA</b>." + Environment.NewLine;
                    }
                    else if (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Giuridica)
                    {
                        if (string.IsNullOrEmpty(fornitore.PersonaRiferimento.RagioneSociale))
                            message += "Per il fornitore " + fornitore.DisplayName + " non è presente la <b>RAGIONE SOCIALE</b>." + Environment.NewLine;
                    }

                    if (!string.IsNullOrEmpty(message))
                        idmessage.Add(new IdMessage(fornitore.ID, TipoNominativo.Fornitore, fornitore.DisplayName, message));
                }

                return idmessage;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il controllo di generazione del Quadro AC - {0} - azienda:{1} - anno:{2}", ex, Library.Utility.GetMethodDescription(), idAzienda, anno);
                throw;
            }
        }
        /// <summary>
        /// Record contenente i dati anagrafici del contribuente e gli altri dati del modello base
        /// </summary>
        /// <param name="codiceFiscale">Codice Fiscale dell'amministratore</param>
        /// <param name="anno"></param>
        /// <param name="tipoModulo">Tipo Modulo del quadro AC (Società di capitali, Società di persone o Persona fisica)</param>
        /// <param name="sw">File di scrittura</param>
        /// <param name="azienda"></param>
        private void writeRowBQuadroAC(Azienda azienda, string codiceFiscale, int anno, TipoModuloQuadroAC tipoModulo, StreamWriter sw)
        {
            try
            {
                var sb = new StringBuilder(1900);

                // Tipo record
                sb.Append("B");

                // Codice Fiscale del soggetto dichiarante (Amministratore)
                sb.Append(codiceFiscale.PadRight(16, ' '));

                // Progressivo Modulo
                const int progressivoModulo = 1;
                sb.Append(progressivoModulo.ToString().PadLeft(8, '0'));

                // campo utente
                sb.Append(string.Empty.PadLeft(3));

                // filler
                sb.Append(string.Empty.PadLeft(25));

                // campo utente per identificativo dichiarazione
                sb.Append(string.Empty.PadRight(20));

                // Identificativo del produttore del software (codice fiscale)
                sb.Append("02818651206".PadRight(16));

                // ---------------------------------------------------------------------------------------------------------
                // Comunicazione di mancata corrispondenza dei dati da trasmettere con quelli risultanti dalla dichiarazione
                // ---------------------------------------------------------------------------------------------------------
                // Flag conferma
                sb.Append("0");

                //======================================================
                // Dati del frontespizio
                //======================================================

                //---------------------------------------------
                // Tipo di dichiarazione
                // Nel caso di dichiarazione integrativa (casella 23 del rec. B impostata con il valore "1") le caselle della
                // presente sezione devono essere compilate in maniera conforme a quanto indicato nel paragrafo 2.8 delle
                // presenti specifiche tecniche
                //---------------------------------------------

                // Redditi
                sb.Append("0");
                // filler
                sb.Append(string.Empty.PadLeft(1));

                // IVA
                sb.Append("0");
                // Modulo RW
                sb.Append("0");
                // Quadro VO
                sb.Append("0");
                // Quadro AC
                sb.Append("1");
                // Studi di settore
                sb.Append("0");
                // Parametri
                sb.Append("0");
                // Indicatori
                sb.Append("0");

                if (tipoModulo == TipoModuloQuadroAC.SocietaCapitale || tipoModulo == TipoModuloQuadroAC.SocietaPersone)
                {
                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                }
                else
                {
                    // Eventi eccezionali
                    sb.Append("0");
                }

                // filler
                sb.Append(string.Empty.PadLeft(1));

                // IVA Base
                sb.Append("0");
                // Dichiarazione correttiva nei termini
                sb.Append("0");
                // Dichiarazione integrativa a favore
                sb.Append("0");
                // Dichiarazione integrativa
                sb.Append("0");
                // Dichiarazione integrativa (art. 2, co. 8ter, DPR 322/98)
                sb.Append("0");

                //---------------------------------------------
                // Dati del contribuente (amministratore)
                //---------------------------------------------

                if (tipoModulo == TipoModuloQuadroAC.SocietaCapitale || tipoModulo == TipoModuloQuadroAC.SocietaPersone)
                {
                    // filler
                    sb.Append(string.Empty.PadLeft(24));
                    sb.Append(string.Empty.PadLeft(20));

                    // Denominazione
                    var denominazione = Library.Conversione.ToInvioTelematico(azienda.Descrizione);
                    if (denominazione.Length > 60)
                        denominazione = denominazione.Substring(0, 60);
                    sb.Append(denominazione.PadRight(60));

                    // Partita IVA
                    sb.Append(azienda.PartitaIva);
                    // Telefono Prefisso e Numero
                    sb.Append(string.Empty.PadLeft(12));
                    // FAX
                    sb.Append(string.Empty.PadLeft(12));
                    // Indirizzo di posta elettronica
                    sb.Append(string.Empty.PadLeft(50));

                    // filler
                    sb.Append(string.Empty.PadLeft(40));
                    sb.Append(string.Empty.PadLeft(2));
                    sb.Append(string.Empty.PadLeft(8));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(40));
                    sb.Append(string.Empty.PadLeft(2));
                    sb.Append(string.Empty.PadLeft(5));
                    sb.Append(string.Empty.PadLeft(4));
                    sb.Append(string.Empty.PadLeft(20));
                    sb.Append(string.Empty.PadLeft(35));
                    sb.Append(string.Empty.PadLeft(10));
                    sb.Append(string.Empty.PadLeft(35));
                    sb.Append(string.Empty.PadLeft(8));
                    sb.Append(string.Empty.PadLeft(1));

                    // Eventi eccezionali
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(6));
                    sb.Append(string.Empty.PadLeft(40));
                    sb.Append(string.Empty.PadLeft(2));
                    sb.Append(string.Empty.PadLeft(4));
                    sb.Append(string.Empty.PadLeft(35));
                    sb.Append(string.Empty.PadLeft(5));
                    sb.Append(string.Empty.PadLeft(6));
                    sb.Append(string.Empty.PadLeft(40));
                    sb.Append(string.Empty.PadLeft(2));
                    sb.Append(string.Empty.PadLeft(4));
                    sb.Append(string.Empty.PadLeft(35));
                    sb.Append(string.Empty.PadLeft(5));

                    //---------------------------------------------
                    // Dati relativi alla Società o Associazione
                    //---------------------------------------------

                    // Data di efficacia giuridica fusione/scissione
                    sb.Append(string.Empty.PadRight(8, '0'));

                    // filler
                    sb.Append(string.Empty.PadLeft(8));

                    // Data inizio periodo imposta
                    sb.Append(convertData(new DateTime(anno, 1, 1)));
                    // Data fine periodo imposta
                    sb.Append(convertData(new DateTime(anno, 12, 31)));

                    // Stato
                    sb.Append("1");
                    // Natura giuridica
                    sb.Append("25");
                    // Situazione
                    sb.Append("6");

                    // Codice fiscale, in caso di fusione, della
                    // società incorporante o risultante dalla
                    // fusione e, in caso di scissione, della
                    // società beneficiaria designata
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // Grandi contribuenti
                    sb.Append("0");
                    // Canone Rai
                    sb.Append("3");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(2));
                    sb.Append(string.Empty.PadLeft(8));
                    sb.Append(string.Empty.PadLeft(20));
                    sb.Append(string.Empty.PadLeft(24));
                    sb.Append(string.Empty.PadLeft(3));
                    sb.Append(string.Empty.PadLeft(24));
                    sb.Append(string.Empty.PadLeft(24));
                    sb.Append(string.Empty.PadLeft(35));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(16));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(16));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(16));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(16));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(16));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));


                    //---------------------------------------------
                    // Firma della Dichiarazione
                    // Il seguente controllo vale per tutti i campi della sezione.
                    // Se non sono impostati i campi 7 e 8 del record A oppure il campo 7 del record A è impostato ad '1' e la
                    // casella è impostata ad '1' deve essere presente almeno un dato del relativo quadro
                    // Se risulta compilato il relativo quadro, la casella deve essere impostata al valore "1".
                    // Nel caso di dichiarazione integrativa (casella 23 del rec. B impostata con il valore "1") le caselle della
                    // presente sezione devono essere compilate in maniera conforme a quanto indicato nel paragrafo 2.8 delle
                    // presenti specifiche tecniche
                    //---------------------------------------------
                    // Casella quadro RA 987 1 NU
                    sb.Append("0");

                    // Casella quadro RB 988 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro RD 990 1 NU
                    sb.Append("0");
                    // Casella quadro RE 991 1 NU
                    sb.Append("0");
                    // Casella quadro RF 992 1 NU
                    sb.Append("0");
                    // Casella quadro RG 993 1 NU
                    sb.Append("0");
                    // Casella quadro RH 994 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro RL 997 1 NU
                    sb.Append("0");
                    // Casella quadro RM 998 1 NU
                    sb.Append("0");
                    // Casella quadro RN 999 1 NU
                    sb.Append("0");
                    // Casella quadro RO 1000 1 NU
                    sb.Append("0");
                    // Casella quadro RP 1001 1 NU
                    sb.Append("0");
                    // Casella quadro RQ 1002 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro RS 1004 1 NU
                    sb.Append("0");
                    // Casella quadro RT 1005 1 NU
                    sb.Append("0");
                    // Casella quadro RU 1006 1 NU
                    sb.Append("0");
                    // Casella quadro RV 1007 1 NU
                    sb.Append("0");
                    // Casella quadro RX 1008 1 NU
                    sb.Append("0");
                    // Casella quadro RJ
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro TR 1015 1 NU
                    sb.Append("0");
                    // Casella quadro FC 1016 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro OP 1020 1 NU
                    sb.Append("0");

                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));

                    // Numero Moduli IVA
                    sb.Append("000");

                    // Invio avviso telematico all'intermediario
                    sb.Append("0");

                    // Firma del dichiarante
                    sb.Append("1");

                    //---------------------------------------------
                    // Flag di conferma parziali
                    //---------------------------------------------

                    // Flag conferma Redditi 1041 1 CB 
                    sb.Append("0");
                    // Flag conferma IVA 1042 1 CB 
                    sb.Append("0");
                    // Flag conferma Studi di settore/parametri
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(5));
                    // filler
                    sb.Append(string.Empty.PadLeft(16));
                    // filler
                    sb.Append(string.Empty.PadLeft(60));
                    // filler
                    sb.Append(string.Empty.PadLeft(24));
                    // filler
                    sb.Append(string.Empty.PadLeft(20));
                    // filler
                    sb.Append(string.Empty.PadLeft(40));

                    // Situazioni particolari
                    sb.Append("00");

                    // -------------------------------------------------------------------------------
                    // Richiesta del contribuente che la comunicazione delle anomalie riscontrate automaticamente
                    // -------------------------------------------------------------------------------

                    // Invio comunicazione telematica anomalie dati studi di settore all’intermediario
                    sb.Append("0");
                    // Ricezione comunicazione telematica anomalie dati studi di settore
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(27));
                    // filler
                    sb.Append(string.Empty.PadLeft(35));
                    // filler
                    sb.Append(string.Empty.PadLeft(10));
                    // filler
                    sb.Append(string.Empty.PadLeft(35));
                    // filler
                    sb.Append(string.Empty.PadLeft(24));
                    // filler
                    sb.Append(string.Empty.PadLeft(3));
                    // filler
                    sb.Append(string.Empty.PadLeft(81));

                    //---------------------------------------------
                    // Omessa presentazione in dichiarazione del modello Studi di settore
                    //---------------------------------------------

                    // Flag Assenza Studi di settore con quadro G compilato
                    sb.Append("0");
                    // Flag Assenza Studi di settore con quadro F compilato
                    sb.Append("0");

                    //---------------------------------------------
                    // Dati relativi al rappresentante firmatario della dichiarazione
                    //---------------------------------------------

                    // Codice fiscale
                    sb.Append(azienda.Amministratore.PersonaRiferimento.CodiceFiscale.PadRight(16));

                    // Codice carica del rappresentante
                    sb.Append("01");

                    // Data carica del rappresentante
                    sb.Append("00000000");

                    // Codice fiscale società o ente dichiarante
                    sb.Append(azienda.CodiceFiscale.Length != 11 ? string.Empty.PadLeft(11, '0') : azienda.CodiceFiscale);

                    // Cognome del rappresentante
                    sb.Append(Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.Cognome).ToUpper().PadRight(24));

                    // Nome del rappresentante
                    sb.Append(Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.Nome).ToUpper().PadRight(20));

                    // Sesso del rappresentante
                    sb.Append(azienda.Amministratore.PersonaRiferimento.Sesso.ToString().Substring(0, 1));

                    // Data di nascita del rappresentante
                    sb.Append(convertData(azienda.Amministratore.PersonaRiferimento.DataNascita));

                    // Comune o stato estero di nascita del rappresentante
                    sb.Append(Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.ComuneNascita.Descrizione).PadRight(40));

                    // Sigla della provincia di nascita del rappresentante
                    sb.Append(azienda.Amministratore.PersonaRiferimento.ComuneNascita.ProvinciaAppartenenza.Codice.PadRight(2));

                    // filler
                    sb.Append(string.Empty.PadLeft(3));
                    sb.Append(string.Empty.PadLeft(24));
                    sb.Append(string.Empty.PadLeft(24));
                    sb.Append(string.Empty.PadLeft(35));

                    // Numero di telefono del rappresentante
                    sb.Append(string.Empty.PadRight(12));

                    // filler
                    sb.Append(string.Empty.PadLeft(4));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(8));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));

                    //---------------------------------------------
                    // Impegno alla trasmissione telematica
                    //---------------------------------------------

                    // Codice fiscale dell'intermediario
                    sb.Append(azienda.CodiceFiscale.PadRight(16));

                    // Soggetto che predisposto la dichiarazione
                    sb.Append("1");

                    // Ricezione avviso telematico
                    sb.Append("0");

                    // Data dell'impegno
                    sb.Append(convertData(DateTime.Today));

                    // Firma dell'intermediario
                    sb.Append("1");

                    //---------------------------------------------
                    // Visto di conformità
                    //---------------------------------------------

                    // Casella Redditi/IVA
                    sb.Append("0");

                    // Codice fiscale del responsabile del C.A.F.
                    sb.Append(string.Empty.PadRight(16));

                    // Codice fiscale del C.A.F.
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // Codice fiscale del professionista
                    sb.Append(string.Empty.PadRight(16));

                    // Firma
                    sb.Append("0");

                    //---------------------------------------------
                    // Certificazione tributaria
                    // (La sezione può essere valorizzata solo in presenza di quadro RF e di sezione relativa al Visto di conformità e
                    // non deve essere valorizzata in caso di tipo fornitore 7 e 8)
                    //---------------------------------------------

                    // Codice fiscale del professionista 1747 16 CF
                    sb.Append(string.Empty.PadRight(16));
                    // Codice fiscale o IVA del soggetto diverso dal certificatore che ha predisposto la dichiarazione e tenuto le scritture contabili
                    sb.Append(string.Empty.PadRight(16));
                    // Firma 1779 1 CB
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(64));

                    //---------------------------------------------
                    // Spazio riservato al Servizio telematico
                    //---------------------------------------------

                    // Spazio riservato al Servizio Telematico
                    sb.Append(string.Empty.PadLeft(20));

                    // filler
                    sb.Append(string.Empty.PadLeft(7));
                    sb.Append(string.Empty.PadLeft(3));
                    sb.Append(string.Empty.PadLeft(5));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(12));
                }
                else
                {
                    // Cognome
                    var cognome = Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.Cognome.ToUpper());
                    if (cognome.Length > 60)
                        cognome = cognome.Substring(0, 24);
                    sb.Append(cognome.PadRight(24));

                    // Nome
                    var nome = Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.Nome.ToUpper());
                    if (nome.Length > 60)
                        nome = cognome.Substring(0, 20);
                    sb.Append(nome.PadRight(20));

                    // filler
                    sb.Append(string.Empty.PadLeft(60));

                    // Partita IVA
                    var partitaIva = string.Empty;
                    if (!string.IsNullOrEmpty(azienda.Amministratore.PersonaRiferimento.PartitaIva))
                        partitaIva = azienda.Amministratore.PersonaRiferimento.PartitaIva;
                    sb.Append(partitaIva.PadLeft(11, '0'));

                    // Telefono Prefisso e Numero
                    sb.Append(string.Empty.PadLeft(12));
                    // Cellulare
                    sb.Append(string.Empty.PadLeft(12));
                    // Indirizzo di posta elettronica
                    sb.Append(string.Empty.PadLeft(50));
                    // Comune di nascita
                    sb.Append(azienda.Amministratore.PersonaRiferimento.ComuneNascita.Descrizione.PadRight(40));
                    // Provincia di nascita
                    sb.Append(azienda.Amministratore.PersonaRiferimento.ComuneNascita.ProvinciaAppartenenza.Codice.PadLeft(2));
                    // Data di nascita
                    sb.Append(convertData(azienda.Amministratore.PersonaRiferimento.DataNascita.GetValueOrDefault()));
                    // Sesso
                    sb.Append(azienda.Amministratore.PersonaRiferimento.Sesso.ToString().ToUpper().Substring(0,1).PadLeft(1));
                    // Stato civile
                    sb.Append("0");

                    // -----------------------
                    // Residenza Anagrafica
                    // -----------------------

                    // Comune di residenza
                    sb.Append(string.Empty.PadLeft(40));

                    // Sigla della provincia di residenza
                    sb.Append(string.Empty.PadLeft(2));

                    // CAP della residenza anagrafica
                    sb.Append(string.Empty.PadRight(5, '0'));

                    // Codice Comune
                    sb.Append(string.Empty.PadLeft(4));

                    // Tipologia Indirizzo
                    sb.Append(string.Empty.PadLeft(20));

                    // Indirizzo
                    sb.Append(string.Empty.PadLeft(35));

                    // Numero civico
                    sb.Append(string.Empty.PadLeft(10));

                    // Frazione
                    sb.Append(string.Empty.PadLeft(35));

                    // Data di variazione della residenza anagrafica o del domicilio fiscale
                    sb.Append(string.Empty.PadRight(8, '0'));

                    // Domicilio fiscale diverso da residenza anagrafica
                    sb.Append("0");

                    // Casella dichiarazione presentata per la prima volta
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(6));

                    // -------------------
                    // Domicilio Fiscale - 1
                    // -------------------
                    // Comune 
                    sb.Append(azienda.Amministratore.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione.PadRight(40));
                    // Provincia
                    sb.Append(azienda.Amministratore.PersonaRiferimento.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice);
                    // Codice del comune
                    sb.Append(azienda.Amministratore.PersonaRiferimento.IndirizzoResidenza.Comune.CodiceCatastale);

                    // -------------------
                    // Domicilio Fiscale - 2
                    // -------------------
                    // Comune 
                    sb.Append(string.Empty.PadLeft(40));
                    // Provincia
                    sb.Append(string.Empty.PadLeft(2));
                    // Codice del comune
                    sb.Append(string.Empty.PadLeft(4));

                    sb.Append(string.Empty.PadLeft(40));
                    sb.Append(string.Empty.PadLeft(2));
                    sb.Append(string.Empty.PadLeft(4));
                    sb.Append(string.Empty.PadLeft(35));
                    sb.Append(string.Empty.PadLeft(5));
                    sb.Append(string.Empty.PadLeft(8));
                    sb.Append(string.Empty.PadLeft(8));

                    // --------------------------------------------
                    // Liquidazione volontaria o fallimento
                    // --------------------------------------------
                    // Data inizio periodo imposta
                    sb.Append(convertData(new DateTime(anno, 1, 1)));
                    // Data fine periodo imposta
                    sb.Append(convertData(new DateTime(anno, 12, 31)));

                    // Stato
                    sb.Append("1");
                    
                    // filler
                    sb.Append(string.Empty.PadLeft(2));

                    // Immobili sequestrati esenti
                    sb.Append("0");

                    // Accettazione dell'eredità giacente
                    sb.Append("0");

                    // Liquidazione volontaria
                    sb.Append("0");
                    // Canone Rai Imprese
                    sb.Append("3");

                    // filler
                    sb.Append(string.Empty.PadLeft(18));

                    // -------------------------------------
                    //  Residente all'estero
                    // -------------------------------------
                    // Codice Fiscale estero
                    sb.Append(string.Empty.PadLeft(20));
                    // Stato estero di residenza
                    sb.Append(string.Empty.PadLeft(24));
                    // Codice paese estero
                    sb.Append(string.Empty.PadRight(3, '0'));
                    // Stato federato, provincia, contea
                    sb.Append(string.Empty.PadLeft(24));
                    // Località di residenza
                    sb.Append(string.Empty.PadLeft(24));
                    // Indirizzo
                    sb.Append(string.Empty.PadLeft(35));

                    // Casella Schumacker
                    sb.Append("0");
                    // Nazionalità estera
                    sb.Append("0");
                    // Nazionalità italiana
                    sb.Append("0");

                    // ---------------------------------
                    // Scelta 8 per mille
                    // ---------------------------------
                    // Stato
                    sb.Append("0");
                    // Chiesa cattolica
                    sb.Append("0");
                    // Avventista
                    sb.Append("0");
                    // Assemblee dio in italia
                    sb.Append("0");
                    // Chiesa evengelista/valdese
                    sb.Append("0");
                    // Luterana
                    sb.Append("0");
                    // Ebraica
                    sb.Append("0");
                    // Esarcato
                    sb.Append("0");
                    // Apostolica
                    sb.Append("0");
                    // Battista
                    sb.Append("0");
                    // Buddhista
                    sb.Append("0");
                    // Induista
                    sb.Append("0");

                    // Scelta non effettuata
                    sb.Append("1");

                    // Anomalia
                    sb.Append("0");

                    // -------------------------------------------------------
                    // Scelta 5 per mille
                    // -------------------------------------------------------
                    // Onlus
                    sb.Append("0");
                    // Codice fiscale beneficiario
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // Ricerca scientifica
                    sb.Append("0");
                    // Codice fiscale beneficiario
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // Ricerca sanitaria
                    sb.Append("0");
                    // Codice fiscale beneficiario
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // Sostegno attività culturali
                    sb.Append("0");
                    // Sostegno attività sociali
                    sb.Append("0");
                    // Sostegno associazioni sportive CONI
                    sb.Append("0");
                    // Codice fiscale beneficiario
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // filler
                    sb.Append(string.Empty.PadLeft(37));

                    // Anomalia 5 per mille
                    sb.Append("0");

                    // Scelta non effettuata
                    sb.Append("1");

                    // Anomalia codice fiscale beneficiario
                    sb.Append("0");
                    
                    //---------------------------------------------
                    // Firma della Dichiarazione
                    // Il seguente controllo vale per tutti i campi della sezione.
                    // Se non sono impostati i campi 7 e 8 del record A oppure il campo 7 del record A è impostato ad '1' e la
                    // casella è impostata ad '1' deve essere presente almeno un dato del relativo quadro
                    // Se risulta compilato il relativo quadro, la casella deve essere impostata al valore "1".
                    // Nel caso di dichiarazione integrativa (casella 23 del rec. B impostata con il valore "1") le caselle della
                    // presente sezione devono essere compilate in maniera conforme a quanto indicato nel paragrafo 2.8 delle
                    // presenti specifiche tecniche
                    //---------------------------------------------
                    // Casella quadro RA 987 1 NU
                    sb.Append("0");
                    // Casella quadro RB 988 1 NU
                    sb.Append("0");
                    // Casella quadro RC 989 1 NU
                    sb.Append("0");
                    // Casella quadro RD 990 1 NU
                    sb.Append("0");
                    // Casella quadro RE 991 1 NU
                    sb.Append("0");
                    // Casella quadro RF 992 1 NU
                    sb.Append("0");
                    // Casella quadro RG 993 1 NU
                    sb.Append("0");
                    // Casella quadro RH 994 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro RL 997 1 NU
                    sb.Append("0");
                    // Casella quadro RM 998 1 NU
                    sb.Append("0");
                    // Casella quadro RN 999 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella quadro RP 1001 1 NU
                    sb.Append("0");
                    // Casella quadro RQ 1002 1 NU
                    sb.Append("0");
                    // Casella quadro RR 1003 1 NU
                    sb.Append("0");
                    // Casella quadro RS 1004 1 NU
                    sb.Append("0");
                    // Casella quadro RT 1005 1 NU
                    sb.Append("0");
                    // Casella quadro RU 1006 1 NU
                    sb.Append("0");
                    // Casella quadro RV 1007 1 NU
                    sb.Append("0");
                    // Casella quadro RX 1008 1 NU
                    sb.Append("0");
                    // Casella quadro CS
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Casella familiari a carico 1011 1 NU
                    sb.Append("0");
                    // Casella quadro CR 1012 1 NU
                    sb.Append("0");
                    // Casella quadro CE 1013 1 NU
                    sb.Append("0");
                    // Casella quadro LM 1014 1 NU
                    sb.Append("0");
                    // Casella quadro TR 1015 1 NU
                    sb.Append("0");
                    // Casella quadro FC 1016 1 NU
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(1));

                    // Numero Moduli IVA
                    sb.Append("000");

                    // Invio avviso telematico all'intermediario
                    sb.Append("0");

                    // Firma del dichiarante
                    sb.Append("1");

                    //---------------------------------------------
                    // Flag di conferma parziali
                    //---------------------------------------------

                    // Flag conferma Redditi 1041 1 CB 
                    sb.Append("0");
                    // Flag conferma IVA 1042 1 CB 
                    sb.Append("0");
                    // Flag conferma Studi di settore/parametri
                    sb.Append("0");

                    // -------------------------------------------------
                    // Scelta 2 per mille
                    // -------------------------------------------------

                    // Codice partito politico
                    sb.Append(string.Empty.PadLeft(3));
                    // firma
                    sb.Append("0");
                    // scelta non effettuata
                    sb.Append("1");
                    // anomalia
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(19));

                    // filler
                    sb.Append(string.Empty.PadLeft(140));

                    // Situazioni particolari
                    sb.Append("00");

                    // -------------------------------------------------------------------------------
                    // Richiesta del contribuente che la comunicazione delle anomalie riscontrate automaticamente
                    // -------------------------------------------------------------------------------

                    // Invio comunicazione telematica anomalie dati studi di settore all’intermediario
                    sb.Append("0");
                    // Ricezione comunicazione telematica anomalie dati studi di settore
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(27));
                    // filler
                    sb.Append(string.Empty.PadLeft(35));
                    // filler
                    sb.Append(string.Empty.PadLeft(10));
                    // filler
                    sb.Append(string.Empty.PadLeft(35));
                    // filler
                    sb.Append(string.Empty.PadLeft(24));
                    // filler
                    sb.Append(string.Empty.PadLeft(3));
                    // filler
                    sb.Append(string.Empty.PadLeft(81));

                    //---------------------------------------------
                    // Omessa presentazione in dichiarazione del modello Studi di settore
                    //---------------------------------------------

                    // Flag Assenza Studi di settore con quadro G compilato
                    sb.Append("0");
                    // Flag Assenza Studi di settore con quadro F compilato
                    sb.Append("0");

                    //---------------------------------------------
                    // Dati relativi al rappresentante firmatario della dichiarazione
                    //---------------------------------------------

                    // Codice fiscale
                    sb.Append(azienda.Amministratore.PersonaRiferimento.CodiceFiscale.PadRight(16));

                    // Codice carica del rappresentante
                    sb.Append("01");

                    // Data carica del rappresentante
                    sb.Append(string.Empty.PadRight(8, '0'));

                    // Codice fiscale società o ente dichiarante
                    sb.Append(azienda.CodiceFiscale.Length != 11 ? string.Empty.PadLeft(11, '0') : azienda.CodiceFiscale);

                    // Cognome del rappresentante
                    sb.Append(Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.Cognome).ToUpper().PadRight(24));

                    // Nome del rappresentante
                    sb.Append(Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.Nome).ToUpper().PadRight(20));

                    // Sesso del rappresentante
                    sb.Append(azienda.Amministratore.PersonaRiferimento.Sesso.ToString().Substring(0, 1));

                    // Data di nascita del rappresentante
                    sb.Append(convertData(azienda.Amministratore.PersonaRiferimento.DataNascita));

                    // Comune o stato estero di nascita del rappresentante
                    sb.Append(Library.Conversione.ToInvioTelematico(azienda.Amministratore.PersonaRiferimento.ComuneNascita.Descrizione).PadRight(40));

                    // Sigla della provincia di nascita del rappresentante
                    sb.Append(azienda.Amministratore.PersonaRiferimento.ComuneNascita.ProvinciaAppartenenza.Codice.PadRight(2));

                    // Comune di residenza anagrafica del rappresentante
                    sb.Append(string.Empty.PadLeft(40));
                    // Sigla della provincia di residenza del rappresentante
                    sb.Append(string.Empty.PadLeft(2));
                    // CAP del  comune di resdienza del rappresentante
                    sb.Append("00000");
                    // Frazione, via e numero civico del rappresentante
                    sb.Append(string.Empty.PadLeft(35));

                    // Numero di telefono del rappresentante
                    sb.Append(string.Empty.PadRight(12));

                    // Data di inizio procedura
                    sb.Append(string.Empty.PadRight(8, '0'));
                    // Procedura non ancora terminata
                    sb.Append("0");
                    // Data di fine procedura
                    sb.Append(string.Empty.PadRight(8, '0'));

                    // filler
                    sb.Append(string.Empty.PadLeft(1));

                    // Rappresentante residente all'estero
                    sb.Append("0");

                    //---------------------------------------------
                    // Impegno alla trasmissione telematica
                    //---------------------------------------------

                    // Codice fiscale dell'intermediario
                    sb.Append(azienda.CodiceFiscale.PadRight(16));

                    // Soggetto che predisposto la dichiarazione
                    sb.Append("1");

                    // Ricezione avviso telematico
                    sb.Append("0");

                    // Data dell'impegno
                    sb.Append(convertData(DateTime.Today));

                    // Firma dell'intermediario
                    sb.Append("1");

                    //---------------------------------------------
                    // Visto di conformità
                    //---------------------------------------------

                    // Casella Redditi/IVA
                    sb.Append("0");

                    // Codice fiscale del responsabile del C.A.F.
                    sb.Append(string.Empty.PadRight(16));

                    // Codice fiscale del C.A.F.
                    sb.Append(string.Empty.PadRight(11, '0'));

                    // Codice fiscale del professionista
                    sb.Append(string.Empty.PadRight(16));

                    // Firma
                    sb.Append("0");

                    //---------------------------------------------
                    // Certificazione tributaria
                    // (La sezione può essere valorizzata solo in presenza di quadro RF e di sezione relativa al Visto di conformità e
                    // non deve essere valorizzata in caso di tipo fornitore 7 e 8)
                    //---------------------------------------------

                    // Codice fiscale del professionista 1747 16 CF
                    sb.Append(string.Empty.PadRight(16));
                    // Codice fiscale o IVA del soggetto diverso dal certificatore che ha predisposto la dichiarazione e tenuto le scritture contabili
                    sb.Append(string.Empty.PadRight(16));
                    // Firma 1779 1 CB
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(64));

                    //---------------------------------------------
                    // Spazio riservato al Servizio telematico
                    //---------------------------------------------

                    // Spazio riservato al Servizio Telematico
                    sb.Append(string.Empty.PadLeft(20));

                    //---------------------------------------------
                    // Spazio riservato a Poste
                    //---------------------------------------------
                    // Numero progressivo del pacco
                    sb.Append(string.Empty.PadRight(7, '0'));
                    // Numero sequenza della dichiarazione all'interno del pacco
                    sb.Append(string.Empty.PadRight(3, '0'));

                    // filler
                    sb.Append(string.Empty.PadLeft(5));

                    // Codice del centro operativo
                    sb.Append(string.Empty.PadLeft(1));

                    // Formato errato
                    sb.Append("0");
                    // Incoerenza nei dati dichiarati
                    sb.Append("0");
                    // Comunicazione situazioni particolari
                    sb.Append("0");
                    // Protocollo con identificativo del modello errato
                    sb.Append("0");
                    // Dichiarazione smarrita
                    sb.Append("0");

                    // filler
                    sb.Append(string.Empty.PadLeft(1));
                    sb.Append(string.Empty.PadLeft(12));
                }

                //---------------------------------------------
                // Ultimi caratteri di controllo
                //---------------------------------------------
                sb.Append("A");

                // CarriageReturn LineFeed
                sb.Append(CRLF);

                sw.Write(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.FatalFormat("Errore inaspettato durante la creazione della riga C - Quadro AC - {0} - azienda:{1} - anno:{2}", ex, Library.Utility.GetMethodDescription(), azienda.ID, anno);
                throw;
            }
        }
        public List<IdMessage> IsAllowGenerazioneQuadroAC(int anno, TipoModuloQuadroAC tipoModuloQuadroAC)
        {
            var result = GetServiceClient().IsAllowGenerazioneQuadroAC(anno, tipoModuloQuadroAC, GetUserInfo());
            CloseService();
            return result;

        }
        public string GetQuadroACTelematico(int anno, string nomeFile, TipoModuloQuadroAC tipoModulo)
        {
            try
            {
                var result = GetServiceClient().GetQuadroAC(anno, tipoModulo, GetUserInfo());
                if (string.IsNullOrEmpty(result.Message))
                {
                    var doc = new DocumentInfo { Body = result.FileBody, FileName = nomeFile };
                    try
                    {
                        _manageDocumentService.Save(doc);
                    }
                    catch (ArgumentException)
                    {
                        return $"Il nome di file '{nomeFile}' non è consentito";
                    }
                }

                CloseService();
                return result.Message;

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nella creazione del Quadro AC telematico - {0} - anno:{1} - nomeFile:{2} - azienda:{3}", ex, Gipasoft.Library.Utility.GetMethodDescription(), anno, nomeFile, Gipasoft.Security.Login.Instance.CurrentLogin().Azienda);
                throw;
            }
        }
예제 #8
0
		public ResultCreazioneFile GetQuadroAC(int anno, TipoModuloQuadroAC tipoModulo, UserInfo userinfo)
		{
			var windsorRep = new WindsorConfigRepository();
			try
			{
				windsorRep.BeginTransaction(userinfo);
                var service = windsorRep.GetContainer(userinfo.Azienda).Resolve<IGestioneFiscaleService>("gestionefiscale.entratel");
                var item = service.GetQuadroAC(userinfo.Azienda, anno, tipoModulo);
				windsorRep.Commit();
				return item;
			}
			catch (Exception ex)
			{
                _log.ErrorFormat("Errore durante la generazione del Quadro AC telematico - {0} - azienda:{1} - anno:{2} - tipoModulo:{3}", ex, Utility.GetMethodDescription(), userinfo.Azienda, anno, tipoModulo);
				windsorRep.Rollback();
				throw;
			}
		}