<?php
  include("conn.php");
  //Recupero parametros
  $vDataPeriodos     = $_POST['xDataPeriodos'];
  $vUnidades         = $_POST['xUnidades'];
  $vConceptos        = $_POST['xConceptos'];
  $vRubros           = $_POST['xRubros'];
  $vComprobantes     = $_POST['xComprobantes'];
  $vModuloMesas      = $_POST['xModuloMesas'];
  $vModuloMostrador  = $_POST['xModuloMostrador'];
  $vModuloDelivery   = $_POST['xModuloDelivery'];
  $vTurno            = $_POST['xTurno'];

  $sql = "SELECT PUESTO FROM " . $_SESSION["BaseMadre"] . "glPuestos WHERE DESCRI = 'TABLERO_WEB'";
  $RsPuesto = $DBSegu->Execute($sql);
  if (!$RsPuesto) {
    $jsondata['success'] = false;
    $jsondata['message'] = 'Ha ocurrido un error durante la consulta. Ref. #V01.01';
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsondata);
    die();  
  }

  if ($RsPuesto->RecordCount() > 0) { 
    $sql = "SELECT PARAM FROM " . $_SESSION["BaseMadre"] . "glConfig WHERE PUESTO = " . $RsPuesto->fields['PUESTO'] . " AND CLAVE = 'COD_BARRA_VE'";
    $RsPuesto = $DBSegu->Execute($sql);
    if (!$RsPuesto) {
      $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();  
    }

    if ($RsPuesto->RecordCount() == 0) {
      $muestraCodigo = 0; //rubro-codigo
    }
    else {
      if ($RsPuesto->fields['PARAM'] == 1) {
        $muestraCodigo = 1; //cod-barra
      }
      else {
        $muestraCodigo = 0; //rubro-codigo
      }
    }
  }
  else {
    $muestraCodigo = 0; //rubro-codigo
  }

  //Armo el filtro de periodos;
  $sqlPeriodos = "";
  if ($vDataPeriodos != '') {
    $xDataPeriodos = json_decode($vDataPeriodos);
    $sqlPeriodos = " AND (";
    foreach ($xDataPeriodos as $value) {
      if ($sqlPeriodos <> " AND (") {
        $sqlPeriodos .= " OR ";
      }
      $sqlPeriodos .= "(X.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 por módulo
  $sqlModulo = "";
  if ($vModuloMesas == 1) {
    $sqlModulo = "and (X.modulo = 'M' "; 
  }
  if ($vModuloDelivery == 1) {
    if ($sqlModulo == "") {
      $sqlModulo = "and (X.modulo = 'D' ";
    }
    else {
      $sqlModulo .= " or X.modulo = 'D' ";
    }  
  }
  if ($vModuloMostrador == 1) {
    if ($sqlModulo == "") {
      $sqlModulo = "and (X.modulo = 'B' ";
    }
    else {
      $sqlModulo .= " or X.modulo = 'B' ";
    }
  }
  if ($sqlModulo != "") {
    $sqlModulo .= ")"; 
  }

  //Armo filtro por turno
  $sqlTurno = "";
  if ($vTurno != '-1') { 
    $sqlTurno = "    INNER JOIN Reemplazo.dbo.caCierre C 
                     ON C.CIERRE = X.CIERRE 
                        AND C.PARCIAL = " . $_POST['xTurno'];
  }
  
  //Armo el filtro de conceptos y rubros; uso solo sqlProductos para ambos
  //ninguno
  if (($vConceptos == '') && ($vRubros == '')) {
    $sqlProductos = '';
  }

  //solo conceptos
  if (($vConceptos != '') && ($vRubros == '')) {
    $sqlProductos = '';
    $xConceptos = explode(',' , $vConceptos);
    $sqlProductos = " AND (";
    foreach ($xConceptos as $value) {
      if ($sqlProductos <> " AND (") {
        $sqlProductos .= " OR ";
      }
      $sqlProductos .= "(I.CONCEPTO = " . $value . ")";
    }
    $sqlProductos .= ")";
  }  

  //solo rubros
  if (($vConceptos == '') && ($vRubros != '')) {
    $sqlProductos = '';
    $xRubros = explode(',' , $vRubros);
    $sqlProductos = " AND (";
    foreach ($xRubros as $value) {
      if ($sqlProductos <> " AND (") {
        $sqlProductos .= " OR ";
      }
      $sqlProductos .= "(R.RUBRO = " . $value . ")";
    }
    $sqlProductos .= ")";
  }  

  //ambos
  if (($vConceptos != '') && ($vRubros != '')) {
    $sqlProductos = '';
    $xRubros = explode(',' , $vRubros);
    $xConceptos = explode(',' , $vConceptos);
    $sqlProductos = " AND (";
    foreach ($xRubros as $value) {
      if ($sqlProductos <> " AND (") {
        $sqlProductos .= " OR ";
      }
      $sqlProductos .= "(R.RUBRO = " . $value . ")";
    }
    foreach ($xConceptos as $value) {
      if ($sqlProductos <> " AND (") {
        $sqlProductos .= " OR ";
      }
      $sqlProductos .= "(I.CONCEPTO = " . $value . ")";
    }
    $sqlProductos .= ")";
  }  

  //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 .= "(X.TIPO_MOV = " . $value . ")";
    }
    $sqlComprobantes .= ")";
  }

  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 TIT.TITULAR IN (" . $xxx . ")";
    }

    return $resu;
  }
  $resu = '';

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

  $sqlConsulta = '';
  while (!$RsEmpresas->EOF) {
    $sqlTitulares = getTitulares($vUnidades, $RsEmpresas->fields['BASE']); 
    if ($sqlConsulta != '') {
      $sqlConsulta .= ' UNION ALL ';
    };
    $sqlAux = ($sqlProductos != '')?'and 0 < (select count(*) 
                                              from ' . $RsEmpresas->fields["NOMBRE_BASE"] . '.dbo.glconceptos I 
                                                   inner join ' . $RsEmpresas->fields["NOMBRE_BASE"] . '.dbo.glRubros R on I.rubro = R.rubro 
                                              where 1=1 and I.concepto = IV.concepto '.$sqlProductos.'
                                             )':'';
    $sqlConsulta .= "Select distinct " .$RsEmpresas->fields['BASE']. " as BASE, B.DESCRI, T.CLAVE, TIT.DESCRI AS DTITULAR,
                            X.COMPROB, X.CLIENTE, X.TITULAR, X.FECHA, X.TIPO_MOV, X.LETRA, X.PTO_VENTA, X.NUMERO, T.CREDITO, 
                            isnull(X.importe * " . $_SESSION["BaseMadre"] . "valorcredito(T.credito), 0) as IMPORTE, 
                            isnull(P.cantidad * " . $_SESSION["BaseMadre"] . "valorcredito(T.credito),0) as PERSONAS,
                            isnull(PR.RAZON_SOCIAL, X.RAZON_SOCIAL) AS RAZON_SOCIAL, '".$RsEmpresas->fields["NOMBRE_BASE"]."' 
                            AS NOMBRE_BASE
                     From BASES B,
                          " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.veventas X 
                          inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.ccCliPrv PR 
                          on X.cliente = PR.cli_prv and x.sub_cta = PR.sub_cta
                          inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.veimputa IV 
                          on X.comprob = IV.comprob 
                          inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.veTipoMov T 
                          on T.tipo_mov = X.tipo_mov 
                          inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.gltitulares TIT 
                          on X.titular = TIT.titular 
                          left outer join (select sum(VE.cantidad) as cantidad, VE.comprob 
                                           from " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.veimputa VE  
                                                inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.glconceptos I 
                                                    inner join " . $RsEmpresas->fields["NOMBRE_BASE"] . ".dbo.glRubros R
                                                    on I.rubro = R.rubro 
                                                on I.concepto = VE.concepto 
                                           where isnull(I.personas,0) = 1 
                                           group by VE.comprob) P
                          on P.comprob = X.comprob " .
                    "where 1=1 AND B.BASE = " .$RsEmpresas->fields['BASE'] . 
                           $sqlAux .
                           $sqlTitulares .
                           $sqlPeriodos .
                           $sqlComprobantes .
                           $sqlModulo . " ";

    $RsEmpresas->MoveNext();
  }

//  $sqlConsulta .= 'order by X.fecha, T.clave, X.letra, X.pto_venta, X.numero';
  $sqlConsulta .= 'order by Dtitular, X.fecha, T.clave, X.letra, X.pto_venta, X.numero';

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


  $totalParcial = 0;
  $totalGeneral = 0;   
  $baseAnt = "";
  $tituAnt = "";

  $resu = '<div class="tituloresultado"><span class="" id="lblTitulo">Comprobantes Detallados por Unidad de Negocio</span></div>
           <table id="tablaResultado" class="display table table-striped table-bordered sticky-header" style="border: none; width:100%">
             <tbody>';

  while (!$RsConsulta->EOF) {

    //cuando hace el corte de control tengo que agregar otra tabla nueva con el resultado, no un nuevo row
    if (($baseAnt != $RsConsulta->fields['BASE']) || ($tituAnt != $RsConsulta->fields['TITULAR'])) {
      if ($baseAnt != "") {
        $resu .= '<tr style="background-color: #ecf0f5;">
                    <td style="border: none;" colspan="100%"></td>
                  </tr>
                  <tr class="subtotales odd" style="background-color: red; ">
                    <td style="border-right: 0;" colspan="3">
                      Total ' . $auxTotal . '
                    </td>
                    <td style="border-left: 0; text-align: right;" colspan="50%">
                      $'.number_format($totalParcial,2,'.',',').'
                    </td>
                  </tr>
                  <tr style="background-color: #ecf0f5;">
                    <td style="border: none;" colspan="100%"></td>
                  </tr>';
      }
      
      $resu .= '<tr style="background-color: rgb(60, 66, 86)">
                  <td style="color: aliceblue; letter-spacing: 3px;  font-weight: bolder;   font-size: 19px;" colspan="100%">
                    ' . utf8_encode($RsConsulta->fields['DTITULAR']) . '
                  </td>
                </tr>';

      $totalParcial = 0;
      $baseAnt = $RsConsulta->fields['BASE'];
      $tituAnt = $RsConsulta->fields['TITULAR'];
      $auxTotal = utf8_encode($RsConsulta->fields['DTITULAR']);
    }

    $xComprob = utf8_encode($RsConsulta->fields['CLAVE']) . " " . 
                utf8_encode($RsConsulta->fields['LETRA']) . " " . 
                str_pad($RsConsulta->fields['PTO_VENTA'], 4, '0', STR_PAD_LEFT) . "-" .
                str_pad($RsConsulta->fields['NUMERO'], 8, '0', STR_PAD_LEFT);

    //$totalParcial += (float)$RsConsulta->fields['IMPORTE'];
    //$totalGeneral += (float)$RsConsulta->fields['IMPORTE'];

    $resu .= '<tr style="background-color: #ecf0f5;">
                <td style="border: none;" colspan="100%"></td>
              </tr>
              <tr style="background-color: rgb(219, 89, 22); color: aliceblue;">
                <td colspan="5">
                  <div class="row">
                    <div class="col-sm-2">EMISI&Oacute;N: ' . $RsConsulta->UserTimeStamp($RsConsulta->fields['FECHA'], 'd/m/Y') . '</div>
                    <div class="col-sm-2">COMPROBANTE: ' . $xComprob . '</div>
                    <div class="col-sm-3">UNIDAD DE NEGOCIO: ' . utf8_encode($RsConsulta->fields['DTITULAR']) . '</div>
                    <div class="col-sm-3">CLIENTE: ' . utf8_encode($RsConsulta->fields['RAZON_SOCIAL']) . '</div>
                    <div class="col-sm-2">IMPORTE: $' .  number_format($RsConsulta->fields['IMPORTE'], 2, ',', '.') . '</div>
                  </div>
                </td>
              </tr>
              <tr style="background-color: rgb(219, 89, 22); color: aliceblue;">
                <td class="thalign  text-left" width="50%">PRODUCTO</td>
                <td class="thalign " width="10%">CANTIDAD</td>
                <td class="thalign " width="10%">PRECIO</td>
                <td class="thalign " width="10%">IVA</td>
                <td class="thalign " width="20%">TOTAL</td>
              </tr>';

    //ACA HAGO LA CONSULTA DEL DETALLE
    $sqlDetalle = "select C.CONCEPTO, (C.cantidad * " . $_SESSION["BaseMadre"] . "ValorCredito(" . (float)($RsConsulta->fields["CREDITO"]) . ")) as CANTIDAD, 
                          isnull(C.precio, 0) as PRECIO, R.codigo as RUBRO, I.CODIGO, 
                          I.descri as IDESCRI, R.descri as RDESCRI, " . $RsConsulta->fields['NOMBRE_BASE'] . ".dbo.veImpoRel(C.comprob,C.item) as IVA  
                   from " . $RsConsulta->fields['NOMBRE_BASE']. ".dbo.veimputa C 
                        inner join " . $RsConsulta->fields['NOMBRE_BASE'] . ".dbo.glconceptos I 
                            inner join " . $RsConsulta->fields['NOMBRE_BASE'] . ".dbo.glrubros R 
                            on I.rubro = R.rubro 
                        on C.concepto = I.concepto 
                   where comprob = '" . $RsConsulta->fields['COMPROB'] . "' and isnull(C.gravamen,0) = 0 " .
                   $sqlProductos ."
                   order by R.codigo, I.codigo";

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

    while (!$RsDetalle->EOF) {
      $xTotal = 0;
      $xTotal = ( ( (float)$RsDetalle->fields["CANTIDAD"] * (float)$RsDetalle->fields["PRECIO"]) );
      $xTotal += (float)$RsDetalle->fields["IVA"] ;
      $resu .= '      <tr>
                        <td class="numerales text-left">[' . $RsDetalle->fields['RUBRO'] . ' - ' . $RsDetalle->fields['CODIGO'] . '] - ' . utf8_encode($RsDetalle->fields['RDESCRI']) . ' - ' . utf8_encode($RsDetalle->fields['IDESCRI']) . '</td>
                        <td class="numerales">' . number_format($RsDetalle->fields['CANTIDAD'], 2, ',', '.') . '</td>
                        <td class="numerales">$' . number_format($RsDetalle->fields['PRECIO'], 2, ',', '.') . '</td>
                        <td class="numerales">$' . number_format($RsDetalle->fields['IVA'], 2, ',', '.') . '</td>
                        <td class="numerales">$' . number_format($xTotal, 2, ',', '.') . '</td>
                      </tr>';  
    

      $totalParcial += (float)$xTotal;
      $totalGeneral += (float)$xTotal;
      $RsDetalle->MoveNext();
    }

    $RsConsulta->MoveNext(); 
  }

  //Total último grupo
  $resu .= '<tr style="background-color: #ecf0f5;">
              <td style="border: none;" colspan="100%"></td>
            </tr>
            <tr class="subtotales odd" style="background-color: red; ">
              <td style="border-right: 0;" colspan="3">
                Total ' . $auxTotal . '
              </td>
              <td style="border-left: 0; text-align: right;" colspan="50%">
                $'.number_format($totalParcial,2,'.',',').'
              </td>
            </tr>
            <tr style="background-color: #ecf0f5;">
              <td style="border: none;" colspan="100%"></td>
            </tr>';

  //Total general
  $resu .= '<tr style="font-size: 20px; color: #db5916; background-color: #3e3e3e;">
              <td style="border-right: 0;" colspan="3">
                Total General
              </td>
              <td style="border-left: 0; text-align: right;" colspan="50%">
                $'.number_format($totalGeneral,2,'.',',').'
              </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();  
?>