ObraController.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. <?php
  2. namespace app\modules\excel\controllers;
  3. use v1\models\ObraEmpleado;
  4. use v1\models\Usuario;
  5. use DateTime;
  6. use DateTimeZone;
  7. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  8. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  9. use PhpOffice\PhpSpreadsheet\Style\Fill;
  10. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  11. use v1\models\Obra;
  12. use v1\models\ObraHerramienta;
  13. use Yii;
  14. use excel\web\Controller;
  15. use v1\models\Gasto;
  16. use v1\models\Nomina;
  17. use v1\models\ObraRubro;
  18. use v1\models\Pago;
  19. use yii\web\Response;
  20. class ObraController extends Controller
  21. {
  22. public static $estiloCeldaIzquierda12 = [
  23. 'font' => [
  24. 'bold' => true,
  25. 'size' => 12,
  26. 'color' => ['argb' => 'FF000000'],
  27. ],
  28. 'alignment' => [
  29. 'horizontal' => Alignment::HORIZONTAL_LEFT,
  30. 'vertical' => Alignment::VERTICAL_CENTER,
  31. ],
  32. ];
  33. public static $celdaVertical = [
  34. 'font' => [
  35. 'bold' => true,
  36. 'size' => 14,
  37. 'color' => ['argb' => 'FFFFFFFF'],
  38. ],
  39. 'alignment' => [
  40. // 'textRotation' => 90,
  41. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  42. 'vertical' => Alignment::VERTICAL_CENTER
  43. ],
  44. 'fill' => [
  45. 'fillType' => Fill::FILL_SOLID,
  46. 'startColor' => ['argb' => "FF625FF5"]
  47. ],
  48. ];
  49. public static $celdaHorizontal = [
  50. 'font' => [
  51. 'bold' => true,
  52. 'size' => 14,
  53. 'color' => ['argb' => 'FF000000'],
  54. ],
  55. 'alignment' => [
  56. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  57. 'vertical' => Alignment::VERTICAL_CENTER
  58. ],
  59. 'fill' => [
  60. 'fillType' => Fill::FILL_SOLID,
  61. 'startColor' => ['argb' => "FFE7E7E7"]
  62. ],
  63. ];
  64. public static $celdaFuente12 = [
  65. 'font' => [
  66. 'bold' => true,
  67. 'size' => 10,
  68. 'color' => ['argb' => 'FF000000'],
  69. ],
  70. 'alignment' => [
  71. 'horizontal' => Alignment::HORIZONTAL_LEFT,
  72. 'vertical' => Alignment::VERTICAL_CENTER
  73. ],
  74. ];
  75. public static $celdaVerticalF12 = [
  76. 'font' => [
  77. 'bold' => true,
  78. 'size' => 10,
  79. 'color' => ['argb' => 'FF000000'],
  80. ],
  81. 'alignment' => [
  82. 'textRotation' => 90,
  83. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  84. 'vertical' => Alignment::VERTICAL_CENTER
  85. ],
  86. 'fill' => [
  87. 'fillType' => Fill::FILL_SOLID,
  88. 'startColor' => ['argb' => "FFE7E7E7"]
  89. ],
  90. ];
  91. public function encabezadoHoja($logo)
  92. {
  93. $celdas = [
  94. "A1" => [
  95. "valor" => $logo,
  96. "combinar" => "G4",
  97. ],
  98. ];
  99. foreach ($celdas as $coordenada => $valor) {
  100. $this->agregarCelda($coordenada, $valor);
  101. }
  102. $this->renglonActual = 6;
  103. return $this;
  104. }
  105. public function actionExcelObra($idObra)
  106. {
  107. $json = intval($this->req->get("json", ""));
  108. $obra = Obra::findOne($idObra);
  109. $request = Yii::$app->request;
  110. if ($json) {
  111. \Yii::$app->getResponse()->format = Response::FORMAT_JSON;
  112. return $json;
  113. }
  114. $BASEPATH = \Yii::getAlias('@app') . "/web";
  115. $logo = $BASEPATH . '/img/logos/edesarrollos-unicolor-azul.png';
  116. $fechaInicio = (new DateTime($obra->fechaInicio))->format('d-m-Y');
  117. $fechaFin = (new DateTime($obra->fechaFinal))->format('d-m-Y');
  118. $this->encabezadoHoja($this->logo($logo, 'A1'));
  119. $estiloEncabezado = array_merge(self::$celdaVertical, self::$bordes);
  120. $encabezadoTabla = [
  121. "A6" => [
  122. "valor" => "Obra: $obra->nombre",
  123. "combinar" => "D6",
  124. "estilo" => $estiloEncabezado
  125. ],
  126. "A7" => [
  127. "valor" => "Fecha Inicial: $fechaInicio ",
  128. "combinar" => "B7",
  129. "estilo" => $estiloEncabezado
  130. ],
  131. "C7" => [
  132. "valor" => "Fecha Final: $fechaFin",
  133. "combinar" => "D7",
  134. "estilo" => $estiloEncabezado
  135. ]
  136. ];
  137. $this->agregarRenglones($encabezadoTabla);
  138. $empleados = ObraEmpleado::find()
  139. ->joinWith('empleado')
  140. ->andWhere(['{{ObraEmpleado}}.[[eliminado]]' => null])->andWhere(['{{ObraEmpleado}}.[[idObra]]' => $idObra]);
  141. $empleados->orderBy(['creado' => SORT_DESC]);
  142. $encabezadoTabla = [
  143. "A9" => [
  144. "valor" => "Empleados",
  145. "estilo" => $estiloEncabezado,
  146. "combinar" => "B9",
  147. ],
  148. "A10" => [
  149. "valor" => "Nombre",
  150. "estilo" => $estiloEncabezado,
  151. ],
  152. "B10" => [
  153. "valor" => "Fecha Alta",
  154. "estilo" => $estiloEncabezado,
  155. ],
  156. "C9" => [
  157. "valor" => "Empleados",
  158. "estilo" => $estiloEncabezado,
  159. "combinar" => "D9",
  160. ],
  161. "C10" => [
  162. "valor" => "Nombre",
  163. "estilo" => $estiloEncabezado,
  164. ],
  165. "D10" => [
  166. "valor" => "Fecha Alta",
  167. "estilo" => $estiloEncabezado,
  168. ],
  169. ];
  170. $rEmpleado = 11;
  171. $this->agregarRenglones($encabezadoTabla);
  172. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  173. $estiloCondicional = $this->estiloCondicional();
  174. foreach ($empleados->each() as $obraEmpleado) {
  175. $empleado = $obraEmpleado->empleado;
  176. $fecha = (new DateTime($empleado->fechaAlta))->format('d-m-Y');
  177. $renglones = [
  178. "A{$rEmpleado}" => [
  179. "valor" => $empleado->nombre,
  180. "estilo" => $estiloCeldaIzquierda,
  181. ],
  182. "B{$rEmpleado}" => [
  183. "valor" => $fecha,
  184. "estilo" => $estiloCeldaIzquierda,
  185. ],
  186. ];
  187. $this->agregarRenglones($renglones);
  188. $rEmpleado += 1;
  189. }
  190. $herramienta = ObraHerramienta::find()
  191. ->joinWith('herramienta')
  192. ->andWhere(['{{ObraHerramienta}}.[[eliminado]]' => null])->andWhere(['{{ObraHerramienta}}.[[idObra]]' => $idObra]);
  193. $herramienta->orderBy(['creado' => SORT_DESC]);
  194. $rHerramienta = 11;
  195. foreach ($herramienta->each() as $obraHerramienta) {
  196. $herramienta = $obraHerramienta->herramienta;
  197. $renglones = [
  198. "C{$rHerramienta}" => [
  199. "valor" => $herramienta->nombre,
  200. "estilo" => $estiloCeldaIzquierda,
  201. ],
  202. "D{$rHerramienta}" => [
  203. "valor" => $obraHerramienta->cantidad,
  204. "estilo" => $estiloCeldaIzquierda,
  205. "formato" => "$#,##0.00",
  206. "estiloCondicional" => $estiloCondicional
  207. ],
  208. ];
  209. $this->agregarRenglones($renglones);
  210. $rHerramienta += 1;
  211. }
  212. $totalesController = new \v1\controllers\ObraController('totales', Yii::$app);
  213. $totalGasto = $totalesController->actionTotalGasto($idObra);
  214. $totalPago = $totalesController->actionTotalPago($idObra);
  215. $totalNomina = $totalesController->actionTotalNomina($idObra);
  216. $totalRubro = $totalesController->actionTotalRubro($idObra);
  217. $saldo = $totalesController->actionSaldo($totalGasto, $totalNomina, $totalPago);
  218. $ejercidoObra = $totalesController->actionEjercidoObra($totalGasto, $totalRubro);
  219. $ejercer = $totalesController->actionEjercer($totalRubro, $totalPago);
  220. $startRowTotales = max($rEmpleado, $rHerramienta) + 2;
  221. $encabezadoTablaTotales = [
  222. "A{$startRowTotales}" => [
  223. "valor" => "Gasto Total",
  224. "estilo" => $estiloEncabezado,
  225. ],
  226. "B{$startRowTotales}" => [
  227. "valor" => "Pago Total",
  228. "estilo" => $estiloEncabezado,
  229. ],
  230. "C{$startRowTotales}" => [
  231. "valor" => "Nómina total",
  232. "estilo" => $estiloEncabezado,
  233. ],
  234. "D{$startRowTotales}" => [
  235. "valor" => "Rubro de Obra",
  236. "estilo" => $estiloEncabezado,
  237. ],
  238. "E{$startRowTotales}" => [
  239. "valor" => "Saldo total",
  240. "estilo" => $estiloEncabezado,
  241. ],
  242. "F{$startRowTotales}" => [
  243. "valor" => "Ejercido obra",
  244. "estilo" => $estiloEncabezado,
  245. ],
  246. "G{$startRowTotales}" => [
  247. "valor" => "Por ejercer",
  248. "estilo" => $estiloEncabezado,
  249. ],
  250. ];
  251. $this->agregarRenglones($encabezadoTablaTotales);
  252. $datos = $startRowTotales + 1;
  253. $renglones = [
  254. "A{$datos}" => [
  255. "valor" => $totalGasto,
  256. "estilo" => $estiloCeldaIzquierda,
  257. "formato" => "$#,##0.00",
  258. "estiloCondicional" => $estiloCondicional
  259. ],
  260. "B{$datos}" => [
  261. "valor" => $totalPago,
  262. "estilo" => $estiloCeldaIzquierda,
  263. "formato" => "$#,##0.00",
  264. "estiloCondicional" => $estiloCondicional,
  265. ],
  266. "C{$datos}" => [
  267. "valor" => $totalNomina,
  268. "estilo" => $estiloCeldaIzquierda,
  269. "formato" => "$#,##0.00",
  270. "estiloCondicional" => $estiloCondicional,
  271. ],
  272. "D{$datos}" => [
  273. "valor" => $totalRubro,
  274. "estilo" => $estiloCeldaIzquierda,
  275. "formato" => "$#,##0.00",
  276. "estiloCondicional" => $estiloCondicional,
  277. ],
  278. "E{$datos}" => [
  279. "valor" => $saldo,
  280. "estilo" => $estiloCeldaIzquierda,
  281. "formato" => "$#,##0.00",
  282. "estiloCondicional" => $estiloCondicional,
  283. ],
  284. "F{$datos}" => [
  285. "valor" => $ejercidoObra,
  286. "estilo" => $estiloCeldaIzquierda,
  287. "formato" => "#,##0.00%",
  288. "estiloCondicional" => $estiloCondicional,
  289. ],
  290. "G{$datos}" => [
  291. "valor" => $ejercer,
  292. "estilo" => $estiloCeldaIzquierda,
  293. "formato" => "$#,##0.00",
  294. "estiloCondicional" => $estiloCondicional,
  295. ],
  296. ];
  297. $this->agregarRenglones($renglones);
  298. $anchoColumnas = [
  299. "A" => ["ancho" => 20],
  300. "B" => ["ancho" => 20],
  301. "C" => ["ancho" => 20],
  302. "D" => ["ancho" => 20],
  303. "E" => ["ancho" => 20],
  304. "F" => ["ancho" => 20],
  305. "G" => ["ancho" => 20],
  306. ];
  307. $this->anchoColumnas($anchoColumnas);
  308. //Gastos
  309. $this->nuevaHoja(1, 'Gasto');
  310. $gasto = Gasto::find()
  311. ->joinWith('conceptosObra')
  312. ->andWhere(['{{Gasto}}.[[eliminado]]' => null])->andWhere(['{{Gasto}}.[[idObra]]' => $idObra]);
  313. $gasto->orderBy(['fechaCompra' => SORT_DESC]);
  314. $this->encabezadoHoja($this->logo($logo, 'A1'));
  315. $encabezadoTabla = [
  316. "A5" => [
  317. "valor" => "Gastos relacionado a la obra: $obra->nombre",
  318. "combinar" => "D6",
  319. "estilo" => $estiloEncabezado
  320. ],
  321. "A7" => [
  322. "valor" => "Concepto Obra",
  323. "estilo" => $estiloEncabezado
  324. ],
  325. "B7" => [
  326. "valor" => "Cantidad ",
  327. "estilo" => $estiloEncabezado
  328. ],
  329. "C7" => [
  330. "valor" => "Fecha Compra",
  331. "estilo" => $estiloEncabezado
  332. ],
  333. "D7" => [
  334. "valor" => "Descripción",
  335. "estilo" => $estiloEncabezado
  336. ]
  337. ];
  338. $r=8;
  339. $this->agregarRenglones($encabezadoTabla);
  340. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  341. $estiloCondicional = $this->estiloCondicional();
  342. foreach ($gasto->each() as $obraGasto) {
  343. $fecha = (new DateTime($obraGasto->fechaCompra))->format('d-m-Y');
  344. $gasto = $obraGasto->conceptosObra;
  345. $renglones = [
  346. "A{$r}" => [
  347. "valor" => $gasto->concepto,
  348. "estilo" => $estiloCeldaIzquierda
  349. ],
  350. "B{$r}" => [
  351. "valor" => $obraGasto->cantidad,
  352. "estilo" => $estiloCeldaIzquierda,
  353. "formato" => "$#,##0.00",
  354. "estiloCondicional" => $estiloCondicional
  355. ],
  356. "C{$r}" => [
  357. "valor" => $fecha,
  358. "estilo" => $estiloCeldaIzquierda
  359. ],
  360. "D{$r}" => [
  361. "valor" => $obraGasto->descripcion,
  362. "estilo" => $estiloCeldaIzquierda
  363. ]
  364. ];
  365. $this->agregarRenglones($renglones);
  366. $r += 1;
  367. }
  368. $anchoColumnas = [
  369. "A" => ["ancho" => 20],
  370. "B" => ["ancho" => 20],
  371. "C" => ["ancho" => 20],
  372. "D" => ["ancho" => 20],
  373. ];
  374. $this->anchoColumnas($anchoColumnas);
  375. //Pagos
  376. $this->nuevaHoja(2, 'Pago');
  377. $pago = Pago::find()
  378. ->joinWith('conceptosObra')
  379. ->andWhere(['{{Pago}}.[[eliminado]]' => null])->andWhere(['{{Pago}}.[[idObra]]' => $idObra]);
  380. $pago->orderBy(['fechaPago' => SORT_DESC]);
  381. $this->encabezadoHoja($this->logo($logo, 'A1'));
  382. $encabezadoTabla = [
  383. "A5" => [
  384. "valor" => "Pagos relacionado a la obra: $obra->nombre",
  385. "combinar" => "D6",
  386. "estilo" => $estiloEncabezado
  387. ],
  388. "A7" => [
  389. "valor" => "Concepto Obra",
  390. "estilo" => $estiloEncabezado
  391. ],
  392. "B7" => [
  393. "valor" => "Cantidad ",
  394. "estilo" => $estiloEncabezado
  395. ],
  396. "C7" => [
  397. "valor" => "Fecha Pago",
  398. "estilo" => $estiloEncabezado
  399. ],
  400. "D7" => [
  401. "valor" => "Descripción",
  402. "estilo" => $estiloEncabezado
  403. ]
  404. ];
  405. $r=8;
  406. $this->agregarRenglones($encabezadoTabla);
  407. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  408. $estiloCondicional = $this->estiloCondicional();
  409. foreach ($pago->each() as $obraPago) {
  410. $fecha = (new DateTime($obraPago->fechaPago))->format('d-m-Y');
  411. $Pago = $obraPago->conceptosObra;
  412. $renglones = [
  413. "A{$r}" => [
  414. "valor" => $Pago->concepto,
  415. "estilo" => $estiloCeldaIzquierda
  416. ],
  417. "B{$r}" => [
  418. "valor" => $obraPago->cantidad,
  419. "estilo" => $estiloCeldaIzquierda,
  420. "formato" => "$#,##0.00",
  421. "estiloCondicional" => $estiloCondicional
  422. ],
  423. "C{$r}" => [
  424. "valor" => $fecha,
  425. "estilo" => $estiloCeldaIzquierda
  426. ],
  427. "D{$r}" => [
  428. "valor" => $obraPago->descripcion,
  429. "estilo" => $estiloCeldaIzquierda
  430. ]
  431. ];
  432. $this->agregarRenglones($renglones);
  433. $r += 1;
  434. }
  435. $anchoColumnas = [
  436. "A" => ["ancho" => 20],
  437. "B" => ["ancho" => 20],
  438. "C" => ["ancho" => 20],
  439. "D" => ["ancho" => 20],
  440. ];
  441. $this->anchoColumnas($anchoColumnas);
  442. $this->nuevaHoja(3, 'Nomina');
  443. $nomina = Nomina::find()
  444. ->joinWith('empleado')
  445. ->andWhere(['{{Nomina}}.[[eliminado]]' => null])->andWhere(['{{Nomina}}.[[idObra]]' => $idObra]);
  446. $nomina->orderBy(['fechaInicio' => SORT_DESC]);
  447. $this->encabezadoHoja($this->logo($logo, 'A1'));
  448. $encabezadoTabla = [
  449. "A5" => [
  450. "valor" => "Nomina relacionada a la obra: $obra->nombre",
  451. "combinar" => "D6",
  452. "estilo" => $estiloEncabezado
  453. ],
  454. "A7" => [
  455. "valor" => "Concepto Obra",
  456. "estilo" => $estiloEncabezado
  457. ],
  458. "B7" => [
  459. "valor" => "Cantidad ",
  460. "estilo" => $estiloEncabezado
  461. ],
  462. "C7" => [
  463. "valor" => "Fecha Inicio",
  464. "estilo" => $estiloEncabezado
  465. ],
  466. "D7" => [
  467. "valor" => "Fecha Fin",
  468. "estilo" => $estiloEncabezado
  469. ]
  470. ];
  471. $r=8;
  472. $this->agregarRenglones($encabezadoTabla);
  473. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  474. $estiloCondicional = $this->estiloCondicional();
  475. foreach ($nomina->each() as $obraNomina) {
  476. $fechaInicio = (new DateTime($obraNomina->fechaInicio))->format('d-m-Y');
  477. $fechaFin = (new DateTime($obraNomina->fechaFin))->format('d-m-Y');
  478. $empleado = $obraNomina->empleado;
  479. $renglones = [
  480. "A{$r}" => [
  481. "valor" => $empleado->nombre,
  482. "estilo" => $estiloCeldaIzquierda
  483. ],
  484. "B{$r}" => [
  485. "valor" => $obraNomina->montoPagado,
  486. "estilo" => $estiloCeldaIzquierda,
  487. "formato" => "$#,##0.00",
  488. "estiloCondicional" => $estiloCondicional
  489. ],
  490. "C{$r}" => [
  491. "valor" => $fechaInicio,
  492. "estilo" => $estiloCeldaIzquierda
  493. ],
  494. "D{$r}" => [
  495. "valor" => $fechaFin,
  496. "estilo" => $estiloCeldaIzquierda
  497. ]
  498. ];
  499. $this->agregarRenglones($renglones);
  500. $r += 1;
  501. }
  502. $anchoColumnas = [
  503. "A" => ["ancho" => 20],
  504. "B" => ["ancho" => 20],
  505. "C" => ["ancho" => 20],
  506. "D" => ["ancho" => 20],
  507. ];
  508. $this->anchoColumnas($anchoColumnas);
  509. $this->nuevaHoja(4, 'Rubro');
  510. $rubro = ObraRubro::find()
  511. ->joinWith('conceptoObra')
  512. ->andWhere(['{{ObraRubro}}.[[eliminado]]' => null])->andWhere(['{{ObraRubro}}.[[idObra]]' => $idObra]);
  513. $rubro->orderBy(['creado' => SORT_DESC]);
  514. $this->encabezadoHoja($this->logo($logo, 'A1'));
  515. $encabezadoTabla = [
  516. "A5" => [
  517. "valor" => "Rubro relacionado a la obra: $obra->nombre",
  518. "combinar" => "D6",
  519. "estilo" => $estiloEncabezado
  520. ],
  521. "A7" => [
  522. "valor" => "Concepto Obra",
  523. "estilo" => $estiloEncabezado
  524. ],
  525. "B7" => [
  526. "valor" => "Cantidad ",
  527. "estilo" => $estiloEncabezado
  528. ],
  529. "C7" => [
  530. "valor" => "Fecha Compra",
  531. "estilo" => $estiloEncabezado
  532. ],
  533. "D7" => [
  534. "valor" => "Descripción",
  535. "estilo" => $estiloEncabezado
  536. ]
  537. ];
  538. $r=8;
  539. $this->agregarRenglones($encabezadoTabla);
  540. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  541. $estiloCondicional = $this->estiloCondicional();
  542. foreach ($rubro->each() as $obraRubro) {
  543. $fecha = (new DateTime($obraRubro->fechaCompra))->format('d-m-Y');
  544. $rubro = $obraRubro->conceptoObra;
  545. $renglones = [
  546. "A{$r}" => [
  547. "valor" => $rubro->concepto,
  548. "estilo" => $estiloCeldaIzquierda
  549. ],
  550. "B{$r}" => [
  551. "valor" => $obraRubro->cantidad,
  552. "estilo" => $estiloCeldaIzquierda,
  553. "formato" => "$#,##0.00",
  554. "estiloCondicional" => $estiloCondicional
  555. ],
  556. "C{$r}" => [
  557. "valor" => $fecha,
  558. "estilo" => $estiloCeldaIzquierda
  559. ],
  560. "D{$r}" => [
  561. "valor" => $obraRubro->descripcion,
  562. "estilo" => $estiloCeldaIzquierda
  563. ]
  564. ];
  565. $this->agregarRenglones($renglones);
  566. $r += 1;
  567. }
  568. $anchoColumnas = [
  569. "A" => ["ancho" => 20],
  570. "B" => ["ancho" => 20],
  571. "C" => ["ancho" => 20],
  572. "D" => ["ancho" => 20],
  573. ];
  574. $this->anchoColumnas($anchoColumnas);
  575. $documento = $this->obtenerHojaDeCalculo();
  576. $this->crear($documento, "Obra_" . date("YmdHis"), self::TIPO_EXCEL);
  577. \Yii::$app->end();
  578. }
  579. }