Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions Instruções.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Componentes utilizados:

1) AdminLte
- Documentação: https://github.com/jeroennoten/Laravel-AdminLTE

2) CRUD Generator
- Documentação: https://github.com/appzcoder/crud-generator

-----------------

Utilização:

1) composer update
2) Configurar arquivo .env
3) php artisan migrate:refresh --seed

Executando os procedimentos acima, as tabelas e os dados de demonstração serão inseridos no banco.

Todos os usuários gerados pela seeder possuem a mesma senha: password
O seguinte usuário é criado como padrão para utilização do sistema:
email: admin@mail.com.br
senha: password

Obs: Como regra de negócio, o estoque dos produtos não pode ser modificado diretamente. Para que o estoque seja alimentado, deve-se acessar Produtos > Entrada de estoque > Selecionar o fornecedor responsável (Uma requisição real-time será feita para listar os produtos a partir da seleção do fornecedor) e então inserir a quantidade desejada.
35 changes: 35 additions & 0 deletions app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Fornecedor;
use App\Models\Produto;
use App\Models\Entrada_Produto;

class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}

/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
$countProdutos = Produto::count();
$countProdutosAlerta = Produto::where('qtd_estoque','<','3')->count();
$countFornecedores = Fornecedor::count();
$countEntradas = Entrada_Produto::count();
return view('modules.home',compact('countProdutos','countFornecedores','countEntradas','countProdutosAlerta'));
}
}
71 changes: 71 additions & 0 deletions app/Http/Controllers/Modules/EstoqueController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php

namespace App\Http\Controllers\Modules;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use App\Models\Produto;
use App\Models\Fornecedor;
use App\Models\Entrada_Produto;

use Illuminate\Support\Facades\DB;

class EstoqueController extends Controller
{
public function index(){
$Historico = $this->getLast();
$Produtos = Produto::where('ativo',1)->orderBy('nome','asc')->get();
$Fornecedores = Fornecedor::where('ativo',1)->orderBy('nome','asc')->get();
return view('modules.estoque.index',compact('Produtos','Fornecedores','Historico'));
}

public function store(Request $request){
$dados = $request->all();
$produto = Produto::findOrFail($dados['id_produto']);
$produto->qtd_estoque = $produto->qtd_estoque + $dados['quantidade'];
if($produto->save()){
Entrada_Produto::create($dados);
session()->flash('success','Nova entrada adicionada!');
return redirect('estoque');
}
session()->flash('error','Erro ao inserir entrada!');
return redirect('estoque');
}

public function getProdutosAlerta(){
$produtos = Produto::
join('fornecedores','id_fornecedor','=','fornecedores.id')
->select('produtos.*','fornecedores.nome as nomeFornecedor')
->where('qtd_estoque','<',6)->get();

return view('modules.produtos.alerta',compact('produtos'));
}

public function getProdutos($id_fornecedor){
return json_encode(Produto::where('id_fornecedor',$id_fornecedor)->orderBy('nome','asc')->get());
}

public function getLast(){

return DB::table('entrada_produto')
->join('produtos','entrada_produto.id_produto','=','produtos.id')
->join('fornecedores','entrada_produto.id_fornecedor','=','fornecedores.id')
->select('produtos.nome as produtoNome','fornecedores.nome as fornecedorNome','entrada_produto.quantidade','entrada_produto.created_at')
->orderBy('entrada_produto.created_at','desc')
->paginate(10);

}

public function select($id){

$Historico = $this->getLast();
$Produtos = Produto::where('ativo',1)->orderBy('nome','asc')->get();
$Fornecedores = Fornecedor::where('ativo',1)->orderBy('nome','asc')->get();

$produtoSelect = Produto::findOrFail($id);
$fornecedorSelect = Fornecedor::getFornecedor($produtoSelect['id_fornecedor']);
return view ('modules.estoque.index',compact('Produtos','Fornecedores','produtoSelect','fornecedorSelect','Historico'));

}
}
161 changes: 161 additions & 0 deletions app/Http/Controllers/Modules/FornecedorController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
<?php

namespace App\Http\Controllers\Modules;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\Models\Fornecedor;
use App\Models\Produto;
use App\Models\Entrada_Produto;
use Illuminate\Http\Request;

use Illuminate\Validation\Rule;

class FornecedorController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\View\View
*/
public function index(Request $request)
{
$keyword = $request->get('search');
$perPage = 10;

if (!empty($keyword)) {
$fornecedor = Fornecedor::where('codigo', 'LIKE', "%$keyword%")
->orWhere('nome', 'LIKE', "%$keyword%")
->orWhere('endereco', 'LIKE', "%$keyword%")
->orWhere('telefone', 'LIKE', "%$keyword%")
->orWhere('Ativo', 'LIKE', "%$keyword%")
->latest()->paginate($perPage);
} else {
$fornecedor = Fornecedor::latest()->paginate($perPage);
}

return view('modules.fornecedor.index', compact('fornecedor'));
}

/**
* Show the form for creating a new resource.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('modules.fornecedor.create');
}

/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function store(Request $request)
{

$this->validate(
$request,
//rules
[
'codigo' => 'required|unique:fornecedores',
'nome' => 'required',
'endereco' => 'required',
'telefone' => 'required|max:14'
],
//mensagens
[
'unique' => 'O :attribute já está sendo usado!'
]
);

$requestData = $request->all();

Fornecedor::create($requestData);

return redirect('fornecedor')->with('flash_message', 'Fornecedor adicionado!');
}

/**
* Display the specified resource.
*
* @param int $id
*
* @return \Illuminate\View\View
*/
public function show($id)
{
$fornecedor = Fornecedor::findOrFail($id);
$produtos = Fornecedor::getProdutos($id);
return view('modules.fornecedor.show', compact('fornecedor','produtos'));
}

/**
* Show the form for editing the specified resource.
*
* @param int $id
*
* @return \Illuminate\View\View
*/
public function edit($id)
{
$fornecedor = Fornecedor::findOrFail($id);

return view('modules.fornecedor.edit', compact('fornecedor'));
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function update(Request $request, $id)
{

// Padrão: validate($request, $rules, $mensagens);
$this->validate(
$request,
//rules
[
'codigo' => ['required', Rule::unique('fornecedores')->ignore($id) ],
'nome' => 'required',
'endereco' => 'required',
'telefone' => 'required|max:14'
],
//mensagens
[
'unique' => 'O :attribute já está sendo usado!'
]
);
$requestData = $request->all();

$fornecedor = Fornecedor::findOrFail($id);
$fornecedor->update($requestData);

return redirect('fornecedor')->with('flash_message', 'Fornecedor atualizado!');
}

/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function destroy($id)
{
//Remove o id do fornecedor
Produto::where('id_fornecedor', $id)->update(['id_fornecedor' => null]);
Entrada_Produto::where('id_fornecedor', $id)->update(['id_fornecedor' => null]);

Fornecedor::destroy($id);
return redirect('fornecedor')->with('flash_message', 'Fornecedor Deletado!');
}
}
Loading