Changeset 311 in main


Ignore:
Timestamp:
09/22/11 07:36:26 (8 years ago)
Author:
pcosquer
Message:

navigate: dnd: make it possible to attach a document or a part

Location:
trunk/openPLM
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/media/js/navigate.js

    r310 r311  
    7575    var id = id.slice(-1); 
    7676    var can = false; 
    77     $.ajaxSetup({async : false}); 
    78  
    79     $.get("/ajax/can_add_child/" + id + "/", 
    80         form, 
    81         function (result){ 
    82             can = result.can_add; 
    83         } 
    84         ); 
    85     $.ajaxSetup({async : true}); 
     77    if (type == "Part"){ 
     78        $.ajaxSetup({async : false}); 
     79 
     80        $.get("/ajax/can_add_child/" + id + "/", 
     81            form, 
     82            function (result){ 
     83                can = result.can_add; 
     84            } 
     85            ); 
     86        $.ajaxSetup({async : true}); 
     87    } 
     88    cache[form] = can; 
     89    return can; 
     90} 
     91 
     92function can_attach(plmobject, form_child, cache){ 
     93    var form = form_child.serialize(); 
     94    if (form in cache){ 
     95        return cache[form]; 
     96    } 
     97    var id = plmobject.attr("id").split(":"); 
     98    var type = id.slice(-2, -1); 
     99    var id = id.slice(-1); 
     100    var can = false; 
     101     
     102    if (type == "Part" || type == "Document"){ 
     103        $.ajaxSetup({async : false}); 
     104        $.get("/ajax/can_attach/" + id + "/", 
     105            form, 
     106            function (result){ 
     107                can = result.can_attach; 
     108            } 
     109            ); 
     110        $.ajaxSetup({async : true}); 
     111    } 
    86112    cache[form] = can; 
    87113    return can; 
     
    121147} 
    122148 
     149function show_attach(plmobject, form_child){ 
     150        var id = plmobject.attr("id").split(":"); 
     151    var type = id.slice(-2, -1); 
     152    var id = id.slice(-1); 
     153     
     154    $.get("/ajax/attach/" + id + "/", 
     155        form_child.serialize(), 
     156        function (data){ 
     157            $("#dialog-confirm").dialog("option", "buttons", { 
     158                Ok: function() { 
     159                    $.post("/ajax/attach/"+id+"/", 
     160                        $("#dialog-confirm>form").serialize(), 
     161                        function (result){ 
     162                            if (result.result == "ok"){ 
     163                                $("#dialog-confirm").dialog("close"); 
     164                                location.reload(); 
     165                            } 
     166                        }); 
     167                }, 
     168                Cancel: function() { 
     169                    $(this).dialog("close"); 
     170                } 
     171                 
     172            }); 
     173            $("#dialog-confirm>form>table").html(data.form); 
     174            $("#dialog-confirm").dialog("open"); 
     175        } 
     176    ); 
     177} 
     178 
    123179function init(){ 
    124180        $("div.node").mouseenter( 
     
    153209        // add stuff 
    154210        // TODO : documents, check if selected part can be added 
    155         var cache = new Object(); 
     211        var cache1 = new Object(); 
     212        var cache2 = new Object(); 
    156213        $("div.main_node").droppable({ 
    157214                        accept:  
    158215                function (child_tr){ 
    159216                    if (child_tr.is("tr.Content, tr.Content2")){ 
    160                         return can_add_child($(this), $("form", child_tr), cache); 
     217                        return (can_add_child($(this), $("form", child_tr), cache1) || 
     218                                can_attach($(this), $("form", child_tr), cache2) 
     219                                ); 
    161220                     } 
    162221                    return false; 
     
    165224                        hoverClass: "drop_hover", 
    166225                        drop: function( event, ui ) { 
    167                 show_add_child($(this), $("form", ui.draggable)); 
     226                if (can_add_child($(this), $("form", ui.draggable), cache1)){ 
     227                    show_add_child($(this), $("form", ui.draggable)); 
     228                } 
     229                else if (can_attach($(this), $("form", ui.draggable), cache2)){ 
     230                    show_attach($(this), $("form", ui.draggable)); 
     231                } 
    168232                        } 
    169233                }); 
     
    268332        $("tr.Content").add("tr.Content2").draggable({ helper: 'clone' }); 
    269333        $("#navAddForm").dialog({ 
    270                 autoOpen: false, 
     334            autoOpen: false, 
    271335                        height: 300, 
    272336                        width: 350, 
    273337                        modal: true, 
    274                         close: function() { 
    275                         } 
    276338                }); 
     339        $("#dialog-confirm").dialog({ 
     340            autoOpen: false, 
     341                        height: 300, 
     342                        width: 350, 
     343                        modal: true, 
     344                }); 
     345 
    277346 
    278347        init(); 
  • trunk/openPLM/plmapp/base_views.py

    r306 r311  
    7070            raise 
    7171        except Exception, e: 
    72             print e 
    7372            #Mail the admins with the error 
    7473            exc_info = sys.exc_info() 
  • trunk/openPLM/plmapp/controllers.py

    r310 r311  
    958958        """ 
    959959        return self.documentpartlink_part.all() 
    960          
     960      
     961    def is_document_attached(self, document): 
     962        """ 
     963        Returns True if *document* is attached to the current part. 
     964        """ 
     965 
     966        if isinstance(document, PLMObjectController): 
     967            document = document.object 
     968        return bool(self.documentpartlink_part.filter(document=document)) 
     969    
    961970    def update_doc_cad(self, formset): 
    962971        u""" 
     
    11801189        """ 
    11811190        return self.object.documentpartlink_document.all() 
     1191 
     1192    def is_part_attached(self, part): 
     1193        """ 
     1194        Returns True if *part* is attached to the current document. 
     1195        """ 
     1196 
     1197        if isinstance(part, PLMObjectController): 
     1198            part = part.object 
     1199        return bool(self.documentpartlink_document.filter(part=part)) 
    11821200 
    11831201    def revise(self, new_revision): 
  • trunk/openPLM/plmapp/views.py

    r310 r311  
    15381538    part = get_obj_by_id(part_id, request.user) 
    15391539    data = {"can_add" : False} 
    1540     if request.GET: 
     1540    if hasattr(part, "part") and request.GET: 
    15411541        form = AddRelPartForm(request.GET) 
    15421542        if form.is_valid(): 
    1543              child = get_obj(form.cleaned_data["type"], 
     1543            child = get_obj(form.cleaned_data["type"], 
    15441544                                form.cleaned_data["reference"], 
    15451545                                form.cleaned_data["revision"], 
    15461546                                request.user) 
    1547              try: 
    1548                  part.check_add_child(child) 
    1549                  data["can_add"] = True 
    1550              except StandardError: 
    1551                  pass 
     1547            try: 
     1548                part.check_add_child(child) 
     1549                data["can_add"] = True 
     1550            except StandardError: 
     1551                pass 
    15521552    return data 
     1553 
     1554@login_required 
     1555@json_view 
     1556def ajax_attach(request, plmobject_id): 
     1557    plmobject = get_obj_by_id(plmobject_id, request.user) 
     1558    data = {} 
     1559    if request.GET: 
     1560        form = AddRelPartForm(initial=request.GET) 
     1561    else: 
     1562        form = AddRelPartForm(request.POST) 
     1563        if form.is_valid(): 
     1564            attached = get_obj(form.cleaned_data["type"], 
     1565                                form.cleaned_data["reference"], 
     1566                                form.cleaned_data["revision"], 
     1567                                request.user) 
     1568            if hasattr(plmobject, "attach_to_document"): 
     1569                plmobject.attach_to_document(attached) 
     1570            elif hasattr(plmobject, "attach_to_part"): 
     1571                plmobject.attach_to_part(attached) 
     1572            return {"result" : "ok"} 
     1573        else: 
     1574            data["result"] = "error" 
     1575            data["error"] = "invalid form" 
     1576    for field in ("type", "reference", "revision"): 
     1577        form.fields[field].widget.attrs['readonly'] = 'on'  
     1578    data.update({ 
     1579            "plmobject" : { 
     1580                "id" : plmobject.id, 
     1581                "type" : plmobject.type, 
     1582                "reference" : plmobject.reference, 
     1583                "revision" : plmobject.revision, 
     1584                }, 
     1585            "form" : form.as_table() 
     1586           }) 
     1587    return data 
     1588 
     1589@login_required 
     1590@json_view 
     1591def ajax_can_attach(request, plmobject_id): 
     1592    plmobject = get_obj_by_id(plmobject_id, request.user) 
     1593    data = {"can_attach" : False} 
     1594    if isinstance(plmobject, PLMObjectController) and request.GET: 
     1595        form = AddRelPartForm(request.GET) 
     1596        if form.is_valid(): 
     1597            attached = get_obj(form.cleaned_data["type"], 
     1598                                form.cleaned_data["reference"], 
     1599                                form.cleaned_data["revision"], 
     1600                                request.user) 
     1601             
     1602            if hasattr(plmobject, "is_document_attached"): 
     1603                data["can_attach"] = not (hasattr(attached, "part") or \ 
     1604                                 plmobject.is_document_attached(attached)) 
     1605            elif hasattr(plmobject, "is_part_attached"): 
     1606                data["can_attach"] = not (hasattr(attached, "document") or \ 
     1607                                          plmobject.is_part_attached(attached)) 
     1608    return data 
     1609 
  • trunk/openPLM/templates/Navigate.htm

    r304 r311  
    2020            </form> 
    2121        </div> 
     22         
     23        <div id="dialog-confirm" title='{% trans "Attach document?" %}'> 
     24            <p> 
     25                <span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span> 
     26                {% trans "Attach the selected document?" %} 
     27              </p> 
     28             <form method="POST" action=""> 
     29                    <table> 
     30                        <tbody/> 
     31                    </table> 
     32             </form> 
     33 
     34    </div> 
    2235    <div id="navThumbnails"> 
    2336         
  • trunk/openPLM/urls.py

    r310 r311  
    7070    (r'ajax/add_child/(?P<part_id>\d+)/?', ajax_add_child), 
    7171    (r'ajax/can_add_child/(?P<part_id>\d+)/?', ajax_can_add_child), 
     72    (r'ajax/attach/(?P<plmobject_id>\d+)/?', ajax_attach), 
     73    (r'ajax/can_attach/(?P<plmobject_id>\d+)/?', ajax_can_attach), 
    7274 
    7375    (object_url + r'$', display_object), 
Note: See TracChangeset for help on using the changeset viewer.