diff --git a/api/contrib/genXML/genXML.php b/api/contrib/genXML/genXML.php
index a4e7188..b77d773 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 . '';
@@ -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 != "")
{
@@ -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 . '' . $element . '>';
+ $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) . '' . $nestedElement . '>';
+ }
+ $xmlString .= '' . $element . '>';
+ }
}
$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'