/** * Guardar registros. * * Este metodo guarda el estado actual del objeto {@link Documento} pasado en la base de datos. La llave * primaria indicara que instancia va a ser actualizado en base de datos. Si la llave primara o combinacion de llaves * primarias describen una fila que no se encuentra en la base de datos, entonces save() creara una nueva fila, insertando * en ese objeto el ID recien creado. * * @static * @throws Exception si la operacion fallo. * @param Documento [$documento] El objeto de tipo Documento * @return Un entero mayor o igual a cero denotando las filas afectadas. **/ public static final function save(&$documento) { if (!is_null(self::getByPK($documento->getIdDocumento()))) { try { return DocumentoDAOBase::update($documento); } catch (Exception $e) { throw $e; } } else { try { return DocumentoDAOBase::create($documento); } catch (Exception $e) { throw $e; } } }
public static function Generar2Excel($id_documento) { $Debug = 0; $TEMP = DocumentoDAOBase::getByPK($id_documento); $DocBase = DocumentoBaseDAO::getByPK($TEMP->getIdDocumentoBase()); $DescDoc = DocumentoDAO::getDocumentWithValues($id_documento); //Descarga de documento $DescDoc = array_reverse($DescDoc); $Valores = array(); $i = 0; if ($DocBase->getNombrePlantilla() != null) { //Si Se especifica una plantilla $arrLlaves = array(); $arrValores = array(); foreach ($DescDoc as $Item) { $Llave = "#" . $Item["campo"] . "#"; $Valor = $Item["val"]; array_push($arrLlaves, $Llave); if (json_decode($Valor) != null) { array_push($arrValores, json_decode($Valor)); } else { array_push($arrValores, $Valor); } } $datos = array_combine($arrLlaves, $arrValores); //Establece los datos a usar $archivo_plantilla = POS_PATH_TO_SERVER_ROOT . "/../static_content/" . IID . "/plantillas/excel/" . $DocBase->getNombrePlantilla(); //Establece el archivo de plantilla que se va a usar } else { //Si no se especifica una plantilla foreach ($DescDoc as $parms) { if (FormasPreimpresasController::EsCoord($parms["descripcion"])) { //Determina si son coordenadas //FALTA } else { //Si no son coordenadas las inserta desde la fila 1 hasta la fila n, en la columna A el nombre del campo y en la B el valor $i++; $Valores["A{$i}"] = array($parms["descripcion"]); $Valores["B{$i}"] = array($parms["val"]); } } //var_dump($Valores); $datos = $Valores; //Establece los datos a usar } try { if ($datos == null) { Logger::error("No hay datos para trabajar"); //Termina la ejecución } else { $Datos = $datos; //Carga los datos con los que va a trabajar } if ($archivo_plantilla == null || $archivo_plantilla === "") { //Si no se especifica una plantilla $ObjSalida = new PHPExcel(); //Crea el nuevo objeto de saĺida $itCol = 0; $itFil = 0; foreach ($Datos as $key => $value) { if (substr($key, 0, 1) != "#" && substr($key, strlen($key) - 1 != "#", 1)) { //Determina si NO es una palabra clave if (is_object($value) == true) { //Si el elemento que se obtiene es un objeto (incluye formato) $Pos = FormasPreimpresasController::SeparaColFil($key); foreach ($value as $nKey => $Filas) { if (is_array($Filas)) { //Si hay un arreglo con las columnas para esa fila foreach ($Filas as $Columnas) { //Itera entre todas las columnas contenidas en el array $ObjSalida->getActiveSheet()->getCellByColumnAndRow($Pos->Col + $itCol, $Pos->Fil + $itFil - 1)->setValue($Columnas); $itCol++; } $itCol = 0; } $itFil++; } unset($itCol); unset($itFil); } else { //Si el objeto que se obtiene es un array (solo textos) $ItCol = 0; $ItFil = 0; if (is_array($value) == true) { foreach ($value as $Valinter) { //itera entre todas las filas recibidas del arreglo if (is_Array($Valinter)) { foreach ($Valinter as $ValInterCol) { $Pos = FormasPreimpresasController::SeparaColFil($key); $ObjSalida->getActiveSheet()->getCellByColumnAndRow($Pos->Col + $ItCol, $Pos->Fil + $ItFil)->setValue($ValInterCol); $ItCol++; } $ItCol = 0; } else { $Pos = FormasPreimpresasController::SeparaColFil($key); $ObjSalida->getActiveSheet()->getCellByColumnAndRow($Pos->Col + $ItCol, $Pos->Fil)->setValue($Valinter); $ItCol++; } $ItFil++; } } else { $ObjSalida->getActiveSheet()->getCell($key)->setValue($value); //Establece el valor de la celda en base al arreglo obtenido } unset($ItCol); unset($ItFil); } } } unset($itCol); unset($itFil); //Libera las variable de la memoria } else { //Si se especifica una plantilla if (file_exists($archivo_plantilla) == 1) { //Comprueba si existe el archivo de plantilla indicado $Extension = strrchr($archivo_plantilla, "."); if ($Extension == ".xlsx") { //Comprueba la extensión de la plantilla $ObjSalida = PHPExcel_IOFactory::load($archivo_plantilla); $HojaPlantilla = $ObjSalida->getActiveSheet(); //Carga la hoja de la plantilla al nuevo archivo $itCol = 0; $itFil = 0; foreach ($HojaPlantilla->getRowIterator() as $Fila) { //Iterador de Filas foreach ($Fila->getCellIterator() as $Celda) { //Iterador de Columnas if (array_key_exists((string) $Celda->getValue(), $Datos)) { //Comprueba si la palabra clave existe dentro del arreglo de datos recibidos if (is_object($Datos[$Celda->getValue()])) { //Si se recibe un arreglo de cadenas foreach ($Datos[$Celda->getValue()] as $Key => $Valor) { //Itera entre todos los elementos del primer arreglo recibido (el de nivel superior) if (is_array($Valor)) { //Si el coontenido del elemento en el primer array es un array también, lo itera. foreach ($Valor as $Cols) { //Iteración entre el contenido de los arrays() del primer array(Filas) para revisar todas las columnas $HojaPlantilla->getCellByColumnAndRow(PHPExcel_Cell::columnIndexFromString($Celda->getColumn()) + $itCol - 1, $Celda->getRow() + $itFil - 1)->setValue($Cols); $itCol++; } } if ($Key != "Formato") { //Si solo se manda un arreglo con los datos de las primeras columnas } $itFil++; $itCol = 0; } unset($itCol); unset($itFil); } else { if (is_array($Datos[$Celda->getValue()])) { //Si se recibe un arreglo, se consideran como cabeceras todos sus elementos hacia la derecha $Fini = $Celda->getRow(); $Cini = PHPExcel_Cell::columnIndexFromString($Celda->getColumn()); $Cini--; foreach ($Datos[$Celda->getValue()] as $Val) { if (is_array($Val)) { foreach ($Val as $CelCol) { $HojaPlantilla->getCellByColumnAndRow($Cini + $itCol, $Fini + $itFil)->setValue($CelCol); $itCol++; } $itFil++; $itCol = 0; } else { $HojaPlantilla->getCellByColumnAndRow($Cini, $Fini)->setValue($Val); //Pone una fila de datos $Cini++; } } unset($Fini); unset($Cini); unset($Val); } else { $Celda->setValue($Datos[$Celda->getValue()]); //Cambia el valoren el archivo de plantilla de una sola celda } } } } } } else { Logger::error("La extensión de la plantilla no es compatible (" . $Extension . ") con esta función (.xlsx)"); } unset($Extension); //Libera la variable } else { Logger::error("El archivo de plantilla indicado no existe."); return; } } $objWriter = PHPExcel_IOFactory::createWriter($ObjSalida, 'Excel2007'); //Devuelve un objeto de escritura } catch (Exception $e) { Logger::error("Ha ocurrido un error: {$e}"); } if ($Debug === 1) { header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //Cabeceras de salida header("Content-Disposition: attachment;filename=\"Excel.xlsx\""); header("Cache-Control: max-age=0"); } $objWriter->save("php://output"); //Imprime el archivo de salida }