Changeset 1704 in main for branches


Ignore:
Timestamp:
10/26/12 09:18:28 (7 years ago)
Author:
pcosquer
Message:

branch 1.1: fixes #145 (backport of [1632] from trunk)

Location:
branches/1.1/openPLM
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/1.1/openPLM

  • branches/1.1/openPLM/apps/document3D/models.py

    r1537 r1704  
    299299                children_ids = [c.link.child_id for c in pctrl.get_children(-1, related=("child__id"), 
    300300                    only=("child__id", "parent__id",))] 
    301                 docs = DocumentPartLink.objects.filter(document__type="Document3D", 
    302                         part__in=children_ids).values_list("document", flat=True) 
    303                 dfs = DocumentFile.objects.filter(document__in=docs).filter(is_stp).values_list("id", flat=True) 
    304                 self._stps = dfs 
     301                if children_ids: 
     302                    docs = DocumentPartLink.objects.filter(document__type="Document3D", 
     303                            part__in=children_ids).values_list("document", flat=True) 
     304                    dfs = DocumentFile.objects.filter(document__in=docs).filter(is_stp).values_list("id", flat=True) 
     305                    self._stps = dfs 
     306                else: 
     307                    self._stps = DocumentFile.objects.none().values_list("id", flat=True) 
    305308            q = Q(stp=doc_file) | Q(stp__in=self._stps) 
    306309            gfs = GeometryFile.objects.filter(q) 
     
    341344                    part_to_docs[part].append(doc) 
    342345                    docs.append(doc) 
     346                if not docs: 
     347                    return product 
    343348                 
    344                 dfs = dict(DocumentFile.objects.filter(document__in=docs).filter(is_stp).values_list("document", "id")) 
     349                dfs = dict(DocumentFile.objects.filter(document__in=docs, deprecated=False)\ 
     350                        .filter(is_stp).values_list("document", "id")) 
    345351                # cache this values as it may be useful for get_all_geometry_files 
    346352                self._stps = dfs.values() 
  • branches/1.1/openPLM/apps/document3D/views.py

    r1541 r1704  
    119119    def get_decomposable_parts(self, parts): 
    120120        decomposable = set() 
    121         # invalid parts are parts already decomposed by a StepDecomposer 
    122         invalid_parts = Document3D.objects.filter(PartDecompose__in=parts)\ 
    123                 .values_list("PartDecompose", flat=True) 
    124         links = list(DocumentPartLink.objects.filter(part__in=parts, 
    125                 document__type="Document3D", # Document3D has no subclasses 
    126                 document__document3d__PartDecompose=None). \ 
    127                 exclude(part__in=invalid_parts).values_list("document", "part")) 
    128         docs = [l[0] for l in links] 
    129         # valid documents are documents with a step file that is decomposable 
    130         valid_docs = dict(ArbreFile.objects.filter(stp__document__in=docs, 
    131             stp__deprecated=False, stp__locked=False, 
    132             decomposable=True).values_list("stp__document", "stp")) 
    133         for doc_id, part_id in links: 
    134             if (doc_id not in valid_docs) or (part_id in decomposable): 
    135                 continue 
    136             stp = DocumentFile.objects.only("document", "filename").get(id=valid_docs[doc_id]) 
    137             if stp.checkout_valid: 
    138                 decomposable.add(part_id) 
     121        if parts: 
     122            # invalid parts are parts already decomposed by a StepDecomposer 
     123            invalid_parts = Document3D.objects.filter(PartDecompose__in=parts)\ 
     124                    .values_list("PartDecompose", flat=True) 
     125            links = list(DocumentPartLink.objects.filter(part__in=parts, 
     126                    document__type="Document3D", # Document3D has no subclasses 
     127                    document__document3d__PartDecompose=None). \ 
     128                    exclude(part__in=invalid_parts).values_list("document", "part")) 
     129            docs = [l[0] for l in links] 
     130            if docs: 
     131                # valid documents are documents with a step file that is decomposable 
     132                valid_docs = dict(ArbreFile.objects.filter(stp__document__in=docs, 
     133                    stp__deprecated=False, stp__locked=False, 
     134                    decomposable=True).values_list("stp__document", "stp")) 
     135                for doc_id, part_id in links: 
     136                    if (doc_id not in valid_docs) or (part_id in decomposable): 
     137                        continue 
     138                    stp = DocumentFile.objects.only("document", "filename").get(id=valid_docs[doc_id]) 
     139                    if stp.checkout_valid: 
     140                        decomposable.add(part_id) 
    139141        return decomposable 
    140142 
  • branches/1.1/openPLM/apps/oerp/erp.py

    r1499 r1704  
    153153    ids = [] 
    154154    children = part_ctrl.get_children(-1) 
    155     for level, link in children: 
    156         ids.append(link.child_id) 
    157     # total local cost 
    158     pcs = models.PartCost.objects.filter(part__in=ids).values() 
    159     pcs = dict((p["part_id"], p) for p in pcs) 
    160     for level, link in children: 
    161         try: 
    162             pc = pcs[link.child_id] 
    163             cost += link.quantity * convert_unit(pc["cost"], link.unit, pc["unit"])  
    164         except (KeyError, UnitConversionError): 
    165             pass 
     155    if children: 
     156        for level, link in children: 
     157            ids.append(link.child_id) 
     158        # total local cost 
     159        pcs = models.PartCost.objects.filter(part__in=ids).values() 
     160        pcs = dict((p["part_id"], p) for p in pcs) 
     161        for level, link in children: 
     162            try: 
     163                pc = pcs[link.child_id] 
     164                cost += link.quantity * convert_unit(pc["cost"], link.unit, pc["unit"])  
     165            except (KeyError, UnitConversionError): 
     166                pass 
    166167    total_local_cost = cost 
    167168 
  • branches/1.1/openPLM/plmapp/controllers/document.py

    r1669 r1704  
    305305            if self.can_detach_part(part): 
    306306                links.append(link.id) 
    307         return self.documentpartlink_document.filter(id__in=links) 
     307        if links: 
     308            return self.documentpartlink_document.filter(id__in=links) 
     309        else: 
     310            return models.DocumentPartLink.objects.none() 
    308311     
    309312    def is_part_attached(self, part): 
     
    368371                if not part.is_deprecated: 
    369372                    parts.append(part) 
    370         qs = models.Part.objects.filter(id__in=(p.id for p in parts)) 
    371         qs = qs.select_related('type', 'reference', 'revision', 'name') 
    372         return qs 
     373        if parts: 
     374            qs = models.Part.objects.filter(id__in=(p.id for p in parts)) 
     375            qs = qs.select_related('type', 'reference', 'revision', 'name') 
     376            return qs 
     377        else: 
     378            return models.Part.objects.none() 
    373379 
    374380    def revise(self, new_revision, selected_parts=()): 
  • branches/1.1/openPLM/plmapp/controllers/part.py

    r1598 r1704  
    308308            last_children = last  
    309309            level += 1 
    310         if only_official: 
     310        if only_official and res: 
    311311            # retrieves all official children at *date* and then prunes the 
    312312            # tree so that we only run one query 
     
    394394            last_parents = last  
    395395            level += 1 
    396         if only_official: 
     396        if only_official and res: 
    397397            # retrieves all official children at *date* and then prunes the 
    398398            # tree so that we only run one query 
     
    543543                if rev.is_official or rev.is_draft: 
    544544                    docs.append(rev.id) 
    545         return models.Document.objects.filter(id__in=docs) 
     545        if docs: 
     546            return models.Document.objects.filter(id__in=docs) 
     547        else: 
     548            return models.Document.objects.none() 
    546549 
    547550    def get_suggested_parents(self): 
     
    655658            if self.can_detach_document(doc): 
    656659                links.append(link.id) 
    657         return self.documentpartlink_part.filter(id__in=links) 
     660        if links: 
     661            return self.documentpartlink_part.filter(id__in=links) 
     662        else: 
     663            return models.DocumentPartLink.objects.none() 
    658664      
    659665    def is_document_attached(self, document): 
  • branches/1.1/openPLM/plmapp/controllers/plmobject.py

    r1598 r1704  
    283283 
    284284        users = models.DelegationLink.get_delegators(self._user, role) 
    285         qset = self.plmobjectuserlink_plmobject.filter(user__in=users, 
     285        if users: 
     286            qset = self.plmobjectuserlink_plmobject.filter(user__in=users, 
    286287                                                          role=role) 
    287         return qset.exists() 
     288            return qset.exists() 
     289        else: 
     290            return False 
    288291 
    289292    def check_editable(self): 
  • branches/1.1/openPLM/plmapp/navigate.py

    r1598 r1704  
    369369                if isinstance(self.object, GroupController): 
    370370                    self._create_doc_edges(self.object, None) 
    371                 links = models.DocumentPartLink.objects.\ 
    372                         filter(part__in=self._part_to_node.keys()) 
    373                 for link in links.select_related("document"): 
    374                     if self.options[OSR] and link.document_id not in self.results: 
    375                         continue 
    376                      
    377                     self.edges.add((link.part_id, link.document_id, " ")) 
    378                     self._set_node_attributes(link.document) 
     371                if self._part_to_node: 
     372                    links = models.DocumentPartLink.objects.\ 
     373                            filter(part__in=self._part_to_node.keys()) 
     374                    for link in links.select_related("document"): 
     375                        if self.options[OSR] and link.document_id not in self.results: 
     376                            continue 
     377                         
     378                        self.edges.add((link.part_id, link.document_id, " ")) 
     379                        self._set_node_attributes(link.document) 
    379380 
    380381        elif not isinstance(self.object, UserController): 
     
    390391 
    391392        # treats the parts to see if they have an attached document 
    392         if not self.options["doc"]: 
     393        if not self.options["doc"] and self._part_to_node: 
    393394            parts = models.DocumentPartLink.objects.\ 
    394395                    filter(part__in=self._part_to_node.keys()).\ 
  • branches/1.1/openPLM/plmapp/views/main.py

    r1598 r1704  
    463463    """ 
    464464    ctx = { "thumbnails" : {}, "num_files" : {} } 
    465     thumbnails = models.DocumentFile.objects.filter(deprecated=False, 
    466                 document__in=doc_ids, thumbnail__isnull=False) 
    467     ctx["thumbnails"].update(thumbnails.values_list("document", "thumbnail")) 
    468     num_files = dict.fromkeys(doc_ids, 0) 
    469     for doc_id in models.DocumentFile.objects.filter(deprecated=False, 
    470         document__in=doc_ids).values_list("document", flat=True): 
    471             num_files[doc_id] += 1 
    472             ctx["num_files"] = num_files 
     465    if doc_ids: 
     466        thumbnails = models.DocumentFile.objects.filter(deprecated=False, 
     467                    document__in=doc_ids, thumbnail__isnull=False) 
     468        ctx["thumbnails"].update(thumbnails.values_list("document", "thumbnail")) 
     469        num_files = dict.fromkeys(doc_ids, 0) 
     470        for doc_id in models.DocumentFile.objects.filter(deprecated=False, 
     471            document__in=doc_ids).values_list("document", flat=True): 
     472                num_files[doc_id] += 1 
     473                ctx["num_files"] = num_files 
    473474    return ctx 
    474475 
     
    815816    extra_columns = [] 
    816817    extension_data = defaultdict(dict) 
    817     for PCLE in models.get_PCLEs(obj.object): 
    818         fields = PCLE.get_visible_fields() 
    819         if fields: 
    820             extra_columns.extend((f, PCLE._meta.get_field(f).verbose_name)  
    821                     for f in fields) 
    822             pcles = PCLE.objects.filter(link__in=(c.link.id for c in children)) 
    823             pcles = pcles.values("link_id", *fields) 
    824             for pcle in pcles: 
    825                 extension_data[pcle["link_id"]].update(pcle) 
     818    if children: 
     819        for PCLE in models.get_PCLEs(obj.object): 
     820            fields = PCLE.get_visible_fields() 
     821            if fields: 
     822                extra_columns.extend((f, PCLE._meta.get_field(f).verbose_name)  
     823                        for f in fields) 
     824                pcles = PCLE.objects.filter(link__in=(c.link.id for c in children)) 
     825                pcles = pcles.values("link_id", *fields) 
     826                for pcle in pcles: 
     827                    extension_data[pcle["link_id"]].update(pcle) 
    826828    return children, extra_columns, extension_data 
    827829 
Note: See TracChangeset for help on using the changeset viewer.