middleware('permission:nfse_create', ['only' => ['create', 'store']]); $this->middleware('permission:nfse_edit', ['only' => ['edit', 'update']]); $this->middleware('permission:nfse_view', ['only' => ['show', 'index']]); $this->middleware('permission:nfse_delete', ['only' => ['destroy']]); } public function index(Request $request){ $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); $tomador = $request->get('tomador'); $estado = $request->get('estado'); $empresa = Empresa::findOrFail($request->empresa_id); $data = NotaServico:: where('empresa_id', $request->empresa_id) ->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($tomador), function ($query) use ($tomador) { return $query->where('razao_social', 'like', "%$tomador%"); }) ->when($estado != "", function ($query) use ($estado) { return $query->where('estado', $estado); }) ->orderBy('created_at', 'desc') ->paginate(__itensPagina()); return view('nota_servico.index', compact('data')); } public function create(){ if (!__isCaixaAberto()) { session()->flash("flash_warning", "Abrir caixa antes de continuar!"); return redirect()->route('caixa.create'); } $config = Empresa::find(request()->empresa_id); $novoNumeroNFse = $config->numero_ultima_nfse+1; return view('nota_servico.create', compact('novoNumeroNFse')); } public function edit($id){ $item = NotaServico::findOrFail($id); return view('nota_servico.edit', compact('item')); } public function store(Request $request){ try{ DB::transaction(function () use ($request) { $config = Empresa::find($request->empresa_id); $totalServico = __convert_value_bd($request->valor_servico); $nfse = NotaServico::create([ 'empresa_id' => $request->empresa_id, 'valor_total' => $totalServico, 'ambiente' => $config->ambiente, 'estado' => 'novo', 'serie' => '', 'codigo_verificacao' => '', 'url_xml' => '', 'url_pdf_nfse' => '', 'url_pdf_rps' => '', 'cliente_id' => $request->cliente_id, 'natureza_operacao' => $request->natureza_operacao, 'documento' => $request->documento, 'razao_social' => $request->razao_social, 'im' => $request->im ?? '', 'ie' => $request->ie ?? '', 'cep' => $request->cep ?? '', 'rua' => $request->rua, 'numero' => $request->numero, 'bairro' => $request->bairro, 'complemento' => $request->complemento ?? '', 'cidade_id' => $request->cidade_id, 'email' => $request->email ?? '', 'numero_nfse' => $request->numero_nfse ?? 0, 'gerar_conta_receber' => $request->gerar_conta_receber, 'telefone' => $request->telefone ?? '' ]); ItemNotaServico::create([ 'nota_servico_id' => $nfse->id, 'discriminacao' => $request->discriminacao, 'valor_servico' => __convert_value_bd($request->valor_servico), 'servico_id' => $request->servico_id, 'codigo_cnae' => $request->codigo_cnae ?? '', 'codigo_servico' => $request->codigo_servico ?? '', 'codigo_tributacao_municipio' => $request->codigo_tributacao_municipio ?? '', 'exigibilidade_iss' => $request->exigibilidade_iss, 'iss_retido' => $request->iss_retido, 'data_competencia' => $request->data_competencia ?? null, 'estado_local_prestacao_servico' => $request->estado_local_prestacao_servico ?? '', 'cidade_local_prestacao_servico' => $request->cidade_local_prestacao_servico ?? '', 'valor_deducoes' => $request->valor_deducoes ? __convert_value_bd($request->valor_deducoes) : 0, 'desconto_incondicional' => $request->desconto_incondicional ? __convert_value_bd($request->desconto_incondicional) : 0, 'desconto_condicional' => $request->desconto_condicional ? __convert_value_bd($request->desconto_condicional) : 0, 'outras_retencoes' => $request->outras_retencoes ? __convert_value_bd($request->outras_retencoes) : 0, 'aliquota_iss' => $request->aliquota_iss ? __convert_value_bd($request->aliquota_iss) : 0, 'aliquota_pis' => $request->aliquota_pis ? __convert_value_bd($request->aliquota_pis) : 0, 'aliquota_cofins' => $request->aliquota_cofins ? __convert_value_bd($request->aliquota_cofins) : 0, 'aliquota_inss' => $request->aliquota_inss ? __convert_value_bd($request->aliquota_inss) : 0, 'aliquota_ir' => $request->aliquota_ir ? __convert_value_bd($request->aliquota_ir) : 0, 'aliquota_csll' => $request->aliquota_csll ? __convert_value_bd($request->aliquota_csll) : 0, 'intermediador' => $request->intermediador ?? 'n', 'documento_intermediador' => $request->documento_intermediador ?? '', 'nome_intermediador' => $request->nome_intermediador ?? '', 'im_intermediador' => $request->im_intermediador ?? '', 'responsavel_retencao_iss' => $request->responsavel_retencao_iss ?? 1, ]); $config->numero_ultima_nfse = $nfse->numero_nfse; $config->save(); if(isset($request->reserva_id)){ $reserva = Reserva::findOrFail($request->reserva_id); $reserva->nfse_id = $nfse->id; $reserva->save(); } if($request->data_vencimento){ $caixa = __isCaixaAberto(); $conta = ContaReceber::create([ 'empresa_id' => $request->empresa_id, 'cliente_id' => $request->cliente_id, 'valor_integral' => $totalServico, 'data_vencimento' => $request->data_vencimento, 'local_id' => $caixa->local_id, ]); $nfse->data_vencimento = $request->data_vencimento; $nfse->conta_receber_id = $conta->id; $nfse->save(); } session()->flash("flash_success", "NFSe criada com sucesso!"); }); return redirect()->route('nota-servico.index'); }catch (\Exception $e) { // echo $e->getMessage(); session()->flash("flash_error", 'Algo deu errado: ' . $e->getMessage()); return redirect()->back(); } } public function update(Request $request, $id){ try{ $item = NotaServico::findOrFail($id); DB::transaction(function () use ($request, $item) { $totalServico = __convert_value_bd($request->valor_servico); $config = Empresa::find($request->empresa_id); $item->update([ 'empresa_id' => $request->empresa_id, 'valor_total' => $totalServico, 'ambiente' => $config->ambiente, 'serie' => '', 'codigo_verificacao' => '', 'url_xml' => '', 'url_pdf_nfse' => '', 'url_pdf_rps' => '', 'cliente_id' => $request->cliente_id, 'natureza_operacao' => $request->natureza_operacao, 'documento' => $request->documento, 'gerar_conta_receber' => $request->gerar_conta_receber, 'razao_social' => $request->razao_social, 'im' => $request->im ?? '', 'ie' => $request->ie ?? '', 'cep' => $request->cep ?? '', 'rua' => $request->rua, 'numero' => $request->numero, 'numero_nfse' => $request->numero_nfse, 'bairro' => $request->bairro, 'complemento' => $request->complemento ?? '', 'cidade_id' => $request->cidade_id, 'email' => $request->email ?? '', 'telefone' => $request->telefone ?? '' ]); if($item->servico){ $item->servico->delete(); } ItemNotaServico::create([ 'nota_servico_id' => $item->id, 'discriminacao' => $request->discriminacao, 'valor_servico' => __convert_value_bd($request->valor_servico), 'servico_id' => $request->servico_id, 'codigo_cnae' => $request->codigo_cnae ?? '', 'codigo_servico' => $request->codigo_servico ?? '', 'codigo_tributacao_municipio' => $request->codigo_tributacao_municipio ?? '', 'exigibilidade_iss' => $request->exigibilidade_iss, 'iss_retido' => $request->iss_retido, 'data_competencia' => $request->data_competencia ?? null, 'estado_local_prestacao_servico' => $request->estado_local_prestacao_servico ?? '', 'cidade_local_prestacao_servico' => $request->cidade_local_prestacao_servico ?? '', 'valor_deducoes' => $request->valor_deducoes ? __convert_value_bd($request->valor_deducoes) : 0, 'desconto_incondicional' => $request->desconto_incondicional ? __convert_value_bd($request->desconto_incondicional) : 0, 'desconto_condicional' => $request->desconto_condicional ? __convert_value_bd($request->desconto_condicional) : 0, 'outras_retencoes' => $request->outras_retencoes ? __convert_value_bd($request->outras_retencoes) : 0, 'aliquota_iss' => $request->aliquota_iss ? __convert_value_bd($request->aliquota_iss) : 0, 'aliquota_pis' => $request->aliquota_pis ? __convert_value_bd($request->aliquota_pis) : 0, 'aliquota_cofins' => $request->aliquota_cofins ? __convert_value_bd($request->aliquota_cofins) : 0, 'aliquota_inss' => $request->aliquota_inss ? __convert_value_bd($request->aliquota_inss) : 0, 'aliquota_ir' => $request->aliquota_ir ? __convert_value_bd($request->aliquota_ir) : 0, 'aliquota_csll' => $request->aliquota_csll ? __convert_value_bd($request->aliquota_csll) : 0, 'intermediador' => $request->intermediador ?? 'n', 'documento_intermediador' => $request->documento_intermediador ?? '', 'nome_intermediador' => $request->nome_intermediador ?? '', 'im_intermediador' => $request->im_intermediador ?? '', 'responsavel_retencao_iss' => $request->responsavel_retencao_iss ?? 1, ]); if($request->data_vencimento){ $caixa = __isCaixaAberto(); if($item->contaReceber){ $item->contaReceber->delete(); } $conta = ContaReceber::create([ 'empresa_id' => $request->empresa_id, 'cliente_id' => $request->cliente_id, 'valor_integral' => $totalServico, 'data_vencimento' => $request->data_vencimento, 'local_id' => $caixa->local_id, ]); $item->data_vencimento = $request->data_vencimento; $item->conta_receber_id = $conta->id; $item->save(); } session()->flash("flash_success", "NFSe atualizada com sucesso!"); }); return redirect()->route('nota-servico.index'); }catch (\Exception $e) { // echo $e->getMessage(); session()->flash("flash_error", 'Algo deu errado: ' . $e->getMessage()); return redirect()->back(); } } public function destroy($id) { $item = NotaServico::findOrFail($id); try { if($item->servico){ $item->servico->delete(); } $item->delete(); session()->flash("flash_success", "NFSe removida!"); } catch (\Exception $e) { // echo $e->getLine(); // die; session()->flash("flash_error", 'Algo deu errado: '. $e->getMessage()); } return redirect()->route('nota-servico.index'); } public function imprimir($id){ $item = NotaServico::findOrFail($id); return redirect($item->url_pdf_nfse); } public function preview($id){ $item = NotaServico::findOrFail($id); if(!is_dir(public_path('nfse_temp'))){ mkdir(public_path('nfse_temp'), 0777, true); } $empresa = Empresa::findOrFail($item->empresa_id); $params = [ 'token' => $empresa->token_nfse, 'ambiente' => Nfse::AMBIENTE_PRODUCAO, 'timeout' => 60, 'port' => 443, 'http_version' => CURL_HTTP_VERSION_NONE, 'debug' => false, 'options' => [ 'debug' => false, 'timeout' => 60, 'port' => 443, 'http_version' => CURL_HTTP_VERSION_NONE ] ]; $nfse = new Nfse($params); $servico = $item->servico; try { $doc = preg_replace('/[^0-9]/', '', $item->documento); $im = preg_replace('/[^0-9]/', '', $item->im); $ie = preg_replace('/[^0-9]/', '', $item->ie); $config = ConfigGeral::where('empresa_id', $item->empresa_id) ->first(); $regimeTributacao = null; if($config != null){ $regimeTributacao = $config->regime_nfse; } $valorLiquido = $servico->valor_servico - $servico->desconto_incondicional - $servico->desconto_condicional; $payload = [ "numero" => $item->numero_nfse, "serie" => $empresa->numero_serie_nfse, "tipo" => "1", "status" => "1", "data_emissao" => date("Y-m-d\TH:i:sP"), "data_competencia" => date("Y-m-d\TH:i:sP"), "regime_tributacao" => $regimeTributacao, "tomador" => [ "cnpj" => strlen($doc) == 14 ? $doc : null, "cpf" => strlen($doc) == 11 ? $doc : null, "im" => $im ? $im : null, "ie" => $ie ? $ie : null, "razao_social" => $item->razao_social, "endereco" => [ "logradouro" => $this->retiraAcentos($item->rua), "numero" => $this->retiraAcentos($item->numero), "complemento" => $this->retiraAcentos($item->complemento), "bairro" => $this->retiraAcentos($item->bairro), "codigo_municipio" => $item->cidade->codigo, "uf" => $item->cidade->uf, "cep" => preg_replace('/[^0-9]/', '', $item->cep) ] ], "servico" => [ "codigo" => $servico->codigo_servico, "codigo_tributacao_municipio" => $servico->codigo_tributacao_municipio, "discriminacao" => $this->retiraAcentos($servico->discriminacao), "codigo_municipio" => $empresa->cidade->codigo, "valor_servicos" => $servico->valor_servico, "valor_pis" => $servico->aliquota_pis, "valor_aliquota" => $servico->aliquota_iss, // "valor_liquido" => $servico->valor_servico - $servico->desconto_incondicional - $servico->desconto_condicional, "valor_liquido" => $valorLiquido - ($servico->iss_retido == 1 ? $servico->valor_servico * ($servico->aliquota_iss/100) : 0), "codigo_cnae" => $servico->codigo_cnae, "valor_iss" => $servico->iss_retido == 1 ? $servico->valor_servico * ($servico->aliquota_iss/100) : null, "valor_iss_retido" => $servico->iss_retido == 1 ? $servico->valor_servico * ($servico->aliquota_iss/100) : null, "itens" => [ [ "codigo" => $servico->codigo_servico, "codigo_tributacao_municipio" => $servico->codigo_tributacao_municipio, "discriminacao" => $this->retiraAcentos($servico->discriminacao), "codigo_municipio" => $empresa->cidade->codigo, "valor_servicos" => $servico->valor_servico, "valor_pis" => $servico->aliquota_pis, "valor_aliquota" => $servico->aliquota_iss, "valor_liquido" => $valorLiquido - ($servico->iss_retido == 1 ? $servico->valor_servico * ($servico->aliquota_iss/100) : 0), "codigo_cnae" => $servico->codigo_cnae, "valor_iss" => $servico->iss_retido == 1 ? $servico->valor_servico * ($servico->aliquota_iss/100) : null, "valor_iss_retido" => $servico->iss_retido == 1 ? $servico->valor_servico * ($servico->aliquota_iss/100) : null, ] ] ] ]; // dd($payload); if($servico->desconto_incondicional > 0){ $payload['servico']['valor_desconto_incondicionado'] = $servico->desconto_incondicional; $payload['servico']['itens'][0]['valor_desconto_incondicionado'] = $servico->desconto_incondicional; } if($servico->desconto_condicional > 0){ $payload['servico']['valor_desconto_condicionado'] = $servico->desconto_condicional; $payload['servico']['itens'][0]['valor_desconto_condicionado'] = $servico->desconto_condicional; } if($servico->iss_retido == 1){ $payload['servico']['iss_retido'] = true; $payload['servico']['responsavel_retencao'] = $servico->responsavel_retencao_iss; } // dd($payload); // return response()->json($payload, 404); $rute = "nfse_temp/temp.pdf"; $resp = $nfse->preview($payload); $resp = json_decode($resp); if(isset($resp->pdf)){ $pdf_b64 = base64_decode($resp->pdf); if(file_put_contents($rute, $pdf_b64)){ header("Content-type: application/pdf"); echo $pdf_b64; } }else{ dd($resp); } }catch (\Exception $e) { session()->flash('flash_error', 'Algo deu errado: ' . $e->getMessage()); return redirect()->back(); } } private function retiraAcentos($texto){ return preg_replace(array("/(á|à|ã|â|ä)/","/(Á|À|Ã|Â|Ä)/","/(é|è|ê|ë)/","/(É|È|Ê|Ë)/","/(í|ì|î|ï)/","/(Í|Ì|Î|Ï)/","/(ó|ò|õ|ô|ö)/","/(Ó|Ò|Õ|Ô|Ö)/","/(ú|ù|û|ü)/","/(Ú|Ù|Û|Ü)/","/(ñ)/","/(Ñ)/", "/(ç)/", "/(&)/"),explode(" ","a A e E i I o O u U n N c e"),$texto); } }