static function updateForm($formDto) { $form = FormDao::getById($formDto->id); $lastTemplate = json_decode(FormDao::getFormTemplate($formDto->id)->template); $transaction = NULL; try { $transaction = GenericDao::beginTransaction(); //region Form $template = new FormTemplate(NULL, date("Y-m-d H:i:s", time()), TRUE, $form->id, json_encode($formDto)); $form->currentTemplateId = FormDao::createFormTemplate($template, $transaction); $form->title = $formDto->title; $form->updateDate = date("Y-m-d H:i:s", time()); $form->enabled = $formDto->enabled; FormDao::updateForm($form, $transaction); //endregion //region Productos $currentProductos = BaseDao::getProductosByFormId($formDto->id); $newProductos = $formDto->productos; $productosToAdd = Phinq::create($newProductos)->where(function ($item) use($currentProductos) { return !Phinq::create($currentProductos)->any(function ($id) use($item) { return $id == $item; }); })->toArray(); $productosToDelete = Phinq::create($currentProductos)->where(function ($item) use($newProductos) { return !Phinq::create($newProductos)->any(function ($id) use($item) { return $id == $item; }); })->toArray(); foreach ($productosToAdd as $productoId) { $producto = BaseDao::getProductoById($productoId); $producto->formularioId = $formDto->id; BaseDao::updateProducto($producto, $transaction); } foreach ($productosToDelete as $productoId) { $producto = BaseDao::getProductoById($productoId); $producto->formularioId = null; BaseDao::updateProducto($producto, $transaction); } //endregion //region Model $columns = FormAdmin::getNewFormColumns($formDto, $lastTemplate); FormDao::updateEntryModel($form->id, $columns, $transaction); //endregion $transaction->commit(); } catch (\Exception $ex) { $transaction->rollBack(); } $result = new Response(new Result(), NULL); return json_encode($result); }