Crie o model SubMenu
para criar o model SubMenu use o comando: php artisan make:model SubMenu -m
Crie a seed SubMenu
para criar a seed SubMenu use o comando: php artisan make:seed SubMenuSeeder
Crie algumas funções para acesso ao sistema
public function run() {
$conf = Menu::create(['nome' => 'Configuração','cod'=>'menu_configuracao']);
SubMenu::Create(['menu_id'=> $conf->id, 'cod'=>'submenu_meu_plano',"submenu"=>'Meu Plano']);
SubMenu::Create(['menu_id'=> $conf->id, 'cod'=>'submenu_minha_empresa', "submenu"=>'Minha Empresa']);
SubMenu::Create(['menu_id'=> $conf->id, 'cod'=>'submenu_parametro', "submenu"=>'Parâmetros do Sistema']);
SubMenu::Create(['menu_id'=> $conf->id, 'cod'=>'submenu_emitente', "submenu"=>'Emitente NFE']);
SubMenu::Create(['menu_id'=> $conf->id, 'cod'=>'submenu_natureza_operacao', "submenu"=>'Natureza Operação']);
SubMenu::Create(['menu_id'=> $conf->id, 'cod'=>'submenu_certificado_digital', "submenu"=>'Certificado Digital']);
$cad = Menu::create(['nome' => 'Cadastro','cod'=>'menu_cadastro']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_categoria', "submenu"=>'categoria']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_subcategoria', "submenu"=>'Subcategoria']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_subsubcategoria', "submenu"=>'SubSubcategoria']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_produto', "submenu"=>'Produto']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_cupom', "submenu"=>'Cupom Desconto']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_servico', "submenu"=>'Serviço']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_cliente', "submenu"=>'Cliente']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_tabela_preco', "submenu"=>'Tabela Preço']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_vendedor', "submenu"=>'Vendedor']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_varicao_grade', "submenu"=>'Variação Grade']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_item_variacao', "submenu"=>'Item Variação Grade']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_localizacao', "submenu"=>'Localização']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_fornecedor', "submenu"=>'Fornecedor']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_banco', "submenu"=>'Banco']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_conta_corrente', "submenu"=>'Conta Corrente']);
SubMenu::Create(['menu_id'=> $cad->id, 'cod'=>'submenu_transportadora', "submenu"=>'Transportadora']);
$compra = Menu::create(['nome' => 'Compra','cod'=>'menu_compra']);
SubMenu::Create(['menu_id'=> $compra->id, 'cod'=>'submenu_lista_compra', "submenu"=>'Lista Compras']);
SubMenu::Create(['menu_id'=> $compra->id, 'cod'=>'submenu_compra_manual', "submenu"=>'Compra Manual']);
SubMenu::Create(['menu_id'=> $compra->id, 'cod'=>'submenu_importar_nfe', "submenu"=>'Importar NFE']);
$venda = Menu::create(['nome' => 'Venda','cod'=>'menu_venda']);
SubMenu::Create(['menu_id'=> $venda->id, 'cod'=>'submenu_lista_venda', "submenu"=>'Lista Venda']);
SubMenu::Create(['menu_id'=> $venda->id,'cod'=>'submenu_nova_venda', "submenu"=>'Nova Venda']);
SubMenu::Create(['menu_id'=> $venda->id, 'cod'=>'submenu_orcamento', "submenu"=>'Orçamento']);
$os = Menu::create(['nome' => 'Ordem Servico','cod'=>'menu_os']);
SubMenu::Create(['menu_id'=> $os->id, 'cod'=>'submenu_ordem_servico', "submenu"=>'Ordem Serviço']);
SubMenu::Create(['menu_id'=> $os->id, 'cod'=>'submenu_tecnico', "submenu"=>'Técnico']);
SubMenu::Create(['menu_id'=> $os->id, 'cod'=>'submenu_equipamento', "submenu"=>'Equipamentos']);
SubMenu::Create(['menu_id'=> $os->id, 'cod'=>'submenu_termo_garantia', "submenu"=>'Termo Garantia']);
$pedido = Menu::create(['nome' => 'Pedido Cliente','cod'=>'menu_pedido_cliente']);
SubMenu::Create(['menu_id'=> $pedido->id,'cod'=>'submenu_lista_pedido', "submenu"=>'lista']);
$loja = Menu::create(['nome' => 'Loja Virtual','cod'=>'menu_loja_virtual']);
SubMenu::Create(['menu_id'=> $loja->id, 'cod'=>'submenu_configuracao_loja', "submenu"=>'Configuração da Loja']);
SubMenu::Create(['menu_id'=> $loja->id, 'cod'=>'submenu_pedidos_loja', "submenu"=>'Pedidos']);
SubMenu::Create(['menu_id'=> $loja->id, 'cod'=>'submenu_banner_loja', "submenu"=>'Banner']);
$estoque = Menu::create(['nome' => 'Estoque','cod'=>'menu_estoque']);
SubMenu::Create(['menu_id'=> $estoque->id, 'cod'=>'submenu_entrada',"submenu"=>'Entrada Avulsa']);
SubMenu::Create(['menu_id'=> $estoque->id, 'cod'=>'submenu_saida',"submenu"=>'Saída Avulsa']);
SubMenu::Create(['menu_id'=> $estoque->id, 'cod'=>'submenu_estoque_atual',"submenu"=>'Estoques Atuais']);
SubMenu::Create(['menu_id'=> $estoque->id, 'cod'=>'submenu_estoque_minimo',"submenu"=>'Estoque Mínimo']);
SubMenu::Create(['menu_id'=> $estoque->id, 'cod'=>'submenu_vencimento',"submenu"=>'Controle de Vencimento']);
SubMenu::Create(['menu_id'=> $estoque->id, 'cod'=>'submenu_historico_produto',"submenu"=>'Histórico Produto']);
$nfe = Menu::create(['nome' => 'Notas Fiscais','cod'=>'menu_nfe']);
SubMenu::Create(['menu_id'=> $nfe->id, 'cod'=>'submenu_nova_nfe',"submenu"=>'Nova Nfe']);
SubMenu::Create(['menu_id'=> $nfe->id, 'cod'=>'submenu_lista_nfe',"submenu"=>'Lista Nfe']);
SubMenu::Create(['menu_id'=> $nfe->id, 'cod'=>'submenu_importar_nfe',"submenu"=>'Importar NFE']);
SubMenu::Create(['menu_id'=> $nfe->id, 'cod'=>'submenu_inutilizar_numeracao',"submenu"=>'Inutilizar Numeração']);
SubMenu::Create(['menu_id'=> $nfe->id, 'cod'=>'submenu_lista_nfce',"submenu"=>'Lista NFCE']);
$pdv = Menu::create(['nome' => 'Pdv','cod'=>'menu_pdv']);
SubMenu::Create(['menu_id'=> $pdv->id, 'cod'=>'submenu_numero_pdv',"submenu"=>'Numero PDV']);
SubMenu::Create(['menu_id'=> $pdv->id, 'cod'=>'submenu_caixa_pdv',"submenu"=>'Caixas']);
SubMenu::Create(['menu_id'=> $pdv->id, 'cod'=>'submenu_sangria',"submenu"=>'Sangria']);
SubMenu::Create(['menu_id'=> $pdv->id, 'cod'=>'submenu_suplemento',"submenu"=>'Suplemento']);
SubMenu::Create(['menu_id'=> $pdv->id, 'cod'=>'submenu_venda_pdv',"submenu"=>'Venda']);
$financeiro = Menu::create(['nome' => 'Financeiro','cod'=>'menu_financeiro']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_classificacao',"submenu"=>'Classificação Financeira']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_conta_pagar',"submenu"=>'Conta a Pagar']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_conta_receber',"submenu"=>'Conta a Receber']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_tipo_despesa',"submenu"=>'Tipo de Despesa']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_despesa',"submenu"=>'Despesas']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_fatura',"submenu"=>'Faturas']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_pagamento',"submenu"=>'Pagamentos']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_recebimento',"submenu"=>'Recebimentos']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_comprovante',"submenu"=>'Comprovantes']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_movimento_conta',"submenu"=>'Movimento Conta']);
SubMenu::Create(['menu_id'=> $financeiro->id, 'cod'=>'submenu_extrato',"submenu"=>'Extrato']);
$relatorio = Menu::create(['nome' => 'Relatorio','cod'=>'menu_relatorio']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_produto',"submenu"=>'Relatório Produto']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_venda',"submenu"=>'Relatório Venda']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_estoque',"submenu"=>'Movimentação Estoque']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_conta_receber',"submenu"=>'Relatório Conta Receber']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_recebimento',"submenu"=>'Relatório Recebimentos']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_conta_pagar',"submenu"=>'Relatório Conta a Pagar']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_pagamento',"submenu"=>'Relatório Pagamentos']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_movimento_conta',"submenu"=>'Relatório Movimento de Conta']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_venda_pdv',"submenu"=>'Relatório Vendas PDV']);
SubMenu::Create(['menu_id'=> $relatorio->id, 'cod'=>'submenu_rel_venda_loja_virtual',"submenu"=>'Relatório Vendas Loja Virtual']);
print 'Todas as permissões do sistema foram criadas com sucesso!';
}
Crie um controller de recursos chamado Submenu, para que o projeto fique mais organizado salve o controller numa pasta chamada Acl
Crie a view para a listagem de submenu
Dentro da pasta resources/view crie uma pasta chamada de Acl e dentro de Acl crie uma outra chamada de SubMenu e dentro da pasta SubMenu crie um arquivo chamado Index.blade.php
Copie o conteúdo do arquivo lst_SubMenu para o arquivo Acl/SubMenu/Index.blade.php, não esqueça envolvê-lo pelos comandos:
@extends('template')
@section('conteudo')
//aqui fica o conteúdo do arquivo
@endsection
Execute seu sistema e pelo menu categoria abre a página de listagem de categoria, mas deverá está parecida com imagem abaixo
Na view Index, faça os seguintes procedimentos:
- Faça o loop para receber os dados do banco e listar na tabela
- Configure o link para fazer a edição de um registro
- Configure o link para fazer a exclusão de um registro
@foreach ($lista as $l)
<tr>
<td align="center">{{ $l->id }}</td>
<td align="left">{{ $l->cod }}</td>
<td align="left">{{ $l->menu->nome }}</td>
<td align="left">{{ $l->submenu }}</td>
<td align="center">
<a href="{{ route('submenu.edit', $l->id) }}"
class="d-inline-flex gap-3 btn btn-outline-roxo btn-pequeno"><i
class="fas fa-edit"></i>
Editar</a>
<a href="javascript:;"
onclick="confirm('Tem Certeza?') ? document.getElementById('apagar{{ $l->id }}').submit() : '';"
class="d-inline-flex gap-3 btn btn-outline-vermelho btn-pequeno">
<i class="fas fa-trash-alt"></i>
<form action="{{ route('submenu.destroy', $l->id) }}" method="POST"
id="apagar{{ $l->id }}">
<input type="hidden" name="_method" value="DELETE">
@csrf
</form>
Excluir
</a>
</td>
</tr>
@endforeach
Configure os dados do formulário para inserção dos dados
configure os input atribuindo a eles na propriedade name o nome igual ao que foi definido na criação da tabela,
também observe os tipos de dados específicos e os que são obrigatórios atribua a propriedade required
<div class="col-2">
<label class="text-label d-block text-branco">Cod </label>
<input type="text" name="cod" required
value="{{ isset($submenu->cod) ? $submenu->cod : null }}" class="form-campo">
</div>
implemente o método store para receber e salvar os dados do formulário no Banco de dados
Implemente o método store de forma que o mesmo receba os dados do formulário e salve no banco de dados, caso ache necessário use um bloco try/catch
$req = $request->except(["_token","_method","funcoes"]);
try{
SubMenu::Create($req);
return redirect()->route("submenu.index")->with('msg_sucesso', "Cadastro realizado com sucesso.");
}catch (\Exception $e){
return redirect()->back()->with('msg_erro', "Houve um problema na tentativa de cadastro [{$e->getMessage()}]");
}
Uma boa prática de programação é validar os dados antes de enviá-los para o banco de dados e uma bom recurso que o laravel oferece são os requests.
implemente um request de forma que faça todas as validações necessárias para salvar a informações no banco
Teste o sistema fazendo cadastros
Configure o método edit do Controller, com as seguinte ações:
- Busque o submenu pelo id passado no parâmetro e guarde a informação em um array
- liste todas aos submenus e guarde as informações em um array
- liste todos os menus
- Chame a view Index, passando o array de dados como parâmetro
public function edit(string $id)
{
$dados["submenu"] = SubMenu::find($id);
$dados["lista"] = SubMenu::all();
$dados["menus"] = Menu::all();
return view("Acl.SubMenu.Index", $dados);
}
Configure os dados do formulário para ediçao dos dados
Configure o elemento form da view Index, com as seguintes ações:
- o sistema deve verificar se o objeto submenu existe,
- caso ele exista, no formulário deve ser configurada a rota submenu.update
- caso não exista, no formulário deve ser configurada a rota submenu.store
@if (isset($submenu))
<form action="{{ route('submenu.update', $submenu->id) }}" method="POST">
@method('put')
@else
<form action="{{ route('submenu.store') }}" method="POST">
@endif
@csrf
na propriedade value de cada input, faça uma verificação se existe o objeto submenu, se existir imprimir o valor do campo correspondente, senão existe imprimir o objeto old()
<div class="col-2">
<label class="text-label d-block text-branco">Cod </label>
<input type="text" name="cod" required
value="{{ isset($submenu->cod) ? $submenu->cod : null }}" class="form-campo">
</div>
Implemente o método update de forma que o mesmo receba os dados do formulário e salve no banco de dados, caso ache necessário use um bloco try/catch
public function update(Request $request, string $id)
{
$req = $request->except(["_token","_method","funcoes"]);
try{
SubMenu::find($id)->update($req);
return redirect()->route("submenu.index")->with('msg_sucesso', "Cadastro realizado com sucesso.");
}catch (\Exception $e){
return redirect()->back()->with('msg_erro', "Houve um problema na tentativa de cadastro [{$e->getMessage()}]");
}
}
Faça o teste do seu sistema de forma que o mesmo consiga criar um novo registro e também alterá-lo
implemente o método destroy do Controller, com as seguinte ações:
- Busque o submenu pelo id passado no parâmetro
- Caso encontre, exclua a mesma do banco, coloque esta instrução em um bloco try/catch
- redirecione para a rota index
try {
$sub = SubMenu::findOrFail($id);
if($sub){
$sub->delete();
}
return redirect()->route("submenu.index")->with("msg_sucesso", "Registro Excluído com Sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
Teste o seu sistema, para que você tenha certeza que está tudo o ok, o sistema deverá:
- Listar todas as categorias
- Criar uma categoria nova
- Editar uma categoria selecionada
- Excluir uma categoria selecionada