/// <summary> /// Apaga os dados do funcionário. /// </summary> /// <param name="funcionario"></param> /// <returns></returns> public Colosoft.Business.DeleteResult ApagarFuncionario(Entidades.Funcionario funcionario) { funcionario.Require("funcionario").NotNull(); using (var session = SourceContext.Instance.CreateSession()) { var resultado = funcionario.Delete(session); if (!resultado) { return(resultado); } return(session.Execute(false).ToDeleteResult()); } }
/// <summary> /// Obtém os menus que o funcionário tem acesso /// </summary> /// <param name="funcionario"></param> /// <returns></returns> public IEnumerable <Entidades.Menu> ObterMenusPorFuncionario(Entidades.Funcionario funcionario) { _dicMenuFunc = _dicMenuFunc == null ? new Dictionary <int, IEnumerable <Menu> >() : _dicMenuFunc; // Carrega os menus do funcionário, caso o mesmo não esteja no dicionário if (!_dicMenuFunc.ContainsKey(funcionario.IdFunc)) { // Menus que a empresa pode usar var menus = ObterMenusPorConfig(funcionario.IdLoja); // Menus liberados para o usuário var menusFunc = funcionario.ConfigsMenuFunc.Select(f => f.IdMenu); if (!_dicMenuFunc.ContainsKey(funcionario.IdFunc)) { _dicMenuFunc.Add(funcionario.IdFunc, menus.Where(f => menusFunc.Contains(f.IdMenu))); } } return(_dicMenuFunc[funcionario.IdFunc]); }
/// <summary> /// Salva os dados do funcionário. /// </summary> /// <param name="funcionario"></param> /// <returns></returns> public Colosoft.Business.SaveResult SalvarFuncionario(Entidades.Funcionario funcionario) { funcionario.Require("funcionario").NotNull(); using (var session = SourceContext.Instance.CreateSession()) { var resultado = funcionario.Save(session); if (!resultado) { return(resultado); } resultado = session.Execute(false).ToSaveResult(); if (resultado) { Glass.Data.Helper.Config.ResetModulosUsuario(funcionario.IdFunc); } return(resultado); } }
/// <summary> /// Valida a atualização dos dados do funcionário. /// </summary> /// <param name="funcionario"></param> /// <returns></returns> IMessageFormattable[] Entidades.IProvedorFuncionario.ValidaAtualizacao(Entidades.Funcionario funcionario) { if (funcionario.ExistsInStorage) { var original = (Entidades.Funcionario)funcionario.Instance; if (funcionario.AdminSync && !UserInfo.GetUserInfo.IsAdminSync) { return(new IMessageFormattable[] { ("Não é possível efetuar alterações no funcionário").GetFormatter() }); } if ((original.IdTipoFunc == (int)Utils.TipoFuncionario.InstaladorComum || original.IdTipoFunc == (int)Utils.TipoFuncionario.InstaladorTemperado || original.IdTipoFunc == (int)Utils.TipoFuncionario.MotoristaInstalador) && funcionario.IdTipoFunc != (uint)Utils.TipoFuncionario.InstaladorComum && funcionario.IdTipoFunc != (uint)Utils.TipoFuncionario.InstaladorTemperado && funcionario.IdTipoFunc != (uint)Utils.TipoFuncionario.MotoristaInstalador && SourceContext.Instance.CreateQuery() .From <Data.Model.FuncEquipe>() .Where("IdFunc=?id") .Add("?id", funcionario.IdFunc) .ExistsResult()) { return(new IMessageFormattable[] { ("Não é possível alterar o tipo de um funcionário instalador que pertence a uma equipe de instalação. " + "Para alterar seu tipo para um tipo que não seja instalador remova o funcionário da equipe antes.").GetFormatter() }); } if (funcionario.Situacao == Situacao.Inativo && SourceContext.Instance.CreateQuery() .From <Data.Model.Cliente>() .Where("IdFuncAtendente=?id") .Add("?id", funcionario.IdFunc) .ExistsResult()) { return(new IMessageFormattable[] { ("Não é possível Inativar o funcionário pois ele está vinculado como atendente a pelo menos um Cliente.").GetFormatter() }); } if (funcionario.IdTipoFunc == (int)Utils.TipoFuncionario.MarcadorProducao && (funcionario.FuncionarioSetores == null || funcionario.FuncionarioSetores.Count() == 0)) { return(new IMessageFormattable[] { ("Selecione ao menos um setor que este funcionário terá acesso.").GetFormatter() }); } // Caso o funcionário tenha permissão de emitir pedidos/orçamento é necessário verificar se o tipo de funcionário esteja sendo alterado // para um tipo de funcionario que dê permissão de emitir pedidos/orçamentos, é necessário verificar também se a situação está sendo alterada. if (original.Vendedor && !funcionario.Vendedor) { if (SourceContext.Instance.CreateQuery() .From <Data.Model.Pedido>() .Where("IdFunc=?id AND Situacao NOT IN (?situacao1, ?situacao2)") .Add("?id", funcionario.IdFunc) .Add("?situacao1", Data.Model.Pedido.SituacaoPedido.Cancelado) .Add("?situacao2", Data.Model.Pedido.SituacaoPedido.Confirmado) .ExistsResult()) { return new IMessageFormattable[] { ("Este funcionário está associado à pedidos que não estão liberados ou cancelados, desassocie-o " + "destes pedidos antes de alterar seu tipo de funcionário ou sua situação.").GetFormatter() } } ; if (SourceContext.Instance.CreateQuery() .From <Data.Model.Orcamento>() .Where("IdFunc=?id AND Situacao NOT IN (?situacao1, ?situacao2)") .Add("?id", funcionario.IdFunc) .Add("?situacao1", Data.Model.Orcamento.SituacaoOrcamento.Negociado) .Add("?situacao2", Data.Model.Orcamento.SituacaoOrcamento.NaoNegociado) .ExistsResult()) { return new IMessageFormattable[] { ("Este funcionário está associado à orçamentos em aberto, desassocie-o " + "destes orçamentos antes de alterar seu tipo de funcionário ou sua situação.").GetFormatter() } } ; } } // Reseta lista de funcionários logados para aplicar alteração UserInfo.ZeraListaUsuariosLogados(); return(new IMessageFormattable[0]); } /// <summary> /// Valida a existencia do funcionário,. /// </summary> /// <param name="funcionario"></param> /// <returns></returns> IMessageFormattable[] Entidades.IProvedorFuncionario.ValidaExistencia(Entidades.Funcionario funcionario) { var mensagens = new List <string>(); // Handler para tratar o resultado da consulta de validação var tratarResultado = new Func <string, Colosoft.Query.QueryCallBack>(mensagem => (sender, query, result) => { if (result.Select(f => f.GetInt32(0)).FirstOrDefault() > 0 && !mensagens.Contains(mensagem)) { mensagens.Add(mensagem); } }); SourceContext.Instance.CreateMultiQuery() // Verifica se o funcionário possui orçamentos relacionados à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.Orcamento>() .Where("IdFuncionario=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir orçamentos relacionados ao mesmo. Para impedir seu login no sistema, inative-o.")) // Verifica se o funcionário possui pedidos relacionados à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.Pedido>() .Where("IdFunc=?id OR UsuConf=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir pedidos relacionados ao mesmo. Para impedir seu login no sistema, inative-o.")) // Verifica se o funcionário possui medições relacionados à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.Medicao>() .Where("IdFunc=?id OR IdFuncConf=?id OR IdFuncMed=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir medições relacionadas ao mesmo. Para impedir seu login no sistema, inative-o.")) // Verifica se o funcionário possuir instalações relacionadas à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.FuncEquipe>() .Where("Idfunc=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por fazer parte de uma equipe de instalação. Para impedir seu login no sistema, inative-o.")) // Verifica se o funcionário possuir projetos relacionados à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.Projeto>() .Where("IdFunc=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir projetos relacionados ao mesmo. Para impedir seu login no sistema, inative-o.")) // Verifica se o funcionário possuir leituras na produção relacionados à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.LeituraProducao>() .Where("IdFuncLeitura=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir leituras na produção relacionados ao mesmo. Para impedir seu login no sistema, inative-o.")) // Verifica se o funcionário possuir leituras na produção relacionados à seu id .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.MovBanco>() .Where("Usucad=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir movimentações bancárias relacionadas ao mesmo. Para impedir seu login no sistema, inative-o.")) .Add(SourceContext.Instance.CreateQuery() .From <Data.Model.Cliente>() .Where("IdFunc=?id") .Add("?id", funcionario.IdFunc) .Count(), tratarResultado("Este funcionário não pode ser excluído por possuir clientes vinculado ao mesmo. Para impedir seu login no sistema, inative-o.")) .Execute(); return(mensagens.Select(f => f.GetFormatter()).ToArray()); }
private void btnVendedor_Click(object sender, EventArgs e) { _vendedor = _funcionarioServico.Pesquisar(Convert.ToInt32(txtCodVendedor.Text)); lblNomeVendedor.Text = _vendedor.PessoaFisica.Nome; }