middleware('permission:orcamento_create', ['only' => ['create', 'store']]); $this->middleware('permission:orcamento_edit', ['only' => ['edit', 'update']]); $this->middleware('permission:orcamento_view', ['only' => ['show', 'index']]); $this->middleware('permission:orcamento_delete', ['only' => ['destroy']]); } public function index(Request $request) { $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); $cliente_id = $request->get('cliente_id'); $funcionario_id = $request->funcionario_id; $data = Nfe::where('empresa_id', request()->empresa_id)->where('tpNF', 1)->where('orcamento', 1) ->when(!empty($start_date), function ($query) use ($start_date) { return $query->whereDate('created_at', '>=', $start_date); }) ->when(!empty($end_date), function ($query) use ($end_date,) { return $query->whereDate('created_at', '<=', $end_date); }) ->when(!empty($cliente_id), function ($query) use ($cliente_id) { return $query->where('cliente_id', $cliente_id); }) ->when(!empty($funcionario_id), function ($q) use ($funcionario_id) { return $q->where('funcionario_id', $funcionario_id); }) ->orderBy('created_at', 'desc') ->paginate(__itensPagina()); $funcionarios = Funcionario::where('empresa_id', $request->empresa_id) ->where('status', 1)->get(); $ordemSeparacao = OrdemSeparacao::where('empresa_id', $request->empresa_id)->count(); return view('orcamento.index', compact('data', 'funcionarios', 'ordemSeparacao')); } public function destroy(string $id) { $item = Nfe::findOrFail($id); try { $item->itens()->delete(); $item->fatura()->delete(); $item->delete(); $descricaoLog = $item->cliente->info . " R$ " . __moeda($item->total); __createLog(request()->empresa_id, 'Orçamento', 'excluir', $descricaoLog); session()->flash("flash_success", "Orçamento removido!"); } catch (\Exception $e) { __createLog(request()->empresa_id, 'Orçamento', 'erro', $e->getMessage()); session()->flash("flash_error", 'Algo deu errado.', $e->getMessage()); } return redirect()->back(); } public function imprimir($id) { $item = Nfe::findOrFail($id); __validaObjetoEmpresa($item); $config = Empresa::where('id', $item->empresa_id)->first(); $config = __objetoParaEmissao($config, $item->local_id); $p = view('orcamento.imprimir', compact('config', 'item')); $domPdf = new Dompdf(["enable_remote" => true]); $domPdf->loadHtml($p); $pdf = ob_get_clean(); $domPdf->setPaper("A4"); $domPdf->render(); $domPdf->stream("Orçamento de Venda $item->numero_sequencial.pdf", array("Attachment" => false)); } public function show($id) { $data = Nfe::findOrFail($id); __validaObjetoEmpresa($data); $config = Empresa::where('id', $data->empresa_id)->first(); $config = __objetoParaEmissao($config, $data->local_id); return view('orcamento.show', compact('config', 'data')); } public function gerarVenda($id) { $data = Nfe::findOrFail($id); $data->orcamento = 0; $data->created_at = date('Y-m-d H:i:s'); $empresa = Empresa::findOrFail(request()->empresa_id); $data->numero_serie = $empresa->numero_serie_nfe; $data->save(); session()->flash("flash_success", "Orçamento transformado em venda!"); return redirect()->route('nfe.index'); } public function gerarVendaNfce($id) { $item = Nfe::findOrFail($id); $item->orcamento = 0; $item->created_at = date('Y-m-d H:i:s'); $empresa = Empresa::findOrFail(request()->empresa_id); $numero_serie = $empresa->numero_serie_nfce; $numero_nfce = $empresa->numero_ultima_nfce_producao; if ($empresa->ambiente == 2) { $numero_nfce = $empresa->numero_ultima_nfce_homologacao; } $caixa = Caixa::where('usuario_id', get_id_user()) ->where('status', 1) ->first(); $dataNfce = [ 'empresa_id' => $empresa->id, 'cliente_id' => $item->cliente_id, 'cliente_nome' => $item->cliente->razao_social, 'cliente_cpf_cnpj' => $item->cliente->cpf_cnpj, 'numero_serie' => $numero_serie, 'numero_sequencial' => $this->setNumeroSequencial(), 'numero' => $numero_nfce, 'estado' => 'novo', 'total' => $item->total, 'desconto' => $item->desconto, 'acrescimo' => $item->acrescimo, 'natureza_id' => $empresa->natureza_id_pdv, 'observacao' => $item->observacao, 'caixa_id' => $caixa->id, 'local_id' => $caixa->local_id, 'funcionario_id' => $item->funcionario_id, 'user_id' => get_id_user(), ]; // dd($dataNfce); $nfce = Nfce::create($dataNfce); foreach($item->itens as $i){ $dataItem = $i->toArray(); unset($dataItem['id']); unset($dataItem['nfe_id']); $dataItem['nfce_id'] = $nfce->id; ItemNfce::create($dataItem); } foreach($item->fatura as $f){ $dataFatura = $f->toArray(); unset($dataFatura['id']); unset($dataFatura['nfe_id']); // dd($dataFatura); FaturaNfce::create($dataFatura); } if(sizeof($item->fatura) == 0){ FaturaNfce::create([ 'nfce_id' => $nfce->id, 'tipo_pagamento' => '01', 'data_vencimento' => date('Y-m-d'), 'valor' => $nfce->total, 'observacao' => '' ]); } session()->flash("flash_success", "Orçamento transformado em venda NFCe!"); return redirect()->route('nfce.index'); } private function setNumeroSequencial(){ $last = Nfce::where('empresa_id', request()->empresa_id) ->orderBy('numero_sequencial', 'desc') ->where('numero_sequencial', '>', 0)->first(); $numero = $last != null ? $last->numero_sequencial : 0; $numero++; return $numero; } public function gerarVendaMultipla(Request $request){ $data = []; $orcamentosId = []; $itens = []; for($i=0; $iorcamento_id); $i++){ $item = Nfe::findOrFail($request->orcamento_id[$i]); $data[] = $item; $orcamentosId[] = $request->orcamento_id[$i]; foreach($item->itens as $it){ $indice = 0; for($j=0; $jproduto_id == $itens[$j]->produto_id){ $indice = $j; } } if($indice == 0){ $itens[] = $it; }else{ $itens[$indice]->quantidade += $it->quantidade; } } } foreach($itens as $it){ $it->sub_total = $it->quantidade * $it->valor_unitario; } $cliente = $item->cliente; if(!$item->cliente){ session()->flash("flash_error", "Cliente não cadastrado no sistema"); return redirect()->back(); } $cliente = $item->cliente; $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); $caixa = __isCaixaAberto(); $empresa = __objetoParaEmissao($empresa, $caixa->local_id); $numeroNfe = Nfe::lastNumero($empresa); $item->cliente_id = $cliente->id; $item->itens = $itens; return view('nfe.create', compact('item', 'cidades', 'transportadoras', 'naturezas', 'orcamentosId', 'numeroNfe', 'caixa')); } public function edit($id) { $item = Nfe::findOrFail($id); __validaObjetoEmpresa($item); $transportadoras = Transportadora::where('empresa_id', request()->empresa_id)->get(); $cidades = Cidade::all(); $naturezas = NaturezaOperacao::where('empresa_id', request()->empresa_id)->get(); $caixa = __isCaixaAberto(); $isOrcamento = 1; $funcionarios = Funcionario::where('empresa_id', request()->empresa_id) ->where('status', 1)->get(); return view('nfe.edit', compact('item', 'transportadoras', 'cidades', 'naturezas', 'caixa', 'isOrcamento', 'funcionarios')); } }