예제 #1
0
        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;
        }
예제 #2
0
 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;
 }
예제 #3
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;
            }
        }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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;
        }
예제 #6
0
 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();
 }
예제 #7
0
        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;
        }