ObraNominaController.php 5.4 KB

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