883 lines
36 KiB
PHP
883 lines
36 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Cidade;
|
|
use App\Models\Cliente;
|
|
use App\Models\Empresa;
|
|
use App\Models\FuncionarioOs;
|
|
use App\Models\OrdemServico;
|
|
use App\Models\OticaOs;
|
|
use App\Models\FaturaOrdemServico;
|
|
use App\Models\MedicaoReceitaOs;
|
|
use App\Models\Produto;
|
|
use App\Models\ProdutoOs;
|
|
use App\Models\FormatoArmacaoOtica;
|
|
use App\Models\RelatorioOs;
|
|
use App\Models\ConfigGeral;
|
|
use App\Models\ServicoOs;
|
|
use App\Models\Servico;
|
|
use App\Models\Funcionario;
|
|
use App\Models\MetaResultado;
|
|
use App\Models\NaturezaOperacao;
|
|
use App\Models\ContaReceber;
|
|
use App\Models\Nfe;
|
|
use App\Models\TratamentoOtica;
|
|
use App\Models\Convenio;
|
|
use App\Models\Veiculo;
|
|
use App\Models\TipoArmacao;
|
|
use App\Models\Transportadora;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Psy\CodeCleaner\ReturnTypePass;
|
|
use Dompdf\Dompdf;
|
|
use App\Utils\UploadUtil;
|
|
use Illuminate\Support\Str;
|
|
use App\Models\Garantia;
|
|
|
|
class OrdemServicoController extends Controller
|
|
{
|
|
|
|
protected $util;
|
|
public function __construct(UploadUtil $util)
|
|
{
|
|
$this->util = $util;
|
|
$this->middleware('permission:ordem_servico_create', ['only' => ['create', 'store']]);
|
|
$this->middleware('permission:ordem_servico_edit', ['only' => ['edit', 'update']]);
|
|
$this->middleware('permission:ordem_servico_view', ['only' => ['show', 'index']]);
|
|
$this->middleware('permission:ordem_servico_delete', ['only' => ['destroy']]);
|
|
}
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$cliente_id = $request->get('cliente_id');
|
|
$start_date = $request->get('start_date');
|
|
$end_date = $request->get('end_date');
|
|
$codigo = $request->get('codigo');
|
|
$convenio_id = $request->get('convenio_id');
|
|
$situacao_entrega = $request->get('situacao_entrega');
|
|
$adiantamento = $request->get('adiantamento');
|
|
$veiculo_id = $request->get('veiculo_id');
|
|
$estado = $request->get('estado');
|
|
|
|
$data = OrdemServico::where('empresa_id', request()->empresa_id)
|
|
->select('ordem_servicos.*')
|
|
->when(!empty($cliente_id), function ($query) use ($cliente_id) {
|
|
return $query->where('cliente_id', $cliente_id);
|
|
})
|
|
->when(!empty($start_date), function ($query) use ($start_date) {
|
|
return $query->whereDate('ordem_servicos.data_inicio', '>=', $start_date);
|
|
})
|
|
->when(!empty($end_date), function ($query) use ($end_date) {
|
|
return $query->whereDate('ordem_servicos.data_inicio', '<=', $end_date);
|
|
})
|
|
->when(!empty($codigo), function ($query) use ($codigo) {
|
|
return $query->where('ordem_servicos.codigo_sequencial', $codigo);
|
|
})
|
|
->when(!empty($estado), function ($query) use ($estado) {
|
|
return $query->where('ordem_servicos.estado', $estado);
|
|
})
|
|
->when(!empty($veiculo_id), function ($query) use ($veiculo_id) {
|
|
return $query->where('ordem_servicos.veiculo_id', $veiculo_id);
|
|
})
|
|
->when(!empty($convenio_id), function ($query) use ($convenio_id) {
|
|
return $query->join('otica_os', 'otica_os.ordem_servico_id', '=', 'ordem_servicos.id')
|
|
->where('otica_os.convenio_id', $convenio_id);
|
|
})
|
|
->when(!empty($situacao_entrega), function ($query) use ($situacao_entrega) {
|
|
if($situacao_entrega == 1){
|
|
return $query->where('ordem_servicos.data_entrega', '!=', '');
|
|
}else{
|
|
return $query->where('ordem_servicos.data_entrega', null);
|
|
}
|
|
})
|
|
->when(!empty($adiantamento), function ($query) use ($adiantamento) {
|
|
if($adiantamento == 1){
|
|
return $query->where('ordem_servicos.adiantamento', '>', 0);
|
|
}else{
|
|
return $query->where('ordem_servicos.adiantamento', 0);
|
|
}
|
|
})
|
|
->orderBy('id', 'desc')
|
|
->paginate(__itensPagina());
|
|
|
|
$convenios = Convenio::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$veiculos = Veiculo::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$configGeral = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
return view('ordem_servico.index', compact('data', 'convenios', 'veiculos', 'configGeral'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
|
|
if (!__isCaixaAberto()) {
|
|
session()->flash("flash_warning", "Abrir caixa antes de continuar!");
|
|
return redirect()->route('caixa.create');
|
|
}
|
|
$hoje = date('d/m/Y');
|
|
$funcionario = Funcionario::where('empresa_id', request()->empresa_id)->first();
|
|
$clientes = Cliente::where('empresa_id', request()->empresa_id)->first();
|
|
$usuario = Auth::user();
|
|
|
|
$servicos = Servico::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
if ($funcionario == null) {
|
|
session()->flash('flash_warning', 'Cadastrar um funcionario antes de continuar!');
|
|
return redirect()->route('funcionarios.create');
|
|
}
|
|
if ($clientes == null) {
|
|
session()->flash('flash_warning', 'Cadastrar um cliente antes de continuar!');
|
|
return redirect()->route('clientes.create');
|
|
}
|
|
// dd($clientes);
|
|
if ($servicos == null) {
|
|
session()->flash('flash_warning', 'Cadastrar um serviço antes de continuar!');
|
|
return redirect()->route('servicos.create');
|
|
}
|
|
|
|
|
|
$convenios = Convenio::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$formatosArmacao = FormatoArmacaoOtica::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$tiposArmacao = TipoArmacao::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$tratamentos = TratamentoOtica::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$veiculos = Veiculo::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$configGeral = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
return view('ordem_servico.create', compact('hoje', 'funcionario', 'usuario', 'servicos', 'convenios',
|
|
'formatosArmacao', 'tiposArmacao', 'tratamentos', 'veiculos', 'configGeral'));
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$funcionario = Funcionario::where('empresa_id', request()->empresa_id)->first();
|
|
$clientes = Cliente::where('empresa_id', request()->empresa_id)->first();
|
|
$usuario = Auth::user();
|
|
|
|
$servicos = Servico::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
$item = OrdemServico::findOrFail($id);
|
|
__validaObjetoEmpresa($item);
|
|
|
|
$convenios = Convenio::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$formatosArmacao = FormatoArmacaoOtica::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$tiposArmacao = TipoArmacao::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$tratamentos = TratamentoOtica::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
if($item->oticaOs){
|
|
$item->oticaOs->tratamentos = json_decode($item->oticaOs->tratamentos ? $item->oticaOs->tratamentos : '[]');
|
|
}
|
|
|
|
$veiculos = Veiculo::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$configGeral = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
return view('ordem_servico.edit', compact('funcionario', 'usuario', 'servicos', 'item', 'convenios',
|
|
'formatosArmacao', 'tiposArmacao', 'tratamentos', 'veiculos', 'configGeral'));
|
|
}
|
|
|
|
public function duplicar($id)
|
|
{
|
|
$funcionario = Funcionario::where('empresa_id', request()->empresa_id)->first();
|
|
$clientes = Cliente::where('empresa_id', request()->empresa_id)->first();
|
|
$usuario = Auth::user();
|
|
|
|
$servicos = Servico::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
$item = OrdemServico::findOrFail($id);
|
|
__validaObjetoEmpresa($item);
|
|
|
|
$convenios = Convenio::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$formatosArmacao = FormatoArmacaoOtica::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$tiposArmacao = TipoArmacao::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
$tratamentos = TratamentoOtica::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
if($item->oticaOs){
|
|
$item->oticaOs->tratamentos = json_decode($item->oticaOs->tratamentos ? $item->oticaOs->tratamentos : '[]');
|
|
}
|
|
|
|
$veiculos = Veiculo::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$configGeral = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
return view('ordem_servico.duplicar', compact('funcionario', 'usuario', 'servicos', 'item', 'convenios',
|
|
'formatosArmacao', 'tiposArmacao', 'tratamentos', 'veiculos', 'configGeral'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$this->_validate($request);
|
|
try {
|
|
|
|
$lastItem = OrdemServico::where('empresa_id', $request->empresa_id)
|
|
->orderBy('codigo_sequencial', 'desc')->first();
|
|
$codigo_sequencial = 1;
|
|
if($lastItem != null){
|
|
$codigo_sequencial = $lastItem->codigo_sequencial+1;
|
|
}
|
|
$ordem = OrdemServico::create([
|
|
'descricao' => $request->descricao ?? '',
|
|
'usuario_id' => get_id_user(),
|
|
'cliente_id' => $request->cliente_id,
|
|
'empresa_id' => $request->empresa_id,
|
|
'codigo_sequencial' => $codigo_sequencial,
|
|
'data_inicio' => $request->data_inicio,
|
|
'data_entrega' => $request->data_entrega,
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'veiculo_id' => $request->veiculo_id ?? null,
|
|
'hash_link' => Str::random(30),
|
|
'tipo_servico' => $request->tipo_servico ?? null,
|
|
'diagnostico_cliente' => $request->diagnostico_cliente ?? '',
|
|
'equipamento' => $request->equipamento ?? null,
|
|
'numero_serie' => $request->numero_serie ?? null,
|
|
'cor' => $request->cor ?? null,
|
|
]);
|
|
|
|
// verifica ótica
|
|
if($request->medico_id){
|
|
$this->insereReceitaOtica($request, $ordem);
|
|
}
|
|
__createLog($request->empresa_id, 'Ordem de Serviço', 'cadastrar', "#$codigo_sequencial - Cliente " . $ordem->cliente->info);
|
|
session()->flash("flash_success", "Ordem de Serviço criada com sucesso");
|
|
return redirect()->route('ordem-servico.show', $ordem->id);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'Ordem de Serviço', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu Errado" . $e->getMessage());
|
|
// dd(__getError($e));
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
private function _validate(Request $request){
|
|
|
|
$rules = [
|
|
'data_inicio' => 'required',
|
|
// 'data_entrega' => 'required',
|
|
];
|
|
|
|
$messages = [
|
|
'data_inicio.required' => 'Campo obrigatório',
|
|
'data_entrega.required' => 'Campo obrigatório',
|
|
];
|
|
|
|
$this->validate($request, $rules, $messages);
|
|
}
|
|
|
|
private function insereReceitaOtica($request, $ordem){
|
|
|
|
$file_name = '';
|
|
if (!is_dir(public_path('files_receita'))) {
|
|
mkdir(public_path('files_receita'), 0777, true);
|
|
}
|
|
if ($request->hasFile('arquivo')) {
|
|
if($ordem->oticaOs && $ordem->oticaOs->arquivo_receita){
|
|
|
|
if(file_exists(public_path('files_receita/') . $ordem->oticaOs->arquivo_receita)){
|
|
unlink(public_path('files_receita/') . $ordem->oticaOs->arquivo_receita);
|
|
}
|
|
}
|
|
$file = $request->arquivo;
|
|
$ext = $file->getClientOriginalExtension();
|
|
$file_name = Str::random(20) . ".$ext";
|
|
$file->move(public_path('files_receita/'), $file_name);
|
|
}
|
|
// dd($request->all());
|
|
|
|
OticaOs::where('ordem_servico_id', $ordem->id)->delete();
|
|
$data = [
|
|
'ordem_servico_id' => $ordem->id,
|
|
'medico_id' => $request->medico_id,
|
|
'validade' => $request->validade,
|
|
'arquivo_receita' => $file_name,
|
|
'observacao_receita' => $request->observacao_receita ?? '',
|
|
'convenio_id' => $request->convenio_id,
|
|
'tipo_lente' => $request->tipo_lente,
|
|
'laboratorio_id' => $request->laboratorio_id,
|
|
'material_lente' => $request->material_lente,
|
|
'descricao_lente' => $request->descricao_lente ?? '',
|
|
'coloracao_lente' => $request->coloracao_lente ?? '',
|
|
'armacao_propria' => $request->armacao_propria,
|
|
'armacao_segue' => $request->armacao_segue,
|
|
'formato_armacao_id' => $request->formato_armacao_id,
|
|
'armacao_aro' => $request->armacao_aro,
|
|
'armacao_ponte' => $request->armacao_ponte,
|
|
'tipo_armacao_id' => $request->tipo_armacao_id,
|
|
'armacao_maior_diagonal' => $request->armacao_maior_diagonal,
|
|
'armacao_altura_vertical' => $request->armacao_altura_vertical,
|
|
'armacao_distancia_pupilar' => $request->armacao_distancia_pupilar,
|
|
'armacao_altura_centro_longe_od' => $request->armacao_altura_centro_longe_od,
|
|
'armacao_altura_centro_longe_oe' => $request->armacao_altura_centro_longe_oe,
|
|
'armacao_altura_centro_perto_od' => $request->armacao_altura_centro_perto_od,
|
|
'armacao_altura_centro_perto_oe' => $request->armacao_altura_centro_perto_oe,
|
|
'tratamentos' => $request->tratamentos ? json_encode($request->tratamentos) : '[]'
|
|
];
|
|
|
|
OticaOs::create($data);
|
|
|
|
if($request->esferico_longe_od){
|
|
MedicaoReceitaOs::where('ordem_servico_id', $ordem->id)->delete();
|
|
|
|
$data = [
|
|
'ordem_servico_id' => $ordem->id,
|
|
'esferico_longe_od' => $request->esferico_longe_od,
|
|
'esferico_longe_oe' => $request->esferico_longe_oe,
|
|
'esferico_perto_od' => $request->esferico_perto_od,
|
|
'esferico_perto_oe' => $request->esferico_perto_oe,
|
|
'cilindrico_longe_od' => $request->cilindrico_longe_od,
|
|
'cilindrico_longe_oe' => $request->cilindrico_longe_oe,
|
|
'cilindrico_perto_od' => $request->cilindrico_perto_od,
|
|
'cilindrico_perto_oe' => $request->cilindrico_perto_oe,
|
|
'eixo_longe_od' => $request->eixo_longe_od,
|
|
'eixo_longe_oe' => $request->eixo_longe_oe,
|
|
'eixo_perto_od' => $request->eixo_perto_od,
|
|
'eixo_perto_oe' => $request->eixo_perto_oe,
|
|
'altura_longe_od' => $request->altura_longe_od,
|
|
'altura_longe_oe' => $request->altura_longe_oe,
|
|
'altura_perto_od' => $request->altura_perto_od,
|
|
'altura_perto_oe' => $request->altura_perto_oe,
|
|
'dnp_longe_od' => $request->dnp_longe_od,
|
|
'dnp_longe_oe' => $request->dnp_longe_oe,
|
|
'dnp_perto_od' => $request->dnp_perto_od,
|
|
'dnp_perto_oe' => $request->dnp_perto_oe
|
|
];
|
|
|
|
MedicaoReceitaOs::create($data);
|
|
}
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$item = OrdemServico::findOrFail($id);
|
|
try {
|
|
$request->merge([
|
|
'descricao' => $request->input('descricao'),
|
|
'usuario_id' => get_id_user(),
|
|
'cliente_id' => $request->cliente_id,
|
|
'empresa_id' => $request->empresa_id,
|
|
'data_inicio' => $request->data_inicio,
|
|
'data_entrega' => $request->data_entrega,
|
|
'funcionario_id' => $request->funcionario_id
|
|
]);
|
|
|
|
$item->fill($request->all())->save();
|
|
|
|
if($request->medico_id){
|
|
$this->insereReceitaOtica($request, $item);
|
|
}
|
|
__createLog($request->empresa_id, 'Ordem de Serviço', 'editar', "#$item->codigo_sequencial - Cliente " . $item->cliente->info);
|
|
session()->flash("flash_success", "Ordem de Serviço alterada com sucesso");
|
|
return redirect()->route('ordem-servico.show', $item->id);
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'Ordem de Serviço', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu Errado" . $e->getMessage());
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
if (!__isCaixaAberto()) {
|
|
session()->flash("flash_warning", "Abrir caixa antes de continuar!");
|
|
return redirect()->route('caixa.create');
|
|
}
|
|
$ordem = OrdemServico::findOrFail($id);
|
|
|
|
if($ordem->hash_link == null){
|
|
$ordem->hash_link = Str::random(30);
|
|
$ordem->save();
|
|
}
|
|
$funcionarios = Funcionario::where('empresa_id', request()->empresa_id)->get();
|
|
$servicos = Servico::where('empresa_id', request()->empresa_id)->get();
|
|
|
|
$veiculos = Veiculo::where('empresa_id', request()->empresa_id)
|
|
->where('status', 1)->get();
|
|
|
|
$configGeral = ConfigGeral::where('empresa_id', request()->empresa_id)->first();
|
|
|
|
return view('ordem_servico.show', compact('funcionarios', 'ordem', 'servicos', 'veiculos', 'configGeral'));
|
|
}
|
|
|
|
public function storeServico(Request $request)
|
|
{
|
|
$id = $request->ordem_servico_id;
|
|
$ordem = OrdemServico::findOrFail($id);
|
|
$valor = $ordem->valor + (__convert_value_bd($request->valor) * __convert_value_bd($request->quantidade));
|
|
$ordem->valor = $valor;
|
|
$ordem->save();
|
|
try {
|
|
$servico = ServicoOs::create([
|
|
'servico_id' => $request->servico_id,
|
|
'ordem_servico_id' => $ordem->id,
|
|
'quantidade' => __convert_value_bd($request->quantidade),
|
|
'valor' => __convert_value_bd($request->valor),
|
|
'status' => $request->status,
|
|
'subtotal' => __convert_value_bd($request->quantidade) * __convert_value_bd($request->valor)
|
|
]);
|
|
|
|
$descricaoLog = "#$ordem->codigo_sequencial - Serviço Adicionado: " . $servico->servico->nome;
|
|
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço - Serviço', 'cadastrar', $descricaoLog);
|
|
session()->flash("flash_success", "Serviço adicionado!");
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'Ordem de Serviço - Serviço', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu errado" . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function storeProduto(Request $request)
|
|
{
|
|
$id = $request->ordem_servico_id;
|
|
$ordem = OrdemServico::findOrFail($id);
|
|
$valor = $ordem->valor + (__convert_value_bd($request->valor_produto) * __convert_value_bd($request->quantidade_produto));
|
|
$ordem->valor = $valor;
|
|
$ordem->save();
|
|
try {
|
|
$produto = ProdutoOs::create([
|
|
'produto_id' => $request->produto_id,
|
|
'ordem_servico_id' => $ordem->id,
|
|
'quantidade' => __convert_value_bd($request->quantidade_produto),
|
|
'valor' => __convert_value_bd($request->valor_produto),
|
|
'subtotal' => __convert_value_bd($request->quantidade_produto) * __convert_value_bd($request->valor_produto)
|
|
]);
|
|
$descricaoLog = "#$ordem->codigo_sequencial - Serviço Adicionado: " . $produto->produto->nome;
|
|
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço - Produto', 'cadastrar', $descricaoLog);
|
|
session()->flash("flash_success", "Produto adicionado!");
|
|
} catch (\Exception $e) {
|
|
__createLog($request->empresa_id, 'Ordem de Serviço - Produto', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function deletarProduto($id)
|
|
{
|
|
$produtoOs = ProdutoOs::where('id', $id)->first();
|
|
$ordem = OrdemServico::where('id', $produtoOs->ordem_servico_id)->first();
|
|
$valor = $ordem->valor - $produtoOs->subtotal;
|
|
$ordem->valor = $valor;
|
|
$ordem->save();
|
|
try {
|
|
$produtoOs->delete();
|
|
$descricaoLog = "#$ordem->codigo_sequencial - Serviço Removido: " . $produtoOs->produto->nome;
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço - Produto', 'excluir', $descricaoLog);
|
|
|
|
session()->flash("flash_success", "Produto removido");
|
|
} catch (\Exception $e) {
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço - Produto', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function deletarServico($id)
|
|
{
|
|
$produtoOs = ServicoOs::where('id', $id)->first();
|
|
$ordem = OrdemServico::where('id', $produtoOs->ordem_servico_id)->first();
|
|
$valor = $ordem->valor - $produtoOs->subtotal;
|
|
$ordem->valor = $valor;
|
|
$ordem->save();
|
|
try {
|
|
$produtoOs->delete();
|
|
$descricaoLog = "#$ordem->codigo_sequencial - Serviço Removido: " . $produtoOs->servico->nome;
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço - Serviço', 'excluir', $descricaoLog);
|
|
|
|
session()->flash("flash_success", "Serviço removido");
|
|
} catch (\Exception $e) {
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço - Serviço', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu errado" . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function alterarStatusServico($id)
|
|
{
|
|
$servicoOs = ServicoOs::where('id', $id)->first();
|
|
try {
|
|
$servicoOs->status = !$servicoOs->status;
|
|
$servicoOs->save();
|
|
session()->flash("flash_success", "Status Alterado");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado" . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function storeFuncionario(Request $request)
|
|
{
|
|
$id = $request->ordem_servico_id;
|
|
$ordem = OrdemServico::findOrFail($id);
|
|
// $this->_validateFuncionario($request);
|
|
try {
|
|
FuncionarioOs::create([
|
|
'usuario_id' => get_id_user(),
|
|
'funcionario_id' => $request->funcionario_id,
|
|
'ordem_servico_id' => $request->ordem_servico_id,
|
|
'funcao' => $request->funcao
|
|
]);
|
|
session()->flash("flash_success", "Funcionario Adicionado a Ordem de Serviço");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu Errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function addRelatorio($id)
|
|
{
|
|
$ordem = OrdemServico::where('id', $id)->first();
|
|
return view('ordem_servico.add_relatorio', compact('ordem'));
|
|
}
|
|
|
|
public function storeRelatorio(Request $request)
|
|
{
|
|
// dd($request->ordem_servico_id);
|
|
try {
|
|
RelatorioOs::create([
|
|
'usuario_id' => get_id_user(),
|
|
'texto' => $request->texto,
|
|
'ordem_servico_id' => $request->ordem_servico_id
|
|
]);
|
|
session()->flash("flash_success", "Relatório Adicionado");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->route('ordem-servico.show', $request->ordem_servico_id);
|
|
}
|
|
|
|
public function alterarEstado($id)
|
|
{
|
|
$ordem = OrdemServico::where('id', $id)->first();
|
|
return view('ordem_servico.alterar_estado', compact('ordem'));
|
|
}
|
|
|
|
public function updateEstado(Request $request, $id)
|
|
{
|
|
$ordem = OrdemServico::findOrFail($id);
|
|
try {
|
|
$ordem->estado = $request->novo_estado;
|
|
$ordem->faturada = $request->faturar;
|
|
|
|
if($ordem->estado == 'fz' && $request->faturar){
|
|
$caixa = __isCaixaAberto();
|
|
if($caixa == null){
|
|
session()->flash("flash_error", "Abra o caixa!");
|
|
return redirect()->back();
|
|
}
|
|
$ordem->caixa_id = $caixa->id;
|
|
|
|
|
|
if($request->tipo_pagamento && $request->tipo_pagamento[0]){
|
|
for($i=0; $i<sizeof($request->tipo_pagamento); $i++){
|
|
FaturaOrdemServico::create([
|
|
'ordem_servico_id' => $ordem->id,
|
|
'tipo_pagamento' => $request->tipo_pagamento[$i],
|
|
'data_vencimento' => $request->data_vencimento[$i],
|
|
'valor' => __convert_value_bd($request->valor_fatura[$i])
|
|
]);
|
|
|
|
if(strtotime($request->data_vencimento[$i]) >= strtotime(date('Y-m-d'))){
|
|
ContaReceber::create([
|
|
'empresa_id' => $ordem->empresa_id,
|
|
'ordem_servico_id' => $ordem->id,
|
|
'cliente_id' => $ordem->cliente->id,
|
|
'valor_integral' => __convert_value_bd($request->valor_fatura[$i]),
|
|
'tipo_pagamento' => $request->tipo_pagamento[$i],
|
|
'data_vencimento' => $request->data_vencimento[$i],
|
|
'local_id' => $caixa->local_id,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($ordem->estado == 'fz'){
|
|
// apontar as garantias
|
|
foreach($ordem->itens as $produto){
|
|
if($produto->produto->prazo_garantia > 0){
|
|
Garantia::create([
|
|
'empresa_id' => $ordem->empresa_id,
|
|
'cliente_id' => $ordem->cliente_id,
|
|
'produto_id' => $produto->produto_id,
|
|
'ordem_servico_id' => $ordem->id,
|
|
'usuario_id' => \Auth::user()->id,
|
|
'prazo_garantia' => $produto->produto->prazo_garantia,
|
|
'data_venda' => date('Y-m-d')
|
|
]);
|
|
}
|
|
}
|
|
|
|
foreach($ordem->servicos as $servico){
|
|
if($servico->servico->prazo_garantia > 0){
|
|
Garantia::create([
|
|
'empresa_id' => $ordem->empresa_id,
|
|
'cliente_id' => $ordem->cliente_id,
|
|
'servico_id' => $servico->servico_id,
|
|
'ordem_servico_id' => $ordem->id,
|
|
'usuario_id' => \Auth::user()->id,
|
|
'prazo_garantia' => $servico->servico->prazo_garantia,
|
|
'data_venda' => date('Y-m-d')
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
$ordem->save();
|
|
session()->flash("flash_success", "Estado alterado!");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->route('ordem-servico.show', [$ordem->id]);
|
|
}
|
|
|
|
public function imprimir($id)
|
|
{
|
|
$ordem = OrdemServico::findOrFail($id);
|
|
|
|
__validaObjetoEmpresa($ordem);
|
|
$config = Empresa::where('id', request()->empresa_id)->first();
|
|
if ($config == null) {
|
|
session()->flash("flash_warning", "Configure o emitente");
|
|
return redirect()->route('config.index');
|
|
}
|
|
|
|
$configGeral = ConfigGeral::where('empresa_id', $ordem->empresa_id)->first();
|
|
|
|
$p = view('ordem_servico.imprimir', compact('config', 'ordem', 'configGeral'));
|
|
|
|
$domPdf = new Dompdf(["enable_remote" => true]);
|
|
$domPdf->loadHtml($p);
|
|
$pdf = ob_get_clean();
|
|
$domPdf->setPaper("A4");
|
|
$domPdf->render();
|
|
$domPdf->stream("Ordem de Serviço.pdf", array("Attachment" => false));
|
|
// return view('ordem_servico.print', compact('ordem', 'config'));
|
|
}
|
|
|
|
public function editRelatorio($id)
|
|
{
|
|
$item = RelatorioOs::findOrFail($id);
|
|
|
|
$ordem = OrdemServico::where('id', $item->ordem_servico_id)->first();
|
|
|
|
return view('ordem_servico.edit_relatorio', compact('item', 'ordem'));
|
|
}
|
|
|
|
public function updateRelatorio(Request $request, $id)
|
|
{
|
|
$ordem = RelatorioOs::findOrFail($id);
|
|
$item = OrdemServico::findOrFail($request->ordem_servico_id);
|
|
try {
|
|
$ordem->texto = $request->texto;
|
|
$ordem->save();
|
|
session()->flash("flash_success", "Reletório Alterado");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado" . $e->getMessage());
|
|
}
|
|
return redirect()->route('ordem-servico.show', $item);
|
|
}
|
|
|
|
public function deleteRelatorio(Request $request, $id)
|
|
{
|
|
$relatorioOs = RelatorioOs::where('id', $id)->first();
|
|
try {
|
|
$relatorioOs->delete();
|
|
session()->flash("flash_success", "Relatório Deletado");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$item = OrdemServico::findOrFail($id);
|
|
try {
|
|
$descricaoLog = "#$item->codigo_sequencial - Cliente " . $item->cliente->info;
|
|
$item->servicos()->delete();
|
|
$item->relatorios()->delete();
|
|
$item->fatura()->delete();
|
|
$item->itens()->delete();
|
|
|
|
$item->delete();
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço', 'excluir', $descricaoLog);
|
|
session()->flash("flash_success", "Ordem de Serviço removida");
|
|
} catch (\Exception $e) {
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function gerarNfe($id)
|
|
{
|
|
$item = OrdemServico::findOrFail($id);
|
|
$cidades = Cidade::all();
|
|
$transportadoras = Transportadora::where('empresa_id', request()->empresa_id)->get();
|
|
|
|
$naturezas = NaturezaOperacao::where('empresa_id', request()->empresa_id)->get();
|
|
if (sizeof($naturezas) == 0) {
|
|
session()->flash("flash_warning", "Primeiro cadastre um natureza de operação!");
|
|
return redirect()->route('natureza-operacao.create');
|
|
}
|
|
// $produtos = Produto::where('empresa_id', request()->empresa_id)->get();
|
|
$empresa = Empresa::findOrFail(request()->empresa_id);
|
|
$numeroNfe = Nfe::lastNumero($empresa);
|
|
|
|
$isOrdemServico = 1;
|
|
$funcionarios = Funcionario::where('empresa_id', request()->empresa_id)->get();
|
|
|
|
$naturezaPadrao = NaturezaOperacao::where('empresa_id', request()->empresa_id)
|
|
->where('padrao', 1)->first();
|
|
|
|
return view('nfe.create', compact('item', 'cidades', 'transportadoras', 'naturezas', 'isOrdemServico', 'numeroNfe', 'funcionarios',
|
|
'naturezaPadrao'));
|
|
}
|
|
|
|
public function destroySelecet(Request $request)
|
|
{
|
|
$removidos = 0;
|
|
for($i=0; $i<sizeof($request->item_delete); $i++){
|
|
$item = OrdemServico::findOrFail($request->item_delete[$i]);
|
|
try {
|
|
$descricaoLog = "#$item->codigo_sequencial - Cliente " . $item->cliente->info;
|
|
$item->servicos()->delete();
|
|
$item->relatorios()->delete();
|
|
$item->itens()->delete();
|
|
$item->delete();
|
|
$removidos++;
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço', 'excluir', $descricaoLog);
|
|
} catch (\Exception $e) {
|
|
__createLog(request()->empresa_id, 'Ordem de Serviço', 'erro', $e->getMessage());
|
|
session()->flash("flash_error", 'Algo deu errado: '. $e->getMessage());
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
session()->flash("flash_success", "Total de itens removidos: $removidos!");
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function printOtica(Request $request){
|
|
$ordem = OrdemServico::findOrFail($request->ordem_servico_id);
|
|
__validaObjetoEmpresa($ordem);
|
|
|
|
$config = Empresa::where('id', request()->empresa_id)->first();
|
|
$config = __objetoParaEmissao($config, $ordem->local_id);
|
|
|
|
$viaCliente = $request->via_cliente;
|
|
$viaLaboratorio = $request->via_laboratorio;
|
|
$os = $request->os;
|
|
|
|
$p = view('ordem_servico.print_otica', compact('config', 'ordem', 'viaCliente', 'viaLaboratorio', 'os'));
|
|
|
|
$domPdf = new Dompdf(["enable_remote" => true]);
|
|
$domPdf->loadHtml($p);
|
|
$pdf = ob_get_clean();
|
|
$domPdf->setPaper("A4");
|
|
$domPdf->render();
|
|
$domPdf->stream("Impressão Ótica.pdf", array("Attachment" => false));
|
|
}
|
|
|
|
public function updateEntrega(Request $request, $id){
|
|
$item = OrdemServico::findOrFail($id);
|
|
try{
|
|
|
|
$item->adiantamento = __convert_value_bd($request->adiantamento);
|
|
$item->data_entrega = $request->data_entrega;
|
|
$item->veiculo_id = $request->veiculo_id ?? null;
|
|
$item->save();
|
|
|
|
session()->flash("flash_success", "Ordem de Serviço alterada com sucesso");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu Errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function updateDescricao(Request $request, $id){
|
|
$item = OrdemServico::findOrFail($id);
|
|
try{
|
|
|
|
$item->descricao = $request->descricao ?? '';
|
|
$item->save();
|
|
|
|
session()->flash("flash_success", "Ordem de Serviço alterada com sucesso");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu Errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function updateDiagnostico(Request $request, $id){
|
|
$item = OrdemServico::findOrFail($id);
|
|
try{
|
|
|
|
$item->diagnostico_tecnico = $request->diagnostico_tecnico ?? '';
|
|
$item->save();
|
|
|
|
session()->flash("flash_success", "Ordem de Serviço alterada com sucesso");
|
|
} catch (\Exception $e) {
|
|
session()->flash("flash_error", "Algo deu Errado: " . $e->getMessage());
|
|
}
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function downloadArquivo($id){
|
|
$item = OrdemServico::findOrFail($id);
|
|
|
|
if ($item->oticaOs->arquivo_receita && file_exists(public_path('files_receita/') . $item->oticaOs->arquivo_receita)) {
|
|
return response()->download(public_path('files_receita/') . $item->oticaOs->arquivo_receita);
|
|
} else {
|
|
session()->flash("flash_error", "Arquivo não encontrado");
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
public function metas(Request $request){
|
|
$metas = MetaResultado::where('empresa_id', $request->empresa_id)
|
|
->where('tabela', 'Ordens de Serviço')
|
|
->get();
|
|
|
|
if(sizeof($metas) == 0){
|
|
session()->flash("flash_warning", "Defina uma meta para ordem de serviço!");
|
|
return redirect()->route('metas.index');
|
|
}
|
|
|
|
$totalMeta = $metas->sum('valor');
|
|
$somaOsMes = $this->somaOsMes($request->empresa_id);
|
|
|
|
return view('ordem_servico.metas', compact('metas', 'totalMeta', 'somaOsMes'));
|
|
}
|
|
|
|
private function somaOsMes($empresa_id){
|
|
$soma = OrdemServico::where('empresa_id', $empresa_id)
|
|
->where('estado', '!=', 'cancelado')
|
|
->whereMonth('created_at', date('m'))
|
|
->sum('valor');
|
|
|
|
return $soma;
|
|
}
|
|
}
|