From 5f96015f613d0918e4cf2b9af72747a4aefd1570 Mon Sep 17 00:00:00 2001 From: TheSrSmith Date: Wed, 8 May 2024 13:39:00 -0500 Subject: [PATCH 1/2] Se ajusta elemento otros y se transforma la lectura de InfoReferencia2 --- api/contrib/genXML/genXML.php | 163 +++++++++++++++++++--------------- api/contrib/genXML/module.php | 6 +- 2 files changed, 93 insertions(+), 76 deletions(-) diff --git a/api/contrib/genXML/genXML.php b/api/contrib/genXML/genXML.php index a4e7188..9f6bbd6 100644 --- a/api/contrib/genXML/genXML.php +++ b/api/contrib/genXML/genXML.php @@ -325,7 +325,7 @@ function genXMLFe() $xmlString .= ' ' . $d->codigo . ''; - if (isset($d->codigoComercial) && $d->codigoComercial != "" && $d->codigoComercial != 0){ + if (isset($d->codigoComercial) && is_string($d->codigoComercial) && strlen($d->codigoComercial) != 0) { //Delimita el array a solo 5 elementos if (count($d->codigoComercial) > 5){ error_log("codigoComercial: ".count($d->codigoComercial)." is greater than 5"); @@ -371,7 +371,7 @@ function genXMLFe() ' . $d->precioUnitario . ' ' . $d->montoTotal . ''; - if (isset($d->descuento) && $d->descuento != "" && $d->descuento != 0){ + if (isset($d->descuento) && is_string($d->descuento) && strlen($d->descuento) != 0) { //Delimita el array a solo 5 elementos if (count($d->descuento) > 5){ error_log("descuento: ".count($d->descuento)." is greater than 5"); @@ -399,7 +399,7 @@ function genXMLFe() } } - $xmlString .= '' . $d->subtotal . ''; + $xmlString .= '' . $d->subTotal . ''; if (isset($d->baseImponible) && $d->baseImponible != "") { @@ -907,7 +907,7 @@ function genXMLNC() $xmlString .= ' ' . $d->codigo . ''; - if (isset($d->codigoComercial) && $d->codigoComercial != "" && $d->codigoComercial != 0){ + if (isset($d->codigoComercial) && is_string($d->codigoComercial) && strlen($d->codigoComercial) != 0) { //Delimita el array a solo 5 elementos if (count($d->codigoComercial) > 5){ error_log("codigoComercial: ".count($d->codigoComercial)." is greater than 5"); @@ -953,7 +953,7 @@ function genXMLNC() ' . $d->precioUnitario . ' ' . $d->montoTotal . ''; - if (isset($d->descuento) && $d->descuento != "" && $d->descuento != 0){ + if (isset($d->descuento) && is_string($d->descuento) && strlen($d->descuento) != 0) { //Delimita el array a solo 5 elementos if (count($d->descuento) > 5){ error_log("descuento: ".count($d->descuento)." is greater than 5"); @@ -981,7 +981,7 @@ function genXMLNC() } } - $xmlString .= '' . $d->subtotal . ''; + $xmlString .= '' . $d->subTotal . ''; if (isset($d->baseImponible) && $d->baseImponible != "") { $xmlString .= '' . $d->baseImponible . ''; @@ -1487,7 +1487,7 @@ function genXMLND() $xmlString .= ' ' . $d->codigo . ''; - if (isset($d->codigoComercial) && $d->codigoComercial != "" && $d->codigoComercial != 0){ + if (isset($d->codigoComercial) && is_string($d->codigoComercial) && strlen($d->codigoComercial) != 0) { //Delimita el array a solo 5 elementos if (count($d->codigoComercial) > 5){ error_log("codigoComercial: ".count($d->codigoComercial)." is greater than 5"); @@ -1533,7 +1533,7 @@ function genXMLND() ' . $d->precioUnitario . ' ' . $d->montoTotal . ''; - if (isset($d->descuento) && $d->descuento != "" && $d->descuento != 0){ + if (isset($d->descuento) && is_string($d->descuento) && strlen($d->descuento) != 0) { //Delimita el array a solo 5 elementos if (count($d->descuento) > 5){ error_log("descuento: ".count($d->descuento)." is greater than 5"); @@ -1561,7 +1561,7 @@ function genXMLND() } } - $xmlString .= '' . $d->subtotal . ''; + $xmlString .= '' . $d->subTotal . ''; if (isset($d->baseImponible) && $d->baseImponible != "") { $xmlString .= '' . $d->baseImponible . ''; @@ -2051,7 +2051,7 @@ function genXMLTE() $xmlString .= ' ' . $d->codigo . ''; - if (isset($d->codigoComercial) && $d->codigoComercial != "" && $d->codigoComercial != 0){ + if (isset($d->codigoComercial) && is_string($d->codigoComercial) && strlen($d->codigoComercial) != 0) { //Delimita el array a solo 5 elementos if (count($d->codigoComercial) > 5){ error_log("codigoComercial: ".count($d->codigoComercial)." is greater than 5"); @@ -2097,7 +2097,7 @@ function genXMLTE() ' . $d->precioUnitario . ' ' . $d->montoTotal . ''; - if (isset($d->descuento) && $d->descuento != "" && $d->descuento != 0){ + if (isset($d->descuento) && is_string($d->descuento) && strlen($d->descuento) != 0) { //Delimita el array a solo 5 elementos if (count($d->descuento) > 5){ error_log("descuento: ".count($d->descuento)." is greater than 5"); @@ -2125,7 +2125,7 @@ function genXMLTE() } } - $xmlString .= '' . $d->subtotal . ''; + $xmlString .= '' . $d->subTotal . ''; if (isset($d->baseImponible) && $d->baseImponible != "") { $xmlString .= '' . $d->baseImponible . ''; @@ -3018,11 +3018,7 @@ function genXMLFee() $totalImp = params_get("total_impuestos"); $totalOtrosCargos = params_get("totalOtrosCargos"); $totalComprobante = params_get("total_comprobante"); - $infoRefeTipoDoc = params_get("infoRefeTipoDoc"); - $infoRefeNumero = params_get("infoRefeNumero"); - $infoRefeFechaEmision = params_get("infoRefeFechaEmision"); - $infoRefeCodigo = params_get("infoRefeCodigo"); - $infoRefeRazon = params_get("infoRefeRazon"); + $informacionReferencia = json_decode(params_get("informacionReferencia")); $otros = json_decode(params_get("otros")); grace_debug(params_get("detalles")); @@ -3301,8 +3297,10 @@ function genXMLFee() foreach ($d->impuesto as $i) { $xmlString .= ' - - ' . $i->codigo . ''; + '; + if ( isset($i->codigo) && $i->codigo != "" ) + $xmlString .= '' . $i->codigo . ''; + if ( isset($i->codigoTarifa) && $i->codigoTarifa != "" ) $xmlString .= '' . $i->codigoTarifa . ''; @@ -3312,9 +3310,11 @@ function genXMLFee() if ( isset($i->factorIVA) && $i->factorIVA != "") $xmlString .= '' . $i->factorIVA . ''; - $xmlString .= '' . $i->monto . ''; + if ( isset($i->monto) && $i->monto != "" ) + $xmlString .= '' . $i->monto . ''; - $xmlString .= '' . $i->montoExportacion . ''; + if ( isset($i->montoExportacion) && $i->montoExportacion != "" ) + $xmlString .= '' . $i->montoExportacion . ''; $xmlString .= ''; } @@ -3425,54 +3425,75 @@ function genXMLFee() ' . $totalComprobante . ' '; - if ($infoRefeTipoDoc != '' && $infoRefeFechaEmision != ''){ - - $xmlString .= ' - '; + // JSON de ejemplo + // { + // "1": { + // "codigo": "01", + // "fechaEmision": "2024-04-02T12:00:00-06:00", + // "numero": "50620032400020536006000100001010000000017100000017", + // "razon": "Falta de informacion", + // "tipoDoc": "01" + // } + // } - if(in_array($infoRefeTipoDoc, TIPODOCREFVALUES, true)) - $xmlString .=' - ' . $infoRefeTipoDoc . ''; - else{ - grace_error("El parámetro infoRefeTipoDoc no cumple con la estructura establecida. infoRefeTipoDoc = ". $infoRefeTipoDoc); - return "El parámetro infoRefeTipoDoc no cumple con la estructura establecida."; + if (isset($informacionReferencia) && $informacionReferencia != "") { + if(count((array) $informacionReferencia) > 10) { + error_log("informacionReferencia: ".count((array) $informacionReferencia)." is greater than 10"); } + else + { + foreach ($informacionReferencia as $i) + { + $xmlString .= ' + '; - if ( isset($infoRefeNumero) && $infoRefeNumero != "") - $xmlString .= ' - ' . $infoRefeNumero . ''; - - $xmlString .= ' - ' . $infoRefeFechaEmision . ''; + if (isset($i->tipoDoc) && $i->tipoDoc != "") + $xmlString .= ' + ' . $i->tipoDoc . ''; - if ( isset($infoRefeCodigo) && $infoRefeCodigo != ""){ - if(in_array($infoRefeCodigo, CODIDOREFVALUES, true)){ - $xmlString .= ' - ' . $infoRefeCodigo . ''; - }else{ - grace_error("El parámetro infoRefeCodigo no cumple con la estructura establecida. infoRefeCodigo = ". $infoRefeCodigo); - return "El parámetro infoRefeCodigo no cumple con la estructura establecida."; - } - } + if (isset($i->numero) && $i->numero != "") + $xmlString .= ' + ' . $i->numero . ''; + if (isset($i->fechaEmision) && $i->fechaEmision != "") + $xmlString .= ' + ' . $i->fechaEmision . ''; - if (isset($infoRefeRazon) && $infoRefeRazon != "") - $xmlString .= ' - ' . $infoRefeRazon . ''; + if (isset($i->codigo) && $i->codigo != "") + $xmlString .= ' + ' . $i->codigo . ''; - $xmlString .= ' - '; + if (isset($i->razon) && $i->razon != "") + $xmlString .= ' + ' . $i->razon . ''; + $xmlString .= ''; + } + } } - // // JSON de ejemplo + // XML Resultante + // + // 01 + // 50620032400020536006000100001010000000017100000017 + // 2024-04-02T12:00:00-06:00 + // 01 + // Falta de informacion + // + + // ----------------------------------------------------------------------------------------------------- + + // JSON de ejemplo // { // "otroContenido": [ // { // "codigo": "CONT1", // "contenidoEstructurado": { - // "Elemento1": "Contenido 1", - // "Elemento2": "Contenido 2" + // "ContactoDesarrollador": { + // "Correo": "operacionesfacturaelectronica@ice.go.cr", + // "Nombre": "Equipo Operaciones Factura Electronica", + // "Telefono": "+506 800-400-0000" + // } // } // } // ], @@ -3484,36 +3505,36 @@ function genXMLFee() if (isset($otros) && !empty($otros)) { $xmlString .= ''; - - // Comprobamos si existe la propiedad "otroTexto" if (isset($otros->otroTexto)) { $xmlString .= '' . $otros->otroTexto->texto . ''; } - - // Comprobamos si existe la propiedad "otroContenido" if (isset($otros->otroContenido)) { - // Iteramos sobre los elementos de otroContenido foreach ($otros->otroContenido as $item) { - $xmlString .= ''; - // Iteramos sobre el contenido estructurado de cada elemento - foreach ($item->contenidoEstructurado as $element => $content) { - $xmlString .= '<' . $element . '>' . $content . ''; + $xmlString .= ''; + if (isset($item->contenidoEstructurado)) { + foreach ($item->contenidoEstructurado as $element => $content) { + // Construimos el XML para objetos anidados + $xmlString .= '<' . $element . ' xmlns="https://www.grupoice.com">'; + foreach ($content as $nestedElement => $nestedContent) { + $xmlString .= '<' . $nestedElement . '>' . htmlspecialchars($nestedContent) . ''; + } + $xmlString .= ''; + } } $xmlString .= ''; } } - $xmlString .= ''; } // XML Resultante - // - // Texto opcional 1 - // - // Contenido 1 - // Contenido 2 - // - // + // + // + // Equipo Operaciones Factura Electronica + // operacionesfacturaelectronica@ice.go.cr + // +506 800-400-0000 + // + // $xmlString .= ' '; diff --git a/api/contrib/genXML/module.php b/api/contrib/genXML/module.php index 4df34fc..cf8b74e 100644 --- a/api/contrib/genXML/module.php +++ b/api/contrib/genXML/module.php @@ -475,11 +475,7 @@ function genXML_init() array("key" => "total_impuestos", "def" => "", "req" => false), array("key" => "totalOtrosCargos", "def" => "", "req" => false), array("key" => "total_comprobante", "def" => "", "req" => true), - array("key" => "infoRefeTipoDoc", "def" => "", "req" => false), - array("key" => "infoRefeNumero", "def" => "", "req" => false), - array("key" => "infoRefeFechaEmision", "def" => "", "req" => false), - array("key" => "infoRefeCodigo", "def" => "", "req" => false), - array("key" => "infoRefeRazon", "def" => "", "req" => false), + array("key" => "informacionReferencia", "def" => "", "req" => false), array("key" => "otros", "def" => "", "req" => false) ), 'file' => 'genXML.php' From d5404e8314198694d66481f05b9506b3fe6c5073 Mon Sep 17 00:00:00 2001 From: TheSrSmith Date: Wed, 8 May 2024 14:54:47 -0500 Subject: [PATCH 2/2] Se ajustan formatos de FEC correciones --- api/contrib/genXML/genXML.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/contrib/genXML/genXML.php b/api/contrib/genXML/genXML.php index 9f6bbd6..b77d773 100644 --- a/api/contrib/genXML/genXML.php +++ b/api/contrib/genXML/genXML.php @@ -2688,7 +2688,7 @@ function genXMLFec() $xmlString .= ' ' . $d->codigo . ''; - if (isset($d->codigoComercial) && $d->codigoComercial != "" && $d->codigoComercial != 0){ + if (isset($d->codigoComercial) && is_string($d->codigoComercial) && strlen($d->codigoComercial) != 0) { //Delimita el array a solo 5 elementos if (count($d->codigoComercial) > 5){ error_log("codigoComercial: ".count($d->codigoComercial)." is greater than 5"); @@ -2734,7 +2734,7 @@ function genXMLFec() ' . $d->precioUnitario . ' ' . $d->montoTotal . ''; - if (isset($d->descuento) && $d->descuento != "" && $d->descuento != 0){ + if (isset($d->descuento) && is_string($d->descuento) && strlen($d->descuento) != 0) { //Delimita el array a solo 5 elementos if (count($d->descuento) > 5){ error_log("descuento: ".count($d->descuento)." is greater than 5"); @@ -2762,7 +2762,7 @@ function genXMLFec() } } - $xmlString .= '' . $d->subtotal . ''; + $xmlString .= '' . $d->subTotal . ''; if (isset($d->baseImponible) && $d->baseImponible != "") {