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