Example #1
0
        /// <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());
            }
        }
Example #2
0
        /// <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]);
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
        /// <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;
 }