/** * *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(); }