<?php
$this->layout = false;

$incluirAnalitico = !$dataProvider->model->SINTETICO;

$Motivos = Motivos::model()->findAll("MOT_TIPO <> 4");
$setor = 'Comercial/Suporte';
if($dataProvider->model->CLI_DT_ULTIMA_ATIVIDADE_SETOR == 'C') {
    $Motivos = Motivos::model()->findAll("MOT_TIPO IN (2,3,5,6)");
    $setor = 'Comercial';
} else if ($dataProvider->model->CLI_DT_ULTIMA_ATIVIDADE_SETOR == 'S') {
    $Motivos = Motivos::model()->findAll("MOT_TIPO = 1");
    $setor = 'Suporte';
}
$ListaMotivos = CHtml::listData($Motivos, 'MOT_IDMOTIVO', 'MOT_IDMOTIVO');

use CrmSpreadsheet\CrmSpreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;

$spreadsheet = new CrmSpreadsheet();
$spreadsheet->setDefaults();
$spreadsheet->getProperties()->setTitle("Relatório de Prospectos / Clientes");

$abaAnalitico = $spreadsheet->getActiveSheet();

if ($incluirAnalitico) {
    $abaAnalitico->setTitle("Analítico");

    $header = array(
        array(
            'name' => 'Data de Cadastro',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Última Atividade Comercial',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Última Atividade Suporte',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Razão Social',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Fantasia',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'CNPJ / CPF',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Endereço',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Nº',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Complemento',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Bairro',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'CEP',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Telefone(s)',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'E-mail',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Cidade',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Status',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Como nos conheceu',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Contador',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Vendedor',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Unidade de Negócios',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Fornecedor',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Última Atividade Comercial',
            'width' => 70,
            'wrap' => true
        ),
        array(
            'name' => 'Penúltima Atividade Comercial',
            'width' => 70,
            'wrap' => true
        ),
        array(
            'name' => 'Contato',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Ramo de Atividade',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Versão',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Produto',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Módulo 1',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Módulo 2',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Módulo 3',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Módulo 4',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Módulo 5',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Valor Mensal',
            'width' => 'auto',
            'wrap' => false
        ),
        array(
            'name' => 'Motivo Fechamento Negativo',
            'width' => 'auto',
            'wrap' => false
        ),
    );

    $spreadsheet->createHeader($header, true);
}


$abasExtras = array(
    'Revenda' => array('name' => 'Unidade de Negócios', 'currency' => false),
    'Cidade' => array('currency' => false),
    'Vendedor' => array('currency' => false),
    'Status' => array('currency' => false),
    'ComoConheceu' => array('name' => 'Como nos conheceu', 'currency' => false),
    'RamoAtividade' => array('name' => 'Ramo de Atividade', 'currency' => false),
    'Fornecedor' => array('name' => 'Fornecedor de Sistema', 'currency' => false),
    'Contador' => array('currency' => false),
    'MotivoFn' => array('name' => 'Motivo do Fechamento Negativo', 'currency' => false),
);

$valores = array();
$linha = 2;
foreach ($data as $key => $row) {

    $UltimaAtividade = Atendimentos::model()->find("ATD_IDCLIENTE = '" . $row->CLI_IDCLIENTE . "' and ATD_IDMOTIVO IN (" . implode(',', $ListaMotivos) . ") order by ATD_IDATENDIMENTO DESC");
    $PenultimaAtividade = ($UltimaAtividade) ? Atendimentos::model()->find("ATD_IDCLIENTE = '" . $row->CLI_IDCLIENTE . "' AND ATD_IDMOTIVO IN (" . implode(',', $ListaMotivos) . ") and ATD_IDATENDIMENTO <> '" . $UltimaAtividade->ATD_IDATENDIMENTO . "' order by ATD_IDATENDIMENTO DESC") : null;

    $cidade = $row->Cidade ?? false;
    $id = ExcelUtil::parseId($cidade);
    if (!isset($abasExtras['Cidade'][$id])) {
        $abasExtras['Cidade'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Cidade'][$id]['valor'] = $cidade ? ExcelUtil::parseValue($cidade->CidadeEstado) : "-";
    }
    $abasExtras['Cidade'][$id]['count']++;
    #####
    $situacao = Util::getStatusCliente($row->CLI_SITUACAO);
    $situacao = ExcelUtil::parseValue($situacao);

    $id = ExcelUtil::parseId($situacao);
    if (!isset($abasExtras['Status'][$id])) {
        $abasExtras['Status'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Status'][$id]['valor'] = $situacao;
    }
    $abasExtras['Status'][$id]['count']++;
    #####
    $comoConheceu = ExcelUtil::parseValue($row->ComoConheceu);
    $id = ExcelUtil::parseId($comoConheceu);
    if (!isset($abasExtras['ComoConheceu'][$id])) {
        $abasExtras['ComoConheceu'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['ComoConheceu'][$id]['valor'] = $comoConheceu;
    }
    $abasExtras['ComoConheceu'][$id]['count']++;
    #####
    $contador = ExcelUtil::parseValue($row->Contador);
    $id = ExcelUtil::parseId($contador);
    if (!isset($abasExtras['Contador'][$id])) {
        $abasExtras['Contador'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Contador'][$id]['valor'] = $contador;
    }
    $abasExtras['Contador'][$id]['count']++;
    #####
    $vendedor = ExcelUtil::parseValue($row->VendedorResponsavel);
    $id = ExcelUtil::parseId($vendedor);
    if (!isset($abasExtras['Vendedor'][$id])) {
        $abasExtras['Vendedor'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Vendedor'][$id]['valor'] = $vendedor;
    }
    $abasExtras['Vendedor'][$id]['count']++;
    #####
    $revendaResponsavel = $row->getRevendaResponsavel2();
    $revenda = $revendaResponsavel->REV_FANTASIA ?? false;
    $id = "";
    if ($revenda) {
        $revenda = ExcelUtil::parseValue($revenda);
        $id .= $revendaResponsavel->REV_TIPO;
    }
    $id .= (string) $revenda;
    $id = ExcelUtil::parseId($id);
    if (!isset($abasExtras['Revenda'][$id])) {
        $abasExtras['Revenda'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Revenda'][$id]['valor'] = $revenda;
    }
    $abasExtras['Revenda'][$id]['count']++;
    #####
    if ($situacao == 'Cliente Ativo') { # No caso de clientes ativos, mostra aba extra Mensalidades
        if (!isset($abaMensalidade)) {
            $abaMensalidade = array();
        }
        if (!array_key_exists($revenda, $abaMensalidade)) {
            $abaMensalidade[$revenda] = array('R$ 0 a 100' => 0, 'R$ 100 a 200' => 0, 'R$ 200 a 300' => 0, 'R$ 300 a 400' => 0, 'R$ 400 +' => 0);
        }
        switch (true) {
            case ($row->CLI_VLRMENSAL <= 100):
                $abaMensalidade[$revenda]['R$ 0 a 100']++;
                break;
            case ($row->CLI_VLRMENSAL <= 200):
                $abaMensalidade[$revenda]['R$ 100 a 200']++;
                break;
            case ($row->CLI_VLRMENSAL <= 300):
                $abaMensalidade[$revenda]['R$ 200 a 300']++;
                break;
            case ($row->CLI_VLRMENSAL <= 400):
                $abaMensalidade[$revenda]['R$ 300 a 400']++;
                break;
            case ($row->CLI_VLRMENSAL > 400):
                $abaMensalidade[$revenda]['R$ 400 +']++;
                break;
            default:
                break;
        }
    }
###

    $fornecedor = ExcelUtil::parseValue($row->Fornecedor);
    $id = ExcelUtil::parseValue($fornecedor);
    if (!isset($abasExtras['Fornecedor'][$id])) {
        $abasExtras['Fornecedor'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Fornecedor'][$id]['valor'] = $fornecedor;
    }
    $abasExtras['Fornecedor'][$id]['count']++;
    #####
    $ramoAtividade = ExcelUtil::parseValue($row->RamoAtividade);
    $id = ExcelUtil::parseId($ramoAtividade);
    if (!isset($abasExtras['RamoAtividade'][$id])) {
        $abasExtras['RamoAtividade'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['RamoAtividade'][$id]['valor'] = $ramoAtividade;
    }
    $abasExtras['RamoAtividade'][$id]['count']++;

    #####
    $motivoFn = ExcelUtil::parseValue($row->MotivoFechamentoNegativo);
    $id = ExcelUtil::parseId($motivoFn);
    if (!isset($abasExtras['MotivoFn'][$id])) {
        $abasExtras['MotivoFn'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['MotivoFn'][$id]['valor'] = $motivoFn;
    }
    $abasExtras['MotivoFn'][$id]['count']++;

    // die;
    if ($incluirAnalitico) {
        $coluna = 1;
        // A
            $valor = ExcelUtil::parseValue($row->CLI_DTCADASTRO);
            $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
                        ->getStyleByColumnAndRow($coluna, $linha)
                        ->getNumberFormat()
                        ->setFormatCode('dd/mm/yyyy');
            $coluna++;

        // B
            $valor = ExcelUtil::parseValue($row->CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL);
            if ($valor != "-") {
                $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
            }
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
                        ->getStyleByColumnAndRow($coluna, $linha)
                        ->getNumberFormat()
                        ->setFormatCode('dd/mm/yyyy');
            $coluna++;

        // C
            $valor = ExcelUtil::parseValue($row->CLI_DT_ULTIMA_ATIVIDADE_SUPORTE);
            if ($valor != "-") {
                $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
            }
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
                        ->getStyleByColumnAndRow($coluna, $linha)
                        ->getNumberFormat()
                        ->setFormatCode('dd/mm/yyyy');
            $coluna++;

        // D
            $link = "https://crm.delvale.com.br/index.php?r=clientes/view&id={$row->CLI_IDCLIENTE}";
            $valor = ExcelUtil::parseValue($row->CLI_NOME);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
                        ->getCellByColumnAndRow($coluna, $linha)
                        ->getHyperlink()
                        ->setUrl($link);
            $coluna++;

        // E
            $valor = ExcelUtil::parseValue($row->CLI_FANTASIA);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // F
            $valor = ExcelUtil::parseValue($row->CLI_CNPJCPF);
            $valor = Util::formataCNPJCPF($valor);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // G
            $valor = ExcelUtil::parseValue($row->CLI_ENDERECO);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // H
            $valor = ExcelUtil::parseValue($row->CLI_NUMERO);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // I
            $valor = ExcelUtil::parseValue($row->CLI_COMPLEMENTO);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // J
            $valor = ExcelUtil::parseValue($row->CLI_BAIRRO);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // K
            $valor = ExcelUtil::parseValue($row->CLI_CEP);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // L
            $valor = ExcelUtil::parseValue($row->CLI_FONE1);
            if(!empty($row->CLI_FONE2))
                $valor .= " / ".ExcelUtil::parseValue($row->CLI_FONE2);
            if(!empty($row->CLI_FONE3))
                $valor .= " / ".ExcelUtil::parseValue($row->CLI_FONE3);

            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // M
            $valor = ExcelUtil::parseValue($row->CLI_EMAIL);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // N
            $valor = ExcelUtil::parseValue($row->Cidade->CidadeEstado);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // O
            $valor = $situacao;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // P
            $valor = $comoConheceu;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // Q
            $valor = $contador;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // R
            $valor = $vendedor;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // S
            $valor = $revenda;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // T
            $valor = $fornecedor;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // U
            $valor = ($UltimaAtividade) ? $UltimaAtividade->ATD_DTCADASTRO . ': ' . ExcelUtil::parseValue($UltimaAtividade->ATD_OBS) : '';
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // V
            $valor = ($PenultimaAtividade) ? $PenultimaAtividade->ATD_DTCADASTRO . ': ' . ExcelUtil::parseValue($PenultimaAtividade->ATD_OBS) : '';
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // W
            $valor = ExcelUtil::parseValue($row->CLI_CONTATO);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // X
            $valor = $ramoAtividade;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // Y
            $valor = ExcelUtil::parseValue($row->Versao);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // Z
            $valor = ExcelUtil::parseValue($row->ProdutoContratado);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // AA
            $valor = ExcelUtil::parseValue($row->ModuloComplementar1);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // AB
            $valor = ExcelUtil::parseValue($row->ModuloComplementar2);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // AC
            $valor = ExcelUtil::parseValue($row->ModuloComplementar3);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // AD
            $valor = ExcelUtil::parseValue($row->ModuloComplementar4);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

        // AE
            $valor = ExcelUtil::parseValue($row->ModuloComplementar5);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

         // 
            $valor = ExcelUtil::parseValue($row->CLI_VLRMENSAL);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
                            ->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coluna++;  

        // 
            $valor = ExcelUtil::parseValue($row->MotivoFechamentoNegativo);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;  

        $linha++;
    }
}

if (!empty($abasExtras)) {
    $spreadsheet->abasSintetico($abasExtras);
}

if(isset($abaMensalidade)){
    $mensalSheet = $spreadsheet->createSheet();
    $mensalSheet->setTitle('Faixa de mensalidades');
    $spreadsheet->setActiveSheetIndexByName('Faixa de mensalidades');
    $aba = $spreadsheet->getActiveSheet();

    $header = array();
    $header[] = array('name' => 'Unidade','width' => 'auto','wrap' => false);
    $headerDone = false;

    $linha = 2;
    $footer = array();
    $footer[] = 'Total';

    foreach ($abaMensalidade as $unidade => $faixasVlr) {
        $coluna = 1;
        $aba->setCellValueByColumnAndRow($coluna, $linha, $unidade);
        foreach ($faixasVlr as $faixa => $valor) {
            if(!$headerDone){
                $header[] = array(
                    'name' => $faixa,
                    'width' => 'auto',// estrutura header coluna x
                    'wrap' => false
                );

            }
            $coluna++;
            $aba->setCellValueByColumnAndRow($coluna, $linha, $valor);
        }
        $headerDone = true;
        $linha++;
    }
    $i = 0;
    $linhaFinal = $linha - 1;
    while($i < $coluna -1){
        $columnLetter = Coordinate::stringFromColumnIndex($i + 2);
        $footer[] = "=SUM({$columnLetter}2:{$columnLetter}{$linhaFinal})";
        $i++;
    }
    $spreadsheet->createHeader($header);
    $spreadsheet->createFooter($footer, $linha);
}

if (!$incluirAnalitico) {
    $spreadsheet->removeSheetByIndex(0);
}
$spreadsheet->setActiveSheetIndex(0);

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
