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

//Armo el filtro de periodos;
  $cantidadPeriodos = 0;
  $sqlPeriodos = "";
  if ($vDataPeriodos != '') {
    $xDataPeriodos = json_decode($vDataPeriodos);
    $sqlPeriodos = " AND (";
    foreach ($xDataPeriodos as $value) {
      $cantidadPeriodos ++;
      if ($sqlPeriodos <> " AND (") {
        $sqlPeriodos .= " OR ";
      }
      $sqlPeriodos .= "(C.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 .= "(E.BASE = " . $aux[0] . ")";
    }
    $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 .= "(MP.TIPO_IMPUTA = " . $value . ")";
    }
    $sqlMedios .= ")";
  }

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

  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 (TIPO_IMPUTA INT, DESC_IMPUTA VARCHAR(250), DEBITO1 MONEY default 0, CREDITO1 MONEY default 0";
  for ($i = 2; $i <= $cantidadPeriodos; $i++) {
    $sqlTemporal .= ", CREDITO".$i." MONEY default 0, DEBITO".$i." MONEY default 0";
  }
  $sqlTemporal .= ")";

  $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 (TIPO_IMPUTA)";
  $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));    
  }    

  $ordenPeriodo = 0;
  foreach ($xDataPeriodos as $value) {
    $ordenPeriodo ++;
    $sqlAdmin = ($_SESSION['CurrentAdmin'] == 0)?" AND UB.ID_USUARIO = ".$_SESSION['CurrentIdUser']:"";
    $sqlBases = "SELECT DISTINCT E.BASE, E.DESCRI, E.NOMBRE_BASE 
                 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) E 
                      INNER JOIN USUARIOSBASES UB 
                          INNER JOIN USUARIOS U 
                          ON UB.ID_USUARIO = U.ID_USUARIO 
                      ON E.BASE = UB.BASE ".$sqlAdmin."
                 WHERE 1=1 ".$sqlEmpresas."
                 ORDER BY E.DESCRI";
    $RsEmpresas = $DBSegu->Execute($sqlBases);
    if (!$RsEmpresas) {
      $jsondata['success'] = false;
      $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.02';
      header('Content-type: application/json; charset=utf-8');
      echo json_encode($jsondata);
      die();  
    }

    $subConsulta = '';
    while (!$RsEmpresas->EOF) {
      $sqlTitulares = getTitulares($vUnidades, $RsEmpresas->fields['BASE']); 

      if ($subConsulta != '') {
        $subConsulta .= ' UNION ALL ';
      };

      $subConsulta .= "Select " . $RsEmpresas->fields['BASE'] . " as base, D.CREDITO, D.IMPORTE, D.TIPO_IMPUTA, MP.DESCRI
                       From " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.cacaja C
                            inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.caimputa D 
                                inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.catipoimputa MP  
                                on D.tipo_imputa = MP.tipo_imputa ".$sqlMedios.$sqlSoloMedios."
                            on C.comprob = D.comprob 
                            inner join " . $_SESSION["BaseMadre"] . "catipomov TMC 
                            on C.tipo_mov = TMC.tipo_mov and tmc.TIPO_MOV_CC is not null
                            ".$sqlComprobantes."
                      where C.fecha between '" . $value->desde . "' AND '" . $value->hasta . "' " .
                            $sqlTitulares;

      $RsEmpresas->MoveNext();
    }

    //ERA CON RIGHT OUTER
    $sqlConsulta = "Select X.TIPO_IMPUTA, X.DESCRI,
                           SUM(CASE WHEN v.credito = 0 THEN importe ELSE 0 END) AS DEBITO,
                           SUM(CASE WHEN v.credito = 1 THEN importe ELSE 0 END) AS CREDITO 
                    FROM (" . $subConsulta . ")  V 
                         inner join bases E on V.base = E.base 
                         right outer join (select tipo_imputa, descri from " . $_SESSION["BaseMadre"] . "caTipoImputa ".$sqlSoloMedios2.") X 
                         on v.tipo_imputa = x.tipo_imputa 
                    group by x.tipo_imputa, x.descri 
                    order by x.descri ";          

//echo $sqlConsulta;
    $RsConsulta = $DBSegu->Execute($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();  
    }
   
    while (!$RsConsulta->EOF) {
      //echo $RsConsulta->fields['CONCEPTO'].'  ----  ';
      if ($ordenPeriodo == 1) {
        $sqlTemporal = "insert into #TablaTemporal (TIPO_IMPUTA, DESC_IMPUTA, DEBITO1, CREDITO1) 
                          values (".($RsConsulta->fields['TIPO_IMPUTA']).", '".
                          utf8_encode($RsConsulta->fields['DESCRI'])."', ".
                          $RsConsulta->fields['DEBITO'].", ".$RsConsulta->fields['CREDITO'].")";
        $RsTemporal = sqlsrv_query( $conn, $sqlTemporal);    
        if (! $RsTemporal ) {    
          $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));    
        }    
        // $RsTemporal = $DBSegu->Execute($sqlTemporal);
      }
      else {
        $sqlTemporal = "update #TablaTemporal set DEBITO".$ordenPeriodo."=".$RsConsulta->fields['DEBITO'].", CREDITO".$ordenPeriodo."=".$RsConsulta->fields['CREDITO']." where TIPO_IMPUTA = " . $RsConsulta->fields['TIPO_IMPUTA']  . " IF @@ROWCOUNT = 0 BEGIN  insert into #TablaTemporal (TIPO_IMPUTA, DESC_IMPUTA, DEBITO".$ordenPeriodo.", CREDITO".$ordenPeriodo.") 
                          values (".$RsConsulta->fields['TIPO_IMPUTA'].", '".utf8_encode($RsConsulta->fields['DESCRI'])."', ".
                          $RsConsulta->fields['DEBITO'].", ".$RsConsulta->fields['CREDITO'].") END";
        $RsTemporal = sqlsrv_query( $conn, $sqlTemporal);    
        if (! $RsTemporal ) {    
          $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));    
        }    
        //$RsTemporal = $DBSegu->Execute($sqlTemporal);
      }
      $RsConsulta->MoveNext();
    }
  } 

  //Obtengo los totales (para poder sacar porcentaje)
  $sqlTotal = "select SUM(DEBITO1) AS DEBITO1, SUM(CREDITO1) AS CREDITO1 ";
  $sqlDebitoTotal = ', SUM(DEBITO1 ';
  $sqlCreditoTotal = ', SUM(CREDITO1 ';
  for ($i = 2; $i <= $cantidadPeriodos; $i++) {
    $sqlTotal .= ", SUM(DEBITO".$i.") AS DEBITO".$i.", SUM(CREDITO".$i.") AS CREDITO".$i." ";
    $sqlDebitoTotal .= '+ DEBITO'.$i;
    $sqlCreditoTotal .= '+ CREDITO'.$i;
  }
  $sqlDebitoTotal .= ') AS DEBITOTOTAL ';
  $sqlCreditoTotal .= ') AS CREDITOTOTAL ';
  $sqlTotal .= $sqlDebitoTotal . $sqlCreditoTotal;
  $sqlTotal .= "FROM #TablaTemporal";
  $RsTotales = sqlsrv_query( $conn, $sqlTotal);    
  if (! $RsTotales ) {    
    $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));    
  }    
  $rowTotales = sqlsrv_fetch_array( $RsTotales, SQLSRV_FETCH_ASSOC);

  //Obtengo del detalle a mostrar
  $sqlTemporal = "select TIPO_IMPUTA, DESC_IMPUTA, DEBITO1, CREDITO1 ";
  $sqlDebitoTotal = ', (DEBITO1 ';
  $sqlCreditoTotal = ', (CREDITO1 ';
  for ($i = 2; $i <= $cantidadPeriodos; $i++) {
    $sqlTemporal .= ", DEBITO".$i.", CREDITO".$i." ";
    $sqlDebitoTotal .= '+ DEBITO'.$i;
    $sqlCreditoTotal .= '+ CREDITO'.$i;
  }
  $sqlDebitoTotal .= ') AS DEBITOTOTAL ';
  $sqlCreditoTotal .= ') AS CREDITOTOTAL ';
  $sqlTemporal .= $sqlDebitoTotal . $sqlCreditoTotal;
  $sqlTemporal .= "FROM #TablaTemporal ";
  $sqlTemporal .= "order by TIPO_IMPUTA";
  $RsTemporal = sqlsrv_query( $conn, $sqlTemporal);    
  if (! $RsTemporal ) {    
    $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));    
  }    

  $resu = ' <div class="row">
              <table id="tablaResultado" class="display table table-striped table-bordered sticky-header" style="width:100%">
                <thead style="background-color: #db5916; color: aliceblue;">
                  <tr>
                    <th class="thalign tituloshead" rowspan="2">MEDIOS DE PAGO</th>';
  for ($i = 1; $i <= $cantidadPeriodos; $i++) {
    $xxx = 3;
    $resu .= '      <th colspan="'.$xxx.'" class="thalign fechastable" style="border-bottom: 0px;">'.$xDataPeriodos[$i-1]->desde.' - ' . $xDataPeriodos[$i-1]->hasta . '</th>';
  }
  //Titulo para el total
  $resu .= '      <th colspan="'.$xxx.'" class="thalign fechastable" style="border-bottom: 0px;">TOTAL</th>';
  $resu .='       </tr>
                  <tr>';
  for ($i = 1; $i <= $cantidadPeriodos; $i++) {
    $resu .= '    <th style="width: 10%;" class="thalign tituloshead">Debito</th>
                  <th class="thalign tituloshead">Credito</th>
                  <th class="thalign tituloshead">Total</th>';
  }
  //grupo de columnas para el total
  $resu .= '    <th style="width: 10%;" class="thalign tituloshead">Debito</th>
                <th class="thalign tituloshead">Credito</th>
                <th class="thalign tituloshead">Total</th>';
  $resu .='       </tr>
                </thead>
               <tbody>';
  $baseAnt = -1;
  
  $acumuladorDebito   = array();
  $acumuladorCredito  = array();
  for ($x = 1; $x <= $cantidadPeriodos; $x++) {
    $acumuladorDebito[$x]   = 0;
    $acumuladorCredito[$x]  = 0;
  }
  $acumuladorDebito['TOTAL']   = 0;
  $acumuladorCredito['TOTAL']  = 0;
  $auxTotal = '';
  //ojo, debo llevar contadores totales y de rubro por cada periodo  SQLSRV_FETCH_ASSOC
  //while (!$RsTemporal->EOF) {
  while( $row = sqlsrv_fetch_array( $RsTemporal, SQLSRV_FETCH_ASSOC)) {  
    for ($i = 1; $i <= $cantidadPeriodos; $i++) {
      $acumuladorDebito[$i] = (float)$acumuladorDebito[$i] + (float)$row['DEBITO'.$i];
      $acumuladorCredito[$i] = (float)$acumuladorCredito[$i] + (float)$row['CREDITO'.$i];
    }
    //ACUMULO PARA EL TOTAL
    $acumuladorDebito['TOTAL'] = (float)$acumuladorDebito['TOTAL'] + (float)$row['DEBITOTOTAL'];
    $acumuladorCredito['TOTAL'] = (float)$acumuladorCredito['TOTAL'] + (float)$row['CREDITOTOTAL'];
   
    $resu .= '      <tr>';
    $resu .= '        <td class="numerales">'.utf8_encode($row['DESC_IMPUTA']).'</td>';
    for ($i = 1; $i <= $cantidadPeriodos; $i++) {
      $resu .= '         <td class="numerico">' . number_format($row['DEBITO'.$i], 2, ',', '.') . '</td>';
      $resu .= '         <td class="numerico">$' . number_format($row['CREDITO'.$i], 2, ',', '.') . '</td>';
      $resu .= '         <td class="numerico">$' . number_format(((float)$row['DEBITO'.$i] - (float)$row['CREDITO'.$i]), 2, ',', '.') . '</td>';
    }
    //columnas para el total
    $resu .= '         <td class="numerico">' . number_format($row['DEBITOTOTAL'], 2, ',', '.') . '</td>';
    $resu .= '         <td class="numerico">$' . number_format($row['CREDITOTOTAL'], 2, ',', '.') . '</td>';
    $resu .= '         <td class="numerico">$' . number_format(((float)$row['DEBITOTOTAL'] - (float)$row['CREDITOTOTAL']), 2, ',', '.') . '</td>';

    $resu .= '      </tr>';  
  }
  $resu .= '    </tbody>';

  $resu .= '    <!--<tfoot>-->
                  <tr style="background-color: #3e3e3e; color: aliceblue;">
                    <th class="thalign">Total General</th>';

  for ($i = 1; $i <= $cantidadPeriodos; $i++) {
    $resu .= '      <th class="thalign">' . number_format($rowTotales['DEBITO'.$i], 2, ',', '.') . '</th>';
    $resu .= '      <th class="thalign">$' . number_format($rowTotales['CREDITO'.$i], 2, ',', '.') . '</th>';
    $resu .= '      <th class="thalign">$' . number_format(((float)$rowTotales['DEBITO'.$i] - (float)$rowTotales['CREDITO'.$i]), 2, ',', '.') . '</th>';
  }
  //columnas para e total
  $resu .= '      <th class="thalign">' . number_format($rowTotales['DEBITOTOTAL'], 2, ',', '.') . '</th>';
  $resu .= '      <th class="thalign">$' . number_format($rowTotales['CREDITOTOTAL'], 2, ',', '.') . '</th>';
  $resu .= '      <th class="thalign">$' . number_format(((float)$rowTotales['DEBITOTOTAL'] - (float)$rowTotales['CREDITOTOTAL']), 2, ',', '.') . '</th>';

  $resu .= '      </tr>
                <!--</tfoot>-->
              </div>
            </table>';


  $resu .= '</div>';

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