<?php


// CRIAR MENSALIDADES
// **********************************
function mensalidadeCriar($options){ global $bd;

  // Informações Geral
  $periodo_mes = $options['periodo_mes'];
  $periodo_ano = $options['periodo_ano'];
  $vencimento = $options['vencimento'];

  // Clubes
  $sql = $bd->getConexao()->prepare('
  SELECT
    clubes.id as clube_id,
    clubes_financeiro.documento,
    clubes_configuracao.plano_formato,
    clubes_configuracao.plano,
    clubes_config_planos.status as possui_sistema_antigo,
    clubes_configuracao.plano_co,
    clubes_configuracao_clubesonline.nivel_sistema as plano_co_tipo,
    clubes_configuracao.bd,
    clubes.visualizacao
  FROM clubes
    LEFT JOIN clubes_financeiro ON
        clubes_financeiro.id_clube = clubes.id AND
        clubes_financeiro.periodo_mes = :periodo_mes AND
        clubes_financeiro.periodo_ano = :periodo_ano AND
        clubes_financeiro.status > 0
    LEFT JOIN clubes_configuracao ON clubes_configuracao.id_clube = clubes.id
    LEFT JOIN clubes_configuracao_clubesonline ON clubes_configuracao_clubesonline.id_clube = clubes.id
    LEFT JOIN clubes_config_planos ON clubes_config_planos.id_clube = clubes.id AND id_produto = 1
  WHERE (cancelado = 0 OR clubes_financeiro.documento IS NOT NULL) AND clubes.status >0 AND clubes.status <9');
  $sql->bindValue(':periodo_mes', $periodo_mes, PDO::PARAM_STR);
  $sql->bindValue(':periodo_ano', $periodo_ano, PDO::PARAM_STR);
  if( $sql->execute() ) { $resul_clubes = $sql->fetchall(PDO::FETCH_ASSOC);}

  echoPre($resul_clubes);


  /*
  // Registros dos clubes
  $sql = $bd->getConexao()->prepare('
  SELECT
    clubes.id as clube_id,
    clubes_financeiro.documento,
    clubes_configuracao.plano_formato,
    clubes_configuracao.plano,
    clubes_config_planos.status as possui_sistema_antigo,
    clubes_configuracao.plano_co,
    clubes_configuracao_clubesonline.nivel_sistema as plano_co_tipo,
    clubes_configuracao.bd,
    clubes.visualizacao
  FROM clubes
    LEFT JOIN clubes_financeiro ON
        clubes_financeiro.id_clube = clubes.id AND
        clubes_financeiro.periodo_mes = :periodo_mes AND
        clubes_financeiro.periodo_ano = :periodo_ano AND
        clubes_financeiro.status > 0
    LEFT JOIN clubes_configuracao ON clubes_configuracao.id_clube = clubes.id
    LEFT JOIN clubes_configuracao_clubesonline ON clubes_configuracao_clubesonline.id_clube = clubes.id
    LEFT JOIN clubes_config_planos ON clubes_config_planos.id_clube = clubes.id AND id_produto = 1
  WHERE (cancelado = 0 OR clubes_financeiro.documento IS NOT NULL) AND clubes.status >0 AND clubes.status <9');
  $sql->bindValue(':periodo_mes', $periodo_mes, PDO::PARAM_STR);
  $sql->bindValue(':periodo_ano', $periodo_ano, PDO::PARAM_STR);
  if( $sql->execute() ) { $resul_reg_clubes = $sql->fetchall(PDO::FETCH_ASSOC);}

  // Configurações de Planos
  $sql = $bd->getConexao()->prepare('SELECT * FROM planos_config');
  if( $sql->execute() ) { $resul_planos_config = $sql->fetchall(PDO::FETCH_ASSOC);}

  $resul_planos_config = arrayIndice($resul_planos_config);

  $produtos_insert = array();
  $faturas_insert = array();
  $ids_clube_atualizar = array();


  // CLUBES
  foreach($resul_reg_clubes as $l){
    // Identificando se é clube único ou vários
    if(!isset($options['id_clube']) or isset($options['id_clube']) && $options['id_clube']==$l['clube_id']){

      $id_clube = $l['clube_id'];

      // Se não existe fatura
      if($l['documento']=="" && ($options['tipo_gerar']=="fatura_unica" or $options['tipo_gerar']=="fatura_all" && $l['visualizacao']==0)){

        // PLANOS DOS CLUBES (CONFORME FORMATO DO PLANO)
        $sql_planos_clube = $bd->getConexao()->prepare('
            SELECT
              modulos.id as id_modulo,
              modulos_produtos.plano_formato,
              modulos_produtos.id as id_produto,
              modulos_produtos.descricao,
              clubes_config_planos.valor,
              clubes_config_planos.valor_ajuste
            FROM clubes_config_planos
              LEFT JOIN modulos_produtos on modulos_produtos.id = clubes_config_planos.id_produto
              LEFT JOIN modulos on modulos.id = modulos_produtos.id_modulo
            WHERE id_clube = :id_clube AND (clubes_config_planos.status = 1 or modulos_produtos.plano_formato>0) AND modulos.status = 0 AND modulos_produtos.status = 0');
        $sql_planos_clube->bindValue(':id_clube', $id_clube, PDO::PARAM_STR);
        if( $sql_planos_clube->execute() ) { $resul_planos_clube = $sql_planos_clube->fetchall(PDO::FETCH_ASSOC);}


        // SE POSSUI SISTEMA
        // ********************************
        if($l['plano_formato']==0 && $l['possui_sistema_antigo']==1 or $l['plano_formato']==1 && $l['plano']>0){

          // Número de Clientes Ativos
          try{
            $bdclube = new ConeccaoClube($l['bd']);

            // Clientes ativos (ultimos 6 meses)
            $ativos_data_ini = date("Y-m-21", strtotime("-7 months", strtotime('20'.$periodo_ano.'-'.$periodo_mes.'-21')));
            $ativos_data_fim = date("Y-m-20", strtotime("-1 months", strtotime('20'.$periodo_ano.'-'.$periodo_mes.'-20')));

            $sql = $bdclube->getConexao()->prepare('
              SELECT *,
                count(DISTINCT id) as unicos,
                sum(CASE WHEN tipo = 1 THEN 1 ELSE 0 END) AS torneio,
                sum(CASE WHEN tipo = 2 THEN 1 ELSE 0 END) AS cash,
                sum(CASE WHEN tipo = 3 THEN 1 ELSE 0 END) AS bar,
                DATE_FORMAT(data_registro,"%m") AS mes,
                DATE_FORMAT(data_registro,"%Y") AS ano
              FROM (
                SELECT clientes.id, clientes.nome, cash.data_hora_abertura as data_registro, "1" as tipo
                FROM clientes
                  LEFT JOIN (
                             SELECT id_jogador, id_cash, cash.data_hora_abertura
                             FROM cash_registros
                               LEFT JOIN cash on cash.id = cash_registros.id_cash
                             WHERE cash.data_hora_abertura BETWEEN (:data_ini) AND (:data_fim)
                             ORDER BY data_hora_abertura DESC
                           ) cash on cash.id_jogador = clientes.id
                WHERE clientes.excluido = 0 AND cash.data_hora_abertura != ""
                UNION
                SELECT clientes.id, clientes.nome, torneio.data_hora_abertura as data_registro, "2" as tipo
                FROM clientes
                  LEFT JOIN (
                             SELECT id_jogador, id_torneio, torneios.data_hora_abertura
                             FROM torneios_registros
                               LEFT JOIN torneios on torneios.id = torneios_registros.id_torneio
                             WHERE torneios.data_hora_abertura BETWEEN (:data_ini) AND (:data_fim)
                             ORDER BY data_hora_abertura DESC
                           ) torneio on torneio.id_jogador = clientes.id
                WHERE clientes.excluido = 0 AND torneio.data_hora_abertura != ""
                UNION
                SELECT clientes.id, clientes.nome, bar.data_hora_abertura as data_registro, "3" as tipo
                FROM clientes
                  LEFT JOIN (
                             SELECT id_cliente, bar_comandas.data_hora_abertura
                             FROM bar_comandas
                             WHERE bar_comandas.data_hora_abertura BETWEEN (:data_ini) AND (:data_fim)
                             ORDER BY data_hora_abertura DESC
                           ) bar on bar.id_cliente = clientes.id
                WHERE clientes.excluido = 0 AND bar.data_hora_abertura != ""
                UNION
                SELECT clientes.id, clientes.nome, clientes.data_cadastro as data_registro, "4" as tipo
                FROM clientes
                WHERE clientes.excluido = 0 AND clientes.data_cadastro BETWEEN (:data_ini) AND (:data_fim)
                ) total
              ORDER BY data_registro ASC, id ASC');
            $sql->bindValue(':data_ini', $ativos_data_ini, PDO::PARAM_STR);
            $sql->bindValue(':data_fim', $ativos_data_fim, PDO::PARAM_STR);
            if( $sql->execute() ) { $resul_cliente_ativos = $sql->fetch(PDO::FETCH_ASSOC);}

            $clientes_atv = $resul_cliente_ativos['unicos'];

          }catch(PDOException $e){
            //echo $e->getMessage();
            $clientes_atv=0;
          }
          $bdclube = null;



          // FORMATO ANTIGO (MÓDULO A MÓDULO)
          // ********************************
          if($l['plano_formato']==0 && $l['possui_sistema_antigo']==1){

            foreach($resul_planos_clube as $lp){ if($lp['plano_formato']==0){

              // Se módulo não for de CLIENTES
              if($lp['id_modulo']!=4){
                $produtos_insert[] = '("'.$id_clube.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$lp['id_produto'].'", "'.$lp['descricao'].'", "", "", "'.$lp['valor'].'", "'.$lp['valor_ajuste'].'", "", "1")';
              }

              // Se módulo for CLIENTE
              if($lp['id_modulo']==4 &&
                (
                  $lp['id_produto']==7 && $clientes_atv<=500 or
                  $lp['id_produto']==8 && $clientes_atv>500 && $clientes_atv<=1500 or
                  $lp['id_produto']==9 && $clientes_atv>1500 && $clientes_atv<=3000 or
                  $lp['id_produto']==10 && $clientes_atv>3000
                )
              ){
                $ativos_data_ini = date("21/m/Y", strtotime("-7 months", strtotime('20'.$periodo_ano.'-'.$periodo_mes.'-21')));
                $ativos_data_fim = date("20/m/Y", strtotime("-1 months", strtotime('20'.$periodo_ano.'-'.$periodo_mes.'-20')));
                $obs_ativos = 'Ref. &agrave; '.$clientes_atv.' Clientes Ativos ('.$ativos_data_ini.' &agrave; '.$ativos_data_fim.')' ;

                $produtos_insert[] = '("'.$id_clube.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$lp['id_produto'].'", "'.$lp['descricao'].'", "", "", "'.$lp['valor'].'", "'.$lp['valor_ajuste'].'", "'.$obs_ativos.'", "1")';
              }

            }}

          }



          // FORMATO PLANOS
          // ********************************
          if($l['plano_formato']==1 && $l['plano']>0){

            if($l['plano']==1){$id_produto=38;}
            if($l['plano']==2){$id_produto=39;}
            if($l['plano']==3){$id_produto=40;}
            if($l['plano']==4){$id_produto=41;}
            if($l['plano']==5){$id_produto=42;}

            // Clientes máximo do plano
            $clientes_max = $resul_planos_config[21]['plano'.$l['plano']];

            // Produtos da Fatura
            foreach($resul_planos_clube as $lp){ if($lp['plano_formato']==1){

              // Plano
              if($lp['id_modulo']!=4 &&
                (
                  $l['plano']==1 && $lp['id_produto']==38 or
                  $l['plano']==2 && $lp['id_produto']==39 or
                  $l['plano']==3 && $lp['id_produto']==40 or
                  $l['plano']==4 && $lp['id_produto']==41 or
                  $l['plano']==5 && $lp['id_produto']==42
                )
              ){
                $produtos_insert[] = '("'.$id_clube.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$lp['id_produto'].'", "'.$lp['descricao'].'", "", "", "'.$lp['valor'].'", "'.$lp['valor_ajuste'].'", "", "1")';
              }

              // Clientes ativos (Exedente)
              if($lp['id_modulo']==4 && $clientes_max>0 && $clientes_atv > $clientes_max &&
                (
                  $l['plano']==1 && $lp['id_produto']==48 or
                  $l['plano']==2 && $lp['id_produto']==49 or
                  $l['plano']==3 && $lp['id_produto']==50 or
                  $l['plano']==4 && $lp['id_produto']==51 or
                  $l['plano']==5 && $lp['id_produto']==52
                )
              ){
                $ativos_data_ini = date("21/m/Y", strtotime("-7 months", strtotime('20'.$periodo_ano.'-'.$periodo_mes.'-21')));
                $ativos_data_fim = date("20/m/Y", strtotime("-1 months", strtotime('20'.$periodo_ano.'-'.$periodo_mes.'-20')));
                $obs_ativos = 'Máximo do Plano: '.$clientes_max.' / Total de Clientes Ativos: '.$clientes_atv.' ('.$ativos_data_ini.' &agrave; '.$ativos_data_fim.')' ;

                $qtd = $clientes_atv - $clientes_max;
                $valor_total = $qtd * $lp['valor'];
                $valor_total_ajuste = $qtd * $lp['valor_ajuste'];

                $produtos_insert[] = '("'.$id_clube.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$lp['id_produto'].'", "'.$lp['descricao'].'", "'.$qtd.'",  "'.$lp['valor'].'", "'.$valor_total.'", "'.$valor_total_ajuste.'", "'.$obs_ativos.'", "1")';
              }

            }}

          }

        } // FIM SISTEMA DE CLUBES



        // LIGA / CLUBE ONLINE
        // ********************************
        if($l['plano_co']>0){

          // Produtos da Fatura
          foreach($resul_planos_clube as $lp){ if($lp['plano_formato']==2){

            // LIGA
            if($l['plano_co_tipo']==1 &&
              (
                $l['plano_co']==4 && $lp['id_produto']==67
              )
            ){
              $produtos_insert[] = '("'.$id_clube.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$lp['id_produto'].'", "'.$lp['descricao'].'", "", "", "'.$lp['valor'].'", "'.$lp['valor_ajuste'].'", "", "1")';
            }

            // CLUBE
            if($l['plano_co_tipo']==2 &&
              (
                $l['plano_co']==1 && $lp['id_produto']==68 or
                $l['plano_co']==2 && $lp['id_produto']==54 or
                $l['plano_co']==3 && $lp['id_produto']==55 or
                $l['plano_co']==4 && $lp['id_produto']==56 or
                $l['plano_co']==5 && $lp['id_produto']==57 or
                $l['plano_co']==6 && $lp['id_produto']==58
              )
            ){
              $produtos_insert[] = '("'.$id_clube.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$lp['id_produto'].'", "'.$lp['descricao'].'", "", "", "'.$lp['valor'].'", "'.$lp['valor_ajuste'].'", "", "1")';
            }

          }}

        }

        array_push($ids_clube_atualizar, $id_clube);

      }

    }
  } // Fim Foreach Clubes

  // Cadastrar Compras
  if(count($produtos_insert)>0){
    $sql = $bd->getConexao()->prepare('INSERT INTO clubes_compras
    (id_clube, periodo_mes, periodo_ano, id_produto, descricao, qtd, valor_unit, valor, valor_ajuste, obs, status) VALUES '.implode(',', $produtos_insert));
    if($sql->execute()) ;
  }

  // FATURAS
  // ********************************
  if(count($ids_clube_atualizar)>0){

    // Total das compras cadastradas (planos e compras)
    $sql = $bd->getConexao()->prepare('
    SELECT
      clubes_compras.id_clube,
      sum(valor) as valor,
      sum(valor_ajuste) as valor_ajuste,
      IFNULL(financeiro.qtd,0) as qtd
    FROM clubes_compras
      LEFT JOIN (
                  SELECT id_clube, count(DISTINCT id) AS qtd
                  FROM clubes_financeiro
                  WHERE status>0
                  GROUP BY id_clube
                ) financeiro on financeiro.id_clube = clubes_compras.id_clube
    WHERE clubes_compras.id_clube in('.listarIDs($ids_clube_atualizar).') AND periodo_mes = :mes AND periodo_ano = :ano AND excluido = 0
    GROUP BY clubes_compras.id_clube');
    $sql->bindValue(':mes', $periodo_mes, PDO::PARAM_STR);
    $sql->bindValue(':ano', $periodo_ano, PDO::PARAM_STR);
    if( $sql->execute() ) { $resul_compras = $sql->fetchall(PDO::FETCH_ASSOC);}


    foreach ($resul_compras as $l){

      $id_clube=$l['id_clube'];

      $valor_tt_fatura = $l['valor'] + $l['valor_ajuste'];

      if(isset($options['valor_especifico']) && $options['valor_especifico']!=""){
        $valor_tt_fatura = moeda($options['valor_especifico']);
      }

      $qtd_registros = numerodigitos($l['qtd']+1,3);
      $documento = $id_clube.'.'.$qtd_registros.'.'.$periodo_ano.'-'.numerodigitos($periodo_mes,2);
      $descricao='Licen&ccedil;a de Uso';

      if($valor_tt_fatura==0){
        $faturas_insert[] = '("'.$id_clube.'", "'.$documento.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$valor_tt_fatura.'", "'.$vencimento.'", NOW(), "'.$descricao.'", 4)';
      }else{
        $faturas_insert[] = '("'.$id_clube.'", "'.$documento.'", "'.$periodo_mes.'", "'.$periodo_ano.'", "'.$valor_tt_fatura.'", "'.$vencimento.'", null, "'.$descricao.'", 1)';
      }
      

    }

    if(count($faturas_insert)>0){
      $sql = $bd->getConexao()->prepare('INSERT INTO clubes_financeiro
      (id_clube, documento, periodo_mes, periodo_ano, valor, vencimento, data_pgto, descricao, status) VALUES '.implode(',', $faturas_insert));
      if($sql->execute()) ;
    }

    // Atualizar produtos comprados como FATURA GERADA
    $sql = $bd->getConexao()->prepare('UPDATE clubes_compras SET status = 1 WHERE id_clube in('.listarIDs($ids_clube_atualizar).') AND periodo_mes = :mes AND periodo_ano = :ano');
    $sql->bindValue(':mes', $periodo_mes, PDO::PARAM_STR);
    $sql->bindValue(':ano', $periodo_ano, PDO::PARAM_STR);
    if( $sql->execute() );

  }
  */

}