public static function setVals($tabla, $extra_params, $fk_id)
 {
     $es = new ExtraParamsEstructura(array("tabla" => $tabla));
     $extraParamsEstruct = ExtraParamsEstructuraDAO::search($es);
     if (sizeof($extraParamsEstruct) == 0) {
         return false;
     }
     if (is_array($extra_params)) {
         $extra_params = (object) $extra_params;
     }
     if (is_null($extra_params)) {
         $extra_params = new StdClass();
     }
     for ($nc = 0; $nc < sizeof($extraParamsEstruct); $nc++) {
         $campo = $extraParamsEstruct[$nc]->getCampo();
         if (property_exists($extra_params, $campo)) {
             // Extra param se envio
             $v = ExtraParamsValoresDAO::search(new ExtraParamsValores(array("id_extra_params_estructura" => $extraParamsEstruct[$nc]->getIdExtraParamsEstructura(), "id_pk_tabla" => $fk_id)));
             if (sizeof($v) == 1) {
                 $v = $v[0];
                 $v->setVal($extra_params->{$campo});
             } else {
                 $v = new ExtraParamsValores();
                 $v->setVal($extra_params->{$campo});
                 $v->setIdPkTabla($fk_id);
                 $v->setIdExtraParamsEstructura($extraParamsEstruct[$nc]->getIdExtraParamsEstructura());
             }
         } else {
             // Extra params existe pero no se envio
             $v = new ExtraParamsValores();
             $v->setVal(NULL);
             $v->setIdPkTabla($fk_id);
             $v->setIdExtraParamsEstructura($extraParamsEstruct[$nc]->getIdExtraParamsEstructura());
         }
         try {
             ExtraParamsValoresDAO::save($v);
         } catch (Exception $e) {
             throw $e;
         }
     }
 }
 /**
  *
  *Editar un documento
  *
  * @param extra_params json 
  * @param id_documento int 
  **/
 public static function Editar($extra_params, $id_documento)
 {
     $nDoc = DocumentoDAO::getByPK($id_documento);
     $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-" . $nDoc->getIdDocumentoBase())));
     foreach ($pindb as $campo) {
         $valores = ExtraParamsValoresDAO::search(new ExtraParamsValores(array("id_extra_params_estructura" => $campo->getIdExtraParamsEstructura(), "id_pk_tabla" => $id_documento)));
         if (sizeof($valores) == 0) {
             $valores = new ExtraParamsValores();
         } else {
             $valores = $valores[0];
         }
         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_extra_params
             			"id_pk_tabla"					=>  $nDoc->getIdDocumento(),// id_documento
             			"val"							=>  $valueToStore
             		));*/
             $valores->setVal($valueToStore);
             try {
                 ExtraParamsValoresDAO::save($valores);
             } catch (Exception $e) {
                 DAO::transRollback();
                 throw new InvalidDatabaseOperationException($e);
             }
         }
     }
     //foreach
     DAO::transEnd();
 }