private string insert(MovimentoContabileDTO dto, out MovimentoContabile item) { var message = string.Empty; item = null; try { var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>(); CausaleContabile causale = null; if(dto.Causale != null) causale = daoFactory.GetCausaleContabileDao().Find(dto.Causale.ID, false); if (causale == null) { var idCausale = "<NULL>"; if (dto.Causale != null) idCausale = dto.Causale.ID.ToString(CultureInfo.InvariantCulture); _log.WarnFormat("Non è definito la causale per un movimento da inserire - {0} - causale:{1} - azienda:{2}", Utility.GetMethodDescription(), idCausale, _info.Azienda); return "Non è definita la causale"; } if (dto.NumeroRiga == null) dto.NumeroRiga = 1; DettaglioSpesa dettaglio = null; var importo = Math.Round(dto.Importo.GetValueOrDefault(), 2); var segno = dto.Segno; if (importo < 0) { segno = invertiSegno(segno); importo = importo*-1; } var conto = daoFactory.GetContoDao().Find(dto.IdConto.GetValueOrDefault(), false); if (conto == null) { _log.WarnFormat("Non è definito il conto per un movimento da inserire - {0} - conto:{1} - azienda:{2}", Utility.GetMethodDescription(), dto.IdConto.GetValueOrDefault(), _info.Azienda); return "Non è definito il conto economico"; } if (dto.IdDettaglio != null) { dettaglio = daoFactory.GetDettaglioSpesaDao().GetById(dto.IdDettaglio.GetValueOrDefault(), false); item = new MovimentoContabile(_testata, dettaglio, causale, dto.NumeroRiga, conto, importo, segno); } else item = new MovimentoContabile(_testata, causale, dto.NumeroRiga, conto, importo, segno); item.PercentualeProprieta = dto.PercentualeProprieta; setSottoConto(dto, item, daoFactory); if (dto.IdFornitore != null) item.FornitoreRiferimento = daoFactory.GetFornitoreDao().GetById(dto.IdFornitore.Value, false); item.Descrizione = dto.Descrizione; item.NumeroAssegno = dto.NumeroAssegno; item.Note = dto.Note; item.GruppiAddebito = dto.GruppiAddebito; item.LottiAddebito = dto.LottiAddebito; item.StabiliAddebito = dto.StabiliAddebito; if (dto.IsMovimentoEconomico != null) item.IsMovimentoEconomico = dto.IsMovimentoEconomico.GetValueOrDefault(); if(dto.IdMovimentoStorno > 0) { var movimentoStorno = daoFactory.GetMovimentoContabileDao().Find(dto.IdMovimentoStorno.GetValueOrDefault(), false); if(movimentoStorno != null) { movimentoStorno.LottiAddebito = item.LottiAddebito; movimentoStorno.StabiliAddebito = item.StabiliAddebito; movimentoStorno.GruppiAddebito = item.GruppiAddebito; movimentoStorno.FornitoreRiferimento = item.FornitoreRiferimento; movimentoStorno.ContoRiferimento = item.ContoRiferimento; movimentoStorno.SottoContoRiferimento = item.SottoContoRiferimento; item.MovimentoStorno = movimentoStorno; } } // TODO: La valorizzazione del NumeroRegistrazione deve essere spostata nel Domain Model if (dto.NumeroRegistrazione != null) item.NumeroRegistrazione = dto.NumeroRegistrazione; else { try { if(dettaglio != null) { var esercizio = daoFactory.GetEsercizioDao().GetById(dettaglio.SpesaRiferimento.EsercizioRiferimento.ID, true); var numeroRegistrazione = esercizio.ProgressivoRegistrazioneContabile; numeroRegistrazione++; item.NumeroRegistrazione = numeroRegistrazione; esercizio.ProgressivoRegistrazioneContabile = numeroRegistrazione; } } catch (Exception ex) { message = ex.ToString().StartsWith("NHibernate.StaleObjectStateException") ? "Un altro utente ha confermato un movimento." : "Errore inaspettato nell'attribuzione del numero di registrazione, probabilmente determinato da un conflitto di aggiornamento"; _log.Error("Errore inaspettato nel salvataggio (UPDATE) del numero di registrazione - " + Utility.GetMethodDescription(), ex); var persistenceContext = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IPersistenceContext>(); persistenceContext.RollbackAndCloseSession(Login.Instance.CurrentLogin().LoginName); persistenceContext.BeginTransaction(Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted); return message; } } if (dto.IdEvasione != null) item.EvasioneBancaria = daoFactory.GetEvasioneBancariaDao().Find(dto.IdEvasione.GetValueOrDefault(), false); // =========================================================================================== // BUGID#2159 - COMMENTATO: Con la nuova funzione di riparto aggregato gli oggetti SpeseUnita // dovono essere usati SOLO per le spese personali o quando sono usate ripartizioni // personalizzate // =========================================================================================== //if (dto.DettaglioRipartizione != null) try { if (item.ContoRiferimento == null) { message = "Non è stato definito il conto di addebito"; _log.ErrorFormat("Conto a NULL - {0}", Utility.GetMethodDescription()); var persistenceContext = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IPersistenceContext>(); persistenceContext.RollbackAndCloseSession(Login.Instance.CurrentLogin().LoginName); persistenceContext.BeginTransaction(Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted); return message; } if ((item.ContoRiferimento.IsSpesePersonali || dto.IsRipartoPersonalizzato) && dto.DettaglioRipartizione != null) { var rep = new SpeseUnitaRepository(item, _info, _windsorConfigRepository); foreach (var t in dto.DettaglioRipartizione) { if (t != null) { try { rep.ManageDomainEntity(t); } catch (Exception ex) { _log.Error("Errore nell'inserimento della testata del movimento: " + Utility.GetMethodDescription() + " - 1", ex); throw; } } } } } catch (Exception ex) { _log.ErrorFormat("Errore nel salvataggio del movimento - (ManageDomainEntity) - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), _info.Azienda); throw; } item.IsRipartoPersonalizzato = dto.IsRipartoPersonalizzato; daoFactory.GetMovimentoContabileDao().SaveOrUpdate(item); } catch(Exception ex) { _log.Error("Errore nel salvataggio del movimento: " + Utility.GetMethodDescription(), ex); throw; } return message; }
private SpeseUnitaRepository getSpeseUnitaRepository() { return _spesaRep ?? (_spesaRep = new SpeseUnitaRepository(_info, _windsorConfigRepository)); }
private bool update(MovimentoContabileDTO dto, out MovimentoContabile item) { var result = false; item = null; var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>(); try { item = daoFactory.GetMovimentoContabileDao().GetById(dto.ID, false); // Condizione necessaria per il controllo del fatto che sul DB ho una versione uguale o più vecchia if (dto.Version <= item.Version) { item.Causale = daoFactory.GetCausaleContabileDao().GetById(dto.Causale.ID, false); item.ContoRiferimento = daoFactory.GetContoDao().GetById(dto.IdConto.GetValueOrDefault(), false); setSottoConto(dto, item, daoFactory); if (dto.IdFornitore != null && dto.IdFornitore > 0) item.FornitoreRiferimento = daoFactory.GetFornitoreDao().GetById(dto.IdFornitore.Value, false); else item.FornitoreRiferimento = null; item.Importo = dto.Importo; item.Note = dto.Note; item.NumeroRiga = dto.NumeroRiga; item.Descrizione = dto.Descrizione; item.Segno = dto.Segno; item.PercentualeProprieta = dto.PercentualeProprieta; item.NumeroRegistrazione = dto.NumeroRegistrazione; item.NumeroAssegno = dto.NumeroAssegno; item.GruppiAddebito = dto.GruppiAddebito; item.LottiAddebito = dto.LottiAddebito; item.StabiliAddebito = dto.StabiliAddebito; if (dto.IsMovimentoEconomico != null) item.IsMovimentoEconomico = dto.IsMovimentoEconomico.GetValueOrDefault(); // ------------------------------------------ // Dettaglio Ripartizione // ------------------------------------------ var rep = new SpeseUnitaRepository(item, _info, _windsorConfigRepository); item.DettaglioRipartizione.Clear(); foreach (SpeseUnitaDTO t in dto.DettaglioRipartizione) { try { if (t != null && t.Importo != 0) { t.IdMovimentoRiferimento = item.ID; int? id = t.ID; if ((t.Stato == "U") || (t.Stato == "I")) id = rep.ManageDomainEntity(t); var spesaUnita = daoFactory.GetSpeseUnitaDao().GetById(id.Value, false); item.DettaglioRipartizione.Add(spesaUnita); spesaUnita.MovimentoRiferimento = item; } } catch (Exception ex) { _log.ErrorFormat("Errore nel salvataggio dek movimenti - DETTAGLIO RIPARTIZIONE - {0} - id:{1}", Utility.GetMethodDescription(), ex); throw; } } if (dto.IdEvasione != null) item.EvasioneBancaria = daoFactory.GetEvasioneBancariaDao().Find(dto.IdEvasione.GetValueOrDefault(), false); result = true; } else { // Eccezione: Sul db c'è qualche cosa di più nuovo. _log.ErrorFormat("Errore nel salvataggio del movimento id:{0} - il dato sul db è più recente di quello che si vuole salvare", dto.ID); } } catch (Exception ex) { _log.ErrorFormat("Errore nel salvataggio del movimento - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID); throw; } return result; }
public IList<SpeseUnitaDTO> GetAddebitiPersonaliByMovimenti(IList<int> idMovimenti, UserInfo userinfo) { var windsorRep = new WindsorConfigRepository(); try { windsorRep.BeginTransaction(userinfo); var repo = new SpeseUnitaRepository(userinfo, windsorRep); var item = repo.GetAddebitiPersonaliByMovimenti(idMovimenti); windsorRep.Commit(); return item; } catch (Exception ex) { _log.ErrorFormat("Errore nella lettura degli addebiti personali per movimenti - {0} - movimenti:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), idMovimenti.Aggregate(string.Empty, (current, i) => current + (i + ",")), userinfo.Azienda); windsorRep.Rollback(); throw; } }