Controller.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <?php
  2. namespace excel\web;
  3. use Mpdf\Mpdf;
  4. use yii\filters\auth\CompositeAuth;
  5. use yii\filters\auth\QueryParamAuth;
  6. use yii\filters\Cors;
  7. use PhpOffice\PhpSpreadsheet\IOFactory;
  8. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  9. class Controller extends \yii\web\Controller {
  10. /**
  11. * Si es verdadero imprime el contenido en el web
  12. * @var boolean $html
  13. */
  14. public $html = false;
  15. /**
  16. * Mostrar vista previa del pdf o descargar
  17. * true = descargar
  18. * @var boolean $descargar
  19. */
  20. public $descargar = false;
  21. /**
  22. * Configuración para la librería mpdf
  23. * @var array $configuracion
  24. */
  25. public $configuracion = [
  26. "format" => "letter",
  27. "default_font" => "Roboto",
  28. ];
  29. /**
  30. * Texto para la marca de agua
  31. * @var string $marcaDeAguaTexto
  32. */
  33. public $marcaDeAguaTexto = "";
  34. /**
  35. * Habilitar la marca de agua
  36. * @var boolean $html
  37. */
  38. public $marcaDeAgua = false;
  39. /**
  40. * Encoger las tablas para que quepan
  41. * @var int $encogerTablas
  42. */
  43. public $encogerTablas = 0;
  44. /**
  45. * Mantener proporciones de tabla
  46. * @var boolean $mantenerProporcionTabla
  47. */
  48. public $mantenerProporcionTabla = true;
  49. /**
  50. * Nombre del archivo al descargar
  51. * @var string $nombreArchivo
  52. */
  53. public $nombreArchivo = "";
  54. /**
  55. * Estilos para el pdf
  56. * @var string $hojaDeEstilo
  57. */
  58. public $hojaDeEstilo = "";
  59. /**
  60. * header para el pdf
  61. * @var string $header
  62. */
  63. public $header;
  64. /**
  65. * @var \yii\web\Request $req
  66. */
  67. public $req;
  68. /**
  69. * @var \yii\web\Response $res
  70. */
  71. public $res;
  72. //*
  73. /* public function behaviors() {
  74. $behavior = parent::behaviors();
  75. $behavior["authenticator"] = [
  76. "class" => CompositeAuth::className(),
  77. "authMethods" => [
  78. QueryParamAuth::className(),
  79. ]
  80. ];
  81. return $behavior;
  82. } */// */
  83. public function beforeAction($action) {
  84. parent::beforeAction($action);
  85. $basePath = \Yii::getAlias("@app");
  86. $this->req = \Yii::$app->getRequest();
  87. $this->res = \Yii::$app->getResponse();
  88. $this->html = intval($this->req->get("html", 0)) === 1;
  89. if ($this->html) {
  90. $this->res->format = \yii\web\Response::FORMAT_HTML;
  91. }
  92. $this->descargar = intval($this->req->get("descargar", "")) === 1;
  93. $this->marcaDeAgua = false; // intval($this->req->get("wm", 0)) === 1;
  94. $this->hojaDeEstilo = file_get_contents("{$basePath}/web/css/pdf.css");
  95. return true;
  96. }
  97. public static function crearPDF($nombreArchivo, $contenido, $configuracion, $descargar = true, $header = "", $footer = "", $marcaAgua = "") {
  98. $basePath = \Yii::getAlias("@app");
  99. $mpdf = new Mpdf($configuracion);
  100. //$mpdf->WriteHTML($hojaDeEstilo, \Mpdf\HTMLParserMode::HEADER_CSS);
  101. $mpdf->showWatermarkText = false;
  102. $mpdf->watermarkTextAlpha = 0.30;
  103. $mpdf->shrink_tables_to_fit = 0;
  104. $mpdf->keep_table_proportions = true;
  105. $mpdf->SetTitle($nombreArchivo);
  106. $mpdf->SetDisplayMode('default');
  107. $mpdf->SetHTMLHeader($header); //SetHTMLFooter($footer);
  108. if ($footer !== "") {
  109. $mpdf->SetHTMLFooter($footer); //SetHTMLFooter($footer);
  110. } else {
  111. $mpdf->SetFooter('Pag. {PAGENO} de {nbpg}');
  112. }
  113. if ($marcaAgua !== "") {
  114. $mpdf->SetWatermarkText($marcaAgua);
  115. $mpdf->showWatermarkText = true;
  116. }
  117. $mpdf->keep_table_proportions = TRUE;
  118. $stylesheet = file_get_contents("{$basePath}/web/css/pdf/pdf.css");
  119. $mpdf->WriteHTML($stylesheet, \Mpdf\HTMLParserMode::HEADER_CSS);
  120. $mpdf->showImageErrors = false;
  121. $mpdf->useSubstitutions = false;
  122. $mpdf->simpleTables = false;
  123. $mpdf->WriteHTML($contenido, \Mpdf\HTMLParserMode::HTML_BODY, ini_set("pcre.backtrack_limit", (strlen($contenido) * 5000)));
  124. if ($descargar == true) {
  125. return $mpdf->Output($nombreArchivo . ".pdf", \Mpdf\Output\Destination::STRING_RETURN);
  126. } else {
  127. $mpdf->Output($nombreArchivo . ".pdf", "I");
  128. \Yii::$app->end();
  129. }
  130. }
  131. public function exportarPdf($contenido) {
  132. try {
  133. // $config = array_merge($this->configuracion, ['format' => 'A4']);
  134. $mpdf = new Mpdf($this->configuracion);
  135. if (!empty($this->header)) {
  136. $mpdf->SetHTMLHeader($this->header);
  137. }
  138. $mpdf->WriteHTML($this->hojaDeEstilo, \Mpdf\HTMLParserMode::HEADER_CSS);
  139. $mpdf->SetWatermarkText($this->marcaDeAguaTexto);
  140. $mpdf->watermark_font = 'DejaVuSansCondensed';
  141. $mpdf->showWatermarkText = $this->marcaDeAgua;
  142. $mpdf->watermarkTextAlpha = 0.30;
  143. $mpdf->shrink_tables_to_fit = $this->encogerTablas;
  144. $mpdf->keep_table_proportions = $this->mantenerProporcionTabla;
  145. $mpdf->SetTitle($this->nombreArchivo);
  146. $mpdf->SetDisplayMode('default');
  147. $mpdf->SetFooter('Pag. {PAGENO} de {nbpg}');
  148. $mpdf->showImageErrors = false;
  149. $mpdf->useSubstitutions = false;
  150. $mpdf->simpleTables = false;
  151. $mpdf->WriteHTML($contenido, \Mpdf\HTMLParserMode::HTML_BODY);
  152. $dest = $this->descargar ? "D" : "I";
  153. if (strpos($this->nombreArchivo, '.pdf') === false) {
  154. $this->nombreArchivo .= ".pdf";
  155. }
  156. header('Access-Control-Allow-Origin: *');
  157. header('Access-Control-Expose-Headers: *');
  158. $mpdf->Output($this->nombreArchivo, $dest);
  159. } catch (\Exception $exception) {
  160. throw $exception;
  161. }
  162. \Yii::$app->end();
  163. }
  164. public function afterAction($action, $result) {
  165. if (!$this->html) {
  166. $result = str_replace('disabled="disabled"', '', $result);
  167. return $this->exportarPdf($result);
  168. }
  169. $this->marcaDeAgua = intval($this->req->get("wm", 1)) === 1;
  170. $watermark = "background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' " .
  171. "height='100px' width='100px'><text transform='translate(20, 100) rotate(-45)' fill='rgb(210,210,210)' " .
  172. "font-size='18'>{$this->marcaDeAguaTexto}</text></svg>\");";
  173. if (!$this->marcaDeAgua) {
  174. $watermark = "";
  175. }
  176. $fondo = ".fondo-privado { background-color: rgb(141,216,169,0.7) !important; }";
  177. $result = str_replace("<pagebreak>", "<br>", $result);
  178. $result = "<style type=\"text/css\">{$this->hojaDeEstilo}\nbody{{$watermark}}\n{$fondo}</style>{$result}";
  179. return $result;
  180. }
  181. /**
  182. * funcion para generar cualquier Excel
  183. */
  184. public static function Excel(
  185. $titulo = "Reporte",
  186. $pestania = "Reporte", $nombre = "Reporte", $etiquetas = [], $campos = [], $datos, $usarApuntador = true, $isArray = false, $respaldo = false) {
  187. // Create new Spreadsheet object
  188. $basePath = \Yii::getAlias("@app");
  189. $spreadsheet = new Spreadsheet();
  190. $spreadsheet->setActiveSheetIndex(0);
  191. $spreadsheet->getSecurity()->setLockWindows(false);
  192. $spreadsheet->getSecurity()->setLockStructure(false);
  193. $spreadsheet->getActiveSheet()->getProtection()->setSheet(false);
  194. $spreadsheet->getActiveSheet()->getProtection()->setSort(false);
  195. $spreadsheet->getActiveSheet()->getProtection()->setInsertRows(false);
  196. $spreadsheet->getActiveSheet()->getProtection()->setFormatCells(false);
  197. // Set document properties
  198. $spreadsheet->getProperties()->setCreator('ISTAI')->setLastModifiedBy('ISTAI')->setTitle($titulo)
  199. ->setDescription($titulo);
  200. $spreadsheet->getActiveSheet()->setTitle($pestania);
  201. $style_titulo = [
  202. 'font' => [
  203. 'bold' => true,
  204. 'size' => 13,
  205. ],
  206. 'alignment' => [
  207. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
  208. ]
  209. ];
  210. $style_titulo_etiquestas = [
  211. 'font' => [
  212. 'bold' => true,
  213. 'size' => 11,
  214. 'color' => ['rgb' => '000000'],
  215. 'background' => ['rgb' => '4c5966'],
  216. ],
  217. 'alignment' => [
  218. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER_CONTINUOUS,
  219. ],
  220. 'fill' => [
  221. 'type' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
  222. 'rotation' => 90,
  223. 'startcolor' => ['argb' => '000000',],
  224. 'endcolor' => ['argb' => '000000',],
  225. ],
  226. ];
  227. $spreadsheet->setActiveSheetIndex(0);
  228. $i = $respaldo ? 1 : 7;
  229. $ltrs = [];
  230. $ltr2 = 65;
  231. $ltr = 65;
  232. foreach ($etiquetas as $v) {
  233. if ($ltr > 90) {
  234. $letra = "A" . chr($ltr2);
  235. } else {
  236. $letra = chr($ltr);
  237. }
  238. $ltrs[] = $letra;
  239. $spreadsheet->getActiveSheet()->setCellValue($letra . $i, $v);
  240. if ($ltr > 90) {
  241. $ltr2++;
  242. }
  243. $ltr++;
  244. }
  245. // Add some data
  246. $i++; //Es el renglón inicial
  247. if ($usarApuntador) {
  248. /* @var $datos ActiveQuery */
  249. if (!$isArray) {
  250. foreach ($datos->each() as $v) {
  251. $l = 0;
  252. foreach ($campos as $k => $a) {
  253. $spreadsheet
  254. ->getActiveSheet()
  255. ->setCellValue($ltrs[$l] . $i, isset($v[$a]) ? $v[$a] : "")
  256. ->getColumnDimension($ltrs[$l])
  257. ->setAutoSize(true);
  258. $l++;
  259. }
  260. $i++;
  261. }
  262. } else {
  263. foreach ($datos as $v) {
  264. $l = 0;
  265. foreach ($campos as $k => $a) {
  266. $spreadsheet
  267. ->getActiveSheet()
  268. ->setCellValue($ltrs[$l] . $i, isset($v[$a]) ? $v[$a] : "")
  269. ->getColumnDimension($ltrs[$l])
  270. ->setAutoSize(true);
  271. $l++;
  272. }
  273. $i++;
  274. }
  275. }
  276. } else {
  277. foreach ($datos as $v) {
  278. $l = 0;
  279. foreach ($campos as $k => $a) {
  280. $spreadsheet
  281. ->getActiveSheet()
  282. ->setCellValue($ltrs[$l] . $i, isset($v[$a]) ? $v[$a] : "")
  283. ->getColumnDimension($ltrs[$l])
  284. ->setAutoSize(true);
  285. $l++;
  286. }
  287. $i++;
  288. }
  289. }
  290. // Rename worksheet
  291. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  292. $spreadsheet->setActiveSheetIndex(0);
  293. $ultima_letra = array_pop($ltrs);
  294. $style_titulo_etiquestas = [
  295. 'font' => [
  296. 'bold' => true,
  297. 'size' => 14,
  298. 'color' => ['rgb' => 'ffffff'],
  299. ],
  300. 'alignment' => [
  301. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER_CONTINUOUS,
  302. ],
  303. 'fill' => [
  304. 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
  305. 'startColor' => [
  306. 'argb' => '00736c',
  307. ],
  308. ],
  309. ];
  310. $spreadsheet->getActiveSheet()->getStyle("A7:" . $ultima_letra . "7")->applyFromArray($style_titulo_etiquestas);
  311. if (!$respaldo) {
  312. $spreadsheet->getActiveSheet()->mergeCells('A3:' . $ultima_letra . "3");
  313. $spreadsheet->getActiveSheet()->getStyle("A3:" . $ultima_letra . "3")->applyFromArray($style_titulo);
  314. $spreadsheet->getActiveSheet()->setCellValue('A3', $titulo);
  315. //$spreadsheet->getActiveSheet()->setCellValue('A2', '=HIPERVINCULO("http://www.google.com/","Google")');
  316. $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  317. $objDrawing->setName('Logo');
  318. $objDrawing->setDescription('Logo');
  319. $objDrawing->setPath($basePath . '/web/img/logo_istai_lg.png');
  320. $objDrawing->setWidth(200);
  321. $objDrawing->setCoordinates('A1');
  322. $objDrawing->setWorksheet($spreadsheet->getActiveSheet());
  323. /*$objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  324. $objDrawing->setName('Logo');
  325. $objDrawing->setDescription('Logo');
  326. $objDrawing->setPath($basePath . '/web/img/logo_istai_lg.png');
  327. $objDrawing->setWidth(150);
  328. $objDrawing->setCoordinates('M1');
  329. $objDrawing->setWorksheet($spreadsheet->getActiveSheet());
  330. $spreadsheet->getActiveSheet()->setCellValue('N3', " ");
  331. $spreadsheet->getActiveSheet()->setCellValue('O3', " ");*/
  332. //$spreadsheet->getActiveSheet()->getStyle("A7:" . $ultima_letra . "7")->applyFromArray($style_titulo_etiquestas);
  333. }
  334. // Redirect output to a client's web browser (Xlsx)
  335. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  336. header('Content-Disposition: attachment;filename="' . $nombre . '.xlsx"');
  337. header('Cache-Control: max-age=0');
  338. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  339. $writer->save('php://output');
  340. exit;
  341. }
  342. public function excelMir($datos = []) {
  343. // Create new Spreadsheet object
  344. $nombre = "excels.xlsx";
  345. $titulo = "Matriz de Indicadores para Resultados (2022)";
  346. $pestania = "pestania";
  347. $spreadsheet = new Spreadsheet();
  348. $spreadsheet->setActiveSheetIndex(0);
  349. $spreadsheet->getSecurity()->setLockWindows(false);
  350. $spreadsheet->getSecurity()->setLockStructure(false);
  351. $spreadsheet->getActiveSheet()->getProtection()->setSheet(false);
  352. $spreadsheet->getActiveSheet()->getProtection()->setSort(false);
  353. $spreadsheet->getActiveSheet()->getProtection()->setInsertRows(false);
  354. $spreadsheet->getActiveSheet()->getProtection()->setFormatCells(false);
  355. // Set document properties
  356. $spreadsheet->getProperties()->setCreator('pbr')->setLastModifiedBy('pbr')->setTitle($titulo)->setDescription($titulo);
  357. $spreadsheet->getActiveSheet()->setTitle($pestania);
  358. $style_titulo = [
  359. 'font' => [
  360. 'bold' => true,
  361. 'size' => 13,
  362. ],
  363. 'alignment' => [
  364. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
  365. ]
  366. ];
  367. $spreadsheet->setActiveSheetIndex(0);
  368. $spreadsheet->getActiveSheet()->setCellValue("A8", "Dependencia y/o Entidad:");
  369. $spreadsheet->getActiveSheet()->setCellValue("A9", "Programa Presupuestario:");//Eje De PED:
  370. $spreadsheet->getActiveSheet()->setCellValue("A10", "Eje De PED:");//:
  371. $spreadsheet->getActiveSheet()->setCellValue("A11", "Objetivo del PED:");
  372. $spreadsheet->getActiveSheet()->setCellValue("A12", "Beneficiarios:");
  373. // Rename worksheet
  374. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  375. $spreadsheet->setActiveSheetIndex(0);
  376. $spreadsheet->getActiveSheet()->mergeCells('F4:K4');
  377. $spreadsheet->getActiveSheet()->getStyle('F4:K4')->applyFromArray($style_titulo);
  378. $spreadsheet->getActiveSheet()->setCellValue('F4', $titulo);
  379. $losbenificiarios = "";
  380. if (count($datos["benificiarios"]) > 0) {
  381. foreach ($datos["benificiarios"] as $ben) {
  382. $losbenificiarios .= "{$ben->beneficiario->nombre}, ";
  383. }
  384. }
  385. $spreadsheet->setActiveSheetIndex(0);
  386. $spreadsheet->getActiveSheet()->setCellValue("C8", $datos["dependencia"]->nombre);
  387. $spreadsheet->getActiveSheet()->setCellValue("C9", $datos["programa"]->nombre);
  388. $spreadsheet->getActiveSheet()->setCellValue("C10", $datos["eje"]->nombre);
  389. $spreadsheet->getActiveSheet()->setCellValue("C11", $datos["mir"]->objetivo->nombre);
  390. $spreadsheet->getActiveSheet()->setCellValue("C12", $losbenificiarios);
  391. $spreadsheet->getActiveSheet()->setCellValue("A14", "");
  392. $spreadsheet->getActiveSheet()->setCellValue("B14", "Resumen Narrativo\n(Objetivos)");
  393. $spreadsheet->getActiveSheet()->mergeCells('B14:B15');
  394. $spreadsheet->getActiveSheet()->setCellValue("C14", "Indicadores");
  395. $spreadsheet->getActiveSheet()->mergeCells('C14:E14');
  396. $spreadsheet->getActiveSheet()->setCellValue("F14", "Programación");
  397. $spreadsheet->getActiveSheet()->mergeCells('F14:J14');
  398. $spreadsheet->getActiveSheet()->setCellValue("K14", "Meta % de Anua");
  399. $spreadsheet->getActiveSheet()->setCellValue("L14", "% de Avance");
  400. $spreadsheet->getActiveSheet()->setCellValue("M14", "Linea Base (año base)");
  401. $spreadsheet->getActiveSheet()->setCellValue("N14", "Sentido");
  402. $spreadsheet->getActiveSheet()->setCellValue("O14", "Frecuencia");
  403. $spreadsheet->getActiveSheet()->setCellValue("P14", "Medios de Verificación\n(Fuentes)");
  404. $spreadsheet->getActiveSheet()->setCellValue("Q14", "Supuestos");
  405. $spreadsheet->getActiveSheet()->mergeCells('K14:K15');
  406. $spreadsheet->getActiveSheet()->mergeCells('L14:L15');
  407. $spreadsheet->getActiveSheet()->mergeCells('M14:M15');
  408. $spreadsheet->getActiveSheet()->mergeCells('N14:N15');
  409. $spreadsheet->getActiveSheet()->mergeCells('O14:O15');
  410. $spreadsheet->getActiveSheet()->mergeCells('P14:P15');
  411. $spreadsheet->getActiveSheet()->mergeCells('Q14:Q15');
  412. $spreadsheet->getActiveSheet()->getStyle('A14:Q14')->applyFromArray($style_titulo);
  413. $spreadsheet->getActiveSheet()->getStyle('A15:Q15')->applyFromArray($style_titulo);
  414. $spreadsheet->getActiveSheet()->setCellValue("C15", "Nombre");
  415. $spreadsheet->getActiveSheet()->setCellValue("D15", "Unidad de\nMedida");
  416. $spreadsheet->getActiveSheet()->setCellValue("E15", "Fórmula");
  417. $spreadsheet->getActiveSheet()->setCellValue("F15", "I");
  418. $spreadsheet->getActiveSheet()->setCellValue("G15", "II");
  419. $spreadsheet->getActiveSheet()->setCellValue("H15", "III");
  420. $spreadsheet->getActiveSheet()->setCellValue("I15", "IV");
  421. $spreadsheet->getActiveSheet()->setCellValue("J15", "Avance\nAcumulado");
  422. $objDrawing = $this->cargarImagen($spreadsheet, '/web/img/logo-salud.png', 300, "A1");
  423. $objDrawing = $this->cargarImagen($spreadsheet, '/web/img/sa.png', 150, "Q5");
  424. $spreadsheet->getActiveSheet()->setCellValue('R3', " ");
  425. $i = 16;
  426. if ($datos["mir"] != null) {
  427. $nuevoNiveles = [];
  428. foreach ($datos["niveles"] as $nivel) {
  429. if (!isset($nuevoNiveles[$nivel->nivel])) {
  430. $nuevoNiveles[$nivel->nivel] = [];
  431. }
  432. $nuevoNiveles[$nivel->nivel][] = $nivel;
  433. }
  434. $ordenNivel = [
  435. "FIN",
  436. "PROPÓSITO",
  437. "COMPONENTE",
  438. "ACTIVIDAD"
  439. ];
  440. foreach ($ordenNivel as $k => $v) {
  441. $inicio = $i;
  442. $spreadsheet->getActiveSheet()->setCellValue("A" . $i, $v);
  443. $fin = 0;
  444. foreach ($nuevoNiveles[$v] as $nivel) {
  445. $spreadsheet->getActiveSheet()->setCellValue("B" . $i, $nivel->resumen);
  446. foreach ($nivel->matrizMIRIndicadores as $indicador) {
  447. $spreadsheet->getActiveSheet()->setCellValue("C" . $i, $indicador->nombre);
  448. $spreadsheet->getActiveSheet()->setCellValue("D" . $i, $indicador->unidadMedida->nombre);
  449. $spreadsheet->getActiveSheet()->setCellValue("E" . $i, $indicador->numerador);
  450. $spreadsheet->getActiveSheet()->setCellValue("E" . ($i + 1), $indicador->denominador);
  451. $spreadsheet->getActiveSheet()->setCellValue("F" . $i, $indicador->numeradorT1);
  452. $spreadsheet->getActiveSheet()->setCellValue("G" . $i, $indicador->numeradorT2);
  453. $spreadsheet->getActiveSheet()->setCellValue("H" . $i, $indicador->numeradorT3);
  454. $spreadsheet->getActiveSheet()->setCellValue("I" . $i, $indicador->numeradorT4);
  455. $spreadsheet->getActiveSheet()->setCellValue("F" . ($i + 1), $indicador->denominadorT1);
  456. $spreadsheet->getActiveSheet()->setCellValue("G" . ($i + 1), $indicador->denominadorT2);
  457. $spreadsheet->getActiveSheet()->setCellValue("H" . ($i + 1), $indicador->denominadorT3);
  458. $spreadsheet->getActiveSheet()->setCellValue("I" . ($i + 1), $indicador->denominadorT4);
  459. $spreadsheet->getActiveSheet()->setCellValue("J" . $i, $indicador->avanceAcumulado);
  460. $spreadsheet->getActiveSheet()->setCellValue("K" . $i, $indicador->metaAnual);
  461. $spreadsheet->getActiveSheet()->setCellValue("L" . $i, $indicador->porcentajeAvance);
  462. $spreadsheet->getActiveSheet()->setCellValue("M" . $i, $indicador->lineaBase);
  463. $spreadsheet->getActiveSheet()->setCellValue("N" . $i, $indicador->sentido->valor);
  464. $spreadsheet->getActiveSheet()->setCellValue("O" . $i, $indicador->frecuencia->nombre);
  465. $spreadsheet->getActiveSheet()->setCellValue("P" . $i, $indicador->metodoVerificacion);
  466. $spreadsheet->getActiveSheet()->setCellValue("Q" . $i, $indicador->supuestos);
  467. $spreadsheet->getActiveSheet()->setCellValue("R" . $i, " ");
  468. $i += 2;
  469. }
  470. //$spreadsheet->getActiveSheet()->mergeCells("B{$inicio}:B{$f}");
  471. }
  472. //$fin = $i+1;
  473. $spreadsheet->getActiveSheet()->mergeCells("A{$inicio}:A17");
  474. }
  475. }
  476. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  477. header('Content-Disposition: attachment;filename="' . $nombre . '"');
  478. header('Cache-Control: max-age=0');
  479. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  480. $writer->save('php://output');
  481. exit;
  482. }
  483. function cargarImagen($spreadsheet, $imagen = "/web/img/logo-salud.png", $width = 300, $ubicacion = "A1") {
  484. $basePath = \Yii::getAlias("@app");
  485. $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  486. $objDrawing->setName('Logo');
  487. $objDrawing->setDescription('Logo');
  488. $objDrawing->setPath($basePath . $imagen);
  489. $objDrawing->setWidth($width);
  490. $objDrawing->setCoordinates($ubicacion);
  491. $objDrawing->setWorksheet($spreadsheet->getActiveSheet());
  492. }
  493. }