Esempio n. 1
0
    def delete_item(self, item_id):
        from app.notes.model import Note
        from app.tasks.model import Task
        # from app.milestones.model import Milestone
        # from app.worklog.model import Worklog

        # --- delete -> merge all the stuff to its parents
        category = None
        try:
            category = self.read_item(item_id)
            # if category.parent:
            # parent = self.read_item(category.parent)
        except Category.DoesNotExist:
            raise components.ResourceNotFoundError()

        parent = category.parent

        # merge
        # We need to have an event dispatch-thingy to notify all the depending modules to move around
        user_id = components.current_user_id()
        with components.DB.atomic():
            for clazz in [Note, Task
                          # , Milestone
                          ]:
                # Why can't you just simply update?
                # clazz.update(
                #     category=parent,  # parent.id if parent else None,
                #     edited=datetime.now()
                # ).where(
                #     clazz.category == category,  # under normal circumstances, it can't be None
                # ).execute()
                for obj in clazz.select(clazz).join(
                        components.BaseUser,
                        on=(clazz.owner == components.BaseUser.id)
                ).join(Category, on=(clazz.category == Category.id)).where(
                        clazz.category.id == category.
                        id,  # under normal circumstances, it can't be None
                        clazz.owner.id == user_id):
                    obj.category = parent
                    obj.changed()
                    obj.save()  # :/

            # Why can't you simply update?
            # Category.update(
            #     parent_id=parent.id,
            #     edited=datetime.now()
            # ).where(
            #     Category.parent == category,
            # ).execute()

            Parent = Category.alias()
            for child in Category.select(Category).join(
                    components.BaseUser,
                    on=(Category.owner == components.BaseUser.id)).join(
                        Parent, on=(Category.parent == Parent.id)).where(
                            Parent.id == category.
                            id,  # under normal circumstances, it can't be None
                            Category.owner.id == user_id):
                child.parent = parent
                child.changed()
                child.save()

            category.is_deleted = True
            category.changed()
            category.save()

            # TODO: recalculate path for parent
            # self._flatten_tree_order(user_id)
            return category
Esempio n. 2
0
 def fetch_all_items(self):
     return Category.select().where(Category.is_deleted == False).order_by(
         Category.order)