public string TrasferimentoSaldiNuovoEsercizio(int idEsercizioNuovo, IBilancioService bilancioService, bool calcoloPerSubentro) { var result = string.Empty; try { var esercizioNuovo = _daoFactory.GetEsercizioDao().GetById(idEsercizioNuovo, false); if (!esercizioNuovo.BloccoSaldi && esercizioNuovo.GetEsercizioPrecedente() != null) { // Rimuovo gli eventuali saldi presenti nell'esercizio foreach (var saldo in esercizioNuovo.Saldi) { saldo.Soggetto?.Saldi.Remove(saldo); saldo.Esercizio = null; _daoFactory.GetSaldoSoggettoDao().Delete(saldo); } esercizioNuovo.Saldi.Clear(); var saldi = new Dictionary<int, SaldoSoggetto>(); var items = bilancioService.GetDataSourceRipartizioneBilancioConsuntivo(esercizioNuovo.GetEsercizioPrecedente().ID, null, null, null, null, null, null, false, false, TipoAccorpamentoRateEnum.Nessuno, false, calcoloPerSubentro, false, false, null); var riparto = items.Where(item => item.IdUnitaImmobiliare > 0 && (item.OrdineConto == 9993 || item.OrdineConto == 9994)); var soggettiAttivi = _daoFactory.GetSoggettoCondominioDao().GetAttiviByEsercizio(esercizioNuovo, esercizioNuovo.DataChiusura); foreach (var itemRiparto in riparto) { var importo = itemRiparto.Importo.GetValueOrDefault(); SaldoSoggetto saldo; var soggetto = soggettiAttivi.FirstOrDefault(item => item.ID == itemRiparto.IdPartecipante) ?? _soggettoService.GetSoggettoAttuale(_daoFactory.GetSoggettoCondominioDao().GetById(itemRiparto.IdPartecipante, false), esercizioNuovo, esercizioNuovo.DataApertura.GetValueOrDefault()); if (saldi.ContainsKey(soggetto.ID)) { saldo = saldi[soggetto.ID]; saldo.Importo += importo; } else { saldo = new SaldoSoggetto(soggetto, esercizioNuovo, importo); _daoFactory.GetSaldoSoggettoDao().SaveOrUpdate(saldo); saldi.Add(soggetto.ID, saldo); } } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante il trasferimento saldi a nuovo esercizio - {0} - esercizio: {1}", ex, Library.Utility.GetMethodDescription(), idEsercizioNuovo); throw; } return result; }
private void setSaldiInizioEsercizio(DataRow row, IList<SoggettoCondominio> soggetti, TipoSaldi tipoSaldi) { if (row["U_SALDO_ES_ATT"] != DBNull.Value && tipoSaldi == TipoSaldi.EsercizioAttuale) { var esercizio = Library.IesiGenericCollections<Esercizio>.GetByIndex(soggetti[0].UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi, 0); var saldo = new SaldoSoggetto(soggetti[0], esercizio, Convert.ToDecimal((double)row["U_SALDO_ES_ATT"]) * -1); _daoFactory.GetSaldoSoggettoDao().SaveOrUpdate(saldo); } else if(row["U_SALDO_ES_PRE"] != DBNull.Value && tipoSaldi == TipoSaldi.EsercizioPrecedente) { var esercizio = Library.IesiGenericCollections<Esercizio>.GetByIndex(soggetti[0].UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi, 0); var saldo = new SaldoSoggetto(soggetti[0], esercizio, Convert.ToDecimal((double)row["U_SALDO_ES_PRE"]) * -1); _daoFactory.GetSaldoSoggettoDao().SaveOrUpdate(saldo); } }
private SaldoSoggettoDTO setDto(SaldoSoggetto item) { return new SaldoSoggettoDTO { IdSoggettoCondominio = item.Soggetto.ID, NominativoSoggettoCondominio = item.Soggetto.DisplayName, IdUnitaImmobiliare = item.Soggetto.UnitaImmobiliare.ID, TipoUnitaImmobiliare = item.Soggetto.UnitaImmobiliare.TipoUnitaImmobiliare.Descrizione, DescrizioneUnitaImmobiliare = item.Soggetto.UnitaImmobiliare.Descrizione, OrdineUnitaImmobiliare = item.Soggetto.UnitaImmobiliare.Ordine.GetValueOrDefault(), InternoUnitaImmobiliare = item.Soggetto.UnitaImmobiliare.InternoCompleto, Subalterno = item.Soggetto.UnitaImmobiliare.Subalterno, IdScala = item.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.ID, DescrizioneScala = item.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.Descrizione, IdStabile = item.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID, DescrizioneStabile = item.Soggetto.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione, Importo = item.Importo.GetValueOrDefault(), IdEsercizio = item.Esercizio.ID, ID = item.ID, Tipo = item.Soggetto.Tipo.ToString().Substring(0, 1), Version = item.Version }; }
public SaldoSoggettoDTO GetByDomainEntity(SaldoSoggetto item) { try { return setDto(item); } catch (Exception ex) { if (item != null) _log.ErrorFormat("Errore nel caricamento dei saldi di inizio esercizio - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), item.ID); else _log.ErrorFormat("Errore nel caricamento dei saldi di inizio esercizio - {0} - Saldo --> null", ex, Library.Utility.GetMethodDescription()); throw; } }
public TestataMovimentoContabile TrasferimentoSaldiStraordinarioInStraordinario(Esercizio esercizioStraordinario, Esercizio esercizioStraordinarioNuovo, Conto contoVersamentiCondomini, IBilancioService bilancioService, DateTime? dataChiusura) { try { //var messagesDataRegistrazione = _movimentiContabiliService.IsAllowDataRegistrazione(new List<int> { esercizioStraordinario.CondominioRiferimento.ID }, esercizioStraordinarioNuovo, dataChiusura.GetValueOrDefault()); //if (messagesDataRegistrazione.Count > 0) //{ // var messageDataRegistrazione = messagesDataRegistrazione.Aggregate(string.Empty, (current, mess) => current + (mess + Environment.NewLine)); // var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataChiusura.GetValueOrDefault()) + Environment.NewLine + messageDataRegistrazione); // _log.Fatal(ex.Message, ex); // throw ex; //} var contoArrotondamenti = _pianoContiService.GetContoArrotondamenti(esercizioStraordinario.AnnoGestionale.EsercizioOrdinario); var contoVersamentiEsercizioStraordinario = _daoFactory.GetContoDao().GetByCodice(esercizioStraordinario.ID, esercizioStraordinario.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoVersamentiCondomini()); var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("ST"); var soggettiAttivi = _daoFactory.GetSoggettoCondominioDao().GetAttiviByEsercizio(esercizioStraordinarioNuovo, esercizioStraordinarioNuovo.DataChiusura); var items = bilancioService.GetDataSourceRipartizioneBilancioConsuntivo(esercizioStraordinario.ID, null, null, null, null, null, null, false, false, TipoAccorpamentoRateEnum.Nessuno, false, false, false, false, null).ToList(); var ripartoEconomici = items.Where(item => item.OrdineConto < 9900).ToList(); var testata = new TestataMovimentoContabile(esercizioStraordinarioNuovo, dataChiusura, TipoTestataMovimentoContabileEnum.Automatica, null); esercizioStraordinario.TestataContabileChiusura = testata; // =========================================================================== // Movimenti Chiusura/Apertura conti economici // --------------------------------------------------------------------------- // Chiusura di tutti i conti economici della gestione starordianaria (in avere), // aprendo un conto economico "<CONTO ECONOMICO SALDI STRAORDINARIA>" nella gestione ordinaria (in dare), per il totale della spesa. // La spesa deve essere ripartita sulla base dei conti utilizzati nella gestione straordinaria. // I conti devono essere addebitati per soggetto. // =========================================================================== var numeroRiga = 0; foreach (var itemRiparto in ripartoEconomici) { // Gli arrotondamenti hanno IdPartecipante == 0, queste righe devono essere usate per registrare i movimenti di arrotondamento. if (itemRiparto.IdPartecipante > 0) { var importo = itemRiparto.Importo.GetValueOrDefault(); try { var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(itemRiparto.IdPartecipante, false); // --------------------------------------------- // Contropartita crediti v/condomini nuovo straordinario // --------------------------------------------- numeroRiga++; var movimentoContropartitaVersamenti = new MovimentoContabile(testata, causale, 1, contoVersamentiCondomini, numeroRiga, "D") { Descrizione = $"Saldo Gestione Straordinaria '{esercizioStraordinario.Descrizione}' - {soggetto.DisplayName}", CondominoRiferimento = soggetto }; // Calcolo del segno var segnoEconomico = "D"; if (importo < 0) { segnoEconomico = "A"; importo = importo * -1; } movimentoContropartitaVersamenti.Segno = segnoEconomico; movimentoContropartitaVersamenti.Importo = importo; // --------------------------------------------- // Chiusura conto economico nello straordinario // --------------------------------------------- numeroRiga++; var movimentoChiusuraStraordinario = new MovimentoContabile(testata, causale, numeroRiga, _daoFactory.GetContoDao().GetById(itemRiparto.IdConto, false), importo, invertiSegno(segnoEconomico)) { Descrizione = string.Format("Chiusura conto {0}: '{1}' - {2}", itemRiparto.DescrizioneConto, esercizioStraordinario.Descrizione, soggetto.DisplayName), CondominoRiferimento = movimentoContropartitaVersamenti.CondominoRiferimento }; } catch (Exception ex) { _log.FatalFormat("Errore inaspettato durante il trasferimento saldi dell'esercizio straordinario al nuovo straordinario - MOVIMENTO CHIUSURA ECONOMICO - {0} - importo:{1} - esercizio straordinario:{2} - nuovo esercizio straordinario:{3} - contoVersamentiCondomini:{4}", ex, Library.Utility.GetMethodDescription(), importo, esercizioStraordinario.ID, esercizioStraordinarioNuovo.ID, contoVersamentiCondomini.ID); throw; } } else { // --------------------------------------------- // Contropartita Arrotondamento // --------------------------------------------- var importo = itemRiparto.Importo; numeroRiga++; var movimentoContropartitaArrotondamento = new MovimentoContabile(testata, causale, 1, contoArrotondamenti, numeroRiga, "D") { Descrizione = $"Saldo Gestione Straordinaria '{esercizioStraordinario.Descrizione}'" }; // Calcolo del segno var segnoEconomico = "D"; if (importo < 0) { segnoEconomico = "A"; importo = importo * -1; } movimentoContropartitaArrotondamento.Segno = segnoEconomico; movimentoContropartitaArrotondamento.Importo = importo; // --------------------------------------------- // Registrazione Arrotondamento // --------------------------------------------- numeroRiga++; var movimentoArrotondamento = new MovimentoContabile(testata, causale, numeroRiga, _daoFactory.GetContoDao().GetById(itemRiparto.IdConto, false), importo, invertiSegno(segnoEconomico)) { Descrizione = string.Format("Arrondamento chiusura conto {0}: '{1}'", itemRiparto.DescrizioneConto, esercizioStraordinario.Descrizione) }; } } // =========================================================================== // Movimenti Chiusura/Apertura crediti v/condomini gestione straordinaria // --------------------------------------------------------------------------- // Chiusura del conto Crediti v/condomini della "<GESTIONE STRAORDINARIA>" // per i versamenti effettuati nella gestione straordinaria, sul conto "<CONTO ECONOMICO SALDI STRAORDINARIA>", // accreditando i singoli soggetti. // =========================================================================== var ripartoVersamenti = items.Where(item => item.OrdineConto == 9992).ToList(); foreach (var itemRiparto in ripartoVersamenti) { var importo = itemRiparto.Importo.GetValueOrDefault(); try { // Gli arrotondamenti hanno IdPartecipante == 0, escludo queste righe. if (itemRiparto.IdPartecipante > 0) { var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(itemRiparto.IdPartecipante, false); // --------------------------------------------- // Contropartita crediti v/condomini nuovo straordinario // --------------------------------------------- numeroRiga++; var movimentoContropartitaVersamenti = new MovimentoContabile(testata, causale, numeroRiga, contoVersamentiCondomini, 0, "D") { Descrizione = $"Saldo Gestione Straordinaria '{esercizioStraordinario.Descrizione}' - {soggetto.DisplayName}", CondominoRiferimento = soggetto }; // Calcolo del segno var segnoEconomico = "A"; if (importo < 0) { segnoEconomico = "D"; importo = importo * -1; } movimentoContropartitaVersamenti.Segno = segnoEconomico; movimentoContropartitaVersamenti.Importo = importo; // --------------------------------------------- // Chiusura conto crediti v/condomini nello straordinario // --------------------------------------------- numeroRiga++; var movimentoChiusuraStraordinario = new MovimentoContabile(testata, causale, numeroRiga, contoVersamentiEsercizioStraordinario, importo, invertiSegno(segnoEconomico)) { Descrizione = string.Format("Chiusura conto {0}: '{1}' - {2}", contoVersamentiEsercizioStraordinario.Descrizione, esercizioStraordinario.Descrizione, soggetto.DisplayName), CondominoRiferimento = movimentoContropartitaVersamenti.CondominoRiferimento }; } } catch (Exception ex) { _log.FatalFormat("Errore inaspettato durante il trasferimento saldi dell'esercizio straordinario al nuovo straordinario - MOVIMENTO CHIUSURA VERSAMENTI - {0} - importo:{1} - esercizio straordinario:{2} - nuovo esercizio straordinario:{3} - contoVersamentiCondomini:{4}", ex, Library.Utility.GetMethodDescription(), importo, esercizioStraordinario.ID, esercizioStraordinarioNuovo.ID, contoVersamentiCondomini.ID); throw; } } // =========================================================================== // Saldi inizio esercizio // =========================================================================== // Rimuovo gli eventuali saldi presenti nell'esercizio foreach (var saldo in esercizioStraordinarioNuovo.Saldi) saldo.Esercizio = null; esercizioStraordinarioNuovo.Saldi.Clear(); var saldi = new Dictionary<int, SaldoSoggetto>(); var riparto = items.Where(item => item.IdUnitaImmobiliare > 0 && (item.OrdineConto == 9993 || item.OrdineConto == 9994)); foreach (var itemRiparto in riparto) { var importo = itemRiparto.Importo.GetValueOrDefault(); SaldoSoggetto saldo; var soggetto = soggettiAttivi.FirstOrDefault(item => item.ID == itemRiparto.IdPartecipante); if(soggetto == null) throw new InvalidDataException($"Non è possibile completare l'esecuzione perchè non è stato trovato il condomino '{itemRiparto.Nominativo}' per l'unità immobiliare {itemRiparto.OrdineUnitaImmobiliare}.{Environment.NewLine}Verificare che sia stato correttamente eseguito l'eventuale subentro"); if (saldi.ContainsKey(soggetto.ID)) { saldo = saldi[soggetto.ID]; saldo.Importo += importo; } else { saldo = new SaldoSoggetto(soggetto, esercizioStraordinarioNuovo, importo); saldi.Add(soggetto.ID, saldo); } } return testata; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante il trasferimento saldi dell'esercizio straordinario all nuovo straordinario - {0} - esercizio straordinario:{1} - nuovo esercizio straordinario:{2} - contoVersamentiCondomini:{3} - dataChiusura:{4:d}", ex, Library.Utility.GetMethodDescription(), esercizioStraordinario.ID, esercizioStraordinarioNuovo.ID, contoVersamentiCondomini.ID, dataChiusura.GetValueOrDefault()); throw; } }
public string SalvaSaldiInizioEsercizio(int idEsercizio, List<ImportoSaldoSoggettoDTO> saldi, bool bloccoSaldi) { var result = string.Empty; try { var esercizio = _daoFactory.GetEsercizioDao().Find(idEsercizio, false); if (esercizio != null) { if (esercizio.Stato == StatoEsercizioEnum.Chiuso) return "L'esercizio è chiuso non è possibile modificare i saldi"; // ===================================================================== // Elimino tutti i saldi di inizio esercizio // ===================================================================== var saldiEsercizio = esercizio.Saldi.ToList(); foreach (var saldoSoggetto in saldiEsercizio) { saldoSoggetto.Soggetto?.Saldi.Remove(saldoSoggetto); saldoSoggetto.Esercizio?.Saldi.Remove(saldoSoggetto); saldoSoggetto.Soggetto = null; saldoSoggetto.Esercizio = null; } esercizio.Saldi.Clear(); // ===================================================================== // Inserisco tutti i saldi di inizio esercizio // ===================================================================== foreach (var saldoDto in saldi) { if (saldoDto.IdSoggettoCondominio > 0) { var soggetto = _daoFactory.GetSoggettoCondominioDao().Find(saldoDto.IdSoggettoCondominio, false); if (soggetto != null) { var saldo = new SaldoSoggetto(soggetto, esercizio, saldoDto.Importo); _daoFactory.GetSaldoSoggettoDao().SaveOrUpdate(saldo); } } } esercizio.BloccoSaldi = bloccoSaldi; } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la gestione dei saldi di inizio esercizio - {0} - esercizio:{1}", ex, Library.Utility.GetMethodDescription(), idEsercizio); throw; } return result; }
public virtual IUpdatableBusinessEntity Copy() { SaldoSoggetto saldo = new SaldoSoggetto(Soggetto, Esercizio, Importo); return saldo; }