public UnidadeViewModel Run(Repository value) { UnidadeViewModel r = (UnidadeViewModel)value; UnidadeViewModel result = new UnidadeViewModel(); try { Guid guid = Guid.NewGuid(); string Validador = guid.ToString(); UnidadeModel model = new UnidadeModel(this.db, this.seguranca_db); Unidade u = model.Find(r); result = model.MapToRepository(u); result.uri = r.uri; result.Validador = Validador; result.DataExpiracao = Funcoes.Brasilia().Date.AddDays(2); result.NomeCondomino = r.NomeCondomino != null?r.NomeCondomino.ToUpper() : ""; result.Email = r.Email != null?r.Email.ToLower() : ""; #region Verifica se a unidade está ocupada int quantidade = db.CondominoUnidades.Where(info => info.CondominioID == sessaoCorrente.empresaId && info.EdificacaoID == r.EdificacaoID && info.UnidadeID == r.UnidadeID && info.DataFim == null).Count(); if (quantidade > 0) { result.mensagem = new Validate() { Code = 19, Message = "A unidade informada já se encontra ocupada por outro condômino. É necessário desocupar a unidade para executar o envio do Token de cadastro." }; throw new App_DominioException(result.mensagem); } #endregion result = model.Update(result); if (result.mensagem.Code > 0) { throw new App_DominioException(result.mensagem); } db.SaveChanges(); seguranca_db.SaveChanges(); #region envio de e-mail ao condômino para registro EnviarEmailTokenBI EnviarEmailToken = new EnviarEmailTokenBI(this.db, this.seguranca_db); result.EdificacaoDescricao = db.Edificacaos.Find(result.EdificacaoID).Descricao; result.EdificacaoDescricaoTipoEdificacao = DWMSessaoLocal._GetTipoEdificacao(result.CondominioID, this.db).Descricao; result = EnviarEmailToken.Run(result); if (result.mensagem.Code > 0) { throw new ArgumentException(result.mensagem.MessageBase); } #endregion result.mensagem.Code = -1; // Tem que devolver -1 porque na Superclasse, se devolver zero, vai executar novamente o SaveChanges. result.mensagem.Field = Validador; } catch (ArgumentException ex) { result.mensagem = new Validate() { Code = 997, Message = MensagemPadrao.Message(997).ToString(), MessageBase = ex.Message }; } catch (App_DominioException ex) { result.mensagem = ex.Result; if (ex.InnerException != null) { result.mensagem.MessageBase = new App_DominioException(ex.InnerException.Message ?? ex.Message, GetType().FullName).Message; } else { result.mensagem.MessageBase = new App_DominioException(ex.Result.Message, GetType().FullName).Message; } } catch (DbUpdateException ex) { result.mensagem.MessageBase = ex.InnerException.InnerException.Message ?? ex.Message; if (result.mensagem.MessageBase.ToUpper().Contains("REFERENCE") || result.mensagem.MessageBase.ToUpper().Contains("FOREIGN")) { if (result.mensagem.MessageBase.ToUpper().Contains("DELETE")) { result.mensagem.Code = 16; result.mensagem.Message = MensagemPadrao.Message(16).ToString(); result.mensagem.MessageType = MsgType.ERROR; } else { result.mensagem.Code = 28; result.mensagem.Message = MensagemPadrao.Message(28).ToString(); result.mensagem.MessageType = MsgType.ERROR; } } else if (result.mensagem.MessageBase.ToUpper().Contains("PRIMARY")) { result.mensagem.Code = 37; result.mensagem.Message = MensagemPadrao.Message(37).ToString(); result.mensagem.MessageType = MsgType.WARNING; } else if (result.mensagem.MessageBase.ToUpper().Contains("UNIQUE KEY")) { result.mensagem.Code = 54; result.mensagem.Message = MensagemPadrao.Message(54).ToString(); result.mensagem.MessageType = MsgType.WARNING; } else { result.mensagem.Code = 44; result.mensagem.Message = MensagemPadrao.Message(44).ToString(); result.mensagem.MessageType = MsgType.ERROR; } } catch (System.Data.Entity.Validation.DbEntityValidationException ex) { result.mensagem = new Validate() { Code = 42, Message = MensagemPadrao.Message(42).ToString(), MessageBase = ex.EntityValidationErrors.Select(m => m.ValidationErrors.First().ErrorMessage).First() }; } catch (Exception ex) { result.mensagem.Code = 17; result.mensagem.Message = MensagemPadrao.Message(17).ToString(); result.mensagem.MessageBase = new App_DominioException(ex.InnerException.InnerException.Message ?? ex.Message, GetType().FullName).Message; result.mensagem.MessageType = MsgType.ERROR; } return(result); }