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