<?php
include_once '../conexion.php';

// Obtener los datos combinados del cuerpo de la solicitud
$data = json_decode(file_get_contents("php://input"), true);

// Iniciar la transacción
mysqli_autocommit($conn, false);
// Variable para verificar el estado de la transacción
$transaccionExitosa = true;
$errorMensaje = "";

try {
     // Acceder a los valores individuales de los datos combinados
     $cEmpresa_Id = $data['Empresa_id'];
     $cDocFiscal_id = $data['DocFiscal_Id'];
     $cMotivoGuia = $data['Motivo_Guia'];
     $cNSerie = $data['NSerie'];
     $cNDocumento = $data['NDocumento'];
     $cFechaEmision = $data['Fecha_Emision'];
     $cFechaTraslado = $data['Fecha_Traslado'];
     $cDirPartida = $data['Direccion_Partida'];
     $cUbigeoPartida = $data['Ubigeo_Partida'];
     $cTipDocIdentDest = $data['Tipo_DocIdentDest'];
     $cDocIdentidadDest = $data['DocIdentidad'];
     $cNombre = $data['Razon_Social'];
     $cDirDestino = $data['Direccion_Destino'];
     $cUbigeoDestino = $data['Ubigeo_Destino'];
     $cPlaca = $data['Placa'];
     $cPlaca2 = $data['Placa2'];
     $cMarca = $data['Marca'];
     $cNInscripcion = $data['NInscripcion'];
     $cDNIConductor = $data['DNI_Conductor'];
     $cNombreConductor = $data['Nombre_Conductor'];
     $cApellidosConductor = $data['Apellidos_Conductor'];
     $cNLicencia = $data['NLicencia'];
     $cTipDocIdentTransp = $data['Tipo_DocTransp'];
     $cDocIdentidadTransp = $data['DocIdentTransp'];
     $cNombreTransp = $data['Nombre_Transp'];
     $cAfectIGV = $data['Afecto_IGV'];
     $cP_IGV = $data['pIGV'];
     $cIgv = $data['IGV'];
     $cAfecto = $data['Valor_Venta'];
     $cInafecto = $data['Inafecto'];
     $cExonerado = $data['Exonerada'];
     $cTotal = $data['Total_Pagar'];
     $cAfectaKardex = $data['Afecta_Kardex'];
     $cDestinatario_Id = $data['Destinatario_Id'];
     $cUndTransp_id = $data['UndTransp_Id'];
     $cConductor_Id = $data['Conductor_Id'];
     $cTransportista_Id = $data['Transportista_Id'];
     $cRemitente_Id = $data['Remitente_Id'];
     $cTipoDocRemitente = $data['Tipo_DocRemitente'];
     $cDocIdentRemitente = $data['DocIdentRemitente'];
     $cNombreRemitente = $data['Nombre_Remitente'];
     $cNInscripcion2 = $data['NInscripcion2'];
     $cTraslado = $data['Traslado'];
     $cSedeDest = $data['SedeDesitno_Id'];
     $cAlamcenDest = $data['AlmDestino_Id'];
     $cSucursal_Id = $data['Sucursal_Id'];
     $cObservacion = $data['Observacion'];
     $cDocReferencial = $data['DocReferencial'];
     $cConfigVehicular = $data['ConfigVehicular'];
     $cScop = $data['Scop'];
     $iIdGuiaRT_M = $data['IdGuiaRT_M'];
     $cEstado = $data['Estado'];
          
    if ($cEstado == 'NUEVO') {

        // Ejemplo de inserción en la tabla productos
        $queryCabecera = "INSERT INTO guiaremision(empresa_id, docfiscal_id, motivoguia_id, nserie, ndocumento, fecha_emision, fecha_traslado,
        direccion_partida, ubigeo_partida, tipodoc_cliente, ndoc_cliente, razonsocial, direccion_llegada,  
        ubigeo_llegada, placa, placa2, marca, nroinscripcion, dniconductor, nombreconductor, apellidosconductor, licencia, tipodoc_transportista,
        ndoc_transportista, nombretransportista, afecto_igv, porcentaje_igv, igv, afecto, inafecto, exonerado, total,
        afecta_kardex, cliente_id, unidadtransp_id, conductor_id, transportista_id, remitente_id, tipo_docremitente, ndoc_remitente,
        nombre_remitente, nroinscripcion2, trasladado, sededestino_id, almdestino_id, sucursal_id, observacion, documento_referencial, confvehicular, scop)
        VALUES('$cEmpresa_Id', '$cDocFiscal_id', '$cMotivoGuia', '$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado',
        '$cDirPartida', '$cUbigeoPartida', '$cTipDocIdentDest', '$cDocIdentidadDest', '$cNombre', '$cDirDestino', '$cUbigeoDestino', '$cPlaca', '$cPlaca2',
        '$cMarca', '$cNInscripcion', '$cDNIConductor', '$cNombreConductor', '$cApellidosConductor', '$cNLicencia', '$cTipDocIdentTransp', '$cDocIdentidadTransp', 
        '$cNombreTransp', '$cAfectIGV', '$cP_IGV', '$cIgv', '$cAfecto', '$cInafecto', '$cExonerado', '$cTotal', '$cAfectaKardex', '$cDestinatario_Id', 
        '$cUndTransp_id', '$cConductor_Id', '$cTransportista_Id', '$cRemitente_Id', '$cTipoDocRemitente', '$cDocIdentRemitente', '$cNombreRemitente', '$cNInscripcion2',
        '$cTraslado', '$cSedeDest', '$cAlamcenDest', '$cSucursal_Id', '$cObservacion', '$cDocReferencial', '$cConfigVehicular', '$cScop')"; 

        $resultadoCabecera = mysqli_query($conn, $queryCabecera);
        if (!$resultadoCabecera) {
            throw new Exception(mysqli_error($conn));
        }

        // Obtener el ID del último registro insertado en la cabecera de Guia
        $cGuia_Id = mysqli_insert_id($conn);       

        // ACTUALIZA REGISTRO DE SERIES
        $query = "SELECT numero FROM series_sucursal WHERE empresa_id = $cEmpresa_Id AND sucursal_id = $cSucursal_Id 
           AND nserie = '$cNSerie' FOR UPDATE";
        $result = mysqli_query($conn, $query);
        if (!$result) {
            throw new Exception(mysqli_error($conn));
        }

        $queryUPD = "UPDATE series_sucursal SET numero = numero + 1 WHERE empresa_id = $cEmpresa_Id AND sucursal_id = $cSucursal_Id 
          AND nserie = '$cNSerie'";
        $resultUPD = mysqli_query($conn, $queryUPD);  
        if (!$resultUPD) {
            throw new Exception(mysqli_error($conn));
        }

        // Ejemplo de inserción en la tabla detalle
        foreach ($data['detalle'] as $detalle_) {
            $cOperacion = 'GRT';
            $cRazSoc = $cNombre;
            $cAlmacen_Id = $detalle_['almacen_id'];
            $cProducto_Id = $detalle_['producto_id'];
            $cBonificacion = $detalle_['bonificacion'];
            $cCodProd = $detalle_['codigo_producto'];
            $cCantidad = $detalle_['cantidad'];
            $cRecogido = $detalle_['recogido'];
            $cCapacidad_Precio = $detalle_['capacidad_precio'];
            $cDescrip_Precio = $detalle_['descrip_precio'];
            $cPrecio_Bruto = $detalle_['precio_bruto'];
            $cDescuento = $detalle_['descuento'];
            $cPrecio = $detalle_['precio'];
            $cPrecioigv = $detalle_['precioigv'];
            $cIgv = $detalle_['igv'];
            $cPercepcion = $detalle_['percepcion'];
            $cAfecto = $detalle_['afecto'];
            $cInafecto = $detalle_['inafecto'];
            $cExonerado = $detalle_['exonerado'];
            $cSubtotal = $detalle_['subtotal'];
            $cSubtotaligv = $detalle_['subtotaligv'];
            $cMargen = $detalle_['margen'];
            $cCosto = $detalle_['costo'];
            $cPeso = $detalle_['peso'];
            $cPorcentaje_Igv = $detalle_['porcentaje_igv'];
            $cIcbp = $detalle_['icbp'];
            $cDescripcion_Servicio = $detalle_['descripcion_servicio'];
            $cVencimiento = $detalle_['vencimiento'];
            $cLote = $detalle_['lote'];
            $cAbrev_Universal = $detalle_['abrev_universal'];
            $cUM_Peso = $detalle_['um_peso'];
            $cAbrev_UnivPeso = $detalle_['abrev_univpeso'];
            $cIdDocFis = $cDocFiscal_id;
            $cCategoria_Id = $detalle_['categoria_id'];
            $cMarca_Id = $detalle_['marca_id'];
            $cModelo_Id = $detalle_['modelo_id'];

            $queryDetalle = "INSERT INTO detguiaremision(guiart_id, nserie, ndocumento, fecha_emision, fecha_traslado, almacen_id, producto_id,
            bonificacion, codigo_producto, cantidad, recogido, capacidad_precio, descrip_precio, precio_bruto, descuento, precio, 
            precioigv, igv, percepcion, afecto, inafecto, exonerado, subtotal, subtotaligv, margen, costo, peso, 
            porcentaje_igv, icbp, descripcion_servicio, vencimiento, lote, abrev_universal, um_peso, abrev_univpeso, docfiscal_id, categoria_id, marca_id, modelo_id,
            empresa_id, sucursal_id) 
            VALUES('$cGuia_Id', '$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado', '$cAlmacen_Id', '$cProducto_Id', 
            '$cBonificacion', '$cCodProd', '$cCantidad', '$cRecogido', '$cCapacidad_Precio', '$cDescrip_Precio', '$cPrecio_Bruto', '$cDescuento', '$cPrecio', 
            '$cPrecioigv', '$cIgv', '$cPercepcion', '$cAfecto', '$cInafecto', '$cExonerado', '$cSubtotal', '$cSubtotaligv', '$cMargen', '$cCosto', '$cPeso', 
            '$cPorcentaje_Igv', '$cIcbp', '$cDescripcion_Servicio', '$cVencimiento', '$cLote', '$cAbrev_Universal', '$cUM_Peso', '$cAbrev_UnivPeso', '$cDocFiscal_id', '$cCategoria_Id', '$cMarca_Id', '$cModelo_Id',
            '$cEmpresa_Id', '$cSucursal_Id')";
            
            $resultadoDetalle = mysqli_query($conn, $queryDetalle);
            if (!$resultadoDetalle) {
                throw new Exception(mysqli_error($conn));
            }

            //KARDEX
            if ($cAfectaKardex == 1) {
               $queryKardex = "INSERT INTO kardex(nserie, ndocumento, fecha_emision, fecha_traslado, operacion, producto_id, codigo_producto, entrada, costo, 
               salida, precio_venta, recogido, unidad_medida, vencimiento, lote, transito, razon_social, observacion, docfiscal_id, categoria_id, marca_id, modelo_id,
               capacidad_precio, empresa_id, sucursal_id, almacen_id, compra_id, guiart_id)
               VALUES('$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado', '$cOperacion', '$cProducto_Id', '$cCodProd', 0, '$cCosto',
               ('$cCantidad'*'$cCapacidad_Precio'), '$cPrecioigv', ('$cRecogido'*'$cCapacidad_Precio')*-1, '$cDescrip_Precio', '$cVencimiento', '$cLote', 0, '$cRazSoc', '$cObservacion',
               '$cIdDocFis', '$cCategoria_Id', '$cMarca_Id', '$cModelo_Id', '$cCapacidad_Precio', '$cEmpresa_Id', '$cSucursal_Id', '$cAlmacen_Id', 0, '$cGuia_Id')";

                $resultadoKardex = mysqli_query($conn, $queryKardex);
                if (!$resultadoKardex) {
                    throw new Exception(mysqli_error($conn));
                }
                
                //CUANDO SE TRASLADA DE UN ALMACEN A OTRO
                if ($cTraslado == 1) {
                    $queryKardexT = "INSERT INTO kardex(nserie, ndocumento, fecha_emision, fecha_traslado, operacion, producto_id, codigo_producto, entrada, costo, 
                    salida, precio_venta, recogido, unidad_medida, vencimiento, lote, transito, razon_social, observacion, docfiscal_id, categoria_id, marca_id, modelo_id,
                    capacidad_precio, empresa_id, sucursal_id, almacen_id, compra_id, guiart_id)
                    VALUES('$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado', '$cOperacion', '$cProducto_Id', '$cCodProd', ('$cCantidad'*'$cCapacidad_Precio'), '$cPrecioigv',
                    0, 0, ('$cRecogido'*'$cCapacidad_Precio'), '$cDescrip_Precio', '$cVencimiento', '$cLote', 0, '$cRazSoc', '$cObservacion', '$cIdDocFis', '$cCategoria_Id', '$cMarca_Id', '$cModelo_Id',
                    '$cCapacidad_Precio', '$cEmpresa_Id', '$cSedeDest', '$cAlamcenDest', 0, '$cGuia_Id')"; 

                    $resultadoKardexT = mysqli_query($conn, $queryKardexT);
                    if (!$resultadoKardexT) {
                        throw new Exception(mysqli_error($conn));
                    }
                    
                    // INSERT kardex_serieprod desde del tempkardex_serieprod
                    /*$querySerieProductoT = "INSERT INTO kardex_serieprod (producto_id, serie, cantidad, movimiento_id, operacion, nserie, ndocumento, empresa_id, sucursal_id, almacen_id) 
                        SELECT producto_id, serie, cantidad*-1, '$cGuia_Id', operacion, nserie, ndocumento, empresa_id, '$cSedeDest', '$cAlamcenDest' FROM tempkardex_serieprod 
                        WHERE nserie = '$cNSerie' AND ndocumento = '$cNDocumento' AND operacion = '$cOperacion'";
                    
                    $resultadoSerieProductoT = mysqli_query($conn, $querySerieProductoT);
                    if (!$resultadoSerieProductoT) {
                        throw new Exception(mysqli_error($conn));
                    }*/
                    
                };
                
                // INSERT kardex_serieprod desde del tempkardex_serieprod
                /*$querySerieProducto = "INSERT INTO kardex_serieprod (producto_id, serie, cantidad, movimiento_id, operacion, nserie, ndocumento, empresa_id, sucursal_id, almacen_id) 
                    SELECT producto_id, serie, cantidad, '$cGuia_Id', operacion, nserie, ndocumento, empresa_id, sucursal_id, almacen_id FROM tempkardex_serieprod 
                    WHERE nserie = '$cNSerie' AND ndocumento = '$cNDocumento' AND operacion = '$cOperacion'";
            
                $resultadoSerieProducto = mysqli_query($conn, $querySerieProducto);        
                if (!$resultadoSerieProducto) {
                   throw new Exception(mysqli_error($conn));
                }*/
                
	        }; 
        }
        
        // Ejemplo de inserción en la tabla series
        foreach ($data['series'] as $serie) {
            $cSerie = $serie['serie'];
            $cPlanVta = $serie['plan_venta'];
            $cModalidadVta = $serie['modalidad_venta'];
            $cNumCelular = $serie['numero_celular'];
            $cCantidad = $serie['salida'];
            $cIdProducto = $serie['producto_id'];
            $cAlmacenId = $serie['almacen_id'];
        
            $querySerieProducto = "INSERT INTO kardex_serieprod (producto_id, serie, plan_venta, modalidad_venta, numero_celular, cantidad, movimiento_id, operacion, nserie, ndocumento, fecha,
                                   empresa_id, sucursal_id, almacen_id)
                VALUES('$cIdProducto', '$cSerie', '$cPlanVta', '$cModalidadVta', '$cNumCelular', '$cCantidad', '$cGuia_Id', 'GRT', '$cNSerie', '$cNDocumento', '$cFechaEmision',
                       '$cEmpresa_Id', '$cSucursal_Id', '$cAlmacenId')";
            $resultadoSerieProducto = mysqli_query($conn, $querySerieProducto);        
        
            if (!$resultadoSerieProducto) {
                throw new Exception(mysqli_error($conn));
            }
                    
            //CUANDO SE TRASLADA DE UN ALMACEN A OTRO
            if ($cTraslado == 1) {
                $querySerieProductoT = "INSERT INTO kardex_serieprod (producto_id, serie, plan_venta, modalidad_venta, numero_celular, cantidad, movimiento_id, operacion, nserie, ndocumento, fecha,
                                        empresa_id, sucursal_id, almacen_id)
                    VALUES('$cIdProducto', '$cSerie', '$cPlanVta', '$cModalidadVta', '$cNumCelular', '$cCantidad'*-1, '$cGuia_Id', 'GRT', '$cNSerie', '$cNDocumento', '$cFechaEmision',
                           '$cEmpresa_Id', '$cSedeDest', '$cAlamcenDest')";
                $resultadoSerieProductoT = mysqli_query($conn, $querySerieProductoT);        
            
                if (!$resultadoSerieProductoT) {
                    throw new Exception(mysqli_error($conn));
                }
            };
        }

    } elseif ($cEstado == 'MODIFICAR') { 
        $queryUpd_DetGuiaRT = "UPDATE detguiaremision SET IUD = 'D' WHERE guiart_id = $iIdGuiaRT_M";
        $resultadoUpd_DetGuiaRT = mysqli_query($conn, $queryUpd_DetGuiaRT);        
        if (!$resultadoUpd_DetGuiaRT) {
            throw new Exception(mysqli_error($conn));
        }
        
        $queryUpd_Kardex = "UPDATE kardex SET IUD = 'D' WHERE guiart_id = $iIdGuiaRT_M";
        $resultadoUpd_Kardex = mysqli_query($conn, $queryUpd_Kardex);        
        if (!$resultadoUpd_Kardex) {
            throw new Exception(mysqli_error($conn));
        }

        $queryUpd_Kardex_Serie = "UPDATE kardex_serieprod SET IUD = 'D' WHERE movimiento_id = $iIdGuiaRT_M AND operacion = 'GRT'";
        $resultadoUpd_Kardex_Serie = mysqli_query($conn, $queryUpd_Kardex_Serie);        
        if (!$resultadoUpd_Kardex_Serie) {
            throw new Exception(mysqli_error($conn));
        }

        $queryUpd_GuiaRT = "UPDATE guiaremision SET docfiscal_id = '$cDocFiscal_id', motivoguia_id = '$cMotivoGuia', nserie = '$cNSerie', ndocumento = '$cNDocumento',
        fecha_emision = '$cFechaEmision', fecha_traslado = '$cFechaTraslado', direccion_partida = '$cDirPartida', ubigeo_partida = '$cUbigeoPartida', 
        tipodoc_cliente = '$cTipDocIdentDest', ndoc_cliente = '$cDocIdentidadDest', razonsocial = '$cNombre', direccion_llegada = '$cDirDestino',  
        ubigeo_llegada = '$cUbigeoDestino', placa = '$cPlaca', placa2 = '$cPlaca2', marca = '$cMarca', nroinscripcion = '$cNInscripcion', 
        dniconductor = '$cDNIConductor', nombreconductor = '$cNombreConductor', apellidosconductor = '$cApellidosConductor', licencia = '$cNLicencia', tipodoc_transportista = '$cTipDocIdentTransp',
        ndoc_transportista = '$cDocIdentidadTransp', nombretransportista = '$cNombreTransp', afecto_igv = '$cAfectIGV', porcentaje_igv = '$cP_IGV', 
        igv = '$cIgv', afecto = '$cAfecto', inafecto = '$cInafecto', exonerado = '$cExonerado', total = '$cTotal', afecta_kardex = '$cAfectaKardex', 
        cliente_id = '$cDestinatario_Id', unidadtransp_id = '$cUndTransp_id', conductor_id = '$cConductor_Id', transportista_id = '$cTransportista_Id', 
        remitente_id = '$cRemitente_Id', tipo_docremitente = '$cTipoDocRemitente', ndoc_remitente = '$cDocIdentRemitente', nombre_remitente = '$cNombreRemitente', nroinscripcion2 = '$cNInscripcion2',
        trasladado = '$cTraslado', sededestino_id = '$cSedeDest', almdestino_id = '$cAlamcenDest', observacion = '$cObservacion', documento_referencial = '$cDocReferencial', confvehicular = '$cConfigVehicular', scop = '$cScop'
        WHERE id = $iIdGuiaRT_M";
        
        $resultadoUpd_GuiaRT = mysqli_query($conn, $queryUpd_GuiaRT);        
        if (!$resultadoUpd_GuiaRT) {
            throw new Exception(mysqli_error($conn));
        }
           
        // Ejemplo de inserción en la tabla detalle
        foreach ($data['detalle'] as $detalle_) {
            $cOperacion = 'GRT';
            $cRazSoc = $cNombre;
            $cAlmacen_Id = $detalle_['almacen_id'];
            $cProducto_Id = $detalle_['producto_id'];
            $cBonificacion = $detalle_['bonificacion'];
            $cCodProd = $detalle_['codigo_producto'];
            $cCantidad = $detalle_['cantidad'];
            $cRecogido = $detalle_['recogido'];
            $cCapacidad_Precio = $detalle_['capacidad_precio'];
            $cDescrip_Precio = $detalle_['descrip_precio'];
            $cPrecio_Bruto = $detalle_['precio_bruto'];
            $cDescuento = $detalle_['descuento'];
            $cPrecio = $detalle_['precio'];
            $cPrecioigv = $detalle_['precioigv'];
            $cIgv = $detalle_['igv'];
            $cPercepcion = $detalle_['percepcion'];
            $cAfecto = $detalle_['afecto'];
            $cInafecto = $detalle_['inafecto'];
            $cExonerado = $detalle_['exonerado'];
            $cSubtotal = $detalle_['subtotal'];
            $cSubtotaligv = $detalle_['subtotaligv'];
            $cMargen = $detalle_['margen'];
            $cCosto = $detalle_['costo'];
            $cPeso = $detalle_['peso'];
            $cPorcentaje_Igv = $detalle_['porcentaje_igv'];
            $cIcbp = $detalle_['icbp'];
            $cDescripcion_Servicio = $detalle_['descripcion_servicio'];
            $cVencimiento = $detalle_['vencimiento'];
            $cLote = $detalle_['lote'];
            $cAbrev_Universal = $detalle_['abrev_universal'];
            $cUM_Peso = $detalle_['um_peso'];
            $cAbrev_UnivPeso = $detalle_['abrev_univpeso'];
            $cIdDocFis = $cDocFiscal_id;
            $cCategoria_Id = $detalle_['categoria_id'];
            $cMarca_Id = $detalle_['marca_id'];
            $cModelo_Id = $detalle_['modelo_id'];

           /* $queryDetalle = "INSERT INTO detguiaremision(guiart_id, nserie, ndocumento, fecha_emision, fecha_traslado, almacen_id, producto_id,
            bonificacion, codigo_producto, cantidad, recogido, capacidad_precio, descrip_precio, precio_bruto, descuento, precio, 
            precioigv, igv, percepcion, afecto, inafecto, exonerado, subtotal, subtotaligv, margen, costo, peso, 
            porcentaje_igv, icbp, descripcion_servicio, vencimiento, lote, abrev_universal, docfiscal_id, categoria_id, marca_id, modelo_id,
            empresa_id, sucursal_id)  
            VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            $stmtDetalle = mysqli_prepare($conn, $queryDetalle);
            mysqli_stmt_bind_param($stmtDetalle, "sssssssssssssssssssssssssssssssssssssss", $iIdGuiaRT_M, $cNSerie, $cNDocumento, $cFechaEmision, $cFechaTraslado, $cAlmacen_Id, $cProducto_Id, 
                $cBonificdProd, $cCodProd, $cCantidad, $cRecogido, $cCapacidad_Precio, $cDescrip_Precio, $cPrecio_Bruto, $cDescuento, $cPrecio, 
                $cPrecioigv, $cIgv, $cPercepcion, $cAfecto, $cInafecto, $cExonerado, $cSubtotal, $cSubtotaligv, $cMargen, $cCosto, $cPeso, 
                $cPorcentaje_Igv, $cIcbp, $cDescripcion_Servicio, $cVencimiento, $cLote, $cAbrev_Universal, $cIdDocFis, $cCategoria_Id, $cMarca_Id,
                $cModelo_Id, $cEmpresa_Id, $cSucursal_Id);

            if (mysqli_stmt_execute($stmtDetalle)) {
                echo "Detalle insertado correctamente.";
            } else {
                echo "Error en Detalle: " . mysqli_stmt_error($stmtDetalle);
                throw new Exception(mysqli_stmt_error($stmtDetalle));
            }*/

            $queryDetalle = "INSERT INTO detguiaremision(guiart_id, nserie, ndocumento, fecha_emision, fecha_traslado, almacen_id, producto_id,
            bonificacion, codigo_producto, cantidad, recogido, capacidad_precio, descrip_precio, precio_bruto, descuento, precio, 
            precioigv, igv, percepcion, afecto, inafecto, exonerado, subtotal, subtotaligv, margen, costo, peso, 
            porcentaje_igv, icbp, descripcion_servicio, vencimiento, lote, abrev_universal, um_peso, abrev_univpeso, docfiscal_id, categoria_id, marca_id, modelo_id,
            empresa_id, sucursal_id) 
            VALUES('$iIdGuiaRT_M', '$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado', '$cAlmacen_Id', '$cProducto_Id', 
            '$cBonificacion', '$cCodProd', '$cCantidad', '$cRecogido', '$cCapacidad_Precio', '$cDescrip_Precio', '$cPrecio_Bruto', '$cDescuento', '$cPrecio', 
            '$cPrecioigv', '$cIgv', '$cPercepcion', '$cAfecto', '$cInafecto', '$cExonerado', '$cSubtotal', '$cSubtotaligv', '$cMargen', '$cCosto', '$cPeso', 
            '$cPorcentaje_Igv', '$cIcbp', '$cDescripcion_Servicio', '$cVencimiento', '$cLote', '$cAbrev_Universal', '$cUM_Peso', '$cAbrev_UnivPeso', '$cDocFiscal_id', '$cCategoria_Id', '$cMarca_Id', '$cModelo_Id',
            '$cEmpresa_Id', '$cSucursal_Id')";
            
            $resultadoDetalle = mysqli_query($conn, $queryDetalle);
            if (!$resultadoDetalle) {
                throw new Exception(mysqli_error($conn));
            }

            //KARDEX
            if ($cAfectaKardex == 1) {
               $queryKardex = "INSERT INTO kardex(nserie, ndocumento, fecha_emision, fecha_traslado, operacion, producto_id, codigo_producto, entrada, costo, 
               salida, precio_venta, recogido, unidad_medida, vencimiento, lote, transito, razon_social, observacion, docfiscal_id, categoria_id, marca_id, modelo_id,
               capacidad_precio, empresa_id, sucursal_id, almacen_id, compra_id, guiart_id)
               VALUES('$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado', '$cOperacion', '$cProducto_Id', '$cCodProd', 0, '$cCosto',
               ('$cCantidad'*'$cCapacidad_Precio'), '$cPrecioigv', ('$cRecogido'*'$cCapacidad_Precio')*-1, '$cDescrip_Precio', '$cVencimiento', '$cLote', 0, '$cRazSoc', '$cObservacion',
               '$cIdDocFis', '$cCategoria_Id', '$cMarca_Id', '$cModelo_Id', '$cCapacidad_Precio', '$cEmpresa_Id', '$cSucursal_Id', '$cAlmacen_Id', 0, '$iIdGuiaRT_M')";

                $resultadoKardex = mysqli_query($conn, $queryKardex);
                if (!$resultadoKardex) {
                    throw new Exception(mysqli_error($conn));
                }
                
                // INSERT kardex_serieprod desde del tempkardex_serieprod
                $querySerieProducto = "INSERT INTO kardex_serieprod (producto_id, serie, cantidad, movimiento_id, operacion, nserie, ndocumento, empresa_id, sucursal_id, almacen_id) 
                    SELECT producto_id, serie, cantidad, '$cGuia_Id', operacion, nserie, ndocumento, empresa_id, sucursal_id, almacen_id FROM tempkardex_serieprod 
                       WHERE movimiento_id = $iIdGuiaRT_M AND operacion = '$cOperacion'";
                    
                $resultadoSerieProducto = mysqli_query($conn, $querySerieProducto);        
                if (!$resultadoSerieProducto) {
                   throw new Exception(mysqli_error($conn));
                }

                //CUANDO SE TRASLADA DE UN ALMACEN A OTRO
                IF ($cTraslado == 1) {
                    $queryKardexT = "INSERT INTO kardex(nserie, ndocumento, fecha_emision, fecha_traslado, operacion, producto_id, codigo_producto, entrada, costo, 
                    salida, precio_venta, recogido, unidad_medida, vencimiento, lote, transito, razon_social, observacion, docfiscal_id, categoria_id, marca_id, modelo_id,
                    capacidad_precio, empresa_id, sucursal_id, almacen_id, compra_id, guiart_id)
                    VALUES('$cNSerie', '$cNDocumento', '$cFechaEmision', '$cFechaTraslado', '$cOperacion', '$cProducto_Id', '$cCodProd', ('$cCantidad'*'$cCapacidad_Precio'), '$cPrecioigv',
                    0, 0, ('$cRecogido'*'$cCapacidad_Precio'), '$cDescrip_Precio', '$cVencimiento', '$cLote', 0, '$cRazSoc', '$cObservacion', '$cIdDocFis', '$cCategoria_Id', '$cMarca_Id', '$cModelo_Id',
                    '$cCapacidad_Precio', '$cEmpresa_Id', '$cSedeDest', '$cAlamcenDest', 0, '$iIdGuiaRT_M')"; 

                    $resultadoKardexT = mysqli_query($conn, $queryKardexT);
                    if (!$resultadoKardexT) {
                        throw new Exception(mysqli_error($conn));
                    }

                };

	        }; 
        }
        
        // INSERT kardex_serieprod desde del tempkardex_serieprod
        foreach ($data['series'] as $serie) {
            $cSerie = $serie['serie'];
            $cPlanVta = $serie['plan_venta'];
            $cModalidadVta = $serie['modalidad_venta'];
            $cNumCelular = $serie['numero_celular'];
            $cCantidad = $serie['salida'];
            $cIdProducto = $serie['producto_id'];
            $cAlmacenId = $serie['almacen_id'];
            
            $querySerieProducto = "INSERT INTO kardex_serieprod (producto_id, serie, plan_venta, modalidad_venta, numero_celular, cantidad, movimiento_id, operacion, nserie, ndocumento, fecha,
                                   empresa_id, sucursal_id, almacen_id)
                VALUES('$cIdProducto', '$cSerie', '$cPlanVta', '$cModalidadVta', '$cNumCelular', '$cCantidad', '$iIdGuiaRT_M', 'GRT', '$cNSerie', '$cNDocumento', '$cFechaEmision',
                       '$cEmpresa_Id', '$cSucursal_Id', '$cAlmacenId')";
            $resultadoSerieProducto = mysqli_query($conn, $querySerieProducto);
                        
            if (!$resultadoSerieProducto) {
                throw new Exception(mysqli_error($conn));
            }
                    
            //CUANDO SE TRASLADA DE UN ALMACEN A OTRO
            if ($cTraslado == 1) {
                $querySerieProductoT = "INSERT INTO kardex_serieprod (producto_id, serie, plan_venta, modalidad_venta, numero_celular, cantidad, movimiento_id, operacion, nserie, ndocumento, fecha,
                                        empresa_id, sucursal_id, almacen_id)
                    VALUES('$cIdProducto', '$cSerie', '$cPlanVta', '$cModalidadVta', '$cNumCelular', '$cCantidad'*-1, '$iIdGuiaRT_M', 'GRT', '$cNSerie', '$cNDocumento', '$cFechaEmision',
                           '$cEmpresa_Id', '$cSedeDest', '$cAlamcenDest')";
                $resultadoSerieProductoT = mysqli_query($conn, $querySerieProductoT);        
            
                if (!$resultadoSerieProductoT) {
                    throw new Exception(mysqli_error($conn));
                }
            };
        }

        //Elimina Detalle de Venta para Evitar la Duplicidad
        $queryDelGuiaRT = "DELETE FROM detguiaremision WHERE guiart_id = $iIdGuiaRT_M AND IUD = 'D'";
        $resultadoDelGuiaRT = mysqli_query($conn, $queryDelGuiaRT);        
        if (!$resultadoDelGuiaRT) {
           throw new Exception(mysqli_error($conn));
        }

        //Elimina Kardex para Evitar la Duplicidad
	    $queryDelKardex = "DELETE FROM kardex WHERE guiart_id = $iIdGuiaRT_M AND IUD = 'D'";
        $resultadoDelKardex = mysqli_query($conn, $queryDelKardex);        
        if (!$resultadoDelKardex) {
           throw new Exception(mysqli_error($conn));
        }

        //Elimina Kardex Serie para Evitar la Duplicidad
	    $queryDelKardexSerie = "DELETE FROM kardex_serieprod WHERE movimiento_id = $iIdGuiaRT_M AND operacion = 'GRT' AND IUD = 'D'";
        $resultadoDelKardexSerie = mysqli_query($conn, $queryDelKardexSerie);        
        if (!$resultadoDelKardexSerie) {
           throw new Exception(mysqli_error($conn));
        }

        //Elimina Temporal Kardex Serie para Evitar la Duplicidad
	    /*$queryDelTempKardexSerie = "DELETE FROM tempkardex_serieprod WHERE movimiento_id = $iIdVta AND operacion = 'VTA'";
        $resultadoDeTempKardexSerie = mysqli_query($conn, $queryDelTempKardexSerie);        
        if (!$resultadoDeTempKardexSerie) {
           throw new Exception(mysqli_error($conn));
        }*/
    }

    // Confirmar la transacción
    mysqli_commit($conn);
    
} catch (Exception $e) {
    // Revertir la transacción en caso de error
    mysqli_rollback($conn);
    $transaccionExitosa = false;
    $errorMensaje = $e->getMessage();
}

// Cerrar la conexión a la base de datos
mysqli_close($conn);

// Enviar una respuesta al cliente
if ($transaccionExitosa) {
    $response = array();
    //$response = array("ESTADO" => "00", "MENSAJE" => "Los datos se han guardado correctamente");
    if ($cEstado == 'NUEVO') {
        if ($cGuia_Id > 0) {
            //$response = array();
            $response['ESTADO'] = "00";
            $response['ID'] = $cGuia_Id;
            $response['MENSAJE'] = "Los datos se han guardado correctamente";
        } else {
            //$response = array();
            $response['ESTADO'] = "11";
            $response['ID'] = 0;
            $response['MENSAJE'] = "Error al guardar la información: " . $errorMensaje;
        }
    } else {
        //$response = array();
        $response['ESTADO'] = "00";
        $response['ID'] = $iIdGuiaRT_M;
        $response['MENSAJE'] = "Los datos se actualizaron correctamente";
    }
} else {
    //$response = array("ESTADO" => "11", "MENSAJE" => "Error al guardar la información: " . $errorMensaje);
    $response = array();
    $response['ESTADO'] = "111";
    $response['ID'] = 0;
    $response['MENSAJE'] = "Error al guardar la información: " . $errorMensaje;
}
echo json_encode($response);

?>