<?php
date_default_timezone_set("America/Bogota");
include("../conexion/conexion.php");
include("../conexion/contabilidad.php");
include("../conexion/turnos.php");

if(isset($_POST["numerof"])){
    $num=$_POST["numerof"];
    $bodega=$_POST["bodega"];
$cons=new devolucion();
$resul=$cons->consultarfacturas($num, $bodega);
$pro=$cons->consultarproductosfactura($num,$bodega);
$numerof=$cons->numerodevolucion( $bodega);

$datos=(["fact"=>$resul,"produ"=>$pro,"numero"=>$numerof,"bodegad"=>$bodega]);

echo(json_encode($datos));

}elseif(isset($_POST["numeroDVImp"])){

    $num=$_POST["numeroDVImp"];
    $bodega=$_POST["bodega"];
$cons=new devolucion();

$pro=$cons->consultarproductosDevolucion($num,$bodega);


// $datos=(["produ"=>$pro]);

echo(json_encode($pro));
}


if(isset($_POST["numdevol"])){
  $bodega=$_POST["bodega"];
  $bodegaInventario=$_POST["bodegaInventario"];

  $factura=str_replace(' ', '',$_POST["factura"]);
  $fila =json_decode($factura,true);
  $totalfactur=$_POST["totalf"];
  $numerofact=$_POST["numerofact"];
  $cliente=$_POST["cliente"];
  $tipoFactura=$_POST["tipoFactura"];
  $notaDevo=$_POST["notaDevo"];
  $vendedordv=$_POST["vendedordv"];
  $efectivoDv=$_POST["efectivoDv"];
  $tarjetasDv=$_POST["tarjetasDv"];
  $trasfereDv=$_POST["trasfereDv"];
  $credictoDv=$_POST["credictoDv"];
  $cuentapagosDinamicos=$_POST["cuentapagosDinamicos"];
  
         



if(isset($_POST["tipoDocELect"])){
  $tipoDocELect=trim($_POST["tipoDocELect"]);
}else{
  $tipoDocELect=0;
}

if (!is_numeric($tipoDocELect)) {
  $tipoDocELect=0;
} 



//$fechadevol=($_POST["fechadev"]);
$fechadevol=date('Y-m-d H:i:s');
$usuarioA=$_POST["usuarioA"];
 if(isset($_POST["devoElectronico"])){
  $devoElectronico=$_POST["devoElectronico"];
 }else{
  $devoElectronico=0;
 }


validadturnosdeviolucion($bodega);
turno($bodega);

if($numerofact==""){

  $res=["resp"=>"Error al realiza devolcion"];
  echo(json_encode($res));



}else{

  $cons=new devolucion();

  
  if($tipoFactura=="Electronica" && $tipoDocELect==0){
    $numerDv=$cons->numerodevolucionElectro($bodega);   
    
    $numdevol="D".$bodega."-".$numerDv;
  }else{
    if($tipoFactura=="Electronica" &&  $tipoDocELect==1 ){
      //pos electonivo

      $numerDv=$cons->numerodevolucionElectroPosE($bodega);
      $numdevol="NACP".$bodega.$numerDv;
      

    }else{
      $numerDv=$cons->numerodevolucion($bodega);
      $numdevol=$numerDv;
    }
   
  }
  

  

  $exitstefac=$cons->consultarfacturas($numerofact,$bodega);

  

  
   if(empty($exitstefac)){
    $res=["resp"=>"La factura no existe"];
             
          
     echo(json_encode($res));
         
       }
           else
          {
           $validadorFactura= $cons->validarDevolucion($numerofact,$bodega);
            if($validadorFactura){

    
            //$devolfact=$cons->devolucionfactura($numdevol,$fechadevol,$numerofact,$bodega,$tipoFactura,$tipoDocELect);
            //$devlventas=$cons->devolucionventas($numdevol,$numerofact,$fechadevol,$bodega,$tipoFactura,$tipoDocELect);
            $valor=$cons->consultacredictofactura($numerofact,$bodega);
          $valorCredito=0;
          
            $estadoDevolucionElectronicaDv="TO";
           $CalificacioDv="TOTAL";
    
         
            $devopro = $cons->devolverproductos(
                $fila,
                $bodegaInventario,
                $numerofact,
                $numdevol,
                $bodega,
                $fechadevol,
                $tipoFactura,
                $tipoDocELect,
                $cliente,
                $estadoDevolucionElectronicaDv,
                $CalificacioDv,
                $usuarioA,
                $notaDevo,
                $vendedordv,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv
            );
       
        

  
  
            if($valor>0){
                $actulizasaldocredicto=$cons->actulisaldocredictocliente($valor,$cliente);
                $cons->actulizarSaldoPendienteFacturaCredicto($numerofact,$bodega,$valor);
                $valorCredito=$valor;
            }
  
           
            if($tipoFactura=="Electronica" && $tipoDocELect==0){
              $actulinumerodevo=$cons->actulianumerodevolucionElec($numerDv,$bodega);
            }else{
              if($tipoFactura=="Electronica" && $tipoDocELect==1){
                //devo pos electronico
                $actulinumerodevo=$cons->actulianumerodevolucionElecPOSE($numerDv,$bodega);
                
              }else{
                $actulinumerodevo=$cons->actulianumerodevolucion($numerDv,$bodega);
              }
              
            }

            $kardex=$cons->kardex($fila,"devolucion",$fechadevol,$numdevol,$cliente,$bodegaInventario,$usuarioA);
            $devolucition=$cons->devoluciones($numerofact,$numdevol,$fechadevol,$bodega,$usuarioA);
           $valorPun=(int)$valor+(int)$totalfactur;
            $cons->puntos($valorPun,$cliente);
           
            $res=["resp"=>"Devolucion realiza con exito","fecha"=>$fechadevol,"ok"=>1,"numeroDevo"=>$numdevol];
           
            echo(json_encode($res));

            try {
              $devolucition=$cons->contabili($numdevol,$bodega,$fechadevol, $valorCredito,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv,$cuentapagosDinamicos);
          } catch (Exception $e) {
            echo(json_encode($res));
          }
           
          }else{
            $res=["resp"=>"La factura ya fue Anulada Anteriormente"];
             
          
            echo(json_encode($res));
          }

          }




          }

  }


        if(isset($_POST["devpar"])){
          $datos=$_POST["datos"];
          $bodega=$_POST["bodega"];  
          $bodegaInventario=$_POST["bodegaInventario"];
         $numeroFactura=str_replace(' ', '',$datos["numeroFactura"]);
         $codigo= $datos["codigo"];
         $nombre= $datos["nombre"];
         $caja= str_replace(' ', '',$datos["caja"]);
         $frcc=str_replace(' ', '',$datos["frcc"]);
         $base= str_replace(' ', '',$datos["base"]);
         $iva= str_replace(' ', '',$datos["iva"]);
         $tipo= str_replace(' ', '',$datos["tipo"]);
         $precio=str_replace(' ', '', $datos["precio"]);
         $costocajaD=str_replace(' ', '', $datos["costocajaD"]);
         $costofrccD=str_replace(' ', '', $datos["costofrccD"]);
      $cajaDv=str_replace(' ', '', $datos["cajaDv"]);
        $frccDv=str_replace(' ', '', $datos["frccDv"]);
         $tipoProduct=str_replace(' ', '', $datos["tipoProduct"]);
        $cliene=$_POST["cliene"];
        $vendedordv=$_POST["vendedordv"];
        $notaDevo=$_POST["notaDevo"];
        $cajafact=$datos["cajafact"];
        $frccfact=$datos["frccfact"];
        $efectivoDv=$_POST["efectivoDv"];
        $tarjetasDv=$_POST["tarjetasDv"];
        $trasfereDv=$_POST["trasfereDv"];
        $credictoDv=$_POST["credictoDv"];
         $cuentapagosDinamicos=$_POST["cuentapagosDinamicos"];

        

         validadturnosdeviolucion($bodega);
         turno($bodega);
         $estadoDevolucionP=$datos["estadoDevoluion"];

         $fechadev=date('Y-m-d H:i:s');
         $usuarioA=$_POST["usuarioA"];
         $cons=new devolucion();
         $devoElectronico=0;

         $devoElectronico=$_POST["devoElectronico"];
         
         $tipoFactura=$_POST["tipoFactura"];

         if(isset($_POST["tipoDocELect"])){
          $tipoDocELect=trim($_POST["tipoDocELect"]);
        }else{
          $tipoDocELect=0;
        }
        
        if (!is_numeric($tipoDocELect)) {
          $tipoDocELect=0;
        }

         $revisionElec=stristr($estadoDevolucionP,'D');
        
        
         
        if($tipoFactura=="Electronica" && $tipoDocELect==0 ){
            $numerDv=$cons->numerodevolucionElectro($bodega);
            $numeroDevo="D".$bodega."-".$numerDv;
          }else{
            if($tipoFactura=="Electronica" && $tipoDocELect==1){
              //pos electonico
              $numerDv=$cons->numerodevolucionElectroPosE($bodega);
              $numeroDevo="NACP".$bodega.$numerDv;
            }else{
              $numerDv=$cons->numerodevolucion($bodega);
              $numeroDevo=$numerDv;
            }
            
          }
        
         if($estadoDevolucionP==0 && $revisionElec==false ){
         
          $devol=$cons->actulizaInventario($codigo,$caja,$frcc,$bodegaInventario,
          $base,$iva,$tipo,$precio,$costocajaD,$costofrccD,$cajaDv,$frccDv,
          $tipoProduct,$cliene,$vendedordv,$numeroDevo,$tipoFactura,
          $tipoDocELect,$numeroFactura,$bodega,$fechadev,$usuarioA,$notaDevo,$cajafact,$frccfact,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv);
         // $devol=$cons->devolverventaproducto($numeroDevo, $numeroFactura, $codigo,$fechadev,$bodega,$tipoFactura,$tipoDocELect);
          if($devol){
            $valorr=$cons->consultacredictofactura($numeroFactura,$bodega);          
            $valorCrdito=0;
  
            if($valorr>0){
                $actulizasaldocredicto=$cons->actulisaldocredictocliente($precio,$cliene);
                $cons->actulizarSaldoPendienteFacturaCredicto($numeroFactura,$bodega,$precio);
                $valorCrdito=$precio;
            }

            
            if($tipoFactura=="Electronica" && $tipoDocELect==0){
              $actulinumerodevolucion=$cons->actulianumerodevolucionElec($numerDv,$bodega);
            }else{
              if($tipoFactura=="Electronica" && $tipoDocELect==1){
                //pos electonico
                $actulinumerodevolucion=$cons->actulianumerodevolucionElecPOSE($numerDv,$bodega);


              }else{
                $actulinumerodevolucion=$cons->actulianumerodevolucion($numerDv,$bodega);
              }
              
            }

         

          // $cons->actulizaInventario($codigo,$caja,$frcc,$bodegaInventario);
          $cons->kardexParcial($codigo,$caja, $frcc,$fechadev, $precio, $numeroDevo,$cliene,$bodegaInventario,$usuarioA);
          $cons->devoluciones($numeroFactura,$numeroDevo,$fechadev,$bodega,$usuarioA);
          $cons->puntos($precio,$cliene);

         

          $res=["resp"=>"devolucione realiza con exito","estado"=>"ok","fechad"=> $fechadev,"numeroDevo"=>$numeroDevo];
                  
          echo(json_encode($res));

         //contabilidad 

         try {
          $cons->contabiliUnProd($numeroDevo,$bodega,$fechadev,$valorCrdito,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv,$cuentapagosDinamicos);
      } catch (Exception $e) {
        echo(json_encode($res));
      }
       
        
    //contabilidad

          

        }else{
          $res=["resp"=>"Error al realizar devolcion del producto","estado"=>"no"];
             
          
          echo(json_encode($res));
          
        }
        
        
        }else{
          $res=["resp"=>"El producto Ya Fue devuelto Anteriormente ","estado"=>"no"];
             
          
          echo(json_encode($res));
         
         }

        }

     










class devolucion{








function __construct()
{
    $conn=new conexion();
    $this->conectar=$conn->conectar();
    

}

function consultarproductosDevolucion($num,$bodega)
{



  $consulta="SELECT  `producto`, `CajaDv`, `FrccDv`, `valorDv`,
    `vendedordv`,`productos`.`nombre`,`numeroFactu`,`ClienteDv`,`fechaDv`,
    `numeroDevo`,`TipoproducDv`, `bodegaDV`,`clientes`.`Nombre`,`apellido`,`direccion`,`nombrev`
     FROM devolucionproduc INNER JOIN productos on devolucionproduc.producto=productos.codigo 
      INNER JOIN clientes on devolucionproduc.ClienteDv=clientes.cedula 
      INNER JOIN vendedores on devolucionproduc.vendedordv=vendedores.id 

      WHERE  numeroDevo='$num'  AND bodegaDV=$bodega ";

// AND tipoProduct<>'Fabricacion'

$resultado=$this->conectar->query($consulta);

$fila1=$resultado->fetch_all(MYSQLI_ASSOC);

return $fila1;


}

 function puntos($valor,$cliente){

  $punto= $this->conectar->query("SELECT * FROM `funcgenerales` where idFun=2 "); 
  $puntos=mysqli_fetch_object($punto);
  $valorpun=trim($puntos->Dato1);
 
  if($valorpun>0){
        try {
          $puntoFactu=round( $valor/$valorpun);
        } catch (\Throwable $th) {
          $puntoFactu=0;
        }
     

       $clien= $this->conectar->query("SELECT  `puntos` FROM `clientes` WHERE cedula='$cliente' "); 
      $puntosAct=mysqli_fetch_object($clien);
      $valorpunAc=trim($puntosAct->puntos);

      $totalesPuntos=(int)$valorpunAc - (int) $puntoFactu;
      if( $totalesPuntos<0){
        $totalesPuntos=0;
      }

      $actulizarpunt="UPDATE `clientes` SET  `puntos`='$totalesPuntos' where cedula='$cliente'";            
      $actulizarPuntos=$this->conectar->query($actulizarpunt); 

      // return $valorpunAc;

  }else{
      // return 0;
  }

}


function contabili($numdevol,$bodega,$fecha,$credito,$efectivoDv=0,$tarjetasDv=0,$trasfereDv=0,$credictoDv=0,$cuentapagosDinamicos=0){

  $validar=$this->conectar->query("SELECT * FROM `devolucionproduc` where numeroDevo='$numdevol' and bodegaDV=$bodega"); 
          
  $fila=$validar->fetch_all(MYSQLI_ASSOC);
  $valorr=0;
  $excento=0;
  $excluido=0;
  $base5=0;
  $iva5=0;
  $base19=0;
  $iva19=0;
  $valorMovimiento=0;

  $otroiva=0;
$baseotro=0;

$ivaipc=0;
$baseipc=0;

 //costos ivas
 $excentoCos=0;
 $excluidoCos=0;
 $base5Cos=0;
 $iva5Cos=0;
 $base19Cos=0;
 $iva19Cos=0;

 $otroivaCos=0;
 $baseotroCos=0;

 //final costos iva

  // $costoCaja=0;
  // $costoFrcc=0;
  // $cancaja=0;
  // $canFrcc=0;


  $diferenciV = $efectivoDv;
  $diferenciTj = $tarjetasDv;
  $diferenciTRF = $trasfereDv;
  $diferenciCred = $credictoDv;


    if (count($fila) > 0) {
      
        $totalExcluidoNorespoIva=0;
        $totalExcentodoNorespoIva=0;

      foreach($fila as $key => $valor) {
        $cliente=$valor["ClienteDv"];
        $costoCaja=$valor["costoCajadv"];
        $costoFrcc=$valor["costoFrccdv"];
        $cancaja=$valor["CajaDv"];
        $canFrcc=$valor["FrccDv"];
        $valo=$valor["valorDv"];

        if(!is_numeric($costoCaja)){
            $costoCaja=0;
        }
        if(!is_numeric($costoFrcc)){
          $costoFrcc=0;
      }
      if(!is_numeric($cancaja)){
        $cancaja=0;
    }
    if(!is_numeric($canFrcc)){
      $canFrcc=0;
  }
        if(!is_numeric($valo)){
          $valo=0;
      }

     




        $valorr=$valorr+(float)($costoCaja*$cancaja)+( $costoFrcc*$canFrcc); 
        $valorMovimiento=$valorMovimiento+(float)$valo;
        $costoPorProduc= ((float)$costoCaja*$cancaja)+((float)$costoFrcc* $canFrcc); 

        if(!is_numeric($costoPorProduc)){
          $costoPorProduc=0;
      }
      
        $tipo=$valor["tipoIvaDv"];


        
           if($_SESSION["tipoIva"]==0 || $_SESSION["tipoIva"]=="0"){
                if($tipo==0){
                     $totalExcentodoNorespoIva=$totalExcentodoNorespoIva+$valo;
                        $tipo=0;

                }elseif($tipo==1){

                    $totalExcluidoNorespoIva=$totalExcluidoNorespoIva+ $valo;
                    $tipo=1;
                    
                }else{

                    $tipo=0;
                }
                
        }


        if( $tipo==0){
          $excento= $excento+(float)$valor["baseIvaDv"];
          $excentoCos=$excentoCos+$costoPorProduc;

        }elseif($tipo==1){
          $excluido= $excluido+(float)$valor["baseIvaDv"];
          $excluidoCos=$excluidoCos+$costoPorProduc;
        }elseif($tipo==5){
          $base5= $base5+(float)$valor["baseIvaDv"];
          $iva5= $iva5+(float)$valor["ivaDv"];

          $base5Costo = (float)$costoPorProduc / 1.05;
          $valoriva5Costo = (float)($costoPorProduc -$base5Costo);

         $base5Cos=round($base5Cos+$base5Costo);
         $iva5Cos=round( $iva5Cos+$valoriva5Costo);
          
        }elseif($tipo==19){
          $base19= $base19+(float)$valor["baseIvaDv"];
          $iva19= $iva19+(float)$valor["ivaDv"];

          $base19Costo = (float)$costoPorProduc / 1.19;
          $valoriva19osto = (float)($costoPorProduc -$base19Costo);

          $base19Cos=round($base19Cos+$base19Costo);
          $iva19Cos=round($iva19Cos+ $valoriva19osto);
        }
        elseif($tipo==8){
          $baseipc= $baseipc+(float)$valor["baseIvaDv"];
          $ivaipc= $ivaipc+(float)$valor["ivaDv"]; 
        }
        elseif($tipo==10){
          $baseotro= $baseotro+(float)$valor["baseIvaDv"];
          $otroiva= $otroiva+(float)$valor["ivaDv"]; 

          $base10Costo = (float)$costoPorProduc / 1.10;
          $valoriva10osto = (float)($costoPorProduc -$base10Costo);

          $otroivaCos= round($otroivaCos+  $base10Costo,2);
          $baseotroCos=round($baseotroCos+$valoriva10osto,2);

        }
        
        
      }


      $trasferencias=0;
      $tarjetas=0;
      $contado=0;
  
      
      if ($diferenciV > 0 && $diferenciTj == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
          // Solo efectivo
          $contado = $valorMovimiento;
      
      } elseif ($diferenciTj > 0 && $diferenciV == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
          // Solo tarjeta
          $tarjetas = $valorMovimiento;
      
      } elseif ($diferenciTRF > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciCred == 0) {
          // Solo transferencia
          $trasferencias = $valorMovimiento;
      
      } elseif ($diferenciCred > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciTRF == 0) {
          // Solo crédito
          $credito = $valorMovimiento;
      
      } else {
          // Mixto: Distribuir proporcionalmente
          $totalPagado = $diferenciV + $diferenciTj + $diferenciTRF + $diferenciCred;
      
          if ($totalPagado > 0) {
              // Proporcionalidad
              $contado = ($diferenciV / $totalPagado) * $valorMovimiento;
              $tarjetas = ($diferenciTj / $totalPagado) * $valorMovimiento;
              $trasferencias = ($diferenciTRF / $totalPagado) * $valorMovimiento;
              $credito = ($diferenciCred / $totalPagado) * $valorMovimiento;
      
              // Redondeo para evitar decimales
              $contado = round($contado,2);
              $tarjetas = round($tarjetas,2);
              $trasferencias = round($trasferencias,2);
              $credito = round($credito,2);
             // $credito = $valorMovimiento - ($contado + $tarjetas + $trasferencias); // Ajustar lo restante al crédito
          }
      }

        if($_SESSION["tipoIva"]==0 || $_SESSION["tipoIva"]=="0"){
                  //  $excento=$valorMovimiento;
                    $excento=$totalExcentodoNorespoIva;
                    $excluido=$totalExcluidoNorespoIva;
                    
                   
          }
 
      
      CajaMayor("Devolucion", "",$_SESSION["usuario"] ,$bodega, $GLOBALS["turno"],$numdevol,
      $fecha,$contado,$tarjetas,"resta",$cliente,$trasferencias);

$otrobanco=0;

if($cuentapagosDinamicos !=0 || $cuentapagosDinamicos !="0"){
  
  $otrobanco=$tarjetas;
  $tarjetas=0;

}

      contabilidad($bodega,"Devolucion",$valorr,$numdevol,$cliente,0,"null",
      $excento,$excluido,$base19,$iva19,$base5,$iva5,$fecha,
      $valorMovimiento,$otroiva,$baseotro,$ivaipc,$baseipc,
      $excentoCos,$excluidoCos,$base5Cos,$iva5Cos,$base19Cos,$iva19Cos,
      $otroivaCos,$baseotroCos,$tarjetas,$credito,$trasferencias,$contado,0,0,0,0,0,$otrobanco,$cuentapagosDinamicos);


    
   


}


  
}

function contabiliUnProd($numdevol,$bodega,$fecha,$credito,$efectivoDv=0,$tarjetasDv=0,$trasfereDv=0,$credictoDv=0,$cuentapagosDinamicos=0){

  $validar=$this->conectar->query("SELECT * FROM `devolucionproduc` where numeroDevo='$numdevol' and bodegaDV=$bodega"); 
          
  $fila=$validar->fetch_all(MYSQLI_ASSOC);
  $valorr=0;
  $excento=0;
  $excluido=0;
  $base5=0;
  $iva5=0;
  $base19=0;
  $iva19=0;
  $valorMovimiento=0;
  $otroiva=0;
  $baseotro=0;
  
  $ivaipc=0;
  $baseipc=0;
  // $costoCaja=0;
  // $costoFrcc=0;
  // $cancaja=0;
  // $canFrcc=0;

   //costos ivas
 $excentoCos=0;
 $excluidoCos=0;
 $base5Cos=0;
 $iva5Cos=0;
 $base19Cos=0;
 $iva19Cos=0;

 $otroivaCos=0;
 $baseotroCos=0;

 //final costos iva
 $diferenciV = $efectivoDv;
 $diferenciTj = $tarjetasDv;
 $diferenciTRF = $trasfereDv;
 $diferenciCred = $credictoDv;

    if (count($fila) > 0) {
      $totalExcluidoNorespoIva=0;
        $totalExcentodoNorespoIva=0;
      foreach($fila as $key => $valor) {
        $cliente=$valor["ClienteDv"];
        $costoCaja=$valor["costoCajadv"];
        $costoFrcc=$valor["costoFrccdv"];
        $cancaja=$valor["CajaDv"];
        $canFrcc=$valor["FrccDv"];
        $valo=$valor["valorDv"];

        if(!is_numeric($costoCaja)){
            $costoCaja=0;
        }
        if(!is_numeric($costoFrcc)){
          $costoFrcc=0;
      }
      if(!is_numeric($cancaja)){
        $cancaja=0;
    }
    if(!is_numeric($canFrcc)){
      $canFrcc=0;
  }
  if(!is_numeric($valo)){
    $valo=0;
   }





        $valorr=$valorr+(float)($costoCaja*$cancaja)+( $costoFrcc*$canFrcc); 
        $valorMovimiento=$valorMovimiento+(float)$valo;

       

        $costoPorProduc= ((float)$costoCaja*$cancaja)+((float)$costoFrcc* $canFrcc); 
        if(!is_numeric($costoPorProduc)){
          $costoPorProduc=0;
      }
        $tipo=$valor["tipoIvaDv"];


           if($_SESSION["tipoIva"]==0 || $_SESSION["tipoIva"]=="0"){
                if($tipo==0){
                     $totalExcentodoNorespoIva=$totalExcentodoNorespoIva+$valo;
                        $tipo=0;

                }elseif($tipo==1){

                    $totalExcluidoNorespoIva=$totalExcluidoNorespoIva+ $valo;
                    $tipo=1;
                    
                }else{

                    $tipo=0;
                }
                
        }





        if($tipo==0){
          $excento= $excento+(float)$valor["baseIvaDv"];
          $excentoCos=$excentoCos+$costoPorProduc;
        }elseif($tipo==1){
          $excluido= $excluido+(float)$valor["baseIvaDv"];
          $excluidoCos=$excluidoCos+$costoPorProduc;

        }elseif($tipo==5){
          $base5= $base5+(float)$valor["baseIvaDv"];
          $iva5= $iva5+(float)$valor["ivaDv"];

          $base5Costo = (float)$costoPorProduc / 1.05;
          $valoriva5Costo = (float)($costoPorProduc -$base5Costo);

         $base5Cos=round($base5Cos+$base5Costo);
         $iva5Cos=round( $iva5Cos+$valoriva5Costo);

        }elseif($tipo==19){
          $base19= $base19+(float)$valor["baseIvaDv"];
          $iva19= $iva19+(float)$valor["ivaDv"];

          $base19Costo = (float)$costoPorProduc / 1.19;
          $valoriva19osto = (float)($costoPorProduc -$base19Costo);

          $base19Cos=round($base19Cos+$base19Costo);
          $iva19Cos=round($iva19Cos+ $valoriva19osto);
        }
        elseif($tipo==8){
          $baseipc= $baseipc+(float)$valor["baseIvaDv"];
          $ivaipc= $ivaipc+(float)$valor["ivaDv"]; 
        }
        elseif($tipo==10){
          $baseotro= $baseotro+(float)$valor["baseIvaDv"];
          $otroiva= $otroiva+(float)$valor["ivaDv"]; 

          
          $base10Costo = (float)$costoPorProduc / 1.10;
          $valoriva10osto = (float)($costoPorProduc -$base10Costo);

          $otroivaCos= round($otroivaCos+  $base10Costo);
          $baseotroCos=round($baseotroCos+$valoriva10osto);

        }
      }

      // $efectivoDv=0,$tarjetasDv=0,$trasfereDv=0,$credictoDv=0

      $trasferencias=0;
      $tarjetas=0;
      $contado=0;
  
      
      if ($diferenciV > 0 && $diferenciTj == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
          // Solo efectivo
          $contado = $valorMovimiento;
      
      } elseif ($diferenciTj > 0 && $diferenciV == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
          // Solo tarjeta
          $tarjetas = $valorMovimiento;
      
      } elseif ($diferenciTRF > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciCred == 0) {
          // Solo transferencia
          $trasferencias = $valorMovimiento;
      
      } elseif ($diferenciCred > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciTRF == 0) {
          // Solo crédito
          $credito = $valorMovimiento;
      
      } else {
          // Mixto: Distribuir proporcionalmente
          $totalPagado = $diferenciV + $diferenciTj + $diferenciTRF + $diferenciCred;
      
          if ($totalPagado > 0) {
              // Proporcionalidad
              $contado = ($diferenciV / $totalPagado) * $valorMovimiento;
              $tarjetas = ($diferenciTj / $totalPagado) * $valorMovimiento;
              $trasferencias = ($diferenciTRF / $totalPagado) * $valorMovimiento;
              $credito = ($diferenciCred / $totalPagado) * $valorMovimiento;
      
              // Redondeo para evitar decimales
              $contado = round($contado,2);
              $tarjetas = round($tarjetas,2);
              $trasferencias = round($trasferencias,2);
              $credito = round($credito,2);
              //$credito = $valorMovimiento - ($contado + $tarjetas + $trasferencias); // Ajustar lo restante al crédito
          }
      }
      
         if($_SESSION["tipoIva"]==0 || $_SESSION["tipoIva"]=="0"){
                    // $excento=$valorMovimiento;
                    // $excentoCos=0;

                    $excento=$totalExcentodoNorespoIva;
                    $excluido=$totalExcluidoNorespoIva;
                   
          }
 



    
      CajaMayor("Devolucion","",$_SESSION["usuario"] ,$bodega, $GLOBALS["turno"],$numdevol,
      $fecha,$contado, $tarjetas,"resta",$cliente,$trasferencias);
      

      if($cuentapagosDinamicos !=0 || $cuentapagosDinamicos != "0"){

        $otrosBANCO=$tarjetas;
        $tarjetas=0;

      }


      contabilidad($bodega,"Devolucion",$valorr,$numdevol,$cliente,0,"null",
      $excento,$excluido,$base19,$iva19,$base5,$iva5,$fecha,
      $valorMovimiento,$otroiva,$baseotro,$ivaipc,$baseipc, $excentoCos,
      $excluidoCos,$base5Cos,$iva5Cos,$base19Cos,$iva19Cos,
      $otroivaCos,$baseotroCos,$tarjetas,$credito,$trasferencias,$contado,0,0,0,0,0,$otrosBANCO,$cuentapagosDinamicos);

 
      

}


  
}


function consultarfacturas($numero,$bodega){


    $consulta="SELECT  `factura`,`valor`, `base5`, `cliente`, 
    `fechaFactura`, `vendedor`,`iva5`, `base19`, `iva19`, `excento`, `excluido`,`ventCredicto`,`Nombre`,`nombrev`,`direccion`,`correo`,`devuelta`,`telefono`,`detallef`,
    `descuento`,`tipoId`, `apellido`, `naturaleza`, `regimen`, `responsabilidad`,
    `tipoFactura`,`codigociudad`,`idbodegaF`,`cufe`,`ivaipc`, `baseipc`,
     `ivaotro`, `baseotro`,`efectivo`, `tcredicto`, `tdebito`,`propina`,
     `bodegaInventario`,`tipoAtencion`,`Pos_Electronico`,`sucursalFacClient`,
     `direcionSc`,`TelSuc`,`otrDato1`,`otrDato2`,`pagosDinamicos`,`diasVencimiento`
      FROM facturas INNER JOIN clientes on facturas.cliente=clientes.cedula 
      LEFT JOIN sucursalesclientes on facturas.sucursalFacClient=sucursalesclientes.id
      INNER JOIN vendedores on facturas.vendedor=vendedores.id  WHERE  factura='$numero' AND idbodegaF=$bodega";

     $resultado=$this->conectar->query($consulta);
     $fila=$resultado->fetch_all(MYSQLI_ASSOC);
    
  // echo (json_encode($fila));  

return $fila;
   



}

function consultarproductosfactura($numero,$bodega){

    $consulta="SELECT  `codigoProducto`, `cantCaja`, `cantfrcc`, `valor`,
    `vendedor`, `fecha`, `iva`, `tipoiva`, `base`,`nombre`,
    `devolucion`,`descuentoUn`,`tipoProduct`,`idVencimeinto`,`cajaDv`, `frccDv`,`costoCaja`,`costoFrcc`,`factor`
     FROM ventas INNER JOIN productos on ventas.codigoProducto=productos.codigo 
      WHERE  factura='$numero'  AND bodegaVenta=$bodega ";

// AND tipoProduct<>'Fabricacion'

$resultado=$this->conectar->query($consulta);
$fila1=$resultado->fetch_all(MYSQLI_ASSOC);
return $fila1;
// echo (json_encode($fila1));  

}


function numerodevolucion($bodega){

  $consulta="SELECT * FROM `empresa` where 	bodegaEm=$bodega";
  $resultado=$this->conectar->query($consulta);
  $fila=mysqli_fetch_object($resultado);
  $numer=$fila->devolucion;
  return $numer;

}

function numerodevolucionElectro($bodega){

  $consulta="SELECT * FROM `empresa` where 	bodegaEm=$bodega";
  $resultado=$this->conectar->query($consulta);
  $fila=mysqli_fetch_object($resultado);
  $numer=$fila->devoElectroni;
  return $numer;

}

function numerodevolucionElectroPosE($bodega){

  $consulta="SELECT * FROM `empresa` where 	bodegaEm=$bodega";
  $resultado=$this->conectar->query($consulta);
  $fila=mysqli_fetch_object($resultado);
  $numer=$fila->numeDevoPosE;
  return $numer;

}

function actulianumerodevolucion($num,$bodega){
  $numero=$num+1;

  $consulta="UPDATE `empresa` SET `devolucion`= '$numero' where bodegaEm=$bodega ";
  $resultado=$this->conectar->query($consulta);
  
}

function actulianumerodevolucionElec($num,$bodega){
  $numero=$num+1;

  $consulta="UPDATE `empresa` SET `devoElectroni`= '$numero' where bodegaEm=$bodega ";
  $resultado=$this->conectar->query($consulta);
  
}


function actulianumerodevolucionElecPOSE($num,$bodega){
  $numero=$num+1;

  $consulta="UPDATE `empresa` SET `numeDevoPosE`= '$numero' where bodegaEm=$bodega ";
  $resultado=$this->conectar->query($consulta);
  
}
public function validarDevolucion($numeroFactura,$bodega){
 
    $sql="SELECT * FROM `facturas` WHERE factura='$numeroFactura' AND idbodegaF=$bodega";

    $resultado=$this->conectar->query($sql);
    $fila=mysqli_fetch_object($resultado);
    $devolucion=$fila->devolucion;
    $turnoFac=$fila->facturno;
    $revisionElec=stristr($devolucion,'D');
   
    if($devolucion==0 && $revisionElec==false){
      if($GLOBALS["turno"]==$turnoFac){
        return true;
      }else{

        if($_SESSION["tipo"]==1){
          return true;
        }else{
        
          $res=["resp"=>"Solo el Usuario Administrado Puede realizar una devolucion De un turno Diferente al Actual"];
          echo(json_encode($res));
          die();
        }
        
      }
      
    }else{
      return false;
    }

}

function devolucionfactura($numedevo,$fechadevo,$numfa,$bodega,$tipoFactura,$tipoDocELect){
  

  $consulta=$this->conectar->prepare("UPDATE `facturas` SET `devolucion`=?,`fechaDevolucion`=? WHERE factura=? AND idbodegaF=?");
  $consulta->bind_param("ssss",$numedevo,$fechadevo,$numfa,$bodega);
  $consulta->execute(); 

}


function devolucionventas($numerodevolucion,$numerofact,$fechadevol,$bodega,$tipoFactura,$tipoDocELect){

$estadoDevolucionElectronica=0;
 if($tipoFactura=="Electronica" && $tipoDocELect==0 ){
  $estadoDevolucionElectronica=1;
 }else{
  if($tipoFactura=="Electronica" && $tipoDocELect==1 ){
    $estadoDevolucionElectronica=2;
   }
 }

  $estadoDevolucion="TO";
  $numeroD=0;

  $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `devolucion`=?,`fechaDevoParcial`=?,`estadoDevolucionElectronica`=?  WHERE factura=? and devolucion=? AND bodegaVenta =?");
  $consulta->bind_param("ssssss",$numerodevolucion,$fechadevol,$estadoDevolucionElectronica,$numerofact,$numeroD,$bodega);
  $consulta->execute(); 

  $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `estadoDevolucion`=?  WHERE factura=? AND bodegaVenta =?");
  $consulta->bind_param("sss",$estadoDevolucion,$numerofact,$bodega);
  $consulta->execute(); 


 



}

function consultacredictofactura($factura,$bodega){

$consulta="SELECT  `ventCredicto` FROM `facturas` WHERE factura='$factura' AND 	idbodegaF=$bodega";
$resultado=$this->conectar->query($consulta);
$fila=mysqli_fetch_object($resultado);
$valo=$fila->ventCredicto;
if($valo>0){

  return $valo;
}else{
  return 0;
}
}

function actulizarSaldoPendienteFacturaCredicto($factura,$bodega,$valo)
{

 
$consultaa="SELECT *FROM `facturas` WHERE factura='$factura' and idbodegaF=$bodega";
$resultadoa=$this->conectar->query($consultaa);
$filaa=mysqli_fetch_object($resultadoa);


$valoract=$filaa->saldoPendiente;

$saldo=(int)$valoract-$valo;


if($saldo >=0 ){
  $consulta1="UPDATE `facturas` SET `saldoPendiente`='$saldo' WHERE factura='$factura'and idbodegaF=$bodega";
  $resultado1=$this->conectar->query($consulta1);
}else{
  

    $saldo=0;
    if($saldo >= 0){   
      $consulta1="UPDATE `facturas` SET `saldoPendiente`='$saldo' WHERE factura='$factura' and idbodegaF=$bodega";
      $resultado1=$this->conectar->query($consulta1);
  
  }

}


}



function actulisaldocredictocliente($totalfact,$cliente){
$consulta="SELECT * FROM `clientes` WHERE cedula='$cliente'";
$resultado=$this->conectar->query($consulta);
$fila=mysqli_fetch_object($resultado);
$valoract=$fila->credValor;

$saldo=(int)$valoract-$totalfact;


if($saldo >=0 ){
  $consulta1="UPDATE `clientes` SET `credValor`='$saldo' WHERE cedula='$cliente'";
  $resultado1=$this->conectar->query($consulta1);
}else{
  if($valoract<=$totalfact){

    $saldo=(int)$valoract-$valoract;
    if($saldo>=0){   
      $consulta1="UPDATE `clientes` SET `credValor`='$saldo' WHERE cedula='$cliente'";
      $resultado1=$this->conectar->query($consulta1);
  }
  }

}
  





}

public function kardex($fila,$tipo,$fecha,$numerofactura,$cliente,$bodega,$usuarioA){

  foreach($fila as $valor) {
      $codigo=$valor["Codigo"];        
      $caja=$valor["Cantida_caja"];
      $frcc=$valor["Cantida_frcc"];
      $estadoDevolucion=$valor["devolucionEstado"];
      if($estadoDevolucion==0){

        $precio=$valor["precio"]; 
        $valorcaja=0;
        $valorfrcc=0;

        if($caja>0 && $frcc==0){
            $valorcaja=$precio/$caja;
        }elseif($frcc>0 && $caja==0){
            $valorfrcc=$precio/$frcc;
        }


        $consulta="SELECT * FROM `productos` INNER JOIN inventarios on productos.codigo=inventarios.codigoProd where codigo ='$codigo' AND idbodega=$bodega";    
      $resultado=$this->conectar->query($consulta);         
      $fi=mysqli_fetch_object($resultado);        
      
      $inventario1=$fi->inventario;
      $factor=$fi->factor;
      if(!is_numeric($factor)){
        $factor=0;
    }

    if($inventario1==""|| $inventario1=="NULL" ||$inventario1==" "){
      $inventario1=0; 
    }
      $inventariofrcc=$factor*$inventario1;


  $ejecutarr=$this->conectar->prepare("INSERT INTO `kardex`(`cliente`,`numero`,`producto`, `tipo`,
  `caja`, `frcc`, `inventarioo`, `fecha`, `inventFrcc`, `valoUnitcaja`, `valorUnifrcc`,`idbodegaK`,`usuariok`,`kturno` ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
  $ejecutarr->bind_param("ssssssssssssss",$cliente,$numerofactura,$codigo,$tipo,$caja,$frcc,$inventario1,$fecha,$inventariofrcc,$valorcaja,$valorfrcc,$bodega,$usuarioA,$GLOBALS["turno"]);
  $ejecutarr->execute(); 


  }
  }
  

}



public function devolverproductos($fila,$bodegaInventario,
$numerofact,$numdevol,$bodega,$fechadevol,$tipoFactura,
$tipoDocELect,$cliente,
$estadoDevolucionElectronicaDv,$CalificacioDv,$usuarioA,$notaDevo,
$vendedordv,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv){

  $estadoDevolucionElectronica=0;

 if($tipoFactura=="Electronica" && $tipoDocELect==0 ){
  $estadoDevolucionElectronica=1;
 }else{
  if($tipoFactura=="Electronica" && $tipoDocELect==1 ){
    $estadoDevolucionElectronica=2;
   }
 }
 
 $diferenciV=$efectivoDv;
$diferenciTj=$tarjetasDv;
$diferenciTRF=$trasfereDv;
$diferenciCred=$credictoDv;

  foreach($fila as $valor) {
      $codigo=$valor["Codigo"];
     
      $caja=$valor["Cantida_caja"];
      $frcc=$valor["Cantida_frcc"];
      $Base=$valor["Base"];
      $iva=$valor["iva"];
      $tipo=$valor["tipo"];
      $cajaDv=$valor["cajaDv"];
      $frccDv=$valor["frccDv"];
      $valorDv=$valor["precio"];
      $tipoProduct=$valor["tipoProduct"];
    $costocajaD=$valor["costocajaD"];
    $costofrccD=$valor["costofrccD"];
    $realizarDB=0;
    $dvCaja=0;
    $dvFrcc=0;
    if( $caja>0 &&  $caja>$cajaDv){
      $realizarDB=1;
      $dvCaja=$caja;
      $caja=$caja-$cajaDv;

    }
    if( $frcc>0 &&  $frcc>$frccDv){
      $realizarDB=1;
      $dvFrcc=$frcc;
      $frcc=$frcc-$frccDv;
    
    }




      // $estadoDevolucion=$valor["devolucionEstado"];
      // if($estadoDevolucion==0){
       if($realizarDB==1) {      
          
      $consulta="SELECT * FROM `productos` INNER JOIN inventarios on productos.codigo=inventarios.codigoProd where codigo ='$codigo' AND idbodega=$bodegaInventario";     
      $resultado=$this->conectar->query($consulta);         
      $fi=mysqli_fetch_object($resultado);        
      $inventario=$fi->inventario;
      $inventarioGeneral=trim($fi->TotalInventario);
      $factor=$fi->factor;
      $frccacaja=0;
          if($frcc>0){
              $frccacaja=$frcc/$factor; 
              
              $inventarioEnfracc=round( $inventario*$factor,0);
              $SaldoInvenFrcc=$inventarioEnfracc+$frcc; 
              $frccacaja=round($SaldoInvenFrcc/$factor,3);
              // $totalcaja=round($frccacaja+(int)$caja,3); 
              $totalcaja=round($frccacaja+$caja,3); 
              
              }else{
                  // $totalcaja=round($inventario+(int)$caja,3); 
                  
                  $totalcaja=round($inventario+$caja,3); 

              
              }
            
          $controlINventario=$fi->controlInventario;
          // if( $controlINventario=="no")
          // {

          // }
          // else{
            $insertar="UPDATE `inventarios` SET `inventario`='$totalcaja' WHERE codigoProd='$codigo' AND idbodega=$bodegaInventario";            
            $actulizar=$this->conectar->query($insertar); 

            
            $saldoGeneral= round($inventarioGeneral-$totalcaja,3); 

            // if($saldoGeneral<0 || $saldoGeneral<"0" ){
                
            //     $saldoGeneral=0;
            // }
            $insertar=$this->conectar->prepare( "UPDATE `productos`  SET `TotalInventario`=?  WHERE codigo=? ");
                $insertar->bind_param("ss",$saldoGeneral,$codigo);
                $actulizar= $insertar->execute();
          // } 

         
         
           /// nuevo forma devoluciones



if ($diferenciV > 0 && $diferenciTj == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
  // Solo efectivo
  $efectivoDv = $valorDv;

} elseif ($diferenciTj > 0 && $diferenciV == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
  // Solo tarjeta
  $tarjetasDv = $valorDv;

} elseif ($diferenciTRF > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciCred == 0) {
  // Solo transferencia
  $trasfereDv = $valorDv;

} elseif ($diferenciCred > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciTRF == 0) {
  // Solo crédito
  $credictoDv = $valorDv;

} else {
  // Mixto: Distribuir proporcionalmente
  $totalPagado = $diferenciV + $diferenciTj + $diferenciTRF + $diferenciCred;

  if ($totalPagado > 0) {
   // Distribución proporcional sin redondeo
$efectivoDv = ($diferenciV / $totalPagado) * $valorDv;
$tarjetasDv = ($diferenciTj / $totalPagado) * $valorDv;
$trasfereDv = ($diferenciTRF / $totalPagado) * $valorDv;
$credictoDv = ($diferenciCred / $totalPagado) * $valorDv;

// Redondeo hacia abajo
$efectivoDv = round($efectivoDv,2);
$tarjetasDv = round($tarjetasDv,2);
$trasfereDv = round($trasfereDv,2);
$credictoDv = round($credictoDv,2);





  }
}








        $otroDato=0;
           $consulta = $this->conectar->prepare("INSERT INTO `devolucionproduc` 
           (`numeroFactu`, `numeroDevo`, `producto`, `CajaDv`, `FrccDv`, `valorDv`, 
           `bodegaDV`, `NumeroDv`, `fechaDv`, `Turno`, `usuarioDv`, `notaDevo`, 
           `TipoproducDv`, `otroDato`, `tipoIvaDv`, `baseIvaDv`, `ivaDv`, 
           `ClienteDv`, `vendedordv`, `estadoDevolucionElectronicaDv`, 
           `costoCajadv`, `costoFrccdv`, `CalificacioDv`,`efectivoDv`,`tarjetaDv`,`trasfereDv`,`creditoDv`,`tipoFactura`) 
           VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
       
       $consulta->bind_param("ssssssssssssssssssssssssssss",
           $numerofact, $numdevol, $codigo, $caja, $frcc, $valorDv, $bodega, 
           $numdevol, $fechadevol, $GLOBALS["turno"], $usuarioA, $notaDevo, 
           $tipoProduct,$otroDato, $tipo, $Base, $iva, $cliente, $vendedordv, 
           $estadoDevolucionElectronica, $costocajaD,
            $costofrccD,
             $estadoDevolucionElectronicaDv,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv,$tipoFactura);
           $consulta->execute();
          
       if($caja>0){
        $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `CajaDv`=? WHERE `codigoProducto`=? and factura=?  AND bodegaVenta =?");
        $consulta->bind_param("ssss", $dvCaja,$codigo,$numerofact,$bodega);
        $consulta->execute(); 
       }
       if($frcc>0){
        $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `FrccDv`=?  WHERE `codigoProducto`=? and factura=?  AND bodegaVenta =?");
        $consulta->bind_param("ssss", $dvFrcc,$codigo,$numerofact,$bodega);
        $consulta->execute(); 

       }

     
          
 // fin nueva forma
            



         }
          }



 }     
          
          

    function devoluciones($factura,$devolucon,$fechad,$bodega,$usuarioA){

      $consulta=$this->conectar->prepare("INSERT INTO `devoluciones` (`numDevol`, `numFactur`,`fechaDev`,`idbodega`,`usuariod`,`dturno`) VALUES(?,?,?,?,?,?) ");
      $consulta->bind_param("ssssss",$devolucon,$factura,$fechad,$bodega,$usuarioA,$GLOBALS["turno"]);
      $consulta->execute(); 

    }



    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //funciones para devoluciones parciales

public function devolverventaproducto($numerodevolucion,$numerofact,$codigoPr,$fechadev,$bodega,$tipoFactura,$tipoDocELect)
    {

      $estadoDevolucionElectronica=0;
      if($tipoFactura=="Electronica" && $tipoDocELect==0 ){
       $estadoDevolucionElectronica=1;
      }else{
       if($tipoFactura=="Electronica" && $tipoDocELect==1 ){
         $estadoDevolucionElectronica=2;
        }
      }



    $estadoDevolucion="PA";
     
      $sqll="SELECT * FROM `ventas` WHERE bodegaVenta=$bodega AND codigoProducto='$codigoPr' AND factura='$numerofact' ";

    $resultado=$this->conectar->query($sqll);         
      $fi=mysqli_fetch_object($resultado);        
      $veturno=$fi->veturno;
      if($GLOBALS["turno"]==$veturno){

        $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `devolucion`=?,`fechaDevoParcial`=?,`estadoDevolucion`=?,`estadoDevolucionElectronica`=?  WHERE factura=? and codigoProducto=? and bodegaVenta=? ");
        $consulta->bind_param("sssssss",$numerodevolucion,$fechadev,$estadoDevolucion, $estadoDevolucionElectronica,$numerofact,$codigoPr,$bodega);
        $consulta->execute(); 
      
        if($consulta){
          return true;
        }else{
          return false;
        }

      }else{


        if($_SESSION["tipo"]==1){

          $consulta=$this->conectar->prepare("UPDATE `ventas` SET `devolucion`=?,`fechaDevoParcial`=?,`estadoDevolucion`=?,`estadoDevolucionElectronica`=?  WHERE factura=? and codigoProducto=? and bodegaVenta=? ");
          $consulta->bind_param("sssssss",$numerodevolucion,$fechadev,$estadoDevolucion, $estadoDevolucionElectronica,$numerofact,$codigoPr,$bodega);
          $consulta->execute(); 

          return true;
        }else{
          $res=["resp"=>"Solo el Usuario Administrado Puede realizar una devolucion De un turno Deiferente al Actual ","estado"=>"no"];
          echo(json_encode($res));
          die();
        }
        
      }

      
    }



public function actulizaInventario($codigo,$caja,$frcc,$bodegaInventario,
$base,$iva,$tipo,$precio,$costocajaD,$costofrccD,$cajaDv,$frccDv,
$tipoProduct,$cliene,$vendedordv,$numeroDevo,$tipoFactura,$tipoDocELect,
$numeroFactura,$bodega,$fechadev,$usuarioA,$notaDevo,$cajafact,
$frccfact,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv){    
  
  $estadoDevolucionElectronica=0;
      if($tipoFactura=="Electronica" && $tipoDocELect==0 ){
       $estadoDevolucionElectronica=1;
      }else{
       if($tipoFactura=="Electronica" && $tipoDocELect==1 ){
         $estadoDevolucionElectronica=2;
        }
      }


  $realizarDB=0;
$dvCaja=0;
$dvFrcc=0;


if( $caja>0 && $cajafact >= ($caja + $cajaDv)){
  $realizarDB=1;
  $dvCaja=$cajaDv+$caja;

}
if( $frcc > 0 && $frccfact >= ($frcc + $frccDv)){
  $realizarDB=1;
  $dvFrcc=$frccDv+$frcc;
 
}

$diferenciV=$efectivoDv;
$diferenciTj=$tarjetasDv;
$diferenciTRF=$trasfereDv;
$diferenciCred=$credictoDv;

if($realizarDB==1){
        
  $consulta="SELECT * FROM `productos` INNER JOIN inventarios on productos.codigo=inventarios.codigoProd where codigo ='$codigo' AND idbodega=$bodegaInventario";    
    $resultado=$this->conectar->query($consulta);         
    $fi=mysqli_fetch_object($resultado);        
    $inventario=$fi->inventario;
    $factor=$fi->factor;
    $inventarioGeneral=trim($fi->TotalInventario);
    $frccacaja=0;
        if($frcc>0){
            $frccacaja=$frcc/$factor; 
            
            $inventarioEnfracc=round( $inventario*$factor,0);
            $SaldoInvenFrcc=$inventarioEnfracc+$frcc; 
            $frccacaja=round($SaldoInvenFrcc/$factor,3);
            // $totalcaja=round($frccacaja+(int)$caja,3); 

            $totalcaja=round($frccacaja+$caja,3); 
            
            }else{
                // $totalcaja=round($inventario+(int)$caja,3); 
                
                $totalcaja=round($inventario+$caja,3);  

            
            }

              
            if ($diferenciV > 0 && $diferenciTj == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
              // Solo efectivo
              $efectivoDv = $precio;
            
            } elseif ($diferenciTj > 0 && $diferenciV == 0 && $diferenciTRF == 0 && $diferenciCred == 0) {
              // Solo tarjeta
              $tarjetasDv = $precio;
            
            } elseif ($diferenciTRF > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciCred == 0) {
              // Solo transferencia
              $trasfereDv = $precio;
            
            } elseif ($diferenciCred > 0 && $diferenciV == 0 && $diferenciTj == 0 && $diferenciTRF == 0) {
              // Solo crédito
              $credictoDv = $precio;
            
            } else {
              // Mixto: Distribuir proporcionalmente
              $totalPagado = $diferenciV + $diferenciTj + $diferenciTRF + $diferenciCred;
            
              if ($totalPagado > 0) {
               // Distribución proporcional sin redondeo
$efectivoDv = ($diferenciV / $totalPagado) * $precio;
$tarjetasDv = ($diferenciTj / $totalPagado) * $precio;
$trasfereDv = ($diferenciTRF / $totalPagado) * $precio;
$credictoDv = ($diferenciCred / $totalPagado) * $precio;

// Redondeo hacia abajo
$efectivoDv = round($efectivoDv,2);
$tarjetasDv = round($tarjetasDv,2);
$trasfereDv = round($trasfereDv,2);
$credictoDv = round($credictoDv,2);




              }
            }




          $otroDato=0;
          $estadoDevolucionElectronicaDv="PA";
           $consulta = $this->conectar->prepare("INSERT INTO `devolucionproduc` 
           (`numeroFactu`, `numeroDevo`, `producto`, `CajaDv`, `FrccDv`, `valorDv`, 
           `bodegaDV`, `NumeroDv`, `fechaDv`, `Turno`, `usuarioDv`, `notaDevo`, 
           `TipoproducDv`, `otroDato`, `tipoIvaDv`, `baseIvaDv`, `ivaDv`, 
           `ClienteDv`, `vendedordv`, `estadoDevolucionElectronicaDv`, 
           `costoCajadv`, `costoFrccdv`, `CalificacioDv`,`efectivoDv`,`tarjetaDv`,`trasfereDv`,`creditoDv`,`tipoFactura`) 
           VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
       
       $consulta->bind_param("ssssssssssssssssssssssssssss",
       $numeroFactura,$numeroDevo, $codigo, $caja, $frcc, $precio, $bodega, 
           $numeroDevo, $fechadev, $GLOBALS["turno"], $usuarioA, $notaDevo, 
           $tipoProduct,$otroDato, $tipo, $base, $iva, $cliene, $vendedordv, 
           $estadoDevolucionElectronica, $costocajaD, $costofrccD,
            $estadoDevolucionElectronicaDv,$efectivoDv,$tarjetasDv,$trasfereDv,$credictoDv,$tipoFactura);
           $consulta->execute();
           
          //  echo var_dump( $consulta);
          //  die();
  
       if($caja>0){
        $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `CajaDv`=? WHERE `codigoProducto`=? and factura=?   AND bodegaVenta =?");
        $consulta->bind_param("ssss", $dvCaja,$codigo,$numeroFactura,$bodega);
        $consulta->execute(); 
       }
       if($frcc>0){
        $consulta=$this->conectar->prepare("UPDATE `ventas` SET  `FrccDv`=? WHERE `codigoProducto`=? and factura=?  AND bodegaVenta =?");
        $consulta->bind_param("ssss",$dvFrcc,$codigo,$numeroFactura,$bodega);
        $consulta->execute(); 

       }

      
     
          
 // fin nueva forma






            $controlINventario=$fi->controlInventario;
            // if( $controlINventario=="no")
            // {
              
            // }
            // else{

              $insertar="UPDATE `inventarios` SET `inventario`='$totalcaja' WHERE codigoProd='$codigo' and idbodega=$bodegaInventario";            
              $actulizar=$this->conectar->query($insertar); 



             
            $saldoGeneral= round($inventarioGeneral-$totalcaja,3); 

            // if($saldoGeneral<0 || $saldoGeneral<"0" ){
                
            //     $saldoGeneral=0;
            // }
            $insertar=$this->conectar->prepare( "UPDATE `productos`  SET `TotalInventario`=?  WHERE codigo=? ");
                $insertar->bind_param("ss",$saldoGeneral,$codigo);
                $actulizar= $insertar->execute();

            // }

       
            return true;



        }  
         
 }


 public function kardexParcial($codigo,$caja, $frcc,$fecha, $precio,$numerofactura,$cliente,$bodega,$usuarioA){

        $valorcaja=0;
        $valorfrcc=0;

        if($caja>0 && $frcc==0){
            $valorcaja=$precio/$caja;
        }elseif($frcc>0 && $caja==0){
            $valorfrcc=$precio/$frcc;
        }
$tipo="devolucion";

$consulta="SELECT * FROM `productos` INNER JOIN inventarios on productos.codigo=inventarios.codigoProd where codigo ='$codigo' AND idbodega=$bodega ";     
      $resultado=$this->conectar->query($consulta);         
      $fi=mysqli_fetch_object($resultado);        
      
      $inventario1=$fi->inventario;
      $factor=$fi->factor;
      $inventariofrcc=$factor*$inventario1;


  $ejecutarr=$this->conectar->prepare("INSERT INTO `kardex`(`cliente`,`numero`,`producto`, `tipo`,
  `caja`, `frcc`, `inventarioo`, `fecha`, `inventFrcc`, `valoUnitcaja`, `valorUnifrcc`,`idbodegaK`,`usuariok`,`kturno`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
  $ejecutarr->bind_param("ssssssssssssss",$cliente,$numerofactura,$codigo,$tipo,$caja,$frcc,$inventario1,$fecha,$inventariofrcc,$valorcaja,$valorfrcc,$bodega,$usuarioA,$GLOBALS["turno"]);
  $ejecutarr->execute(); 


  }
  
  


         
 //fin funciones para devoluciones parciales


}



    



?>