Esempio n. 1
0
def render_article_request(p: canvas.Canvas,
                           arequested: ArticleRequested,
                           y: int,
                           retry=False):
    a: Article = arequested.AID
    text = Paragraph(str(arequested.notes).replace("\n", "<br />\n"),
                     style=ARTICLE_NOTES_STYLE)
    textwidth, textheight = text.wrapOn(p, A4[0] - 300, A4[1] - 100)
    if textheight > (y - 50) and not retry:
        return y, arequested
    p.line(50, y, A4[0] - 50, y)
    p.drawString(55, y - 22,
                 str("[" + a.size + ", " + get_type_string(a.type) + "]"))
    p.drawString(55, y - 12, str(a.description))
    if len(a.description) > 25:
        p.drawString(155, y - 22, str(arequested.amount))
    else:
        p.drawString(155, y - 12, str(arequested.amount))
    text.drawOn(p, 235, y - 5 - textheight)
    r = y - 15 - textheight
    # render table lines
    p.line(50, r, A4[0] - 50, r)
    p.line(50, y, 50, r)
    p.line(150, y, 150, r)
    p.line(230, y, 230, r)
    p.line(A4[0] - 65, y, A4[0] - 65, r)
    p.line(A4[0] - 50, y, A4[0] - 50, r)
    # render check box (still easyer to do with lines that with PDF rects
    p.line(A4[0] - 62, y - 3, A4[0] - 53, y - 3)
    p.line(A4[0] - 62, y - 12, A4[0] - 53, y - 12)
    p.line(A4[0] - 62, y - 3, A4[0] - 62, y - 12)
    p.line(A4[0] - 53, y - 3, A4[0] - 53, y - 12)
    return r, None
Esempio n. 2
0
def get_group_variations(grp: ArticleGroup):
    sizes = []
    types = []
    for article in Article.objects.all().filter(group=grp):
        if article.size not in sizes:
            sizes.append(article.size)
        if article.type not in types:
            types.append(article.type)
    sizesstr = ""
    typesstr = ""
    sizes.sort()
    types.sort()
    for s in sizes:
        sizesstr += " " + s
    for t in types:
        typesstr += " " + get_type_string(t)
    return sizesstr + " ", typesstr + " "
Esempio n. 3
0
def render_article_selection_page(request: HttpRequest):
    rid: str = str(request.GET.get("rid"))
    known_groups = []
    page = 1
    if request.GET.get('page'):
        page = int(request.GET['page'])
    items_per_page = 50
    if request.GET.get('objects'):
        items_per_page = int(request.GET["objects"])
    total_items = Article.objects.all().filter(visible=True).filter(underConstruction=False).count()
    max_page = total_items / items_per_page
    if max_page < 1:
        max_page = 1
    if page > max_page:
        page = max_page
    start_range = 1 + page * items_per_page
    if start_range > total_items:
        start_range = 0
    end_range = (page + 1) * items_per_page
    a = render_headbar(request, title="Select article")
    a += '<div class="w3-row w3-padding-64 w3-twothird w3-container">'
    a += '<h3>Please select your desired article</h3><table><tr><th>Select</th><th>Preview</th>' \
            + '<th>Title</th><th>Size</th><th>Type</th></tr>'
    objects = Article.objects.filter(visible=True).filter(underConstruction=False).filter(pk__range=(start_range, end_range))
    for article in objects:
        group = article.group
        if group is None:
            s: str = None
            p = article.flashImage
            if p:
                s = p.lowResFile
            else:
                s = "/staticfiles/frontpage/no-image.png"
            a += '<tr><td><a href="/admin/reservations/article-detail-select?article_id=' + str(article.pk)
            if request.GET.get("srid"):
                a += '&srid=' + str(request.GET["srid"])
            a += '&rid=' + rid + '"><img src="/staticfiles/frontpage/order-article.png" class="button-img"/>' + \
                    '</a></td><td><img src="'
            a += s + '" /></td><td>' + article.description + '</td><td>' + article.size + '</td><td>' + \
                get_type_string(article.type) + '</td></tr>'
        elif group not in known_groups:
            known_groups.append(group)
            s: str = None
            p = group.group_flash_image
            if p:
                s = p.lowResFile
            else:
                s = "/staticfiles/frontpage/no-image.png"
            sizes, types = get_group_variations(group)
            a += '<tr><td><a href="/admin/reservations/article-detail-select?article_id=' + str(article.pk)
            if request.GET.get("srid"):
                a += '&srid=' + str(request.GET["srid"])
            a += '&rid=' + rid + '"><img src="/staticfiles/frontpage/order-article.png" ' + \
                    'class="button-img"/></a></td><td><img src="'
            a += s + '" /></td><td>' + group.group_name + '</td><td>' + sizes + '</td><td>' + \
                    types + '</td></tr>'
    a += '</table>'
    if page > 1:
        a += '<a href="' + request.path + '?page=' + str(page - 1) + '&objects=' + str(objects) + \
             '" class="button">Previous page </a>'
    if page < max_page:
        a += '<a href="' + request.path + '?page=' + str(page + 1) + '&objects=' + str(objects) + \
             '" class="button">Next page </a>'
    a += '</div>' + render_footer(request)
    return HttpResponse(a)
Esempio n. 4
0
def render_detail_selection(request: HttpRequest):
    try:
        res: GroupReservation = -1
        user: Profile = None
        try:
            res = GroupReservation.objects.get(id=int(request.GET["rid"]))
            user = get_current_user(request)
            if res.createdByUser != user and user.rights < 2:
                raise Exception("Editing foreign reservation")
        except Exception as e:
            logger.warning("\nUser " + str(user) + " from IP " + str(request.META['REMOTE_ADDR']) + \
                    " Caused an exception: " + traceback.format_exc() + "\n\n")
            return redirect("/admin/?msgid=editreservation.invalidrequest;" + str(e))
        a: Article = Article.objects.get(pk=int(request.GET["article_id"]))
        if "rid" not in request.GET:
            raise Exception("No reservation provided")
        f: Form = Form()
        if a.group is None:
            f.action_url = "/admin/actions/add-article-to-reservation?rid=" + str(int(request.GET["rid"])) + \
                    "&article_id=" + str(a.pk) + "&redirect=/admin/reservations/edit"
            if request.GET.get("srid"):
                f.action_url += '&srid=' + str(request.GET["srid"])
            f.add(PlainText("Price: " + render_price(a.price) + "<br />"))
            f.add_content(PlainText("Specify amount: "))
            f.add_content(NumberField(name="quantity", minimum=1, maximum=get_article_pcs_free(a),
                button_text="1"))
            f.add_content(PlainText("Maybe add some optional notes:"))
            f.add_content(TextArea(name="notes", label_text="Notes:", text=""))
            f.add_content(PlainText("<br />"))
        else:
            grp = a.group
            f.action_url = "/admin/actions/add-article-to-reservation?group_id=" + str(grp.pk) + \
                    "&redirect=/admin/reservations/edit&rid=" + str(int(request.GET["rid"]))
            if request.GET.get("srid"):
                f.action_url += '&srid=' + str(request.GET["srid"])
            sizes, types, sizesdict = get_article_dict(grp)
            f.add(PlainText("<table><thead><tr><th> Version </th>"))
            for s in sizes:
                f.add(PlainText("<th>" + str(s) + "</th>"))
            f.add(PlainText("</tr></thead><tbody>"))
            for t in types:
                f.add(PlainText("<tr><td>" + get_type_string(t) + "</td>"))
                for s in sizes:
                    f.add(PlainText("<td>"))
                    if sizesdict[s].get(t):
                        quantity, price, aid, description, visible = sizesdict[s][t]
                        if not visible:
                            f.add(PlainText("Currently not avaiable"))
                        pcsfree = get_article_pcs_free(Article.objects.get(pk=aid))
                        if visible and pcsfree > 0:
                            f.add(PlainText("Price: " + render_price(price) + "<br />"))
                            f.add_content(PlainText("Specify amount: "))
                            f.add_content(NumberField(name="quantity_" + str(aid), minimum=0, 
                                maximum=pcsfree, button_text="0"))
                            f.add_content(PlainText("Maybe add some optional notes:"))
                            f.add_content(TextArea(name="notes_" + str(aid), label_text="Notes:", text=""))
                        else:
                            f.add(PlainText("Unfortunately this article is already sold out."))
                    else:
                        f.add(PlainText("Currently not avaiable"))
                    f.add(PlainText("</td>"))
                f.add(PlainText("</tr>"))
            f.add(PlainText("</tbody></table><br />"))
        f.add_content(SubmitButton())
        a = render_headbar(request, title="Specify article details")
        a += '<div class=""><div class="w3-row w3-padding-64 w3-twothird w3-container">' \
            '<h3>Please specify further details:</h3>'
        a += f.render_html(request)
        a += '</div></div>' + render_footer(request)
        return HttpResponse(a)
    except Exception as e:
        return redirect("/admin/?error=" + str(e))
Esempio n. 5
0
 def test_cloth_type_generation(self):
     self.assertEquals(get_type_string(0), "Unisex")
     self.assertEquals(get_type_string(1), "Female")
     self.assertEquals(get_type_string(2), "Male")
     self.assertEquals(get_type_string(3), "Kids")
     self.assertEquals(get_type_string(4), "Aliens")
Esempio n. 6
0
def export_reject_statistics(request: HttpRequest):
    # Begin PDF
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="FOC-RejectStatistics_' + timestamp() + '.pdf"'
    buffer = BytesIO()
    w, h = landscape(A4)  # Reversed return values in order to produce landscape orientation
    p: canvas = canvas.Canvas(buffer, pagesize=landscape(A4), pageCompression=0)
    p.setTitle("C3FOC - Missing Merch statistics")
    p.setAuthor("The robots in slavery by " + request.user.username)
    p.setSubject("This document, originally created at " + timestamp(filestr=False) +
                 ", is a template for the missing merchandise statistics.")
    page = 1
    p.setFont("Helvetica", 11)
    # Render the Article list
    cy = h - 50
    for a in Article.objects.all():
        p.line(50, cy, w - 50, cy)
        p.drawString(55, cy - 10, "[" + str(a.id) + "]: " + str(a.description) + str(" [" + a.size + ", " + get_type_string(a.type) + "]"))
        p.line(50, cy - 50, w - 50, cy - 50)
        p.line(50, cy, 50, cy - 50)
        p.line(w - 50, cy, w - 50, cy - 50)
        cy -= 50
        if cy <= 65:
            # Break page
            p.drawString(50, 50, "Page " + str(page) + ", " + timestamp())
            p.showPage()
            page += 1
            cy = h - 50
    if page == 1:
        p.drawString(50, 50, timestamp(filestr=False))
    # Finish PDF
    p.showPage()
    p.save()
    pdf = buffer.getvalue()
    buffer.close()
    response.write(pdf)
    return response
Esempio n. 7
0
 def test_group_vars_generation(self):
     sizes, types = get_group_variations(ArticleGroup.objects.all()[0])
     self.assertTrue(" S XXL " == sizes)
     self.assertTrue(" " + get_type_string(2) + " " + get_type_string(3) +
                     " " == types)