public static function actualizarRegistros($tabla)
 {
     $estructura = ExtraParamsEstructuraDAO::search(new ExtraParamsEstructura(array("tabla" => $tabla)));
     $usuarios = UsuarioDAO::getAll();
     for ($i = 0; $i < sizeof($usuarios); $i++) {
         $valores = self::getVals($tabla, $usuarios[$i]->getIdUsuario());
         for ($e = 0; $e < sizeof($estructura); $e++) {
             $found = false;
             for ($v = 0; $v < sizeof($valores); $v++) {
                 if ($valores[$v]["campo"] == $estructura[$e]->getCampo()) {
                     $found = true;
                 }
             }
             if (!$found) {
                 $toInsert = new ExtraParamsValores();
                 $toInsert->setIdExtraParamsEstructura($estructura[$e]->getIdExtraParamsEstructura());
                 $toInsert->setIdPkTabla($usuarios[$i]->getIdUsuario());
                 $toInsert->setVal(null);
                 ExtraParamsValoresDAO::save($toInsert);
             }
         }
     }
 }
 /**
  *
  *Crea un nuevo documento.
  *
  * @param id_documento_base int el documento base del cual este documento es instancia
  * @param extra_params 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 int Id del nuevo documento
  **/
 public static function Nuevo($id_documento_base, $extra_params = null, $id_empresa = null, $id_sucursal = null)
 {
     $dbase = DocumentoBaseDAO::getByPK($id_documento_base);
     if (is_null($dbase)) {
         throw new InvalidDataException("This base doc does not exist");
     }
     $nDoc = new Documento();
     $nDoc->setIdDocumentoBase($id_documento_base);
     $nDoc->setFolio(0);
     $nDoc->setFecha(time());
     $nDoc->setIdOperacion(0);
     DAO::transBegin();
     try {
         DocumentoDAO::save($nDoc);
     } catch (Exception $e) {
         DAO::transRollback();
         throw InvalidDatabaseOperationException($e);
     }
     //test all extra params in base doc are present in $extra_params
     $pindb = ExtraParamsEstructuraDao::search(new ExtraParamsEstructura(array("tabla" => "documento_base-" . $id_documento_base)));
     foreach ($pindb as $campo) {
         if (!array_key_exists($campo->getCampo(), $extra_params)) {
             //no existe en extra params
             //salir si este parametro es
             //obligatorio
             if ($campo->getObligatorio()) {
                 throw new InvalidDataException("El campo " . $campo->getObligatorio() . " es obligatorio");
             }
         } else {
             $valueToStore = $extra_params->{$campo->getCampo()};
             $valueToStore = is_null($valueToStore) ? "" : $valueToStore;
             $val = new ExtraParamsValores(array("id_extra_params_estructura" => $campo->getIdExtraParamsEstructura(), "id_pk_tabla" => $nDoc->getIdDocumento(), "val" => $valueToStore));
             try {
                 ExtraParamsValoresDAO::save($val);
             } catch (Exception $e) {
                 DAO::transRollback();
                 throw new InvalidDatabaseOperationException($e);
             }
         }
     }
     //foreach
     DAO::transEnd();
 }