<?php
$this->PageTitle = 'Gráfico de cancelamentos';

$options = array();
$Legenda = array();
if(isset($_GET['Clientes']) && !empty($_GET['Clientes'])) {
    $model->setAttributes($_GET['Clientes']);
    $serialize = array();
    foreach($_GET['Clientes'] as $field => $value) {
        if(is_array($value)) {
            foreach($value as $key => $id) {
                $serialize[] = 'Clientes['. $field . '][]='.$id;
            }
        } else {
            $serialize[] = 'Clientes['. $field . ']='.$value;
        }
    }
    $url = implode('&', $serialize);
    $options[] = array(
        'label' => FaHtml::iconExcel(),
        'url' => array('clientes/cancelamentos_excel&'.$url),
        'linkOptions' => array('class' => 'novo')
        );
    $options[] = array(
        'label' => FaHtml::iconReport(),
        'url' => array('clientes/cancelamentos_relatorio&'.$url),
        'linkOptions' => array('class' => 'novo')
        );
} else {
	$options[] = array(
        'label' => FaHtml::iconReport(),
        'url' => array('clientes/cancelamentos_relatorio'),
        'linkOptions' => array('class' => 'novo')
        );
}
$options[] = array(
    'label' => FaHtml::iconSetaClose(),
    'url' => '#',
    'linkOptions' => array('class' => 'search-button')
    );
$options[] = array(
    'label' => FaHtml::iconRefresh(),
    'url' => 'javascript:void(0);',
    'linkOptions' => array('onclick' => 'reloadFrame();',
        'class' => 'refresh-button'
    )
);
$this->menu = $options;
?>

<div class="search-form" style="display:<?php echo isset($_GET['Clientes']) && !empty($_GET['Clientes']) ? 'hidden' : 'block'; ?>">
    <?php $this->renderPartial('_search_cancelamentos', array('model' => $model)); ?>
</div><!-- search-form -->
<?php
if(isset($_GET['Clientes']) && !empty($_GET['Clientes'])) {
	$conditions = array();
    $Legenda = array();
    if (!empty($model->CLI_IDREVENDA)) {
        $revenda = Revendas::model()->findByPk($model->CLI_IDREVENDA);
        $Legenda[] = '<span class="legend-desc">Unidade de Negócios:</span> ' . (isset($revenda->REV_NOME) ? $revenda->REV_NOME : 'Não identificada');
        $cidades = GxHtml::listDataEx(Regioescidades::model()->findAll('RCD_IDREVENDA = ' . $model->CLI_IDREVENDA), 'RCD_IDCIDADE', 'RCD_IDCIDADE');
        $conditions[] = 'CLI_CIDADE in ('.implode(',', $cidades).')';
    }

    if (!empty($model->CLI_CIDADE)) {
        if (is_array($model->CLI_CIDADE)) {
            foreach($model->CLI_CIDADE as $cid) {
                $cidade = Cidades::model()->findByPk($cid);
                $Legenda[] = '<span class="legend-desc">Cidade:</span> ' . (isset($cidade->CID_DESCRICAO) ? $cidade->CID_DESCRICAO : 'Não identificada');
            }
            $conditions[] = 'CLI_CIDADE in ('. implode(',', $model->CLI_CIDADE).')';
        } else {
            $cidade = Cidades::model()->findByPk($model->CLI_CIDADE);
            $Legenda[] = '<span class="legend-desc">Cidade:</span> ' . (isset($cidade->CID_DESCRICAO) ? $cidade->CID_DESCRICAO : 'Não identificada');
            $conditions[] = 'CLI_CIDADE = ' . $model->CLI_CIDADE;
        }
    }

    if (User::isRevenda()) {
        $conditions[] = 'CLI_CIDADE in ('.User::getCidades(true).')';
    }

    if(!empty($model->CLI_IDRESCISAO)) {
        if (is_array($model->CLI_IDRESCISAO)) {
            foreach($model->CLI_IDRESCISAO as $mot) {
                $motivo = Motivos::model()->findByPk($model->CLI_IDRESCISAO);
                $Legenda[] = '<span class="legend-desc">Motivo da rescisão:</span> ' . (isset($motivo->MOT_DESCRICAO) ? $motivo->MOT_DESCRICAO : 'Não identificado');
            }
            $conditions[] = 'CLI_IDRESCISAO in ('. implode(',', $model->CLI_IDRESCISAO).')';
        } else {
            $motivo = Motivos::model()->findByPk($model->CLI_IDRESCISAO);
            $Legenda[] = '<span class="legend-desc">Motivo da rescisão:</span> ' . (isset($motivo->MOT_DESCRICAO) ? $motivo->MOT_DESCRICAO : 'Não identificado');
            $conditions[] = 'CLI_IDRESCISAO = ' . $model->CLI_IDRESCISAO;
        }
    }

    if(!empty($model->CLI_VLRMENSAL)) {
        $Legenda[] = '<span class="legend-desc">Valor mensal maior que:</span> R$ ' . $model->CLI_VLRMENSAL;
        $conditions[] = 'CLI_VLRMENSAL >= '. Util::convertdecimal($model->CLI_VLRMENSAL);
    }
    if(!empty($model->CLI_VLRMENSAL_FINAL)) {
        $Legenda[] = '<span class="legend-desc">Valor mensal menor que:</span> R$ ' . $model->CLI_VLRMENSAL_FINAL;
        $conditions[] = 'CLI_VLRMENSAL <= '. Util::convertdecimal($model->CLI_VLRMENSAL_FINAL);
    }

    if(!empty($model->CLI_PRODUTO)) {
        if (is_array($model->CLI_PRODUTO)) {
            foreach($model->CLI_PRODUTO as $prod) {
                $produto = Modulos::model()->findByPk($prod);
                $Legenda[] = '<span class="legend-desc">Produto que usava:</span> ' . (isset($produto->MOD_DESCRICAO) ? $produto->MOD_DESCRICAO : 'Não identificado');
            }
            $conditions[] = 'CLI_PRODUTO in ('. implode(',', $model->CLI_PRODUTO).')';
        } else {
            $produto = Modulos::model()->findByPk($model->CLI_PRODUTO);
            $Legenda[] = '<span class="legend-desc">Produto que usava:</span> ' . (isset($produto->MOD_DESCRICAO) ? $produto->MOD_DESCRICAO : 'Não identificado');
            $conditions[] = 'CLI_PRODUTO = ' . $model->CLI_PRODUTO;
        }
    }

    if (is_array($model->CLI_MODULOS_COMPLEMENTARES)) {
        $modulos = implode(',', $model->CLI_MODULOS_COMPLEMENTARES);
        $conditions_complementares = array();
        $conditions_complementares[] = 'CLI_MODULO1 IN ('.$modulos.')';
        $conditions_complementares[] = 'CLI_MODULO2 IN ('.$modulos.')';
        $conditions_complementares[] = 'CLI_MODULO3 IN ('.$modulos.')';
        $conditions_complementares[] = 'CLI_MODULO4 IN ('.$modulos.')';
        $conditions_complementares[] = 'CLI_MODULO5 IN ('.$modulos.')';
        $conditions[] = '(' . implode(' OR ', $conditions_complementares) . ')';

        $sql = "SELECT MOD_DESCRICAO as modulo from modulos where MOD_IDMODULO in ($modulos) order by MOD_DESCRICAO ASC";
        $command = Yii::app()->db->createCommand($sql);
        $results = $command->queryAll();
        $mods = array();
        foreach($results as $result) {
            $Legenda[] = '<span class="legend-desc">Módulo complementar:</span> ' . $result['modulo'];
        }
    }

    $conditions[] = 'CLI_SITUACAO = "I"';
    $conditions[] = '(CLI_IDRESCISAO <> 110 or CLI_IDRESCISAO is null)';
    if(empty($model->CLI_DTRESCISAO)) {
        $sql = "SELECT MIN(CLI_DTRESCISAO) as inicio from clientes where ".implode(' AND ', $conditions);
        $command = Yii::app()->db->createCommand($sql);
        $result = $command->queryAll();
        if(isset($result[0]['inicio'])) {
            $data = DateTime::createFromFormat('Y-m-d', $result[0]['inicio']);
            $model->CLI_DTRESCISAO = $data->format('d/m/Y');
        } else{
            $model->CLI_DTRESCISAO = '01/01/' . date('Y');
        }
    }
    if (!empty($model->CLI_DTRESCISAO)) {
        $Legenda[] = '<span class="legend-desc">Data inicial:</span> ' . $model->CLI_DTRESCISAO;
        $conditions[] = "CLI_DTRESCISAO >= '" . Util::formatDataMysql($model->CLI_DTRESCISAO) . "'";
    }

    if(empty($model->CLI_DTRESCISAO_FINAL)) {
        $sql = "SELECT MAX(CLI_DTRESCISAO) as final from clientes where ".implode(' AND ', $conditions);
        $command = Yii::app()->db->createCommand($sql);
        $result = $command->queryAll();
        if(isset($result[0]['final'])) {
            $data = DateTime::createFromFormat('Y-m-d', $result[0]['final']);
            $model->CLI_DTRESCISAO_FINAL = $data->format('d/m/Y');
        } else{
            $model->CLI_DTRESCISAO_FINAL = '31/12/' . date('Y');
        }
    }
    if (!empty($model->CLI_DTRESCISAO_FINAL)) {
        $Legenda[] = '<span class="legend-desc">Data final:</span> ' . $model->CLI_DTRESCISAO_FINAL;
        $conditions[] = "CLI_DTRESCISAO <= '" . Util::formatDataMysql($model->CLI_DTRESCISAO_FINAL) . "'";
    }

    if(!empty($conditions)) {
        $conditions = implode(' AND ', $conditions);
    } else {
        $conditions = 'CLI_SITUACAO = "I"';
    }
    $categories = array();
    $series = array();
    $count = 0;
    $filtro_por = '';
    if($model->SEARCH_GROUP == 'PROD') {
        $filtro_por = 'Produto que usava';
        $sql = "SELECT COUNT(distinct(CLI_IDCLIENTE)) as count, MOD_DESCRICAO as produto from clientes left join modulos on MOD_IDMODULO = CLI_PRODUTO where $conditions GROUP by CLI_PRODUTO order by MOD_DESCRICAO ASC";
        $command = Yii::app()->db->createCommand($sql);
        $results = $command->queryAll();
        foreach($results as $result) {
            $categories[] = empty($result['produto']) ? 'Não identificado' : $result['produto'];
            $series[] = (int) $result['count'];
            $count += $result['count'];
        }
    } elseif($model->SEARCH_GROUP == 'CID') {
        $filtro_por = 'Cidade';
        $sql = "SELECT COUNT(distinct(CLI_IDCLIENTE)) as count, concat(CID_DESCRICAO, ' - ', CID_UF) as cidade from clientes left join cidades on CID_IDCIDADE = CLI_CIDADE where $conditions GROUP by CLI_CIDADE order by CID_DESCRICAO ASC";
        $command = Yii::app()->db->createCommand($sql);
        $results = $command->queryAll();
        foreach($results as $result) {
            $categories[] = empty($result['cidade']) ? 'Não identificado' : $result['cidade'];
            $series[] = (int) $result['count'];
            $count += $result['count'];
        }
    } elseif($model->SEARCH_GROUP == 'REV') {
        $filtro_por = 'Unidade de Negócios';
        $sql = "SELECT COUNT(distinct(CLI_IDCLIENTE)) as count, REV_NOME as revenda from clientes inner join regioescidades on RCD_IDCIDADE = CLI_CIDADE inner join revendas on REV_IDREVENDA = RCD_IDREVENDA where $conditions GROUP by REV_IDREVENDA order by REV_NOME ASC";
        $command = Yii::app()->db->createCommand($sql);
        $results = $command->queryAll();
        foreach($results as $result) {
            $categories[] = empty($result['revenda']) ? 'Não identificado' : $result['revenda'];
            $series[] = (int) $result['count'];
            $count += $result['count'];
        }
    } elseif($model->SEARCH_GROUP == 'ANO') {
        $filtro_por = 'Ano';
        $sql = "SELECT COUNT(distinct(CLI_IDCLIENTE)) as count, YEAR(CLI_DTRESCISAO) as ano from clientes where $conditions GROUP by ano order by ano ASC";
        $command = Yii::app()->db->createCommand($sql);
        $results = $command->queryAll();
        foreach($results as $result) {
            $categories[] = empty($result['ano']) ? 'Não identificado' : $result['ano'];
            $series[] = (int) $result['count'];
            $count += $result['count'];
        }
    } elseif($model->SEARCH_GROUP == 'MES') {
        $filtro_por = 'Mês';
        $MesInicial = substr($model->CLI_DTRESCISAO, 3, 2);
        $MesFinal = substr($model->CLI_DTRESCISAO_FINAL, 3, 2);
        $AnoInicial = substr($model->CLI_DTRESCISAO, 6, 4);
        $AnoFinal = substr($model->CLI_DTRESCISAO_FINAL, 6, 4);

        $startDate = strtotime($AnoInicial . "/" . $MesInicial . "/01");
        $endDate = strtotime($AnoFinal . "/" . $MesFinal . "/27");

        $currentDate = $startDate;
        $count = 0;
        while ($currentDate <= $endDate) {
            $qr = array();

            if(!empty($tipo_motivo))
                $qr[] = $tipo_motivo;

            $FiltroLegenda = date('m/Y', $currentDate);

            if ($FiltroLegenda == substr($model->CLI_DTRESCISAO, 3, 7)) {
                $FiltroInicial = date('Y-m', $currentDate);
                $FiltroInicial .= '-' . substr($model->CLI_DTRESCISAO, 0, 2);
            } else {
                $FiltroInicial = date('Y-m-01', $currentDate);
            }

            if ($FiltroLegenda == substr($model->CLI_DTRESCISAO_FINAL, 3, 7)) {
                $FiltroFinal = date('Y-m', $currentDate);
                $FiltroFinal .= '-' . substr($model->CLI_DTRESCISAO_FINAL, 0, 2);
            } else {
                $FiltroFinal = date('Y-m-31', $currentDate);
            }

            $currentDate = strtotime(date('Y/m/01', $currentDate) . ' +1 month');

            $qr[] = "CLI_DTRESCISAO >= '" . $FiltroInicial . "'";
            $qr[] = "CLI_DTRESCISAO <= '" . $FiltroFinal . "'";
            $cond_mensal = $conditions . ' AND ' . implode(' AND ', $qr);
            $result = Clientes::model()->with()->count($conditions . ' AND ' . implode(' AND ', $qr));
            $categories[] = $FiltroLegenda;
            $series[] = (int) $result;
            $count += (int) $result;
        }
    } else { // default -> motivo
        $filtro_por = 'Motivo do cancelamento';
        $sql = "SELECT COUNT(distinct(CLI_IDCLIENTE)) as count, CLI_IDRESCISAO as motivo from clientes where $conditions GROUP by CLI_IDRESCISAO order by CLI_IDRESCISAO ASC";
        $command = Yii::app()->db->createCommand($sql);
        $results = $command->queryAll();
        foreach($results as $result) {
            $categories[] = Motivos::model()->getNomeById($result['motivo']);
            $series[] = (int) $result['count'];
            $count += $result['count'];
        }
    }

    $total = array('Total', $count);
    $TextoLegenda = 'Total: ' . $count . '<ul><li>'.implode('</li><li>', $Legenda) . '</li></ul>';
    $height = 400;
    $legend_items = count($Legenda);
    if($legend_items <= 5) {
        $height += 200;
    } else if ($legend_items <= 10){
        $height += 300;
    } else {
        $height += 400;
    }

    ?>
    <div class="clear"></div>

    <?php
    $this->widget('ext.highcharts.HighchartsWidget', array(
        'scriptPosition' => CClientScript::POS_END,
        'scripts' => array(
            'modules/exporting',
            /*'modules/offline-exporting',*/
            'modules/canvas-tools',
            'modules/export-csv',
            'modules/jspdf',
            'modules/export-clientside',
            ),
        'options' => array(
            'title' => array(
                'text' => 'Gráfico de Cancelamentos'
                ),
            'subtitle' => array(
                'text' => 'por ' . $filtro_por
                ),
            'labels' => array(
            'align' => 'right',
            'x' => -10,
            'y' => 0
            ),
        'lang' => array(
            'printChart' => 'Imprimir Gráfico',
            'downloadPNG' => '',
            'downloadJPEG' => '',
            'downloadSVG' => 'Download imagem (vetor SVG)',
            'downloadPDF' => '',
            'contextButtonTitle' => 'Opções',
            'loading' => 'Carregando...',
            'downloadCSV' => '',
            'downloadXLS' => 'Download excel (xls)',
            'viewData' => ''
            ),
        'chart' => array(
            'height' => $height,
            'defaultSeriesType' => 'column',
            'style' => array(
                'fontFamily' => 'Arial, Helvetica, sans-serif'
                )
            ),
        'xAxis' => array(
            'categories' => $categories,
            'labels' => array(
                'rotation' => ((count($categories) > 20) ? 270 : -45),
                'align' => 'right',
                'step' => 1,
                ),
            ),
        'yAxis' => array(
            'title' => array(
                'text' => 'Cancelamentos'
                ),
            ),
        'series' => array(
            array(
                'name' => $TextoLegenda,
                'data' => $series,
                'step' => true,
                'dataLabels' => array(
                    'align' => 'center',
                    'enabled' => true,
                    'rotation' => ((count($categories) > 20) ? 270 : 0),
                    'x' => ((count($categories) > 20) ? 0 : 0),
                    'y' => ((count($categories) > 20) ? -9 : -7),
                    'style' => 'font: "normal 11px Verdana, sans-serif"'
                    ),
                )
            ),
        'legend' => array(
            'useHTML' => true,
            ),
        'credits' => array(
            'enabled' => false
            ),
        'tooltip' => array(
            "formatter" =>"js:function () {
                var s = '<b>' + this.x + '</b>';

                $.each(this.points, function () {
                    s += '<br/><b>Clientes</b>: ' + this.y + ' de um total de ".$count."';
                });

                return s;
            }",
            'positioner' => 'js:function (labelWidth, labelHeight, point) {
                var tooltipX, tooltipY;
                tooltipX = point.plotX + chart.plotLeft - (labelWidth /2);
                tooltipY = point.plotY + chart.plotTop - labelHeight - 30;
                return {
                    x: tooltipX,
                    y: tooltipY
                };
            }',
            'shared' => true,
            ),
         'exporting' => array(
            'printMaxWidth' => 1000,
            'width' => 1000,
            'filename' => Util::slug('grafico_cancelamentos_por_' . $filtro_por .'_'. date('d_m_Y_H_i_s'))
            )
            )
        ));
    ?>
    <div class="clear"></div>
    <div class="resumo_grafico">
        <table class="items">
            <thead>
                <tr>
                    <th><?php echo $filtro_por; ?></th>
                    <th>Total</th>
                    <th>Percentual</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach($categories as $key => $funcionario): ?>
                <tr>
                    <td><?php echo $funcionario; ?></td>
                    <td class="resultado"><?php echo isset($series[$key]) ? $series[$key] : '0'; ?></td>
                    <td class="resultado"><?php echo isset($series[$key]) && $count > 0 ? number_format(($series[$key] / $count * 100), 2, ',', ' ') . '%' : '0%'; ?></td>
                </tr>
            <?php endforeach; ?>
            <?php if (count($total) == 2): ?>
            <tr class="total">
                <td><?php echo $total[0]; ?></td>
                <td class="" colspan="2"><?php echo $total[1] ?></td>
            </tr>
        <?php endif; ?>
    </tbody>
</table>
</div>
<style type="text/css">
        .highcharts-contextmenu hr {
            margin: 5px 0!important;
        }
        .highcharts-contextmenu div div {
            margin-bottom: 5px;
        }
        .highcharts-legend-item span {
            padding-top: 2px;
        }
        .highcharts-legend-item span ul {
            font-weight: normal;
        }
        .highcharts-legend-item span ul .legend-desc {
            font-weight: bold;
        }
        .highcharts-legend-item span ul li ul {
            width: <?php echo $height; ?>px;
            max-height: 100px;
            font-size: 8px;
            overflow: scroll;
        }
        .highcharts-legend-item span ul li {
            margin-right: 3px;
        }
        .highcharts-legend-item span ul li ul li {
            display: inline;
            white-space: pre-wrap;
            margin-right: 3px;
            line-height: 12px;
        }
        .highcharts-legend-item span ul li ul li:after {
            content: ";"
        }
        @media print {
            body   {
                /* this affects the margin on the content before sending to printer */
                margin: 0px;
            }
            .highcharts-button {
                display: none!important;
            }
            .highcharts-container {
                text-align: center;
            }
            .chart-wrapper {
            }
            @page {
                size: landscape;
                /* this affects the margin in the printer settings */
                margin: 0mm 0mm 0mm 0mm;
            }
            .highcharts-legend-item span {
                padding-top: 2px;
            }
            .highcharts-legend-item span ul {
                font-weight: normal;
            }
            .highcharts-legend-item span ul .legend-desc {
                font-weight: bold;
            }
            .highcharts-legend-item span ul li ul {
                width: <?php echo $height; ?>px;
                font-size: 8px;
            }
            .highcharts-legend-item span ul li ul li {
                display: inline;
                white-space: pre-wrap;
                margin-right: 3px;
            }
            .highcharts-legend-item span ul li ul li:after {
                content: ";"
            }
        }
    </style>
<?php } ?>
<style type="text/css">
.filtros h2 {
    line-height: 11px;
}
.filtros {
    background: #FFFFFF;
    padding: 10px;
    padding-top: 5px;
    margin-top: 10px;
}
table.items {
    width: 100%;
    margin-top: 10px;
}
table th,
table td {
    padding: 3px 10px;
}
table th,
table .total td {
    border: 1px solid #BBBCCC;
    background: #C1D2E4;
}
.ui-datepicker table th {
    background: none;
}
table td {
    border: 1px solid #ccc;
    background: #FFFFFF;
}
table td.resultado {
    text-align: center;
}
</style>