188 lines
6.7 KiB
PHP
188 lines
6.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\CteOs;
|
|
use App\Models\Empresa;
|
|
use App\Services\CTeOsService;
|
|
use Illuminate\Http\Request;
|
|
use NFePHP\DA\CTe\Dacte;
|
|
use NFePHP\DA\CTe\Daevento;
|
|
|
|
class CTeOsPainelController extends Controller
|
|
{
|
|
public function emitir(Request $request)
|
|
{
|
|
|
|
$item = CteOs::findOrFail($request->id);
|
|
|
|
$empresa = Empresa::findOrFail($item->empresa_id);
|
|
$empresa = __objetoParaEmissao($empresa, $item->local_id);
|
|
|
|
$cte_service = new CTeOsService([
|
|
"atualizacao" => date('Y-m-d h:i:s'),
|
|
"tpAmb" => (int)$empresa->ambiente,
|
|
"razaosocial" => $empresa->nome,
|
|
"siglaUF" => $empresa->cidade->uf,
|
|
"cnpj" => $empresa->cpf_cnpj,
|
|
"schemes" => "PL_009_V4",
|
|
"versao" => "4.00",
|
|
], $empresa);
|
|
|
|
$doc = $cte_service->gerarCTe($item);
|
|
|
|
if (!isset($doc['erros_xml'])) {
|
|
$xml = $doc['xml'];
|
|
$chave = $doc['chave'];
|
|
|
|
$signed = $cte_service->sign($xml);
|
|
$resultado = $cte_service->transmitir($signed, $chave);
|
|
// return response()->json($resultado, 403);
|
|
|
|
if ($resultado['erro'] == 0) {
|
|
$item->chave = $doc['chave'];
|
|
$item->estado_emissao = 'aprovado';
|
|
|
|
if ($empresa->ambiente == 2) {
|
|
$empresa->numero_ultima_cte_homologacao = $doc['nCte'];
|
|
} else {
|
|
$empresa->numero_ultima_cte_producao = $doc['nCte'];
|
|
}
|
|
$empresa->save();
|
|
|
|
$item->numero_emissao = $doc['nCte'];
|
|
$item->recibo = $resultado['success'];
|
|
$item->save();
|
|
$data = [
|
|
'recibo' => $resultado['success'],
|
|
'chave' => $item->chave
|
|
];
|
|
return response()->json($data, 200);
|
|
} else {
|
|
$error = $resultado['error'];
|
|
|
|
if (isset($error['protCTe'])) {
|
|
$motivo = $error['protCTe']['infProt']['xMotivo'];
|
|
$cStat = $error['protCTe']['infProt']['cStat'];
|
|
$item->motivo_rejeicao = substr("[$cStat] $motivo", 0, 200);
|
|
}
|
|
$item->chave = $doc['chave'];
|
|
$item->estado_emissao = 'rejeitado';
|
|
$item->save();
|
|
|
|
if (isset($error['protCTe'])) {
|
|
return response()->json("[$cStat] $motivo", 403);
|
|
} else {
|
|
return response()->json($error, 403);
|
|
}
|
|
}
|
|
} else {
|
|
return response()->json($doc['erros_xml'], 401);
|
|
}
|
|
}
|
|
|
|
public function consultar(Request $request)
|
|
{
|
|
$item = CteOs::findOrFail($request->id);
|
|
$empresa = Empresa::findOrFail($item->empresa_id);
|
|
if ($item != null) {
|
|
$empresa = __objetoParaEmissao($empresa, $item->local_id);
|
|
|
|
$cnpj = preg_replace('/[^0-9]/', '', $empresa->cpf_cnpj);
|
|
$cte_service = new CTeOsService([
|
|
"atualizacao" => date('Y-m-d h:i:s'),
|
|
"tpAmb" => (int)$empresa->ambiente,
|
|
"razaosocial" => $empresa->nome,
|
|
"siglaUF" => $empresa->cidade->uf,
|
|
"cnpj" => $empresa->cpf_cnpj,
|
|
"schemes" => "PL_009_V4",
|
|
"versao" => "4.00",
|
|
], $empresa);
|
|
$consulta = $cte_service->consultar($item);
|
|
if (!isset($consulta['erro'])) {
|
|
$motivo = $consulta['protCTe']['infProt']['xMotivo'];
|
|
$cStat = $consulta['protCTe']['infProt']['cStat'];
|
|
if ($cStat == 100) {
|
|
return response()->json("[$cStat] $motivo", 200);
|
|
} else {
|
|
return response()->json("[$cStat] $motivo", 401);
|
|
}
|
|
} else {
|
|
return response()->json($consulta['data'], $consulta['status']);
|
|
}
|
|
} else {
|
|
return response()->json('Consulta não encontrada', 404);
|
|
}
|
|
}
|
|
|
|
public function cancelar(Request $request)
|
|
{
|
|
$item = CteOs::findOrFail($request->id);
|
|
$empresa = Empresa::findOrFail($item->empresa_id);
|
|
$empresa = __objetoParaEmissao($empresa, $item->local_id);
|
|
|
|
if ($item != null) {
|
|
$cnpj = preg_replace('/[^0-9]/', '', $empresa->cpf_cnpj);
|
|
$cte_service = new CTeOsService([
|
|
"atualizacao" => date('Y-m-d h:i:s'),
|
|
"tpAmb" => (int)$empresa->ambiente,
|
|
"razaosocial" => $empresa->nome,
|
|
"siglaUF" => $empresa->cidade->uf,
|
|
"cnpj" => $empresa->cpf_cnpj,
|
|
"schemes" => "PL_009_V4",
|
|
"versao" => "4.00",
|
|
], $empresa);
|
|
$doc = $cte_service->cancelar($item, $request->motivo);
|
|
|
|
if (!isset($doc['erro'])) {
|
|
$item->estado_emissao = 'cancelado';
|
|
$item->save();
|
|
|
|
$motivo = $doc['infEvento']['xMotivo'];
|
|
$cStat = $doc['infEvento']['cStat'];
|
|
if ($cStat == 135) {
|
|
return response()->json("[$cStat] $motivo", 200);
|
|
} else {
|
|
return response()->json("[$cStat] $motivo", 401);
|
|
}
|
|
} else {
|
|
$arr = $doc['data'];
|
|
$cStat = $arr['infEvento']['cStat'];
|
|
$motivo = $arr['infEvento']['xMotivo'];
|
|
|
|
return response()->json("[$cStat] $motivo", $doc['status']);
|
|
}
|
|
} else {
|
|
return response()->json('Consulta não encontrada', 404);
|
|
}
|
|
}
|
|
|
|
public function corrigir(Request $request)
|
|
{
|
|
$item = CteOs::findOrFail($request->id);
|
|
|
|
$empresa = Empresa::findOrFail($item->empresa_id);
|
|
$empresa = __objetoParaEmissao($empresa, $item->local_id);
|
|
|
|
$cnpj = preg_replace('/[^0-9]/', '', $empresa->cpf_cnpj);
|
|
$cte_service = new CTeOsService([
|
|
"atualizacao" => date('Y-m-d h:i:s'),
|
|
"tpAmb" => (int)$empresa->ambiente,
|
|
"razaosocial" => $empresa->nome,
|
|
"siglaUF" => $empresa->cidade->uf,
|
|
"cnpj" => $empresa->cpf_cnpj,
|
|
"schemes" => "PL_009_V4",
|
|
"versao" => "4.00",
|
|
], $empresa);
|
|
$cte = $cte_service->cartaCorrecao($item, $request->grupo, $request->campo, $request->motivo);
|
|
|
|
if (!isset($cte['erro'])) {
|
|
|
|
return response()->json($cte['infEvento']['cStat'] . " - " . $cte['infEvento']['xMotivo'], 200);
|
|
} else {
|
|
return response()->json($cte['data'], $cte['status']);
|
|
}
|
|
}
|
|
}
|