util = $util; $this->uploadUtil = $uploadUtil; $this->middleware('permission:conta_receber_create', ['only' => ['create', 'store']]); $this->middleware('permission:conta_receber_edit', ['only' => ['edit', 'update']]); $this->middleware('permission:conta_receber_view', ['only' => ['show', 'index']]); $this->middleware('permission:conta_receber_delete', ['only' => ['destroy']]); } public function index(Request $request) { $locais = __getLocaisAtivoUsuario(); $locais = $locais->pluck(['id']); $cliente_id = $request->cliente_id; $start_date = $request->start_date; $end_date = $request->end_date; $filtro_data = $request->filtro_data; $status = $request->status; $categoria_conta_id = $request->categoria_conta_id; $ordem = $request->ordem; $reserva_id = $request->reserva_id; if($filtro_data == 'data_recebimento'){ $status = 1; } $local_id = $request->get('local_id'); $data = ContaReceber::where('empresa_id', request()->empresa_id) ->select('conta_recebers.*') ->when(!empty($cliente_id), function ($query) use ($cliente_id) { return $query->where('conta_recebers.cliente_id', $cliente_id); }) ->when(!empty($start_date), function ($query) use ($start_date, $filtro_data) { return $query->whereDate('conta_recebers.'.$filtro_data, '>=', $start_date); }) ->when(!empty($end_date), function ($query) use ($end_date, $filtro_data) { return $query->whereDate('conta_recebers.'.$filtro_data, '<=', $end_date); }) ->when($local_id, function ($query) use ($local_id) { return $query->where('conta_recebers.local_id', $local_id); }) ->when($categoria_conta_id, function ($query) use ($categoria_conta_id) { return $query->where('conta_recebers.categoria_conta_id', $categoria_conta_id); }) ->when(!$local_id, function ($query) use ($locais) { return $query->whereIn('conta_recebers.local_id', $locais); }) ->when($status !== null, function ($query) use ($status) { if($status != -1){ return $query->where('conta_recebers.status', $status); }else{ return $query->where('conta_recebers.status', 0) ->whereDate('conta_recebers.data_vencimento', '<', date('Y-m-d')); } }) ->when($ordem != '', function ($query) use ($ordem) { return $query->orderBy('conta_recebers.data_vencimento', 'asc'); }) ->when($ordem == '', function ($query) use ($ordem) { return $query->orderBy('conta_recebers.created_at', 'asc'); }) ->when($reserva_id, function ($query) use ($reserva_id) { return $query->join('fatura_reservas', 'fatura_reservas.conta_receber_id', '=', 'conta_recebers.id') ->where('fatura_reservas.reserva_id', $reserva_id); }) ->paginate(__itensPagina()); $cliente = null; if($cliente_id){ $cliente = Cliente::findOrFail($cliente_id); } $categorias = CategoriaConta::where('empresa_id', request()->empresa_id) ->where('status', 1)->where('tipo', 'receber')->get(); return view('conta-receber.index', compact('data', 'cliente', 'categorias')); } public function exportExcel(Request $request){ $locais = __getLocaisAtivoUsuario(); $locais = $locais->pluck(['id']); $cliente_id = $request->cliente_id; $start_date = $request->start_date; $end_date = $request->end_date; $status = $request->status; $categoria_conta_id = $request->categoria_conta_id; $ordem = $request->ordem; $local_id = $request->get('local_id'); $data = ContaReceber::where('empresa_id', request()->empresa_id) ->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('data_vencimento', '>=', $start_date); }) ->when(!empty($end_date), function ($query) use ($end_date) { return $query->whereDate('data_vencimento', '<=', $end_date); }) ->when($local_id, function ($query) use ($local_id) { return $query->where('local_id', $local_id); }) ->when($categoria_conta_id, function ($query) use ($categoria_conta_id) { return $query->where('categoria_conta_id', $categoria_conta_id); }) ->when(!$local_id, function ($query) use ($locais) { return $query->whereIn('local_id', $locais); }) ->when($status != '', function ($query) use ($status) { return $query->where('status', $status); }) ->when($ordem != '', function ($query) use ($ordem) { return $query->orderBy('data_vencimento', 'asc'); }) ->when($ordem == '', function ($query) use ($ordem) { return $query->orderBy('created_at', 'asc'); })->get(); $file = new ContaReceberExport($data); return Excel::download($file, 'contas_receber.xlsx'); } public function create(Request $request) { $item = null; $diferenca = null; if($request->id){ $item = ContaReceber::findOrFail($request->id); $item->valor_integral = $request->diferenca; } if($request->diferenca){ $diferenca = $request->diferenca; } $categorias = CategoriaConta::where('empresa_id', request()->empresa_id) ->where('status', 1)->where('tipo', 'receber')->get(); return view('conta-receber.create', compact('item', 'diferenca', 'categorias')); } public function store(Request $request) { $this->__validate($request); try { $file_name = ''; if ($request->hasFile('file')) { $file_name = $this->uploadUtil->uploadFile($request->file, '/financeiro'); } $referencia = ""; if ($request->dt_recorrencia) { $referencia = "Parcela 1 de " . sizeof($request->dt_recorrencia)+1; } $descricao = $request->descricao; $request->merge([ 'valor_integral' => __convert_value_bd($request->valor_integral), 'valor_original' => __convert_value_bd($request->valor_integral), 'valor_recebido' => $request->valor_recebido ? __convert_value_bd($request->valor_recebido) : 0, 'arquivo' => $file_name, 'descricao' => $descricao . " " . $referencia ]); $conta = ContaReceber::create($request->all()); $descricaoLog = "Vencimento: " . __data_pt($request->data_vencimento, 0) . " R$ " . __moeda($request->valor_integral); __createLog($request->empresa_id, 'Conta a Receber', 'cadastrar', $descricaoLog); if(isset($request->frete_id)){ $frete = Frete::findOrFail($request->frete_id); $frete->conta_receber_id = $conta->id; $frete->save(); } if ($request->dt_recorrencia) { for ($i = 0; $i < sizeof($request->dt_recorrencia); $i++) { $data = $request->dt_recorrencia[$i]; $valor = __convert_value_bd($request->valor_recorrencia[$i]); $referencia = "Parcela ".($i+2)." de " . sizeof($request->dt_recorrencia)+1; $data = [ 'venda_id' => null, 'data_vencimento' => $data, // 'data_recebimento' => $data, 'valor_integral' => $valor, 'valor_recebido' => $request->status ? $valor : 0, 'descricao' => $descricao . " " . $referencia, 'categoria_conta_id' => $request->categoria_conta_id, 'status' => $request->status, 'empresa_id' => $request->empresa_id, 'cliente_id' => $request->cliente_id, 'tipo_pagamento' => $request->tipo_pagamento, 'local_id' => $request->local_id, 'observacao' => $request->observacao, 'observacao2' => $request->observacao2, 'observacao3' => $request->observacao3, ]; $conta = ContaReceber::create($data); $descricaoLog = "Vencimento: " . __data_pt($request->dt_recorrencia[$i], 0) . " R$ " . __moeda($valor); __createLog($request->empresa_id, 'Conta a Receber', 'cadastrar', $descricaoLog); } } session()->flash("flash_success", "Conta a receber cadastrada!"); } catch (\Exception $e) { __createLog($request->empresa_id, 'Conta a Receber', 'erro', $e->getMessage()); session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } if(isset($request->redirect)){ return redirect($request->redirect); } return redirect()->route('conta-receber.index'); } public function edit($id) { $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); $categorias = CategoriaConta::where('empresa_id', request()->empresa_id) ->where('status', 1)->where('tipo', 'receber')->get(); return view('conta-receber.edit', compact('item', 'categorias')); } public function show($id) { $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); $categorias = CategoriaConta::where('empresa_id', request()->empresa_id) ->where('status', 1)->where('tipo', 'receber')->get(); return view('conta-receber.show', compact('item', 'categorias')); } public function estornar($id) { $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); return view('conta-receber.estornar', compact('item')); } public function estornarUpdate(Request $request, $id){ $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); try { $item->status = 0; $item->motivo_estorno = $request->motivo_estorno; $item->save(); session()->flash("flash_success", "Conta a receber estornada!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('conta-receber.index'); } public function update(Request $request, $id) { $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); try { $file_name = $item->arquivo; if ($request->hasFile('file')) { $this->uploadUtil->unlinkImage($item, '/financeiro'); $file_name = $this->uploadUtil->uploadFile($request->file, '/financeiro'); } $request->merge([ 'valor_integral' => __convert_value_bd($request->valor_integral), 'valor_recebido' => __convert_value_bd($request->valor_recebido) ? __convert_value_bd($request->valor_recebido) : 0, 'arquivo' => $file_name ]); $item->fill($request->all())->save(); $descricaoLog = "Vencimento: " . __data_pt($item->data_vencimento) . " R$ " . __moeda($item->valor_integral); __createLog($request->empresa_id, 'Conta a Receber', 'editar', $descricaoLog); session()->flash("flash_success", "Conta a receber atualizada!"); } catch (\Exception $e) { __createLog($request->empresa_id, 'Conta a Receber', 'erro', $e->getMessage()); session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('conta-receber.index'); } public function downloadFile($id){ $item = ContaReceber::findOrFail($id); if (file_exists(public_path('uploads/financeiro/') . $item->arquivo)) { return response()->download(public_path('uploads/financeiro/') . $item->arquivo); } else { session()->flash("flash_error", "Arquivo não encontrado"); return redirect()->back(); } } private function __validate(Request $request) { $rules = [ 'cliente_id' => 'required', 'valor_integral' => 'required', 'data_vencimento' => 'required', 'status' => 'required', 'tipo_pagamento' => 'required' ]; $messages = [ 'cliente_id.required' => 'Campo obrigatório', 'valor_integral.required' => 'Campo obrigatório', 'data_vencimento.required' => 'Campo obrigatório', 'status.required' => 'Campo obrigatório', 'tipo_pagamento.required' => 'Campo obrigatório' ]; $this->validate($request, $rules, $messages); } public function destroy($id) { $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); try { $descricaoLog = "Vencimento: " . __data_pt($item->data_vencimento, 0) . " R$ " . __moeda($item->valor_integral); $item->delete(); __createLog(request()->empresa_id, 'Conta a Receber', 'excluir', $descricaoLog); session()->flash("flash_success", "Conta removida!"); } catch (\Exception $e) { __createLog(request()->empresa_id, 'Conta a Receber', 'erro', $e->getMessage()); session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->back(); } public function destroySelecet(Request $request) { $removidos = 0; $recebidas = 0; // dd($request->all()); for($i=0; $iitem_delete); $i++){ $item = ContaReceber::findOrFail($request->item_delete[$i]); if($item->boleto){ session()->flash("flash_error", 'Conta a receber selecionada com boleto vinculado!'); return redirect()->back(); } if(!$item->status){ try { $descricaoLog = "Vencimento: " . __data_pt($item->data_vencimento, 0) . " R$ " . __moeda($item->valor_integral); $item->delete(); $removidos++; __createLog(request()->empresa_id, 'Conta a Receber', 'excluir', $descricaoLog); } catch (\Exception $e) { __createLog(request()->empresa_id, 'Conta a Receber', 'erro', $e->getMessage()); session()->flash("flash_error", 'Algo deu errado: '. $e->getMessage()); return redirect()->back(); } }else{ $recebidas++; } } session()->flash("flash_success", "Total de contas removidas: $removidos"); if($recebidas > 0){ session()->flash("flash_warning", "Total de contas não removidas: $recebidas"); } return redirect()->back(); } public function receberSelecionados(Request $request) { $recebidos = 0; $data = []; for($i=0; $iitem_recebe_paga); $i++){ $item = ContaReceber::findOrFail($request->item_recebe_paga[$i]); $data[] = $item; } return view('conta-receber.receive_select', compact('data')); } public function receivePdv(Request $request) { $recebidos = 0; $data = []; for($i=0; $icontas); $i++){ $item = ContaReceber::findOrFail($request->contas[$i]); $data[] = $item; } $redirectPdv = 1; return view('conta-receber.receive_select', compact('data', 'redirectPdv')); } public function pay($id) { if (!__isCaixaAberto()) { session()->flash("flash_warning", "Abrir caixa antes de continuar!"); return redirect()->route('caixa.create'); } $item = ContaReceber::findOrFail($id); if($item->status){ session()->flash("flash_warning", "Esta conta já esta recebida!"); return redirect()->route('conta-receber.index'); } return view('conta-receber.pay', compact('item')); } public function payPut(Request $request, $id) { $usuario = Auth::user()->id; $caixa = Caixa::where('usuario_id', $usuario)->where('status', 1)->first(); if ($caixa == null) { session()->flash("flash_warning", "Abrir caixa antes de continuar!"); return redirect()->route('caixa.create'); } $item = ContaReceber::findOrFail($id); try { $item->valor_recebido = __convert_value_bd($request->valor_pago); $item->status = true; $item->data_recebimento = $request->data_recebimento; $item->tipo_pagamento = $request->tipo_pagamento; $item->caixa_id = $caixa->id; $valorMenor = $item->valor_recebido < $item->valor_integral; if(isset($request->conta_empresa_id)){ $item->conta_empresa_id = $request->conta_empresa_id; $nDoc = ''; $descricao = "Recebimento de conta"; if($item->nfe){ if($item->descricao){ $descricao .= " " . $item->descricao . " "; } $descricao .= " - valor integral R$" . __moeda($item->valor_integral) . " referente a venda Nº " . $item->nfe->numero_sequencial; if($item->nfe->estado == 'aprovado'){ $descricao .= ", emitida em " . __data_pt($item->nfe->data_emissao); $nDoc = $item->nfe->numero; } $descricao .= " VALOR TOTAL VENDA R$ " . __moeda($item->nfe->total); } $data = [ 'conta_id' => $request->conta_empresa_id, 'descricao' => $descricao, 'tipo_pagamento' => $request->tipo_pagamento, 'valor' => $item->valor_recebido, 'tipo' => 'entrada', 'cliente_id' => $item->cliente_id, 'numero_documento' => $nDoc, 'conta_pagar_id' => $item->id, 'categoria_id' => $item->categoria_conta_id ]; $itemContaEmpresa = ItemContaEmpresa::create($data); $this->util->atualizaSaldo($itemContaEmpresa); } $item->save(); if($valorMenor){ $diferenca = $item->valor_integral - $item->valor_recebido; // $item->valor_integral = $item->valor_recebido; $item->recebimento_parcial = 1; $item->save(); session()->flash("flash_warning", "Conta recebida com valor parcial!"); return redirect()->route('conta-receber.create', ['diferenca=' . $diferenca . '&id=' . $item->id]); } session()->flash("flash_success", "Conta recebida!"); } catch (\Exception $e) { session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); } return redirect()->route('conta-receber.index'); } public function receiveSelect(Request $request){ for ($i = 0; $i < sizeof($request->conta_id); $i++) { $item = ContaReceber::findOrFail($request->conta_id[$i]); $usuario = Auth::user()->id; $caixa = Caixa::where('usuario_id', $usuario)->where('status', 1)->first(); if ($caixa == null) { session()->flash("flash_warning", "Abrir caixa antes de continuar!"); return redirect()->route('caixa.create'); } $item->valor_recebido = __convert_value_bd($request->valor_recebido[$i]); $item->status = 1; $item->caixa_id = $caixa->id; $item->data_recebimento = $request->data_recebimento[$i]; $item->tipo_pagamento = $request->tipo_pagamento[$i]; if(isset($request->conta_empresa_id[$i])){ $item->conta_empresa_id = $request->conta_empresa_id[$i]; $nDoc = ''; $descricao = "Recebimento da conta"; if($item->nfe){ if($item->descricao){ $descricao .= " " . $item->descricao . " "; } $descricao .= " - valor integral R$" . __moeda($item->valor_integral) . " referente a venda Nº " . $item->nfe->numero_sequencial; if($item->nfe->estado == 'aprovado'){ $descricao .= ", emitida em " . __data_pt($item->nfe->data_emissao); $nDoc = $item->nfe->numero; } $descricao .= " VALOR TOTAL VENDA R$ " . __moeda($item->nfe->total); } $data = [ 'conta_id' => $request->conta_empresa_id[$i], 'descricao' => $descricao, 'tipo_pagamento' => $request->tipo_pagamento[$i], 'valor' => __convert_value_bd($request->valor_recebido[$i]), 'tipo' => 'entrada', 'cliente_id' => $item->cliente_id, 'numero_documento' => $nDoc, 'conta_receber_id' => $item->id, 'categoria_id' => $item->categoria_conta_id ]; $itemContaEmpresa = ItemContaEmpresa::create($data); $this->util->atualizaSaldo($itemContaEmpresa); } $item->save(); session()->flash("flash_success", "Contas recebidas!"); } if(isset($request->redirect_pdv)){ return redirect()->route('frontbox.create'); } return redirect()->route('conta-receber.index'); } public function imprimirComprovante($id){ $item = ContaReceber::findOrFail($id); __validaObjetoEmpresa($item); $p = view('conta-receber.imprimir_comprovante', compact('item')); $domPdf = new Dompdf(["enable_remote" => true]); $domPdf->loadHtml($p); $pdf = ob_get_clean(); $domPdf->setPaper([0,0,204, 204]); $domPdf->render(); header("Content-Disposition: ; filename=Pedido.pdf"); $domPdf->stream("Comprovante.pdf", array("Attachment" => false)); } public function ajustar(Request $request){ $tipo = $request->tipo; $venda_id = $request->venda_id; $troca_id = $request->troca_id; if($tipo == 'nfce'){ $venda = Nfce::findOrFail($venda_id); }else{ $venda = Nfe::findOrFail($venda_id); } $troca = Troca::findOrFail($troca_id); $contas = $venda->contaReceber; return view('conta-receber.ajustar_parcelas_troca', compact('troca', 'venda', 'contas')); } public function ajustarSave(Request $request){ DB::beginTransaction(); try { $valores = $request->valor ?? []; $datas = $request->data_vencimento ?? []; $tiposPagamento = $request->tipo_pagamento ?? []; $ids = $request->conta_id ?? []; $utimaConta = null; $padraoDescricao = null; for ($i = 0; $i < sizeof($valores); $i++) { $valor = __convert_value_bd($valores[$i]); if ($valor <= 0) { continue; } if(!$ids[$i] || $ids[$i] == '0'){ //criar conta if($utimaConta){ ContaReceber::create([ 'empresa_id' => $utimaConta->empresa_id, 'tipo_pagamento' => $tiposPagamento[$i], 'data_vencimento' => $datas[$i], 'valor_integral' => $valor, 'status' => 0, 'nfe_id' => $utimaConta->nfe_id, 'nfce_id' => $utimaConta->nfce_id, 'local_id' => $utimaConta->local_id, 'cliente_id' => $utimaConta->cliente_id, 'categoria_id' => $utimaConta->categoria_id, 'descricao' => $padraoDescricao . " Parcela " . $i+1 . " de " . sizeof($valores), ]); } }else{ $utimaConta = $conta = ContaReceber::findOrFail($ids[$i]); if($padraoDescricao == null){ $padraoDescricao = explode("Parcela", $utimaConta->descricao); $padraoDescricao = $padraoDescricao[0]; } if ($valor <= 0) { if ($conta->status == 1) { continue; } $conta->delete(); continue; } $conta->valor_integral = $valor; $conta->data_vencimento = $datas[$i]; $conta->tipo_pagamento = $tiposPagamento[$i]; $conta->descricao = $padraoDescricao . " Parcela " . $i+1 . " de " . sizeof($valores); $conta->save(); } } DB::commit(); session()->flash("flash_success", "Contas ajustadas com sucesso!"); return redirect()->route('trocas.index'); } catch (Exception $e) { DB::rollBack(); session()->flash("flash_error", "Algo deu errado: " . $e->getMessage()); return redirect()->back(); } } }