ObraPagoController.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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\Style\NumberFormat;
  9. use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
  10. use v1\models\Obra;
  11. use v1\models\Pago;
  12. use Yii;
  13. use excel\web\Controller;
  14. use yii\web\Response;
  15. class ObraPagoController extends Controller {
  16. //Version de hugo
  17. public static $estiloCeldaIzquierda12 = [
  18. 'font' => [
  19. 'bold' => true,
  20. 'size' => 12,
  21. 'color' => ['argb' => 'FF000000'],
  22. ],
  23. 'alignment' => [
  24. 'horizontal' => Alignment::HORIZONTAL_LEFT,
  25. 'vertical' => Alignment::VERTICAL_CENTER,
  26. ],
  27. ];
  28. public static $celdaVertical = [
  29. 'font' => [
  30. 'bold' => true,
  31. 'size' => 14,
  32. 'color' => ['argb' => 'FFFFFFFF'],
  33. ],
  34. 'alignment' => [
  35. // 'textRotation' => 90,
  36. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  37. 'vertical' => Alignment::VERTICAL_CENTER
  38. ],
  39. 'fill' => [
  40. 'fillType' => Fill::FILL_SOLID,
  41. 'startColor' => ['argb' => "FF625FF5"]
  42. ],
  43. ];
  44. public static $celdaHorizontal = [
  45. 'font' => [
  46. 'bold' => true,
  47. 'size' => 14,
  48. 'color' => ['argb' => 'FF000000'],
  49. ],
  50. 'alignment' => [
  51. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  52. 'vertical' => Alignment::VERTICAL_CENTER
  53. ],
  54. 'fill' => [
  55. 'fillType' => Fill::FILL_SOLID,
  56. 'startColor' => ['argb' => "FFE7E7E7"]
  57. ],
  58. ];
  59. public static $celdaFuente12 = [
  60. 'font' => [
  61. 'bold' => true,
  62. 'size' => 10,
  63. 'color' => ['argb' => 'FF000000'],
  64. ],
  65. 'alignment' => [
  66. 'horizontal' => Alignment::HORIZONTAL_LEFT,
  67. 'vertical' => Alignment::VERTICAL_CENTER
  68. ],
  69. ];
  70. public static $celdaVerticalF12 = [
  71. 'font' => [
  72. 'bold' => true,
  73. 'size' => 10,
  74. 'color' => ['argb' => 'FF000000'],
  75. ],
  76. 'alignment' => [
  77. 'textRotation' => 90,
  78. 'horizontal' => Alignment::HORIZONTAL_CENTER,
  79. 'vertical' => Alignment::VERTICAL_CENTER
  80. ],
  81. 'fill' => [
  82. 'fillType' => Fill::FILL_SOLID,
  83. 'startColor' => ['argb' => "FFE7E7E7"]
  84. ],
  85. ];
  86. public function encabezadoHoja($logo)
  87. {
  88. $celdas = [
  89. "A1" => [
  90. "valor" => $logo,
  91. "combinar" => "G4",
  92. ],
  93. ];
  94. foreach ($celdas as $coordenada => $valor) {
  95. $this->agregarCelda($coordenada, $valor);
  96. }
  97. $this->renglonActual = 6;
  98. return $this;
  99. }
  100. public function actionExcelObraPago($idObra) {
  101. $json = intval($this->req->get("json", ""));
  102. $obra = Obra::findOne($idObra);
  103. $query= Pago::find()
  104. ->joinWith('conceptosObra')
  105. ->andWhere(['{{Pago}}.[[eliminado]]'=>null])->andWhere(['{{Pago}}.[[idObra]]'=>$idObra]);
  106. $query->orderBy(['fechaPago' => SORT_DESC]);
  107. if ($json) {
  108. \Yii::$app->getResponse()->format = Response::FORMAT_JSON;
  109. return $json;
  110. }
  111. $BASEPATH = \Yii::getAlias('@app') . "/web";
  112. $logo = $BASEPATH . '/img/logos/edesarrollos-unicolor-azul.png';
  113. $this->encabezadoHoja($this->logo($logo, 'A1'));
  114. $fechaInicio = (new DateTime($obra->fechaInicio))->format('d-m-Y');
  115. $fechaFin = (new DateTime($obra->fechaFinal))->format('d-m-Y');
  116. $estiloEncabezado = array_merge(self::$celdaVertical, self::$bordes);
  117. $encabezadoTabla = [
  118. "A6" => [
  119. "valor" => "Pagos relacionado a la obra: $obra->nombre",
  120. "combinar" => "D6",
  121. "estilo" => $estiloEncabezado
  122. ],
  123. "A7" => [
  124. "valor" => "Fecha Inicial: $fechaInicio ",
  125. "combinar" => "B7",
  126. "estilo" => $estiloEncabezado
  127. ],
  128. "C7" => [
  129. "valor" => "Fecha Final: $fechaFin",
  130. "combinar" => "D7",
  131. "estilo" => $estiloEncabezado
  132. ]
  133. ];
  134. $this->agregarRenglones($encabezadoTabla);
  135. $encabezadoTabla = [
  136. "A9" => [
  137. "valor" => "Concepto Obra",
  138. "estilo" => $estiloEncabezado
  139. ],
  140. "B9" => [
  141. "valor" => "Cantidad ",
  142. "estilo" => $estiloEncabezado
  143. ],
  144. "C9" => [
  145. "valor" => "Fecha Pago",
  146. "estilo" => $estiloEncabezado
  147. ],
  148. "D9" => [
  149. "valor" => "Descripción",
  150. "estilo" => $estiloEncabezado
  151. ]
  152. ];
  153. $r = 10;
  154. $this->agregarRenglones($encabezadoTabla);
  155. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  156. $estiloCondicional = $this->estiloCondicional();
  157. foreach ($query->each() as $obraPago) {
  158. $fecha = (new DateTime($obraPago->fechaPago))->format('d-m-Y');
  159. $Pago = $obraPago->conceptosObra;
  160. $renglones = [
  161. "A{$r}" => [
  162. "valor" => $Pago->concepto,
  163. "estilo" => $estiloCeldaIzquierda
  164. ],
  165. "B{$r}" => [
  166. "valor" => $obraPago->cantidad,
  167. "estilo" => $estiloCeldaIzquierda,
  168. "formato" => "$#,##0.00",
  169. "estiloCondicional" => $estiloCondicional
  170. ],
  171. "C{$r}" => [
  172. "valor" => $fecha,
  173. "estilo" => $estiloCeldaIzquierda
  174. ],
  175. "D{$r}" => [
  176. "valor" => $obraPago->descripcion,
  177. "estilo" => $estiloCeldaIzquierda
  178. ]
  179. ];
  180. $this->agregarRenglones($renglones);
  181. $r += 1;
  182. }
  183. $anchoColumnas = [
  184. "A" => ["ancho" => 20],
  185. "B" => ["ancho" => 20],
  186. "C" => ["ancho" => 20],
  187. "D" => ["ancho" => 20],
  188. ];
  189. $this->anchoColumnas($anchoColumnas);
  190. $documento = $this->obtenerHojaDeCalculo();
  191. $this->crear($documento, "Pago_" . date("YmdHis"), self::TIPO_EXCEL);
  192. \Yii::$app->end();
  193. }
  194. public function actionPagoConceptoExcel($idObra)
  195. {
  196. $json = intval($this->req->get("json", ""));
  197. $obra = Obra::findOne($idObra);
  198. $query = Pago::find()
  199. ->select(['{{ConceptoObra}}.[[concepto]] AS concepto', 'SUM({{Pago}}.[[cantidad]]) AS totalPago'])
  200. ->innerJoin('{{ConceptoObra}}', '{{Pago}}.[[idConceptoObra]] = {{ConceptoObra}}.[[id]]')
  201. ->andWhere(['{{Pago}}.[[eliminado]]' => null])
  202. ->andWhere(['{{Pago}}.[[idObra]]' => $idObra])
  203. ->groupBy('{{ConceptoObra}}.[[id]]')
  204. ->asArray()
  205. ->all();
  206. if ($json) {
  207. \Yii::$app->getResponse()->format = Response::FORMAT_JSON;
  208. return $json;
  209. }
  210. $BASEPATH = \Yii::getAlias('@app') . "/web";
  211. $logo = $BASEPATH . '/img/logos/edesarrollos-unicolor-azul.png';
  212. $this->encabezadoHoja($this->logo($logo, 'A1'));
  213. $fechaInicio = (new DateTime($obra->fechaInicio))->format('d-m-Y');
  214. $fechaFin = (new DateTime($obra->fechaFinal))->format('d-m-Y');
  215. $estiloEncabezado = array_merge(self::$celdaVertical, self::$bordes);
  216. $encabezadoTabla = [
  217. "A6" => [
  218. "valor" => "Pagos por Concepto de Obra, relacionado a la obra: $obra->nombre",
  219. "combinar" => "D6",
  220. "estilo" => $estiloEncabezado
  221. ],
  222. "A7" => [
  223. "valor" => "Fecha Inicial: $fechaInicio ",
  224. "combinar" => "B7",
  225. "estilo" => $estiloEncabezado
  226. ],
  227. "C7" => [
  228. "valor" => "Fecha Final: $fechaFin",
  229. "combinar" => "D7",
  230. "estilo" => $estiloEncabezado
  231. ]
  232. ];
  233. $this->agregarRenglones($encabezadoTabla);
  234. $encabezadoTabla = [
  235. "A9" => [
  236. "valor" => "Concepto Obra",
  237. "estilo" => $estiloEncabezado
  238. ],
  239. "B9" => [
  240. "valor" => "Total:",
  241. "estilo" => $estiloEncabezado
  242. ],
  243. ];
  244. $r = 10;
  245. $estiloCondicional = $this->estiloCondicional();
  246. $this->agregarRenglones($encabezadoTabla);
  247. $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12);
  248. $TotalPago= 0;
  249. foreach ($query as $obraPago) {
  250. $TotalPago=$TotalPago+$obraPago['totalPago'];
  251. $renglones = [
  252. "A{$r}" => [
  253. "valor" => $obraPago['concepto'],
  254. "estilo" => $estiloCeldaIzquierda
  255. ],
  256. "B{$r}" => [
  257. "valor" => $obraPago['totalPago'],
  258. "estilo" => $estiloCeldaIzquierda,
  259. "formato" => "$#,##0.00",
  260. "estiloCondicional" => $estiloCondicional
  261. ],
  262. ];
  263. $this->agregarRenglones($renglones);
  264. $r += 1;
  265. }
  266. $r+=1;
  267. $renglonesTotales = [
  268. "A{$r}" => [
  269. "valor" => "TOTAL",
  270. "estilo" => $estiloEncabezado
  271. ],
  272. "B{$r}" => [
  273. "valor" => $TotalPago,
  274. "estilo" => $estiloCeldaIzquierda,
  275. "formato" => "$#,##0.00",
  276. "estiloCondicional" => $estiloCondicional
  277. ],
  278. ];
  279. $this->agregarRenglones($renglonesTotales);
  280. $anchoColumnas = [
  281. "A" => ["ancho" => 20],
  282. "B" => ["ancho" => 20],
  283. "C" => ["ancho" => 20],
  284. "D" => ["ancho" => 20],
  285. ];
  286. $this->anchoColumnas($anchoColumnas);
  287. $documento = $this->obtenerHojaDeCalculo();
  288. $this->crear($documento, "PagoConcepto_" . date("YmdHis"), self::TIPO_EXCEL);
  289. \Yii::$app->end();
  290. return $documento;
  291. }
  292. }