public string IsAllowPagamento(IList<int> idScadenze, bool checkCodice = false) { string anomalie = string.Empty; foreach (var id in idScadenze) { var scadenza = _daoFactory.GetScadenzaFatturaDao().GetById(id, false); if (checkCodice && string.IsNullOrEmpty(scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.CodiceSIA)) anomalie += "Per il condominio " + scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName + " non è presente il codice SIA." + Environment.NewLine; if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale)) anomalie += "Per il condominio " + scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName + " non è presente il CODICE FISCALE." + Environment.NewLine; if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Iban)) { if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi)) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " non è presente il codice ABI." + Environment.NewLine; else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi.Length > 5) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " il codice ABI non è corretto è più lungo di 5 caratteri." + Environment.NewLine; if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab)) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " non è presente il codice CAB." + Environment.NewLine; else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab.Length > 5) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " il codice CAB non è corretto è più lungo di 5 caratteri." + Environment.NewLine; if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente)) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " non è presente il CONTO CORRENTE." + Environment.NewLine; else if(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente.Length > 12) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " il CONTO CORRENTE non è corretto è più lungo di 12 caratteri." + Environment.NewLine; if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin)) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " non è presente il codice CIN." + Environment.NewLine; else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin.Length > 1) anomalie += "Per il fornitore " + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + " il codice CIN non è corretto è più lungo di 1 carattere." + Environment.NewLine; } else { var coord = new Library.BusinessData.CoordinateBancarie(); coord.SetIBAN(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Iban); scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi = coord.Abi; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab = coord.Cab; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente = coord.ContoCorrente; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin = coord.Cin; } // Verifico che l'esericizo sia aperto var esercizioCompetenza = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento, DateTime.Today); if (esercizioCompetenza == null) anomalie += $"Per la scadenza del fornitore '{scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName}' in data {scadenza.Scadenza:d} con importo {scadenza.Importo:c} non è ancora stato aperto l'esercizio in data {DateTime.Now:d}" + Environment.NewLine; } return anomalie; }
public void CorreggiAnagrafiche(int azienda) { var comuni = _daoFactory.GetComuneDao().GetAll().Where(item => string.IsNullOrEmpty(item.Cessato)).ToList(); var persone = _daoFactory.GetPersonaDao().GetByAzienda(azienda); foreach (var persona in persone) { if (!string.IsNullOrEmpty(persona.Cognome) && persona.Cognome.Contains("*")) { var nomeAry = persona.Cognome.Split('*'); persona.Nome = nomeAry[1]; persona.Cognome = nomeAry[0]; } if (persona.IndirizzoResidenza != null) { if (persona.IndirizzoResidenza.Comune == null && !string.IsNullOrEmpty(persona.IndirizzoResidenza.Localita)) { var comune = comuni.Where(item => item.Descrizione.Contains(persona.IndirizzoResidenza.Localita)).ToList(); if (comune.Count == 1) { persona.IndirizzoResidenza.Comune = comune[0]; persona.IndirizzoResidenza.Localita = null; } else if(!string.IsNullOrEmpty(persona.IndirizzoResidenza.Cap)) { comune = comuni.Where(item => item.Cap == persona.IndirizzoResidenza.Cap).ToList(); if (comune.Count == 1) { persona.IndirizzoResidenza.Comune = comune[0]; persona.IndirizzoResidenza.Localita = null; } } } } if (!string.IsNullOrEmpty(persona.CodiceFiscale)) { var cdfis = new Library.BusinessData.CodiceFiscale(); var datiNascita = cdfis.CalcoloInversoCF(persona.CodiceFiscale); if (datiNascita != null) { if(persona.DataNascita == null) persona.DataNascita = datiNascita.Value.DataNascita; if(persona.ComuneNascita == null) persona.ComuneNascita = comuni.FirstOrDefault(item => item.CodiceCatastale == datiNascita.Value.CodiceComune); if (persona.Sesso == SessoEnum.Undefined) { switch (datiNascita.Value.Sesso) { case "F": persona.Sesso = SessoEnum.Femmina; break; case "M": persona.Sesso = SessoEnum.Maschio; break; } } } } if (!string.IsNullOrEmpty(persona.ContoCorrente)) persona.ContoCorrente = persona.ContoCorrente.Trim(); if (string.IsNullOrEmpty(persona.Iban) && !string.IsNullOrEmpty(persona.Abi) && !string.IsNullOrEmpty(persona.Cab) && !string.IsNullOrEmpty(persona.ContoCorrente)) { var calcoloIban = new Library.BusinessData.CoordinateBancarie { Abi = persona.Abi.Trim(), Cab = persona.Cab.Trim(), ContoCorrente = persona.ContoCorrente }; persona.Iban = calcoloIban.CalcolaIBAN(); calcoloIban.SetIBAN(persona.Iban); persona.ContoCorrente = calcoloIban.ContoCorrente; persona.Cin = calcoloIban.Cin; } if (persona.Abi == "0") persona.Abi = null; if (persona.Cab == "0") persona.Cab = null; if (string.IsNullOrEmpty(persona.Cognome) && !string.IsNullOrEmpty(persona.Nome)) { var nomeAry = persona.Nome.Trim().Split(' '); if (nomeAry.Length >= 2 && nomeAry[0].Trim().ToUpper() != "DE") { persona.Nome = string.Empty; persona.Cognome = nomeAry[0]; for (int i = 1; i < nomeAry.Length; i++) { persona.Nome += $" {nomeAry[i]}"; } persona.Nome = persona.Nome.Trim(); } } if (persona.DatiAutenticazione == null || !string.IsNullOrEmpty(persona.DatiAutenticazione.Password) && string.IsNullOrEmpty(persona.DatiAutenticazione.Username)) { persona.DatiAutenticazione = null; SetDatiAutenticazione(persona); } } var fornitori = _daoFactory.GetFornitoreDao().GetByAzienda(azienda); foreach (var fornitore in fornitori) { if (string.IsNullOrEmpty(fornitore.AliquotaIva)) fornitore.AliquotaIva = "22"; } var banche = _daoFactory.GetDatiBancariCondominiDao().GetByAzienda(azienda); foreach (var datiBancariCondomini in banche) { if (string.IsNullOrEmpty(datiBancariCondomini.Iban) && !string.IsNullOrEmpty(datiBancariCondomini.ContoCorrente) && !string.IsNullOrEmpty(datiBancariCondomini.Abi) && !string.IsNullOrEmpty(datiBancariCondomini.Cab)) { var calcoloIban = new Library.BusinessData.CoordinateBancarie { Abi = datiBancariCondomini.Abi.Trim(), Cab = datiBancariCondomini.Cab.Trim(), ContoCorrente = datiBancariCondomini.ContoCorrente }; datiBancariCondomini.Iban = calcoloIban.CalcolaIBAN(); calcoloIban.SetIBAN(datiBancariCondomini.Iban); datiBancariCondomini.ContoCorrente = calcoloIban.ContoCorrente; datiBancariCondomini.Cin = calcoloIban.Cin; } } var condomini = _daoFactory.GetCondominioDao().GetByAzienda(azienda); foreach (var condominio in condomini) { if (condominio.GeoReferenziazione == null && condominio.Indirizzo != null) { var geoAddress = condominio.Indirizzo.GetGeoLocationAddress(); var latLong = _geoLocationService.GetLatLong(geoAddress); if (latLong != null) { if (condominio.GeoReferenziazione == null) condominio.GeoReferenziazione = new GeoReference(); condominio.GeoReferenziazione.AddedDate = DateTime.Now; condominio.GeoReferenziazione.AddressUsed = geoAddress; condominio.GeoReferenziazione.Latitude = latLong.Value.Latitude; condominio.GeoReferenziazione.Longitude = latLong.Value.Longitude; } } } var unitaImmobiliari = _daoFactory.GetUnitaImmobiliareDao().GetByAzienda(azienda); foreach (var unitaImmobiliare in unitaImmobiliari) { unitaImmobiliare.Descrizione = _daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(unitaImmobiliare); } }
public string AggiornamentoMassivoCab(string oldAbi, string oldCab, string newAbi, string newCab, int idAzienda) { try { var message = string.Empty; var lista = _daoFactory.GetDatiBancariCondominiDao().GetByAbiCab(oldAbi, oldCab, idAzienda); foreach (var datiBancariCondomini in lista) { if (datiBancariCondomini.Abi == oldAbi && datiBancariCondomini.Cab == oldCab) { datiBancariCondomini.Abi = newAbi; datiBancariCondomini.Cab = newCab; var calcoloIban = new Library.BusinessData.CoordinateBancarie { Abi = datiBancariCondomini.Abi.Trim(), Cab = datiBancariCondomini.Cab.Trim(), ContoCorrente = datiBancariCondomini.ContoCorrente }; datiBancariCondomini.Iban = calcoloIban.CalcolaIBAN(); calcoloIban.SetIBAN(datiBancariCondomini.Iban); datiBancariCondomini.Cin = calcoloIban.Cin; } } return message; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la modifica di abi a cab - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), idAzienda); throw; } }
public string RicalcolaIBAN(bool onlyWithoutIban, int idAzienda) { try { var message = string.Empty; var lista = _daoFactory.GetDatiBancariCondominiDao().GetByAzienda(idAzienda); foreach (var datiBancariCondomini in lista) { if (!string.IsNullOrEmpty(datiBancariCondomini.Iban) || !onlyWithoutIban) { var calcoloIban = new Library.BusinessData.CoordinateBancarie { Abi = datiBancariCondomini.Abi.Trim(), Cab = datiBancariCondomini.Cab.Trim(), ContoCorrente = datiBancariCondomini.ContoCorrente }; datiBancariCondomini.Iban = calcoloIban.CalcolaIBAN(); calcoloIban.SetIBAN(datiBancariCondomini.Iban); } } return message; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante il ricalcolo dell'iban - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), idAzienda); throw; } }
private List<DisposizionePagamentoDTO> convertScadenzeToDto(IEnumerable<ScadenzaFattura> scadenze, bool detraibile, bool daAutorizzare) { // TODO: Per migliorare le prestazioni utilizzare un NHIbernate Projection: http://elegantcode.com/2007/11/06/dtos-presentation-model-and-icriteria/ try { var lista = new List<DisposizionePagamentoDTO>(); foreach (var scadenza in scadenze) { try { if (daAutorizzare || scadenza.ImportoAutorizzato > 0) { var dispPag = new DisposizionePagamentoDTO { IdSpesa = scadenza.SpesaRiferimento.ID, DataDocumento = scadenza.SpesaRiferimento.DataDocumento, DataScadenza = scadenza.Scadenza, Detrazione = scadenza.SpesaRiferimento.Detrazione, IdCondominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ID, Condominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName, IdEsercizio = scadenza.SpesaRiferimento.EsercizioRiferimento.ID, Esercizio = scadenza.SpesaRiferimento.EsercizioRiferimento.DisplayName, Fornitore = scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName, IdScadenza = scadenza.ID, ImportoPagato = scadenza.ImportoPagato, ImportoAutorizzato = scadenza.ImportoAutorizzato, NumeroDocumento = scadenza.SpesaRiferimento.NumeroDocumento, TipoDocumento = Decodifica.Instance.GetElement("TipoDocumentoContabile", scadenza.SpesaRiferimento.TipoDocumento).Descrizione, Stato = Decodifica.Instance.GetElement("StatoSpesa", scadenza.Stato.ToString()).Descrizione, Valuta = DateTime.Today, IdentificativoArchiviazioneOttica = _archiviazioneOtticaService.GetIdentificativoArchiviazione(scadenza.SpesaRiferimento, true), Contestata = scadenza.SpesaRiferimento.Contestata, StatoSpesa = scadenza.SpesaRiferimento.Stato, ImponibileSpesa = scadenza.SpesaRiferimento.Imponibile }; // ----------------------------------------------------------------------------------------------------------- // Se la spesa è soggetta a ritenuta deve essere versato al fornitore l'importo comprensivo di ritenuta // Se per la scadenza è previsto il versamento della ritenuta totale al primo pagamento occorre sempre // proporre l'importo residuo della ritenuta. // ----------------------------------------------------------------------------------------------------------- var importoRitenuta = scadenza.PagamentoCompletoRitenuta ? scadenza.GetImportoRitenutaResiduo() : Common.ContabilitaHelper.GetImportoRitenuta(scadenza.SpesaRiferimento, dispPag.ImportoAutorizzato).GetValueOrDefault(); var importoDaPagare = scadenza.Importo - scadenza.ImportoPagato; if (scadenza.SpesaRiferimento.Detrazione.GetValueOrDefault() == 0) { dispPag.ImportoScadenza = scadenza.Importo; dispPag.ImportoDaPagare = importoDaPagare; dispPag.ImportoRitenuta = importoRitenuta; } else { importoRitenuta = Common.ContabilitaHelper.GetImportoRitenuta(scadenza.SpesaRiferimento, importoDaPagare).GetValueOrDefault(); dispPag.ImportoScadenza = scadenza.Importo + importoRitenuta; dispPag.ImportoDaPagare = scadenza.Importo + importoRitenuta - scadenza.ImportoPagato; } if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale != null) { dispPag.Abi = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale.Abi; dispPag.Cab = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale.Cab; } if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Responsabile != null) dispPag.ResponsabileCondominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Responsabile.DisplayName; if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ResponsabileContabilita != null) dispPag.ResponsabileContabilita = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ResponsabileContabilita.DisplayName; if (scadenza.SpesaRiferimento.Sinistro > 0) dispPag.Sinistro = true; if (scadenza.SpesaRiferimento.FornitoreRiferimento.ModalitaPagamento != null) dispPag.IdModalitaPagamento = scadenza.SpesaRiferimento.FornitoreRiferimento.ModalitaPagamento.ID; var pagAutorizzato = scadenza.Pagamenti.FirstOrDefault(pag => pag.Stato == StatoSpesaEnum.Autorizzata); if (pagAutorizzato != null) { dispPag.IdPagamento = pagAutorizzato.ID; dispPag.ImportoPagamento = pagAutorizzato.Importo.Value; dispPag.DataPagamento = pagAutorizzato.Data; if (pagAutorizzato.ModalitaPagamento != null) dispPag.IdModalitaPagamento = pagAutorizzato.ModalitaPagamento.ID; if (pagAutorizzato.RitenutaAcconto != null) dispPag.ImportoRitenuta = scadenza.PagamentoCompletoRitenuta ? scadenza.GetImportoRitenutaResiduo() : Common.ContabilitaHelper.GetImportoRitenuta(scadenza.SpesaRiferimento, dispPag.ImportoPagamento); } // ============================================= // Validazioni // ============================================= dispPag.Selezionabile = true; if (scadenza.SpesaRiferimento.Contestata) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "La fattura " + scadenza.SpesaRiferimento.NumeroDocumento + " del " + scadenza.SpesaRiferimento.DataDocumento.GetValueOrDefault().ToShortDateString() + " è CONTESTATA"; } if (!daAutorizzare && !detraibile && !(!detraibile && (dispPag.Detrazione == null || dispPag.Detrazione == 0))) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "La fattura " + scadenza.SpesaRiferimento.NumeroDocumento + " del " + scadenza.SpesaRiferimento.DataDocumento.GetValueOrDefault().ToShortDateString() + " è DETRAIBILE con detrazione del " + dispPag.Detrazione.GetValueOrDefault() + "%"; } // ------------------------------------------ // Solo per bonifici tramite CBI // ------------------------------------------ if (!detraibile && !daAutorizzare) { if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale == null) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il condominio '" + scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName + "' non è presente nessuna banca principale"; } // Deve essere presente o l'IBAN o tutti i singoli campi che definiscono il conto corrente if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Iban)) { if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il codice ABI."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi.Length > 5) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il codice ABI non è corretto è più lungo di 5 caratteri."; } if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il codice CAB."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab.Length > 5) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il codice CAB non è corretto è più lungo di 5 caratteri."; } if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il CONTO CORRENTE."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente.Length > 12) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il CONTO CORRENTE non è corretto è più lungo di 12 caratteri."; } if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il codice CIN."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin.Length > 1) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il codice CIN non è corretto è più lungo di 1 carattere."; } } else { var coord = new Library.BusinessData.CoordinateBancarie(); coord.SetIBAN(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Iban); scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi = coord.Abi; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab = coord.Cab; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente = coord.ContoCorrente; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin = coord.Cin; } } lista.Add(dispPag); } } catch (Exception ex) { _log.ErrorFormat("Errore nel recupero delle scadenze da autorizzazione di eliminazione di un pagamento - SINGOLA SCADENZA - {0} - scadenza:{1} - detraibile:{2} - daAutorizzare:{3}", ex, Utility.GetMethodDescription(), scadenza.ID, detraibile, daAutorizzare); throw; } } return lista; } catch (Exception ex) { _log.ErrorFormat("Errore nel recupero delle scadenze da autorizzazione di eliminazione di un pagamento - {0} - detraibile:{1} - daAutorizzare:{2}", ex, Utility.GetMethodDescription(), detraibile, daAutorizzare); throw; } }