util = $util; } private function soNumero($str) { return preg_replace("/[^0-9]/", "", $str); } private function removeAcentos($texto) { $aFind = array('&', 'á', 'à', 'ã', 'â', 'é', 'ê', 'í', 'ó', 'ô', 'õ', 'ú', 'ü', 'ç', 'Á', 'À', 'Ã', 'Â', 'É', 'Ê', 'Í', 'Ó', 'Ô', 'Õ', 'Ú', 'Ü', 'Ç'); $aSubs = array('e', 'a', 'a', 'a', 'a', 'e', 'e', 'i', 'o', 'o', 'o', 'u', 'u', 'c', 'A', 'A', 'A', 'A', 'E', 'E', 'I', 'O', 'O', 'O', 'U', 'U', 'C'); $novoTexto = str_replace($aFind, $aSubs, $texto); $novoTexto = preg_replace("/[^a-zA-Z0-9 @,-.;:\/_]/", "", $novoTexto); return $novoTexto; } public function index(){ return view('sintegra.index'); } public function store(Request $request){ // $dataInicial = '2023-11-01'; // $dataFinal = '2023-11-30'; $dataInicial = $request->start_date; $dataFinal = $request->end_date; $local_id = $request->local_id; $emitente = Empresa::findOrFail($request->empresa_id); if($local_id){ $emitente = __objetoParaEmissao($emitente, $local_id); } $cnpj = preg_replace('/[^0-9]/', '', $emitente->cpf_cnpj); $dInicial = \Carbon\Carbon::parse($dataInicial)->format('dmY'); $dFinal = \Carbon\Carbon::parse($dataFinal)->format('dmY'); $vendas = Nfe::whereDate('data_emissao', '>=', $dataInicial) ->whereDate('data_emissao', '<=', $dataFinal) ->where('estado', 'aprovado') ->where('tpNF', 1) ->where('empresa_id', $request->empresa_id) ->when($local_id, function ($query) use ($local_id) { return $query->where('local_id', $local_id); }) ->get(); $vendasPdv = Nfce::whereDate('data_emissao', '>=', $dataInicial) ->whereDate('data_emissao', '<=', $dataFinal) ->where('estado', 'aprovado') ->where('empresa_id', $request->empresa_id) ->when($local_id, function ($query) use ($local_id) { return $query->where('local_id', $local_id); }) ->get(); $dataXml = []; $dInicio = \Carbon\Carbon::parse($dataInicial)->format('Ymd'); $dFinal = \Carbon\Carbon::parse($dataFinal)->format('Ymd'); $registro10 = '10'; $registro10 .= str_pad($cnpj, 14, '0', STR_PAD_LEFT); $registro10 .= str_pad($emitente->ie, 14, ' '); $registro10 .= str_pad(substr($this->removeAcentos($emitente->nome), 0, 35), 35, ' '); $registro10 .= str_pad($this->removeAcentos($emitente->cidade->nome), 30, ' '); $registro10 .= str_pad($emitente->cidade->uf, 2, ' '); $registro10 .= str_pad(substr($this->soNumero($emitente->celular), 0, 10), 10, ' '); $registro10 .= $dInicio; $registro10 .= $dFinal; $registro10 .= '3'; $registro10 .= '3'; $registro10 .= '1'; // validar $registro10 .= "\r\n"; $sintegra = strtoupper($registro10); //fim registro 10 $contato = ' '; $registro11 = '11'; $registro11 .= str_pad(substr($this->removeAcentos($emitente->rua), 0, 34), 34, ' '); $registro11 .= str_pad($this->soNumero($emitente->numero), 5, '0', STR_PAD_LEFT); $registro11 .= str_pad(substr($this->removeAcentos($emitente->complemento), 0, 22), 22, ' '); $registro11 .= str_pad(substr($this->removeAcentos($emitente->bairro), 0, 15), 15, ' '); $registro11 .= str_pad($this->soNumero($emitente->cep), 8, '0', STR_PAD_LEFT); $registro11 .= str_pad(substr($this->removeAcentos($emitente->nome), 0, 28), 28, ' '); $registro11 .= str_pad(substr($this->soNumero($emitente->celular), 0, 12), 12, '0', STR_PAD_LEFT); $registro11 .= "\r\n"; $sintegra .= strtoupper($registro11); // fim registro 11 $totalregistro50 = 0; $totalregistro61 = 0; $totalregistro54 = 0; $totalregistro75 = 0; $registro50 = ''; $produtos50 = []; $totalregistro51 = 0; $registro54 = ''; $registro75 = ''; $registro61R = ''; $produtos = []; foreach($vendas as $v){ $xml = $this->util->getXml($v, 'xml_nfe/'); $temp = [ 'tipo' => 'venda', 'xml' => $xml ]; if($xml != null){ array_push($dataXml, $temp); } } foreach($vendasPdv as $v){ $xml = $this->util->getXml($v, 'xml_nfce/'); $temp = [ 'tipo' => 'venda', 'xml' => $xml ]; if($xml != null){ array_push($dataXml, $temp); } } foreach($dataXml as $l){ $destinatario = $this->util->getDestinatario($l['xml']); $ide = $this->util->getIde($l['xml']); $itens = $this->util->getItensNfe($l['xml']); $total = $this->util->getTotal($l['xml']); $enderecoDest = $destinatario->enderDest; $docDestinatario = isset($destinatario->CNPJ) ? $destinatario->CNPJ : $destinatario->CPF; $cfop = $itens->prod->CFOP; if($ide->mod < 55){ $totalregistro50 = $totalregistro50 + 1; $registro50 .= '50'; $registro50 .= str_pad($this->soNumero($docDestinatario), 14, '0', STR_PAD_LEFT); $registro50 .= str_pad($this->soNumero($destinatario->IE), 14, ' '); $registro50 .= $ide->dhEmi; $registro50 .= str_pad($enderecoDest->UF, 2, ' '); $registro50 .= str_pad($this->soNumero($ide->mod), 2, '0'); $registro50 .= str_pad($this->soNumero($ide->serie), 3, ' '); $registro50 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro50 .= str_pad(substr($this->soNumero($cfop), 0, 4), 4, '0', STR_PAD_LEFT); $registro50 .= 'T'; $registro50 .= str_pad($this->soNumero(number_format($total->vNF + $total->vOutro, 2, '.', '')), 13, '0', STR_PAD_LEFT); $registro50 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro50 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro50 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro50 .= str_pad($this->soNumero($total->vOutro), 13, '0', STR_PAD_LEFT); $registro50 .= str_pad('0', 4, '0', STR_PAD_LEFT); $registro50 .= 'N'; $registro50 .= "\r\n"; } $totalItens = sizeof($itens); $contItem = 1; $tvDescnf = 0; $tvFretenf = 0; $tvOutronf = 0; $vDescnf = 0; $vDescTotal = (float)$total->vDesc; $vFreteTotal = (float)$total->vFrete; $vOutroTotal = (float)$total->vOutro; // inicio registro 50 foreach($itens as $item){ $prod = $item->prod; $imposto = $item->imposto; $arr = (array_values((array)$imposto->ICMS)); $pICMS = $arr[0]->pICMS ?? 0; $vBCICMS = isset($arr[0]->vBC) ? (float)$arr[0]->vBC : 0; $cst_csosn = $arr[0]->CST ? $arr[0]->CST : $arr[0]->CSOSN; $cst_csosn = (string)$cst_csosn; $vICMSST = isset($arr[0]->vICMSST) ? (float)$arr[0]->vICMSST : 0; $vFCPST = isset($arr[0]->vFCPST) ? (float)$arr[0]->vFCPST : 0; $vICMS = isset($arr[0]->vICMS) ? (float)$arr[0]->vICMS : 0; if (!in_array($this->soNumero($contItem . $pICMS . $prod->CFOP), $produtos50)){ $produtos50[] = $this->soNumero($contItem . $pICMS . $prod->CFOP); $totalregistro50 = $totalregistro50 + 1; $registro50 .= '50'; if($destinatario){ $registro50 .= str_pad($this->soNumero($docDestinatario), 14, '0', STR_PAD_LEFT); if ($destinatario->IE == ''){ $registro50 .= 'ISENTO '; }else{ if (strlen($docDestinatario) < 14) : $registro50 .= 'ISENTO '; else : $registro50 .= str_pad($this->soNumero($destinatario->IE), 14, ' '); endif; } } $registro50 .= \Carbon\Carbon::parse($ide->dhEmi)->format('Ymd'); if($destinatario){ $registro50 .= str_pad($enderecoDest->UF, 2, ' '); } $registro50 .= str_pad($this->soNumero($ide->mod), 2, '0'); $registro50 .= str_pad($this->soNumero($ide->serie), 3, ' '); $registro50 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro50 .= str_pad(substr($this->soNumero($item->prod->CFOP), 0, 4), 4, '0', STR_PAD_LEFT); if($ide->tpEmis == 1){ $registro50 .= 'P'; }else{ $registro50 .= 'T'; } $vProd = (float) $item->prod->vProd; $arr = (array_values((array)$imposto->IPI)); $vIPI = 0; if(isset($arr[1])){ $vIPI = (float)$arr[1]->vIPI ?? 0; } $vFrete = (float)isset($item->prod->vFrete) ? $item->prod->vFrete : 0; $vOutro = (float)isset($item->prod->vOutro) ? $item->prod->vOutro : 0; $vDesc = (float)isset($item->prod->vDesc) ? $item->prod->vDesc : 0; $registro50 .= str_pad($this->soNumero(number_format($vProd + $vIPI + $vICMSST + $vFCPST + $vFrete + $vOutro - $vDesc, 2, '.', '')), 13, '0', STR_PAD_LEFT); if ($vICMS > 0){ $registro50 .= str_pad($this->soNumero($vBCICMS), 13, '0', STR_PAD_LEFT); $registro50 .= str_pad($this->soNumero(number_format($vICMS, 2, '.', '')), 13, '0', STR_PAD_LEFT); $registro50 .= str_pad('0', 13, '0', STR_PAD_LEFT); }else{ $registro50 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro50 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro50 .= str_pad($this->soNumero($vProd), 13, '0', STR_PAD_LEFT); } $registro50 .= str_pad(($this->soNumero($vOutro)), 13, '0', STR_PAD_LEFT); $registro50 .= str_pad(substr($this->soNumero($pICMS), 0, 4), 4, '0', STR_PAD_LEFT); if ($cst_csosn == '101'){ $registro50 .= 'S'; }else{ $registro50 .= 'N'; } $registro50 .= "\r\n"; $contItem++; } } // final do registro 50 // inicio registro 54 $contItem = 1; foreach($itens as $item){ $prod = $item->prod; $imposto = $item->imposto; $totalregistro54 = $totalregistro54 + 1; // $registro54 .= '54'; $cfop = $item->prod->CFOP; $arr = (array_values((array)$imposto->ICMS)); $cst_csosn = $arr[0]->CST ? $arr[0]->CST : $arr[0]->CSOSN; $cst_csosn = (string)$cst_csosn; $vBCICMS = isset($arr[0]->vBC) ? (float)$arr[0]->vBC : 0; $vBCST = isset($arr[0]->vBCST) ? (float)$arr[0]->vBCST : 0; $pMVAST = isset($arr[0]->pMVAST) ? (float)$arr[0]->pMVAST : 0; $pICMS = $arr[0]->pICMS ?? 0; $arr = (array_values((array)$imposto->IPI)); $vIPI = 0; $pIPI = 0; if(isset($arr[1]->pIPI)){ $pIPI = $arr[1]->pIPI ?? 0; }else{ if(isset($arr[4]->pIPI)){ $ipi = $arr[4]->CST; $pIPI = $arr[4]->pIPI; }else{ $pIPI = 0; } } if(isset($arr[1])){ $vIPI = (float)$arr[1]->vIPI ?? 0; } if ($ide->mod != '65' && $ide->mod != '57'){ $totalregistro54 = $totalregistro54 + 1; $registro54 .= '54'; // dd($this->soNumero($docDestinatario)); $registro54 .= str_pad($this->soNumero($docDestinatario), 14, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($ide->mod), 2, '0'); $registro54 .= str_pad($this->soNumero($ide->serie), 3, ' '); $registro54 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr($this->soNumero($cfop), 0, 4), 4, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr($this->soNumero($cst_csosn), 0, 3), 3, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr($this->soNumero($contItem), 0, 3), 3, '0', STR_PAD_LEFT); $vDesc = (float)isset($prod->vDesc) ? $prod->vDesc : 0; $registro54 .= str_pad(substr($prod->cProd, 0, 14), 14, ' '); $registro54 .= str_pad($this->soNumero($prod->qCom), 11, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero(number_format($prod->vProd - $vDesc, 2, '.', '')), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vDesc), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vBCICMS), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vBCST), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vIPI), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($pICMS), 4, '0', STR_PAD_LEFT); $registro54 .= "\r\n"; $contItem++; // dd($registro54); }else{ $totalregistro61 = $totalregistro61 + 1; $registro61R .= '61R'; $registro61R .= str_pad($this->soNumero(\Carbon\Carbon::parse($ide->dhEmi)->format('mY')), 2, '0'); $registro61R .= str_pad(substr($prod->cProd, 0, 14), 14, ' '); $registro61R .= str_pad($this->soNumero($prod->qCom), 13, '0', STR_PAD_LEFT); $registro61R .= str_pad($this->soNumero($prod->vProd), 16, '0', STR_PAD_LEFT); $registro61R .= str_pad($this->soNumero($vBCICMS), 16, '0', STR_PAD_LEFT); $registro61R .= str_pad($this->soNumero($pICMS), 4, '0', STR_PAD_LEFT); $registro61R .= str_pad(' ', 54, ' '); $registro61R .= "\r\n"; $contItem++; } if (!in_array(substr($prod->cProd, 0, 14), $produtos, true)){ $produtos[] = substr($prod->cProd, 0, 14); $totalregistro75 = $totalregistro75 + 1; $registro75 .= '75'; $registro75 .= $dInicio; $registro75 .= $dFinal; $registro75 .= str_pad(substr($prod->cProd, 0, 14), 14, ' '); $registro75 .= str_pad(substr($prod->NCM, 0, 8), 8, ' '); if ($prod->xProd == ''){ $registro75 .= str_pad(substr($this->removeAcentos(trim(BuscaDesc($prod->cProd))), 0, 53), 53, ' '); }else{ $registro75 .= str_pad(substr($this->removeAcentos(trim($prod->xProd)), 0, 53), 53, ' '); } $registro75 .= str_pad(substr($prod->uCom, 0, 6), 6, ' '); $registro75 .= str_pad($this->soNumero($pIPI), 5, '0', STR_PAD_LEFT); $registro75 .= str_pad($this->soNumero($pICMS), 4, '0', STR_PAD_LEFT); $registro75 .= str_pad($this->soNumero($pMVAST), 5, '0', STR_PAD_LEFT); $registro75 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro75 .= "\r\n"; } } if($vFreteTotal > 0){ $totalregistro54 = $totalregistro54 + 1; $registro54 .= '54'; $cfop = $itens->prod->CFOP; $registro54 .= str_pad($this->soNumero($docDestinatario), 14, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($ide->mod), 2, '0'); $registro54 .= str_pad($this->soNumero($ide->serie), 3, ' '); $registro54 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr($cfop, 0, 4), 4, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr('0', 0, 3), 3, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr('991', 0, 3), 3, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 14, ' '); $registro54 .= str_pad('', 11, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vFreteTotal), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vFreteTotal), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 4, '0', STR_PAD_LEFT); $registro54 .= "\r\n"; } if ($vOutroTotal > 0){ $totalregistro54 = $totalregistro54 + 1; $registro54 .= '54'; $cfop = $itens->prod->CFOP; // $registro54 .= str_pad($this->soNumero($docDestinatario), 14, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($ide->mod), 2, '0'); $registro54 .= str_pad($this->soNumero($ide->serie), 3, ' '); $registro54 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr($cfop, 0, 4), 4, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr('0', 0, 3), 3, '0', STR_PAD_LEFT); $registro54 .= str_pad(substr('999', 0, 3), 3, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 14, ' '); $registro54 .= str_pad('', 11, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad($this->soNumero($vOutroTotal), 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 12, '0', STR_PAD_LEFT); $registro54 .= str_pad('', 4, '0', STR_PAD_LEFT); $registro54 .= "\r\n"; } } $sintegra .= strtoupper($registro50); $sintegra .= strtoupper($registro54); // dd($registro54); foreach($dataXml as $l){ $ide = $this->util->getIde($l['xml']); $total = $this->util->getTotal($l['xml']); if ($ide->mod == '65'){ $totalregistro61 = $totalregistro61 + 1; $registro61 = '61'; $registro61 .= str_pad(' ', 14, ' '); $registro61 .= str_pad(' ', 14, ' '); $registro61 .= \Carbon\Carbon::parse($ide->dhEmi)->format('Ymd'); $registro61 .= str_pad($this->soNumero($ide->mod), 2, '0'); $registro61 .= str_pad($this->soNumero($ide->serie), 3, ' '); $registro61 .= str_pad('', 2, ' '); $registro61 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro61 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro61 .= str_pad($this->soNumero($total->vNF), 13, '0', STR_PAD_LEFT); $registro61 .= str_pad($this->soNumero($total->vBC), 13, '0', STR_PAD_LEFT); $registro61 .= str_pad($this->soNumero($total->vICMS), 12, '0', STR_PAD_LEFT); $registro61 .= str_pad('0', 13, '0', STR_PAD_LEFT); $registro61 .= str_pad($this->soNumero($total->vOutro), 13, '0', STR_PAD_LEFT); $registro61 .= str_pad('0', 4, '0', STR_PAD_LEFT); $registro61 .= ' '; $registro61 .= "\r\n"; $sintegra .= strtoupper($registro61); } } $sintegra .= strtoupper($registro61R); $totalregistro70 = 0; foreach($dataXml as $l){ $ide = $this->util->getIde($l['xml']); $total = $this->util->getTotal($l['xml']); if ($ide->mod == '57'){ $destinatario = $this->util->getDestinatario($l['xml']); $docDestinatario = isset($destinatario->CNPJ) ? $destinatario->CNPJ : $destinatario->CPF; $itens = $this->util->getItensNfe($l['xml']); $cfop = $itens[0]->prod->CFOP; $totalregistro70 = $totalregistro70 + 1; $registro70 = '70'; $registro70 .= str_pad($this->soNumero($docDestinatario), 14, '0', STR_PAD_LEFT); $registro70 .= str_pad($this->soNumero($destinatario->IE), 14, ' '); $registro70 .= \Carbon\Carbon::parse($ide->dhEmi)->format('Ymd'); $registro70 .= str_pad($docDestinatario->UF, 2, ' '); $registro70 .= str_pad($this->soNumero($ide->modelo), 2, '0'); $registro70 .= str_pad($this->soNumero($ide->serie), 1, ' '); $registro70 .= str_pad('', 2, ' '); $registro70 .= str_pad(substr($this->soNumero($ide->nNF), -6), 6, '0', STR_PAD_LEFT); $registro70 .= str_pad(substr($this->soNumero($cfop), 0, 4), 4, '0', STR_PAD_LEFT); $registro70 .= str_pad($this->soNumero($total->vNF), 13, '0', STR_PAD_LEFT); $registro70 .= str_pad($this->soNumero($total->vBC), 14, '0', STR_PAD_LEFT); $registro70 .= str_pad($this->soNumero($total->vICMS), 14, '0', STR_PAD_LEFT); $registro70 .= str_pad('0', 14, '0', STR_PAD_LEFT); $registro70 .= str_pad(($this->soNumero($total->vOutro)), 14, '0', STR_PAD_LEFT); $registro70 .= '1'; $arr = (array_values((array)$itens[0]->imposto->ICMS)); $cst_csosn = $arr[0]->CST ? $arr[0]->CST : $arr[0]->CSOSN; $cst_csosn = (string)$cst_csosn; if ($cst_csosn == '101'){ $registro70 .= 'S'; }else{ $registro70 .= 'N'; } $registro70 .= "\r\n"; $sintegra .= strtoupper($registro70); } } $totalregistro74 = 0; //inventario $totalgeral = $totalregistro50 + $totalregistro51 + $totalregistro54 + $totalregistro61 + $totalregistro70 + $totalregistro74 + $totalregistro75 + 3; $sintegra .= strtoupper($registro75); $registro90 = '90'; $registro90 .= str_pad($this->soNumero($cnpj), 14, '0', STR_PAD_LEFT); $registro90 .= str_pad($emitente->IE, 14, ' '); $registro90 .= '50'; $registro90 .= str_pad($totalregistro50, 8, '0', STR_PAD_LEFT); $registro90 .= '54'; $registro90 .= str_pad($totalregistro54, 8, '0', STR_PAD_LEFT); $registro90 .= '61'; $registro90 .= str_pad($totalregistro61, 8, '0', STR_PAD_LEFT); $registro90 .= '70'; $registro90 .= str_pad($totalregistro70, 8, '0', STR_PAD_LEFT); $registro90 .= '75'; $registro90 .= str_pad($totalregistro75, 8, '0', STR_PAD_LEFT); $registro90 .= '99'; $registro90 .= str_pad($totalgeral, 8, '0', STR_PAD_LEFT); $total90 = strlen($registro90); $total90 = 125 - $total90; $registro90 .= str_pad(' ', $total90, ' '); $registro90 .= '1'; $sintegra .= strtoupper($registro90); $mes = \Carbon\Carbon::parse($dataInicial)->format('m'); $nomearquivo = "sintegra-" . $cnpj . "-" . $this->getMes($mes-1) . ".txt"; // dd($sintegra); $arquivo = fopen(public_path("sintegra_files/").$nomearquivo, "w"); fwrite($arquivo, $sintegra); fclose($arquivo); return response()->download(public_path("sintegra_files/").$nomearquivo); // dd($dataXml); } private function getMes($indice){ $meses = [ 'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro', ]; return $meses[$indice]; } }