public function onGenerate() { try { TTransaction::open('atividade'); $object = $this->form->getData(); $desenvolvimento = new RequisitoDesenvolvimento(1); $cliente_id = $desenvolvimento->ticket->solicitante_id; $responsavel_id = $desenvolvimento->ticket->responsavel_id; $pessoa = new Pessoa($cliente_id); $cliente = $pessoa->pessoa_nome; $pessoa = new Pessoa($responsavel_id); $responsavel = $pessoa->pessoa_nome; if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF(array(500)); $tr->addStyle('title', 'Arial', '10', 'BI', '#000000', '#ffffff'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#ffffff'); $string = new StringsUtil(); $data = $desenvolvimento->data_cadastro; $data = explode('-', $data); $desenvolvimento->ticket->data_prevista ? $data_prevista = $string->formatDateBR($desenvolvimento->ticket->data_prevista) : '___/___/___'; $cabecalho = 'DTR010 - Solicitação de Desenvolvimento Número: ' . $desenvolvimento->id . '/' . $data[0] . ' Data: ' . $string->formatDateBR($desenvolvimento->data_cadastro) . ' Prazo de entrega: ' . $data_prevista . ' Qtde de Horas: ' . strstr($desenvolvimento->ticket->orcamento_horas, ':', true) . ' Ticket: ' . $desenvolvimento->ticket_id . ' Benefício: ( )+Receita ( )-Despesa ( )+Eficiência ( )-NDA Título: ' . $desenvolvimento->titulo . ' Sistema: ' . $desenvolvimento->ticket->sistema->nome . ' Módulo: Rotina: ' . $desenvolvimento->rotina . ' Cliente: ' . $cliente . ' Solicitante/Dpto: ' . $responsavel; $tr->addRow(); $tr->addCell($cabecalho, 'left', 'title'); $tr->addRow(); $tr->addCell('<br /><b>Objetivo:</b> <br />' . $desenvolvimento->objetivo, 'left', 'datap'); $tr->addRow(); $tr->addCell('<br /><b>Entrada: </b><br />' . $desenvolvimento->entrada, 'left', 'datap'); $tr->addRow(); $tr->addCell('<br /><b>Processamento: </b><br />' . $desenvolvimento->processamento, 'left', 'datap'); $tr->addRow(); $tr->addCell('<br /><b>Saida: </b><br />' . $desenvolvimento->saida, 'left', 'datap'); $nome = 'DTR010 ' . $desenvolvimento->id . ' - ' . $data[0] . ' - ' . $desenvolvimento->titulo; $tr->save("app/output/{$nome}.rtf"); parent::openFile("app/output/{$nome}.rtf"); new TMessage('info', 'DTR gerado com sucesso!'); TTransaction::close(); } catch (Exception $e) { new TMessage('error', $e->getMessage); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'samples' TTransaction::open('samples'); // get the form data into an active record Customer $object = $this->form->getData(); $repository = new TRepository('Customer'); $criteria = new TCriteria(); if ($object->name) { $criteria->add(new TFilter('name', 'like', "%{$object->name}%")); } if ($object->city_id) { $criteria->add(new TFilter('city_id', '=', "{$object->city_id}")); } if ($object->category_id) { $criteria->add(new TFilter('category_id', '=', "{$object->category_id}")); } $customers = $repository->load($criteria); $format = $object->output_type; if ($customers) { $widths = array(40, 150, 80, 120, 80); switch ($format) { case 'html': $tr = new TTableWriterHTML($widths); break; case 'pdf': $tr = new TTableWriterPDF($widths); break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'BI', '#ffffff', '#407B49'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#869FBB'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'BI', '#ff0000', '#FFF1B2'); $tr->addStyle('footer', 'Times', '12', 'BI', '#2B2B2B', '#B5FFB4'); // add a header row $tr->addRow(); $tr->addCell('Customers', 'center', 'header', 5); // add titles row $tr->addRow(); $tr->addCell('Code', 'left', 'title'); $tr->addCell('Name', 'left', 'title'); $tr->addCell('Category', 'left', 'title'); $tr->addCell('Email', 'left', 'title'); $tr->addCell('Birthdate', 'left', 'title'); // controls the background filling $colour = FALSE; // data rows foreach ($customers as $customer) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($customer->id, 'left', $style); $tr->addCell($customer->name, 'left', $style); $tr->addCell($customer->category_name, 'left', $style); $tr->addCell($customer->email, 'left', $style); $tr->addCell($customer->birthdate, 'left', $style); $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell(date('Y-m-d h:i:s'), 'center', 'footer', 5); // stores the file if (!file_exists("app/output/tabular.{$format}") or is_writable("app/output/tabular.{$format}")) { $tr->save("app/output/tabular.{$format}"); } else { throw new Exception(_t('Permission denied') . ': ' . "app/output/tabular.{$format}"); } parent::openFile("app/output/tabular.{$format}"); // shows the success message new TMessage('info', 'Report generated. Please, enable popups in the browser (just in the web).'); } else { new TMessage('error', 'No records found'); } // fill the form with the active record data $this->form->setData($object); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'atividade' TTransaction::open('atividade'); // get the form data into an active record $formdata = $this->form->getData(); $validador = new TDuasDatasValidator(); $validador->validate('Datas', '', array($formdata->ano_atividade_inicial . '-' . str_pad($formdata->mes_atividade_inicial, 2, '0', STR_PAD_LEFT) . '-01', $formdata->ano_atividade_final . '-' . str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT) . '-01')); $meses = $this->colecaoMeses($formdata); $tickets = null; $arrayTickets = null; if ($formdata->cliente_id > 0) { $cliente = Pessoa::getPessoasEntidade($formdata->cliente_id); $retorno = Ticket::getTicketsCliente($cliente); $arrayTickets = $retorno; $tickets = implode(",", $retorno); } $criteria = new TCriteria(); $criteria->add(new TFilter("origem", "=", 1)); $criteria->add(new TFilter("codigo_cadastro_origem", "=", 100)); $criteria->add(new TFilter("ativo", "=", 1)); $criteria->add(new TFilter("usuario", "is not ")); $repo = new TRepository('Pessoa'); $pessoas = $repo->load($criteria); $criteria = new TCriteria(); $criteria->add(new TFilter('data_atividade', '<', $formdata->ano_atividade_inicial . '-' . str_pad($formdata->mes_atividade_inicial, 2, '0', STR_PAD_LEFT) . '-01'), TExpression::OR_OPERATOR); $criteria->add(new TFilter('data_atividade', '>', $formdata->ano_atividade_final . '-' . str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT) . '-' . cal_days_in_month(CAL_GREGORIAN, str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT), $formdata->ano_atividade_final)), TExpression::OR_OPERATOR); $repository = new TRepository('Atividade'); $count = $repository->count($criteria); $format = $formdata->output_type; if ($count > 0) { $widths = array(); switch ($format) { case 'html': $tr = new TTableWriterHTML($widths); $break = '<br />'; break; case 'pdf': $tr = new TTableWriterPDF($widths); $break = '<br />'; break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); $break = '<br />'; break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#6B6B6B'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#E5E5E5'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'B', '#4A5590', '#C0D3E9'); $tr->addStyle('footer', 'Times', '12', 'BI', '#4A5590', '#C0D3E9'); $colunas = count($meses) * 4 + 2; $arrayMeses = $this->string->array_meses(); // add a header row $tr->addRow(); $tr->addCell('RELATORIO XPTO', 'center', 'header', $colunas); // add a header row $tr->addRow(); $tr->addCell('Indicadores', 'center', 'header', $colunas); // add a header row $i = 0; $tr->addRow(); $tr->addCell('', 'center', 'header'); foreach ($meses as $mes) { $i++; $tr->addCell(substr(strtoupper($arrayMeses[intval(substr($mes, 3, 2))]), 0, 3), 'center', 'header'); $tr->addCell('%', 'center', 'header'); $tr->addCell(' ', 'center', 'datai'); } $tr->addCell('TOTAL', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // add a carga horaria row $i = 0; $totalHorario = null; $arrayHorario = array(); $tr->addRow(); $tr->addCell(utf8_decode('Carga horária mensal:'), 'left', 'datap'); foreach ($meses as $mes) { $criteria = new TCriteria(); $criteria->add(new TFilter("mes", "=", substr($mes, 3, 2))); $criteria->add(new TFilter("ano", "=", substr($mes, 6, 4))); if ($formdata->colaborador_id > 0) { $criteria->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); } $repo = new TRepository('CargaHoraria'); $cargaHoraria = $repo->load($criteria); $horario = null; foreach ($cargaHoraria as $carga) { $horario += $this->string->time_to_sec($carga->horario); } $totalHorario += $horario; $arrayHorario[$i] = $horario; $horario = $this->string->sec_to_time($horario); $tr->addCell($this->string->retira_segundos($horario), 'center', 'datap'); $tr->addCell('100%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } $totalHorario = $this->string->sec_to_time($totalHorario); $tr->addCell($this->string->retira_segundos($totalHorario), 'center', 'datap'); $tr->addCell('100%', 'center', 'datap'); //add horas ponto total row $i = 0; $totalPontoTotal = null; $arrayPontoTotal = array(); $tr->addRow(); $tr->addCell(utf8_decode('Horas ponto total:'), 'left', 'datap'); foreach ($meses as $mes) { if ($formdata->colaborador_id > 0) { $totalPonto = $this->retornaPonto($formdata->colaborador_id, substr($mes, 3, 2), substr($mes, 6, 4)); $totalPontoTotal += $this->string->time_to_sec($totalPonto); $arrayPontoTotal[$i] = $this->string->time_to_sec($totalPonto); } else { foreach ($pessoas as $pessoa) { $totalPonto += $this->string->time_to_sec($this->retornaPonto($pessoa->pessoa_codigo, substr($mes, 3, 2), substr($mes, 6, 4))); } $totalPontoTotal += $totalPonto; $arrayPontoTotal[$i] = $totalPonto; $totalPonto = $this->string->sec_to_time($totalPonto); } $tr->addCell($this->string->retira_segundos($totalPonto), 'center', 'datap'); $tr->addCell(round($arrayPontoTotal[$i] * 100 / $arrayHorario[$i]) . '%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } $totalPontoTotal = $this->string->sec_to_time($totalPontoTotal); $tr->addCell($this->string->retira_segundos($totalPontoTotal), 'center', 'datap'); $tr->addCell(round($this->string->time_to_sec($totalPontoTotal) * 100 / $this->string->time_to_sec($totalHorario)) . '%', 'center', 'datap'); //add horas ponto util row $i = 0; $totalPontoUtil = null; $arrayPontoUtil = array(); $tr->addRow(); $tr->addCell(utf8_decode('Horas ponto util:'), 'left', 'datap'); foreach ($meses as $mes) { $cri = new TCriteria(); if ($formdata->colaborador_id > 0) { $cri->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); } $cri->add(new TFilter("ticket_id", "IN", array(328, 514))); $cri->add(new TFilter("extract('month' from data_atividade)", "=", substr($mes, 3, 2))); $cri->add(new TFilter("extract('year' from data_atividade)", "=", substr($mes, 6, 4))); $repo = new TRepository('Atividade'); $ausencias = $repo->count($cri); $tempo = 0; if ($ausencias) { $horas = $repo->load($cri); foreach ($horas as $h) { $tempo += $this->string->time_to_sec($h->hora_fim) - $this->string->time_to_sec($h->hora_inicio); } } $pontoUtil = $arrayPontoTotal[$i] - $tempo; $arrayPontoUtil[$i] = $pontoUtil; $totalPontoUtil += $pontoUtil; $pontoUtil = $this->string->sec_to_time($pontoUtil); $tr->addCell($this->string->retira_segundos($pontoUtil), 'center', 'datap'); $tr->addCell(round($arrayPontoUtil[$i] * 100 / $arrayHorario[$i]) . '%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } $totalPontoUtil = $this->string->sec_to_time($totalPontoUtil); $tr->addCell($this->string->retira_segundos($totalPontoUtil), 'center', 'datap'); $tr->addCell(round($this->string->time_to_sec($totalPontoUtil) * 100 / $this->string->time_to_sec($totalHorario)) . '%', 'center', 'datap'); //add atividades indicador total $i = 0; $totalAtividadeTotal = null; $arrayAtividadeTotal = array(); $tr->addRow(); $tr->addCell(utf8_decode('Horas atividade (indicador total):'), 'left', 'datap'); foreach ($meses as $mes) { $total = Atividade::retornaTotalAtividadesColaborador($formdata->colaborador_id, substr($mes, 3, 2), substr($mes, 6, 4), $tickets); $arrayAtividadeTotal[$i] = $this->string->time_to_sec($total); $totalAtividadeTotal += $this->string->time_to_sec($total); $tr->addCell($this->string->retira_segundos($total), 'center', 'datap'); $tr->addCell(round($arrayAtividadeTotal[$i] * 100 / $arrayPontoTotal[$i]) . '%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } $totalAtividadeTotal = $this->string->sec_to_time($totalAtividadeTotal); $tr->addCell($this->string->retira_segundos($totalAtividadeTotal), 'center', 'datap'); $tr->addCell(round($this->string->time_to_sec($totalAtividadeTotal) * 100 / $this->string->time_to_sec($totalPontoTotal)) . '%', 'center', 'datap'); //add atividades indicador util $i = 0; $tr->addRow(); $tr->addCell(utf8_decode('Horas atividade (indicador util):'), 'left', 'datap'); foreach ($meses as $mes) { $total = $this->string->sec_to_time($arrayAtividadeTotal[$i]); $tr->addCell($this->string->retira_segundos($total), 'center', 'datap'); $tr->addCell(round($arrayAtividadeTotal[$i] * 100 / $arrayPontoUtil[$i]) . '%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } //$totalAtividadeTotal = $this->string->sec_to_time($totalAtividadeTotal); $tr->addCell($this->string->retira_segundos($totalAtividadeTotal), 'center', 'datap'); $tr->addCell(round($this->string->time_to_sec($totalAtividadeTotal) * 100 / $this->string->time_to_sec($totalPontoUtil)) . '%', 'center', 'datap'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', $colunas); // add a header row $tr->addRow(); $tr->addCell(utf8_decode('Ausências'), 'center', 'header', $colunas); // add a header row $i = 0; $tr->addRow(); $tr->addCell('', 'center', 'header'); foreach ($meses as $mes) { $i++; $tr->addCell(substr(strtoupper($arrayMeses[intval(substr($mes, 3, 2))]), 0, 3), 'center', 'header'); $tr->addCell('%', 'center', 'header'); $tr->addCell(' ', 'center', 'datai'); } $tr->addCell('TOTAL', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // add atestado medico row $i = 0; $totalAtestados = null; $arrayAtestados = array(); $tr->addRow(); $tr->addCell(utf8_decode('Atestado médico:'), 'left', 'datap'); foreach ($meses as $mes) { $atestados = Atividade::retornaAtestados($formdata->colaborador_id, substr($mes, 3, 2), substr($mes, 6, 4)); $arrayAtestados[$i] = $this->string->time_to_sec($atestados); $totalAtestados += $this->string->time_to_sec($atestados); $tr->addCell($this->string->retira_segundos($atestados), 'center', 'datap'); $tr->addCell(round($arrayAtestados[$i] * 100 / $arrayPontoTotal[$i]) . '%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } $totalAtestados = $this->string->sec_to_time($totalAtestados); $tr->addCell($this->string->retira_segundos($totalAtestados), 'center', 'datap'); $tr->addCell(round($this->string->time_to_sec($totalAtestados) * 100 / $this->string->time_to_sec($totalPontoTotal)) . '%', 'center', 'datap'); // add ausencias row $i = 0; $totalAusencias = null; $arrayAusencias = array(); $tr->addRow(); $tr->addCell(utf8_decode('Ausências:'), 'left', 'datap'); foreach ($meses as $mes) { $ausencias = Atividade::retornaAusencias($formdata->colaborador_id, substr($mes, 3, 2), substr($mes, 6, 4)); $arrayAusencias[$i] = $this->string->time_to_sec($ausencias); $totalAusencias += $this->string->time_to_sec($ausencias); $tr->addCell($this->string->retira_segundos($ausencias), 'center', 'datap'); $tr->addCell(round($arrayAusencias[$i] * 100 / $arrayPontoTotal[$i]) . '%', 'center', 'datap'); $tr->addCell(' ', 'center', 'datai'); $i++; } $totalAusencias = $this->string->sec_to_time($totalAusencias); $tr->addCell($this->string->retira_segundos($totalAusencias), 'center', 'datap'); $tr->addCell(round($this->string->time_to_sec($totalAusencias) * 100 / $this->string->time_to_sec($totalPontoTotal)) . '%', 'center', 'datap'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', $colunas); // add a header row $tr->addRow(); $tr->addCell(utf8_decode('Tipo Atividades'), 'center', 'header', $colunas); // add Tipo Atividades row $i = 0; $tr->addRow(); $tr->addCell('', 'center', 'header'); foreach ($meses as $mes) { $i++; $tr->addCell(substr(strtoupper($arrayMeses[intval(substr($mes, 3, 2))]), 0, 3), 'center', 'header'); $tr->addCell('%', 'center', 'header'); $tr->addCell(' ', 'center', 'datai'); } $tr->addCell('TOTAL', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // verifica tipos de atividades do periodo $colour = FALSE; $tipoAtividades = array(); $objects = Atividade::retornaTiposAtividadesPeriodo($formdata->colaborador_id, $formdata->ano_atividade_inicial . '-' . str_pad($formdata->mes_atividade_inicial, 2, '0', STR_PAD_LEFT) . '-01', $formdata->ano_atividade_final . '-' . str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT) . '-' . cal_days_in_month(CAL_GREGORIAN, str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT), $formdata->ano_atividade_final), $tickets); $i = 1; foreach ($objects as $row) { $tipoAtividades[$i] = $row['tipo_atividade_id']; $i++; } foreach ($tipoAtividades as $ati) { // adiciona as linhas por tipo de atividade $style = $colour ? 'datap' : 'datai'; $i = 0; $totalAtividade = null; $arrayAtividade = array(); $tipoAtv = new TipoAtividade($ati); $tr->addRow(); $tr->addCell(utf8_decode($tipoAtv->nome . ':'), 'left', $style); foreach ($meses as $mes) { $cri = new TCriteria(); if ($formdata->colaborador_id > 0) { $cri->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); } if ($tickets) { $cri->add(new TFilter("ticket_id", "IN", $arrayTickets)); } $cri->add(new TFilter("extract('month' from data_atividade)", "=", substr($mes, 3, 2))); $cri->add(new TFilter("extract('year' from data_atividade)", "=", substr($mes, 6, 4))); $cri->add(new TFilter("tipo_atividade_id", "=", $ati)); $repo = new TRepository('Atividade'); $count = $repo->count($cri); $tempo = 0; if ($count) { $horas = $repo->load($cri); foreach ($horas as $h) { $tempo += $this->string->time_to_sec($h->hora_fim) - $this->string->time_to_sec($h->hora_inicio); } } $arrayAtividade[$i] = $tempo; $totalAtividade += $tempo; $tempo = $this->string->sec_to_time($tempo); $tr->addCell($this->string->retira_segundos($tempo), 'center', $style); $tr->addCell(round($arrayAtividade[$i] * 100 / $arrayAtividadeTotal[$i]) . '%', 'center', $style); $tr->addCell(' ', 'center', 'datai'); $i++; $colour = !$colour; } $totalAtividade = $this->string->sec_to_time($totalAtividade); $tr->addCell($this->string->retira_segundos($totalAtividade), 'center', $style); $tr->addCell(round($this->string->time_to_sec($totalAtividade) * 100 / $this->string->time_to_sec($totalAtividadeTotal)) . '%', 'center', $style); } //row total $i = 0; $tr->addRow(); $tr->addCell(utf8_decode('<b>Total:</b>'), 'left', 'footer'); foreach ($meses as $mes) { $total = $this->string->sec_to_time($arrayAtividadeTotal[$i]); $tr->addCell($this->string->retira_segundos($total), 'center', 'footer'); $tr->addCell('100%', 'center', 'footer'); $tr->addCell(' ', 'center', 'datai'); $i++; } $tr->addCell($this->string->retira_segundos($totalAtividadeTotal), 'center', 'footer'); $tr->addCell('100%', 'center', 'footer'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', $colunas); // add Por Sistema row $tr->addRow(); $tr->addCell(utf8_decode('Por sistema'), 'center', 'header', $colunas); $i = 0; $tr->addRow(); $tr->addCell('', 'center', 'header'); foreach ($meses as $mes) { $i++; $tr->addCell(substr(strtoupper($arrayMeses[intval(substr($mes, 3, 2))]), 0, 3), 'center', 'header'); $tr->addCell('%', 'center', 'header'); $tr->addCell(' ', 'center', 'datai'); } $tr->addCell('TOTAL', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // verifica tipos de atividades do periodo $colour = FALSE; $tipoSistemas = array(); $objects = Atividade::retornaSistemasPeriodo($formdata->colaborador_id, $formdata->ano_atividade_inicial . '-' . str_pad($formdata->mes_atividade_inicial, 2, '0', STR_PAD_LEFT) . '-01', $formdata->ano_atividade_final . '-' . str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT) . '-' . cal_days_in_month(CAL_GREGORIAN, str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT), $formdata->ano_atividade_final), $tickets); $i = 1; foreach ($objects as $row) { $tipoSistemas[$i] = $row['sistema_id']; $i++; } foreach ($tipoSistemas as $sis) { // adiciona as linhas por tipo de atividade $style = $colour ? 'datap' : 'datai'; $i = 0; $totalSistema = null; $arraySistema = array(); $sistema = new Sistema($sis); $tr->addRow(); $tr->addCell(utf8_decode($sistema->nome . ':'), 'left', $style); foreach ($meses as $mes) { $cri = new TCriteria(); if ($formdata->colaborador_id > 0) { $cri->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); } if ($tickets) { $cri->add(new TFilter("ticket_id", "IN", $arrayTickets)); } $cri->add(new TFilter("extract('month' from data_atividade)", "=", substr($mes, 3, 2))); $cri->add(new TFilter("extract('year' from data_atividade)", "=", substr($mes, 6, 4))); $cri->add(new TFilter("sistema_id", "=", $sis)); $cri->add(new TFilter("ticket_id", "not in", array(328, 514))); $repo = new TRepository('Atividade'); $count = $repo->count($cri); $tempo = 0; if ($count) { $horas = $repo->load($cri); foreach ($horas as $h) { $tempo += $this->string->time_to_sec($h->hora_fim) - $this->string->time_to_sec($h->hora_inicio); } } $arraySistema[$i] = $tempo; $totalSistema += $tempo; $tempo = $this->string->sec_to_time($tempo); $tr->addCell($this->string->retira_segundos($tempo), 'center', $style); $tr->addCell(round($arraySistema[$i] * 100 / $arrayAtividadeTotal[$i]) . '%', 'center', $style); $tr->addCell(' ', 'center', 'datai'); $i++; $colour = !$colour; } $totalSistema = $this->string->sec_to_time($totalSistema); $tr->addCell($this->string->retira_segundos($totalSistema), 'center', $style); $tr->addCell(round($this->string->time_to_sec($totalSistema) * 100 / $this->string->time_to_sec($totalAtividadeTotal)) . '%', 'center', $style); } //row total $i = 0; $tr->addRow(); $tr->addCell(utf8_decode('<b>Total:</b>'), 'left', 'footer'); foreach ($meses as $mes) { $total = $this->string->sec_to_time($arrayAtividadeTotal[$i]); $tr->addCell($this->string->retira_segundos($total), 'center', 'footer'); $tr->addCell('100%', 'center', 'footer'); $tr->addCell(' ', 'center', 'datai'); $i++; } $tr->addCell($this->string->retira_segundos($totalAtividadeTotal), 'center', 'footer'); $tr->addCell('100%', 'center', 'footer'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', $colunas); // add Por Cliente row $tr->addRow(); $tr->addCell(utf8_decode('Por Cliente'), 'center', 'header', $colunas); $i = 0; $tr->addRow(); $tr->addCell('', 'center', 'header'); foreach ($meses as $mes) { $i++; $tr->addCell(substr(strtoupper($arrayMeses[intval(substr($mes, 3, 2))]), 0, 3), 'center', 'header'); $tr->addCell('%', 'center', 'header'); $tr->addCell(' ', 'center', 'datai'); } $tr->addCell('TOTAL', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // monta array de clientes $tipoClientes = array(); $objects = Atividade::retornaClientesPeriodo($formdata->colaborador_id, $formdata->ano_atividade_inicial . '-' . str_pad($formdata->mes_atividade_inicial, 2, '0', STR_PAD_LEFT) . '-01', $formdata->ano_atividade_final . '-' . str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT) . '-' . cal_days_in_month(CAL_GREGORIAN, str_pad($formdata->mes_atividade_final, 2, '0', STR_PAD_LEFT), $formdata->ano_atividade_final), $tickets); foreach ($objects as $row) { $cliente = new Pessoa($row['solicitante_id']); if ($cliente->origem == 1) { $ind = $cliente->codigo_cadastro_origem; } else { $ind = 999; } $tipoClientes[$ind] += $this->string->time_to_sec($row['sum']); } arsort($tipoClientes); $colour = FALSE; foreach ($tipoClientes as $key => $value) { $style = $colour ? 'datap' : 'datai'; $i = 0; $totalClientes = null; $arrayClientes = array(); $labelCliente = ''; if ($key == '999') { $labelCliente = '999 - ECS'; } else { $entidade = new Entidade($key); $labelCliente = str_pad($key, 3, '0', STR_PAD_LEFT) . ' - ' . $entidade->entnomfan; } $tr->addRow(); $tr->addCell(utf8_decode($labelCliente), 'left', $style); foreach ($meses as $mes) { $cri = new TCriteria(); if ($formdata->colaborador_id > 0) { $cri->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); } if (!$tickets) { $cliente = Pessoa::getPessoasEntidade($key); $retorno = Ticket::getTicketsCliente($cliente); $arrayTickets = $retorno; } $cri->add(new TFilter("ticket_id", "IN", $arrayTickets)); $cri->add(new TFilter("extract('month' from data_atividade)", "=", substr($mes, 3, 2))); $cri->add(new TFilter("extract('year' from data_atividade)", "=", substr($mes, 6, 4))); $cri->add(new TFilter("ticket_id", "not in", array(328, 514))); $repo = new TRepository('Atividade'); $count = $repo->count($cri); $tempo = 0; if ($count) { $horas = $repo->load($cri); foreach ($horas as $h) { $tempo += $this->string->time_to_sec($h->hora_fim) - $this->string->time_to_sec($h->hora_inicio); } } $arrayClientes[$i] = $tempo; $totalClientes += $tempo; $tempo = $this->string->sec_to_time($tempo); $tr->addCell($this->string->retira_segundos($tempo), 'center', $style); $tr->addCell(round($arrayClientes[$i] * 100 / $arrayAtividadeTotal[$i]) . '%', 'center', $style); $tr->addCell(' ', 'center', 'datai'); $i++; $colour = !$colour; } $totalClientes = $this->string->sec_to_time($totalClientes); $tr->addCell($this->string->retira_segundos($totalClientes), 'center', $style); $tr->addCell(round($this->string->time_to_sec($totalClientes) * 100 / $this->string->time_to_sec($totalAtividadeTotal)) . '%', 'center', $style); } //row total $i = 0; $tr->addRow(); $tr->addCell(utf8_decode('<b>Total:</b>'), 'left', 'footer'); foreach ($meses as $mes) { $total = $this->string->sec_to_time($arrayAtividadeTotal[$i]); $tr->addCell($this->string->retira_segundos($total), 'center', 'footer'); $tr->addCell('100%', 'center', 'footer'); $tr->addCell(' ', 'center', 'datai'); $i++; } $tr->addCell($this->string->retira_segundos($totalAtividadeTotal), 'center', 'footer'); $tr->addCell('100%', 'center', 'footer'); // stores the file if (!file_exists("app/output/Atividade.{$format}") or is_writable("app/output/Atividade.{$format}")) { $tr->save("app/output/Atividade.{$format}"); } else { throw new Exception(_t('Permission denied') . ': ' . "app/output/Atividade.{$format}"); } // open the report file parent::openFile("app/output/Atividade.{$format}"); // shows the success message new TMessage('info', 'Report generated. Please, enable popups in the browser (just in the web).'); } else { new TMessage('error', 'No records found'); } // fill the form with the active record data $this->form->setData($formdata); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'atividade' TTransaction::open('atividade'); $string = new StringsUtil(); // get the form data into an active record $formdata = $this->form->getData(); $repository = new TRepository('RegistroLogin'); $criteria = new TCriteria(); if ($formdata->login) { $criteria->add(new TFilter('login', '=', "{$formdata->login}")); } if ($formdata->data_ponto) { $criteria->add(new TFilter('data_ponto', '>=', "{$string->formatDate($formdata->data_ponto)}")); } $newparam['order'] = 'data_ponto'; $newparam['direction'] = 'desc'; $criteria->setProperties($newparam); // order, offset $objects = $repository->load($criteria); $format = $formdata->output_type; if ($objects) { $widths = array(20, 200, 50, 80, 80); switch ($format) { case 'html': $tr = new TTableWriterHTML($widths); break; case 'pdf': $tr = new TTableWriterPDF($widths); break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#6B6B6B'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#E5E5E5'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'B', '#4A5590', '#C0D3E9'); $tr->addStyle('footer', 'Times', '12', 'BI', '#4A5590', '#C0D3E9'); // add a header row $tr->addRow(); $tr->addCell('Registro de acessos ao sistema', 'center', 'header', 5); // add titles row $tr->addRow(); $tr->addCell('Seq.', 'center', 'title'); $tr->addCell('Nome', 'center', 'title'); $tr->addCell('Data', 'center', 'title'); $tr->addCell('Hora inicial', 'center', 'title'); $tr->addCell('Hora final', 'center', 'title'); // controls the background filling $colour = FALSE; $seq = 1; // data rows foreach ($objects as $object) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($seq++, 'right', $style); $tr->addCell($object->name, 'left', $style); $tr->addCell($string->formatDateBR($object->data_ponto), 'center', $style); $tr->addCell($object->hora_inicial, 'center', $style); $tr->addCell($object->hora_final, 'center', $style); $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell(date('d/m/Y h:i:s'), 'center', 'footer', 5); // stores the file if (!file_exists("app/output/RegistroLogin.{$format}") or is_writable("app/output/RegistroLogin.{$format}")) { $tr->save("app/output/RegistroLogin.{$format}"); } else { throw new Exception(_t('Permission denied') . ': ' . "app/output/RegistroLogin.{$format}"); } // open the report file parent::openFile("app/output/RegistroLogin.{$format}"); // shows the success message new TMessage('info', 'Relatorio gerado. Por favor, habilite popups no navegador (somente para web).'); } else { new TMessage('error', 'No records found'); } // fill the form with the active record data $this->form->setData($formdata); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'library' TTransaction::open('library'); // get the form data into an active record Member $object = $this->form->getData(); $repository = new TRepository('Member'); $criteria = new TCriteria(); if ($object->name) { $criteria->add(new TFilter('name', 'like', "%{$object->name}%")); } if ($object->city_id) { $criteria->add(new TFilter('city_id', '=', "{$object->city_id}")); } if ($object->category_id) { $criteria->add(new TFilter('category_id', '=', "{$object->category_id}")); } $members = $repository->load($criteria); $format = $object->output_type; if ($members) { $widths = array(40, 150, 80, 140, 80); switch ($format) { case 'pdf': $tr = new TTableWriterPDF($widths); break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#7C81BA'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#DFEAF6'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'BI', '#ff0000', '#FFF1B2'); $tr->addStyle('footer', 'Times', '12', 'BI', '#2B2B2B', '#B5FFB4'); // add a header row $tr->addRow(); $tr->addCell(_t('Members'), 'center', 'header', 5); // add titles row $tr->addRow(); $tr->addCell(_t('Code'), 'left', 'title'); $tr->addCell(_t('Name'), 'left', 'title'); $tr->addCell(_t('Category'), 'left', 'title'); $tr->addCell(_t('Email'), 'left', 'title'); $tr->addCell(_t('Phone'), 'left', 'title'); // controls the background filling $colour = FALSE; // data rows foreach ($members as $member) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($member->id, 'left', $style); $tr->addCell($member->name, 'left', $style); $tr->addCell($member->category_description, 'left', $style); $tr->addCell($member->email, 'left', $style); $tr->addCell($member->phone_number, 'left', $style); $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell(date('Y-m-d h:i:s'), 'center', 'footer', 5); // stores the file $tr->save("app/output/members.{$format}"); if (OS == 'WIN') { parent::openFile("app\\output\\members.{$format}"); } else { parent::openFile("app/output/members.{$format}"); } // shows the success message new TMessage('info', _t('Report generated')); } else { new TMessage('error', _t('No records found')); } // fill the form with the active record data $this->form->setData($object); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'atividade' TTransaction::open('atividade'); // get the form data into an active record $formdata = $this->form->getData(); $dataInicial = date('Y') . '-' . str_pad($formdata->mes_atividade, 2, 0, STR_PAD_LEFT) . '-01'; $dataFinal = date('Y') . '-' . str_pad($formdata->mes_atividade, 2, 0, STR_PAD_LEFT) . '-' . cal_days_in_month(CAL_GREGORIAN, $formdata->mes_atividade, date('Y')); $dias = Atividade::retornaDiasAtividades($dataInicial, $dataFinal); $criteria = new TCriteria(); $criteria->add(new TFilter("origem", "=", 1)); $criteria->add(new TFilter("codigo_cadastro_origem", "=", 100)); $criteria->add(new TFilter("ativo", "=", 1)); $criteria->add(new TFilter("pessoa_codigo", "IN", "(SELECT colaborador_id FROM atividade WHERE data_atividade between '{$dataInicial}' and '{$dataFinal}')")); $newparam['order'] = 'pessoa_nome'; $newparam['direction'] = 'asc'; $criteria->setProperties($newparam); // order, offset $repo = new TRepository('Pessoa'); $pessoas = $repo->load($criteria); $format = $formdata->output_type; if ($dias) { $widths = array(50); switch ($format) { case 'html': $tr = new TTableWriterHTML($widths); $break = '<br />'; break; case 'pdf': $tr = new TTableWriterPDF($widths); $break = ''; break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); $break = '<br />'; break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#6B6B6B'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#E5E5E5'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('totais', 'Arial', '10', '', '#000000', '#C0D3E9'); $tr->addStyle('header', 'Times', '16', 'B', '#4A5590', '#C0D3E9'); $tr->addStyle('footer', 'Times', '12', 'BI', '#4A5590', '#C0D3E9'); // add a header row $tr->addRow(); $tr->addCell(utf8_decode('Indicador de produtividade de: ') . strtoupper($this->string->array_meses()[$formdata->mes_atividade]), 'center', 'header', 33); $tr->addRow(); $tr->addCell('Seq.', 'center', 'title'); $tr->addCell('Nome', 'center', 'title'); foreach ($dias as $dia) { $tr->addCell(substr($dia['dias'], -2), 'center', 'title'); $arrayDias[substr($dia['dias'], -2)] = $dia['dias']; } $tr->addCell('TOTAL', 'center', 'title'); // controls the background filling $colour = FALSE; // data rows $count = 1; foreach ($pessoas as $pessoa) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($count, 'left', $style); $tr->addCell(utf8_decode($pessoa->pessoa_nome), 'left', $style, 33); $tr->addRow(); $tr->addCell('', 'left', $style); $tr->addCell('Ponto', 'left', $style); $totalPonto = null; foreach ($arrayDias as $dia) { $ponto = $this->retornaPonto($pessoa->pessoa_codigo, $dia); $totalPonto += $this->string->time_to_sec($ponto); $tr->addCell(substr($ponto, 0, -3), 'center', $style); $arrayPonto[$dia] += $this->string->time_to_sec($ponto); } $arrayPonto['total'] += $totalPonto; $tr->addCell(substr($this->string->sec_to_time($totalPonto), 0, -3), 'center', $style); $tr->addRow(); $tr->addCell('', 'left', $style); $tr->addCell('Atividades', 'left', $style); $totalAtividades = null; foreach ($arrayDias as $dia) { $horas = Ponto::horaPreenchidas($dia, $pessoa->pessoa_codigo); if (!$horas) { $horas = '00:00:00'; } $x = $this->retornaPonto($pessoa->pessoa_codigo, $dia); if ($this->string->time_to_sec($x) > 0) { $totalAtividades += $this->string->time_to_sec($horas); $arrayAtividades[$dia] += $this->string->time_to_sec($horas); } $tr->addCell(substr($horas, 0, -3), 'center', $style); } $arrayAtividades['total'] += $totalAtividades; $tr->addCell(substr($this->string->sec_to_time($totalAtividades), 0, -3), 'center', $style); $tr->addRow(); $tr->addCell('', 'left', $style); $tr->addCell('Produtividade', 'left', $style); foreach ($arrayDias as $dia) { $campo = $this->calculaPercentualProdutividade($pessoa->pessoa_codigo, $dia); $tr->addCell($campo, 'center', $style); } $tr->addCell($this->calculaPercentualProdutividadeTotalColaborador($totalAtividades, $totalPonto), 'center', $style); $tr->addRow(); $tr->addCell($break, 'left', $style, 33); $count++; $colour = !$colour; } // totais row $tr->addRow(); $tr->addCell($count, 'left', 'totais'); $tr->addCell('TOTAIS', 'left', 'totais', 33); $tr->addRow(); $tr->addCell('', 'left', 'totais'); $tr->addCell('Ponto', 'left', 'totais'); foreach ($arrayDias as $dia) { $tr->addCell(substr($this->string->sec_to_time($arrayPonto[$dia]), 0, -3), 'center', 'totais'); } $tr->addCell(substr($this->string->sec_to_time($arrayPonto['total']), 0, -3), 'center', 'totais'); $tr->addRow(); $tr->addCell('', 'left', 'totais'); $tr->addCell('Atividades', 'left', 'totais'); foreach ($arrayDias as $dia) { $tr->addCell(substr($this->string->sec_to_time($arrayAtividades[$dia]), 0, -3), 'center', 'totais'); } $tr->addCell(substr($this->string->sec_to_time($arrayAtividades['total']), 0, -3), 'center', 'totais'); $tr->addRow(); $tr->addCell('', 'left', 'totais'); $tr->addCell('Produtividade', 'left', 'totais'); foreach ($arrayDias as $dia) { $tr->addCell($this->calculaPercentualProdutividadeTotalColaborador($arrayAtividades[$dia], $arrayPonto[$dia]), 'center', 'totais'); } $tr->addCell($this->calculaPercentualProdutividadeTotalColaborador($arrayAtividades['total'], $arrayPonto['total']), 'center', 'totais'); // footer row $tr->addRow(); $var = rand(0, 1000); $tr->addCell(date('d/m/Y H:i:s'), 'center', 'footer', 33); foreach ($arrayAtividades as $key => $value) { if ($key != 'total') { $yAtividades[substr($key, -2)] = $this->string->sec_to_time($value); $xLabel[substr($key, -2)] = substr($key, -2); } } foreach ($arrayPonto as $key => $value) { if ($key != 'total') { $yPonto[substr($key, -2)] = $this->string->sec_to_time($value); } } ksort($yAtividades); ksort($yPonto); ksort($xLabel); $chart = new TLineChart(new TPChartDesigner()); $chart->setTitle('Totais', NULL, NULL); $chart->setSize(1100, 600); $chart->setXLabels($xLabel); $chart->setYLabel('Horas'); $chart->setOutputPath('app/output/linechart_{$var}.png'); $chart->addData('Atividades', $yAtividades); $chart->addData('Ponto', $yPonto); $chart->generate(); $tr->addRow(); $tr->addCell(new TImage('app/output/linechart_{$var}.png'), 'center', 'datai', 33); // stores the file if (!file_exists("app/output/Ponto_{$var}.{$format}") or is_writable("app/output/Ponto_{$var}.{$format}")) { $tr->save("app/output/Ponto_{$var}.{$format}"); } else { throw new Exception(_t('Permission denied') . ': ' . "app/output/Ponto_{$var}.{$format}"); } // open the report file parent::openFile("app/output/Ponto_{$var}.{$format}"); // shows the success message new TMessage('info', 'Relatorio gerado. Por favor, habilite popups no navegador (somente para web).'); } else { new TMessage('error', 'No records found'); } // fill the form with the active record data $this->form->setData($formdata); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { $string = new StringsUtil(); TTransaction::open('atividade'); // open a transaction with database 'atividade' // get the form data into an active record $formdata = $this->form->getData(); if ($formdata->ticket_id) { $where .= " and t.id >= {$formdata->ticket_id} "; } if ($formdata->solicitante_id) { $where .= " and t.solicitante_id = {$formdata->solicitante_id} "; } if ($formdata->responsavel_id) { $where .= " and t.responsavel_id = {$formdata->responsavel_id} "; } if ($formdata->entcodent) { $solicitantes = Pessoa::getPessoasEntidade($formdata->entcodent); $comma_separated = implode(",", $solicitantes); $where .= " and t.solicitante_id in ( {$comma_separated} )"; } if ($formdata->status_ticket_id) { $where .= " and t.status_ticket_id = {$formdata->status_ticket_id} "; } if ($formdata->prioridade_id) { $where .= " and t.prioridade_id = {$formdata->prioridade_id} "; } if ($formdata->data_prevista) { $where .= " and t.data_prevista <= '{$string->formatDate($formdata->data_prevista)}' "; } if ($formdata->data_atividade_inicio) { $where .= " and a.data_atividade >= '{$string->formatDate($formdata->data_atividade_inicio)}' "; } if ($formdata->data_atividade_final) { $where .= " and a.data_atividade <= '{$string->formatDate($formdata->data_atividade_final)}' "; } if ($formdata->colaborador_id) { $where .= " and a.colaborador_id = {$formdata->colaborador_id} "; } if ($formdata->tipo_atividade_id) { $where .= " and a.tipo_atividade_id = {$formdata->tipo_atividade_id} "; } if ($formdata->saldo) { $where .= " and (coalesce(t.valor_total,0) - coalesce(t.valor_total_pago,0)) > 0 "; } if ($formdata->ticket_sistema_id) { $where .= " and t.sistema_id = {$formdata->ticket_sistema_id} "; } if ($formdata->atividade_sistema_id) { $where .= " and a.sistema_id = {$formdata->atividade_sistema_id} "; } if ($formdata->tipo_ticket_id) { $where .= " and t.tipo_ticket_id = {$formdata->tipo_ticket_id} "; } if ($formdata->pesquisa_master) { $where .= " and (t.titulo ilike '%{$formdata->pesquisa_master}%' or a.descricao ilike '%{$formdata->pesquisa_master}%') "; } // and (t.titulo ilike %{$formdata->pesquisa_master}% or a.descricao ilike %{$formdata->pesquisa_master}%) $format = $formdata->output_type; $objects = Ticket::relatorioSintetico($where); if ($objects) { $widths = null; switch ($format) { case 'html': $tr = new TTableWriterHTML($widths); break; case 'pdf': $tr = new TTableWriterPDF($widths, 'L'); break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); break; } // create the document styles $tr->addStyle('title', 'Arial', '12', 'B', '#ffffff', '#6B6B6B'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#E5E5E5'); $tr->addStyle('datapa', 'Arial', '9', '', '#000000', '#E5E5E5'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('dataia', 'Arial', '9', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'B', '#4A5590', '#C0D3E9'); $tr->addStyle('footer', 'Times', '12', 'BI', '#4A5590', '#C0D3E9'); $tr->addStyle('valpos', 'Arial', '12', '', '#000000', '#0DC13A'); $tr->addStyle('valneg', 'Arial', '12', '', '#000000', '#FF0000'); // add a header row $tr->addRow(); $tr->addCell('Ticket - Resumo atividades', 'center', 'header', 16); // add titles row $tr->addRow(); $tr->addCell('Seq', 'center', 'title'); $tr->addCell('ID', 'center', 'title'); $tr->addCell('ST', 'center', 'title'); $tr->addCell('PR', 'center', 'title'); $tr->addCell('H.O.', 'center', 'title'); $tr->addCell('H.A.', 'center', 'title'); $tr->addCell('H.S.', 'center', 'title'); $tr->addCell('Prevista', 'center', 'title'); $tr->addCell('Dias', 'center', 'title'); $tr->addCell(utf8_decode('Título'), 'left', 'title'); $tr->addCell(utf8_decode('Responsável'), 'left', 'title'); $tr->addCell('T', 'center', 'title'); $tr->addCell('Cliente', 'left', 'title'); $tr->addCell(utf8_decode('Orçado'), 'right', 'title'); $tr->addCell('Pago', 'right', 'title'); $tr->addCell('Saldo', 'right', 'title'); // controls the background filling $colour = FALSE; $repository = new TRepository('Pessoa'); $repo = $repository->load(); foreach ($repo as $row) { $pessoa[$row->pessoa_codigo] = $row->pessoa_nome; } $seq = 1; $totalOrcado = 0; $totalPago = 0; $totalSaldo = 0; $totalHorasOrcadas = 0; $totalHorasAtividades = 0; $totalHorasSaldo = 0; // data rows foreach ($objects as $object) { //$responsavel = new Pessoa($object['responsavel_id']); $cliente = new Pessoa($object['solicitante_id']); $style = $colour ? 'datap' : 'datai'; $horasStyle = $style; $dias = ''; $dataStyle = $style; if ($object['orcamento_horas']) { if (substr($object['horas_saldo'], 0, 1) == '-') { $horasStyle = 'valneg'; } else { $horasStyle = 'valpos'; } } if ($object['data_prevista']) { $dias = $string->subtrair_datas(date('Y-m-d'), $object['data_prevista']); if (substr($dias, 0, 1) == '-') { $dataStyle = 'valneg'; } else { $dataStyle = 'valpos'; } } $tr->addRow(); $tr->addCell($seq++, 'center', $style); $tr->addCell($object['id'], 'center', $style); $tr->addCell(substr($object['status'], 0, 1), 'center', $style); $tr->addCell(substr($object['prioridade'], 0, 1), 'center', $style); $tr->addCell(substr($object['orcamento_horas'], 0, -3), 'center', $style); $tr->addCell(substr($object['horas_atividade'], 0, -3), 'center', $style); $tr->addCell(substr($object['horas_saldo'], 0, -3), 'center', $horasStyle); $tr->addCell($object['data_prevista'] ? $data_prevista = $string->formatDateBR($object['data_prevista']) : null, 'center', $style); $tr->addCell($dias, 'center', $dataStyle); $tr->addCell(utf8_decode($object['titulo']), 'left', $style); $tr->addCell(utf8_decode($pessoa[$object['responsavel_id']]), 'left', $style); $tr->addCell($object['origem'], 'center', $style); $tr->addCell(utf8_decode($cliente->origem_nome), 'left', $style); $tr->addCell($object['valor_total'], 'right', $style); $tr->addCell($object['valor_total_pago'], 'right', $style); $tr->addCell($object['saldo'], 'right', $style); $totalDias += $dias; $totalOrcado += $object['valor_total']; $totalPago += $object['valor_total_pago']; $totalSaldo += $object['saldo']; $totalHorasOrcadas += $string->time_to_sec($object['orcamento_horas']); $totalHorasAtividades += $string->time_to_sec($object['horas_atividade']); $totalHorasSaldo += $string->time_to_sec($object['horas_saldo']); if ($formdata->tipo == 'a') { $atividades = Ticket::relatorioAnalitico($object['id'], $where); if ($atividades) { $seqA = 1; foreach ($atividades as $atividade) { $stylea = $colour ? 'datapa' : 'dataia'; $tr->addRow(); $tr->addCell('', 'center', $stylea); $tr->addCell($seqA++, 'center', $stylea); $tr->addCell($string->formatDateBR($atividade['data_atividade']), 'center', $stylea, 3); //$tr->addCell(substr($object['prioridade'], 0, 1), 'center', $style); //$tr->addCell($object['orcamento_horas'], 'center', $style); $tr->addCell(substr($atividade['tempo'], 0, -3), 'center', $stylea); $tr->addCell('', 'center', $stylea); $tr->addCell($object['data_prevista'] ? $data_prevista = $string->formatDateBR($object['data_prevista']) : null, 'center', $stylea); $tr->addCell('', 'center', $stylea); $tr->addCell('das ' . substr($atividade['hora_inicio'], 0, -3) . ' as ' . substr($atividade['hora_fim'], 0, -3), 'left', $stylea); $tr->addCell(utf8_decode($pessoa[$atividade['colaborador_id']]), 'left', $stylea); $tr->addCell('', 'center', $stylea); $tr->addCell(utf8_decode($atividade['tipo_atividade']), 'left', $stylea); $tr->addCell('', 'right', $stylea); $tr->addCell('', 'right', $stylea); $tr->addCell('', 'right', $stylea); } } } $tr->addRow(); $tr->addCell(' ', 'center', $style, 16); $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell('Totais:', 'center', 'footer', 4); //$tr->addCell('', 'center', 'footer'); //$tr->addCell('', 'center', 'footer'); //$tr->addCell('', 'center', 'footer'); $tr->addCell(substr($string->sec_to_time($totalHorasOrcadas), 0, -3), 'center', 'footer'); $tr->addCell(substr($string->sec_to_time($totalHorasAtividades), 0, -3), 'center', 'footer'); $tr->addCell(substr($string->sec_to_time($totalHorasSaldo), 0, -3), 'center', 'footer'); $tr->addCell('', 'center', 'footer'); $tr->addCell('', 'center', 'footer'); $tr->addCell('', 'left', 'footer'); $tr->addCell('', 'left', 'footer'); $tr->addCell('', 'center', 'footer'); $tr->addCell('', 'left', 'footer'); $tr->addCell($totalOrcado, 'right', 'footer'); $tr->addCell($totalPago, 'right', 'footer'); $tr->addCell($totalSaldo, 'right', 'footer'); $tr->addRow(); $tr->addCell(date('d/m/Y H:i:s'), 'center', 'footer', 16); // stores the file if (!file_exists("app/output/Ticket.{$format}") or is_writable("app/output/Ticket.{$format}")) { $tr->save("app/output/Ticket.{$format}"); } else { throw new Exception(_t('Permission denied') . ': ' . "app/output/Ticket.{$format}"); } // open the report file parent::openFile("app/output/Ticket.{$format}"); // shows the success message new TMessage('info', 'Relatorio gerado. Por favor, habilite popups no navegador (somente para web).'); } else { new TMessage('error', 'Não foram encontrados registros!'); } // fill the form with the active record data $this->form->setData($formdata); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'library' TTransaction::open('library'); // get the form data into an active record Loan $object = $this->form->getData(); $repository = new TRepository('Loan'); $criteria = new TCriteria(); if ($object->member_id) { $criteria->add(new TFilter('member_id', '=', "{$object->member_id}")); } if ($object->barcode_input) { $criteria->add(new TFilter('barcode', '=', "{$object->barcode_input}")); } if ($object->loan_date1) { $criteria->add(new TFilter('loan_date', '>=', "{$object->loan_date1}")); } if ($object->loan_date2) { $criteria->add(new TFilter('loan_date', '<=', "{$object->loan_date2}")); } $loans = $repository->load($criteria); $format = $object->output_type; if ($loans) { $widths = array(70, 190, 100, 70, 70); switch ($format) { case 'pdf': $tr = new TTableWriterPDF($widths); break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#7C81BA'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#DFEAF6'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'BI', '#ff0000', '#FFF1B2'); $tr->addStyle('footer', 'Times', '12', 'BI', '#2B2B2B', '#B5FFB4'); // add a header row $tr->addRow(); $tr->addCell(_t('Loans'), 'center', 'header', 5); // add titles row $tr->addRow(); $tr->addCell(_t('Barcode'), 'left', 'title'); $tr->addCell(_t('Title'), 'left', 'title'); $tr->addCell(_t('Name'), 'left', 'title'); $tr->addCell(_t('Loan date'), 'left', 'title'); $tr->addCell(_t('Arrive date'), 'left', 'title'); // controls the background filling $colour = FALSE; // data rows foreach ($loans as $loan) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($loan->barcode, 'left', $style); $tr->addCell($loan->book_title, 'left', $style); $tr->addCell($loan->member_name, 'left', $style); $tr->addCell($loan->loan_date, 'left', $style); $tr->addCell($loan->arrive_date, 'left', $style); $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell(date('Y-m-d h:i:s'), 'center', 'footer', 5); // stores the file $tr->save("app/output/loans.{$format}"); if (OS == 'WIN') { parent::openFile("app\\output\\loans.{$format}"); } else { parent::openFile("app/output/loans.{$format}"); } // shows the success message new TMessage('info', _t('Report generated')); } else { new TMessage('error', _t('No records found')); } // fill the form with the active record data $this->form->setData($object); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
/** * method onGenerate() * Executed whenever the user clicks at the generate button */ function onGenerate() { try { // open a transaction with database 'atividade' TTransaction::open('atividade'); // get the form data into an active record $formdata = $this->form->getData(); $format = $formdata->output_type; $tickets = null; if ($formdata->cliente_id > 0) { $cliente = Pessoa::getPessoasEntidade($formdata->cliente_id); $retorno = Ticket::getTicketsCliente($cliente); $tickets = implode(",", $retorno); } $total = Atividade::retornaTotalAtividadesColaborador($formdata->colaborador_id, $formdata->mes_atividade, $formdata->ano_atividade, $tickets); if ($total) { $widths = array(25, 350, 70, 50); switch ($format) { case 'html': $tr = new TTableWriterHTML($widths); $break = '<br />'; break; case 'pdf': $tr = new TTableWriterPDF($widths); $break = ''; break; case 'rtf': if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF($widths); $break = '<br />'; break; } // create the document styles $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#6B6B6B'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#E5E5E5'); $tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addStyle('header', 'Times', '16', 'B', '#4A5590', '#C0D3E9'); $tr->addStyle('footer', 'Times', '12', 'BI', '#4A5590', '#C0D3E9'); $titulo = 'TODOS COLABORADORES'; if ($formdata->colaborador_id > 0) { $colaborador = new Pessoa($formdata->colaborador_id); $titulo = utf8_decode($colaborador->pessoa_nome); $totalPonto = $this->retornaPonto($formdata->colaborador_id, $formdata->mes_atividade); $criteria = new TCriteria(); $criteria->add(new TFilter("mes", "=", $formdata->mes_atividade)); $criteria->add(new TFilter("ano", "=", $formdata->ano_atividade)); $criteria->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); $repo = new TRepository('CargaHoraria'); $cargaHoraria = $repo->load($criteria); foreach ($cargaHoraria as $carga) { $horario = $carga->horario; } } else { //calcular todos $criteria = new TCriteria(); $criteria->add(new TFilter("mes", "=", $formdata->mes_atividade)); $criteria->add(new TFilter("ano", "=", $formdata->ano_atividade)); $repo = new TRepository('CargaHoraria'); $cargaHoraria = $repo->load($criteria); foreach ($cargaHoraria as $carga) { $horario += $this->string->time_to_sec($carga->horario); } $criteria = new TCriteria(); $criteria->add(new TFilter("origem", "=", 1)); $criteria->add(new TFilter("codigo_cadastro_origem", "=", 100)); $criteria->add(new TFilter("ativo", "=", 1)); $criteria->add(new TFilter("usuario", "is not ")); $repo = new TRepository('Pessoa'); $pessoas = $repo->load($criteria); foreach ($pessoas as $pessoa) { $totalPonto += $this->string->time_to_sec($this->retornaPonto($pessoa->pessoa_codigo, $formdata->mes_atividade)); } $horario = $this->string->sec_to_time($horario); $totalPonto = $this->string->sec_to_time($totalPonto); } // report description $tr->addRow(); $tr->addCell('', 'center', 'title'); $tr->addCell($titulo, 'center', 'title'); $tr->addCell("{$this->string->array_meses()[$formdata->mes_atividade]}-{$formdata->ano_atividade}", 'center', 'title', 2); // add a header row $tr->addRow(); $tr->addCell('', 'center', 'header'); $tr->addCell('Indicadores', 'center', 'header'); $tr->addCell('Horas', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // data rows $style = 'datai'; $tr->addRow(); $tr->addCell('', 'center', $style); $tr->addCell(utf8_decode('Carga horária mensal:'), 'left', $style); $tr->addCell($this->string->retira_segundos($horario), 'right', $style); $tr->addCell('100%', 'right', $style); $tr->addRow(); $tr->addCell('', 'center', $style); $tr->addCell(utf8_decode('Horas ponto total:'), 'left', $style); $tr->addCell($this->string->retira_segundos($totalPonto), 'right', $style); $tr->addCell(round($this->string->time_to_sec($totalPonto) * 100 / $this->string->time_to_sec($horario)) . '%', 'right', $style); $cri = new TCriteria(); if ($formdata->colaborador_id > 0) { $cri->add(new TFilter("colaborador_id", "=", $formdata->colaborador_id)); } $cri->add(new TFilter("ticket_id", "IN", array(328, 514))); $cri->add(new TFilter("extract('month' from data_atividade)", "=", $formdata->mes_atividade)); $cri->add(new TFilter("extract('year' from data_atividade)", "=", $formdata->ano_atividade)); $repo = new TRepository('Atividade'); $ausencias = $repo->count($cri); if ($ausencias) { $horas = $repo->load($cri); foreach ($horas as $h) { $tempo += $this->string->time_to_sec($h->hora_fim) - $this->string->time_to_sec($h->hora_inicio); } $pontoUtil = $this->string->time_to_sec($totalPonto) - $tempo; $tr->addRow(); $tr->addCell('', 'center', $style); $tr->addCell(utf8_decode('Horas ponto útil:'), 'left', $style); $tr->addCell($this->string->retira_segundos($this->string->sec_to_time($pontoUtil)), 'right', $style); $tr->addCell(round($pontoUtil * 100 / $this->string->time_to_sec($horario)) . '%', 'right', $style); $tr->addRow(); $tr->addCell('', 'center', 'datap'); $tr->addCell(utf8_decode('Horas atividade (indicador total):'), 'left', 'datap'); $tr->addCell($this->string->retira_segundos($total), 'right', 'datap'); $tr->addCell(round($this->string->time_to_sec($total) * 100 / $this->string->time_to_sec($totalPonto)) . '%', 'right', 'datap'); $tr->addRow(); $tr->addCell('', 'center', 'datap'); $tr->addCell(utf8_decode('Horas atividade (indicador útil):'), 'left', 'datap'); $tr->addCell($this->string->retira_segundos($total), 'right', 'datap'); $tr->addCell(round($this->string->time_to_sec($total) * 100 / $pontoUtil) . '%', 'right', 'datap'); } else { $tr->addRow(); $tr->addCell('', 'center', $style); $tr->addCell(utf8_decode('Horas atividade:'), 'left', $style); $tr->addCell($this->string->retira_segundos($total), 'right', $style); $tr->addCell(round($this->string->time_to_sec($total) * 100 / $this->string->time_to_sec($totalPonto)) . '%', 'right', $style); } // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', 4); //ATESTADOS MEDICOS $objects = Atividade::retornaAtestadosMedicos($formdata->colaborador_id, $formdata->mes_atividade, $formdata->ano_atividade); // add a header row $tr->addRow(); $tr->addCell('', 'center', 'header'); $tr->addCell(utf8_decode('Ausências'), 'center', 'header'); $tr->addCell('Horas', 'center', 'header'); $tr->addCell('', 'center', 'header'); // controls the background filling $colour = FALSE; $seq = 1; // data rows foreach ($objects as $row) { $style = $colour ? 'datap' : 'datai'; $ticket = new Ticket($row['ticket_id']); $tr->addRow(); $tr->addCell($seq, 'center', $style); $tr->addCell(utf8_decode($ticket->titulo), 'left', $style); $tr->addCell($this->string->retira_segundos($row['total']), 'right', $style); $tr->addCell(round($this->string->time_to_sec($row['total']) * 100 / $this->string->time_to_sec($totalPonto)) . '%', 'right', $style); $seq++; $colour = !$colour; } // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', 4); $objects = Atividade::retornaAtividadesColaborador($formdata->colaborador_id, $formdata->mes_atividade, $formdata->ano_atividade, $tickets); // add a header row $tr->addRow(); $tr->addCell('', 'center', 'header'); $tr->addCell('Tipo Atividades', 'center', 'header'); $tr->addCell('Horas', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // controls the background filling $colour = FALSE; $seq = 1; // data rows foreach ($objects as $row) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($seq, 'center', $style); $tr->addCell(utf8_decode($row['nome']), 'left', $style); $tr->addCell($this->string->retira_segundos($row['total']), 'right', $style); $tr->addCell(round($this->string->time_to_sec($row['total']) / $this->string->time_to_sec($total) * 100) . '%', 'right', $style); $seq++; $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell('', 'right', 'footer'); $tr->addCell('Total:', 'left', 'footer'); $tr->addCell($this->string->retira_segundos($total), 'right', 'footer'); $tr->addCell('100%', 'right', 'footer'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', 4); $objects = Atividade::retornaAtividadesSistemaColaborador($formdata->colaborador_id, $formdata->mes_atividade, $formdata->ano_atividade, $tickets); // add a header row $tr->addRow(); $tr->addCell('', 'center', 'header'); $tr->addCell('Por Sistema', 'center', 'header'); $tr->addCell('Horas', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // controls the background filling $colour = FALSE; $seq = 1; // data rows foreach ($objects as $row) { $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($seq, 'center', $style); $tr->addCell(utf8_decode($row['nome']), 'left', $style); $tr->addCell($this->string->retira_segundos($row['total']), 'right', $style); $tr->addCell(round($this->string->time_to_sec($row['total']) / $this->string->time_to_sec($total) * 100) . '%', 'right', $style); $seq++; $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell('', 'right', 'footer'); $tr->addCell('Total:', 'left', 'footer'); $tr->addCell($this->string->retira_segundos($total), 'right', 'footer'); $tr->addCell('100%', 'right', 'footer'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', 4); $objects = Atividade::retornaAtividadesClienteColaborador($formdata->colaborador_id, $formdata->mes_atividade, $formdata->ano_atividade, $tickets); foreach ($objects as $row) { $cliente = new Pessoa($row['solicitante_id']); if ($cliente->origem == 1) { $ind = $cliente->codigo_cadastro_origem; } else { $ind = 999; } $array[$ind] += $this->string->time_to_sec($row['total']); } ksort($array); // add a header row $tr->addRow(); $tr->addCell('', 'center', 'header'); $tr->addCell('Por Cliente', 'center', 'header'); $tr->addCell('Horas', 'center', 'header'); $tr->addCell('%', 'center', 'header'); // controls the background filling $colour = FALSE; $seq = 1; // data rows foreach ($array as $key => $value) { if ($key < 999) { $etd = new Entidade($key); $nome = $key . ' - ' . $etd->entnomfan; } else { $nome = $key . ' - ECS'; } $style = $colour ? 'datap' : 'datai'; $tr->addRow(); $tr->addCell($seq, 'center', $style); $tr->addCell(utf8_decode($nome), 'left', $style); $tr->addCell($this->string->retira_segundos($this->string->sec_to_time($value)), 'right', $style); $tr->addCell(round($value / $this->string->time_to_sec($total) * 100) . '%', 'right', $style); $seq++; $colour = !$colour; } // footer row $tr->addRow(); $tr->addCell('', 'right', 'footer'); $tr->addCell('Total:', 'left', 'footer'); $tr->addCell($this->string->retira_segundos($total), 'right', 'footer'); $tr->addCell('100%', 'right', 'footer'); // division row $tr->addRow(); $tr->addCell($break, 'center', 'datai', 4); // footer row $tr->addRow(); $tr->addCell(date('d/m/Y H:i:s'), 'center', 'footer', 4); // stores the file $var = rand(0, 1000); if (!file_exists("app/output/Atividade{$var}_{$formdata->mes_atividade}_{$formdata->colaborador_id}.{$format}") or is_writable("app/output/Atividade.{$format}")) { $tr->save("app/output/Atividade{$var}_{$formdata->mes_atividade}_{$formdata->colaborador_id}.{$format}"); } else { throw new Exception(_t('Permission denied') . ': ' . "app/output/Atividade_{$formdata->mes_atividade}_{$formdata->colaborador_id}.{$format}"); } // open the report file parent::openFile("app/output/Atividade{$var}_{$formdata->mes_atividade}_{$formdata->colaborador_id}.{$format}"); // shows the success message new TMessage('info', 'Relatorio gerado. Por favor, habilite popups no navegador (somente para web).'); } else { new TMessage('error', 'Sem atividade no periodo cadastrado!'); } // fill the form with the active record data $this->form->setData($formdata); // close the transaction TTransaction::close(); } catch (Exception $e) { // shows the exception error message new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // undo all pending operations TTransaction::rollback(); } }
public function onGenerate() { try { TTransaction::open('atividade'); $object = $this->form->getData(); $desenvolvimento = new RequisitoDesenvolvimento($object->id); $cliente_id = $desenvolvimento->ticket->solicitante_id; $responsavel_id = $desenvolvimento->ticket->responsavel_id; $pessoa = new Pessoa($cliente_id); $cliente = $pessoa->pessoa_nome; $pessoa = new Pessoa($responsavel_id); $responsavel = $pessoa->pessoa_nome; if (!class_exists('PHPRtfLite_Autoloader')) { PHPRtfLite::registerAutoloader(); } $tr = new TTableWriterRTF(array(500)); $tr->addStyle('title', 'Arial', '10', 'BI', '#000000', '#ffffff'); $tr->addStyle('datap', 'Arial', '10', '', '#000000', '#ffffff'); $data = $desenvolvimento->data_cadastro; $data = explode('-', $data); $data_prevista = '___/___/___'; if ($desenvolvimento->ticket->data_prevista) { $data_prevista = $this->string->formatDateBR($desenvolvimento->ticket->data_prevista); } $cabecalho = 'DTR010 - Solicitação de Desenvolvimento Número: ' . $desenvolvimento->ticket_id . '/' . $data[0] . ' Data: ' . $this->string->formatDateBR($desenvolvimento->data_cadastro) . ' Prazo de entrega: ' . $data_prevista . ' Qtde de Horas: ' . strstr($desenvolvimento->ticket->orcamento_horas, ':', true) . ' Ticket: ' . $desenvolvimento->ticket_id . ' Benefício: ( )+Receita ( )-Despesa ( )+Eficiência ( )-NDA Título: ' . $desenvolvimento->titulo . ' Sistema: ' . $desenvolvimento->ticket->sistema->nome . ' Módulo: Rotina: ' . $desenvolvimento->rotina . ' Cliente: ' . $cliente . ' Solicitante/Dpto: ' . $responsavel; $tr->addRow(); $tr->addCell(utf8_decode($cabecalho), 'left', 'title'); $tr->addRow(); $tr->addCell('<br /><b>Objetivo:</b> <br />' . $desenvolvimento->objetivo, 'left', 'datap'); $tr->addRow(); $tr->addCell('<br /><b>Entrada: </b><br />' . $desenvolvimento->entrada, 'left', 'datap'); $tr->addRow(); $tr->addCell('<br /><b>Processamento: </b><br />' . $desenvolvimento->processamento, 'left', 'datap'); $tr->addRow(); $tr->addCell('<br /><b>Saida: </b><br />' . $desenvolvimento->saida, 'left', 'datap'); $tipo = array(4 => 'D', 5 => 'A', 6 => 'C'); $nome = 'DTR010' . $tipo[$desenvolvimento->ticket->tipo_ticket_id] . $desenvolvimento->ticket_id . '-' . $data[0] . ' - ' . $desenvolvimento->titulo; $tr->save("app/output/{$nome}.rtf"); parent::openFile("app/output/{$nome}.rtf"); TButton::enableField('form_RequisitoDesenvolvimento', 'save'); $this->form->setData($object); // define the onEdit action $action = new TAction(array($this, 'onEdit')); $param['key'] = $object->id; $action->setParameters($param); // pass the key parameter ahead new TMessage('info', 'DTR gerado com sucesso!', $action); TTransaction::close(); } catch (Exception $e) { new TMessage('error', $e->getMessage); } }