예제 #1
0
 function remove($plan)
 {
     if ($this->countUsuarios($plan) > 0) {
         AppError::write(AppError::PLAN_USO_CANT_DELETE);
     }
     $id = is_object($plan) ? $plan->id : $plan;
     $query = "DELETE FROM usuarios_planes where id = ?";
     return DB::prepareExecute($query, array($id));
 }
예제 #2
0
function cifrasExceptionHandler(Exception $e)
{
    global $app;
    $app->getLog()->error($e);
    if ($e instanceof PDOException && $e->getCode() == '2002') {
        AppError::write(AppError::DB_CONNECTION);
    } else {
        AppError::internal(AppError::GENERIC_ERROR, $e->getMessage());
    }
}
 function importar($concepto, $toParent)
 {
     try {
         DB::beginTransaction();
         $importado = $this->importador->importar($concepto, $toParent);
         DB::commit();
         return $importado;
     } catch (exception $e) {
         DB::rollBack();
         AppError::write($e->getMessage(), $concepto);
     }
 }
 private function security()
 {
     $idModelo = $_REQUEST['id_modelo'];
     $modo = $_REQUEST['modo'];
     if (!isset($modo) || !isset($idModelo)) {
         AppError::write(AppError::PARAMS_NOT_VALID);
     }
     if ($modo == 'model') {
         $this->app->loginService->mustHave(AppPermisos::MAESTRO);
     } else {
         if ($modo == 'user') {
             $this->app->loginService->mustOwnerObra($idModelo);
         } else {
             AppError::write(AppError::PARAMS_NOT_VALID);
         }
     }
 }
예제 #5
0
 protected function copyModelo($modelo, $nuevoNombre)
 {
     $query = "SELECT * FROM " . $this->fromTables->modelos . " WHERE id = ?";
     $original = DB::prepareExecuteFetch($query, array($modelo->id));
     unset($original->id);
     if ($this->toType == TYPES::MODEL) {
         // es un MODELO
         $original->visible = 0;
     } else {
         // es una OBRA
         // las obras no tienen atributo visible, solo es para los modelos
         unset($original->visible);
         //se setea el id_usuario
         if (!isset($modelo->id_usuario)) {
             AppError::write(AppError::OBRA_WIDTOUT_OWNER);
         }
         $original->id_usuario = $modelo->id_usuario;
     }
     if (isset($nuevoNombre)) {
         $original->nombre = $nuevoNombre;
     }
     $original->id = ABM2::save($this->toTables->modelos, $original);
     return $original;
 }
예제 #6
0
 /**
  * @array array de conceptos
  * @parent id del nodo superior
  * @model id del modelo
  */
 function saveBatch($array, $parent, $modelo = null)
 {
     //TODO: crear en ABM2 batch de update, insert y delete
     $ret = array();
     $removedIds = array();
     $addedIds = array();
     $toImport = array();
     // guarda o elimina los conceptos
     foreach ($array as $key => $rec) {
         $toReplace = isset($rec->replace) && $rec->replace;
         $toDelete = isset($rec->deleted) && $rec->deleted;
         $toClonar = isset($rec->clonar) && $rec->clonar;
         unset($rec->replace);
         unset($rec->deleted);
         unset($rec->clonar);
         if ($toReplace && !$toDelete) {
             //PARA REEMPLAZAR, SE BORRA EL ACTUAL ID Y SE CREA COMO NUEVO
             $copy = clone $rec;
             //SE BORRA
             $this->interalRemoveBath($rec, $parent);
             // se agrega id para borrar la relaciones
             array_push($removedIds, $rec->id);
             //SE PREPARA LA COPIA COMO UN NUEVO REGISTRO
             unset($copy->id);
             unset($rec->replace);
             $rec = $copy;
         }
         if ($toDelete) {
             //SE BORRA
             $this->interalRemoveBath($rec, $parent);
             // se agrega id para borrar la relaciones
             array_push($removedIds, $rec->id);
             //cuando se borra un insumo, si ese tiene el id_maestro como null quiere decir que no esta asociado a la hora de publicar un precio
             //y se puede borrar direcatmene de la tabla conceptos_modelos y conceptos_usuarios
             if ($rec->id_maestro == null) {
                 parent::remove($rec);
             }
         } else {
             if ($toClonar) {
                 //PARA CLONAR, esto se da cuando se cambia el codigo del item
                 // clon del propio modelo u obra
                 $clonRec = $this->clonar($rec, $parent, $modelo);
                 // si no es el maestro, borrar el original / ¿hacer o dejar transparente?
             } else {
                 // PARA GUARDAR
                 //PARA DESVINCULAR ANALISIS
                 /*if(isset($rec->customPrecio) && $rec->customPrecio){
                 			unset($rec->customPrecio);
                 			$this->convertToInsumo($rec);
                 		}*/
                 //CONTINUA CON EL GUARDAR
                 if ($modelo) {
                     $rec->id_modelo = $modelo->id;
                 }
                 if (isset($rec->id_maestro) && $rec->id_maestro > 0 && (!isset($rec->id) || $rec->id == 0)) {
                     // PARA IMPORTAR. ES UNA IMPORTACION DEL MAESTRO
                     $toImport[] = $rec;
                     $rec->id = $rec->id_maestro;
                 } else {
                     if (isset($rec->customPrecio) && $rec->customPrecio && !$toDelete) {
                         //permite cambiar el precio de un insumo, esto lo hace desvinculando, clonando y luego borra el isumo original
                         unset($rec->customPrecio);
                         if ($rec->tipo = TYPES_CONCEPTOS::INSUMO) {
                             if ($this->type != TYPES::MASTER) {
                                 $clonRec = $this->clonar($rec, $parent, $modelo);
                                 array_push($removedIds, $rec->id);
                                 //$this->interalRemoveBath($rec,$parent);
                                 $this->removeRelations($parent, $rec->id);
                                 //desvincula el insumo del maestro para que no se actualize su precio al publicar
                                 $this->convertToInsumo($clonRec);
                             }
                         } else {
                             if ($rec->tipo = TYPES_CONCEPTOS::ANALISIS) {
                                 $this->convertToInsumo($rec);
                             }
                         }
                     } else {
                         // PARA GUARDAR
                         if (!isset($rec->tipo)) {
                             $rec->tipo = TYPES_CONCEPTOS::INSUMO;
                             $rec->id_familia = $this->idFamiliaDefault;
                         }
                         //chequea si tiene el identificador del cliente o front-end
                         // de esta forma se soluciona el bug #7235
                         if (isset($rec->cid)) {
                             $cid = $rec->cid;
                         }
                         unset($rec->cid);
                         $saved = parent::save($this->filterToSave($rec));
                         if (isset($cid)) {
                             // vuelve a poner el id del cliente
                             $saved->cid = $cid;
                         }
                         if (isset($parent)) {
                             // si existe el nodo padre se guarda.
                             // El unica caso que no existe, es para los analisis del maestro,
                             // donde se puede crear un analisis sin rubro
                             if (!isset($rec->id) || $saved->id != $rec->id) {
                                 // es un registro nuevo, la relación no existe, se inserta
                                 $rec->id = $saved->id;
                                 $this->insertRelation($parent, $rec, $modelo);
                             } else {
                                 //ya existe el registro, la relación tambien existe, se actualiza
                                 $this->updateRelation($parent, $rec, $modelo);
                             }
                         }
                         array_push($ret, $saved);
                     }
                 }
             }
         }
     }
     // elimina relaciones
     if (count($removedIds) > 0 && isset($parent)) {
         $this->removeRelations($parent, $removedIds);
     }
     //importacion de conceptos de maestros
     if (count($toImport) > 0) {
         if (!isset($parent)) {
             // no se puede importar un elemento si no tiene padre.
             AppError::write(AppError::IMPORT_WITHOUT_PARENT);
         }
         $importador = $this->app->newConceptoImportador;
         $importador->setType($this->type);
         $parent->modelo = $modelo;
         foreach ($toImport as $key => $item) {
             $importado = $importador->importar($item, $parent);
             if (isset($item->cid)) {
                 $importado->cid = $item->cid;
             }
             array_push($ret, $importado);
         }
     }
     if (isset($parent)) {
         // retorna los hijos del concepto parent
         $children = $this->getChildren($parent);
         $this->updateTipoConcepto($parent, $children);
         //seta los cid si existen
         foreach ($ret as $key => $itemSaved) {
             $child = $this->searchById($children, $itemSaved->id);
             if (isset($child)) {
                 $child->cid = $itemSaved->cid;
             }
         }
         return $children;
     } else {
         return $ret;
     }
 }
예제 #7
0
 public function error(Exception $argument = null)
 {
     AppError::write(AppError::GENERIC_ERROR, $e->getMessage());
 }
예제 #8
0
 function mustLogged()
 {
     $user = $this->getUserLogged();
     if (!isset($user)) {
         AppError::write(AppError::USER_NOT_LOGGED);
     }
 }
예제 #9
0
 public static function handleException($exception)
 {
     $errorHandler = AppError::getErrorHandler();
     $errorHandler::handleException($exception);
     //ErrorHandler::handleException($exception);
 }