예제 #1
0
		public SpesaInfoDTO SalvaSpesa(SpesaDTO spesa, IDictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> listaRipartizioni, bool isMultiIva, UserInfo userinfo)
		{
            var retryCount = 10;
            var success = false;
            var windsorRep = new WindsorConfigRepository();
            var item = new SpesaInfoDTO { Id = 0, Message = "Un altro utente ha confermato un movimento.", StampaEtichettaArchiviazione = false, IdentificativoArchiviazione = null, NumeroProtocollo = 0 };
            while (retryCount >= 0 && !success)
            {
                try
                {
                    windsorRep.BeginTransaction(userinfo);
                    var repo = new SpesaRepository(userinfo, windsorRep);
                    item = repo.Salva(spesa, listaRipartizioni, isMultiIva);
                    windsorRep.Commit();
                    success = true;
                }
                catch (InvalidDataException ex)
                {
                    windsorRep.Rollback();
                    return new SpesaInfoDTO {Message = ex.Message};
                }
                catch (Exception ex)
                {
                    windsorRep.Rollback();
                    if (!isRetryException(ex))
                    {
                        _log.ErrorFormat("Errore nel salvataggio della spesa - TENTATIVO:{0} - {1} - id:{2} - azienda:{3} - number:{4}", ex, (11 - retryCount), Utility.GetMethodDescription(), spesa.ID, userinfo.Azienda, getExceptionId(ex));
                        throw;
                    }

                    // Add delay here if you wish. 
                    System.Threading.Thread.Sleep(1000 * (11 - retryCount));
                    retryCount--;
                    _log.ErrorFormat("Salvataggio della spesa - INIZIO TENTATIVO:{0} - {1} - id:{2} - azienda:{3}", (11 - retryCount), Utility.GetMethodDescription(), spesa.ID, userinfo.Azienda);
                }
            }

            if (!success)
                windsorRep.Rollback();

            return item;
		}