(410,'core_formulario[8].javascript','2024-10-21 10:48:00','rafael',217,7898,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta\n} = document.datos;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if($(\'#id_cliente\').val() == 1 && !$(\'#placa\').val()) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if($(\'#tipo_venta\').val() == 3)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = $(\'#tipo_venta\').val() == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(411,'core_formulario[8].javascript','2024-10-21 10:49:00','rafael',220,7964,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta\n} = document.datos;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if($(\'#id_cliente\').val() == 1 && !$(\'#placa\').val()) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nconst producto = 2;\nconst servicio = 3;\nfunction onChangeTipoProducto() {\n    const tipoProducto = $(\'#tipo_venta\').val();\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipoProducto == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoProducto == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoProducto+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(412,'core_formulario[8].javascript','2024-10-21 10:49:00','rafael',221,7982,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta\n} = document.datos;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if($(\'#id_cliente\').val() == 1 && !$(\'#placa\').val()) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\nfunction onChangeTipoProducto() {\n    const tipoProducto = $(\'#tipo_venta\').val();\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipoProducto == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoProducto == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoProducto+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(413,'core_formulario[8].javascript','2024-10-21 10:53:00','rafael',224,8146,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipoProducto, id_mecanico\n} = document.datos;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if($(\'#id_cliente\').val() == 1 && !$(\'#placa\').val()) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == 3 && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\nfunction onChangeTipoProducto() {\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipoProducto.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoProducto.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoProducto.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(414,'core_formulario[8].javascript','2024-10-21 10:54:00','rafael',225,8174,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipoProducto, id_mecanico, placa\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipoProducto.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoProducto.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoProducto.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(415,'core_evento_objeto[193].javascript','2024-10-21 11:06:00','rafael',1,19,'onchangeTipoPago();','B'),(416,'core_formulario[8].javascript','2024-10-21 11:07:00','rafael',232,8345,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipoProducto, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipoProducto.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoProducto.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoProducto.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(417,'core_formulario[8].javascript','2024-10-21 11:07:00','rafael',232,8345,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipoProducto, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipoProducto.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoProducto.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoProducto.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(418,'core_formulario[8].javascript','2024-10-21 11:12:00','rafael',235,8412,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipoProducto, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    console.log(tipoVenta);\n    if(tipoVenta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoVenta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoVenta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(419,'core_formulario[8].javascript','2024-10-21 11:13:00','rafael',235,8405,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipoVenta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    console.log(tipoVenta);\n    if(tipoVenta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipoVenta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipoVenta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(420,'core_formulario[8].javascript','2024-10-21 11:13:00','rafael',234,8385,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipoProducto.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(421,'core_formulario[8].javascript','2024-10-21 11:13:00','rafael',234,8383,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(422,'core_formulario[8].javascript','2024-10-21 11:14:00','rafael',234,8383,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(423,'core_formulario[8].javascript','2024-10-21 11:19:00','rafael',236,8463,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(424,'core_formulario[8].javascript','2024-10-21 11:19:00','rafael',237,8505,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(425,'core_formulario[8].javascript','2024-10-21 11:29:00','rafael',242,8569,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(426,'core_formulario[8].javascript','2024-10-21 12:10:00','rafael',242,8572,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(427,'core_formulario[8].javascript','2024-10-21 12:11:00','rafael',242,8554,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 2,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(428,'core/ajax.php','2024-10-22 12:47:00','rafael',764,44205,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n/*\n	Title: Modulo ajax\n	Ubicacion *[/core/ajax.php]*.  Archivo de funciones utilizadas para el retorno de informacion mediante peticiones asincronas\n\n	Section: Controles de datos\n	Funciones asociadas a generacion de controles de datos basados en los parametros recibidos\n*/\n \n//Recupera al menos la accion cuando se trata de llamados sin contexto del index del framework\nif (!isset($PCO_Accion)) $PCO_Accion=$_REQUEST[\"PCO_Accion\"];\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_ExportacionQueryCacheCSV\n	Este archivo exporta cualquier QueryRecibido a formato CSV en la salida estandar del navegador para ser descargado\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        NombreArchivo - Opcional para generar un nombre de archivo personalizado para el informe\n\n	Salida:\n		* Datos a traves del navegador\n*/\nif ($PCO_Accion==\"PCO_ExportacionQueryCacheCSV\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n\n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        \n        $NombreArchivo=$_REQUEST[\'NombreArchivo\'];\n        if ($NombreArchivo==\"\") $NombreArchivo=\"DatosExportadosCSV_Inf{$IdRegistro_CacheSQL}.csv\";\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n\n        //Continua adelante solo si realmente encontro el informe cacheado y coincidente entre id y usuario\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Construye las columnas\n                $PCO_ColumnasVisibles=explode(\",\",$ListaColumnasCache);\n        \n                //Inicia la entrega de contenidos\n                ob_clean();\n                $ArchivoDestino = fopen(\"php://output\", \'w\');\n\n 		        header(\"Content-Encoding: utf-8\"); \n                header(\"Content-disposition: attachment; filename=\".$NombreArchivo);\n                header(\"Content-Type: text/csv; charset=UTF-8;\");\n                echo \"\\xEF\\xBB\\xBF\"; // UTF-8 BOM	\n		\n                //Agrega las columnas como encabezados\n                fputcsv($ArchivoDestino, $PCO_ColumnasVisibles);\n                //Agrega los datos de cada registro\n                $ResultadoConsulta=PCO_EjecutarSQL($ConsultaCacheada);\n                \n                while ($Registro = $ResultadoConsulta->fetch(PDO::FETCH_ASSOC))\n                    fputcsv($ArchivoDestino, $Registro);\n                //Cierra la salida\n                fclose($ArchivoDestino);\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_RecuperarRecordsetJSON_DataTablePANES\n	Hace una consulta a la base de datos determinada por un identificador de informe y retorna los registros formateados en JSON.  Util en DataTables con AJAX\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        \n        start - Enviado automaticamente por DataTables \n        length - Enviado automaticamente por DataTables \n        search[value] - Enviado automaticamente por DataTables \n\n    Ver tambien:\n        Para efectos de depuracion F12 pestana Network presentara en Headers todo lo enviado por datatables en la solicitud Ajax\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n*/\nif ($PCO_Accion==\"PCO_RecuperarRecordsetJSON_DataTablePANES\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n        \n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        if (!isset($NroFilasBase)) $NroFilasBase=$_REQUEST[\"NroFilasBase\"];\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        //Busca la consulta asociada al datatable desde la cache de SQL en la primera generacion del reporte.\n        //Verifica no solo por ID de cache sino tambien que perteneca al usuario logueado para evitar robo de datos o informes entre usuarios\n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n        $ListaCamposDT=explode(\",\",$ListaColumnasCache);\n\n        //BLOQUE1: Ajusta consultas y variables necesarias.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                ##Obtiene algunos de los valores recibidos en la solicitud desde el DataTable\n                @$PCO_IteracionLlamadosDataTable = $_POST[\'draw\'];                                       //Uso interno de DT\n                @$PCO_FilaInicial = $_POST[\'start\'];                                                     //Registro inicial \n                @$PCO_CantidadFilas = $_POST[\'length\'];                                                  //Cantidad deseada de registros usado en LIMIT\n                @$ColumnaOrdenamientoRecibidaDT = $_POST[\'order\'][0][\'column\'];                          //Obtiene la columna de indexado / ordenamiento\n                @$PCO_ColumnaOrdenamiento = $_POST[\'columns\'][$ColumnaOrdenamientoRecibidaDT][\'data\'];   //Columna usada en el ORDER BY\n                @$PCO_DireccionOrdenamiento = $_POST[\'order\'][0][\'dir\'];                                 //Direccion usada en el ordenamiento: asc or desc\n                @$PCO_ValorFiltro = $_POST[\'search\'][\'value\'];                                           //Valor ingresado en la caja de filtro por el usuario\n\n                //Corrige valores para un limit basico cuando no se reciben de entrada\n                if ($PCO_CantidadFilas==\"\")\n                    {\n                        $PCO_FilaInicial=0;\n                        $PCO_CantidadFilas=$NroFilasBase;\n                    }\n\n                //Busca y/o establece posibles condiciones de filtro adicional recibidas desde el DT en su campo de busqueda\n                $PCO_CondicionesFiltrado=\" \";\n                if(trim($PCO_ValorFiltro) != \'\')\n                    {\n                        //Agrega los likes para todos los campos en el complemento de condicion cuando el usuario digita algo en el cuadro de filtro\n                        $PCO_CondicionesFiltrado=\" AND ( \";\n\n                        //Verifica si los campos tienen aliases o no\n                        $ExistenAliasEnCampos=0;\n                        $ConsultaBusquedaAlias=strstr($ConsultaCacheada, \"FROM\", TRUE); //Con retorno de cadena previa al needle\n                        $ConsultaBusquedaAlias=str_replace(\"SELECT\", \"\", $ConsultaBusquedaAlias);\n                        //Cambia cualquier combinacion de la sentencia para alias para uniformarla a mausculas \n                        $ConsultaBusquedaAlias=str_replace ( \" as \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" As \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" aS \", \" AS \" , $ConsultaBusquedaAlias);\n                        \n                        //CASO 1: La lista de campos contiene la sentenia de Alias.  Busca la palabra As\n                            if ( strpos($ConsultaBusquedaAlias,\" AS \")>0 )\n                                {\n                                    $ExistenAliasEnCampos=1;\n                                    $TrozosCamposAlias=explode(\" AS \",$ConsultaBusquedaAlias);\n                                    $ListaCamposDTAlias=array();\n                                    $TotalTrozos=count($TrozosCamposAlias);\n                                    $TrozoAnalizado=1;\n                                    //Recorre todos los trozos, normalmente de la forma:   Campo1    Alias1,Campo2    Alias2,Campo3    Alias3...\n                                    foreach ($TrozosCamposAlias as $TrozoCampo)\n                                        {\n                                            $CampoDTAlias=\"\";\n                                            //El primer trozo ya llega listo entonces lo agrega directamente, sino lo procesa\n                                            if ($TrozoAnalizado==1)\n                                                $CampoDTAlias=$TrozoCampo;\n                                            else\n                                                {\n                                                    //Verifica que no sea el ultimo trozo (el cual se descarta)\n                                                    if ($TrozoAnalizado!=$TotalTrozos)\n                                                        {\n                                                            $CampoDTAlias=strstr($TrozoCampo, \",\", FALSE); //Con retorno de cadena posterior al needle\n                                                            $CampoDTAlias=substr($CampoDTAlias, 1); //Elimina coma inicial sobrante \n                                                        }\n                                                }\n                                            if ($CampoDTAlias!=\"\")\n                                                $PCO_CondicionesFiltrado.=\" {$CampoDTAlias} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                            $TrozoAnalizado++;\n                                        }\n                                }\n\n                        //CASO 2: El mas simple, Cuando no se tienen Aliases en los campos (AS)\n                            if ($ExistenAliasEnCampos==0)\n                                {\n                                    foreach ($ListaCamposDT as $CampoDT)\n                                        $PCO_CondicionesFiltrado.=\" {$CampoDT} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                }\n\n                        $PCO_CondicionesFiltrado.=\" 1=2 ) \"; //Agrega una condicion que nunca se cumple para los OR y Cierra el AND del SQL\n                    }\n\n                //PROCESA LA CONSULTA DE BASE separando en partes y generando las subconsultas para conteo de registros y agregando ademas las condiciones\n                //1. Construye consulta para gran TOTAL de registros en la consulta\n                $SubCadena=strstr($ConsultaCacheada, \"FROM\", FALSE); //SIN retorno de cadena previa al needle\n                $ConsultaTotalRegistros = \"SELECT COUNT(*) AS allcount  {$SubCadena}\";\n\n                //2. Construye consulta para TOTAL de registros en la consulta al aplicar filtros\n                $ConsultaTotalRegistrosFiltrados = \"{$ConsultaTotalRegistros} {$PCO_CondicionesFiltrado}\";\n\n                //3. Construye consulta para obtener los registros\n                    $CadenaOrderBy=\" \";\n                    if ($PCO_ColumnaOrdenamiento!=\"\")\n                        $CadenaOrderBy=\" ORDER BY $PCO_ColumnaOrdenamiento $PCO_DireccionOrdenamiento \";\n                    $ConsultaCacheadaRegistros=\"{$ConsultaCacheada} {$PCO_CondicionesFiltrado} {$CadenaOrderBy} LIMIT {$PCO_FilaInicial},{$PCO_CantidadFilas} \";\n\n                if(1==2) //Solo para efectos de depuracion mediante F12 - Network, cambiar a condicion invalida en produccion\n                    {\n                        echo \"\n                            <br>ConsultaOriginal=$ConsultaCacheada\n                            <br>ConsultaTotalRegistros=$ConsultaTotalRegistros\n                            <br>ConsultaTotalRegistrosFiltrados=$ConsultaTotalRegistrosFiltrados\n                            <br>ConsultaRegistros=$ConsultaCacheadaRegistros\n                            <br>PCO_ValorFiltro=$PCO_ValorFiltro\n                        \";\n                        die();\n                    }\n            }\n\n        //BLOQUE2: Genera conteos y datos requeridos.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Obitene el Total de registros en la consulta de base SIN filtros\n                $PCO_TotalRegistrosConsulta = PCO_EjecutarSQL($ConsultaTotalRegistros)->fetchColumn();\n        \n                //Obtiene el total de registros en la consulta CON filtros aplicados\n                $PCO_TotalRegistrosConsultaCONFiltro = PCO_EjecutarSQL($ConsultaTotalRegistrosFiltrados)->fetchColumn();\n        \n                //Hace la consulta desde la cache de SQL\n                $RegistrosRecuperados = PCO_EjecutarSQL($ConsultaCacheadaRegistros)->fetchAll();\n        \n                //Define el arreglo con los datos y lo llena desde cada fila del registro\n                $PCO_ArregloDatosRegistros = array();\n                    foreach($RegistrosRecuperados as $row)\n                        {\n                            $ArregloAsociativoCampos=array();\n                            //Recorre todos los campos definidos para agregarlos como llaves al arreglo de registro\n                            foreach ($ListaCamposDT as $CampoDT)\n                                {\n                                    //Agrega el par Key-Value con el campo correspondiente al arreglo de registro\n                                    $ArregloAsociativoCampos += array( $CampoDT => $row[$CampoDT] ); \n                                }\n                            $PCO_ArregloDatosRegistros[]=$ArregloAsociativoCampos;          //Agrega el arreglo de registro al arreglo de resultado general\n                        }\n        \n                //Define la respuesta con los datos obtenidos\n                //Antes el elemento data era aaData\n\n$PCO_ArregloPanes=\'\n\n\n\"SearchPanes\": {\n  \"options\": { \n    \"Identificador\": [ \n      { \"label\": \"6\", \"total\": \"100\", \"value\": \"6\", \"count\": \"100\" } \n      ]\n       } }\n\n\';\n\n//$PCO_ArregloPanes=json_encode($PCO_ArregloPanes);\n\n                $RespuestaFormatoJSON = array(\n                   \"draw\" => intval($PCO_IteracionLlamadosDataTable),\n                   \"iTotalRecords\" => $PCO_TotalRegistrosConsulta,\n                   \"iTotalDisplayRecords\" => $PCO_TotalRegistrosConsultaCONFiltro,\n                   \"data\" => $PCO_ArregloDatosRegistros,\n                   $PCO_ArregloPanes\n                );\n\n\n\n$RespuestaFormatoJSON=\'{\"draw\":0,\"iTotalRecords\":\"4329\",\"iTotalDisplayRecords\":\"4329\",\"data\":[{\"Identificador\":\"1\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -29\"},{\"Identificador\":\"2\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -6\"},{\"Identificador\":\"3\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -21\"},{\"Identificador\":\"4\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -28\"},{\"Identificador\":\"5\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -11\"},{\"Identificador\":\"6\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -19\"},{\"Identificador\":\"7\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -15\"},{\"Identificador\":\"8\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -22\"},{\"Identificador\":\"9\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -10\"},{\"Identificador\":\"10\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -15\"}],\"SearchPanes\":{\"options\":{\"Identificador\":[{\"label\":\"6\",\"total\":\"100\",\"value\":\"6\",\"count\":\"100\"}]}}}\';\n\necho $RespuestaFormatoJSON;\n                \n                //Entrega resultados en JSON formateados para DT\n                //echo json_encode($RespuestaFormatoJSON);\n\n                //Finaliza ejecucion para evitar datos basura\n                die();\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_RecuperarRecordsetJSON_DataTable\n	Hace una consulta a la base de datos determinada por un identificador de informe y retorna los registros formateados en JSON.  Util en DataTables con AJAX\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        \n        start - Enviado automaticamente por DataTables \n        length - Enviado automaticamente por DataTables \n        search[value] - Enviado automaticamente por DataTables \n\n    Ver tambien:\n        Para efectos de depuracion F12 pestana Network presentara en Headers todo lo enviado por datatables en la solicitud Ajax\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n*/\nif ($PCO_Accion==\"PCO_RecuperarRecordsetJSON_DataTable\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n        \n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        if (!isset($NroFilasBase)) $NroFilasBase=$_REQUEST[\"NroFilasBase\"];\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        //Busca la consulta asociada al datatable desde la cache de SQL en la primera generacion del reporte.\n        //Verifica no solo por ID de cache sino tambien que perteneca al usuario logueado para evitar robo de datos o informes entre usuarios\n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n        $ListaCamposDT=explode(\",\",$ListaColumnasCache);\n\n        //BLOQUE1: Ajusta consultas y variables necesarias.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                ##Obtiene algunos de los valores recibidos en la solicitud desde el DataTable\n                @$PCO_IteracionLlamadosDataTable = $_POST[\'draw\'];                                       //Uso interno de DT\n                @$PCO_FilaInicial = $_POST[\'start\'];                                                     //Registro inicial \n                @$PCO_CantidadFilas = $_POST[\'length\'];                                                  //Cantidad deseada de registros usado en LIMIT\n                @$ColumnaOrdenamientoRecibidaDT = $_POST[\'order\'][0][\'column\'];                          //Obtiene la columna de indexado / ordenamiento\n                @$PCO_ColumnaOrdenamiento = $_POST[\'columns\'][$ColumnaOrdenamientoRecibidaDT][\'data\'];   //Columna usada en el ORDER BY\n                @$PCO_DireccionOrdenamiento = $_POST[\'order\'][0][\'dir\'];                                 //Direccion usada en el ordenamiento: asc or desc\n                @$PCO_ValorFiltro = $_POST[\'search\'][\'value\'];                                           //Valor ingresado en la caja de filtro por el usuario\n\n                //Corrige valores para un limit basico cuando no se reciben de entrada\n                if ($PCO_CantidadFilas==\"\")\n                    {\n                        $PCO_FilaInicial=0;\n                        $PCO_CantidadFilas=$NroFilasBase;\n                    }\n\n                //Busca y/o establece posibles condiciones de filtro adicional recibidas desde el DT en su campo de busqueda\n                $PCO_CondicionesFiltrado=\" \";\n                if(trim($PCO_ValorFiltro) != \'\')\n                    {\n                        //Agrega los likes para todos los campos en el complemento de condicion cuando el usuario digita algo en el cuadro de filtro\n                        $PCO_CondicionesFiltrado=\" AND ( \";\n\n                        //Verifica si los campos tienen aliases o no\n                        $ExistenAliasEnCampos=0;\n                        $ConsultaBusquedaAlias=strstr($ConsultaCacheada, \"FROM\", TRUE); //Con retorno de cadena previa al needle\n                        $ConsultaBusquedaAlias=str_replace(\"SELECT\", \"\", $ConsultaBusquedaAlias);\n                        //Cambia cualquier combinacion de la sentencia para alias para uniformarla a mausculas \n                        $ConsultaBusquedaAlias=str_replace ( \" as \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" As \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" aS \", \" AS \" , $ConsultaBusquedaAlias);\n                        \n                        //CASO 1: La lista de campos contiene la sentenia de Alias.  Busca la palabra As\n                            if ( strpos($ConsultaBusquedaAlias,\" AS \")>0 )\n                                {\n                                    $ExistenAliasEnCampos=1;\n                                    $TrozosCamposAlias=explode(\" AS \",$ConsultaBusquedaAlias);\n                                    $ListaCamposDTAlias=array();\n                                    $TotalTrozos=count($TrozosCamposAlias);\n                                    $TrozoAnalizado=1;\n                                    //Recorre todos los trozos, normalmente de la forma:   Campo1    Alias1,Campo2    Alias2,Campo3    Alias3...\n                                    foreach ($TrozosCamposAlias as $TrozoCampo)\n                                        {\n                                            $CampoDTAlias=\"\";\n                                            //El primer trozo ya llega listo entonces lo agrega directamente, sino lo procesa\n                                            if ($TrozoAnalizado==1)\n                                                $CampoDTAlias=$TrozoCampo;\n                                            else\n                                                {\n                                                    //Verifica que no sea el ultimo trozo (el cual se descarta)\n                                                    if ($TrozoAnalizado!=$TotalTrozos)\n                                                        {\n                                                            $CampoDTAlias=strstr($TrozoCampo, \",\", FALSE); //Con retorno de cadena posterior al needle\n                                                            $CampoDTAlias=substr($CampoDTAlias, 1); //Elimina coma inicial sobrante \n                                                        }\n                                                }\n                                            if ($CampoDTAlias!=\"\")\n                                                $PCO_CondicionesFiltrado.=\" {$CampoDTAlias} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                            $TrozoAnalizado++;\n                                        }\n                                }\n\n                        //CASO 2: El mas simple, Cuando no se tienen Aliases en los campos (AS)\n                            if ($ExistenAliasEnCampos==0)\n                                {\n                                    foreach ($ListaCamposDT as $CampoDT)\n                                        $PCO_CondicionesFiltrado.=\" {$CampoDT} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                }\n\n                        $PCO_CondicionesFiltrado.=\" 1=2 ) \"; //Agrega una condicion que nunca se cumple para los OR y Cierra el AND del SQL\n                    }\n\n                //PROCESA LA CONSULTA DE BASE separando en partes y generando las subconsultas para conteo de registros y agregando ademas las condiciones\n                //1. Construye consulta para gran TOTAL de registros en la consulta\n                $SubCadena=strstr($ConsultaCacheada, \"FROM\", FALSE); //SIN retorno de cadena previa al needle\n                $ConsultaTotalRegistros = \"SELECT COUNT(*) AS allcount  {$SubCadena}\";\n\n                //2. Construye consulta para TOTAL de registros en la consulta al aplicar filtros\n                $ConsultaTotalRegistrosFiltrados = \"{$ConsultaTotalRegistros} {$PCO_CondicionesFiltrado}\";\n\n                //3. Construye consulta para obtener los registros\n                    $CadenaOrderBy=\" \";\n                    if ($PCO_ColumnaOrdenamiento!=\"\")\n                        $CadenaOrderBy=\" ORDER BY $PCO_ColumnaOrdenamiento $PCO_DireccionOrdenamiento \";\n                    $ConsultaCacheadaRegistros=\"{$ConsultaCacheada} {$PCO_CondicionesFiltrado} {$CadenaOrderBy} LIMIT {$PCO_FilaInicial},{$PCO_CantidadFilas} \";\n\n                if(1==2) //Solo para efectos de depuracion mediante F12 - Network, cambiar a condicion invalida en produccion\n                    {\n                        echo \"\n                            <br>ConsultaOriginal=$ConsultaCacheada\n                            <br>ConsultaTotalRegistros=$ConsultaTotalRegistros\n                            <br>ConsultaTotalRegistrosFiltrados=$ConsultaTotalRegistrosFiltrados\n                            <br>ConsultaRegistros=$ConsultaCacheadaRegistros\n                            <br>PCO_ValorFiltro=$PCO_ValorFiltro\n                        \";\n                        die();\n                    }\n            }\n\n        //BLOQUE2: Genera conteos y datos requeridos.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Determina la conexion utilizada por el informe\n                $ConexionAUtilizar=\"\";\n                $IdInformeCacheado=$RegistroCacheSQL[\"informe\"];\n                //$ConexionBDInforme=PCO_EjecutarSQL(\"SELECT conexion_origen_datos FROM core_informe WHERE id=\'{$IdInformeCacheado}\' \")->fetchColumn();\n                $ConexionBDInforme=PCO_EjecutarSQL(\"SELECT conexion_origen_datos FROM core_informe,core_replicasbd WHERE core_replicasbd.nombre=core_informe.conexion_origen_datos AND core_informe.id=\'{$IdInformeCacheado}\' \")->fetchColumn();\n                if($ConexionBDInforme!=\"\"  )\n                    {\n                        // Genera conexiones individuales o conexiones para replicacion de transacciones\n                        include_once \'../core/conexiones_extra.php\';\n                        $ConexionAUtilizar=${$ConexionBDInforme};\n                    }\n\n                //Obitene el Total de registros en la consulta de base SIN filtros\n                $PCO_TotalRegistrosConsulta = PCO_EjecutarSQL($ConsultaTotalRegistros,\"\",$ConexionAUtilizar)->fetchColumn();\n        \n                //Obtiene el total de registros en la consulta CON filtros aplicados\n                $PCO_TotalRegistrosConsultaCONFiltro = PCO_EjecutarSQL($ConsultaTotalRegistrosFiltrados,\"\",$ConexionAUtilizar)->fetchColumn();\n        \n                //Hace la consulta desde la cache de SQL\n                $RegistrosRecuperados = PCO_EjecutarSQL($ConsultaCacheadaRegistros,\"\",$ConexionAUtilizar)->fetchAll();\n\n                //Define el arreglo con los datos y lo llena desde cada fila del registro\n                $PCO_ArregloDatosRegistros = array();\n                    foreach($RegistrosRecuperados as $row)\n                        {\n                            $ArregloAsociativoCampos=array();\n                            //Recorre todos los campos definidos para agregarlos como llaves al arreglo de registro\n                            foreach ($ListaCamposDT as $CampoDT)\n                                {\n                                    //Agrega el par Key-Value con el campo correspondiente al arreglo de registro\n                                    $ArregloAsociativoCampos += array( $CampoDT => $row[$CampoDT] ); \n                                }\n                            $PCO_ArregloDatosRegistros[]=$ArregloAsociativoCampos;          //Agrega el arreglo de registro al arreglo de resultado general\n                        }\n        \n                //Define la respuesta con los datos obtenidos\n                //Antes el elemento data era aaData\n                $RespuestaFormatoJSON = array(\n                   \"draw\" => intval($PCO_IteracionLlamadosDataTable),\n                   \"iTotalRecords\" => $PCO_TotalRegistrosConsulta,\n                   \"iTotalDisplayRecords\" => $PCO_TotalRegistrosConsultaCONFiltro,\n                   \"data\" => $PCO_ArregloDatosRegistros\n                );\n\n                //Entrega resultados en JSON formateados para DT\n                echo json_encode($RespuestaFormatoJSON);\n                //Finaliza ejecucion para evitar datos basura\n                die();\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: opciones_combo_box\n	Hace una consulta a la base de datos y retorna las opciones a desplegar en una lista de seleccion o combobox\n\n	Variables de entrada:\n\n        origen_lista_tablas - Lista de tablas separadas por coma\n        origen_lista_opciones - Campo que sera agregado al select para obtener la lista de opciones\n        origen_lista_valores -  Campo que sera agregado al select para obtener la lista de valores\n        condicion_filtrado_listas - Condiones a ser agregadas en el where para filtrar los registros\n        PCO_Prefijo - Cadena para anteponer a las opciones.  Podria recibir algo como un  <option value=\"  para inciar opciones de un combo o un | para otros usos (por ejemplo)\n        PCO_Infijo - Cadena para agregar entre el valor y la opcion visual.  Podria recibir algo como un  \">  para cerrar opciones de un combo o un | para otros usos (por ejemplo)\n        PCO_Posfijo - Cadena para agregar al final de cada opcion.  Podria recibir algo como un  </option>  para inciar opciones de un combo o un | para otros usos (por ejemplo)\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n\n*/\nif ($PCO_Accion==\"opciones_combo_box\") \n    {           \n        $PCO_MensajeError=\"\";\n        $PCO_SalidaCombos=\"\";\n        //Valida variables minimas para la consulta\n        if (@$origen_lista_tablas==\"\" || @$origen_lista_opciones==\"\" || @$origen_lista_valores==\"\")\n            {\n                $PCO_MensajeError.=\'<option>[Error] Parametros de seleccion</option>\';\n                if (@$origen_lista_tablas==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_tablas</option>\';\n                if (@$origen_lista_opciones==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_opciones</option>\';\n                if (@$origen_lista_valores==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_valores</option>\';\n            }\n\n        //Pendiente proteger tablas o campos CORE\n        // ******************** //\n\n        //Si no ha obtenido mensajes de error inicia la consulta\n        if ($PCO_MensajeError==\"\")\n            {\n                // Se buscan los registros para el combo\n                $complemento_condicion_filtrado=\"\";\n                if (@$condicion_filtrado_listas!=\"\") $complemento_condicion_filtrado=\" AND ($condicion_filtrado_listas) \";\n                $consulta_registros_combo=PCO_EjecutarSQL(\"SELECT $origen_lista_opciones as opcion, $origen_lista_valores as valor FROM $origen_lista_tablas WHERE 1 $complemento_condicion_filtrado \");\n                while ($registro_opciones_combo = $consulta_registros_combo->fetch())\n					$PCO_SalidaCombos.=$PCO_Prefijo.$registro_opciones_combo[\'valor\'].$PCO_Infijo.$registro_opciones_combo[\'opcion\'].$PCO_Posfijo;\n            }\n\n        //echo \'<select class=\"selectpicker show-tick\">\';\n        //Retorna el resultado final\n        if ($PCO_MensajeError!=\"\")\n            echo $PCO_MensajeError;\n        else\n            echo $PCO_SalidaCombos;\n        //echo \"</select>\";\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: valor_campo_tabla\n	Hace una consulta a la base de datos sobre un campo y tabla especificos y retorna su valor.  Acepta condiciones de filtrado\n\n	Variables de entrada:\n\n        campo - Campo que se desea retornar\n        tabla - En donde se busca el valor\n        condicion - condicion de filtrado que debe cumplir el registro\n\n	Salida:\n		Valor del campo o vacio si no se encuentra nada\n    \n    Ejemplo de llamado:\n    index.php?PCO_Accion=valor_campo_tabla&campo=login&tabla=core_usuario&condicion=login%3d\'pepito.perez\'&Presentar_FullScreen=1\n\n*/\nif ($PCO_Accion==\"valor_campo_tabla\") \n    {\n        if($condicion==\"\") $condicion=\"1=1\";\n        $registro=PCO_EjecutarSQL(\"SELECT $campo FROM $tabla WHERE $condicion \")->fetch();\n\n        if (@ob_clean() === false) throw new \\RuntimeException(\'Error no se pudo hacer ob_clean en funcion de valor_campo_tabla.\');\n        if ($registro[0]!=\"\")\n            echo trim($registro[0]);\n        else\n            echo \"\";\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Section: Acciones a ser ejecutadas (si aplica) en cada cargue de la herramienta\n*/\n\n########################################################################\n########################################################################\n/*\n	Function: cambiar_estado_campo\n	Abre los espacios de trabajo dinamicos sobre el contenedor principal donde se despliega informacion\n\n	Variables de entrada:\n\n		tabla - Nombre de la tabla que contiene el registro a actualizar.\n		campo - Nombre del campo que sera actualizado.\n		id - Valor Identificador unico del campo a ser actualizado.\n		PCO_CambioEstado_CampoLlave - Nombre del campo que sera utulizado para comparar.  Si no se recibe se asume id\n		valor - Valor a ser asignado en el campo del registro cuyo identificador coincida con el recibido.\n		PCO_CambioEstado_NegarRetorno - Determina si se debe o no retornar despues de un cambio.  Valor vacio hace que se ejecute la operacion por defecto y retorne.\n		PCO_CambioEstado_NoUsarCore - Determina si anular o no el prefijo de tablas Core de la operacion. 1=anula, otros valores dejaran el prefijo core\n\n	Salida:\n\n		Valor actualizado en el campo y retorno al escritorio de la aplicacion.  En caso de error se retorna al escritorio sin realizar cambios ante el fallo del query.\n*/\nif (@$PCO_Accion==\"cambiar_estado_campo\")\n	{		\n		$mensaje_error=\"\";\n		if ($mensaje_error==\"\")\n			{\n				//Determina el tipo de objeto sobre el que se hace el cambio\n				$TipoCampo=\"\";\n				if (@$formulario!=\"\") $TipoCampo.=\"Frm:\".$formulario;\n				if (@$informe!=\"\") $TipoCampo.=\"Inf:\".$informe;\n				\n				//Define el campo sobre el cual se hace la operacion\n				if (@$PCO_CambioEstado_CampoLlave==\"\")	$PCO_CambioEstado_CampoLlave=\"id\";\n				\n				//Algunas operaciones requieren por defecto usar los prefijos Core.  Si se desea pueden anularse con el parametro en 1\n				$PrefijoTablas=$TablasCore;\n				if ($PCO_CambioEstado_NoUsarCore==1) $PrefijoTablas=\"\";\n				\n				PCO_EjecutarSQLUnaria(\"UPDATE \".$PrefijoTablas.\"$tabla SET $campo = \'$valor\' WHERE $PCO_CambioEstado_CampoLlave = ? \",\"$id\");\n		        if (@PCO_Auditar(\"Cambia estado del campo $campo en objetoID $TipoCampo\") === false) throw new \\RuntimeException(\'Error no se pudo llevar un registro de auditoria en funcion cambiar_estado_campo\');\n\n				if (@$PCO_CambioEstado_NegarRetorno==\"\")\n					echo \'<form name=\"cancelar\" action=\"\'.$ArchivoCORE.\'\" method=\"POST\">\n							<input type=\"Hidden\" name=\"PCO_Accion\" value=\"\'.$accion_retorno.\'\">\n							<input type=\"Hidden\" name=\"nombre_tabla\" value=\"\'.$nombre_tabla.\'\">\n							<input type=\"Hidden\" name=\"formulario\" value=\"\'.@$formulario.\'\">\n							<input type=\"Hidden\" name=\"informe\" value=\"\'.@$informe.\'\">\n							<input type=\"Hidden\" name=\"popup_activo\" value=\"\'.$popup_activo.\'\">\n						</form>\n						<script type=\"\" language=\"JavaScript\">\n						//setTimeout (\"document.cancelar.submit();\", 10); \n						document.cancelar.submit();\n						</script>\';\n			}\n		else\n			echo \'<form name=\"cancelar\" action=\"\'.$ArchivoCORE.\'\" method=\"POST\">\n					<input type=\"Hidden\" name=\"PCO_Accion\" value=\"PCO_EditarFormulario\">\n					<input type=\"Hidden\" name=\"nombre_tabla\" value=\"\'.$nombre_tabla.\'\">\n					<input type=\"Hidden\" name=\"formulario\" value=\"\'.$formulario.\'\">\n					<input type=\"Hidden\" name=\"informe\" value=\"\'.$informe.\'\">\n					<input type=\"Hidden\" name=\"PCO_ErrorTitulo\" value=\"\'.$MULTILANG_ErrorDatos.\'\">\n					<input type=\"Hidden\" name=\"PCO_ErrorDescripcion\" value=\"\'.$mensaje_error.\'\">\n				</form>\n				<script type=\"\" language=\"JavaScript\"> document.cancelar.submit();  </script>\';\n	}\n	\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_ObtenerOpcionesAjaxSelect\n	Consulta de manera dinamica los elementos requeridos para una lista de seleccion\n\n	Variables de entrada:\n\n		PCO_TablaConsulta - Nombre de la tabla que contiene los datos.  Puede ser combinacion de tablas separadas por coma sin olvidar agregar la condicion de llaves foraneas\n		PCO_ListaCamposRetorno - Lista de campos separados por coma que seran devueltos por el query\n		PCO_ListaCamposBusqueda - Lista de campos separados unicamente por coma y que son utilizados para la consulta tipo LIKE con el valor recibido\n		PCO_CondicionFiltrado - OPCIONAL Condicion a ser agregada a la clausula WHERE de la consulta que filtra resultados\n\n	Salida:\n\n		Objeto JSON con los resultados o registros coincidentes o un mensaje de error formateado como JSON ante cualquier eventualidad\n*/\nif (@$PCO_Accion==\"PCO_ObtenerOpcionesAjaxSelect\")\n	{		\n        //Construye la cadena de filtrado para la consulta\n        $ListaCamposArray=explode (\",\" , $PCO_ListaCamposBusqueda );\n        foreach ($ListaCamposArray as $CampoBusqueda)\n            $CadenaCondicionCamposFiltro.=\" $CampoBusqueda LIKE \'%$q%\' OR \";\n        $CadenaCondicionCamposFiltro = substr($CadenaCondicionCamposFiltro, 0, -3);\n        \n        $HayResultados=0;\n        //Valida que se reciban todos los parametros requeridos\n        if ($PCO_ListaCamposRetorno!=\"\" && $PCO_ListaCamposBusqueda!=\"\" && $PCO_TablaConsulta!=\"\")\n            {\n                $Resultados=\'[\';\n                $Consulta=PCO_EjecutarSQL(\"SELECT $PCO_ListaCamposRetorno FROM $PCO_TablaConsulta WHERE  ($CadenaCondicionCamposFiltro) $PCO_CondicionFiltrado \");\n                PCO_Auditar(\"SELECT $PCO_ListaCamposRetorno FROM $PCO_TablaConsulta WHERE  ($CadenaCondicionCamposFiltro) $PCO_CondicionFiltrado \");\n                while ($Registro=$Consulta->fetch())\n                    {\n                        $Resultados.=\'\n                            {\n                                \"V\": \"\'.$Registro[0].\'\",\n                                \"T\": \"\'.$Registro[1].\'\",\n                                \"S\": \"\'.$Registro[2].\'\",\n                                \"I\": \"\'.$Registro[3].\'\"\n                            },\';\n                        $HayResultados=1;\n                    }\n                $Resultados = substr($Resultados, 0, -1);\n                $Resultados.=\']\';\n            }\n\n        if (!$HayResultados)\n            $Resultados=\'\n                [\n                ]\';\n\n        //Devuelve el JSON generado con los resultados\n        echo $Resultados;\n        die();\n	}','A'),(429,'core/ajax.php','2024-10-22 12:48:00','rafael',764,44205,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n/*\n	Title: Modulo ajax\n	Ubicacion *[/core/ajax.php]*.  Archivo de funciones utilizadas para el retorno de informacion mediante peticiones asincronas\n\n	Section: Controles de datos\n	Funciones asociadas a generacion de controles de datos basados en los parametros recibidos\n*/\n \n//Recupera al menos la accion cuando se trata de llamados sin contexto del index del framework\nif (!isset($PCO_Accion)) $PCO_Accion=$_REQUEST[\"PCO_Accion\"];\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_ExportacionQueryCacheCSV\n	Este archivo exporta cualquier QueryRecibido a formato CSV en la salida estandar del navegador para ser descargado\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        NombreArchivo - Opcional para generar un nombre de archivo personalizado para el informe\n\n	Salida:\n		* Datos a traves del navegador\n*/\nif ($PCO_Accion==\"PCO_ExportacionQueryCacheCSV\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n\n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        \n        $NombreArchivo=$_REQUEST[\'NombreArchivo\'];\n        if ($NombreArchivo==\"\") $NombreArchivo=\"DatosExportadosCSV_Inf{$IdRegistro_CacheSQL}.csv\";\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n\n        //Continua adelante solo si realmente encontro el informe cacheado y coincidente entre id y usuario\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Construye las columnas\n                $PCO_ColumnasVisibles=explode(\",\",$ListaColumnasCache);\n        \n                //Inicia la entrega de contenidos\n                ob_clean();\n                $ArchivoDestino = fopen(\"php://output\", \'w\');\n\n 		        header(\"Content-Encoding: utf-8\"); \n                header(\"Content-disposition: attachment; filename=\".$NombreArchivo);\n                header(\"Content-Type: text/csv; charset=UTF-8;\");\n                echo \"\\xEF\\xBB\\xBF\"; // UTF-8 BOM	\n		\n                //Agrega las columnas como encabezados\n                fputcsv($ArchivoDestino, $PCO_ColumnasVisibles);\n                //Agrega los datos de cada registro\n                $ResultadoConsulta=PCO_EjecutarSQL($ConsultaCacheada);\n                \n                while ($Registro = $ResultadoConsulta->fetch(PDO::FETCH_ASSOC))\n                    fputcsv($ArchivoDestino, $Registro);\n                //Cierra la salida\n                fclose($ArchivoDestino);\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_RecuperarRecordsetJSON_DataTablePANES\n	Hace una consulta a la base de datos determinada por un identificador de informe y retorna los registros formateados en JSON.  Util en DataTables con AJAX\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        \n        start - Enviado automaticamente por DataTables \n        length - Enviado automaticamente por DataTables \n        search[value] - Enviado automaticamente por DataTables \n\n    Ver tambien:\n        Para efectos de depuracion F12 pestana Network presentara en Headers todo lo enviado por datatables en la solicitud Ajax\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n*/\nif ($PCO_Accion==\"PCO_RecuperarRecordsetJSON_DataTablePANES\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n        \n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        if (!isset($NroFilasBase)) $NroFilasBase=$_REQUEST[\"NroFilasBase\"];\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        //Busca la consulta asociada al datatable desde la cache de SQL en la primera generacion del reporte.\n        //Verifica no solo por ID de cache sino tambien que perteneca al usuario logueado para evitar robo de datos o informes entre usuarios\n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n        $ListaCamposDT=explode(\",\",$ListaColumnasCache);\n\n        //BLOQUE1: Ajusta consultas y variables necesarias.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                ##Obtiene algunos de los valores recibidos en la solicitud desde el DataTable\n                @$PCO_IteracionLlamadosDataTable = $_POST[\'draw\'];                                       //Uso interno de DT\n                @$PCO_FilaInicial = $_POST[\'start\'];                                                     //Registro inicial \n                @$PCO_CantidadFilas = $_POST[\'length\'];                                                  //Cantidad deseada de registros usado en LIMIT\n                @$ColumnaOrdenamientoRecibidaDT = $_POST[\'order\'][0][\'column\'];                          //Obtiene la columna de indexado / ordenamiento\n                @$PCO_ColumnaOrdenamiento = $_POST[\'columns\'][$ColumnaOrdenamientoRecibidaDT][\'data\'];   //Columna usada en el ORDER BY\n                @$PCO_DireccionOrdenamiento = $_POST[\'order\'][0][\'dir\'];                                 //Direccion usada en el ordenamiento: asc or desc\n                @$PCO_ValorFiltro = $_POST[\'search\'][\'value\'];                                           //Valor ingresado en la caja de filtro por el usuario\n\n                //Corrige valores para un limit basico cuando no se reciben de entrada\n                if ($PCO_CantidadFilas==\"\")\n                    {\n                        $PCO_FilaInicial=0;\n                        $PCO_CantidadFilas=$NroFilasBase;\n                    }\n\n                //Busca y/o establece posibles condiciones de filtro adicional recibidas desde el DT en su campo de busqueda\n                $PCO_CondicionesFiltrado=\" \";\n                if(trim($PCO_ValorFiltro) != \'\')\n                    {\n                        //Agrega los likes para todos los campos en el complemento de condicion cuando el usuario digita algo en el cuadro de filtro\n                        $PCO_CondicionesFiltrado=\" AND ( \";\n\n                        //Verifica si los campos tienen aliases o no\n                        $ExistenAliasEnCampos=0;\n                        $ConsultaBusquedaAlias=strstr($ConsultaCacheada, \"FROM\", TRUE); //Con retorno de cadena previa al needle\n                        $ConsultaBusquedaAlias=str_replace(\"SELECT\", \"\", $ConsultaBusquedaAlias);\n                        //Cambia cualquier combinacion de la sentencia para alias para uniformarla a mausculas \n                        $ConsultaBusquedaAlias=str_replace ( \" as \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" As \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" aS \", \" AS \" , $ConsultaBusquedaAlias);\n                        \n                        //CASO 1: La lista de campos contiene la sentenia de Alias.  Busca la palabra As\n                            if ( strpos($ConsultaBusquedaAlias,\" AS \")>0 )\n                                {\n                                    $ExistenAliasEnCampos=1;\n                                    $TrozosCamposAlias=explode(\" AS \",$ConsultaBusquedaAlias);\n                                    $ListaCamposDTAlias=array();\n                                    $TotalTrozos=count($TrozosCamposAlias);\n                                    $TrozoAnalizado=1;\n                                    //Recorre todos los trozos, normalmente de la forma:   Campo1    Alias1,Campo2    Alias2,Campo3    Alias3...\n                                    foreach ($TrozosCamposAlias as $TrozoCampo)\n                                        {\n                                            $CampoDTAlias=\"\";\n                                            //El primer trozo ya llega listo entonces lo agrega directamente, sino lo procesa\n                                            if ($TrozoAnalizado==1)\n                                                $CampoDTAlias=$TrozoCampo;\n                                            else\n                                                {\n                                                    //Verifica que no sea el ultimo trozo (el cual se descarta)\n                                                    if ($TrozoAnalizado!=$TotalTrozos)\n                                                        {\n                                                            $CampoDTAlias=strstr($TrozoCampo, \",\", FALSE); //Con retorno de cadena posterior al needle\n                                                            $CampoDTAlias=substr($CampoDTAlias, 1); //Elimina coma inicial sobrante \n                                                        }\n                                                }\n                                            if ($CampoDTAlias!=\"\")\n                                                $PCO_CondicionesFiltrado.=\" {$CampoDTAlias} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                            $TrozoAnalizado++;\n                                        }\n                                }\n\n                        //CASO 2: El mas simple, Cuando no se tienen Aliases en los campos (AS)\n                            if ($ExistenAliasEnCampos==0)\n                                {\n                                    foreach ($ListaCamposDT as $CampoDT)\n                                        $PCO_CondicionesFiltrado.=\" {$CampoDT} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                }\n\n                        $PCO_CondicionesFiltrado.=\" 1=2 ) \"; //Agrega una condicion que nunca se cumple para los OR y Cierra el AND del SQL\n                    }\n\n                //PROCESA LA CONSULTA DE BASE separando en partes y generando las subconsultas para conteo de registros y agregando ademas las condiciones\n                //1. Construye consulta para gran TOTAL de registros en la consulta\n                $SubCadena=strstr($ConsultaCacheada, \"FROM\", FALSE); //SIN retorno de cadena previa al needle\n                $ConsultaTotalRegistros = \"SELECT COUNT(*) AS allcount  {$SubCadena}\";\n\n                //2. Construye consulta para TOTAL de registros en la consulta al aplicar filtros\n                $ConsultaTotalRegistrosFiltrados = \"{$ConsultaTotalRegistros} {$PCO_CondicionesFiltrado}\";\n\n                //3. Construye consulta para obtener los registros\n                    $CadenaOrderBy=\" \";\n                    if ($PCO_ColumnaOrdenamiento!=\"\")\n                        $CadenaOrderBy=\" ORDER BY $PCO_ColumnaOrdenamiento $PCO_DireccionOrdenamiento \";\n                    $ConsultaCacheadaRegistros=\"{$ConsultaCacheada} {$PCO_CondicionesFiltrado} {$CadenaOrderBy} LIMIT {$PCO_FilaInicial},{$PCO_CantidadFilas} \";\n\n                if(1==2) //Solo para efectos de depuracion mediante F12 - Network, cambiar a condicion invalida en produccion\n                    {\n                        echo \"\n                            <br>ConsultaOriginal=$ConsultaCacheada\n                            <br>ConsultaTotalRegistros=$ConsultaTotalRegistros\n                            <br>ConsultaTotalRegistrosFiltrados=$ConsultaTotalRegistrosFiltrados\n                            <br>ConsultaRegistros=$ConsultaCacheadaRegistros\n                            <br>PCO_ValorFiltro=$PCO_ValorFiltro\n                        \";\n                        die();\n                    }\n            }\n\n        //BLOQUE2: Genera conteos y datos requeridos.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Obitene el Total de registros en la consulta de base SIN filtros\n                $PCO_TotalRegistrosConsulta = PCO_EjecutarSQL($ConsultaTotalRegistros)->fetchColumn();\n        \n                //Obtiene el total de registros en la consulta CON filtros aplicados\n                $PCO_TotalRegistrosConsultaCONFiltro = PCO_EjecutarSQL($ConsultaTotalRegistrosFiltrados)->fetchColumn();\n        \n                //Hace la consulta desde la cache de SQL\n                $RegistrosRecuperados = PCO_EjecutarSQL($ConsultaCacheadaRegistros)->fetchAll();\n        \n                //Define el arreglo con los datos y lo llena desde cada fila del registro\n                $PCO_ArregloDatosRegistros = array();\n                    foreach($RegistrosRecuperados as $row)\n                        {\n                            $ArregloAsociativoCampos=array();\n                            //Recorre todos los campos definidos para agregarlos como llaves al arreglo de registro\n                            foreach ($ListaCamposDT as $CampoDT)\n                                {\n                                    //Agrega el par Key-Value con el campo correspondiente al arreglo de registro\n                                    $ArregloAsociativoCampos += array( $CampoDT => $row[$CampoDT] ); \n                                }\n                            $PCO_ArregloDatosRegistros[]=$ArregloAsociativoCampos;          //Agrega el arreglo de registro al arreglo de resultado general\n                        }\n        \n                //Define la respuesta con los datos obtenidos\n                //Antes el elemento data era aaData\n\n$PCO_ArregloPanes=\'\n\n\n\"SearchPanes\": {\n  \"options\": { \n    \"Identificador\": [ \n      { \"label\": \"6\", \"total\": \"100\", \"value\": \"6\", \"count\": \"100\" } \n      ]\n       } }\n\n\';\n\n//$PCO_ArregloPanes=json_encode($PCO_ArregloPanes);\n\n                $RespuestaFormatoJSON = array(\n                   \"draw\" => intval($PCO_IteracionLlamadosDataTable),\n                   \"iTotalRecords\" => $PCO_TotalRegistrosConsulta,\n                   \"iTotalDisplayRecords\" => $PCO_TotalRegistrosConsultaCONFiltro,\n                   \"data\" => $PCO_ArregloDatosRegistros,\n                   $PCO_ArregloPanes\n                );\n\n\n\n$RespuestaFormatoJSON=\'{\"draw\":0,\"iTotalRecords\":\"4329\",\"iTotalDisplayRecords\":\"4329\",\"data\":[{\"Identificador\":\"1\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -29\"},{\"Identificador\":\"2\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -6\"},{\"Identificador\":\"3\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -21\"},{\"Identificador\":\"4\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -28\"},{\"Identificador\":\"5\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -11\"},{\"Identificador\":\"6\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -19\"},{\"Identificador\":\"7\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -15\"},{\"Identificador\":\"8\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -22\"},{\"Identificador\":\"9\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -10\"},{\"Identificador\":\"10\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -15\"}],\"SearchPanes\":{\"options\":{\"Identificador\":[{\"label\":\"6\",\"total\":\"100\",\"value\":\"6\",\"count\":\"100\"}]}}}\';\n\necho $RespuestaFormatoJSON;\n                \n                //Entrega resultados en JSON formateados para DT\n                //echo json_encode($RespuestaFormatoJSON);\n\n                //Finaliza ejecucion para evitar datos basura\n                die();\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_RecuperarRecordsetJSON_DataTable\n	Hace una consulta a la base de datos determinada por un identificador de informe y retorna los registros formateados en JSON.  Util en DataTables con AJAX\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        \n        start - Enviado automaticamente por DataTables \n        length - Enviado automaticamente por DataTables \n        search[value] - Enviado automaticamente por DataTables \n\n    Ver tambien:\n        Para efectos de depuracion F12 pestana Network presentara en Headers todo lo enviado por datatables en la solicitud Ajax\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n*/\nif ($PCO_Accion==\"PCO_RecuperarRecordsetJSON_DataTable\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n        \n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        if (!isset($NroFilasBase)) $NroFilasBase=$_REQUEST[\"NroFilasBase\"];\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        //Busca la consulta asociada al datatable desde la cache de SQL en la primera generacion del reporte.\n        //Verifica no solo por ID de cache sino tambien que perteneca al usuario logueado para evitar robo de datos o informes entre usuarios\n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n        $ListaCamposDT=explode(\",\",$ListaColumnasCache);\n\n        //BLOQUE1: Ajusta consultas y variables necesarias.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                ##Obtiene algunos de los valores recibidos en la solicitud desde el DataTable\n                @$PCO_IteracionLlamadosDataTable = $_POST[\'draw\'];                                       //Uso interno de DT\n                @$PCO_FilaInicial = $_POST[\'start\'];                                                     //Registro inicial \n                @$PCO_CantidadFilas = $_POST[\'length\'];                                                  //Cantidad deseada de registros usado en LIMIT\n                @$ColumnaOrdenamientoRecibidaDT = $_POST[\'order\'][0][\'column\'];                          //Obtiene la columna de indexado / ordenamiento\n                @$PCO_ColumnaOrdenamiento = $_POST[\'columns\'][$ColumnaOrdenamientoRecibidaDT][\'data\'];   //Columna usada en el ORDER BY\n                @$PCO_DireccionOrdenamiento = $_POST[\'order\'][0][\'dir\'];                                 //Direccion usada en el ordenamiento: asc or desc\n                @$PCO_ValorFiltro = $_POST[\'search\'][\'value\'];                                           //Valor ingresado en la caja de filtro por el usuario\n\n                //Corrige valores para un limit basico cuando no se reciben de entrada\n                if ($PCO_CantidadFilas==\"\")\n                    {\n                        $PCO_FilaInicial=0;\n                        $PCO_CantidadFilas=$NroFilasBase;\n                    }\n\n                //Busca y/o establece posibles condiciones de filtro adicional recibidas desde el DT en su campo de busqueda\n                $PCO_CondicionesFiltrado=\" \";\n                if(trim($PCO_ValorFiltro) != \'\')\n                    {\n                        //Agrega los likes para todos los campos en el complemento de condicion cuando el usuario digita algo en el cuadro de filtro\n                        $PCO_CondicionesFiltrado=\" AND ( \";\n\n                        //Verifica si los campos tienen aliases o no\n                        $ExistenAliasEnCampos=0;\n                        $ConsultaBusquedaAlias=strstr($ConsultaCacheada, \"FROM\", TRUE); //Con retorno de cadena previa al needle\n                        $ConsultaBusquedaAlias=str_replace(\"SELECT\", \"\", $ConsultaBusquedaAlias);\n                        //Cambia cualquier combinacion de la sentencia para alias para uniformarla a mausculas \n                        $ConsultaBusquedaAlias=str_replace ( \" as \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" As \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" aS \", \" AS \" , $ConsultaBusquedaAlias);\n                        \n                        //CASO 1: La lista de campos contiene la sentenia de Alias.  Busca la palabra As\n                            if ( strpos($ConsultaBusquedaAlias,\" AS \")>0 )\n                                {\n                                    $ExistenAliasEnCampos=1;\n                                    $TrozosCamposAlias=explode(\" AS \",$ConsultaBusquedaAlias);\n                                    $ListaCamposDTAlias=array();\n                                    $TotalTrozos=count($TrozosCamposAlias);\n                                    $TrozoAnalizado=1;\n                                    //Recorre todos los trozos, normalmente de la forma:   Campo1    Alias1,Campo2    Alias2,Campo3    Alias3...\n                                    foreach ($TrozosCamposAlias as $TrozoCampo)\n                                        {\n                                            $CampoDTAlias=\"\";\n                                            //El primer trozo ya llega listo entonces lo agrega directamente, sino lo procesa\n                                            if ($TrozoAnalizado==1)\n                                                $CampoDTAlias=$TrozoCampo;\n                                            else\n                                                {\n                                                    //Verifica que no sea el ultimo trozo (el cual se descarta)\n                                                    if ($TrozoAnalizado!=$TotalTrozos)\n                                                        {\n                                                            $CampoDTAlias=strstr($TrozoCampo, \",\", FALSE); //Con retorno de cadena posterior al needle\n                                                            $CampoDTAlias=substr($CampoDTAlias, 1); //Elimina coma inicial sobrante \n                                                        }\n                                                }\n                                            if ($CampoDTAlias!=\"\")\n                                                $PCO_CondicionesFiltrado.=\" {$CampoDTAlias} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                            $TrozoAnalizado++;\n                                        }\n                                }\n\n                        //CASO 2: El mas simple, Cuando no se tienen Aliases en los campos (AS)\n                            if ($ExistenAliasEnCampos==0)\n                                {\n                                    foreach ($ListaCamposDT as $CampoDT)\n                                        $PCO_CondicionesFiltrado.=\" {$CampoDT} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                }\n\n                        $PCO_CondicionesFiltrado.=\" 1=2 ) \"; //Agrega una condicion que nunca se cumple para los OR y Cierra el AND del SQL\n                    }\n\n                //PROCESA LA CONSULTA DE BASE separando en partes y generando las subconsultas para conteo de registros y agregando ademas las condiciones\n                //1. Construye consulta para gran TOTAL de registros en la consulta\n                $SubCadena=strstr($ConsultaCacheada, \"FROM\", FALSE); //SIN retorno de cadena previa al needle\n                $ConsultaTotalRegistros = \"SELECT COUNT(*) AS allcount  {$SubCadena}\";\n\n                //2. Construye consulta para TOTAL de registros en la consulta al aplicar filtros\n                $ConsultaTotalRegistrosFiltrados = \"{$ConsultaTotalRegistros} {$PCO_CondicionesFiltrado}\";\n\n                //3. Construye consulta para obtener los registros\n                    $CadenaOrderBy=\" \";\n                    if ($PCO_ColumnaOrdenamiento!=\"\")\n                        $CadenaOrderBy=\" ORDER BY $PCO_ColumnaOrdenamiento $PCO_DireccionOrdenamiento \";\n                    $ConsultaCacheadaRegistros=\"{$ConsultaCacheada} {$PCO_CondicionesFiltrado} {$CadenaOrderBy} LIMIT {$PCO_FilaInicial},{$PCO_CantidadFilas} \";\n\n                if(1==2) //Solo para efectos de depuracion mediante F12 - Network, cambiar a condicion invalida en produccion\n                    {\n                        echo \"\n                            <br>ConsultaOriginal=$ConsultaCacheada\n                            <br>ConsultaTotalRegistros=$ConsultaTotalRegistros\n                            <br>ConsultaTotalRegistrosFiltrados=$ConsultaTotalRegistrosFiltrados\n                            <br>ConsultaRegistros=$ConsultaCacheadaRegistros\n                            <br>PCO_ValorFiltro=$PCO_ValorFiltro\n                        \";\n                        die();\n                    }\n            }\n\n        //BLOQUE2: Genera conteos y datos requeridos.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Determina la conexion utilizada por el informe\n                $ConexionAUtilizar=\"\";\n                $IdInformeCacheado=$RegistroCacheSQL[\"informe\"];\n                //$ConexionBDInforme=PCO_EjecutarSQL(\"SELECT conexion_origen_datos FROM core_informe WHERE id=\'{$IdInformeCacheado}\' \")->fetchColumn();\n                $ConexionBDInforme=PCO_EjecutarSQL(\"SELECT conexion_origen_datos FROM core_informe,core_replicasbd WHERE core_replicasbd.nombre=core_informe.conexion_origen_datos AND core_informe.id=\'{$IdInformeCacheado}\' \")->fetchColumn();\n                if($ConexionBDInforme!=\"\"  )\n                    {\n                        // Genera conexiones individuales o conexiones para replicacion de transacciones\n                        include_once \'../core/conexiones_extra.php\';\n                        $ConexionAUtilizar=${$ConexionBDInforme};\n                    }\n\n                //Obitene el Total de registros en la consulta de base SIN filtros\n                $PCO_TotalRegistrosConsulta = PCO_EjecutarSQL($ConsultaTotalRegistros,\"\",$ConexionAUtilizar)->fetchColumn();\n        \n                //Obtiene el total de registros en la consulta CON filtros aplicados\n                $PCO_TotalRegistrosConsultaCONFiltro = PCO_EjecutarSQL($ConsultaTotalRegistrosFiltrados,\"\",$ConexionAUtilizar)->fetchColumn();\n        \n                //Hace la consulta desde la cache de SQL\n                $RegistrosRecuperados = PCO_EjecutarSQL($ConsultaCacheadaRegistros,\"\",$ConexionAUtilizar)->fetchAll();\n\n                //Define el arreglo con los datos y lo llena desde cada fila del registro\n                $PCO_ArregloDatosRegistros = array();\n                    foreach($RegistrosRecuperados as $row)\n                        {\n                            $ArregloAsociativoCampos=array();\n                            //Recorre todos los campos definidos para agregarlos como llaves al arreglo de registro\n                            foreach ($ListaCamposDT as $CampoDT)\n                                {\n                                    //Agrega el par Key-Value con el campo correspondiente al arreglo de registro\n                                    $ArregloAsociativoCampos += array( $CampoDT => $row[$CampoDT] ); \n                                }\n                            $PCO_ArregloDatosRegistros[]=$ArregloAsociativoCampos;          //Agrega el arreglo de registro al arreglo de resultado general\n                        }\n        \n                //Define la respuesta con los datos obtenidos\n                //Antes el elemento data era aaData\n                $RespuestaFormatoJSON = array(\n                   \"draw\" => intval($PCO_IteracionLlamadosDataTable),\n                   \"iTotalRecords\" => $PCO_TotalRegistrosConsulta,\n                   \"iTotalDisplayRecords\" => $PCO_TotalRegistrosConsultaCONFiltro,\n                   \"data\" => $PCO_ArregloDatosRegistros\n                );\n\n                //Entrega resultados en JSON formateados para DT\n                echo json_encode($RespuestaFormatoJSON);\n                //Finaliza ejecucion para evitar datos basura\n                die();\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: opciones_combo_box\n	Hace una consulta a la base de datos y retorna las opciones a desplegar en una lista de seleccion o combobox\n\n	Variables de entrada:\n\n        origen_lista_tablas - Lista de tablas separadas por coma\n        origen_lista_opciones - Campo que sera agregado al select para obtener la lista de opciones\n        origen_lista_valores -  Campo que sera agregado al select para obtener la lista de valores\n        condicion_filtrado_listas - Condiones a ser agregadas en el where para filtrar los registros\n        PCO_Prefijo - Cadena para anteponer a las opciones.  Podria recibir algo como un  <option value=\"  para inciar opciones de un combo o un | para otros usos (por ejemplo)\n        PCO_Infijo - Cadena para agregar entre el valor y la opcion visual.  Podria recibir algo como un  \">  para cerrar opciones de un combo o un | para otros usos (por ejemplo)\n        PCO_Posfijo - Cadena para agregar al final de cada opcion.  Podria recibir algo como un  </option>  para inciar opciones de un combo o un | para otros usos (por ejemplo)\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n\n*/\nif ($PCO_Accion==\"opciones_combo_box\") \n    {           \n        $PCO_MensajeError=\"\";\n        $PCO_SalidaCombos=\"\";\n        //Valida variables minimas para la consulta\n        if (@$origen_lista_tablas==\"\" || @$origen_lista_opciones==\"\" || @$origen_lista_valores==\"\")\n            {\n                $PCO_MensajeError.=\'<option>[Error] Parametros de seleccion</option>\';\n                if (@$origen_lista_tablas==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_tablas</option>\';\n                if (@$origen_lista_opciones==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_opciones</option>\';\n                if (@$origen_lista_valores==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_valores</option>\';\n            }\n\n        //Pendiente proteger tablas o campos CORE\n        // ******************** //\n\n        //Si no ha obtenido mensajes de error inicia la consulta\n        if ($PCO_MensajeError==\"\")\n            {\n                // Se buscan los registros para el combo\n                $complemento_condicion_filtrado=\"\";\n                if (@$condicion_filtrado_listas!=\"\") $complemento_condicion_filtrado=\" AND ($condicion_filtrado_listas) \";\n                $consulta_registros_combo=PCO_EjecutarSQL(\"SELECT $origen_lista_opciones as opcion, $origen_lista_valores as valor FROM $origen_lista_tablas WHERE 1 $complemento_condicion_filtrado \");\n                while ($registro_opciones_combo = $consulta_registros_combo->fetch())\n					$PCO_SalidaCombos.=$PCO_Prefijo.$registro_opciones_combo[\'valor\'].$PCO_Infijo.$registro_opciones_combo[\'opcion\'].$PCO_Posfijo;\n            }\n\n        //echo \'<select class=\"selectpicker show-tick\">\';\n        //Retorna el resultado final\n        if ($PCO_MensajeError!=\"\")\n            echo $PCO_MensajeError;\n        else\n            echo $PCO_SalidaCombos;\n        //echo \"</select>\";\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: valor_campo_tabla\n	Hace una consulta a la base de datos sobre un campo y tabla especificos y retorna su valor.  Acepta condiciones de filtrado\n\n	Variables de entrada:\n\n        campo - Campo que se desea retornar\n        tabla - En donde se busca el valor\n        condicion - condicion de filtrado que debe cumplir el registro\n\n	Salida:\n		Valor del campo o vacio si no se encuentra nada\n    \n    Ejemplo de llamado:\n    index.php?PCO_Accion=valor_campo_tabla&campo=login&tabla=core_usuario&condicion=login%3d\'pepito.perez\'&Presentar_FullScreen=1\n\n*/\nif ($PCO_Accion==\"valor_campo_tabla\") \n    {\n        if($condicion==\"\") $condicion=\"1=1\";\n        $registro=PCO_EjecutarSQL(\"SELECT $campo FROM $tabla WHERE $condicion \")->fetch();\n\n        if (@ob_clean() === false) throw new \\RuntimeException(\'Error no se pudo hacer ob_clean en funcion de valor_campo_tabla.\');\n        if ($registro[0]!=\"\")\n            echo trim($registro[0]);\n        else\n            echo \"\";\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Section: Acciones a ser ejecutadas (si aplica) en cada cargue de la herramienta\n*/\n\n########################################################################\n########################################################################\n/*\n	Function: cambiar_estado_campo\n	Abre los espacios de trabajo dinamicos sobre el contenedor principal donde se despliega informacion\n\n	Variables de entrada:\n\n		tabla - Nombre de la tabla que contiene el registro a actualizar.\n		campo - Nombre del campo que sera actualizado.\n		id - Valor Identificador unico del campo a ser actualizado.\n		PCO_CambioEstado_CampoLlave - Nombre del campo que sera utulizado para comparar.  Si no se recibe se asume id\n		valor - Valor a ser asignado en el campo del registro cuyo identificador coincida con el recibido.\n		PCO_CambioEstado_NegarRetorno - Determina si se debe o no retornar despues de un cambio.  Valor vacio hace que se ejecute la operacion por defecto y retorne.\n		PCO_CambioEstado_NoUsarCore - Determina si anular o no el prefijo de tablas Core de la operacion. 1=anula, otros valores dejaran el prefijo core\n\n	Salida:\n\n		Valor actualizado en el campo y retorno al escritorio de la aplicacion.  En caso de error se retorna al escritorio sin realizar cambios ante el fallo del query.\n*/\nif (@$PCO_Accion==\"cambiar_estado_campo\")\n	{		\n		$mensaje_error=\"\";\n		if ($mensaje_error==\"\")\n			{\n				//Determina el tipo de objeto sobre el que se hace el cambio\n				$TipoCampo=\"\";\n				if (@$formulario!=\"\") $TipoCampo.=\"Frm:\".$formulario;\n				if (@$informe!=\"\") $TipoCampo.=\"Inf:\".$informe;\n				\n				//Define el campo sobre el cual se hace la operacion\n				if (@$PCO_CambioEstado_CampoLlave==\"\")	$PCO_CambioEstado_CampoLlave=\"id\";\n				\n				//Algunas operaciones requieren por defecto usar los prefijos Core.  Si se desea pueden anularse con el parametro en 1\n				$PrefijoTablas=$TablasCore;\n				if ($PCO_CambioEstado_NoUsarCore==1) $PrefijoTablas=\"\";\n				\n				PCO_EjecutarSQLUnaria(\"UPDATE \".$PrefijoTablas.\"$tabla SET $campo = \'$valor\' WHERE $PCO_CambioEstado_CampoLlave = ? \",\"$id\");\n		        if (@PCO_Auditar(\"Cambia estado del campo $campo en objetoID $TipoCampo\") === false) throw new \\RuntimeException(\'Error no se pudo llevar un registro de auditoria en funcion cambiar_estado_campo\');\n\n				if (@$PCO_CambioEstado_NegarRetorno==\"\")\n					echo \'<form name=\"cancelar\" action=\"\'.$ArchivoCORE.\'\" method=\"POST\">\n							<input type=\"Hidden\" name=\"PCO_Accion\" value=\"\'.$accion_retorno.\'\">\n							<input type=\"Hidden\" name=\"nombre_tabla\" value=\"\'.$nombre_tabla.\'\">\n							<input type=\"Hidden\" name=\"formulario\" value=\"\'.@$formulario.\'\">\n							<input type=\"Hidden\" name=\"informe\" value=\"\'.@$informe.\'\">\n							<input type=\"Hidden\" name=\"popup_activo\" value=\"\'.$popup_activo.\'\">\n						</form>\n						<script type=\"\" language=\"JavaScript\">\n						//setTimeout (\"document.cancelar.submit();\", 10); \n						document.cancelar.submit();\n						</script>\';\n			}\n		else\n			echo \'<form name=\"cancelar\" action=\"\'.$ArchivoCORE.\'\" method=\"POST\">\n					<input type=\"Hidden\" name=\"PCO_Accion\" value=\"PCO_EditarFormulario\">\n					<input type=\"Hidden\" name=\"nombre_tabla\" value=\"\'.$nombre_tabla.\'\">\n					<input type=\"Hidden\" name=\"formulario\" value=\"\'.$formulario.\'\">\n					<input type=\"Hidden\" name=\"informe\" value=\"\'.$informe.\'\">\n					<input type=\"Hidden\" name=\"PCO_ErrorTitulo\" value=\"\'.$MULTILANG_ErrorDatos.\'\">\n					<input type=\"Hidden\" name=\"PCO_ErrorDescripcion\" value=\"\'.$mensaje_error.\'\">\n				</form>\n				<script type=\"\" language=\"JavaScript\"> document.cancelar.submit();  </script>\';\n	}\n	\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_ObtenerOpcionesAjaxSelect\n	Consulta de manera dinamica los elementos requeridos para una lista de seleccion\n\n	Variables de entrada:\n\n		PCO_TablaConsulta - Nombre de la tabla que contiene los datos.  Puede ser combinacion de tablas separadas por coma sin olvidar agregar la condicion de llaves foraneas\n		PCO_ListaCamposRetorno - Lista de campos separados por coma que seran devueltos por el query\n		PCO_ListaCamposBusqueda - Lista de campos separados unicamente por coma y que son utilizados para la consulta tipo LIKE con el valor recibido\n		PCO_CondicionFiltrado - OPCIONAL Condicion a ser agregada a la clausula WHERE de la consulta que filtra resultados\n\n	Salida:\n\n		Objeto JSON con los resultados o registros coincidentes o un mensaje de error formateado como JSON ante cualquier eventualidad\n*/\nif (@$PCO_Accion==\"PCO_ObtenerOpcionesAjaxSelect\")\n	{		\n        //Construye la cadena de filtrado para la consulta\n        $ListaCamposArray=explode (\",\" , $PCO_ListaCamposBusqueda );\n        foreach ($ListaCamposArray as $CampoBusqueda)\n            $CadenaCondicionCamposFiltro.=\" $CampoBusqueda LIKE \'%$q%\' OR \";\n        $CadenaCondicionCamposFiltro = substr($CadenaCondicionCamposFiltro, 0, -3);\n        \n        $HayResultados=0;\n        //Valida que se reciban todos los parametros requeridos\n        if ($PCO_ListaCamposRetorno!=\"\" && $PCO_ListaCamposBusqueda!=\"\" && $PCO_TablaConsulta!=\"\")\n            {\n                $Resultados=\'[\';\n                $Consulta=PCO_EjecutarSQL(\"SELECT $PCO_ListaCamposRetorno FROM $PCO_TablaConsulta WHERE  ($CadenaCondicionCamposFiltro) $PCO_CondicionFiltrado \");\n                PCO_Auditar(\"SELECT $PCO_ListaCamposRetorno FROM $PCO_TablaConsulta WHERE  ($CadenaCondicionCamposFiltro) $PCO_CondicionFiltrado \");\n                while ($Registro=$Consulta->fetch())\n                    {\n                        $Resultados.=\'\n                            {\n                                \"V\": \"\'.$Registro[0].\'\",\n                                \"T\": \"\'.$Registro[1].\'\",\n                                \"S\": \"\'.$Registro[2].\'\",\n                                \"I\": \"\'.$Registro[3].\'\"\n                            },\';\n                        $HayResultados=1;\n                    }\n                $Resultados = substr($Resultados, 0, -1);\n                $Resultados.=\']\';\n            }\n\n        if (!$HayResultados)\n            $Resultados=\'\n                [\n                ]\';\n\n        //Devuelve el JSON generado con los resultados\n        echo $Resultados;\n        die();\n	}','A'),(430,'core_formulario[8].javascript','2024-10-22 13:01:00','rafael',242,8553,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos dos caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(431,'core_formulario[8].javascript','2024-10-22 13:01:00','rafael',242,8554,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(432,'core/ajax.php','2024-10-22 13:11:00','rafael',764,44057,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n/*\n	Title: Modulo ajax\n	Ubicacion *[/core/ajax.php]*.  Archivo de funciones utilizadas para el retorno de informacion mediante peticiones asincronas\n\n	Section: Controles de datos\n	Funciones asociadas a generacion de controles de datos basados en los parametros recibidos\n*/\n \n//Recupera al menos la accion cuando se trata de llamados sin contexto del index del framework\nif (!isset($PCO_Accion)) $PCO_Accion=$_REQUEST[\"PCO_Accion\"];\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_ExportacionQueryCacheCSV\n	Este archivo exporta cualquier QueryRecibido a formato CSV en la salida estandar del navegador para ser descargado\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        NombreArchivo - Opcional para generar un nombre de archivo personalizado para el informe\n\n	Salida:\n		* Datos a traves del navegador\n*/\nif ($PCO_Accion==\"PCO_ExportacionQueryCacheCSV\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n\n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        \n        $NombreArchivo=$_REQUEST[\'NombreArchivo\'];\n        if ($NombreArchivo==\"\") $NombreArchivo=\"DatosExportadosCSV_Inf{$IdRegistro_CacheSQL}.csv\";\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n\n        //Continua adelante solo si realmente encontro el informe cacheado y coincidente entre id y usuario\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Construye las columnas\n                $PCO_ColumnasVisibles=explode(\",\",$ListaColumnasCache);\n        \n                //Inicia la entrega de contenidos\n                ob_clean();\n                $ArchivoDestino = fopen(\"php://output\", \'w\');\n\n 		        header(\"Content-Encoding: utf-8\"); \n                header(\"Content-disposition: attachment; filename=\".$NombreArchivo);\n                header(\"Content-Type: text/csv; charset=UTF-8;\");\n                echo \"\\xEF\\xBB\\xBF\"; // UTF-8 BOM	\n		\n                //Agrega las columnas como encabezados\n                fputcsv($ArchivoDestino, $PCO_ColumnasVisibles);\n                //Agrega los datos de cada registro\n                $ResultadoConsulta=PCO_EjecutarSQL($ConsultaCacheada);\n                \n                while ($Registro = $ResultadoConsulta->fetch(PDO::FETCH_ASSOC))\n                    fputcsv($ArchivoDestino, $Registro);\n                //Cierra la salida\n                fclose($ArchivoDestino);\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_RecuperarRecordsetJSON_DataTablePANES\n	Hace una consulta a la base de datos determinada por un identificador de informe y retorna los registros formateados en JSON.  Util en DataTables con AJAX\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        \n        start - Enviado automaticamente por DataTables \n        length - Enviado automaticamente por DataTables \n        search[value] - Enviado automaticamente por DataTables \n\n    Ver tambien:\n        Para efectos de depuracion F12 pestana Network presentara en Headers todo lo enviado por datatables en la solicitud Ajax\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n*/\nif ($PCO_Accion==\"PCO_RecuperarRecordsetJSON_DataTablePANES\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n        \n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        if (!isset($NroFilasBase)) $NroFilasBase=$_REQUEST[\"NroFilasBase\"];\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        //Busca la consulta asociada al datatable desde la cache de SQL en la primera generacion del reporte.\n        //Verifica no solo por ID de cache sino tambien que perteneca al usuario logueado para evitar robo de datos o informes entre usuarios\n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n        $ListaCamposDT=explode(\",\",$ListaColumnasCache);\n\n        //BLOQUE1: Ajusta consultas y variables necesarias.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                ##Obtiene algunos de los valores recibidos en la solicitud desde el DataTable\n                @$PCO_IteracionLlamadosDataTable = $_POST[\'draw\'];                                       //Uso interno de DT\n                @$PCO_FilaInicial = $_POST[\'start\'];                                                     //Registro inicial \n                @$PCO_CantidadFilas = $_POST[\'length\'];                                                  //Cantidad deseada de registros usado en LIMIT\n                @$ColumnaOrdenamientoRecibidaDT = $_POST[\'order\'][0][\'column\'];                          //Obtiene la columna de indexado / ordenamiento\n                @$PCO_ColumnaOrdenamiento = $_POST[\'columns\'][$ColumnaOrdenamientoRecibidaDT][\'data\'];   //Columna usada en el ORDER BY\n                @$PCO_DireccionOrdenamiento = $_POST[\'order\'][0][\'dir\'];                                 //Direccion usada en el ordenamiento: asc or desc\n                @$PCO_ValorFiltro = $_POST[\'search\'][\'value\'];                                           //Valor ingresado en la caja de filtro por el usuario\n\n                //Corrige valores para un limit basico cuando no se reciben de entrada\n                if ($PCO_CantidadFilas==\"\")\n                    {\n                        $PCO_FilaInicial=0;\n                        $PCO_CantidadFilas=$NroFilasBase;\n                    }\n\n                //Busca y/o establece posibles condiciones de filtro adicional recibidas desde el DT en su campo de busqueda\n                $PCO_CondicionesFiltrado=\" \";\n                if(trim($PCO_ValorFiltro) != \'\')\n                    {\n                        //Agrega los likes para todos los campos en el complemento de condicion cuando el usuario digita algo en el cuadro de filtro\n                        $PCO_CondicionesFiltrado=\" AND ( \";\n\n                        //Verifica si los campos tienen aliases o no\n                        $ExistenAliasEnCampos=0;\n                        $ConsultaBusquedaAlias=strstr($ConsultaCacheada, \"FROM\", TRUE); //Con retorno de cadena previa al needle\n                        $ConsultaBusquedaAlias=str_replace(\"SELECT\", \"\", $ConsultaBusquedaAlias);\n                        //Cambia cualquier combinacion de la sentencia para alias para uniformarla a mausculas \n                        $ConsultaBusquedaAlias=str_replace ( \" as \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" As \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" aS \", \" AS \" , $ConsultaBusquedaAlias);\n                        \n                        //CASO 1: La lista de campos contiene la sentenia de Alias.  Busca la palabra As\n                            if ( strpos($ConsultaBusquedaAlias,\" AS \")>0 )\n                                {\n                                    $ExistenAliasEnCampos=1;\n                                    $TrozosCamposAlias=explode(\" AS \",$ConsultaBusquedaAlias);\n                                    $ListaCamposDTAlias=array();\n                                    $TotalTrozos=count($TrozosCamposAlias);\n                                    $TrozoAnalizado=1;\n                                    //Recorre todos los trozos, normalmente de la forma:   Campo1    Alias1,Campo2    Alias2,Campo3    Alias3...\n                                    foreach ($TrozosCamposAlias as $TrozoCampo)\n                                        {\n                                            $CampoDTAlias=\"\";\n                                            //El primer trozo ya llega listo entonces lo agrega directamente, sino lo procesa\n                                            if ($TrozoAnalizado==1)\n                                                $CampoDTAlias=$TrozoCampo;\n                                            else\n                                                {\n                                                    //Verifica que no sea el ultimo trozo (el cual se descarta)\n                                                    if ($TrozoAnalizado!=$TotalTrozos)\n                                                        {\n                                                            $CampoDTAlias=strstr($TrozoCampo, \",\", FALSE); //Con retorno de cadena posterior al needle\n                                                            $CampoDTAlias=substr($CampoDTAlias, 1); //Elimina coma inicial sobrante \n                                                        }\n                                                }\n                                            if ($CampoDTAlias!=\"\")\n                                                $PCO_CondicionesFiltrado.=\" {$CampoDTAlias} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                            $TrozoAnalizado++;\n                                        }\n                                }\n\n                        //CASO 2: El mas simple, Cuando no se tienen Aliases en los campos (AS)\n                            if ($ExistenAliasEnCampos==0)\n                                {\n                                    foreach ($ListaCamposDT as $CampoDT)\n                                        $PCO_CondicionesFiltrado.=\" {$CampoDT} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                }\n\n                        $PCO_CondicionesFiltrado.=\" 1=2 ) \"; //Agrega una condicion que nunca se cumple para los OR y Cierra el AND del SQL\n                    }\n\n                //PROCESA LA CONSULTA DE BASE separando en partes y generando las subconsultas para conteo de registros y agregando ademas las condiciones\n                //1. Construye consulta para gran TOTAL de registros en la consulta\n                $SubCadena=strstr($ConsultaCacheada, \"FROM\", FALSE); //SIN retorno de cadena previa al needle\n                $ConsultaTotalRegistros = \"SELECT COUNT(*) AS allcount  {$SubCadena}\";\n\n                //2. Construye consulta para TOTAL de registros en la consulta al aplicar filtros\n                $ConsultaTotalRegistrosFiltrados = \"{$ConsultaTotalRegistros} {$PCO_CondicionesFiltrado}\";\n\n                //3. Construye consulta para obtener los registros\n                    $CadenaOrderBy=\" \";\n                    if ($PCO_ColumnaOrdenamiento!=\"\")\n                        $CadenaOrderBy=\" ORDER BY $PCO_ColumnaOrdenamiento $PCO_DireccionOrdenamiento \";\n                    $ConsultaCacheadaRegistros=\"{$ConsultaCacheada} {$PCO_CondicionesFiltrado} {$CadenaOrderBy} LIMIT {$PCO_FilaInicial},{$PCO_CantidadFilas} \";\n\n                if(1==2) //Solo para efectos de depuracion mediante F12 - Network, cambiar a condicion invalida en produccion\n                    {\n                        echo \"\n                            <br>ConsultaOriginal=$ConsultaCacheada\n                            <br>ConsultaTotalRegistros=$ConsultaTotalRegistros\n                            <br>ConsultaTotalRegistrosFiltrados=$ConsultaTotalRegistrosFiltrados\n                            <br>ConsultaRegistros=$ConsultaCacheadaRegistros\n                            <br>PCO_ValorFiltro=$PCO_ValorFiltro\n                        \";\n                        die();\n                    }\n            }\n\n        //BLOQUE2: Genera conteos y datos requeridos.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Obitene el Total de registros en la consulta de base SIN filtros\n                $PCO_TotalRegistrosConsulta = PCO_EjecutarSQL($ConsultaTotalRegistros)->fetchColumn();\n        \n                //Obtiene el total de registros en la consulta CON filtros aplicados\n                $PCO_TotalRegistrosConsultaCONFiltro = PCO_EjecutarSQL($ConsultaTotalRegistrosFiltrados)->fetchColumn();\n        \n                //Hace la consulta desde la cache de SQL\n                $RegistrosRecuperados = PCO_EjecutarSQL($ConsultaCacheadaRegistros)->fetchAll();\n        \n                //Define el arreglo con los datos y lo llena desde cada fila del registro\n                $PCO_ArregloDatosRegistros = array();\n                    foreach($RegistrosRecuperados as $row)\n                        {\n                            $ArregloAsociativoCampos=array();\n                            //Recorre todos los campos definidos para agregarlos como llaves al arreglo de registro\n                            foreach ($ListaCamposDT as $CampoDT)\n                                {\n                                    //Agrega el par Key-Value con el campo correspondiente al arreglo de registro\n                                    $ArregloAsociativoCampos += array( $CampoDT => $row[$CampoDT] ); \n                                }\n                            $PCO_ArregloDatosRegistros[]=$ArregloAsociativoCampos;          //Agrega el arreglo de registro al arreglo de resultado general\n                        }\n        \n                //Define la respuesta con los datos obtenidos\n                //Antes el elemento data era aaData\n\n$PCO_ArregloPanes=\'\n\n\n\"SearchPanes\": {\n  \"options\": { \n    \"Identificador\": [ \n      { \"label\": \"6\", \"total\": \"100\", \"value\": \"6\", \"count\": \"100\" } \n      ]\n       } }\n\n\';\n\n//$PCO_ArregloPanes=json_encode($PCO_ArregloPanes);\n\n                $RespuestaFormatoJSON = array(\n                   \"draw\" => intval($PCO_IteracionLlamadosDataTable),\n                   \"iTotalRecords\" => $PCO_TotalRegistrosConsulta,\n                   \"iTotalDisplayRecords\" => $PCO_TotalRegistrosConsultaCONFiltro,\n                   \"data\" => $PCO_ArregloDatosRegistros,\n                   $PCO_ArregloPanes\n                );\n\n\n\n$RespuestaFormatoJSON=\'{\"draw\":0,\"iTotalRecords\":\"4329\",\"iTotalDisplayRecords\":\"4329\",\"data\":[{\"Identificador\":\"1\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -29\"},{\"Identificador\":\"2\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -6\"},{\"Identificador\":\"3\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -21\"},{\"Identificador\":\"4\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -28\"},{\"Identificador\":\"5\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -11\"},{\"Identificador\":\"6\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -19\"},{\"Identificador\":\"7\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -15\"},{\"Identificador\":\"8\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -22\"},{\"Identificador\":\"9\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina informe -10\"},{\"Identificador\":\"10\",\"Fecha\":\"2021-05-21\",\"Dia\":\"21\",\"Mes\":\"5\",\"Ano\":\"2021\",\"Hora\":\"20:28:39\",\"Usuario\":\"admin\",\"Accion\":\"Elimina formulario -15\"}],\"SearchPanes\":{\"options\":{\"Identificador\":[{\"label\":\"6\",\"total\":\"100\",\"value\":\"6\",\"count\":\"100\"}]}}}\';\n\necho $RespuestaFormatoJSON;\n                \n                //Entrega resultados en JSON formateados para DT\n                //echo json_encode($RespuestaFormatoJSON);\n\n                //Finaliza ejecucion para evitar datos basura\n                die();\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_RecuperarRecordsetJSON_DataTable\n	Hace una consulta a la base de datos determinada por un identificador de informe y retorna los registros formateados en JSON.  Util en DataTables con AJAX\n\n	Variables de entrada:\n\n        IdRegistro_CacheSQL - ID unico del Informe asociado a la consulta que se encuentra cacheado\n        \n        start - Enviado automaticamente por DataTables \n        length - Enviado automaticamente por DataTables \n        search[value] - Enviado automaticamente por DataTables \n\n    Ver tambien:\n        Para efectos de depuracion F12 pestana Network presentara en Headers todo lo enviado por datatables en la solicitud Ajax\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n*/\nif ($PCO_Accion==\"PCO_RecuperarRecordsetJSON_DataTable\" ) \n    {   \n        // Valida sesion activa de Practico\n        @session_start();\n        if(!isset($_SESSION[\'PCOSESS_SesionAbierta\'])) {\n        	echo \'<head><title>Error</title><style type=\"text/css\"> body { background-color: #000000; color: #7f7f7f; font-family: sans-serif,helvetica; } </style></head><body><table width=\"100%\" height=\"100%\" border=0><tr><td align=center>&#9827; Acceso no autorizado !</td></tr></table></body>\';\n        	die();\n        }\n        \n        //Se asegura de tener las variables requeridas por filtros y recibidas desde la peticion\n        if (!isset($IdRegistro_CacheSQL)) $IdRegistro_CacheSQL=$_REQUEST[\"IdRegistro_CacheSQL\"];\n        if (!isset($NroFilasBase)) $NroFilasBase=$_REQUEST[\"NroFilasBase\"];\n\n        include_once \'../core/configuracion.php\';\n        // Inicia las conexiones con la BD y las deja listas para las operaciones\n        include_once \'../core/conexiones.php\';\n        // Incluye definiciones comunes de la base de datos\n        include_once \'../inc/practico/def_basedatos.php\';\n        // Incluye archivo con algunas funciones comunes usadas por la herramienta\n        include_once \'../core/comunes.php\';\n        \n        //Busca la consulta asociada al datatable desde la cache de SQL en la primera generacion del reporte.\n        //Verifica no solo por ID de cache sino tambien que perteneca al usuario logueado para evitar robo de datos o informes entre usuarios\n        $RegistroCacheSQL=PCO_EjecutarSQL(\"SELECT * FROM core_informe_cache WHERE id=\'{$IdRegistro_CacheSQL}\' AND usuario=\'\".$_SESSION[\"PCOSESS_LoginUsuario\"].\"\' \")->fetch();\n        $ConsultaCacheada=trim($RegistroCacheSQL[\"script_sql\"]);\n        $ListaColumnasCache=trim($RegistroCacheSQL[\"columnas\"]);\n        $ListaCamposDT=explode(\",\",$ListaColumnasCache);\n\n        //BLOQUE1: Ajusta consultas y variables necesarias.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                ##Obtiene algunos de los valores recibidos en la solicitud desde el DataTable\n                @$PCO_IteracionLlamadosDataTable = $_POST[\'draw\'];                                       //Uso interno de DT\n                @$PCO_FilaInicial = $_POST[\'start\'];                                                     //Registro inicial \n                @$PCO_CantidadFilas = $_POST[\'length\'];                                                  //Cantidad deseada de registros usado en LIMIT\n                @$ColumnaOrdenamientoRecibidaDT = $_POST[\'order\'][0][\'column\'];                          //Obtiene la columna de indexado / ordenamiento\n                @$PCO_ColumnaOrdenamiento = $_POST[\'columns\'][$ColumnaOrdenamientoRecibidaDT][\'data\'];   //Columna usada en el ORDER BY\n                @$PCO_DireccionOrdenamiento = $_POST[\'order\'][0][\'dir\'];                                 //Direccion usada en el ordenamiento: asc or desc\n                @$PCO_ValorFiltro = $_POST[\'search\'][\'value\'];                                           //Valor ingresado en la caja de filtro por el usuario\n\n                //Corrige valores para un limit basico cuando no se reciben de entrada\n                if ($PCO_CantidadFilas==\"\")\n                    {\n                        $PCO_FilaInicial=0;\n                        $PCO_CantidadFilas=$NroFilasBase;\n                    }\n\n                //Busca y/o establece posibles condiciones de filtro adicional recibidas desde el DT en su campo de busqueda\n                $PCO_CondicionesFiltrado=\" \";\n                if(trim($PCO_ValorFiltro) != \'\')\n                    {\n                        //Agrega los likes para todos los campos en el complemento de condicion cuando el usuario digita algo en el cuadro de filtro\n                        $PCO_CondicionesFiltrado=\" AND ( \";\n\n                        //Verifica si los campos tienen aliases o no\n                        $ExistenAliasEnCampos=0;\n                        $ConsultaBusquedaAlias=strstr($ConsultaCacheada, \"FROM\", TRUE); //Con retorno de cadena previa al needle\n                        $ConsultaBusquedaAlias=str_replace(\"SELECT\", \"\", $ConsultaBusquedaAlias);\n                        //Cambia cualquier combinacion de la sentencia para alias para uniformarla a mausculas \n                        $ConsultaBusquedaAlias=str_replace ( \" as \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" As \", \" AS \" , $ConsultaBusquedaAlias);\n                        $ConsultaBusquedaAlias=str_replace ( \" aS \", \" AS \" , $ConsultaBusquedaAlias);\n                        \n                        //CASO 1: La lista de campos contiene la sentenia de Alias.  Busca la palabra As\n                            if ( strpos($ConsultaBusquedaAlias,\" AS \")>0 )\n                                {\n                                    $ExistenAliasEnCampos=1;\n                                    $TrozosCamposAlias=explode(\" AS \",$ConsultaBusquedaAlias);\n                                    $ListaCamposDTAlias=array();\n                                    $TotalTrozos=count($TrozosCamposAlias);\n                                    $TrozoAnalizado=1;\n                                    //Recorre todos los trozos, normalmente de la forma:   Campo1    Alias1,Campo2    Alias2,Campo3    Alias3...\n                                    foreach ($TrozosCamposAlias as $TrozoCampo)\n                                        {\n                                            $CampoDTAlias=\"\";\n                                            //El primer trozo ya llega listo entonces lo agrega directamente, sino lo procesa\n                                            if ($TrozoAnalizado==1)\n                                                $CampoDTAlias=$TrozoCampo;\n                                            else\n                                                {\n                                                    //Verifica que no sea el ultimo trozo (el cual se descarta)\n                                                    if ($TrozoAnalizado!=$TotalTrozos)\n                                                        {\n                                                            $CampoDTAlias=strstr($TrozoCampo, \",\", FALSE); //Con retorno de cadena posterior al needle\n                                                            $CampoDTAlias=substr($CampoDTAlias, 1); //Elimina coma inicial sobrante \n                                                        }\n                                                }\n                                            if ($CampoDTAlias!=\"\")\n                                                $PCO_CondicionesFiltrado.=\" {$CampoDTAlias} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                            $TrozoAnalizado++;\n                                        }\n                                }\n\n                        //CASO 2: El mas simple, Cuando no se tienen Aliases en los campos (AS)\n                            if ($ExistenAliasEnCampos==0)\n                                {\n                                    foreach ($ListaCamposDT as $CampoDT)\n                                        $PCO_CondicionesFiltrado.=\" {$CampoDT} LIKE \'%{$PCO_ValorFiltro}%\' OR \";\n                                }\n\n                        $PCO_CondicionesFiltrado.=\" 1=2 ) \"; //Agrega una condicion que nunca se cumple para los OR y Cierra el AND del SQL\n                    }\n\n                //PROCESA LA CONSULTA DE BASE separando en partes y generando las subconsultas para conteo de registros y agregando ademas las condiciones\n                //1. Construye consulta para gran TOTAL de registros en la consulta\n                $SubCadena=strstr($ConsultaCacheada, \"FROM\", FALSE); //SIN retorno de cadena previa al needle\n                $ConsultaTotalRegistros = \"SELECT COUNT(*) AS allcount  {$SubCadena}\";\n\n                //2. Construye consulta para TOTAL de registros en la consulta al aplicar filtros\n                $ConsultaTotalRegistrosFiltrados = \"{$ConsultaTotalRegistros} {$PCO_CondicionesFiltrado}\";\n\n                //3. Construye consulta para obtener los registros\n                    $CadenaOrderBy=\" \";\n                    if ($PCO_ColumnaOrdenamiento!=\"\")\n                        $CadenaOrderBy=\" ORDER BY $PCO_ColumnaOrdenamiento $PCO_DireccionOrdenamiento \";\n                    $ConsultaCacheadaRegistros=\"{$ConsultaCacheada} {$PCO_CondicionesFiltrado} {$CadenaOrderBy} LIMIT {$PCO_FilaInicial},{$PCO_CantidadFilas} \";\n\n                if(1==2) //Solo para efectos de depuracion mediante F12 - Network, cambiar a condicion invalida en produccion\n                    {\n                        echo \"\n                            <br>ConsultaOriginal=$ConsultaCacheada\n                            <br>ConsultaTotalRegistros=$ConsultaTotalRegistros\n                            <br>ConsultaTotalRegistrosFiltrados=$ConsultaTotalRegistrosFiltrados\n                            <br>ConsultaRegistros=$ConsultaCacheadaRegistros\n                            <br>PCO_ValorFiltro=$PCO_ValorFiltro\n                        \";\n                        die();\n                    }\n            }\n\n        //BLOQUE2: Genera conteos y datos requeridos.  Sigue adelante solo si hay consulta valida\n        if ($ConsultaCacheada!=\"\")\n            {\n                //Determina la conexion utilizada por el informe\n                $ConexionAUtilizar=\"\";\n                $IdInformeCacheado=$RegistroCacheSQL[\"informe\"];\n                //$ConexionBDInforme=PCO_EjecutarSQL(\"SELECT conexion_origen_datos FROM core_informe WHERE id=\'{$IdInformeCacheado}\' \")->fetchColumn();\n                $ConexionBDInforme=PCO_EjecutarSQL(\"SELECT conexion_origen_datos FROM core_informe,core_replicasbd WHERE core_replicasbd.nombre=core_informe.conexion_origen_datos AND core_informe.id=\'{$IdInformeCacheado}\' \")->fetchColumn();\n                if($ConexionBDInforme!=\"\"  )\n                    {\n                        // Genera conexiones individuales o conexiones para replicacion de transacciones\n                        include_once \'../core/conexiones_extra.php\';\n                        $ConexionAUtilizar=${$ConexionBDInforme};\n                    }\n\n                //Obitene el Total de registros en la consulta de base SIN filtros\n                $PCO_TotalRegistrosConsulta = PCO_EjecutarSQL($ConsultaTotalRegistros,\"\",$ConexionAUtilizar)->fetchColumn();\n        \n                //Obtiene el total de registros en la consulta CON filtros aplicados\n                $PCO_TotalRegistrosConsultaCONFiltro = PCO_EjecutarSQL($ConsultaTotalRegistrosFiltrados,\"\",$ConexionAUtilizar)->fetchColumn();\n        \n                //Hace la consulta desde la cache de SQL\n                $RegistrosRecuperados = PCO_EjecutarSQL($ConsultaCacheadaRegistros,\"\",$ConexionAUtilizar)->fetchAll();\n\n                //Define el arreglo con los datos y lo llena desde cada fila del registro\n                $PCO_ArregloDatosRegistros = array();\n                    foreach($RegistrosRecuperados as $row)\n                        {\n                            $ArregloAsociativoCampos=array();\n                            //Recorre todos los campos definidos para agregarlos como llaves al arreglo de registro\n                            foreach ($ListaCamposDT as $CampoDT)\n                                {\n                                    //Agrega el par Key-Value con el campo correspondiente al arreglo de registro\n                                    $ArregloAsociativoCampos += array( $CampoDT => $row[$CampoDT] ); \n                                }\n                            $PCO_ArregloDatosRegistros[]=$ArregloAsociativoCampos;          //Agrega el arreglo de registro al arreglo de resultado general\n                        }\n        \n                //Define la respuesta con los datos obtenidos\n                //Antes el elemento data era aaData\n                $RespuestaFormatoJSON = array(\n                   \"draw\" => intval($PCO_IteracionLlamadosDataTable),\n                   \"iTotalRecords\" => $PCO_TotalRegistrosConsulta,\n                   \"iTotalDisplayRecords\" => $PCO_TotalRegistrosConsultaCONFiltro,\n                   \"data\" => $PCO_ArregloDatosRegistros\n                );\n\n                //Entrega resultados en JSON formateados para DT\n                echo json_encode($RespuestaFormatoJSON);\n                //Finaliza ejecucion para evitar datos basura\n                die();\n            }\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: opciones_combo_box\n	Hace una consulta a la base de datos y retorna las opciones a desplegar en una lista de seleccion o combobox\n\n	Variables de entrada:\n\n        origen_lista_tablas - Lista de tablas separadas por coma\n        origen_lista_opciones - Campo que sera agregado al select para obtener la lista de opciones\n        origen_lista_valores -  Campo que sera agregado al select para obtener la lista de valores\n        condicion_filtrado_listas - Condiones a ser agregadas en el where para filtrar los registros\n        PCO_Prefijo - Cadena para anteponer a las opciones.  Podria recibir algo como un  <option value=\"  para inciar opciones de un combo o un | para otros usos (por ejemplo)\n        PCO_Infijo - Cadena para agregar entre el valor y la opcion visual.  Podria recibir algo como un  \">  para cerrar opciones de un combo o un | para otros usos (por ejemplo)\n        PCO_Posfijo - Cadena para agregar al final de cada opcion.  Podria recibir algo como un  </option>  para inciar opciones de un combo o un | para otros usos (por ejemplo)\n\n	Salida:\n		Lista de elementos < option > usados en el combo\n\n*/\nif ($PCO_Accion==\"opciones_combo_box\") \n    {           \n        $PCO_MensajeError=\"\";\n        $PCO_SalidaCombos=\"\";\n        //Valida variables minimas para la consulta\n        if (@$origen_lista_tablas==\"\" || @$origen_lista_opciones==\"\" || @$origen_lista_valores==\"\")\n            {\n                $PCO_MensajeError.=\'<option>[Error] Parametros de seleccion</option>\';\n                if (@$origen_lista_tablas==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_tablas</option>\';\n                if (@$origen_lista_opciones==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_opciones</option>\';\n                if (@$origen_lista_valores==\"\") $PCO_MensajeError.=\'<option>[Causa] Falta origen_lista_valores</option>\';\n            }\n\n        //Pendiente proteger tablas o campos CORE\n        // ******************** //\n\n        //Si no ha obtenido mensajes de error inicia la consulta\n        if ($PCO_MensajeError==\"\")\n            {\n                // Se buscan los registros para el combo\n                $complemento_condicion_filtrado=\"\";\n                if (@$condicion_filtrado_listas!=\"\") $complemento_condicion_filtrado=\" AND ($condicion_filtrado_listas) \";\n                $consulta_registros_combo=PCO_EjecutarSQL(\"SELECT $origen_lista_opciones as opcion, $origen_lista_valores as valor FROM $origen_lista_tablas WHERE 1 $complemento_condicion_filtrado \");\n                while ($registro_opciones_combo = $consulta_registros_combo->fetch())\n					$PCO_SalidaCombos.=$PCO_Prefijo.$registro_opciones_combo[\'valor\'].$PCO_Infijo.$registro_opciones_combo[\'opcion\'].$PCO_Posfijo;\n            }\n\n        //echo \'<select class=\"selectpicker show-tick\">\';\n        //Retorna el resultado final\n        if ($PCO_MensajeError!=\"\")\n            echo $PCO_MensajeError;\n        else\n            echo $PCO_SalidaCombos;\n        //echo \"</select>\";\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Function: valor_campo_tabla\n	Hace una consulta a la base de datos sobre un campo y tabla especificos y retorna su valor.  Acepta condiciones de filtrado\n\n	Variables de entrada:\n\n        campo - Campo que se desea retornar\n        tabla - En donde se busca el valor\n        condicion - condicion de filtrado que debe cumplir el registro\n\n	Salida:\n		Valor del campo o vacio si no se encuentra nada\n    \n    Ejemplo de llamado:\n    index.php?PCO_Accion=valor_campo_tabla&campo=login&tabla=core_usuario&condicion=login%3d\'pepito.perez\'&Presentar_FullScreen=1\n\n*/\nif ($PCO_Accion==\"valor_campo_tabla\") \n    {\n        if($condicion==\"\") $condicion=\"1=1\";\n        $registro=PCO_EjecutarSQL(\"SELECT $campo FROM $tabla WHERE $condicion \")->fetch();\n\n        if (@ob_clean() === false) throw new \\RuntimeException(\'Error no se pudo hacer ob_clean en funcion de valor_campo_tabla.\');\n        if ($registro[0]!=\"\")\n            echo trim($registro[0]);\n        else\n            echo \"\";\n    }\n\n\n########################################################################\n########################################################################\n/*\n	Section: Acciones a ser ejecutadas (si aplica) en cada cargue de la herramienta\n*/\n\n########################################################################\n########################################################################\n/*\n	Function: cambiar_estado_campo\n	Abre los espacios de trabajo dinamicos sobre el contenedor principal donde se despliega informacion\n\n	Variables de entrada:\n\n		tabla - Nombre de la tabla que contiene el registro a actualizar.\n		campo - Nombre del campo que sera actualizado.\n		id - Valor Identificador unico del campo a ser actualizado.\n		PCO_CambioEstado_CampoLlave - Nombre del campo que sera utulizado para comparar.  Si no se recibe se asume id\n		valor - Valor a ser asignado en el campo del registro cuyo identificador coincida con el recibido.\n		PCO_CambioEstado_NegarRetorno - Determina si se debe o no retornar despues de un cambio.  Valor vacio hace que se ejecute la operacion por defecto y retorne.\n		PCO_CambioEstado_NoUsarCore - Determina si anular o no el prefijo de tablas Core de la operacion. 1=anula, otros valores dejaran el prefijo core\n\n	Salida:\n\n		Valor actualizado en el campo y retorno al escritorio de la aplicacion.  En caso de error se retorna al escritorio sin realizar cambios ante el fallo del query.\n*/\nif (@$PCO_Accion==\"cambiar_estado_campo\")\n	{		\n		$mensaje_error=\"\";\n		if ($mensaje_error==\"\")\n			{\n				//Determina el tipo de objeto sobre el que se hace el cambio\n				$TipoCampo=\"\";\n				if (@$formulario!=\"\") $TipoCampo.=\"Frm:\".$formulario;\n				if (@$informe!=\"\") $TipoCampo.=\"Inf:\".$informe;\n				\n				//Define el campo sobre el cual se hace la operacion\n				if (@$PCO_CambioEstado_CampoLlave==\"\")	$PCO_CambioEstado_CampoLlave=\"id\";\n				\n				//Algunas operaciones requieren por defecto usar los prefijos Core.  Si se desea pueden anularse con el parametro en 1\n				$PrefijoTablas=$TablasCore;\n				if ($PCO_CambioEstado_NoUsarCore==1) $PrefijoTablas=\"\";\n				\n				PCO_EjecutarSQLUnaria(\"UPDATE \".$PrefijoTablas.\"$tabla SET $campo = \'$valor\' WHERE $PCO_CambioEstado_CampoLlave = ? \",\"$id\");\n		        if (@PCO_Auditar(\"Cambia estado del campo $campo en objetoID $TipoCampo\") === false) throw new \\RuntimeException(\'Error no se pudo llevar un registro de auditoria en funcion cambiar_estado_campo\');\n\n				if (@$PCO_CambioEstado_NegarRetorno==\"\")\n					echo \'<form name=\"cancelar\" action=\"\'.$ArchivoCORE.\'\" method=\"POST\">\n							<input type=\"Hidden\" name=\"PCO_Accion\" value=\"\'.$accion_retorno.\'\">\n							<input type=\"Hidden\" name=\"nombre_tabla\" value=\"\'.$nombre_tabla.\'\">\n							<input type=\"Hidden\" name=\"formulario\" value=\"\'.@$formulario.\'\">\n							<input type=\"Hidden\" name=\"informe\" value=\"\'.@$informe.\'\">\n							<input type=\"Hidden\" name=\"popup_activo\" value=\"\'.$popup_activo.\'\">\n						</form>\n						<script type=\"\" language=\"JavaScript\">\n						//setTimeout (\"document.cancelar.submit();\", 10); \n						document.cancelar.submit();\n						</script>\';\n			}\n		else\n			echo \'<form name=\"cancelar\" action=\"\'.$ArchivoCORE.\'\" method=\"POST\">\n					<input type=\"Hidden\" name=\"PCO_Accion\" value=\"PCO_EditarFormulario\">\n					<input type=\"Hidden\" name=\"nombre_tabla\" value=\"\'.$nombre_tabla.\'\">\n					<input type=\"Hidden\" name=\"formulario\" value=\"\'.$formulario.\'\">\n					<input type=\"Hidden\" name=\"informe\" value=\"\'.$informe.\'\">\n					<input type=\"Hidden\" name=\"PCO_ErrorTitulo\" value=\"\'.$MULTILANG_ErrorDatos.\'\">\n					<input type=\"Hidden\" name=\"PCO_ErrorDescripcion\" value=\"\'.$mensaje_error.\'\">\n				</form>\n				<script type=\"\" language=\"JavaScript\"> document.cancelar.submit();  </script>\';\n	}\n	\n\n\n########################################################################\n########################################################################\n/*\n	Function: PCO_ObtenerOpcionesAjaxSelect\n	Consulta de manera dinamica los elementos requeridos para una lista de seleccion\n\n	Variables de entrada:\n\n		PCO_TablaConsulta - Nombre de la tabla que contiene los datos.  Puede ser combinacion de tablas separadas por coma sin olvidar agregar la condicion de llaves foraneas\n		PCO_ListaCamposRetorno - Lista de campos separados por coma que seran devueltos por el query\n		PCO_ListaCamposBusqueda - Lista de campos separados unicamente por coma y que son utilizados para la consulta tipo LIKE con el valor recibido\n		PCO_CondicionFiltrado - OPCIONAL Condicion a ser agregada a la clausula WHERE de la consulta que filtra resultados\n\n	Salida:\n\n		Objeto JSON con los resultados o registros coincidentes o un mensaje de error formateado como JSON ante cualquier eventualidad\n*/\nif (@$PCO_Accion==\"PCO_ObtenerOpcionesAjaxSelect\")\n	{		\n        //Construye la cadena de filtrado para la consulta\n        $ListaCamposArray=explode (\",\" , $PCO_ListaCamposBusqueda );\n        foreach ($ListaCamposArray as $CampoBusqueda)\n            $CadenaCondicionCamposFiltro.=\" $CampoBusqueda LIKE \'%$q%\' OR \";\n        $CadenaCondicionCamposFiltro = substr($CadenaCondicionCamposFiltro, 0, -3);\n        \n        $HayResultados=0;\n        //Valida que se reciban todos los parametros requeridos\n        if ($PCO_ListaCamposRetorno!=\"\" && $PCO_ListaCamposBusqueda!=\"\" && $PCO_TablaConsulta!=\"\")\n            {\n                $Resultados=\'[\';\n                $Consulta=PCO_EjecutarSQL(\"SELECT $PCO_ListaCamposRetorno FROM $PCO_TablaConsulta WHERE  ($CadenaCondicionCamposFiltro) $PCO_CondicionFiltrado \");\n                while ($Registro=$Consulta->fetch())\n                    {\n                        $Resultados.=\'\n                            {\n                                \"V\": \"\'.$Registro[0].\'\",\n                                \"T\": \"\'.$Registro[1].\'\",\n                                \"S\": \"\'.$Registro[2].\'\",\n                                \"I\": \"\'.$Registro[3].\'\"\n                            },\';\n                        $HayResultados=1;\n                    }\n                $Resultados = substr($Resultados, 0, -1);\n                $Resultados.=\']\';\n            }\n\n        if (!$HayResultados)\n            $Resultados=\'\n                [\n                ]\';\n\n        //Devuelve el JSON generado con los resultados\n        echo $Resultados;\n        die();\n	}','A'),(433,'core_formulario[8].javascript','2024-10-22 13:11:00','rafael',242,8536,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(434,'core_evento_objeto[194].javascript','2024-11-04 17:41:00','rafael',1,18,'onchangeCliente();','B'),(435,'core_formulario[11].post_script','2024-11-04 20:33:00','admin',9,344,'<?php\nglobal $PCO_PostAccionDirecta;\n$PCO_PostAccionDirecta = 1;\n$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"$accionForm el Egreso correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(11);','B'),(436,'core_formulario[11].javascript','2024-11-04 20:34:00','admin',13,340,'function FrmAutoRun()\n    {\n       \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n            $(\'#PCO_ErrorTitulo\').val(\'Actualizado correctamente\');\n            $(\'#PCO_ErrorDescripcion\').val(\'El cliente se ha actualizado correctamente\');\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }','B'),(437,'core_formulario[8].javascript','2024-11-04 22:15:00','rafael',242,8560,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(438,'core_formulario[8].javascript','2024-11-04 22:15:00','rafael',242,8560,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagado\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagado\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagado\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(439,'core_formulario[8].javascript','2024-11-04 22:16:00','rafael',242,8560,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagada\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagada\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagada\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(440,'mod/app_ventas/index.php','2024-11-04 22:20:00','rafael',160,6560,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(441,'mod/app_ventas/index.php','2024-11-04 22:26:00','rafael',160,6560,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(442,'mod/app_ventas/index.php','2024-11-04 22:51:00','rafael',161,6630,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha) VALUES (?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(443,'mod/app_ventas/index.php','2024-11-04 22:52:00','rafael',161,6641,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha) VALUES (?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(444,'mod/app_ventas/index.php','2024-11-04 22:56:00','rafael',161,6648,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha) VALUES (?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(445,'mod/app_ventas/index.php','2024-11-04 22:56:00','rafael',161,6654,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha) VALUES (?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(446,'mod/app_ventas/index.php','2024-11-04 22:57:00','rafael',161,6687,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa) VALUES (?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(447,'mod/app_ventas/index.php','2024-11-04 22:58:00','rafael',161,6727,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa, tipo_pago) VALUES (?,?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa$_SeparadorCampos_$tipo_pago\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(448,'mod/app_ventas/index.php','2024-11-04 22:59:00','rafael',161,6687,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa) VALUES (?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(449,'core_formulario[8].javascript','2024-11-04 23:00:00','rafael',246,8642,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagada\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction editProduct(){\n    PCOJS_MostrarMensaje(\"Aviso del sistema\", \"hola\");\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagada\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagada\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(450,'core_formulario[8].javascript','2024-11-04 23:03:00','rafael',246,8642,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagada\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction editProduct(){\n    PCOJS_MostrarMensaje(\"Aviso del sistema\", \"hola\");\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagada\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagada\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(451,'core_formulario[8].javascript','2024-11-04 23:06:00','rafael',246,8785,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagada\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction editProduct(){\n    PCOJS_MostrarMensaje(\"Aviso del sistema\", PCO_ObtenerContenidoAjax(0, \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:5:0&id=\' + id.value));\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagada\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagada\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(452,'core_formulario[8].javascript','2024-11-04 23:20:00','rafael',246,8783,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagada\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction editProduct(){\n    PCOJS_MostrarMensaje(\"Aviso del sistema\", PCO_ObtenerContenidoAjax(0, \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:5:0&id=\' + id.value));\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Editar producto\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction editarProducto() {\n    \n    // actualizarInforme();\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagada\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagada\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),(453,'mod/app_ventas/index.php','2024-11-07 21:52:00','rafael',161,6730,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono, id_mecanico) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono$_SeparadorCampos_$id_mecanico\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa) VALUES (?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(454,'mod/app_ventas/index.php','2024-11-07 21:53:00','rafael',161,6730,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono, id_mecanico) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono$_SeparadorCampos_$id_mecanico\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa) VALUES (?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(455,'mod/app_ventas/index.php','2024-11-07 21:53:00','rafael',161,6731,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono, id_mecanico) VALUES (?,?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono$_SeparadorCampos_$id_mecanico\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa) VALUES (?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(456,'mod/app_ventas/index.php','2024-11-07 21:53:00','rafael',161,6717,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa) VALUES (?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(457,'mod/app_ventas/index.php','2024-11-07 21:54:00','rafael',161,6732,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa, id_mecanico) VALUES (?,?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa$_SeparadorCampos_$id_mecanico\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(458,'mod/app_ventas/index.php','2024-11-07 21:54:00','rafael',161,6732,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa, id_mecanico) VALUES (?,?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa$_SeparadorCampos_$id_mecanico\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(459,'mod/app_ventas/index.php','2024-11-07 21:54:00','rafael',161,6732,'<?php\n\nfunction calcularTotalVenta($id, $returnArr = \"\") {\n    $venta = PCO_EjecutarSQL(\"\n        SELECT SUM(precio * cantidad) as total, SUM(precio * iva/100) iva\n        FROM app_ventas_detalle\n        WHERE id_venta = \'$id\' GROUP BY id_venta\n    \")->fetch();\n    $total = $venta[\"total\"] ? $venta[\"total\"] : 0;\n    $iva = $venta[\"iva\"] ? $venta[\"iva\"] : 0;\n    PCO_EjecutarSQLUnaria(\"UPDATE app_ventas SET total = $total, iva = $iva WHERE id = $id \");\n    if($returnArr)\n        return $venta;\n    return \'\"total\": \' . $total . \', \"iva\": \' . $iva;\n}\n\nif($PCO_Accion == \"VENTA_ingresarRealizarVenta\") {\n    $ventaAbierta = PCO_EjecutarSQL(\"\n        SELECT id, id_cliente, total, iva, placa\n        FROM app_ventas\n        WHERE id=\'$PCO_Valor\'\n    \")->fetch();\n    /*if (!$ventaAbierta[\"id\"]) {\n        \n        $ventaAbierta = PCO_EjecutarSQL(\"\n            SELECT *\n            FROM app_ventas\n            WHERE estado = 0 ORDER BY id limit 1\n        \")->fetch();   \n    }*/\n\n    $id_venta = $ventaAbierta[\"id\"] ? $ventaAbierta[\"id\"] : \"\";\n    if($id_venta) {\n        $total = number_format($ventaAbierta[\"total\"], 2);\n        $iva = number_format($ventaAbierta[\"iva\"], 2);\n        $id_cliente = $ventaAbierta[\"id_cliente\"];\n    }\n\n    PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n}\n\nif($PCO_Accion == \"VENTA_agregarProductoCrearOC\") {\n\n    if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        $todayMysql = date(\"Y-m-d H:i:s\");\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario, fecha, placa, id_mecanico) VALUES (?,?,?,?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$todayMysql$_SeparadorCampos_$placa$_SeparadorCampos_$id_mecanico\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    }\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id, 1);\n        \n        $total = number_format($result[\"total\"], 2);\n        $iva = number_format($result[\"iva\"], 2);\n        $id_venta = $id;\n        PCO_CargarFormulario(8, 1, \"id\", $id_venta);\n    }\n}\n\nif($PCO_Accion == \"VENTA_agregarProducto\") {\n\n    /* if(!$id) {\n        //crear cliente en caso de que no llegue id_cliente\n        if(!$id_cliente) {\n            PCO_EjecutarSQLUnaria(\"INSERT INTO app_clientes (nombre_completo, numero_documento, telefono) VALUES (?,?,?) \",\n                \"$nombre_completo$_SeparadorCampos_$numero_documento$_SeparadorCampos_$telefono\"\n            );\n            $id_cliente = PCO_ObtenerUltimoIDInsertado();\n        }\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas (id_cliente, usuario) VALUES (?,?) \", \"$id_cliente$_SeparadorCampos_$PCOSESS_LoginUsuario\");\n        $id = PCO_ObtenerUltimoIDInsertado();\n    } */\n    $producto = PCO_EjecutarSQL(\"\n        SELECT id, precio_venta, iva, inventario\n        FROM app_productos\n        WHERE id = \'$id_producto\'\n    \")->fetch();\n    if($producto[\"id\"]) {\n        $existe = PCO_EjecutarSQL(\"\n            SELECT count(id)\n            FROM app_ventas_detalle\n            WHERE id_venta = $id AND id_producto = \'$id_producto\'\n        \")->fetchColumn();\n        if($existe > 0) {\n            print_r(\'{\"success\": false, \"msg\": \"El producto ya se ha ingresado\"}\');\n            die();\n        }\n        if($producto[\"inventario\"] < $cantidad) {\n            print_r(\'{\"success\": false, \"msg\": \"La cantidad digitada supera la del invetario\"}\');\n            die();\n        }\n        $inventarioNew = $producto[\"inventario\"] - $cantidad;\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"INSERT INTO app_ventas_detalle (id_venta, id_producto, cantidad, precio, iva) VALUES (?,?,?,?,?) \", \n            \"$id$_SeparadorCampos_$id_producto$_SeparadorCampos_$cantidad$_SeparadorCampos_\" . $producto[\"precio_venta\"] . \"$_SeparadorCampos_\" . $producto[\"iva\"]);\n        $result = calcularTotalVenta($id);\n        print_r(\'{\"success\": true, \"id\": \' . $id . \', \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se ha encontrado el producto seleccionado\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_eliminarProducto\") {\n\n    if($id_venta_detalle && $id_venta) {\n        $producto = PCO_EjecutarSQL(\"\n            SELECT p.inventario, vd.cantidad, p.id\n            FROM app_ventas_detalle vd, app_productos p\n            WHERE vd.id_producto = p.id AND vd.id = \'$id_venta_detalle\'\n        \")->fetch();\n        //Restablecemos el inventario\n        $inventarioNew = $producto[\"inventario\"] + $producto[\"cantidad\"];\n        PCO_EjecutarSQLUnaria(\"UPDATE app_productos SET inventario = $inventarioNew WHERE id = \" . $producto[\"id\"]);\n        PCO_EjecutarSQLUnaria(\"DELETE FROM app_ventas_detalle WHERE id_venta = $id_venta AND id = $id_venta_detalle\");\n        $result = calcularTotalVenta($id_venta);\n        print_r(\'{\"success\": true, \"msg\": \"Se ha eliminado el producto exitosamente\", \' . $result . \'}\');\n        die();\n    }\n    print_r(\'{\"success\": false, \"msg\": \"No se pudo eliminar el producto\"}\');\n    die();\n}\n\nif($PCO_Accion == \"VENTA_imprimirFactura\") {\n\n    //sleep(2);\n    // echo \"$PCO_Valor\";\n    if($PCO_Valor)\n        $id = $PCO_Valor;\n    if($id) {\n        include_once \"imprimirFactura.php\";\n    }\n}','A'),(460,'core_formulario[11].javascript','2024-11-07 22:15:00','rafael',11,182,'function FrmAutoRun()\n    {\n       \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }','B'),(461,'core_formulario[11].javascript','2024-11-07 22:26:00','rafael',30,1102,'function FrmAutoRun()\n    {\n       \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }\n\nfunction eliminar() {\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EGRESO_eliminarEgreso&idAFP=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:11:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el egreso\");\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Hubo un error eliminando el egreso\");\n        //PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}','B'),(462,'core_formulario[11].javascript','2024-11-07 22:26:00','rafael',30,1099,'function FrmAutoRun()\n    {\n       \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }\n\nfunction eliminar() {\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EGRESO_eliminarEgreso&id=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:11:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el egreso\");\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Hubo un error eliminando el egreso\");\n        //PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}','B'),(463,'core_formulario[11].javascript','2024-11-07 22:26:00','rafael',30,1105,'function FrmAutoRun()\n    {\n       \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }\n\nfunction eliminar() {\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EGRESO_eliminarEgreso&idEgreso=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:11:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el egreso\");\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Hubo un error eliminando el egreso\");\n        //PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}','B'),(464,'core_formulario[11].javascript','2024-11-07 22:26:00','rafael',29,1097,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }\n\nfunction eliminar() {\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EGRESO_eliminarEgreso&idEgreso=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:11:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el egreso\");\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Hubo un error eliminando el egreso\");\n        //PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}','B'),(465,'mod/app/index.php','2024-11-07 22:30:00','rafael',18,405,'<?php\n\nif($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n    //include \'dashboard_desktop.php\';\n}\n\n\n/*if($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n\n}*/\n\nif($PCO_Accion == \"EGRESO_eliminarEgreso\") {\n    PCO_EjecutarSQLUnaria(\"DELETE FROM app_egresos WHERE id = \'$idEgreso\' \");\n    echo $existeRegistro;\n    die();\n}','A'),(466,'mod/app/index.php','2024-11-07 22:30:00','rafael',18,391,'<?php\n\nif($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n    //include \'dashboard_desktop.php\';\n}\n\n\n/*if($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n\n}*/\n\nif($PCO_Accion == \"EGRESO_eliminarEgreso\") {\n    PCO_EjecutarSQLUnaria(\"DELETE FROM app_egresos WHERE id = \'$idEgreso\' \");\n    echo 1;\n    die();\n}','A'),(467,'mod/app/index.php','2024-11-07 22:31:00','rafael',18,391,'<?php\n\nif($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n    //include \'dashboard_desktop.php\';\n}\n\n\n/*if($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n\n}*/\n\nif($PCO_Accion == \"EGRESO_eliminarEgreso\") {\n    PCO_EjecutarSQLUnaria(\"DELETE FROM app_egresos WHERE id = \'$idEgreso\' \");\n    echo 1;\n    die();\n}','A'),(468,'mod/app/index.php','2024-11-07 22:31:00','rafael',18,391,'<?php\n\nif($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n    //include \'dashboard_desktop.php\';\n}\n\n\n/*if($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n\n}*/\n\nif($PCO_Accion == \"EGRESO_eliminarEgreso\") {\n    PCO_EjecutarSQLUnaria(\"DELETE FROM app_egresos WHERE id = \'$idEgreso\' \");\n    echo 0;\n    die();\n}','A'),(469,'mod/app/index.php','2024-11-07 22:31:00','rafael',18,391,'<?php\n\nif($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n    //include \'dashboard_desktop.php\';\n}\n\n\n/*if($PCO_Accion == \"PCO_VerMenu\" && $PCOSESS_LoginUsuario != \"\" && $PCOSESS_SesionAbierta )\n{\n\n}*/\n\nif($PCO_Accion == \"EGRESO_eliminarEgreso\") {\n    PCO_EjecutarSQLUnaria(\"DELETE FROM app_egresos WHERE id = \'$idEgreso\' \");\n    echo 0;\n    die();\n}','A'),(470,'core_formulario[11].javascript','2024-11-07 22:32:00','rafael',29,1093,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }\n\nfunction eliminar() {\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EGRESO_eliminarEgreso&idEgreso=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(() => { \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:11:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el egreso\");\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Hubo un error eliminando el egreso\");\n        //PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}','B'),(471,'core_formulario[11].javascript','2024-11-07 22:32:00','rafael',29,1081,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n		\n    }\n\nfunction eliminar() {\n    const respEliminar = PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EGRESO_eliminarEgreso&idEgreso=\' + document.FRMBASEINFORME.PCO_Valor.value);\n    if(respEliminar == 0) {\n        setTimeout(() => { \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:11:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el egreso\");\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Hubo un error eliminando el egreso\");\n        //PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}','B'),(472,'core_formulario[8].javascript','2024-11-07 22:35:00','rafael',241,8717,'const { \n    id_cliente, id_producto, cantidad, numero_documento, telefono, nombre_completo, \n    id, idClienteDB, total_fake, iva_fake, dinero_entregado, devuelta, tipo_venta, id_mecanico, placa, tipo_pago\n} = document.datos;\n\nconst lavado = 1;\nconst producto = 2;\nconst servicio = 3;\n\nconst formatter = (n, d = 2) => new Intl.NumberFormat(\'es-MX\').format(n);\n\nfunction FrmAutoRun()\n    {\n        document.title = \"Realizar venta\";\n        $(\'#PCOContenedor_placa\').hide();\n        $(\'#PCOContenedor_id_mecanico\').hide();\n        $(\'#PCOContenedor_factura_pagada\').hide();\n        $(\'#PCOContenedor_firma\').hide();\n        if($(\'#id\').val()) {\n            //$(\'#add_product\').hide();\n            $(\'#PCOContenedor_clientesSubForm\').hide();\n            $(\'#id_cliente\').val(idClienteDB.value);\n            PCOJS_ActualizarComboBox(\'id_cliente\');\n            actualizarInforme();\n        }\n        else {\n            $(\'#finalizar_venta\').hide();\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeCliente(){\n    $(\'#PCOContenedor_placa\').hide();\n    if($(\'#id_cliente\').val() == 1) {\n        $(\'#PCOContenedor_placa\').show();\n    }\n}\n\nfunction cargarDatosFE(resp) {\n\n    const { total, iva } = resp;\n    total_fake.value = formatter(total).replace(\'$\',\'\');\n    iva_fake.value = formatter(iva).replace(\'$\',\'\');\n    if(!id.value && resp.id)\n        id.value = resp.id;\n    actualizarInforme();\n}\n\nfunction agregarProducto() {\n    if(validarDatosCompra()) {\n        if(!id.value) {\n            document.datos.PCO_Accion.value = \'VENTA_agregarProductoCrearOC\';\n            document.datos.Precarga_EstilosBS.value = 1;\n            document.datos.Presentar_FullScreen.value = 0;\n            document.datos.target = \'_self\';\n        	document.datos.submit();\n        }\n        else {\n            const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n                \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_agregarProducto\' +\n                    \'&id=\' + id.value + \n                    \'&id_cliente=\' + id_cliente.value +\n                    \'&id_producto=\' + id_producto.value +\n                    \'&cantidad=\' + cantidad.value +\n                    \'&nombre_completo=\' + nombre_completo.value +\n                    \'&telefono=\' + telefono.value +\n                    \'&numero_documento=\' + numero_documento.value\n                )\n            );\n            if(resp.success) {\n                cargarDatosFE(resp);\n                $(\'#finalizar_venta\').show();\n            }\n            else {\n                PCOJS_MostrarMensaje(\"Aviso del sistema\", resp.msg);\n            }\n        }\n    }\n}\n\nfunction editProduct(){\n    PCOJS_MostrarMensaje(\"Editar producto\", PCO_ObtenerContenidoAjax(0, \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:5:0&id=\' + id.value));\n}\n\nfunction finalizarCompra() {\n    if(dinero_entregado.value < total_fake.value) {\n        PCOJS_MostrarMensaje(\"Editar producto\", \"El valor a pagar es menor al total!\");\n        return;\n    }\n    //Actualiza\n        /*document.datos.PCO_Accion.value = \'PCO_ActualizarDatosFormulario\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n    //Abre la venta para imprimirla\n        /*document.datos.PCO_Accion.value = \'VENTA_imprimirFactura\';\n        document.datos.id_registro_datos.value = id.value;\n        document.datos.Precarga_EstilosBS.value = 0;\n        document.datos.Presentar_FullScreen.value = 1;\n    	document.datos.target = \'_blank\';\n    	document.datos.submit();*/\n\n    document.datos.PCO_Accion.value=\'PCO_ActualizarDatosFormulario\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n}\n\nfunction actualizarInforme() {\n    $(\'#informeCompra\').html(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:11:0&id=\' + id.value)\n    );\n}\n\nfunction eliminar_producto() {\n    const resp = JSON.parse(PCO_ObtenerContenidoAjax(0,\n        \'index.php\', \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=VENTA_eliminarProducto\' +\n            \'&id_venta=\' + id.value +\n            \'&id_venta_detalle=\' + document.FRMBASEINFORME.PCO_Valor.value\n        )\n    );\n    cargarDatosFE(resp);\n}\n\nfunction validarDatosCompra() {\n    if(!id_cliente.value && !nombre_completo.value && !numero_documento.value && !telefono.value && id_cliente.value != 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar o ingresar un cliente!\");\n        return false;\n    }\n    if(!cantidad.value || isNaN(cantidad.value) || cantidad.value < 1) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una cantidad válida!\");\n        return false;\n    }\n    if(!id_producto.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un producto\");\n        return false;\n    }\n    if(id_cliente.value == 1 && !placa.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes ingresar una placa\");\n        return false;\n    }\n    if(tipo_venta.value == servicio && !id_mecanico.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mecánico\");\n        return false;\n    }\n    return true;\n}\n\nconst convertToInt = (n) => parseInt(n.replace(/,/g, \"\"));\n\nfunction calcularDevuelta() {\n    devuelta.value = \'\';\n    if(dinero_entregado.value && total_fake.value) {\n        dinero_entregado.value = dinero_entregado.value.replace(/\\D/g, \"\")\n            .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n        const diff = convertToInt(dinero_entregado.value) - convertToInt(total_fake.value);\n        //console.log({diff});\n        devuelta.value = formatter(diff).replace(\'$\', \'\');\n    }\n}\n/*\n        $(event.target).val(function (index, value ) {\n            return value.replace(/\\D/g, \"\")\n                        .replace(/([0-9])([0-9]{2})$/, \'$1.$2\')\n                        .replace(/\\B(?=(\\d{3})+(?!\\d)\\.?)/g, \",\");\n*/\n\nconst origenListaOpciones = ({ PCO_TablaConsulta, PCO_ListaCamposRetorno, PCO_ListaCamposBusqueda, PCO_CondicionFiltrado }) => ({\n      values: \"a, b, c\",\n      ajax: {\n        url: \"index.php\",\n        type: \"POST\",\n        dataType: \"json\",\n        data: {\n          q: \"{{{q}}}\",\n          PCO_Accion: \"PCO_ObtenerOpcionesAjaxSelect\",\n          Presentar_FullScreen: \"1\",\n          PCO_TablaConsulta,\n          PCO_ListaCamposRetorno,\n          PCO_ListaCamposBusqueda,\n          PCO_CondicionFiltrado\n        }\n      },\n      minLength: 3,\n      locale: {\n        emptyTitle: \"Seleccione y digite para buscar\",\n        statusInitialized: \"Empiece a digitar para recuperar registros\",\n        statusSearching: \"Cargando...\",\n        currentlySelected: \"Actualmente seleccionado(s):\",\n        errorText: \"No se pueden recuperar registros\",\n        statusTooShort: \"Ingrese al menos tres caracteres\",\n        statusNoResults: \"No se encuentran resultados\",\n        searchPlaceholder: \"Buscar...\"\n      },\n      log: 0,\n      preprocessData: (data) => data.length ? data.map(({ T: text, V: value, S: subtext, I: icon }) => ({\n        text,\n        value,\n        data: {\n          subtext,\n          icon,\n        }\n        })) : []\n});\n\nfunction onChangeTipoProducto() {\n    \n    $(\'#PCOContenedor_id_mecanico\').hide();\n    if(tipo_venta.value == servicio)\n        $(\'#PCOContenedor_id_mecanico\').show();\n\n    // const filtradoProductos = tipo_venta.value == 2 ? \" AND inventario>0\" : \"\";\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            PCO_CondicionFiltrado: \"AND tipo_producto=\"+tipo_venta.value,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n}\n\nfunction onchangeTipoPago() {\n    $(\'#PCOContenedor_factura_pagada\').hide();\n    $(\'#PCOContenedor_firma\').hide();\n    if(tipo_pago.value == \"Credito\") {\n        $(\'#PCOContenedor_factura_pagada\').show();\n        $(\'#PCOContenedor_firma\').show();\n    }\n}\n\n/* $(document).ready(() => {\n    $(\"#id_producto\").selectpicker().ajaxSelectPicker(\n        origenListaOpciones({ \n            PCO_TablaConsulta: \"app_productos\",\n            PCO_ListaCamposRetorno: \"id,CONCAT(codigo,\' | \',nombre,\' | \',precio_venta)\",\n            PCO_ListaCamposBusqueda: \"codigo,nombre\",\n            // PCO_CondicionFiltrado: \"tipo_producto=\"+$(\'#tipo_venta\').val()+filtradoProductos,\n        }));\n    $(\"#id_producto\").trigger(\"change\");\n});*/','B'),