public DateTime? GetDataUltimaChiusura(GestioneCondomini.Domain.Condominio condominio) { DateTime? data = null; var esercizio = condominio.Esercizi.Where(item => item.Gestione == GestioneEsercizioEnum.Ordinario && item.Stato == StatoEsercizioEnum.Chiuso).OrderByDescending(item => item.DataChiusura.GetValueOrDefault()).FirstOrDefault(); if (esercizio != null) data = esercizio.DataChiusura; else { esercizio = condominio.Esercizi.Where(item => item.Gestione == GestioneEsercizioEnum.Ordinario && item.Stato == StatoEsercizioEnum.Aperto).OrderBy(item => item.DataApertura.GetValueOrDefault()).FirstOrDefault(); if (esercizio != null) data = esercizio.DataApertura.GetValueOrDefault().AddDays(-1); } return data; }
private bool isAllowDeleteSoggettoSubentro(SoggettoCondominio soggetto, GestioneCondomini.Domain.Subentro subentro) { // Se il tipo di subentro non corrisponde col tipo soggetto vuol dire che siamo nel caso di un subentro con unità rimasta sfitta // in questo caso il soggetto entrante (Proprietario) nelle spese di conduzione non dovrà ovviamente essere eliminato return subentro.TipoSubentro == soggetto.Tipo && soggetto.SubentriEntrata.All(item => item.Subentro.ID == subentro.ID) && soggetto.SubentriUscita.All(item => item.Subentro.ID == subentro.ID) && soggetto.Versamenti.Count == 0; }
public AuthorizationMessages SpostamentoSaldi(GestioneCondomini.Domain.Subentro subentro) { try { var warnMessage = string.Empty; var fatalMessage = string.Empty; // var subentro = _daoFactory.GetSubentroDao().GetById(idSubentro, false); // ========================================================================== // Identifico esercizi oggetto del traferimento // ========================================================================== var soggettoEntrantePrincipale = (from item in subentro.UnitaImmobiliari where item.Principale select item.SoggettoEntrante).FirstOrDefault(); if (soggettoEntrantePrincipale != null) { var esercizi = (from item in soggettoEntrantePrincipale.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi where item.Stato == StatoEsercizioEnum.Aperto && item.DataChiusura > subentro.Data select item).ToList(); foreach (var subentroUnita in subentro.UnitaImmobiliari) { var soggettoEntrante = subentroUnita.SoggettoEntrante; if (subentro.TipoSubentro == TipoSoggetto.Conduttore && soggettoEntrante.Tipo == TipoSoggetto.Conduttore) soggettoEntrante = subentroUnita.Unita.GetProprietarioPrincipale(subentro.Data); // ========================================================================== // Spostamento rate // ========================================================================== var messageRate = _rateService.SpostamentoRate(subentroUnita.SoggettoUscente, soggettoEntrante, subentro.Data, false); if (!string.IsNullOrEmpty(messageRate.FatalMessage)) fatalMessage += messageRate.FatalMessage + Environment.NewLine; if (!string.IsNullOrEmpty(messageRate.WarnMessage)) warnMessage += messageRate.WarnMessage + Environment.NewLine; // ========================================================================== // Spostamento versamenti // ========================================================================== var messageVersamenti = _versamentiCondominiService.SpostamentoVersamenti(subentroUnita.SoggettoUscente, soggettoEntrante, subentro.Data, false); if (!string.IsNullOrEmpty(messageVersamenti)) fatalMessage += messageVersamenti + Environment.NewLine; // ========================================================================== // Spostamento saldi - Solo se è ammesso // ========================================================================== var esercizioSubentro = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(subentro.Condominio, subentro.Data); var messaggeSpostamentoSaldi = IsAllowSpostamentoSaldi(esercizioSubentro.ID); if (string.IsNullOrEmpty(messaggeSpostamentoSaldi)) { foreach (var esercizio in esercizi) { if (esercizio.Saldi.Count == 0) _saldoContabileService.TrasferimentoSaldiNuovoEsercizio(esercizio.ID, _bilancioService, true); var unita = subentroUnita; var saldi = from item in esercizio.Saldi where item.Soggetto.ID == unita.SoggettoUscente.ID select item; foreach (var saldo in saldi) saldo.Soggetto = soggettoEntrante; } } } // ========================================================================== // Rileggo tutti i saldi per evitare righe doppie // ========================================================================== foreach (var esercizio in esercizi) { var saldiCondomini = new Dictionary<int, SaldoSoggetto>(); var saldiDaCancellare = new List<SaldoSoggetto>(); foreach (var saldo in esercizio.Saldi) { if (saldiCondomini.Keys.Contains(saldo.Soggetto.ID)) { saldiCondomini[saldo.Soggetto.ID].Importo += saldo.Importo.GetValueOrDefault(); saldiDaCancellare.Add(saldo); } else saldiCondomini.Add(saldo.Soggetto.ID, saldo); } foreach (var saldo in saldiDaCancellare) { saldo.Soggetto.Saldi.Remove(saldo); saldo.Esercizio.Saldi.Remove(saldo); _daoFactory.GetSaldoSoggettoDao().Delete(saldo); } } } subentro.TrasferimentoSaldi = true; return new AuthorizationMessages(fatalMessage, warnMessage); } catch (Exception ex) { _log.ErrorFormat("Errore durante lo spostamento dei saldi per subentro - {0} - subentro:{1}", ex, Utility.GetMethodDescription(), subentro.ID); throw; } }
private AuthorizationMessages annullamentoSpostamentoSaldi(GestioneCondomini.Domain.Subentro subentro) { try { var fatalMessage = string.Empty; var warnMessage = string.Empty; foreach (var subentroUnita in subentro.UnitaImmobiliari) { // ========================================================================== // Spostamento rate // ========================================================================== var messageRate = _rateService.SpostamentoRate(subentroUnita.SoggettoEntrante, subentroUnita.SoggettoUscente, subentro.Data, true); if (!string.IsNullOrEmpty(messageRate.FatalMessage)) fatalMessage += messageRate.FatalMessage + Environment.NewLine; if (!string.IsNullOrEmpty(messageRate.WarnMessage)) warnMessage += messageRate.WarnMessage + Environment.NewLine; // ========================================================================== // Spostamento versamenti // ========================================================================== var messageVersamenti = _versamentiCondominiService.SpostamentoVersamenti(subentroUnita.SoggettoEntrante, subentroUnita.SoggettoUscente, subentro.Data, true); if (!string.IsNullOrEmpty(messageVersamenti)) fatalMessage += messageVersamenti + Environment.NewLine; // ========================================================================== // Spostamento movimenti // ========================================================================== foreach (var movimento in subentroUnita.SoggettoEntrante.Movimenti) { movimento.CondominoRiferimento = subentroUnita.SoggettoUscente; subentroUnita.SoggettoUscente.Movimenti.Add(movimento); } subentroUnita.SoggettoEntrante.Movimenti.Clear(); // ========================================================================== // Spostamento saldi // ========================================================================== var esercizi = from item in subentroUnita.SoggettoEntrante.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi where item.Stato == StatoEsercizioEnum.Aperto && item.DataChiusura > subentro.Data select item; foreach (var esercizio in esercizi) { // Se non sono presenti saldi NON calcolo i saldi per evitare problemi di cascade // bugid#3788 //if (esercizio.Saldi.Count == 0) // _saldoContabileService.TrasferimentoSaldiNuovoEsercizio(esercizio.ID, _bilancioService); var unita = subentroUnita; var saldi = unita.SoggettoEntrante.Saldi.ToArray(); foreach (var saldo in saldi) { saldo.Soggetto = subentroUnita.SoggettoUscente; subentroUnita.SoggettoUscente.Saldi.Add(saldo); subentroUnita.SoggettoEntrante.Saldi.Remove(saldo); } // Deve restare un solo per soggetto ed esercizio var saldiSoggetto = subentroUnita.SoggettoUscente.Saldi.Where(item => item.Esercizio.ID == esercizio.ID).ToList(); if(saldiSoggetto.Count > 1) { var saldo = saldiSoggetto[0]; for (var i = 1; i < saldiSoggetto.Count; i++) { saldo.Importo += saldiSoggetto[i].Importo; saldo.Esercizio.Saldi.Remove(saldiSoggetto[i]); saldo.Soggetto.Saldi.Remove(saldiSoggetto[i]); _daoFactory.GetSaldoSoggettoDao().Delete(saldiSoggetto[i]); } } } subentroUnita.SoggettoEntrante.Saldi.Clear(); } return new AuthorizationMessages(fatalMessage, warnMessage); } catch (Exception ex) { _log.Error("Errore durante lo spostamento dei saldi per subentro: " + Utility.GetMethodDescription() + " - idSubentro:" + subentro.ID, ex); throw; } }
public DatiAutenticazionePersona SetDatiAutenticazione(GestioneCondomini.Domain.Persona persona) { if(persona.DatiAutenticazione == null) persona.DatiAutenticazione = new DatiAutenticazionePersona(); if(string.IsNullOrEmpty(persona.DatiAutenticazione.Username)) { if (!string.IsNullOrEmpty(persona.Cognome)) { var cognome = persona.Cognome.Replace("'", string.Empty).Replace(" ", string.Empty); persona.DatiAutenticazione.Username = cognome.Trim().Length >= 3 ? cognome.Trim().Substring(0, 3) : cognome.Trim().PadRight(3, 'X'); persona.DatiAutenticazione.Username = persona.DatiAutenticazione.Username.ToLower() + persona.ID.ToString(CultureInfo.InvariantCulture).PadLeft(6, '0'); } else if (!string.IsNullOrEmpty(persona.RagioneSociale)) { var ragioneSociale = persona.RagioneSociale.Replace("'", string.Empty).Replace(" ", string.Empty); persona.DatiAutenticazione.Username = ragioneSociale.ToLower().Trim().Replace(" ", string.Empty).Replace(".", string.Empty); if (persona.DatiAutenticazione.Username.Length < 3) persona.DatiAutenticazione.Username = persona.DatiAutenticazione.Username.PadRight(3, 'X'); persona.DatiAutenticazione.Username = persona.DatiAutenticazione.Username.Substring(0, 3) + persona.ID.ToString(CultureInfo.InvariantCulture).PadLeft(6, '0'); } persona.DatiAutenticazione.Password = Library.RandomPassword.Generate(2, 3, 0); } return persona.DatiAutenticazione; }
public Address GetRecapito(GestioneCondomini.Domain.Persona persona, TipoIndirizzo? tipoIndirizzo) { if (tipoIndirizzo.GetValueOrDefault() == TipoIndirizzo.Residenza) return persona.IndirizzoResidenza; if (persona.Recapito != null) return persona.Recapito; return persona.IndirizzoResidenza ?? new Address(); }
private string getNewSpesa(Fornitore fornitore, Esercizio esercizio, TestataMovimentoContabileGestioneDTO testata, MovimentoContabileGestioneDTO movimento, out GestioneCondomini.Domain.Spesa spesa) { var message = string.Empty; spesa = new GestioneCondomini.Domain.Spesa(fornitore, esercizio, null); try { if (_protocolloService == null) { _log.ErrorFormat("Errore di inizializzazione del protocollo service - {0} - documento:{1} - movimento:{2} - esercizio:{3} - testata:{4}", Utility.GetMethodDescription(), movimento.NumeroDocumento, movimento.ID, testata.CodiceEsercizio, testata.ID); message = "Errore di inizializzazione del protocollo service."; return message; } if (movimento.DataDocumento == null) { _log.ErrorFormat("La data del documento è null - {0} - documento:{1} - movimento:{2} - esercizio:{3} - testata:{4}", Utility.GetMethodDescription(), movimento.NumeroDocumento, movimento.ID, testata.CodiceEsercizio, testata.ID); message = "La data del documento è null."; } if (esercizio.CondominioRiferimento == null) { _log.ErrorFormat("Il Condominio è null - {0} - documento:{1} - movimento:{2} - esercizio:{3} - testata:{4}", Utility.GetMethodDescription(), movimento.NumeroDocumento, movimento.ID, testata.CodiceEsercizio, testata.ID); message = "Il Condominio è null."; } var protocollo = _protocolloService.GetProgressivo(TipoProtocollo.Fattura, esercizio.DataApertura.GetValueOrDefault().Year, esercizio.CondominioRiferimento); if (protocollo.Progressivo != null) spesa.NumeroProtocollo = protocollo.Progressivo; else return protocollo.Message; } catch (Exception ex) { var idCondominio = "<NULL>"; if (esercizio?.CondominioRiferimento != null) idCondominio = esercizio.CondominioRiferimento.ID.ToString(CultureInfo.InvariantCulture); _log.ErrorFormat("Errore inaspettato nel recuperare il progressivo - {0} - data:{1:d} - condominio:{2} - movimento:{3} - esercizio:{4} - testata:{5}", ex, Utility.GetMethodDescription(), movimento.DataDocumento.GetValueOrDefault(), idCondominio, movimento.ID, testata.CodiceEsercizio, testata.ID); message = "Errore inaspettato nel recuperare il progressivo."; } _daoFactory.GetSpesaDao().SaveOrUpdate(spesa); return message; }