forked from winponta/ongonline
/
Report.php
110 lines (85 loc) · 4.09 KB
/
Report.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
/**
* Gerencia a impressão de um relatório, podendo instanciar e executar os métodos
* corretos de carregamento dos registros, de acordo com parâmetros passados.
* Também contem os templates de cabeçalhos e rodapés
*/
class Agana_Print_Report {
private function viewToRender($params, $renderViews) {
$viewToRender = $renderViews['report'];
$keys = array_keys($params);
for ($i = 0; $i < count($keys); $i++) {
if (array_key_exists($keys[$i], $renderViews)) {
if($params[$keys[$i]]) {
$viewToRender = $renderViews[$keys[$i]];
}
}
}
return $viewToRender;
}
/**
* Manipula uma chamada para relatório, mostrando o formulário correto,
* executando a classe e operação de domínio que levanta os dados e renderizando
* a view/partial correta
* <br/>
* $renderViews são um array onde o índice é o nome de um parâmetro que pode ser
* recebido no request e o valor é a view a ser renderizada.<br/>
* O índice 'report' deve ser usado com a view de relatório padrão. 'form'
* deve ser utilizado para a view de interface para renderizar o formulário.
* <br/>
* ['report'] => 'view-padrao'<br/>
* ['form'] => 'view-form'<br/>
* ['summarized'] => 'view-summarized'<br/>
*
* @param String $domainClass
* @param String $domainAction
* @param String $formClass name of the form class
* @param ArrayObject $renderViews
* @param String $viewFolder é o nome do diretório onde estão as views, para ser renderizada com retorno, em geral para o pdf
* @param Zend_View $view o objeto view
* @param Zend_Request $request o objeto request
* @return String
*/
public function handleRequest(
$domainClass, $domainAction, $formClass,
array $renderViews,
$viewFolder, Agana_Print_Meta $metaReport,
Zend_Controller_Action $controller) {
// die(Zend_Debug::dump($controller->view));
$controller->view->records = null;
if ($controller->getRequest()->getParam('format')) {
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout('report.layout');
$domain = new $domainClass();
$controller->view->records = $domain->$domainAction(
Zend_Auth::getInstance()->getIdentity()->appaccount_id,
$controller->getRequest()->getParams());
$viewToRender = $this->viewToRender($controller->getRequest()->getParams(), $renderViews);
$controller->view->format = $controller->getParam('format');
$personDomain = new Persons_Domain_Person();
$person = $personDomain->getById(Zend_Auth::getInstance()->getIdentity()->person_id);
$appAccount = $person->getAppaccount();
$metaReport->setAccountName($appAccount->getName());
if ($controller->getParam('format') == 'pdf') {
$report = new Agana_Print_Pdf_Report($metaReport, $controller->view->theme_path);
$controller->view->assign('report', $report);
$layout->disableLayout();
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer');
$viewRenderer->setNoRender(true);
$content = $controller->view->render($viewFolder . '/' . $viewToRender . '.phtml');
$report->addPage($content);
$report->download();
} else {
$report = new Agana_Print_Html_Report($metaReport, '');
$controller->view->assign('report', $report);
return $controller->render($viewToRender);
}
} else {
$form = new $formClass();
$controller->view->assign('form', $form);
$viewToRender = $renderViews['form'];
return $controller->render($viewToRender);
}
}
}