static function createProducto($productoDto) { $producto = new Producto(NULL, date("Y-m-d H:i:s", time()), TRUE, $productoDto->categoriaId, null, $productoDto->nombre, $productoDto->descripcion, $productoDto->orden, $productoDto->terminos); $transaction = NULL; $result = new Result(); $lastOrden = $productoDto->orden; try { $transaction = GenericDao::beginTransaction(); $productos = $data = BaseDao::getAllProductos(); if ($lastOrden == 0 || $lastOrden == null) { $lastOrden = Phinq::create($productos)->max(function ($item) { return $item->orden; }); $producto->orden = $lastOrden == null ? 1 : ++$lastOrden->orden; } else { $productosFiltered = Phinq::create($productos)->where(function ($item) use($productoDto) { return $item->orden >= $productoDto->orden; })->orderBy(function ($item) { return $item->orden; })->toArray(); foreach ($productosFiltered as $cf) { $lastOrden++; $cf->orden = $lastOrden; BaseDao::updateProducto($cf, $transaction); } } BaseDao::createCategoria($producto, $transaction); $transaction->commit(); } catch (\Exception $ex) { $transaction->rollBack(); $result->hasErrors = true; $result->messages = array($ex->getMessage()); } $response = new Response($result, NULL); return json_encode($response); }