[ 'bold' => true, 'size' => 12, 'color' => ['argb' => 'FF000000'], ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_LEFT, 'vertical' => Alignment::VERTICAL_CENTER, ], ]; public static $celdaVertical = [ 'font' => [ 'bold' => true, 'size' => 14, 'color' => ['argb' => 'FFFFFFFF'], ], 'alignment' => [ // 'textRotation' => 90, 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER ], 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['argb' => "FF625FF5"] ], ]; public static $celdaHorizontal = [ 'font' => [ 'bold' => true, 'size' => 14, 'color' => ['argb' => 'FF000000'], ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER ], 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['argb' => "FFE7E7E7"] ], ]; public static $celdaFuente12 = [ 'font' => [ 'bold' => true, 'size' => 10, 'color' => ['argb' => 'FF000000'], ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_LEFT, 'vertical' => Alignment::VERTICAL_CENTER ], ]; public static $celdaVerticalF12 = [ 'font' => [ 'bold' => true, 'size' => 10, 'color' => ['argb' => 'FF000000'], ], 'alignment' => [ 'textRotation' => 90, 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER ], 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['argb' => "FFE7E7E7"] ], ]; public function encabezadoHoja($logo) { $celdas = [ "A1" => [ "valor" => $logo, "combinar" => "G4", ], ]; foreach ($celdas as $coordenada => $valor) { $this->agregarCelda($coordenada, $valor); } $this->renglonActual = 6; return $this; } public function actionExcelObra($idObra) { $json = intval($this->req->get("json", "")); $obra = Obra::findOne($idObra); $request = Yii::$app->request; if ($json) { \Yii::$app->getResponse()->format = Response::FORMAT_JSON; return $json; } $BASEPATH = \Yii::getAlias('@app') . "/web"; $logo = $BASEPATH . '/img/logos/edesarrollos-unicolor-azul.png'; $fechaInicio = (new DateTime($obra->fechaInicio))->format('d-m-Y'); $fechaFin = (new DateTime($obra->fechaFinal))->format('d-m-Y'); $this->encabezadoHoja($this->logo($logo, 'A1')); $estiloEncabezado = array_merge(self::$celdaVertical, self::$bordes); $encabezadoTabla = [ "A6" => [ "valor" => "Obra: $obra->nombre", "combinar" => "D6", "estilo" => $estiloEncabezado ], "A7" => [ "valor" => "Fecha Inicial: $fechaInicio ", "combinar" => "B7", "estilo" => $estiloEncabezado ], "C7" => [ "valor" => "Fecha Final: $fechaFin", "combinar" => "D7", "estilo" => $estiloEncabezado ] ]; $this->agregarRenglones($encabezadoTabla); $empleados = ObraEmpleado::find() ->joinWith('empleado') ->andWhere(['{{ObraEmpleado}}.[[eliminado]]' => null])->andWhere(['{{ObraEmpleado}}.[[idObra]]' => $idObra]); $empleados->orderBy(['creado' => SORT_DESC]); $encabezadoTabla = [ "A9" => [ "valor" => "Empleados", "estilo" => $estiloEncabezado, "combinar" => "B9", ], "A10" => [ "valor" => "Nombre", "estilo" => $estiloEncabezado, ], "B10" => [ "valor" => "Fecha Alta", "estilo" => $estiloEncabezado, ], "C9" => [ "valor" => "Empleados", "estilo" => $estiloEncabezado, "combinar" => "D9", ], "C10" => [ "valor" => "Nombre", "estilo" => $estiloEncabezado, ], "D10" => [ "valor" => "Fecha Alta", "estilo" => $estiloEncabezado, ], ]; $rEmpleado = 11; $this->agregarRenglones($encabezadoTabla); $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12); $estiloCondicional = $this->estiloCondicional(); foreach ($empleados->each() as $obraEmpleado) { $empleado = $obraEmpleado->empleado; $fecha = (new DateTime($empleado->fechaAlta))->format('d-m-Y'); $renglones = [ "A{$rEmpleado}" => [ "valor" => $empleado->nombre, "estilo" => $estiloCeldaIzquierda, ], "B{$rEmpleado}" => [ "valor" => $fecha, "estilo" => $estiloCeldaIzquierda, ], ]; $this->agregarRenglones($renglones); $rEmpleado += 1; } $herramienta = ObraHerramienta::find() ->joinWith('herramienta') ->andWhere(['{{ObraHerramienta}}.[[eliminado]]' => null])->andWhere(['{{ObraHerramienta}}.[[idObra]]' => $idObra]); $herramienta->orderBy(['creado' => SORT_DESC]); $rHerramienta = 11; foreach ($herramienta->each() as $obraHerramienta) { $herramienta = $obraHerramienta->herramienta; $renglones = [ "C{$rHerramienta}" => [ "valor" => $herramienta->nombre, "estilo" => $estiloCeldaIzquierda, ], "D{$rHerramienta}" => [ "valor" => $obraHerramienta->cantidad, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional ], ]; $this->agregarRenglones($renglones); $rHerramienta += 1; } $totalesController = new \v1\controllers\ObraController('totales', Yii::$app); $totalGasto = $totalesController->actionTotalGasto($idObra); $totalPago = $totalesController->actionTotalPago($idObra); $totalNomina = $totalesController->actionTotalNomina($idObra); $totalRubro = $totalesController->actionTotalRubro($idObra); $saldo = $totalesController->actionSaldo($totalGasto, $totalNomina, $totalPago); $ejercer = $totalesController->actionEjercer($totalGasto,$totalNomina,$totalRubro ); $ejercidoObra = $totalesController->actionEjercidoObra($totalGasto, $totalNomina, $totalRubro); $startRowTotales = max($rEmpleado, $rHerramienta) + 2; $encabezadoTablaTotales = [ "A{$startRowTotales}" => [ "valor" => "Gasto Total", "estilo" => $estiloEncabezado, ], "B{$startRowTotales}" => [ "valor" => "Pago Total", "estilo" => $estiloEncabezado, ], "C{$startRowTotales}" => [ "valor" => "Nómina total", "estilo" => $estiloEncabezado, ], "D{$startRowTotales}" => [ "valor" => "Rubro de Obra", "estilo" => $estiloEncabezado, ], "E{$startRowTotales}" => [ "valor" => "Saldo total", "estilo" => $estiloEncabezado, ], "F{$startRowTotales}" => [ "valor" => "Ejercido obra", "estilo" => $estiloEncabezado, ], "G{$startRowTotales}" => [ "valor" => "Por ejercer", "estilo" => $estiloEncabezado, ], ]; $this->agregarRenglones($encabezadoTablaTotales); $datos = $startRowTotales + 1; $renglones = [ "A{$datos}" => [ "valor" => $totalGasto, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional ], "B{$datos}" => [ "valor" => $totalPago, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional, ], "C{$datos}" => [ "valor" => $totalNomina, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional, ], "D{$datos}" => [ "valor" => $totalRubro, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional, ], "E{$datos}" => [ "valor" => $saldo, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional, ], "F{$datos}" => [ "valor" => "$ejercidoObra%", "estilo" => $estiloCeldaIzquierda, "estiloCondicional" => $estiloCondicional, ], "G{$datos}" => [ "valor" => $ejercer, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional, ], ]; $this->agregarRenglones($renglones); $anchoColumnas = [ "A" => ["ancho" => 20], "B" => ["ancho" => 20], "C" => ["ancho" => 20], "D" => ["ancho" => 20], "E" => ["ancho" => 20], "F" => ["ancho" => 20], "G" => ["ancho" => 20], ]; $this->anchoColumnas($anchoColumnas); //Gastos $this->nuevaHoja(1, 'Gasto'); $gasto = Gasto::find() ->joinWith('conceptosObra') ->andWhere(['{{Gasto}}.[[eliminado]]' => null])->andWhere(['{{Gasto}}.[[idObra]]' => $idObra]); $gasto->orderBy(['fechaCompra' => SORT_DESC]); $this->encabezadoHoja($this->logo($logo, 'A1')); $encabezadoTabla = [ "A5" => [ "valor" => "Gastos relacionado a la obra: $obra->nombre", "combinar" => "D6", "estilo" => $estiloEncabezado ], "A7" => [ "valor" => "Concepto Obra", "estilo" => $estiloEncabezado ], "B7" => [ "valor" => "Cantidad ", "estilo" => $estiloEncabezado ], "C7" => [ "valor" => "Fecha Compra", "estilo" => $estiloEncabezado ], "D7" => [ "valor" => "Descripción", "estilo" => $estiloEncabezado ] ]; $r=8; $this->agregarRenglones($encabezadoTabla); $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12); $estiloCondicional = $this->estiloCondicional(); foreach ($gasto->each() as $obraGasto) { $fecha = (new DateTime($obraGasto->fechaCompra))->format('d-m-Y'); $gasto = $obraGasto->conceptosObra; $renglones = [ "A{$r}" => [ "valor" => $gasto->concepto, "estilo" => $estiloCeldaIzquierda ], "B{$r}" => [ "valor" => $obraGasto->cantidad, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional ], "C{$r}" => [ "valor" => $fecha, "estilo" => $estiloCeldaIzquierda ], "D{$r}" => [ "valor" => $obraGasto->descripcion, "estilo" => $estiloCeldaIzquierda ] ]; $this->agregarRenglones($renglones); $r += 1; } $anchoColumnas = [ "A" => ["ancho" => 20], "B" => ["ancho" => 20], "C" => ["ancho" => 20], "D" => ["ancho" => 20], ]; $this->anchoColumnas($anchoColumnas); //Pagos $this->nuevaHoja(2, 'Pago'); $pago = Pago::find() ->joinWith('conceptosObra') ->andWhere(['{{Pago}}.[[eliminado]]' => null])->andWhere(['{{Pago}}.[[idObra]]' => $idObra]); $pago->orderBy(['fechaPago' => SORT_DESC]); $this->encabezadoHoja($this->logo($logo, 'A1')); $encabezadoTabla = [ "A5" => [ "valor" => "Pagos relacionado a la obra: $obra->nombre", "combinar" => "D6", "estilo" => $estiloEncabezado ], "A7" => [ "valor" => "Concepto Obra", "estilo" => $estiloEncabezado ], "B7" => [ "valor" => "Cantidad ", "estilo" => $estiloEncabezado ], "C7" => [ "valor" => "Fecha Pago", "estilo" => $estiloEncabezado ], "D7" => [ "valor" => "Descripción", "estilo" => $estiloEncabezado ] ]; $r=8; $this->agregarRenglones($encabezadoTabla); $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12); $estiloCondicional = $this->estiloCondicional(); foreach ($pago->each() as $obraPago) { $fecha = (new DateTime($obraPago->fechaPago))->format('d-m-Y'); $Pago = $obraPago->conceptosObra; $renglones = [ "A{$r}" => [ "valor" => $Pago->concepto, "estilo" => $estiloCeldaIzquierda ], "B{$r}" => [ "valor" => $obraPago->cantidad, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional ], "C{$r}" => [ "valor" => $fecha, "estilo" => $estiloCeldaIzquierda ], "D{$r}" => [ "valor" => $obraPago->descripcion, "estilo" => $estiloCeldaIzquierda ] ]; $this->agregarRenglones($renglones); $r += 1; } $anchoColumnas = [ "A" => ["ancho" => 20], "B" => ["ancho" => 20], "C" => ["ancho" => 20], "D" => ["ancho" => 20], ]; $this->anchoColumnas($anchoColumnas); $this->nuevaHoja(3, 'Nomina'); $nomina = Nomina::find() ->joinWith('empleado') ->andWhere(['{{Nomina}}.[[eliminado]]' => null])->andWhere(['{{Nomina}}.[[idObra]]' => $idObra]); $nomina->orderBy(['fechaInicio' => SORT_DESC]); $this->encabezadoHoja($this->logo($logo, 'A1')); $encabezadoTabla = [ "A5" => [ "valor" => "Nomina relacionada a la obra: $obra->nombre", "combinar" => "D6", "estilo" => $estiloEncabezado ], "A7" => [ "valor" => "Concepto Obra", "estilo" => $estiloEncabezado ], "B7" => [ "valor" => "Cantidad ", "estilo" => $estiloEncabezado ], "C7" => [ "valor" => "Fecha Inicio", "estilo" => $estiloEncabezado ], "D7" => [ "valor" => "Fecha Fin", "estilo" => $estiloEncabezado ] ]; $r=8; $this->agregarRenglones($encabezadoTabla); $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12); $estiloCondicional = $this->estiloCondicional(); foreach ($nomina->each() as $obraNomina) { $fechaInicio = (new DateTime($obraNomina->fechaInicio))->format('d-m-Y'); $fechaFin = (new DateTime($obraNomina->fechaFin))->format('d-m-Y'); $empleado = $obraNomina->empleado; $renglones = [ "A{$r}" => [ "valor" => $empleado->nombre, "estilo" => $estiloCeldaIzquierda ], "B{$r}" => [ "valor" => $obraNomina->montoPagado, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional ], "C{$r}" => [ "valor" => $fechaInicio, "estilo" => $estiloCeldaIzquierda ], "D{$r}" => [ "valor" => $fechaFin, "estilo" => $estiloCeldaIzquierda ] ]; $this->agregarRenglones($renglones); $r += 1; } $anchoColumnas = [ "A" => ["ancho" => 20], "B" => ["ancho" => 20], "C" => ["ancho" => 20], "D" => ["ancho" => 20], ]; $this->anchoColumnas($anchoColumnas); $this->nuevaHoja(4, 'Rubro'); $rubro = ObraRubro::find() ->joinWith('conceptoObra') ->andWhere(['{{ObraRubro}}.[[eliminado]]' => null])->andWhere(['{{ObraRubro}}.[[idObra]]' => $idObra]); $rubro->orderBy(['creado' => SORT_DESC]); $this->encabezadoHoja($this->logo($logo, 'A1')); $encabezadoTabla = [ "A5" => [ "valor" => "Rubro relacionado a la obra: $obra->nombre", "combinar" => "D6", "estilo" => $estiloEncabezado ], "A7" => [ "valor" => "Concepto Obra", "estilo" => $estiloEncabezado ], "B7" => [ "valor" => "Cantidad ", "estilo" => $estiloEncabezado ], "C7" => [ "valor" => "Fecha Compra", "estilo" => $estiloEncabezado ], "D7" => [ "valor" => "Descripción", "estilo" => $estiloEncabezado ] ]; $r=8; $this->agregarRenglones($encabezadoTabla); $estiloCeldaIzquierda = array_merge(self::$bordes, self::$celdaFuente12); $estiloCondicional = $this->estiloCondicional(); foreach ($rubro->each() as $obraRubro) { $fecha = (new DateTime($obraRubro->fechaCompra))->format('d-m-Y'); $rubro = $obraRubro->conceptoObra; $renglones = [ "A{$r}" => [ "valor" => $rubro->concepto, "estilo" => $estiloCeldaIzquierda ], "B{$r}" => [ "valor" => $obraRubro->cantidad, "estilo" => $estiloCeldaIzquierda, "formato" => "$#,##0.00", "estiloCondicional" => $estiloCondicional ], "C{$r}" => [ "valor" => $fecha, "estilo" => $estiloCeldaIzquierda ], "D{$r}" => [ "valor" => $obraRubro->descripcion, "estilo" => $estiloCeldaIzquierda ] ]; $this->agregarRenglones($renglones); $r += 1; } $anchoColumnas = [ "A" => ["ancho" => 20], "B" => ["ancho" => 20], "C" => ["ancho" => 20], "D" => ["ancho" => 20], ]; $this->anchoColumnas($anchoColumnas); $spreadsheet= new Spreadsheet; $this->activeSheet = $this->spreadsheet->getActiveSheet(0); $documento = $this->obtenerHojaDeCalculo(); $this->crear($documento, "Obra_" . date("YmdHis"), self::TIPO_EXCEL); \Yii::$app->end(); } }