Changeset 65 in main


Ignore:
Timestamp:
07/05/10 13:22:31 (11 years ago)
Author:
pjoulaud
Message:

Addition of files upload/deletion in a document

Location:
trunk/openPLM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/plmapp/controllers.py

    r63 r65  
    848848                    self.detach_part(part) 
    849849 
     850 
     851    def update_file(self, formset): 
     852        u""" 
     853        Updates uploaded file informations with data from *formset* 
     854         
     855        :param formset: 
     856        :type formset: a modelfactory_formset of  
     857                        :class:`~plmapp.forms.ModifyFileForm` 
     858        """ 
     859        if formset.is_valid(): 
     860            for form in formset.forms: 
     861                document = form.cleaned_data["document"] 
     862                if document.pk != self.document.pk: 
     863                    raise ValueError("Bad document %s (%s expected)" % (document, self.object)) 
     864                delete = form.cleaned_data["delete"] 
     865                filename = form.cleaned_data["id"] 
     866                if delete: 
     867                    self.delete_file(filename) 
     868 
     869                     
     870 
  • trunk/openPLM/plmapp/forms.py

    r60 r65  
    153153    return formset 
    154154 
     155 
     156 
     157 
     158 
     159class AddFileForm(forms.Form): 
     160    filename = forms.FileField() 
     161     
     162class ModifyFileForm(forms.ModelForm): 
     163    delete = forms.BooleanField(required=False, initial=False) 
     164    document = forms.ModelChoiceField(queryset=m.Document.objects.all(), 
     165                                   widget=forms.HiddenInput()) 
     166    class Meta: 
     167        model = m.DocumentFile 
     168        fields = ["document"] 
     169         
     170def get_file_formset(controller, data=None): 
     171    Formset = modelformset_factory(m.DocumentFile, form=ModifyFileForm, extra=0) 
     172    if data is None: 
     173        queryset = controller.files 
     174        formset = Formset(queryset=queryset) 
     175    else: 
     176        formset = Formset(data=data) 
     177    return formset 
     178 
     179 
     180 
     181 
  • trunk/openPLM/plmapp/views.py

    r61 r65  
    402402    context_dict.update(var_dict) 
    403403    return render_to_response('DisplayObjectDocCad.htm', context_dict) 
     404     
     405     
     406 
     407    if not hasattr(obj, "get_attached_parts"): 
     408        # TODO 
     409        raise TypeError() 
     410    if request.method == "POST": 
     411        print request.POST.items() 
     412        formset = get_rel_part_formset(obj, request.POST) 
     413        if formset.is_valid(): 
     414            obj.update_rel_part(formset) 
     415            return HttpResponseRedirect(".") 
     416    else: 
     417        formset = get_rel_part_formset(obj) 
     418    object_rel_part_list = obj.get_attached_parts() 
     419    context_dict = init_context_dict(object_type_value, object_reference_value, object_revision_value) 
     420    context_dict.update({'current_page':'parts', 'class4div': class_for_div, 'object_menu': menu_list, 'object_rel_part': object_rel_part_list, 'rel_part_formset': formset}) 
     421    var_dict, request_dict = display_global_page(request) 
     422    request.session.update(request_dict) 
     423    context_dict.update(var_dict) 
     424    return render_to_response('DisplayObjectRelPart.htm', context_dict) 
     425 
    404426 
    405427##########################################################################################     
     
    446468        class_for_div="NavigateBox4Part" 
    447469    menu_list = obj.menu_items 
    448  
    449470    if not hasattr(obj, "get_attached_parts"): 
    450471        # TODO 
     
    458479    else: 
    459480        formset = get_rel_part_formset(obj) 
    460  
    461481    object_rel_part_list = obj.get_attached_parts() 
    462482    context_dict = init_context_dict(object_type_value, object_reference_value, object_revision_value) 
     
    510530        class_for_div="NavigateBox4Part" 
    511531    menu_list = obj.menu_items 
    512     object_files_list = [('essais-endurance.pdf', 120, False), ('rapport-essais.odf', 45, True)] 
    513     context_dict = init_context_dict(object_type_value, object_reference_value, object_revision_value) 
    514     context_dict.update({'current_page':'files', 'class4div': class_for_div, 'object_menu': menu_list, 'object_files': object_files_list}) 
     532 
     533    if not hasattr(obj, "files"): 
     534        # TODO 
     535        raise TypeError() 
     536    if request.method == "POST": 
     537        formset = get_file_formset(obj, request.POST) 
     538        if formset.is_valid(): 
     539            obj.update_file(formset) 
     540            return HttpResponseRedirect(".") 
     541    else: 
     542        formset = get_file_formset(obj) 
     543 
     544    object_files_list = obj.files 
     545    context_dict = init_context_dict(object_type_value, object_reference_value, object_revision_value) 
     546    context_dict.update({'current_page':'files', 'class4div': class_for_div, 'object_menu': menu_list, 'object_files': object_files_list, 'file_formset': formset}) 
    515547    var_dict, request_dict = display_global_page(request) 
    516548    request.session.update(request_dict) 
     
    518550    return render_to_response('DisplayObjectFiles.htm', context_dict) 
    519551 
     552########################################################################################## 
     553@login_required 
     554def add_file(request, object_type_value, object_reference_value, object_revision_value): 
     555    """ Manage html page for file addition in the document""" 
     556    context_dict = init_context_dict(object_type_value, object_reference_value, object_revision_value) 
     557    obj = get_obj(object_type_value, object_reference_value, object_revision_value) 
     558    if isinstance(obj, DocumentController): 
     559        class_for_div="NavigateBox4Doc" 
     560    else: 
     561        class_for_div="NavigateBox4Part" 
     562    menu_list = obj.menu_items 
     563    var_dict, request_dict = display_global_page(request) 
     564    request.session.update(request_dict) 
     565    context_dict.update(var_dict) 
     566    if request.POST: 
     567        print request.FILES 
     568        add_file_form_instance = AddFileForm(request.POST, request.FILES) 
     569        if add_file_form_instance.is_valid(): 
     570            obj.add_file(request.FILES["filename"]) 
     571            context_dict.update({'object_menu': menu_list, 'add_file_form': add_file_form_instance, }) 
     572            return HttpResponseRedirect("/object/%s/%s/%s/files/" \ 
     573                                        % (object_type_value, object_reference_value, object_revision_value) ) 
     574        else: 
     575            add_file_form_instance = AddFileForm(request.POST) 
     576            context_dict.update({'class4search_div': True, 'class4div': class_for_div, 'object_menu': menu_list, 'add_file_form': add_file_form_instance, }) 
     577            return render_to_response('DisplayRelPartAdd.htm', context_dict) 
     578    else: 
     579        add_file_form_instance = AddFileForm() 
     580        context_dict.update({'class4search_div': True, 'class4div': class_for_div, 'object_menu': menu_list, 'add_file_form': add_file_form_instance, }) 
     581        return render_to_response('DisplayFileAdd.htm', context_dict) 
    520582 
    521583########################################################################################## 
  • trunk/openPLM/templates/DisplayObjectFiles.htm

    r54 r65  
    44 
    55{% block content %} 
    6  
    7         <input type="submit" value="ADD"><input type="submit" value="DELETE"><br> 
    8         <br> 
    9         <table class="Content"> 
    10         {% for object_file_name, object_file_size, object_file_is_locked in object_files %} 
    11                 <tr class="Content"> 
    12                                 <td class="Content"><input type="checkbox" name="ToBeDeleted"/></td> 
    13                                 <td class="Content"> 
    14                                     {% if object_file_is_locked %} 
    15                                         <img src="/media/img/verrou_ferme.gif" title="Unlock" alt="Unlock" width="20" height="20"/> 
    16                                 {% else %} 
    17                                     <img src="/media/img/verrou_ouvert.jpg" title="Unlock" alt="Unlock" width="20" height="20"/> 
    18                                 {% endif %} 
    19                             </td> 
    20                                 <td class="Content">{{object_file_name}}</td> 
    21                                 <td class="Content">{{object_file_size}}</td> 
    22                                 <td class="Content"><input type="submit" value="DOWNLOAD"></td> 
    23                                 <td class="Content"><input type="submit" value="CHECKOUT"></td> 
    24                 </tr>    
    25         {% endfor %} 
    26         </table> 
     6    <form method="POST" action="./add/"> 
     7        <input type="submit" value="ADD"> 
     8    </form> 
     9    <form method="POST" action=""> 
     10        {{ file_formset.management_form }} 
     11            <br /> 
     12            <table class="Content"> 
     13                    <tr class="Content"> 
     14                        {% for form in file_formset.forms %} 
     15                {{ form.id }} 
     16                {{ form.document }} 
     17                            <td class="Content">{{ form.delete }}</td> 
     18                            <td class="Content"> 
     19                                {% if form.instance.locked %} 
     20                                    <img src="/media/img/verrou_ferme.gif" title="Unlock" alt="Unlock" width="20" height="20"/> 
     21                            {% else %} 
     22                                <img src="/media/img/verrou_ouvert.jpg" title="Unlock" alt="Unlock" width="20" height="20"/> 
     23                            {% endif %} 
     24                        </td> 
     25                            <td class="Content">{{form.instance.filename}}</td> 
     26                            <td class="Content">{{form.instance.size}}</td> 
     27                            <td class="Content"><input type="submit" value="DOWNLOAD"></td> 
     28                            <td class="Content"><input type="submit" value="CHECKOUT"></td> 
     29                    </tr> 
     30            {% endfor %} 
     31                <tr> 
     32                        <td></td> 
     33                        <td></td> 
     34                    <td><input type="submit" value="DELETE"></td> 
     35            </tr> 
     36            </table> 
     37    </form> 
    2738{% endblock %} 
    2839 
  • trunk/openPLM/urls.py

    r60 r65  
    2828    (r'^object/([^/]+)/([^/]+)/([^/]+)/parts/add/$', add_rel_part), 
    2929    (r'^object/([^/]+)/([^/]+)/([^/]+)/files/$', display_files), 
     30    (r'^object/([^/]+)/([^/]+)/([^/]+)/files/add/$', add_file), 
    3031    (r'^object/([^/]+)/([^/]+)/([^/]+)/modify/$', modify_object), 
    3132    (r'^object/create/$', create_object), 
Note: See TracChangeset for help on using the changeset viewer.