arcadiasuite/plus/app/Http/Controllers/OrdemProducaoController.php

312 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\OrdemProducao;
use App\Models\ItemProducao;
use App\Models\ItemOrdemProducao;
use App\Models\Empresa;
use App\Models\EtiquetaConfiguracao;
use Dompdf\Dompdf;
use Illuminate\Support\Facades\DB;
class OrdemProducaoController extends Controller
{
public function __construct()
{
$this->middleware('permission:ordem_producao_create', ['only' => ['create', 'store']]);
$this->middleware('permission:ordem_producao_edit', ['only' => ['edit', 'update']]);
$this->middleware('permission:ordem_producao_view', ['only' => ['show', 'index']]);
$this->middleware('permission:ordem_producao_delete', ['only' => ['destroy']]);
}
public function index(Request $request){
$data = OrdemProducao::where('empresa_id', $request->empresa_id)
->orderBy('id', 'desc')
->paginate(__itensPagina());
return view('ordem_producao.index', compact('data'));
}
public function create(Request $request){
$data = ItemProducao::where('produtos.empresa_id', $request->empresa_id)
->select('item_producaos.*')
->join('produtos', 'produtos.id', '=', 'item_producaos.produto_id')
->where('item_producaos.status', 0)
->get();
// if(sizeof($data) == 0){
// session()->flash("flash_error", "Nenhum item para gerar a ordem de produção!");
// return redirect()->back();
// }
// foreach($data as $i){
// foreach($i->itemNfe->itensDimensao as $itd){
// $i->quantidade = $itd->quantidade;
// }
// }
return view('ordem_producao.create', compact('data'));
}
public function edit(Request $request, $id){
$item = OrdemProducao::findOrFail($id);
$data = ItemProducao::where('produtos.empresa_id', $request->empresa_id)
->select('item_producaos.*')
->join('produtos', 'produtos.id', '=', 'item_producaos.produto_id')
->where('item_producaos.status', 0)
->get();
return view('ordem_producao.edit', compact('data', 'item'));
}
public function show(Request $request, $id){
$item = OrdemProducao::findOrFail($id);
$config = EtiquetaConfiguracao::where('empresa_id', $request->empresa_id)->first();
return view('ordem_producao.show', compact('item', 'config'));
}
public function config(Request $request){
$item = EtiquetaConfiguracao::where('empresa_id', $request->empresa_id)->first();
try{
if($item == null){
EtiquetaConfiguracao::create($request->all());
}else{
$item->fill($request->all())->save();
}
session()->flash("flash_success", "Configuração definida!");
}catch(\Exception $e){
session()->flash("flash_error", "Algo deu Errado" . $e->getMessage());
}
return redirect()->back();
}
public function store(Request $request){
try{
DB::transaction(function () use ($request) {
if(!$request->item_select){
session()->flash("flash_error", "Selecione ao menos 1 produto!");
return redirect()->back();
}
$lastItem = OrdemProducao::where('empresa_id', $request->empresa_id)
->orderBy('codigo_sequencial', 'desc')->first();
$codigo_sequencial = 1;
if($lastItem != null){
$codigo_sequencial = $lastItem->codigo_sequencial+1;
}
$request->merge([
'observacao' => $request->observacao ?? '',
'codigo_sequencial' => $codigo_sequencial,
'usuario_id' => get_id_user()
]);
// dd($request->all());
$ordem = OrdemProducao::create($request->all());
for($i=0; $i<sizeof($request->item_select); $i++){
$itemProducao = ItemProducao::find($request->item_select[$i]);
if($itemProducao){
$itemProducao->status = 1;
$itemProducao->save();
ItemOrdemProducao::create([
'ordem_producao_id' => $ordem->id,
'item_producao_id' => $itemProducao->id,
'produto_id' => $itemProducao->produto_id,
'quantidade' => $request->qtd[$i],
'status' => 0,
'observacao' => $request->observacao_item[$i]
]);
}
}
$i = 0;
for($j=0; $j<sizeof($request->item_select); $j++){
if(isset($request->produto_id[$i])){
$dataItem = [
'ordem_producao_id' => $ordem->id,
'item_producao_id' => null,
'produto_id' => $request->produto_id[$i],
'cliente_id' => $request->cliente_id[$i],
'quantidade' => $request->qtd[$i],
'status' => 0,
'observacao' => $request->observacao_item[$i],
'numero_pedido' => $request->numero_pedido[$i],
];
ItemOrdemProducao::create($dataItem);
$i++;
}
}
session()->flash("flash_success", "Ordem de Produção criada com sucesso");
});
return redirect()->route('ordem-producao.index');
}catch(\Exception $e){
dd($e->getMessage());
session()->flash("flash_error", "Algo deu Errado" . $e->getMessage());
return redirect()->back();
}
}
public function update(Request $request, $id){
try{
$item = OrdemProducao::findOrFail($id);
$request->merge([
'observacao' => $request->observacao ?? '',
]);
$item->fill($request->all())->save();
foreach($item->itens as $i){
$itemProducao = $i->itemProducao;
if($itemProducao){
$itemProducao->status = 0;
$itemProducao->save();
}
}
$item->itens()->delete();
for($i=0; $i<sizeof($request->item_select); $i++){
$itemProducao = ItemProducao::find($request->item_select[$i]);
if($itemProducao){
$itemProducao->status = 1;
$itemProducao->save();
ItemOrdemProducao::create([
'ordem_producao_id' => $item->id,
'item_producao_id' => $itemProducao->id,
'produto_id' => $itemProducao->produto_id,
'quantidade' => $request->qtd[$i],
'status' => 0,
'observacao' => $request->observacao_item[$i]
]);
}else{
$dataItem = [
'ordem_producao_id' => $item->id,
'item_producao_id' => null,
'produto_id' => $request->produto_id[$i],
'cliente_id' => $request->cliente_id[$i],
'quantidade' => $request->qtd[$i],
'status' => 0,
'observacao' => $request->observacao_item[$i],
'numero_pedido' => $request->numero_pedido[$i],
];
ItemOrdemProducao::create($dataItem);
}
}
session()->flash("flash_success", "Ordem de Produção atualizada com sucesso");
return redirect()->route('ordem-producao.index');
}catch(\Exception $e){
session()->flash("flash_error", "Algo deu Errado" . $e->getMessage());
return redirect()->back();
}
}
public function updateEstado(Request $request, $id){
$item = OrdemProducao::findOrFail($id);
$item->estado = $request->estado;
$item->save();
session()->flash("flash_success", "Estado alterado!");
return redirect()->back();
}
public function alterarStatusItem($id){
$item = ItemOrdemProducao::findOrFail($id);
$item->status = !$item->status;
$item->save();
session()->flash("flash_success", "Status do item alterado!");
return redirect()->back();
}
public function destroy($id)
{
$item = OrdemProducao::findOrFail($id);
try {
foreach($item->itens as $i){
$itemProducao = $i->itemProducao;
if($itemProducao){
$itemProducao->status = 0;
$itemProducao->save();
}
}
$item->itens()->delete();
$item->delete();
session()->flash("flash_success", "Ordem de produção removida");
} catch (\Exception $e) {
session()->flash("flash_error", "Algo deu errado" . $e->getMessage());
}
return redirect()->back();
}
public function imprimirEtiquetas($id){
$item = OrdemProducao::findOrFail($id);
$empresa = Empresa::findOrFail(request()->empresa_id);
$config = EtiquetaConfiguracao::where('empresa_id', $empresa->id)->first();
// $p = view('ordem_producao.etiqueta', compact('item', 'empresa'));
// $domPdf = new Dompdf(["enable_remote" => true]);
// $domPdf->loadHtml($p);
// $pdf = ob_get_clean();
// $height = 0;
// foreach($item->itens as $i){
// $height += $i->quantidade * 300;
// }
return view('ordem_producao.etiqueta', compact('item', 'empresa', 'config'));
// $domPdf->set_paper(array(0,0,204,$height));
// $domPdf->render();
// $domPdf->stream("Etiqueta produção.pdf", array("Attachment" => false));
// exit();
}
public function imprimir($id)
{
$item = OrdemProducao::findOrFail($id);
$config = Empresa::findOrFail(request()->empresa_id);
$html = view('ordem_producao.imprimir_detalhe', compact('item', 'config'))->render();
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($html);
$domPdf->setPaper("A4");
$domPdf->render();
return $domPdf->stream("Ordem de produção.pdf", ["Attachment" => false]);
}
// public function imprimir($id){
// $item = OrdemProducao::findOrFail($id);
// $config = Empresa::findOrFail(request()->empresa_id);
// $p = view('ordem_producao.imprimir', compact('item', 'config'));
// $domPdf = new Dompdf(["enable_remote" => true]);
// $domPdf->loadHtml($p);
// $pdf = ob_get_clean();
// $domPdf->setPaper("A4", "landscape");
// $domPdf->render();
// $domPdf->stream("Ordem de produção.pdf", array("Attachment" => false));
// exit();
// }
}