<?php
  include("conn.php");
  include('fnc-cajas.php');
  //Recupero parametros
  $vDataPeriodos     = $_POST['xDataPeriodos'];
  $vUnidades         = $_POST['xUnidades'];
  $vMedios           = $_POST['xMedios'];
  $vComprobantes     = $_POST['xComprobantes'];
  $vSoloMedios       = $_POST['xSoloMedios'];

  //Armo el filtro de periodos;
  $sqlPeriodos = "";
  if ($vDataPeriodos != '') {
    $xDataPeriodos = json_decode($vDataPeriodos);
    $sqlPeriodos = " AND (";
    foreach ($xDataPeriodos as $value) {
      if ($sqlPeriodos <> " AND (") {
        $sqlPeriodos .= " OR ";
      }
      $sqlPeriodos .= "(CR.FECHA BETWEEN '" . $value->desde . "' AND '" . $value->hasta . "')";
    }
    $sqlPeriodos .= ")";
  }
  
  //Armo el filtro de empresas
  //el filtro de titulares se hace luego en el while de cada empresa
  $sqlEmpresas = '';
  if ($vUnidades != '') {
    $xUnidades = explode(',' , $vUnidades);
    $sqlEmpresas = " AND (";
    foreach ($xUnidades as $value) {
      $aux = explode('-', $value);
      
      if ($sqlEmpresas <> " AND (") {
        $sqlEmpresas .= " OR ";
      }
      $sqlEmpresas .= "(B.BASE = " . $aux[0] . " AND T.TIPO_CAJA = ".$aux[1].")";
    }
    $sqlEmpresas .= ")";
  }

  //Armo el filtro de comprobantes
  $sqlComprobantes = '';
  if ($vComprobantes != '') {
    $xComprobantes = explode(',' , $vComprobantes);
    $sqlComprobantes = " AND (";
    foreach ($xComprobantes as $value) {
    //$value->desde;
      if ($sqlComprobantes <> " AND (") {
        $sqlComprobantes .= " OR ";
      }
      $sqlComprobantes .= "(TMC.TIPO_MOV = " . $value . ")";
    }
    $sqlComprobantes .= ")";
  }

  //Armo el filtro de medios de pago
  $sqlMedios = '';
  if ($vMedios != '') {
    $xMedios = explode(',' , $vMedios);
    $sqlMedios = " AND (";
    foreach ($xMedios as $value) {
    //$value->desde;
      if ($sqlMedios <> " AND (") {
        $sqlMedios .= " OR ";
      }
      $sqlMedios .= "(TI.TIPO_IMPUTA = " . $value . ")";
    }
    $sqlMedios .= ")";
  }

  //Filtro solo medios de pago
  $sqlSoloMedios = "";
  if ($vSoloMedios == 1) {
    $sqlSoloMedios = " AND MP.medio_pago = 1 "; 
  }

  function getDescripcion($conn, $valor) {
    $sql = "SELECT DESCRI FROM " . $_SESSION["BaseMadre"] . "caTipoImputa WHERE TIPO_IMPUTA = " . $valor;
    $RsTitular = sqlsrv_query( $conn, $sql);    
    if (! $RsTitular ) {    
      $jsondata['success'] = false;
      $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.12';
      header('Content-type: application/json; charset=utf-8');
      echo json_encode($jsondata);
      die( print_r( sqlsrv_errors(), true));    
    }
    $row = sqlsrv_fetch_array( $RsTitular, SQLSRV_FETCH_ASSOC);
    return utf8_encode($row['DESCRI']);
  }

  function getTitulares($lista, $base) {
    $resu = '';

    if ($lista != '') {
      $xUnidades = explode(',' , $lista);
      $xxx = '';
      foreach ($xUnidades as $value) {
        $aux = explode('-', $value);
        if ($aux[0] == $base) {
          if ($xxx <> "") {
            $xxx .= ", ";
          }
        $xxx .= " " . $aux[1];
        }
      }
      $resu = " AND TIPO_CAJA IN (" . $xxx . ")";
    }

    return $resu;
  }

  $resu = '';

  //armo el script para crear la tabla temporal; la cantidad de columnas va a depender del la cantidad de periodos;
  $sqlTemporal = "create table #TablaTemporal (BASE INT, DESC_BASE VARCHAR(100), NOMBRE_BASE VARCHAR(100), CAJA INT, DESC_CAJA VARCHAR(100), 
                                               FECHA VARCHAR(12), FECHA_AUX VARCHAR(12), CIERRE VARCHAR(12), PARCIAL INT, 
                                               TIPO_IMPUTA INT, DESCRI_TIMPU VARCHAR(100), 
                                               TIPO_MOV INT, DESCRI_TMOV VARCHAR(100), RAZON_SOCIAL VARCHAR(250), 
                                               IMPORTE MONEY, DESCRI_DOC VARCHAR(500) )";

  $RsTemporal = sqlsrv_query( $conn, $sqlTemporal);    
  if (! $RsTemporal ) {    
    $jsondata['success'] = false;
    $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.00';
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsondata);
    die( print_r( sqlsrv_errors(), true));    
  }    

  $sqlTemporal = "create NONCLUSTERED INDEX idx_TablaTemporal ON #TablaTemporal (FECHA, CIERRE, PARCIAL, BASE)";
  $RsTemporal = sqlsrv_query( $conn, $sqlTemporal);    
  if (! $RsTemporal ) {    
    $jsondata['success'] = false;
    $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.00';
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsondata);
    die( print_r( sqlsrv_errors(), true));    
  }    

  $sqlVistaCajas = getVistaCajas($DBSegu);
  $sqlAdmin = ($_SESSION['CurrentAdmin'] == 0)?" AND UB.ID_USUARIO = ".$_SESSION['CurrentIdUser']:"";
  $sqlCajas = "select DISTINCT B.BASE, B.DESCRI AS DESC_BASE, B.NOMBRE_BASE, T.TIPO_CAJA, T.descri as DESC_CAJA
               from (SELECT XB.BASE, XB.DESCRI, XB.NOMBRE_BASE
                     FROM BASES XB 
                          INNER JOIN USUARIOSBASES XUB 
                              INNER JOIN USUARIOS XU ON XUB.ID_USUARIO = XU.ID_USUARIO AND XU.USUARIO = 'PIXO_WEB' 
                          ON XB.BASE = XUB.BASE) B  
                          INNER JOIN ".$sqlVistaCajas." T  ON B.BASE = T.BASE
                          INNER JOIN USUARIOSBASES UB 
                              INNER JOIN USUARIOS U ON UB.ID_USUARIO = U.ID_USUARIO 
                          ON B.BASE = UB.BASE ".$sqlAdmin." 
               where 1=1 ".$sqlEmpresas."
               order by B.DESCRI, T.DESCRI ";

  $RsEmpresas = $DBSegu->Execute($sqlCajas);
  if (!$RsEmpresas) {
    $jsondata['success'] = false;
    $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.02'.$sqlCajas;
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsondata);
    die();  
  }

  $sqlConsulta = '';
  while (!$RsEmpresas->EOF) {
    //$sqlTitulares = getTitulares($vUnidades, $RsEmpresas->fields['BASE']);    
    $sqlConsulta = "insert into #TablaTemporal (BASE, DESC_BASE, NOMBRE_BASE, CAJA, DESC_CAJA, FECHA, FECHA_AUX, CIERRE, PARCIAL, 
                                               TIPO_IMPUTA, DESCRI_TIMPU, TIPO_MOV, DESCRI_TMOV, RAZON_SOCIAL, 
                                               IMPORTE, DESCRI_DOC)
                    Select distinct " .$RsEmpresas->fields['BASE']. " as BASE, '".utf8_encode($RsEmpresas->fields["DESC_BASE"])."' 
                           AS DESC_BASE, '".utf8_encode($RsEmpresas->fields["NOMBRE_BASE"])."' AS NOMBRE_BASE, tCaja.TIPO_CAJA AS CAJA, 
                           tCAJA.descri AS DESC_CAJA, CONVERT(VARCHAR(10), CR.fecha, 103) as FECHA, CONVERT(VARCHAR(8), CR.fecha, 112) as FECHA_AUX,
                           CR.cierre, CR.parcial, TI.TIPO_IMPUTA, TI.DESCRI as DESCRI_TIMPU, TM.TIPO_MOV, TM.DESCRI as DESCRI_TMOV, 
                           ISNULL( CLP.RAZON_SOCIAL, ISNULL(VTA.razon_social, ISNULL(CPR.RAZON_SOCIAL, ISNULL(C.observ, '')))) AS RAZON_SOCIAL,
                           (I.IMPORTE * " . $_SESSION["BaseMadre"] . "ValorCredito(I.CREDITO)) as IMPORTE, 
                           case
                             when TI.TIPO = 'B' then RTRIM(LTRIM(bTM.DESCRI)) + ' ' + CONVERT(VARCHAR(10), L.fec_vence, 103) + ' ' + 
                                                     RTRIM(LTRIM(L.NUMERO)) + ' ' + RTRIM(LTRIM(bTM.DESCRI)) + ' ' + RTRIM(LTRIM(BCTA.CODIGO)) + ' ' + 
                                                     RTRIM(LTRIM(BCTA.DESCRI))
                              when TI.TIPO in ('D','T','E','R') then CONVERT(VARCHAR(10), DOC.fec_vence, 103) + ' ' + RTRIM(LTRIM(DOC.numero)) + ' ' +
                                                     RTRIM(LTRIM(ENT.descri)) + ' ' + RTRIM(LTRIM(DOC.CUOTAS)) + ' Cuotas'
                              else ''
                           end AS DESCRI_DOC
                    from ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caCAJA C
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caTipoCaja tCaja on tCaja.TIPO_CAJA = C.TIPO_CAJA
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caTIPOMOV TM on C.TIPO_MOV = TM.TIPO_MOV
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caIMPUTA I
                             inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caTIPOIMPUTA TI on I.TIPO_IMPUTA = TI.TIPO_IMPUTA 
                             left outer join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.bcLIBROB L
                                 inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.bcTIPOMOV bTM on L.TIPO_MOV = bTM.TIPO_MOV 
                                 inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.bcBANCOCTA BCTA
                                     inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caENTIDADES E on E.ENTIDAD = BCTA.BANCO 
                                 on L.CUENTA = BCTA.CUENTA 
                             on I.COMPROB = L.COMPROB and I.MOVIM = L.MOVIM 
                             left outer join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caDOCMOV DM
                                 inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caDOCUMENTOS DOC 
                                     inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caENTIDADES ENT on ENT.ENTIDAD = DOC.ENTIDAD 
                                 on DM.DOCUMENTO = DOC.DOCUMENTO 
                             on (case when I.CREDITO = 1 then DM.ENDOSADO else DM.COMPROB end) = I.COMPROB and 
                                (case when I.CREDITO = 1 then DM.END_MOV else DM.MOVIM end) = I.MOVIM 
                         on C.COMPROB = I.COMPROB 
                         left outer join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.ccCLIPRV CLP on CLP.CLI_PRV = C.CLI_PRV and CLP.SUB_CTA = C.SUB_CTA 
                         left outer join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.ccAPLICA A
                             left outer join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.veVENTAS VTA on VTA.COMPROB_CC = A.COMPROB_CC 
                             left outer join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.coCOMPRAS CPR on CPR.COMPROB_CC = A.COMPROB_CC 
                         on A.COMPROB = C.COMPROB_CC and C.CLI_PRV is null 
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caCIERRE CR on CR.CIERRE = C.CIERRE 
                    where CR.TIPO_CAJA = ".$RsEmpresas->fields["TIPO_CAJA"]."
                      ".$sqlPeriodos."
                      ".$sqlMedios."
                      and TM.ARQUEO_DET = 1 and TI.ARQUEO = 1 ";

    $RsConsulta = sqlsrv_query( $conn, $sqlConsulta);    
    if (! $RsConsulta ) {    
      $jsondata['success'] = false;
      $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.03';
      header('Content-type: application/json; charset=utf-8');
      echo json_encode($jsondata);
      die( print_r( sqlsrv_errors(), true));    
    }    

    $sqlConsulta = "insert into #TablaTemporal (BASE, DESC_BASE, NOMBRE_BASE, CAJA, DESC_CAJA, FECHA, FECHA_AUX, CIERRE, PARCIAL, 
                                               TIPO_IMPUTA, DESCRI_TIMPU, TIPO_MOV, DESCRI_TMOV, RAZON_SOCIAL, 
                                               IMPORTE, DESCRI_DOC)
                    select " .$RsEmpresas->fields['BASE']. " as BASE, '".utf8_encode($RsEmpresas->fields["DESC_BASE"])."' 
                           AS DESC_BASE, '".utf8_encode($RsEmpresas->fields["NOMBRE_BASE"])."' AS NOMBRE_BASE, tCaja.TIPO_CAJA AS CAJA, 
                           tCAJA.descri AS DESC_CAJA, CONVERT(VARCHAR(10), CR.fecha, 103) as FECHA, CONVERT(VARCHAR(8), CR.fecha, 112) as FECHA_AUX,  
                           CR.cierre, CR.parcial, TI.tipo_imputa, TI.DESCRI as DESCRI_TIMPU, TM.TIPO_MOV, TM.DESCRI as DESCRI_TMOV,  
                           '' AS RAZON_SOCIAL, sum(I.IMPORTE * " . $_SESSION["BaseMadre"] . "ValorCredito(I.CREDITO)) as IMPORTE, '' AS DESCRI_DOC
                    from ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caCAJA C 
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caTipoCaja tCaja on tCaja.TIPO_CAJA = C.TIPO_CAJA 
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caTIPOMOV TM on TM.TIPO_MOV = C.TIPO_MOV 
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caIMPUTA I
                             inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caTIPOIMPUTA TI on TI.TIPO_IMPUTA = I.TIPO_IMPUTA 
                         on I.COMPROB = C.COMPROB 
                         inner join ".$RsEmpresas->fields["NOMBRE_BASE"].".dbo.caCIERRE CR on CR.CIERRE = C.CIERRE 
                    where CR.TIPO_CAJA = ".$RsEmpresas->fields["TIPO_CAJA"]."
                       ".$sqlPeriodos."
                      ".$sqlMedios."
                      and TM.ARQUEO_DET = 0 
                      and TI.ARQUEO = 1 
                    group by tCaja.tipo_caja, tCaja.descri, CR.fecha, CR.cierre, CR.parcial, TI.TIPO_IMPUTA, TI.DESCRI, TM.TIPO_MOV, TM.DESCRI ";

    $RsConsulta = sqlsrv_query( $conn, $sqlConsulta);    
    if (! $RsConsulta ) {    
      $jsondata['success'] = false;
      $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.04';
      header('Content-type: application/json; charset=utf-8');
      echo json_encode($jsondata);
      die( print_r( sqlsrv_errors(), true));    
    }    

    /* el saldo inicial lo tengo que obtener para cada corte de base y medio de pago
    $sqlConsulta = "insert into #TablaTemporal (BASE, DESC_BASE, CAJA, DESC_CAJA, FECHA, CIERRE, PARCIAL, 
                                               TIPO_IMPUTA, DESCRI_TIMPU, TIPO_MOV, DESCRI_TMOV, RAZON_SOCIAL, 
                                               IMPORTE, DESCRI_DOC)
                    select  " .$RsEmpresas->fields['BASE']. " as BASE, '".utf8_encode($RsEmpresas->fields["DESC_BASE"])."' 
                           AS NOMBRE_BASE, " .$RsEmpresas->fields['TIPO_CAJA']. " AS CAJA, '" .$RsEmpresas->fields['DESC_CAJA']. "' AS DESC_CAJA,
                           CONVERT(VARCHAR(10), C.fecha, 103) as FECHA, C.CIERRE, C.PARCIAL, CD.TIPO_IMPUTA, TI.DESCRI as DESCRI_TIMPU, -1 AS TIPO_MOV, '' AS DESC_TMOV,
                           '' AS RAZON_SOCIAL, CD.SALDO as IMPORTE, '' AS DESCRI_DOC
                    from delpilar.dbo.caCIERREDET CD
                         inner join delpilar.dbo.caTIPOIMPUTA TI on TI.TIPO_IMPUTA = CD.TIPO_IMPUTA 
                         inner join delpilar.dbo.caCIERRE C on C.CIERRE = CD.CIERRE 
                    where C.TIPO_CAJA = ".$RsEmpresas->fields["TIPO_CAJA"]."
                      and C.CIERRE = '0000000050'
                      and TI.ARQUEO = 1";

    $RsConsulta = sqlsrv_query( $conn, $sqlConsulta);    
    if (! $RsConsulta ) {    
      $jsondata['success'] = false;
      $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.05';
      header('Content-type: application/json; charset=utf-8');
      echo json_encode($jsondata);
      die( print_r( sqlsrv_errors(), true));    
    }   */ 

    $RsEmpresas->MoveNext();
  }

  $sqlConsulta = "select BASE, DESC_BASE, NOMBRE_BASE, CAJA, DESC_CAJA, FECHA, FECHA_AUX, CIERRE, PARCIAL, TIPO_IMPUTA, DESCRI_TIMPU, 
                         TIPO_MOV, DESCRI_TMOV, RAZON_SOCIAL, IMPORTE, DESCRI_DOC
                  from #TablaTemporal
                  order by DESC_BASE, DESC_CAJA, CIERRE, PARCIAL, DESCRI_TIMPU, DESCRI_TMOV";

  $RsConsulta = sqlsrv_query( $conn, $sqlConsulta);    
  if (! $RsConsulta ) {    
    $jsondata['success'] = false;
    $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.06';
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsondata);
    die( print_r( sqlsrv_errors(), true));    
  }    

  $totalMedioPago = 0;
  $totalGeneral = 0;  
  $totalParcial = 0;

  $resu = '<div class="tituloresultado"><span class="" id="lblTitulo">Arqueos de Caja</span></div>
           <table id="tablaResultado" class="display table table-striped table-bordered sticky-header" style="border: none; width:100%">
             <tbody>';
  
  $baseAnt = -1;
  $cajaAnt = -1;
  $cierreSaldo = '';
  $cierreAnt = ''; //este lo debo obtener para poder arrancar bien
  $parcialAnt = -1;
  $imputaAnt = -1;
  $movimAnt = -1;
  while( $row = sqlsrv_fetch_array( $RsConsulta, SQLSRV_FETCH_ASSOC)) {  
    if ( ($baseAnt !=  $row['BASE']) || ($cajaAnt !=  $row['CAJA']) ) {
      $baseAnt = $row['BASE'];
      $cajaAnt = $row['CAJA'];
      $cierreAnt = '';
      $parcialAnt = -1;
      $imputaAnt = -1;
      $movimAnt = -1;      
    }

    //el corte de control es por arqueo (cierre + parcial)
    $movimAux = '';
    if ( ($cierreAnt !=  $row['CIERRE']) || ($parcialAnt !=  $row['PARCIAL']) ) {      
      //cierro el arqueo anterior
      if ($cierreAnt != '') {
        $resu .= '<tr class="subtotales odd" style="background-color: red; ">
                    <td style="border-right: 0;" colspan="3">
                      Total Medio de Pago
                    </td>
                    <td style="text-align: right;">
                      $'.number_format($totalMedioPago,2,'.',',').'
                    </td>
                    <td style="border-left: 0; text-align: right;"></td>
                  </tr>
                  <tr style="background-color: rgb(219, 89, 22); color: aliceblue;">
                    <td style="border-right: 0;" colspan="3">
                      Total Final
                    </td>
                    <td style="text-align: right;">
                      $'.number_format($totalGeneral,2,'.',',').'
                    </td>
                    <td style="border-left: 0; text-align: right;"></td>
                  </tr>
                  <tr style="background-color: #ecf0f5;">
                    <td style="border: none;" colspan="100%"></td>
                  </tr>';
      }

      if ($cierreAnt == '') {
        //como es el primer arqueo obtengo el cierreAnt
        $sqlCierre = "select top 1 CIERRE
                      from ".$row['NOMBRE_BASE'].".dbo.caCIERRE C
                      where 1=1
                        and C.TIPO_CAJA = ".$row['CAJA']." 
                        and (convert(char(8),FECHA,112) + str(C.PARCIAL,3,0)) < ('".$row['FECHA_AUX']. str_pad($row['PARCIAL'], 3, " ", STR_PAD_LEFT) ."') 
                      order by FECHA desc, PARCIAL desc";
        $RsCierre = sqlsrv_query( $conn, $sqlCierre);    
        if (! $RsCierre ) {    
          $jsondata['success'] = false;
          $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.06';
          header('Content-type: application/json; charset=utf-8');
          echo json_encode($jsondata);
          die( print_r( sqlsrv_errors(), true));    
        }    
        $auxCierre = sqlsrv_fetch_array( $RsCierre, SQLSRV_FETCH_ASSOC);
        $cierreAnt = $auxCierre['CIERRE'];
      }
      $cierreSaldo = $cierreAnt;

      //abro el nuevo arqueo
      $resu .= '<tr style="background-color: rgb(60, 66, 86)">
                  <td style="color: aliceblue; letter-spacing: 3px;  font-weight: bolder;   font-size: 19px;" colspan="100%">
                    ' . ($row['DESC_BASE']) . ' - ' . ($row['DESC_CAJA']) . 
                    ' | ' . $row['FECHA'] .  
                    ' | ' . $row['PARCIAL'] . '
                  </td>
                </tr>
                <tr style="background-color: rgb(219, 89, 22); color: aliceblue;">
                  <td class="thalign  text-left" width="25%">Medio de Pago</td>
                  <td class="thalign " width="25%">Tipo Comprobante</td>
                  <td class="thalign " width="30%">Concepto</td>
                  <td class="thalign " width="10%">Importe</td>
                  <td class="thalign " width="10%">Subtotal</td>
                </tr>';

      //obtengo y muestro el saldo anterior para el nuevo medio de pago
      $sqlSaldo = "select CD.SALDO as IMPORTE, C.CIERRE, CONVERT(VARCHAR(10), C.fecha, 103) as FECHA, C.PARCIAL
                   from ".$row['NOMBRE_BASE'].".dbo.caCIERREDET CD
                        inner join ".$row['NOMBRE_BASE'].".dbo.caTIPOIMPUTA TI on TI.TIPO_IMPUTA = CD.TIPO_IMPUTA 
                        inner join ".$row['NOMBRE_BASE'].".dbo.caCIERRE C on C.CIERRE = CD.CIERRE 
                   where C.CIERRE = '".$cierreSaldo."' 
                     and C.TIPO_CAJA = ".$row['CAJA']." 
                     and CD.TIPO_IMPUTA = ".$row['TIPO_IMPUTA']."
                     and TI.ARQUEO = 1 ";

      $RsSaldo = sqlsrv_query( $conn, $sqlSaldo);    
      if (! $RsSaldo ) {    
        $jsondata['success'] = false;
        $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.06';
        header('Content-type: application/json; charset=utf-8');
        echo json_encode($jsondata);
        die( print_r( sqlsrv_errors(), true));    
      }    
      $auxSaldo = sqlsrv_fetch_array( $RsSaldo, SQLSRV_FETCH_ASSOC);
      $xxxSaldo = (float)$auxSaldo['IMPORTE'];
      $yyySaldo = "Saldo Arqueo " .  $auxSaldo['FECHA'] . ' - ' . $auxSaldo['PARCIAL'];

      $resu .= '<tr>
                  <td class="numerales text-left">' . utf8_encode($row['DESCRI_TIMPU'])  . '</td>
                  <td class="numerales text-left"></td>
                  <td class="numerales text-left">' . $yyySaldo . '</td>
                  <td class="numerales text-right">$' . number_format($xxxSaldo, 2, ',', '.') . '</td>
                  <td class="numerales text-right"></td>
                </tr>';

      $totalMedioPago = $xxxSaldo;
      $totalGeneral = $xxxSaldo;
      $totalParcial = $xxxSaldo;
      $cierreAnt = $row['CIERRE'];
      $parcialAnt = $row['PARCIAL'];
      $imputaAnt = $row['TIPO_IMPUTA'];
      $movimAnt = $row['TIPO_MOV'];
      $movimAux = $row['DESCRI_TMOV'];
      //$inicial = 0;
    }
    else {
      //si cambio solo el medio de pagO
      if ( ($imputaAnt != -1) && ($row['TIPO_IMPUTA'] != $imputaAnt) )   {
        //Muestro el total del medio de pago anterior
        $resu .= '<tr class="subtotales odd" style="background-color: red; ">
                    <td style="border-right: 0;" colspan="3">
                      Total Medio de Pago
                    </td>
                    <td style="text-align: right;">
                      $'.number_format($totalMedioPago,2,'.',',').'
                    </td>
                    <td style="border-left: 0; text-align: right;"></td>
                  </tr>';

        if ($cierreAnt == '')  {
          //como es el primer arqueo obtengo el cierreAnt
          $sqlCierre = "select top 1 CIERRE
                        from ".$row['NOMBRE_BASE'].".dbo.caCIERRE C
                        where 1=1
                          and C.TIPO_CAJA = ".$row['CAJA']." 
                          and (convert(char(8),FECHA,112) + str(C.PARCIAL,3,0)) < ('".$row['FECHA_AUX']. str_pad($row['PARCIAL'], 3, " ", STR_PAD_LEFT) ."') 
                        order by FECHA desc, PARCIAL desc";
          $RsCierre = sqlsrv_query( $conn, $sqlCierre);    
          if (! $RsCierre ) {    
            $jsondata['success'] = false;
            $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.06';
            header('Content-type: application/json; charset=utf-8');
            echo json_encode($jsondata);
              die( print_r( sqlsrv_errors(), true));    
          }    
          $auxCierre = sqlsrv_fetch_array( $RsCierre, SQLSRV_FETCH_ASSOC);
          $cierreAnt = $auxCierre['CIERRE'];
          $cierreSaldo = $cierreAnt;
        }

        //obtengo y muestro el saldo anterior para el nuevo medio de pago
        $sqlSaldo = "select CD.SALDO as IMPORTE, C.CIERRE, CONVERT(VARCHAR(10), C.fecha, 103) as FECHA, C.PARCIAL
                     from ".$row['NOMBRE_BASE'].".dbo.caCIERREDET CD
                          inner join ".$row['NOMBRE_BASE'].".dbo.caTIPOIMPUTA TI on TI.TIPO_IMPUTA = CD.TIPO_IMPUTA 
                          inner join ".$row['NOMBRE_BASE'].".dbo.caCIERRE C on C.CIERRE = CD.CIERRE 
                     where C.CIERRE = '".$cierreSaldo."' 
                       and C.TIPO_CAJA = ".$row['CAJA']." 
                       and CD.TIPO_IMPUTA = ".$row['TIPO_IMPUTA']."
                       and TI.ARQUEO = 1 ";

        $RsSaldo = sqlsrv_query( $conn, $sqlSaldo);    
        if (! $RsSaldo ) {    
          $jsondata['success'] = false;
          $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.06';
          header('Content-type: application/json; charset=utf-8');
          echo json_encode($jsondata);
          die( print_r( sqlsrv_errors(), true));    
        }    
        $auxSaldo = sqlsrv_fetch_array( $RsSaldo, SQLSRV_FETCH_ASSOC);
        $xxxSaldo = (float)$auxSaldo['IMPORTE'];
        $yyySaldo = "Saldo Arqueo " .  $auxSaldo['FECHA'] . ' - ' . $auxSaldo['PARCIAL'];

        $resu .= '<tr>
                    <td class="numerales text-left">' . utf8_encode($row['DESCRI_TIMPU']) . ' - ' . $inicial . '</td>
                    <td class="numerales text-left"></td>
                    <td class="numerales text-left">' . $yyySaldo . '</td>
                    <td class="numerales text-right">$' . number_format($xxxSaldo, 2, ',', '.') . '</td>
                    <td class="numerales text-right"></td>
                  </tr>';

        $imputaAnt = $row['TIPO_IMPUTA'];
        $movimAnt = $row['TIPO_MOV'];
        $movimAux = $row['DESCRI_TMOV'];
        $totalMedioPago = $xxxSaldo;
      }
      else {
        //si cambio solo el tipo de movimiento
        if ( ($movimAnt != -1) && ($row['TIPO_MOV'] != $movimAnt) )   {
          $movimAnt = $row['TIPO_MOV'];
          $movimAux = $row['DESCRI_TMOV'];
        }
      }
    }

    $totalMedioPago += (float)$row['IMPORTE'];
    $totalGeneral += (float)$row['IMPORTE'];
    $totalParcial += (float)$row['IMPORTE'];

    $resu .= '<tr>
                <td class="numerales text-left"></td>
                <td class="numerales text-left">' . utf8_encode($movimAux) . '</td>
                <td class="numerales text-left">' . utf8_encode($row['RAZON_SOCIAL']) . ' ' . utf8_encode($row['DESCRI_DOC']) . '</td>
                <td class="numerales text-right">$' . number_format($row['IMPORTE'], 2, ',', '.') . '</td>
                <td class="numerales text-right">$' . number_format($totalParcial, 2, ',', '.') . '</td>
              </tr>';
  }

  //Total último grupo
  $resu .= '<tr class="subtotales odd" style="background-color: red; ">
              <td style="border-right: 0;" colspan="3">
                Total Medio de Pago
              </td>
              <td style="text-align: right;">
                $'.number_format($totalMedioPago,2,'.',',').'
              </td>
              <td style="border-left: 0; text-align: right;"></td>
            </tr>
            <tr style="background-color: rgb(219, 89, 22); color: aliceblue;">
              <td style="border-right: 0;" colspan="3">
                Total Final
              </td>
              <td style="text-align: right;">
                $'.number_format($totalGeneral,2,'.',',').'
              </td>
              <td style="border-left: 0; text-align: right;"></td>
            </tr>
            <tr style="background-color: #ecf0f5;">
              <td style="border: none;" colspan="100%"></td>
            </tr>';

  $resu .= '  </tbody>
            </table>';

  $jsondata = array();
  $jsondata['success'] = true;
  $jsondata['message'] = $resu;
  
  header('Content-type: application/json; charset=utf-8');
  echo json_encode($jsondata);
  die();  
?>