Exemple #1
0
def handle_documents(request, owner_name=None):
    """
    Display a Model Formset for Documents of all labels.

    Allow Save or Delete.

    BUG : Description disappears after a transaction.
    """

    page_owner = get_page_owner(request, owner_name)

    DocumentFormSet = modelformset_factory(
        Document,
        form=DocumentForm,
        extra=1,
        can_delete=True,
    )

    dfs_list = []

    if request.method == 'POST':
        is_form_valid = True
        for label in doc_label_list:
            dfs_list.append(
                DocumentFormSet(
                    request.POST,
                    request.FILES,
                    prefix=label,
                    queryset=Document.objects.filter(label__name=label)))
            is_form_valid = is_form_valid and dfs_list[-1].is_valid()

        if is_form_valid:
            for dfs in dfs_list:
                # From Django 1.3, FileField files won't get deleted, only
                # the model object will. So, we do it ourselves.
                for form in dfs.deleted_forms:
                    delete_this_file(
                        os.path.join(settings.MEDIA_ROOT,
                                     form.instance.document.name))
                documents = dfs.save(commit=False)
                for document in documents:
                    print 'Document : ', document
                    document.uploader = page_owner
                    document.label = Label.objects.get(name=dfs.prefix)
                    document.save()
            return redirect('tasks.views.handle_documents', owner_name)

    dfs_list = []
    for label in doc_label_list:
        dfs_list.append(
            DocumentFormSet(
                prefix=label,
                queryset=Document.objects.filter(label__name=label)))
    dfs_heading_list = zip(dfs_list, doc_heading_list)
    return render_to_response('tasks/documents.html',
                              locals(),
                              context_instance=global_context(request))
Exemple #2
0
def handle_task_documents (request, owner_name = None, task_id = None, other_errors = False, only_validity = False):
    """
    Display a Inline Formset of Documents. Save or delete as required.

    Status :
    Invalid - for invalid document form(s)
    Success - successful upload
    Valid - Blank or valid formset

    only_validity : If True, only check whether the formset is valid
    or not and return formset and status

    other_errors : supposed to make the file field hold its value if
    there is some error in Tasks / SubTasks. Not working.

    Return the formset, status.
    """
    page_owner = get_page_owner (request, owner_name)

    TaskDocumentFormSet = inlineformset_factory (Task,
                                                 TaskDocument,
                                                 form = TaskDocumentForm,
                                                 extra = 2,
                                                 can_delete = True) 
    if task_id is not None:
        curr_task = Task.objects.get (id = task_id)
    else:
        curr_task = None
    status = 'OK'

    if request.method == 'POST':
        tdfs = TaskDocumentFormSet (request.POST,
                                    request.FILES,
                                    instance = curr_task)
        if only_validity:
            if tdfs.is_valid ():
                return tdfs, 'Valid'
            return tdfs, 'Invalid'
        if not other_errors:
            if tdfs.is_valid ():
                # From Django 1.3, FileField files won't get deleted, only
                # the model object will. So, we do it ourselves.
                for form in tdfs.deleted_forms:
                    delete_this_file (os.path.join (settings.MEDIA_ROOT,
                                                    form.instance.document.name))
                documents = tdfs.save (commit = False)
                for document in documents:
                    print 'Document : ', document
                    document.uploader = page_owner
                    document.save ()
                status = 'Success'
            else:
                # In case the formset isn't valid
                status = 'Invalid'
    if not other_errors and status != 'Invalid':
        tdfs = TaskDocumentFormSet (instance = curr_task)
    return tdfs, status
Exemple #3
0
def handle_documents (request, owner_name = None):
    """
    Display a Model Formset for Documents of all labels.

    Allow Save or Delete.

    BUG : Description disappears after a transaction.
    """

    page_owner = get_page_owner (request, owner_name)

    DocumentFormSet = modelformset_factory (
        Document,
        form = DocumentForm,
        extra = 1,
        can_delete = True,) 

    dfs_list = []

    if request.method == 'POST':
        is_form_valid = True
        for label in doc_label_list:
            dfs_list.append (DocumentFormSet (request.POST,
                                              request.FILES,
                                              prefix   = label,
                                              queryset = Document.objects.filter (
                                                  label__name = label)))
            is_form_valid = is_form_valid and dfs_list[-1].is_valid ()

        if is_form_valid:
            for dfs in dfs_list:
                # From Django 1.3, FileField files won't get deleted, only
                # the model object will. So, we do it ourselves.
                for form in dfs.deleted_forms:
                    delete_this_file (os.path.join (settings.MEDIA_ROOT,
                                                    form.instance.document.name))
                documents = dfs.save (commit = False)
                for document in documents:
                    print 'Document : ', document
                    document.uploader = page_owner
                    document.label = Label.objects.get (name = dfs.prefix)
                    document.save ()
            return redirect ('tasks.views.handle_documents', owner_name)

    dfs_list = []
    for label in doc_label_list:
        dfs_list.append (DocumentFormSet (prefix = label,
                                          queryset = Document.objects.filter (
                                              label__name = label)))
    dfs_heading_list = zip (dfs_list, doc_heading_list)
    return render_to_response('tasks/documents.html',
                              locals(),
                              context_instance = global_context (request))
Exemple #4
0
    def save_all(self, user, commit=True):
        """
        Save all formsets and along with their nested formsets and
        nested comment form.
        """

        print 'In save_all'
        # Save without committing (so self.saved_forms is populated)
        # -- We need self.saved_forms so we can go back and access
        #    the nested formsets
        objects = self.save(commit=False)

        # Save each instance if commit=True
        if commit:
            for o in objects:
                o.save()

        # save many to many fields if needed
        if not commit:
            self.save_m2m()

        # save the nested formsets
        for form in set(self.initial_forms + self.saved_forms):
            if self.should_delete(form): continue

            # Docs to be deleted
            for doc_form in form.nested_docs.deleted_forms:
                # From Django 1.3, FileField files won't get deleted, only
                # the model object will. So, we do it ourselves.
                delete_this_file(
                    os.path.join(settings.MEDIA_ROOT,
                                 doc_form.instance.document.name))
            # Docs to be saved
            curr_docs = form.nested_docs.save(commit=False)
            for doc in curr_docs:
                doc.uploader = user
                if commit:
                    doc.save()
            print 'Curr Docs : ', curr_docs

            # Save the comment form (if it isn't empty)
            if form.nested_comment.cleaned_data['comment_string'] != '':
                curr_comment = form.nested_comment.save(commit=False)
                curr_comment.author = user
                curr_comment.subtask = form.instance
                if commit:
                    curr_comment.save()
Exemple #5
0
    def save_all(self, user, commit=True):
        """
        Save all formsets and along with their nested formsets and
        nested comment form.
        """

        print 'In save_all'
        # Save without committing (so self.saved_forms is populated)
        # -- We need self.saved_forms so we can go back and access
        #    the nested formsets
        objects = self.save(commit=False)
 
        # Save each instance if commit=True
        if commit:
            for o in objects:
                o.save()
 
        # save many to many fields if needed
        if not commit:
            self.save_m2m()
 
        # save the nested formsets
        for form in set(self.initial_forms + self.saved_forms):
            if self.should_delete(form): continue
 
            # Docs to be deleted
            for doc_form in form.nested_docs.deleted_forms:
                # From Django 1.3, FileField files won't get deleted, only
                # the model object will. So, we do it ourselves.
                delete_this_file (os.path.join (settings.MEDIA_ROOT,
                                                doc_form.instance.document.name))
            # Docs to be saved
            curr_docs = form.nested_docs.save(commit = False)
            for doc in curr_docs:
                doc.uploader = user
                if commit:
                    doc.save ()
            print 'Curr Docs : ', curr_docs

            # Save the comment form (if it isn't empty)
            if form.nested_comment.cleaned_data['comment_string'] != '':
                curr_comment = form.nested_comment.save (commit = False)
                curr_comment.author = user
                curr_comment.subtask = form.instance
                if commit:
                    curr_comment.save ()
Exemple #6
0
def handle_task_documents(request,
                          owner_name=None,
                          task_id=None,
                          other_errors=False,
                          only_validity=False):
    """
    Display a Inline Formset of Documents. Save or delete as required.

    Status :
    Invalid - for invalid document form(s)
    Success - successful upload
    Valid - Blank or valid formset

    only_validity : If True, only check whether the formset is valid
    or not and return formset and status

    other_errors : supposed to make the file field hold its value if
    there is some error in Tasks / SubTasks. Not working.

    Return the formset, status.
    """
    page_owner = get_page_owner(request, owner_name)

    TaskDocumentFormSet = inlineformset_factory(Task,
                                                TaskDocument,
                                                form=TaskDocumentForm,
                                                extra=2,
                                                can_delete=True)
    if task_id is not None:
        curr_task = Task.objects.get(id=task_id)
    else:
        curr_task = None
    status = 'OK'

    if request.method == 'POST':
        tdfs = TaskDocumentFormSet(request.POST,
                                   request.FILES,
                                   instance=curr_task)
        if only_validity:
            if tdfs.is_valid():
                return tdfs, 'Valid'
            return tdfs, 'Invalid'
        if not other_errors:
            if tdfs.is_valid():
                # From Django 1.3, FileField files won't get deleted, only
                # the model object will. So, we do it ourselves.
                for form in tdfs.deleted_forms:
                    delete_this_file(
                        os.path.join(settings.MEDIA_ROOT,
                                     form.instance.document.name))
                documents = tdfs.save(commit=False)
                for document in documents:
                    print 'Document : ', document
                    document.uploader = page_owner
                    document.save()
                status = 'Success'
            else:
                # In case the formset isn't valid
                status = 'Invalid'
    if not other_errors and status != 'Invalid':
        tdfs = TaskDocumentFormSet(instance=curr_task)
    return tdfs, status