Exemplo n.º 1
0
    def test_import_bom_valid(self):
        """
        Tests an import of a valid bom.
        """
        self.import_csv(PLMObjectsImporter, self.get_valid_rows())
        csv_rows = self.get_valid_bom()
        objects = self.import_csv(BOMImporter, csv_rows)
        # objects should be [parent1, child1, ...]
        self.assertEquals((len(csv_rows) - 1) * 2, len(objects))

        # first row
        parent = get_obj("Part", "p1", "a", self.user)
        child = get_obj("SinglePart", "sp1", "s", self.user)
        c = parent.get_children()[0]
        self.assertEquals(c.link.parent.id, parent.id)
        self.assertEquals(c.link.child.id, child.id)
        self.assertEquals(c.link.quantity, 10)
        self.assertEquals(c.link.order, 15)

        # second row
        parent = get_obj("SinglePart", "sp1", "s", self.user)
        child = get_obj("SinglePart", "sp2", "s", self.user)
        c = parent.get_children()[0]
        self.assertEquals(c.link.parent.id, parent.id)
        self.assertEquals(c.link.child.id, child.id)
        self.assertEquals(c.link.quantity, 10.5)
        self.assertEquals(c.link.order, 16)
Exemplo n.º 2
0
def download_archive(request, obj_type, obj_ref, obj_revi):
    """
    View to download all files from a document/part.

    .. include:: views_params.txt 
    """

    obj = get_obj(obj_type, obj_ref, obj_revi, request.user)
    obj.check_readable()
    
    d_o_u = "document__owner__username"
    if obj.is_document:
        files = obj.files.select_related(d_o_u)
    elif obj.is_part:
        links = obj.get_attached_documents()
        docs = (link.document for link in links)
        files = itertools.chain(*(doc.files.select_related(d_o_u)
            for doc in docs))
    else:
        return HttpResponseForbidden()

    form = forms.ArchiveForm(request.GET)
    if form.is_valid():
        format = form.cleaned_data["format"]
        name = "%s_%s.%s" % (obj_ref, obj_revi, format)
        mimetype = guess_type(name, False)[0]
        if not mimetype:
            mimetype = 'application/octet-stream'
        content = generate_archive(files, format)
        response = HttpResponse(content, mimetype=mimetype)
        #response["Content-Length"] = size
        response['Content-Disposition'] = 'attachment; filename="%s"' % name
        return response
    return HttpResponseForbidden()
Exemplo n.º 3
0
 def test_import_valid(self):
     csv_rows = self.get_valid_rows()
     objects = self.import_csv(PLMObjectsImporter, csv_rows)
     self.assertEquals(len(csv_rows) - 1, len(objects))
     sp1 = get_obj("SinglePart", "sp1", "s", self.user)
     self.assertEquals("SP1", sp1.name)
     self.assertEqual(len(mail.outbox), len(objects))
     self.assertEqual(1, len(self.sent_tasks["openPLM.plmapp.tasks.update_indexes"]))
Exemplo n.º 4
0
    def parse_row(self, line, row): 
        from openPLM.plmapp.base_views import get_obj
        ptype, preference, prevision = self.get_values(row,
                *["parent-" + h for h in ("type", "reference", "revision")])
        parent = get_obj(ptype, preference, prevision, self.user)

        ctype, creference, crevision = self.get_values(row,
                *["child-" + h for h in ("type", "reference", "revision")])
        child = get_obj(ctype, creference, crevision, self.user)

        parent.block_mails()
        parent.object.no_index = True
        child.block_mails()
        child.object.no_index = True
        self.objects.append(parent)
        self.objects.append(child)

        qty = self.get_value(row, "quantity").replace(",", ".").replace(" ", "")
        quantity = float(qty)
        order = int(self.get_value(row, "order").replace(" ", ""))

        parent.add_child(child, quantity, order)
Exemplo n.º 5
0
def checkout_file(request, obj_type, obj_ref, obj_revi, docfile_id):
    """
    Manage html page for the files (:class:`DocumentFile`) checkout from the selected object.
    It locks the :class:`DocumentFile` and, after, calls :func:`.views.download`
    
    .. include:: views_params.txt 
    :param docfile_id: :attr:`.DocumentFile.id`
    :type docfile_id_value: str
    """
    obj = get_obj(obj_type, obj_ref, obj_revi, request.user)
    doc_file = models.DocumentFile.objects.get(id=docfile_id)
    obj.lock(doc_file)
    return download(request, docfile_id)
Exemplo n.º 6
0
def delete_management(request, obj_type, obj_ref, obj_revi):
    """
    Manage html page for the deletion of a "notification" link (:class:`PLMObjectUserLink`) between some Users and the selected object.
    It computes a context dictionnary based on
    
    .. include:: views_params.txt 
    """
    obj = get_obj(obj_type, obj_ref, obj_revi, request.user)
    if request.method == "POST":
        try:
            link_id = request.POST["link_id"]
            link = models.PLMObjectUserLink.objects.get(id=int(link_id))
            obj.remove_notified(link.user)
        except (KeyError, ValueError, ControllerError):
            return HttpResponseForbidden()
    return HttpResponseRedirect("../")
Exemplo n.º 7
0
def ajax_thumbnails(request, obj_type, obj_ref, obj_revi):
    """
    Ajax view to get files and thumbnails of a document.

    :param request: :class:`django.http.QueryDict`
    :param obj_type: :attr:`.PLMObject.type`
    :type obj_type: str
    :param obj_ref: :attr:`.PLMObject.reference`
    :type obj_ref: str
    :param obj_revi: :attr:`.PLMObject.revision`
    :type obj_revi: str
    """
    obj = get_obj(obj_type, obj_ref, obj_revi, request.user)
    files = []
    doc = "|".join((obj_type, obj_ref, obj_revi))
    for f in obj.files:
        if f.thumbnail:
            img = f.thumbnail.url 
        else:
            img = urlparse.urljoin(settings.MEDIA_URL, "img/image-missing.png")
        files.append((f.filename, "/file/%d/" % f.id, img))
    return dict(files=files, doc=doc)
Exemplo n.º 8
0
    def test_view_csv_all(self):
        """
        Complex test that simulate an upload of a csv file (complete process).
        """
        # upload a csv file
        csv_file = StringIO.StringIO()
        csv_file.name = "data.csv"
        UnicodeWriter(csv_file).writerows(self.get_valid_rows())
        csv_file.seek(0)
        response = self.client.post(
            "/import/csv/", {"encoding": "utf_8", "filename": "data.csv", "file": csv_file}, follow=True
        )
        csv_file.close()

        # load the second page
        url = response.redirect_chain[0][0]
        response2 = self.client.get(url)
        self.assertEquals(2, response2.context["step"])
        preview = response2.context["preview"]
        self.assertFalse(None in preview.guessed_headers)
        formset = response2.context["headers_formset"]

        # validate and import the file
        data = {}
        for key, value in formset.management_form.initial.iteritems():
            data["form-" + key] = value or ""
        for i, d in enumerate(formset.initial):
            for key, value in d.iteritems():
                data["form-%d-%s" % (i, key)] = value
            data["form-%d-ORDER" % i] = str(i)
        response3 = self.client.post(url, data, follow=True)
        url_done = response3.redirect_chain[-1][0]
        self.assertEquals("http://testserver/import/done/", url_done)
        # check an item
        sp1 = get_obj("SinglePart", "sp1", "s", self.user)
        self.assertEquals("SP1", sp1.name)