From 209298ecde2e76a5ce9425ba3c01f56d199125a6 Mon Sep 17 00:00:00 2001
From: Fernando Alvez <fernando.alvez@unam.edu.ar>
Date: Fri, 6 Dec 2024 10:56:14 -0300
Subject: [PATCH] related #174 Comando rencolar ventas SQ

---
 php/extension_toba/pirapire_comando.php | 24 ++++++++++++
 php/extension_toba/pirapire_modelo.php  | 52 +++++++++++++++++++++++++
 2 files changed, 76 insertions(+)

diff --git a/php/extension_toba/pirapire_comando.php b/php/extension_toba/pirapire_comando.php
index c6a342c7..23782d38 100644
--- a/php/extension_toba/pirapire_comando.php
+++ b/php/extension_toba/pirapire_comando.php
@@ -173,4 +173,28 @@ class pirapire_comando extends toba_aplicacion_comando_base
 
         $queueConsumer->consume();
     }
+
+    /**
+     * Comando de contingencia en el caso de que ventas en Pirapire quedan en estado pendiente sin haberse 
+     * encolado en la redis para el envio a SQ Nucleo
+     *
+     * @consola_parametros Opcional: [--venta-id] Id de la venta en Pirapire 
+     * Opcional: [--fecha-hasta] Fecha de creación maxima que se busca para reencolar ventas pendientes
+     * 
+     * @param [type] $parametros
+     * @return void
+     */
+    public function opcion__reencolar_ventas_sq($parametros)
+    {
+        if (toba::instalacion()->es_produccion()) {
+            toba_nucleo::instancia()->iniciar_contexto_desde_consola('produccion', 'pirapire');
+        } else {
+            toba_nucleo::instancia()->iniciar_contexto_desde_consola('desarrollo', 'pirapire');
+        }
+
+        $id = (array_key_exists('--venta-id', $parametros)) ? $parametros['--venta-id'] : null;
+        $fecha_hasta = (array_key_exists('--fecha-hasta', $parametros)) ? $parametros['--fecha-hasta'] : null;
+
+        $this->modelo->reenviar_ventas_pendientes_sq($id, $fecha_hasta);
+    }
 }
diff --git a/php/extension_toba/pirapire_modelo.php b/php/extension_toba/pirapire_modelo.php
index dab945f0..c964171e 100644
--- a/php/extension_toba/pirapire_modelo.php
+++ b/php/extension_toba/pirapire_modelo.php
@@ -1,4 +1,6 @@
 <?php
+
+use UNAM\Pirapire\Constantes;
 /**
  * (c) 2019, Departamento de Sistemas de Información de la UNaM
  * <sistemas@campus.unam.edu.ar>
@@ -89,4 +91,54 @@ class pirapire_modelo extends toba_aplicacion_modelo_base
 
         $dao_sq_nucleo->sincronizar_comprobantes_huerfanos($id_punto_cobranza);
     }
+
+    public function reenviar_ventas_pendientes_sq($id = null, $fecha_hasta = null)
+    {
+        $where = null;
+        if (!is_null($id)) {
+            $where = " AND v.id = " . quote($id);
+        }
+
+        if (!is_null($fecha_hasta)) {
+            $where = " AND v.creado < " . quote($fecha_hasta);
+        }
+
+        $sql = "SELECT v.id, 
+                    v.usuario, 
+                    uv.token AS unidad_venta_token, 
+                    ug.id as unidad_gestion_id,
+                    uv.genera_comprobante_afip 
+                FROM venta v
+                JOIN unidad_gestion ug ON ug.id = v.id_unidad_gestion 
+                JOIN unidad_gestion_unidad_venta uguv ON uguv.id_unidad_gestion = ug.id
+                JOIN unidad_venta uv ON uv.id = uguv.id_unidad_venta 
+                WHERE v.estado = 'PE'
+                $where
+                ORDER BY v.id;";
+
+        $ventas_pendientes = toba::db()->consultar($sql);
+
+        foreach ($ventas_pendientes as $datos_venta) {
+            $venta_sq = toba::consulta_php('dao_sq_nucleo')->get_ventas_sq(['id_venta_origen' => $datos_venta['id']]);
+
+            if (empty($venta_sq)) {
+                $queue = new \UNAM\Pirapire\Queue\QueueFactory();
+                $body = [
+                    'id_venta' => $datos_venta['id'],
+                    'usuario' => $datos_venta['usuario'],
+                    'unidad_venta_token' => $datos_venta['unidad_venta_token'],
+                    'unidad_gestion' => toba::consulta_php('dao_admin')->get_unidad_gestion($datos_venta['unidad_gestion_id']),
+                    'genera_comprobante_afip' => $datos_venta['genera_comprobante_afip']
+                ];
+                $options = [
+                    'delay' => Constantes::WORKER['retraso']
+                ];
+
+                toba::logger()->debug(__METHOD__ . " Body a encolar en la cola (" . Constantes::QUEUE_VENTA_SQ . ") : " . json_encode(array_a_utf8($body), JSON_UNESCAPED_UNICODE));
+
+                $queue->getTransport()->sendMessageToQueue(Constantes::QUEUE_VENTA_SQ, json_encode(array_a_utf8($body), JSON_UNESCAPED_UNICODE), $options);
+            }
+        }
+    }
+
 }
-- 
GitLab