Exemplo n.º 1
0
        public Documento FillDocument(int? idModello, Appalto appalto, int idAzienda)
        {
            Documento result = null;
            if (idModello > 0 || appalto.TipoContratto > 0)
            {
                _appalto = appalto;

                if (idModello == null)
                {
                    var modello = _daoFactory.GetTipoContrattoDao().GetById(appalto.TipoContratto, false).ModelloLettera;
                    if (modello != null)
                        idModello = modello.ID;
                }

                if (idModello != null)
                {
                    var rtf = Conversione.ToString(_modelloLetteraservice.GetLettera(idModello.Value).Body);

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

                    var merge = new MergeDocument(rtf, false);

                    merge.Execute("nomeStudio", azienda.Descrizione);

                    if (azienda.Amministratore != null)
                        merge.Execute("amministratore", string.Format("{0} {1}", azienda.Amministratore.PersonaRiferimento.Nome, azienda.Amministratore.PersonaRiferimento.Cognome));

                    if (azienda.IndirizzoSede != null)
                    {
                        merge.Execute("indirizzoStudio", azienda.IndirizzoSede.Indirizzo);
                        if (azienda.IndirizzoSede.Comune != null)
                            merge.Execute("comuneStudio", azienda.IndirizzoSede.Comune.Descrizione);
                    }

                    merge.Execute("descrizioneAllegato1", appalto.DescrizioneStabile);
                    if (DateTimeFormatInfo.CurrentInfo != null)
                        merge.Execute("meseAnno", DateTimeFormatInfo.CurrentInfo.GetMonthName(appalto.DataAppalto.GetValueOrDefault().Month) + " " + appalto.DataAppalto.GetValueOrDefault().Year);
                    merge.Execute("intestazioneCondominio", appalto.Intestazione);
                    merge.Execute("dataInizioLavori", appalto.DataInizioLavori.GetValueOrDefault().ToShortDateString());
                    merge.Execute("descrizioneCompletaCondominio", appalto.DescrizioneStabile);
                    merge.Execute("descrizioneAppaltatore", appalto.Appaltatore);
                    merge.Execute("indirizzoAppaltatore", appalto.IndirizzoAppaltatore);
                    merge.Execute("comuneAppaltatore", appalto.ComuneAppaltatore);
                    merge.Execute("partitaIvaAppaltatore", appalto.PartitaIvaAppaltatore);
                    merge.Execute("codiceFiscaleAppaltatore", appalto.CodiceFiscaleAppaltatore);
                    merge.Execute("registroImprese", appalto.RegistroImprese);
                    merge.Execute("inailPat", appalto.InailPat);
                    merge.Execute("inailIdentificativo", appalto.InailIdentificativo);
                    merge.Execute("descrizionePolizza", appalto.CompagniaAssicurativa + " - " + appalto.AgenziaAssicurativa);
                    merge.Execute("compagniaAssicurativa", appalto.CompagniaAssicurativa + " - " + appalto.AgenziaAssicurativa);
                    merge.Execute("numeroPolizza", appalto.NumeroPolizza);
                    merge.Execute("importoAppaltoCifre", appalto.ImportoAppalto.GetValueOrDefault().ToString("c"));
                    merge.Execute("importoAppaltoLettere", CifreLettere.CalcolaLettere(appalto.ImportoAppalto.GetValueOrDefault()));
                    merge.Execute("descrizioneImporto", appalto.DescrizioneImportoAppalto);
                    merge.Execute("impPenCifre", appalto.ImportoPenalitaAppalto.GetValueOrDefault().ToString("c"));
                    merge.Execute("impPenLettere", CifreLettere.CalcolaLettere(appalto.ImportoPenalitaAppalto.GetValueOrDefault()));
                    merge.Execute("giorniFineLavoriCifre", appalto.GiorniFineLavori.GetValueOrDefault().ToString("#,##0"));
                    merge.Execute("giorniFineLavoriLettere", CifreLettere.CalcolaLettere(Convert.ToDecimal(appalto.GiorniFineLavori.GetValueOrDefault())));
                    merge.Execute("pagamento", appalto.ModalitaPagamento);
                    merge.Execute("descrizioneLavori", appalto.DescrizioneLavori);
                    var descrizioneAllegato = string.Empty;
                    if (appalto.Allegati != null && appalto.Allegati.Length > 0)
                        descrizioneAllegato = appalto.Allegati.Aggregate(descrizioneAllegato, (current, t) => current + (t + Environment.NewLine));
                    merge.Execute("descrizioneAllegato", descrizioneAllegato);

                    merge.Execute("oggettoAppalto", appalto.OggettoAppalto);

                    try
                    {
                        // TODO: Da rivedere per evitare di scrivere il file temporaneo
                        var filePath = Path.GetTempPath() + "Appalto_" + _appalto.TipoContratto + ".rtf";

                        try
                        {
                            var bytes = merge.GetRtf();
                            var documentoMessage = _saveAppalto.Save(appalto, bytes, "Appalto_" + appalto.TipoContratto + ".rtf");
                            if (documentoMessage.Documento != null)
                            {
                                result = documentoMessage.Documento;
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato nel metodo: {0} - filePath.{1} - modello:{2}", ex, Utility.GetMethodDescription(), filePath, idModello.GetValueOrDefault());
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato nel metodo: {0} - modello:{1}", ex, Utility.GetMethodDescription(), idModello.GetValueOrDefault());
                    }                    
                }
                else
                {
                    throw new InvalidDataException("Per il tipo di contratto selezionato non è definito nessun modello di appalto");
                }

            }

            return result;
        }