ObraRubroController.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. namespace app\modules\excel\controllers;
  3. use DateTime;
  4. use DateTimeZone;
  5. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  6. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  7. use PhpOffice\PhpSpreadsheet\Style\Fill;
  8. use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
  9. use v1\models\Obra;
  10. use v1\models\ObraRubro;
  11. use Yii;
  12. use excel\web\Controller;
  13. class ObraRubroController extends Controller
  14. {
  15. public static $estiloCeldaIzquierda12 = [
  16. 'font' => [
  17. 'bold' => true,
  18. 'size' => 12,
  19. 'color' => ['argb' => 'FF000000'],
  20. ],
  21. 'alignment' => [
  22. 'horizontal' => Alignment::HORIZONTAL_LEFT,
  23. 'vertical' => Alignment::VERTICAL_CENTER,
  24. ],
  25. ];
  26. public static $celdaVertical = [
  27. 'font' => [
  28. 'bold' => true,
  29. 'size' => 14,
  30. 'color' => ['argb' => 'FFFFFFFF'],
  31. ],
  32. 'alignment' => [
  33. // 'textRotation' => 90,
  34. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  35. 'vertical' => Alignment::VERTICAL_CENTER
  36. ],
  37. 'fill' => [
  38. 'fillType' => Fill::FILL_SOLID,
  39. 'startColor' => ['argb' => "FF625FF5"]
  40. ],
  41. ];
  42. public static $celdaHorizontal = [
  43. 'font' => [
  44. 'bold' => true,
  45. 'size' => 14,
  46. 'color' => ['argb' => 'FF000000'],
  47. ],
  48. 'alignment' => [
  49. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  50. 'vertical' => Alignment::VERTICAL_CENTER
  51. ],
  52. 'fill' => [
  53. 'fillType' => Fill::FILL_SOLID,
  54. 'startColor' => ['argb' => "FFE7E7E7"]
  55. ],
  56. ];
  57. public static $celdaFuente12 = [
  58. 'font' => [
  59. 'bold' => true,
  60. 'size' => 10,
  61. 'color' => ['argb' => 'FF000000'],
  62. ],
  63. 'alignment' => [
  64. 'horizontal' => Alignment::HORIZONTAL_LEFT,
  65. 'vertical' => Alignment::VERTICAL_CENTER
  66. ],
  67. ];
  68. public static $celdaVerticalF12 = [
  69. 'font' => [
  70. 'bold' => true,
  71. 'size' => 10,
  72. 'color' => ['argb' => 'FF000000'],
  73. ],
  74. 'alignment' => [
  75. 'textRotation' => 90,
  76. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  77. 'vertical' => Alignment::VERTICAL_CENTER
  78. ],
  79. 'fill' => [
  80. 'fillType' => Fill::FILL_SOLID,
  81. 'startColor' => ['argb' => "FFE7E7E7"]
  82. ],
  83. ];
  84. public function encabezadoHoja($logo)
  85. {
  86. $celdas = [
  87. "A1" => [
  88. "valor" => $logo,
  89. "combinar" => "G4",
  90. ],
  91. ];
  92. foreach ($celdas as $coordenada => $valor) {
  93. $this->agregarCelda($coordenada, $valor);
  94. }
  95. $this->renglonActual = 6;
  96. return $this;
  97. }
  98. public function actionExcelObraRubro($idObra)
  99. {
  100. $obra = Obra::findOne($idObra);
  101. $request = Yii::$app->request;
  102. $query = ObraRubro::find()
  103. ->joinWith('conceptoObra')
  104. ->andWhere(['{{ObraRubro}}.[[eliminado]]' => null])->andWhere(['{{ObraRubro}}.[[idObra]]' => $idObra]);
  105. $query->orderBy(['fechaCompra' => SORT_DESC]);
  106. $BASEPATH = \Yii::getAlias('@app') . "/web";
  107. $logo = $BASEPATH . '/img/logos/edesarrollos-unicolor-azul.png';
  108. $fechaInicio = (new DateTime($obra->fechaInicio))->format('d-m-Y');
  109. $fechaFin = (new DateTime($obra->fechaFinal))->format('d-m-Y');
  110. $this->encabezadoHoja($this->logo($logo, 'A1'));
  111. $estiloEncabezado = array_merge(self::$celdaVertical, self::$bordes);
  112. $encabezadoTabla = [
  113. "A6" => [
  114. "valor" => "Rubro relacionado a la obra: $obra->nombre",
  115. "combinar" => "D6",
  116. "estilo" => $estiloEncabezado
  117. ],
  118. "A7" => [
  119. "valor" => "Fecha Inicial: $fechaInicio ",
  120. "combinar" => "B7",
  121. "estilo" => $estiloEncabezado
  122. ],
  123. "C7" => [
  124. "valor" => "Fecha Final: $fechaFin",
  125. "combinar" => "D7",
  126. "estilo" => $estiloEncabezado
  127. ]
  128. ];
  129. $this->agregarRenglones($encabezadoTabla);
  130. $encabezadoTabla = [
  131. "A9" => [
  132. "valor" => "Concepto Obra",
  133. "estilo" => $estiloEncabezado
  134. ],
  135. "B9" => [
  136. "valor" => "Cantidad ",
  137. "estilo" => $estiloEncabezado
  138. ],
  139. "C9" => [
  140. "valor" => "Fecha Compra",
  141. "estilo" => $estiloEncabezado
  142. ],
  143. "D9" => [
  144. "valor" => "Descripción",
  145. "estilo" => $estiloEncabezado
  146. ]
  147. ];
  148. $r = 10;
  149. $this->agregarRenglones($encabezadoTabla);
  150. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  151. $estiloCondicional = $this->estiloCondicional();
  152. foreach ($query->each() as $obraRubro) {
  153. $fecha = (new DateTime($obraRubro->fechaCompra))->format('d-m-Y');
  154. $rubro = $obraRubro->conceptoObra;
  155. $renglones = [
  156. "A{$r}" => [
  157. "valor" => $rubro->concepto,
  158. "estilo" => $estiloCeldaIzquierda
  159. ],
  160. "B{$r}" => [
  161. "valor" => $obraRubro->cantidad,
  162. "estilo" => $estiloCeldaIzquierda,
  163. "formato" => "$#,##0.00",
  164. "estiloCondicional" => $estiloCondicional
  165. ],
  166. "C{$r}" => [
  167. "valor" => $fecha,
  168. "estilo" => $estiloCeldaIzquierda
  169. ],
  170. "D{$r}" => [
  171. "valor" => $obraRubro->descripcion,
  172. "estilo" => $estiloCeldaIzquierda
  173. ]
  174. ];
  175. $this->agregarRenglones($renglones);
  176. $r += 1;
  177. }
  178. $anchoColumnas = [
  179. "A" => ["ancho" => 20],
  180. "B" => ["ancho" => 20],
  181. "C" => ["ancho" => 20],
  182. "D" => ["ancho" => 20],
  183. ];
  184. $this->anchoColumnas($anchoColumnas);
  185. $documento = $this->obtenerHojaDeCalculo();
  186. $this->crear($documento, "Rubro_" . date("YmdHis"), self::TIPO_EXCEL);
  187. \Yii::$app->end();
  188. }
  189. }