public function testExtraParamsOutOfSync() { //create user A $userA = ClientesController::Nuevo("userA" . time()); Logger::log("Create client A [userid=" . $userA["id_cliente"] . "]"); //create extra param $extraParamStruct = new ExtraParamsEstructura(); $extraParamStruct->setTabla("usuarios"); $extraParamStruct->setCampo("campo" . time()); $extraParamStruct->setTipo("string"); $extraParamStruct->setEnum(NULL); $extraParamStruct->setLongitud(128); $extraParamStruct->setObligatorio(FALSE); $extraParamStruct->setCaption("caption" . time()); $extraParamStruct->setDescripcion("description" . time()); ExtraParamsEstructuraDAO::save($extraParamStruct); Logger::log("Extra params " . $extraParamStruct->getIdExtraParamsEstructura() . " created"); //create user B $userB = ClientesController::Nuevo("userB" . time()); Logger::log("Create client B [userid=" . $userB["id_cliente"] . "]"); //user B should have extra param Logger::log("Looking for extra params in clientB"); $userBExtraParams = ExtraParamsValoresDAO::getVals("usuarios", $userB["id_cliente"]); $found = false; for ($i = 0; $i < sizeof($userBExtraParams); $i++) { if ($userBExtraParams[$i]["campo"] == $extraParamStruct->getCampo()) { $found = true; } } $this->assertTrue($found, "ClientB should have the new extra param campo=" . $extraParamStruct->getCampo()); ExtraParamsValoresDAO::actualizarRegistros("usuarios"); //user A should have extra param $userAExtraParams = ExtraParamsValoresDAO::getVals("usuarios", $userA["id_cliente"]); $found = false; for ($i = 0; $i < sizeof($userAExtraParams); $i++) { if ($userAExtraParams[$i]["campo"] == $extraParamStruct->getCampo()) { $found = true; } } $this->assertTrue($found, "When adding new extraparams old users should get updated" . $extraParamStruct->getCampo()); }
/** * *El documento base es de donde se crean instancias de documentos. * * @param json_impresion json El json que se utilizara para imprimir este documento. * @param nombre string Nombre del documento base * @param activo bool Si esta activo o si no se puede realizar documentos de este tipo. * @param foliado json El json que describe como sera el foliado de este documento. Incluye en que folio va. * @param foliado json * @param id_empresa int Si pertence a una empresa en especifico, o puede realizarse en cualquier empresa. * @param id_sucursal int Si pertenece a una sucursal en especifico o puede realizarse en cualquier sucursal. * @return id_documento_base int Id del nuevo documento **/ static function NuevoBase($json_impresion, $nombre, $activo = 1, $extra_params = null, $foliado = "", $foliado = "", $id_empresa = null, $id_sucursal = null, $nombre_plantilla = null) { if (is_null($json_impresion)) { throw new InvalidDataException("El json de impresion no es valido."); } $q = DocumentoBaseDAO::search(new DocumentoBase(array("nombre" => $nombre))); if (sizeof($q) > 0) { throw new InvalidDataException("Ya existe un documento con este nombre."); } $nDoc = new DocumentoBase(); $nDoc->setJsonImpresion(json_encode($json_impresion)); $nDoc->setNombre($nombre); $nDoc->setActivo($activo); $nDoc->setIdEmpresa($id_empresa); $nDoc->setIdSucursal($id_sucursal); $nDoc->setUltimaModificacion(time()); $nDoc->setNombrePlantilla($nombre_plantilla); //Es aconsejable agregar un token al nombre de la plantilla y modificar el nombre del archivo con este nuevo token para evitar sobreescribirlo try { DocumentoBaseDAO::save($nDoc); } catch (Exception $e) { throw new InvalidDatabaseOperationException($e); } if (!is_null($extra_params)) { for ($i = 0; $i < sizeof($extra_params); $i++) { if (!isset($extra_params[$i]->obligatory)) { $extra_params[$i]->obligatory = FALSE; } $paramStruct = new ExtraParamsEstructura(); // // Si el tipo de parametro extra es enum, // se debio enviar tambien 'enum', validar // que sea un json if ($extra_params[$i]->type == "enum") { if (!isset($extra_params[$i]->enum)) { throw new InvalidDataException("Falta enum"); } $paramStruct->setEnum($extra_params[$i]->enum); } $paramStruct->setTabla("documento_base-" . $nDoc->getIdDocumentoBase()); $paramStruct->setCampo(str_replace(" ", "_", $extra_params[$i]->desc)); $paramStruct->setTipo($extra_params[$i]->type); $paramStruct->setLongitud(256); $paramStruct->setObligatorio($extra_params[$i]->obligatory); $paramStruct->setCaption($extra_params[$i]->desc); $paramStruct->setDescripcion($extra_params[$i]->desc); try { ExtraParamsEstructuraDAO::save($paramStruct); } catch (Exception $e) { Logger::error($e); throw new InvalidDatabaseOperationException($e); } } } Logger::log("Se ha creado el documento base id=" . $nDoc->getIdDocumentoBase()); return array("id_documento_base" => $nDoc->getIdDocumentoBase()); }
public static function NuevaColumnaBd($campo, $caption, $obligatorio, $tabla, $tipo, $descripcion = "", $longitud = "") { //busquemos que exista la tabla switch ($tabla) { case "clientes": break; default: throw new InvalidDataException("No puede crear una nueva columna para la tabla {$tabla}"); } //veamos que no exista la combinacion de tabla-campo //validar tipo y longitud //crear objeto $ncbd = new ExtraParamsEstructura(); $ncbd->setTabla($tabla); $ncbd->setCampo($campo); $ncbd->setTipo($tipo); $ncbd->setLongitud($longitud); $ncbd->setObligatorio($obligatorio); $ncbd->setCaption($caption); $ncbd->setDescripcion($descripcion); //insertar try { ExtraParamsEstructuraDAO::save($ncbd); } catch (Exception $e) { throw new InvalidDataException("El campo `" . $campo . "` ya existe en esta tabla."); } return array("id_columna" => $ncbd->getIdExtraParamsEstructura()); }