//Rotina para recuperacao de senha do usuario
        public UtilRetorno recuperarSenha(string login)
        {
            var OUsuario = (from Usu in this.db.UsuarioSistema
                            where
                            Usu.login == login &&
                            Usu.dtExclusao == null
                            select Usu).FirstOrDefault();

            if (OUsuario == null)
            {
                return(UtilRetorno.newInstance(true, "Nenhum usuário encontrado com os dados informados."));
            }

            if (OUsuario.ativo == "N")
            {
                return(UtilRetorno.newInstance(true, "O usuário vinculado à essa conta está desativado no momento, entre em contato com a administração."));
            }

            string novaSenha = UtilString.randomString(8);

            OUsuario.senha = UtilCrypt.SHA512(novaSenha);

            OUsuario.flagAlterarSenha = "S";

            db.SaveChanges();

            IEnvioNovoUsuario OEmail = RecuperacaoSenhaUsuario.factory(OUsuario.idOrganizacao.toInt(), OUsuario.Pessoa.ToEmailsPessoa(), null);

            OEmail.enviar(OUsuario, novaSenha);

            return(UtilRetorno.newInstance(false, "Uma nova senha foi reenviada para os e-mails vinculados à essa conta."));
        }
        //Geracao de uma nova senha para o usuario
        public UtilRetorno criarNovaSenha(int idUsuario)
        {
            var OUsuario = (from Usu in this.db.UsuarioSistema
                            where
                            Usu.id == idUsuario && Usu.dtExclusao == null
                            select Usu).FirstOrDefault();

            if (OUsuario == null)
            {
                return(UtilRetorno.newInstance(true, "Desculpe, esse usuário não pôde ser localizado."));
            }


            string novaSenha = UtilString.randomString(8);

            OUsuario.senha = UtilCrypt.SHA512(novaSenha);

            OUsuario.flagAlterarSenha = "S";

            db.SaveChanges();

            IEnvioNovoUsuario OEmail = ReenvioSenhaUsuario.factory(OUsuario.idOrganizacao.toInt(), OUsuario.Pessoa.ToEmailsPessoa(), null);

            OEmail.enviar(OUsuario, novaSenha);

            return(UtilRetorno.newInstance(false, "Uma nova senha foi enviada para o e-mail vinculado à conta."));
        }
        //Persistir e inserir um novo registro
        //Inserir Empresa, Pessoa e lista de Endereços vinculados
        private bool inserir(UsuarioSistema OUsuarioSistema)
        {
            string senha = UtilString.randomString(8);

            OUsuarioSistema.senha = UtilCrypt.SHA512(senha);

            OUsuarioSistema.flagAlterarSenha = "S";

            OUsuarioSistema.setDefaultInsertValues();

            OUsuarioSistema.Pessoa.setDefaultInsertValues();

            OUsuarioSistema.Pessoa.listaEnderecos.ForEach(x => {
                x.setDefaultInsertValues();

                x.idPais = "BRA";

                x.idTipoEndereco = TipoEnderecoConst.PRINCIPAL;
            });

            if (OUsuarioSistema.Pessoa.listaEnderecos != null && OUsuarioSistema.Pessoa.listaEnderecos.Count > 0)
            {
                OUsuarioSistema.Pessoa.listaEnderecos.ForEach((x) => x.setDefaultInsertValues());

                OUsuarioSistema.Pessoa.listaEnderecos.ForEach((x) => x.idTipoEndereco = TipoEnderecoConst.PRINCIPAL);
            }

            db.UsuarioSistema.Add(OUsuarioSistema);

            db.SaveChanges();

            bool flagCastrado = OUsuarioSistema.id > 0;

            if (flagCastrado)
            {
                IEnvioNovoUsuario OEmail = EnvioNovoUsuario.factory(OUsuarioSistema.idOrganizacao.toInt(), OUsuarioSistema.Pessoa.ToEmailsPessoa(), null);

                OEmail.enviar(OUsuarioSistema, senha);
            }

            return(OUsuarioSistema.id > 0);
        }