public TestataMovimentoContabile SetMovimentiContatoreCondominiale(Esercizio esercizio, IList<ImportoMovimento> importiAccredito, IList<ImportiDTO> addebitiContatoriDivisionali, DateTime dataRegistrazione, Conto contoAddebito, SottoConto sottoContoAddebito, string descrizione) { // controllo data registrazione var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione); if (message.Count > 0) { var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione)); _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), dataRegistrazione, esercizio.ID); throw ex; } var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null) { Descrizione = descrizione, IsAbilitataArchiviazioneOttica = false, IsAllowUpdate = true }; _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata); var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("SC"); // ------------------------------------------------- // Calcolo Importo // ------------------------------------------------ var importo = importiAccredito.Sum(item => item.Importo); // ------------------------------------------------- // Segno Movimento // ------------------------------------------------ var segnoContoEconomico = "D"; if (importo < 0) { segnoContoEconomico = "A"; importo = importo * -1; } // ------------------------------------------------ // Conto economico da addebitare // ------------------------------------------------ var movimentoContoEconomicoAddebito = new MovimentoContabile(testata, causale, 1, contoAddebito, importo, segnoContoEconomico) { SottoContoRiferimento = sottoContoAddebito, Descrizione = descrizione, IsRipartoPersonalizzato = true }; _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAddebito); // ------------------------------------------------ // Conto economico da accreditare // ------------------------------------------------ foreach (var item in importiAccredito) { var movimentoContoEconomicoAccredito = new MovimentoContabile(testata, causale, 2, _daoFactory.GetContoDao().GetById(item.IdConto, false), item.Importo, invertiSegno(segnoContoEconomico)) { Descrizione = descrizione, IsRipartoPersonalizzato = true }; if(item.IdSottoConto > 0) movimentoContoEconomicoAccredito.SottoContoRiferimento = _daoFactory.GetSottoContoDao().GetById(item.IdSottoConto.GetValueOrDefault(), false); _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAccredito); // Ripartizione tra le unità immobiliari var totaleMillesimi = addebitiContatoriDivisionali.Sum(mill => mill.Importo); foreach (var importiDTO in addebitiContatoriDivisionali) { var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(importiDTO.Id, false); var importoUnita = (movimentoContoEconomicoAccredito.GetImportoConSegno() * importiDTO.Importo) / totaleMillesimi; var spesaUnita = new SpeseUnita(importoUnita, unita, null, movimentoContoEconomicoAccredito); _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(spesaUnita); } } return testata; }
private MovimentoContabileListaDTO setListaDto(MovimentoContabile item, bool importiNegativi, IArchiviazioneOtticaService archiviazioneService) { try { var dto = new MovimentoContabileListaDTO { ID = item.ID, IdTestata = item.Testata.ID, Data = item.Testata.DataRegistrazione.GetValueOrDefault(), Causale = item.Causale.DescrizioneCompleta, IdCondominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.ID, Condominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.DisplayName, IdEsercizio = item.Testata.EsercizioRiferimento.ID, Esercizio = item.Testata.EsercizioRiferimento.DisplayName, IdConto = item.ContoRiferimento.ID, Conto = item.ContoRiferimento.Descrizione, TipoConto = item.ContoRiferimento.Tipo.ToString(), Descrizione = item.GetDescrizione(), Importo = !importiNegativi ? item.GetImportoSenzaSegno() : item.GetImportoConSegno(), ImportoResiduoEvasione = item.GetImportoSenzaSegno(), Stato = item.Stato }; if(item.ImportoEvasioneTransitorio != null) dto.ImportoResiduoEvasione -= item.ImportoEvasioneTransitorio; dto.Segno = item.Segno; dto.Note = item.Note; dto.NumeroRegistrazione = item.NumeroRegistrazione; dto.NumeroAssegno = item.NumeroAssegno; dto.NumeroRiga = item.NumeroRiga; if (item.EvasioneBancaria != null) dto.IdEvasioneBancaria = item.EvasioneBancaria.ID; if (item.FornitoreRiferimento != null) { dto.IdFornitore = item.FornitoreRiferimento.ID; dto.Nominativo = item.FornitoreRiferimento.DisplayName; } if (item.CondominoRiferimento != null) { dto.IdCondomino = item.CondominoRiferimento.ID; dto.Nominativo = item.CondominoRiferimento.Persona.DisplayName; } if(item.DettaglioRiferimento != null) dto.IdDettaglio = item.DettaglioRiferimento.ID; if (item.SottoContoRiferimento != null) { dto.IdSottoConto = item.SottoContoRiferimento.ID; dto.SottoConto = item.SottoContoRiferimento.GetDescrizione(item.Testata.EsercizioRiferimento, null, item); } else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoBancario() && item.ContoCorrenteBancario != null) { dto.IdSottoConto = item.ContoCorrenteBancario.ID * -1; dto.SottoConto = item.ContoCorrenteBancario.DisplayName; } else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoFornitori() && item.FornitoreRiferimento != null) { dto.IdSottoConto = item.FornitoreRiferimento.ID * -1; dto.SottoConto = item.FornitoreRiferimento.DisplayName; } var spesaRiferimento = item.Testata.SpesaRiferimento; if (spesaRiferimento == null && item.DettaglioRiferimento != null) spesaRiferimento = item.DettaglioRiferimento.SpesaRiferimento; // ============================================================================================= // Commentato rendeva troppo lenta la ricerca dei movimenti - bugid#2967 // ============================================================================================= //if(spesaRiferimento == null) //{ // Pagamento pagamento = null; // if(pagamenti == null) // pagamento = daoFactory.GetPagamentoDao().GetByMovimentoContabile(item); // else // pagamento = pagamenti.FirstOrDefault(itemPagamento => itemPagamento.MovimentoContabile != null && itemPagamento.MovimentoContabile.ID == item.ID); // if (pagamento != null) // spesaRiferimento = pagamento.ScadenzaRiferimento.SpesaRiferimento; //} // ============================================================================================= if (spesaRiferimento != null) { dto.IdSpesa = spesaRiferimento.ID; dto.NumeroProtocollo = spesaRiferimento.NumeroProtocollo; dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(spesaRiferimento, true); dto.StatoSpesa = spesaRiferimento.Stato; dto.TipoDocumentoSpesa = spesaRiferimento.TipoDocumento; } else { dto.NumeroProtocollo = item.Testata.NumeroProtocollo; if (dto.NumeroProtocollo > 0) dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(item.Testata); else if (item.DettaglioRiferimento != null && item.DettaglioRiferimento.SpesaRiferimento != null) dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(item.DettaglioRiferimento.SpesaRiferimento, true); } dto.IsAllowOpenDettaglio = item.Testata.NumeroProtocollo > 0 || dto.IdSpesa > 0; return dto; } catch (Exception ex) { if (item != null) { _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - id:" + item.ID, ex); } else { _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - Movimento --> null", ex); } throw; } }
private void setRipartizione(MovimentoContabile movimento) { if (movimento.ContoRiferimento.Ripartizione && !movimento.ContoRiferimento.IsSpesePersonali) { if ((!movimento.IsRipartoPersonalizzato || !string.IsNullOrEmpty(movimento.GruppiAddebito))) { movimento.DettaglioRipartizione.Clear(); List<int> idScale = null; if (!string.IsNullOrEmpty(movimento.GruppiAddebito)) { var scale = movimento.GruppiAddebito.Split('&'); idScale = new List<int>(scale.Length); idScale.AddRange(scale.Select(int.Parse)); } var millesimi = _millesimiService.GetByConto(movimento.ContoRiferimento, null, idScale, movimento.Testata.EsercizioRiferimento); foreach (var millesimo in millesimi) { var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(millesimo.IdUnitaRiferimento, false); var valoreMillesimo = _millesimiService.GetRipartoImporto(unita, movimento.ContoRiferimento, movimento.GetImportoConSegno().GetValueOrDefault(), millesimi, movimento.Testata.EsercizioRiferimento, null); if (valoreMillesimo != null) { var riparto = new SpeseUnita(valoreMillesimo, unita, null, movimento); movimento.DettaglioRipartizione.Add(riparto); } } } else RicalcoloRipartizioneByMovimento(movimento); } else RicalcoloRipartizioneByMovimento(movimento); }
public void CloneRipartizioneByMovimento(MovimentoContabile movimentoNew, MovimentoContabile movimentoOld) { IList<MillesimoDTO> millesimi = new List<MillesimoDTO>(); if(!movimentoOld.ContoRiferimento.IsSpesePersonali) millesimi = (from item in _millesimiService.GetByConto(movimentoOld.ContoRiferimento, null , null, movimentoOld.Testata.EsercizioRiferimento) where ( from item2 in movimentoOld.DettaglioRipartizione where item2?.UnitaRiferimento != null select item2.UnitaRiferimento.ID ).Contains(item.IdUnitaRiferimento) select item).ToList(); var count = movimentoOld.DettaglioRipartizione.Count; foreach (var spesaUnita in movimentoOld.DettaglioRipartizione) { decimal? importo = 0; if (movimentoOld.ContoRiferimento.IsSpesePersonali) importo = movimentoNew.GetImportoConSegno() / count; else if(spesaUnita.UnitaRiferimento != null) importo = _millesimiService.GetRipartoImporto(spesaUnita.UnitaRiferimento, movimentoOld.ContoRiferimento, movimentoNew.GetImportoConSegno().GetValueOrDefault(), millesimi, movimentoOld.Testata.EsercizioRiferimento, null); else _log.WarnFormat("ATTENZIONE: trovato movimento NON di spese personali con dettaglio ripartizione senza unità definita - {0} - idSpesaUnita:{1} - idMovimentoInteressi:{2} - idMovimentoBase:{3}", Utility.GetMethodDescription(), spesaUnita.ID, movimentoNew.ID, movimentoOld.ID); if (importo > 0) { var spesaNew = new SpeseUnita(importo, spesaUnita.UnitaRiferimento, spesaUnita.SoggettoCondominio, movimentoNew); _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(spesaNew); } } if (movimentoNew.Importo != movimentoNew.DettaglioRipartizione.Sum(item => item.Importo)) _log.WarnFormat("ATTENZIONE: l'importo degli interessi/sanzione non corrisponde con con l'importo della ripartizione - {0} - idMovimentoInteressi:{1} - idMovimentoBase:{2} - importoInteressi:{3} - importoRipartizione:{4}", Utility.GetMethodDescription(), movimentoNew.ID, movimentoOld.ID, movimentoNew.Importo.GetValueOrDefault(), movimentoNew.DettaglioRipartizione.Sum(item => item.Importo).GetValueOrDefault()); }
public void RicalcoloRipartizioneByMovimento(MovimentoContabile movimento) { if (!movimento.ContoRiferimento.IsSpesePersonali && movimento.ContoRiferimento.Ripartizione) { IList<MillesimoDTO> millesimi = (from item in _millesimiService.GetByConto(movimento.ContoRiferimento, null, null, movimento.Testata.EsercizioRiferimento) where ( from item2 in movimento.DettaglioRipartizione select item2.UnitaRiferimento.ID ).Contains(item.IdUnitaRiferimento) select item).ToList(); if (millesimi.Count > 0 && movimento.Causale.Codice != "IA") { foreach (var spesaUnita in movimento.DettaglioRipartizione) spesaUnita.Importo = _millesimiService.GetRipartoImporto(spesaUnita.UnitaRiferimento, movimento.ContoRiferimento, movimento.GetImportoConSegno().GetValueOrDefault(), millesimi, movimento.Testata.EsercizioRiferimento, null); } } }
public bool IsRipartizionePersonalizzata(MovimentoContabile movimento) { var result = false; if ((movimento.DettaglioRiferimento?.ModelloRipartizione == null) && movimento.DettaglioRipartizione.Count > 0) { List<int> idGruppi = null; if (!string.IsNullOrEmpty(movimento.GruppiAddebito)) { var idGruppiStr = movimento.GruppiAddebito.Split('&'); idGruppi = new List<int>(idGruppiStr.Length); idGruppi.AddRange(idGruppiStr.Select(int.Parse)); } var millesimi = _millesimiService.GetByConto(movimento.ContoRiferimento, null, idGruppi, movimento.Testata.EsercizioRiferimento); foreach (var riparto in movimento.DettaglioRipartizione) { var importoOriginale = _millesimiService.GetRipartoImporto(riparto.UnitaRiferimento, movimento.ContoRiferimento, movimento.GetImportoConSegno().GetValueOrDefault(), millesimi, movimento.Testata.EsercizioRiferimento, null); if (Math.Round(importoOriginale.GetValueOrDefault(), 2) != Math.Round(riparto.Importo.GetValueOrDefault(), 2)) result = true; } } return result; }