123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- <?php
- namespace app\modules\excel\controllers;
- use v1\models\ObraEmpleado;
- use v1\models\Usuario;
- use DateTime;
- use DateTimeZone;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Style\Alignment;
- use PhpOffice\PhpSpreadsheet\Style\Fill;
- use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
- use v1\models\Obra;
- use v1\models\ObraHerramienta;
- use Yii;
- use excel\web\Controller;
- use v1\models\Gasto;
- use v1\models\Nomina;
- use v1\models\ObraRubro;
- use v1\models\Pago;
- use yii\web\Response;
- class ObraController extends Controller
- {
- public static $estiloCeldaIzquierda12 = [
- 'font' => [
- '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();
- }
-
- }
|