Controller.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. <?php
  2. namespace pdf\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($titulo = "Reporte", $pestania = "Reporte", $nombre = "Reporte", $etiquetas = [], $campos = [], $datos, $usarApuntador = true, $isArray = false, $respaldo = false) {
  185. // Create new Spreadsheet object
  186. $basePath = \Yii::getAlias("@app");
  187. $spreadsheet = new Spreadsheet();
  188. $spreadsheet->setActiveSheetIndex(0);
  189. $spreadsheet->getSecurity()->setLockWindows(false);
  190. $spreadsheet->getSecurity()->setLockStructure(false);
  191. $spreadsheet->getActiveSheet()->getProtection()->setSheet(false);
  192. $spreadsheet->getActiveSheet()->getProtection()->setSort(false);
  193. $spreadsheet->getActiveSheet()->getProtection()->setInsertRows(false);
  194. $spreadsheet->getActiveSheet()->getProtection()->setFormatCells(false);
  195. // Set document properties
  196. $spreadsheet->getProperties()->setCreator('pbr')->setLastModifiedBy('pbr')->setTitle($titulo)
  197. ->setDescription($titulo);
  198. $spreadsheet->getActiveSheet()->setTitle($pestania);
  199. $style_titulo = [
  200. 'font' => [
  201. 'bold' => true,
  202. 'size' => 13,
  203. ],
  204. 'alignment' => [
  205. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
  206. ]
  207. ];
  208. $style_titulo_etiquestas = [
  209. 'font' => [
  210. 'bold' => true,
  211. 'size' => 11,
  212. 'color' => ['rgb' => '000000'],
  213. 'background' => ['rgb' => '4c5966'],
  214. ],
  215. 'alignment' => [
  216. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER_CONTINUOUS,
  217. ],
  218. 'fill' => [
  219. 'type' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
  220. 'rotation' => 90,
  221. 'startcolor' => ['argb' => '000000',],
  222. 'endcolor' => ['argb' => '000000',],
  223. ],
  224. ];
  225. $spreadsheet->setActiveSheetIndex(0);
  226. $i = $respaldo ? 1 : 7;
  227. $ltrs = [];
  228. $ltr2 = 65;
  229. $ltr = 65;
  230. foreach ($etiquetas as $v) {
  231. if ($ltr > 90) {
  232. $letra = "A" . chr($ltr2);
  233. } else {
  234. $letra = chr($ltr);
  235. }
  236. $ltrs[] = $letra;
  237. $spreadsheet->getActiveSheet()->setCellValue($letra . $i, $v);
  238. if ($ltr > 90) {
  239. $ltr2++;
  240. }
  241. $ltr++;
  242. }
  243. // Add some data
  244. $i++; //Es el renglón inicial
  245. if ($usarApuntador) {
  246. /* @var $datos ActiveQuery */
  247. if (!$isArray) {
  248. foreach ($datos->each() as $v) {
  249. $l = 0;
  250. foreach ($campos as $k => $a) {
  251. $spreadsheet
  252. ->getActiveSheet()
  253. ->setCellValue($ltrs[$l] . $i, isset($v[$a]) ? $v[$a] : "")
  254. ->getColumnDimension($ltrs[$l])
  255. ->setAutoSize(true);
  256. $l++;
  257. }
  258. $i++;
  259. }
  260. } else {
  261. foreach ($datos as $v) {
  262. $l = 0;
  263. foreach ($campos as $k => $a) {
  264. $spreadsheet
  265. ->getActiveSheet()
  266. ->setCellValue($ltrs[$l] . $i, isset($v[$a]) ? $v[$a] : "")
  267. ->getColumnDimension($ltrs[$l])
  268. ->setAutoSize(true);
  269. $l++;
  270. }
  271. $i++;
  272. }
  273. }
  274. } else {
  275. foreach ($datos as $v) {
  276. $l = 0;
  277. foreach ($campos as $k => $a) {
  278. $spreadsheet
  279. ->getActiveSheet()
  280. ->setCellValue($ltrs[$l] . $i, isset($v[$a]) ? $v[$a] : "")
  281. ->getColumnDimension($ltrs[$l])
  282. ->setAutoSize(true);
  283. $l++;
  284. }
  285. $i++;
  286. }
  287. }
  288. // Rename worksheet
  289. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  290. $spreadsheet->setActiveSheetIndex(0);
  291. $ultima_letra = array_pop($ltrs);
  292. if (!$respaldo) {
  293. $spreadsheet->getActiveSheet()->mergeCells('A3:' . $ultima_letra . "3");
  294. $spreadsheet->getActiveSheet()->getStyle("A3:" . $ultima_letra . "3")->applyFromArray($style_titulo);
  295. $spreadsheet->getActiveSheet()->setCellValue('A3', $titulo);
  296. //$spreadsheet->getActiveSheet()->setCellValue('A2', '=HIPERVINCULO("http://www.google.com/","Google")');
  297. $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  298. $objDrawing->setName('Logo');
  299. $objDrawing->setDescription('Logo');
  300. $objDrawing->setPath($basePath . '/web/img/logo-salud.png');
  301. $objDrawing->setWidth(300);
  302. $objDrawing->setCoordinates('A1');
  303. $objDrawing->setWorksheet($spreadsheet->getActiveSheet());
  304. $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  305. $objDrawing->setName('Logo');
  306. $objDrawing->setDescription('Logo');
  307. $objDrawing->setPath($basePath . '/web/img/sa.png');
  308. $objDrawing->setWidth(150);
  309. $objDrawing->setCoordinates('M1');
  310. $objDrawing->setWorksheet($spreadsheet->getActiveSheet());
  311. $spreadsheet->getActiveSheet()->setCellValue('N3', " ");
  312. $spreadsheet->getActiveSheet()->setCellValue('O3', " ");
  313. //$spreadsheet->getActiveSheet()->getStyle("A7:" . $ultima_letra . "7")->applyFromArray($style_titulo_etiquestas);
  314. }
  315. // Redirect output to a client's web browser (Xlsx)
  316. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  317. header('Content-Disposition: attachment;filename="' . $nombre . '"');
  318. header('Cache-Control: max-age=0');
  319. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  320. $writer->save('php://output');
  321. exit;
  322. }
  323. public function excelMir($datos = []) {
  324. // Create new Spreadsheet object
  325. $nombre = "excels.xlsx";
  326. $titulo = "Matriz de Indicadores para Resultados (2022)";
  327. $pestania = "pestania";
  328. $spreadsheet = new Spreadsheet();
  329. $spreadsheet->setActiveSheetIndex(0);
  330. $spreadsheet->getSecurity()->setLockWindows(false);
  331. $spreadsheet->getSecurity()->setLockStructure(false);
  332. $spreadsheet->getActiveSheet()->getProtection()->setSheet(false);
  333. $spreadsheet->getActiveSheet()->getProtection()->setSort(false);
  334. $spreadsheet->getActiveSheet()->getProtection()->setInsertRows(false);
  335. $spreadsheet->getActiveSheet()->getProtection()->setFormatCells(false);
  336. // Set document properties
  337. $spreadsheet->getProperties()->setCreator('pbr')->setLastModifiedBy('pbr')->setTitle($titulo)->setDescription($titulo);
  338. $spreadsheet->getActiveSheet()->setTitle($pestania);
  339. $style_titulo = [
  340. 'font' => [
  341. 'bold' => true,
  342. 'size' => 13,
  343. ],
  344. 'alignment' => [
  345. 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
  346. ]
  347. ];
  348. $spreadsheet->setActiveSheetIndex(0);
  349. $spreadsheet->getActiveSheet()->setCellValue("A8", "Dependencia y/o Entidad:");
  350. $spreadsheet->getActiveSheet()->setCellValue("A9", "Programa Presupuestario:");//Eje De PED:
  351. $spreadsheet->getActiveSheet()->setCellValue("A10", "Eje De PED:");//:
  352. $spreadsheet->getActiveSheet()->setCellValue("A11", "Objetivo del PED:");
  353. $spreadsheet->getActiveSheet()->setCellValue("A12", "Beneficiarios:");
  354. // Rename worksheet
  355. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  356. $spreadsheet->setActiveSheetIndex(0);
  357. $spreadsheet->getActiveSheet()->mergeCells('F4:K4');
  358. $spreadsheet->getActiveSheet()->getStyle('F4:K4')->applyFromArray($style_titulo);
  359. $spreadsheet->getActiveSheet()->setCellValue('F4', $titulo);
  360. $losbenificiarios = "";
  361. if (count($datos["benificiarios"]) > 0) {
  362. foreach ($datos["benificiarios"] as $ben) {
  363. $losbenificiarios .= "{$ben->beneficiario->nombre}, ";
  364. }
  365. }
  366. $spreadsheet->setActiveSheetIndex(0);
  367. $spreadsheet->getActiveSheet()->setCellValue("C8", $datos["dependencia"]->nombre);
  368. $spreadsheet->getActiveSheet()->setCellValue("C9", $datos["programa"]->nombre);
  369. $spreadsheet->getActiveSheet()->setCellValue("C10", $datos["eje"]->nombre);
  370. $spreadsheet->getActiveSheet()->setCellValue("C11", $datos["mir"]->objetivo->nombre);
  371. $spreadsheet->getActiveSheet()->setCellValue("C12", $losbenificiarios);
  372. $spreadsheet->getActiveSheet()->setCellValue("A14", "");
  373. $spreadsheet->getActiveSheet()->setCellValue("B14", "Resumen Narrativo\n(Objetivos)");
  374. $spreadsheet->getActiveSheet()->mergeCells('B14:B15');
  375. $spreadsheet->getActiveSheet()->setCellValue("C14", "Indicadores");
  376. $spreadsheet->getActiveSheet()->mergeCells('C14:E14');
  377. $spreadsheet->getActiveSheet()->setCellValue("F14", "Programación");
  378. $spreadsheet->getActiveSheet()->mergeCells('F14:J14');
  379. $spreadsheet->getActiveSheet()->setCellValue("K14", "Meta % de Anua");
  380. $spreadsheet->getActiveSheet()->setCellValue("L14", "% de Avance");
  381. $spreadsheet->getActiveSheet()->setCellValue("M14", "Linea Base (año base)");
  382. $spreadsheet->getActiveSheet()->setCellValue("N14", "Sentido");
  383. $spreadsheet->getActiveSheet()->setCellValue("O14", "Frecuencia");
  384. $spreadsheet->getActiveSheet()->setCellValue("P14", "Medios de Verificación\n(Fuentes)");
  385. $spreadsheet->getActiveSheet()->setCellValue("Q14", "Supuestos");
  386. $spreadsheet->getActiveSheet()->mergeCells('K14:K15');
  387. $spreadsheet->getActiveSheet()->mergeCells('L14:L15');
  388. $spreadsheet->getActiveSheet()->mergeCells('M14:M15');
  389. $spreadsheet->getActiveSheet()->mergeCells('N14:N15');
  390. $spreadsheet->getActiveSheet()->mergeCells('O14:O15');
  391. $spreadsheet->getActiveSheet()->mergeCells('P14:P15');
  392. $spreadsheet->getActiveSheet()->mergeCells('Q14:Q15');
  393. $spreadsheet->getActiveSheet()->getStyle('A14:Q14')->applyFromArray($style_titulo);
  394. $spreadsheet->getActiveSheet()->getStyle('A15:Q15')->applyFromArray($style_titulo);
  395. $spreadsheet->getActiveSheet()->setCellValue("C15", "Nombre");
  396. $spreadsheet->getActiveSheet()->setCellValue("D15", "Unidad de\nMedida");
  397. $spreadsheet->getActiveSheet()->setCellValue("E15", "Fórmula");
  398. $spreadsheet->getActiveSheet()->setCellValue("F15", "I");
  399. $spreadsheet->getActiveSheet()->setCellValue("G15", "II");
  400. $spreadsheet->getActiveSheet()->setCellValue("H15", "III");
  401. $spreadsheet->getActiveSheet()->setCellValue("I15", "IV");
  402. $spreadsheet->getActiveSheet()->setCellValue("J15", "Avance\nAcumulado");
  403. $objDrawing = $this->cargarImagen($spreadsheet, '/web/img/logo-salud.png', 300, "A1");
  404. $objDrawing = $this->cargarImagen($spreadsheet, '/web/img/sa.png', 150, "Q5");
  405. $spreadsheet->getActiveSheet()->setCellValue('R3', " ");
  406. $i = 16;
  407. if ($datos["mir"] != null) {
  408. $nuevoNiveles = [];
  409. foreach ($datos["niveles"] as $nivel) {
  410. if (!isset($nuevoNiveles[$nivel->nivel])) {
  411. $nuevoNiveles[$nivel->nivel] = [];
  412. }
  413. $nuevoNiveles[$nivel->nivel][] = $nivel;
  414. }
  415. $ordenNivel = [
  416. "FIN",
  417. "PROPÓSITO",
  418. "COMPONENTE",
  419. "ACTIVIDAD"
  420. ];
  421. foreach ($ordenNivel as $k => $v) {
  422. $inicio = $i;
  423. $spreadsheet->getActiveSheet()->setCellValue("A" . $i, $v);
  424. $fin = 0;
  425. foreach ($nuevoNiveles[$v] as $nivel) {
  426. $spreadsheet->getActiveSheet()->setCellValue("B" . $i, $nivel->resumen);
  427. foreach ($nivel->matrizMIRIndicadores as $indicador) {
  428. $spreadsheet->getActiveSheet()->setCellValue("C" . $i, $indicador->nombre);
  429. $spreadsheet->getActiveSheet()->setCellValue("D" . $i, $indicador->unidadMedida->nombre);
  430. $spreadsheet->getActiveSheet()->setCellValue("E" . $i, $indicador->numerador);
  431. $spreadsheet->getActiveSheet()->setCellValue("E" . ($i + 1), $indicador->denominador);
  432. $spreadsheet->getActiveSheet()->setCellValue("F" . $i, $indicador->numeradorT1);
  433. $spreadsheet->getActiveSheet()->setCellValue("G" . $i, $indicador->numeradorT2);
  434. $spreadsheet->getActiveSheet()->setCellValue("H" . $i, $indicador->numeradorT3);
  435. $spreadsheet->getActiveSheet()->setCellValue("I" . $i, $indicador->numeradorT4);
  436. $spreadsheet->getActiveSheet()->setCellValue("F" . ($i + 1), $indicador->denominadorT1);
  437. $spreadsheet->getActiveSheet()->setCellValue("G" . ($i + 1), $indicador->denominadorT2);
  438. $spreadsheet->getActiveSheet()->setCellValue("H" . ($i + 1), $indicador->denominadorT3);
  439. $spreadsheet->getActiveSheet()->setCellValue("I" . ($i + 1), $indicador->denominadorT4);
  440. $spreadsheet->getActiveSheet()->setCellValue("J" . $i, $indicador->avanceAcumulado);
  441. $spreadsheet->getActiveSheet()->setCellValue("K" . $i, $indicador->metaAnual);
  442. $spreadsheet->getActiveSheet()->setCellValue("L" . $i, $indicador->porcentajeAvance);
  443. $spreadsheet->getActiveSheet()->setCellValue("M" . $i, $indicador->lineaBase);
  444. $spreadsheet->getActiveSheet()->setCellValue("N" . $i, $indicador->sentido->valor);
  445. $spreadsheet->getActiveSheet()->setCellValue("O" . $i, $indicador->frecuencia->nombre);
  446. $spreadsheet->getActiveSheet()->setCellValue("P" . $i, $indicador->metodoVerificacion);
  447. $spreadsheet->getActiveSheet()->setCellValue("Q" . $i, $indicador->supuestos);
  448. $spreadsheet->getActiveSheet()->setCellValue("R" . $i, " ");
  449. $i += 2;
  450. }
  451. //$spreadsheet->getActiveSheet()->mergeCells("B{$inicio}:B{$f}");
  452. }
  453. //$fin = $i+1;
  454. $spreadsheet->getActiveSheet()->mergeCells("A{$inicio}:A17");
  455. }
  456. }
  457. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  458. header('Content-Disposition: attachment;filename="' . $nombre . '"');
  459. header('Cache-Control: max-age=0');
  460. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  461. $writer->save('php://output');
  462. exit;
  463. }
  464. function cargarImagen($spreadsheet, $imagen = "/web/img/logo-salud.png", $width = 300, $ubicacion = "A1") {
  465. $basePath = \Yii::getAlias("@app");
  466. $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  467. $objDrawing->setName('Logo');
  468. $objDrawing->setDescription('Logo');
  469. $objDrawing->setPath($basePath . $imagen);
  470. $objDrawing->setWidth($width);
  471. $objDrawing->setCoordinates($ubicacion);
  472. $objDrawing->setWorksheet($spreadsheet->getActiveSheet());
  473. }
  474. }