Changeset 1107 in main


Ignore:
Timestamp:
05/21/12 14:36:04 (7 years ago)
Author:
pcosquer
Message:

bom: edit: add a link to replace a part with another one

Location:
trunk/openPLM
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/document3D/models.py

    r1072 r1107  
    931931            locations=list(Location_link.objects.filter(link=list_link[i])) 
    932932            if locations:  
    933                  
    934                 Doc3D=Document3D.objects.filter(PartDecompose=list_link[i].child) 
     933                # FIXME: what to do if there are several document3D attached 
     934                Doc3D = DocumentPartLink.objects.filter(document__type="Document3D", 
     935                        part=list_link[i].child).order_by("-ctime") 
    935936                if Doc3D.exists(): 
    936                     STP_file=Doc3D[0].files.filter(is_stp) 
     937                    STP_file=Doc3D[0].document.files.filter(is_stp) 
    937938                    if STP_file.exists(): 
    938939                        stp_related.append(STP_file[0]) 
  • trunk/openPLM/plmapp/controllers/part.py

    r965 r1107  
    217217                ext.save() 
    218218        return link2 
     219 
     220    def replace_child(self, link, new_child): 
     221        """ 
     222        Replaces a child by another one. 
     223 
     224        :param link: link being replaced, its data (extensions included) 
     225                     are copied 
     226        :type link: :class:`.ParentChildLink` 
     227        :param new_child: the new child 
     228        :type new_child: :class:`.Part` 
     229 
     230        :raises: :exc:`ValueError` if the link is invalid (already completed 
     231                 or its parent is not the current object) 
     232        :raises: all permissions raised by :meth:`check_add_child` 
     233        """ 
     234        if link.end_time != None or link.parent_id != self.id: 
     235            raise ValueError("Invalid link") 
     236        if isinstance(new_child, PLMObjectController): 
     237            new_child = new_child.object 
     238        if link.child == new_child: 
     239            return link 
     240        self.check_add_child(new_child) 
     241        link.end_time = datetime.datetime.today() 
     242        link.save() 
     243        # make a new link 
     244        link2, extensions = link.clone(child=new_child, end_time=None) 
     245        details = u"Child changes from %s to %s" % (link.child, new_child) 
     246        self._save_histo("Modify - %s" % link.ACTION_NAME, details) 
     247        link2.save(force_insert=True) 
     248        # save cloned extensions 
     249        for ext in extensions: 
     250            ext.link = link2 
     251            ext.save(force_insert=True) 
     252        return link2        
    219253 
    220254    def get_children(self, max_level=1, date=None, 
  • trunk/openPLM/plmapp/views/main.py

    r1105 r1107  
    764764    return r2r('parts/bom_edit.html', ctx, request) 
    765765 
     766 
     767@handle_errors(undo="../..") 
     768def replace_child(request, obj_type, obj_ref, obj_revi, link_id): 
     769    """ 
     770    View to replace a child by another one. 
     771 
     772    .. include:: views_params.txt  
     773    """ 
     774    link_id = int(link_id) 
     775    obj, ctx = get_generic_data(request, obj_type, obj_ref, obj_revi) 
     776    link = models.ParentChildLink.objects.get(id=link_id) 
     777    if request.method == "POST": 
     778        form = forms.AddRelPartForm(request.POST) 
     779        if form.is_valid(): 
     780            obj.replace_child(link, get_obj_from_form(form, request.user)) 
     781            return HttpResponseRedirect("../..") 
     782    else: 
     783        form = forms.AddRelPartForm() 
     784    ctx["replace_child_form"] = form 
     785    ctx["link"] = link 
     786    ctx["attach"] = (obj, "add_child") 
     787    ctx["link_creation"] = True 
     788    return r2r("parts/bom_replace.html", ctx, request) 
     789 
    766790##########################################################################################     
    767791@handle_errors 
     
    10121036        add_file_form = forms.AddFileForm(request.POST, request.FILES) 
    10131037        if add_file_form.is_valid(): 
    1014             for fkey, f in request.FILES.iteritems(): 
    1015                 obj.add_file(request.FILES[fkey]) 
     1038            for fkey, f in request.FILES.iteritems(): 
     1039                obj.add_file(request.FILES[fkey]) 
    10161040            return HttpResponse(".") 
    10171041 
     
    10301054        ret = str(os.path.getsize(f[0])) 
    10311055    if ret=="": 
    1032         ret="0 : waiting" 
    1033     else: 
    1034         if ret==request.GET['f_size']: 
     1056        ret="0 : waiting" 
     1057    else: 
     1058        if ret==request.GET['f_size']: 
    10351059            ret += ":linking" 
    1036         else: 
     1060        else: 
    10371061            ret += ":writing" 
    10381062    return HttpResponse(ret) 
  • trunk/openPLM/templates/parts/bom_edit.html

    r808 r1107  
    3232                <td class="Content">  
    3333                    <a href="{{form.instance.child.plmobject_url}}"> 
    34                         {{ form.instance.child.reference }} 
    35                     </a> 
     34                        {{ form.instance.child.reference }}</a> 
     35                    — 
     36                    <a href="../replace/{{form.instance.id}}/"> 
     37                    <span>{% trans "(replace)" %}</span></a> 
    3638                </td> 
    3739                <td class="Content"> {{ form.instance.child.revision }} </td> 
  • trunk/openPLM/urls.py

    r1098 r1107  
    112112    (r'BOM-child/edit/$', edit_children), 
    113113    (r'BOM-child/add/$', add_children), 
     114    (r'BOM-child/replace/(?P<link_id>\d+)/$', replace_child), 
    114115    (r'parents/$', display_object_parents), 
    115116    (r'doc-cad/$', display_object_doc_cad), 
Note: See TracChangeset for help on using the changeset viewer.