Crie o model ContaBancaria
para criar o model ContaBancaria use o comando: php artisan make:model ContaBancaria -m
adicione os seguintes campos:
- banco_id (relacionado com a tabela banco)
- tipo_conta_bancaria_id(relacionado com a tabela tipo_conta_correntes)
- descricao varchar(100)
- agencia varchar(20)
- conta varchar(40)
- pix varchar(100) opcional
Schema::create('conta_bancarias', function (Blueprint $table) {
$table->id();
$table->bigInteger('tipo_conta_bancaria_id')->unsigned();
$table->foreign('tipo_conta_bancaria_id')->references('id')->on('tipo_conta_bancarias');
$table->string("nome", 80);
$table->string("banco", 60)->nullable();
$table->string("agencia", 20)->nullable();
$table->string("conta", 40)->nullable();
$table->string("pix", 100)->nullable();
$table->decimal("saldo_inicial",10,2)->nullable();
$table->decimal("saldo_atual",10,2)->nullable();
$table->timestamps();
});
Crie a seed ContaBancariaSeeder
para criar a seed ContaBancaria use o comando: php artisan make:seed ContaBancariaSeeder
popule os dados da tabela conta_bancaria
public function run(): void
{
$tipo = TipoContaBancaria::first();
$conta = new \stdClass();
$conta->banco = "Padrão";
$conta->tipo_conta_bancaria_id = $tipo->id;
$conta->nome = "Conta Padrão";
$conta->agencia = "Conta Caixa";
$conta->conta = "0001";
$conta->saldo_inicial = 0;
$conta->saldo_atual = 0;
$conta = ContaBancaria::Create(objToArray($conta));
}
faça o relacionamento da tabela conta_bancaria e as tabelas:
- tipo_conta_bancaria
Model ContaCorrente
public function banco(){
return $this->belongsTo(Banco::class);
}
public function tipoConta(){
return $this->belongsTo(TipoContaCorrente::class,"tipo_conta_corrente_id");
}
Crie um controller de recursos chamado ContaBancaria, para que o projeto fique mais organizado salve o controller numa pasta chamada Cadastro
No controller ContaBancariaController implemente o método index, o qual deverá:
- pegar a lista de conta corrente e colocar um array
- chamar a view ContaBancaria/Index com o array criado com a lista de contas
public function index()
{
$dados["lista"] = ContaBancaria::with("tipoConta")->get();
$dados["tipos"] = TipoContaBancaria::get();
return View("Cadastro.ContaBancaria.Index", $dados);
}
Crie a view para a listagem de conta bancaria
Dentro da pasta resources/view crie uma pasta chamada de Cadastro e dentro de Cadastro crie uma outra chamada de ContaBancaria e dentro da pasta ContaBancaria crie um arquivo chamado Index.blade.php
Copie o conteúdo do arquivo lst_conta_bancaria para o arquivo Cadastro/ContaBancaria/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->nome }}</td>
<td align="left">{{ $l->banco }}</td>
<td align="left">{{ $l->agencia }}</td>
<td align="left">{{ $l->conta }}</td>
<td align="left">{{ $l->tipoConta->tipo_conta }}</td>
<td align="left">{{ $l->pix }}</td>
<td align="center">
<a href="{{ route('contabancaria.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('contabancaria.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-4">
<label class="text-label d-block text-branco">Descrição </label>
<input type="text" name="nome" required
value="{{ isset($contabancaria->nome) ? $contabancaria->nome : null }}"
class="form-campo">
</div>
<div class="col-2">
<label class="text-label d-block text-branco">Banco </label>
<input type="text" name="banco" required
value="{{ isset($contabancaria->banco) ? $contabancaria->banco : null }}"
class="form-campo">
</div>
<div class="col-2">
<label class="text-label d-block text-branco">Agência </label>
<input type="text" name="agencia" required
value="{{ isset($contabancaria->agencia) ? $contabancaria->agencia : null }}"
class="form-campo">
</div>
<div class="col-2">
<label class="text-label d-block text-branco">Conta </label>
<input type="text" name="conta" required
value="{{ isset($contabancaria->conta) ? $contabancaria->conta : null }}"
class="form-campo">
</div>
<div class="col-2">
<label class="text-label d-block text-branco">Tipo Conta</label>
<select class="form-campo" name="tipo_conta_bancaria_id">
@foreach ($tipos as $tipo)
<option value='{{ $tipo->id }}'
{{ ($contabancaria->tipo_conta_bancaria_id ?? null) == $tipo->id ? 'selected' : '' }}>
{{ $tipo->tipo_conta }}</option>
@endforeach
</select>
</div>
<div class="col-3">
<label class="text-label d-block text-branco">Pix </label>
<input type="text" name="pix"
value="{{ isset($contabancaria->pix) ? $contabancaria->pix : null }}"
class="form-campo">
</div>
implemente o método store para receber e salvar os dados do formulário no Banco de dados
public function store(ContaBancariaRequest $request)
{
$req = $request->except(["_token"]);
try {
ContaBancaria::Create($req);
return redirect()->route("contabancaria.index")->with("msg_sucesso", "Registro Inserido com Sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
}
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
public function store(ContaBancariaRequest $request)
{
$req = $request->except(["_token"]);
try {
ContaBancaria::Create($req);
return redirect()->route("contabancaria.index")->with("msg_sucesso", "Registro Inserido com Sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->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 a conta bancaria pelo id passado no parâmetro e guarde a informação em um array
- liste todas as conta correntes e guarde as informações em um array
- Chame a view Index, passando o array de dados como parâmetro
public function edit(string $id)
{
$dados["contabancaria"] = ContaBancaria::find($id);
$dados["lista"] = ContaBancaria::get();
$dados["tipos"] = TipoContaBancaria::get();
return View('Cadastro.ContaBancaria.Index', $dados);
}
Configure os dados do formulário para ediççao dos dados
@if (isset($contabancaria))
<form action="{{ route('contabancaria.update', $contabancaria->id) }}" method="POST">
@method('put')
@else
<form action="{{ route('contabancaria.store') }}" method="POST">
@endif
@csrf
Configure o elemento form da view Index, com as seguintes ações:
- o sistema deve verificar se o objeto contacorrente existe,
- caso ele exista, no formulário deve ser configurada a rota contacorrente.update
- caso não exista, no formulário deve ser configurada a rota contacorrente.store
@if (isset($contabancaria))
<form action="{{ route('contabancaria.update', $contabancaria->id) }}" method="POST">
@method('put')
@else
<form action="{{ route('contabancaria.store') }}" method="POST">
@endif
@csrf
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"]);
try {
ContaBancaria::find($id)->update($req);
return redirect()->route("contabancaria.index")->with("msg_sucesso", "Registro Alterado com Sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->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 a conta corrente 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
public function destroy(string $id)
{
try {
$contabancaria = ContaBancaria::find($id);
if($contabancaria){
$contabancaria->delete();
}
return redirect()->route("contabancaria.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