Пример #1
0
def get_placeholder_options():
    return {
        name: placeholder
        for name, placeholder in get_placeholders(
            'designer-fields').viewitems()
        if not placeholder.admin_only or session.user.is_admin
    }
Пример #2
0
    def _build_pdf(self, canvas):
        config = self.config
        tpl_data = self.tpl_data

        if self.template.background_image:
            with self.template.background_image.open() as f:
                self._draw_background(
                    canvas, ImageReader(self._remove_transparency(f)),
                    tpl_data, config.margin_horizontal, config.margin_vertical,
                    tpl_data.width_cm * cm, tpl_data.height_cm * cm)

        placeholders = get_placeholders('designer-fields')

        for item in tpl_data.items:
            placeholder = placeholders.get(item['type'])

            if placeholder:
                if placeholder.group == 'event':
                    text = placeholder.render(self.event)
                else:
                    continue
            elif item.get('text') is not None:
                text = item['text']

            self._draw_item(canvas, item, tpl_data, text,
                            config.margin_horizontal, config.margin_vertical)
Пример #3
0
    def _draw_badge(self, canvas, registration, template, tpl_data, pos_x, pos_y):
        """Draw a badge for a given registration, at position pos_x, pos_y (top-left corner)."""
        config = self.config
        badge_rect = (pos_x, self.height - pos_y - tpl_data.height_cm * cm,
                      tpl_data.width_cm * cm, tpl_data.height_cm * cm)

        if config.dashed_border:
            canvas.saveState()
            canvas.setDash(1, 5)
            canvas.rect(*badge_rect)
            canvas.restoreState()

        if template.background_image:
            with template.background_image.open() as f:
                self._draw_background(canvas, ImageReader(self._remove_transparency(f)), tpl_data, *badge_rect)

        placeholders = get_placeholders('designer-fields')

        for item in tpl_data.items:
            placeholder = placeholders.get(item['type'])

            if placeholder:
                if placeholder.group == 'registrant':
                    text = placeholder.render(registration)
                else:
                    text = placeholder.render(registration.event)
            elif item['text']:
                text = item['text']
            else:
                continue

            self._draw_item(canvas, item, tpl_data, text, pos_x, pos_y)
Пример #4
0
    def _draw_badge(self, canvas, registration, pos_x, pos_y):
        """Draw a badge for a given registration, at position pos_x, pos_y (top-left corner)."""
        config = self.config
        tpl_data = self.tpl_data

        badge_rect = (pos_x, self.height - pos_y - tpl_data.height_cm * cm,
                      tpl_data.width_cm * cm, tpl_data.height_cm * cm)

        if config.dashed_border:
            canvas.saveState()
            canvas.setDash(1, 5)
            canvas.rect(*badge_rect)
            canvas.restoreState()

        if self.template.background_image:
            with self.template.background_image.open() as f:
                self._draw_background(canvas, ImageReader(f), *badge_rect)

        placeholders = get_placeholders('designer-fields')

        for item in tpl_data.items:
            placeholder = placeholders.get(item['type'])

            if placeholder:
                if placeholder.group == 'registrant':
                    text = placeholder.render(registration)
                else:
                    text = placeholder.render(registration.event_new)
            elif item['text']:
                text = item['text']

            self._draw_item(canvas, item, text, pos_x, pos_y)
Пример #5
0
 def is_ticket(self):
     placeholders = get_placeholders('designer-fields')
     if any(placeholders[item['type']].is_ticket for item in self.data['items'] if item['type'] in placeholders):
         return True
     elif self.backside_template and self.backside_template.is_ticket:
         return True
     else:
         return False
Пример #6
0
 def is_ticket(self):
     placeholders = get_placeholders('designer-fields')
     if any(placeholders[item['type']].is_ticket for item in self.data['items'] if item['type'] in placeholders):
         return True
     elif self.backside_template and self.backside_template.is_ticket:
         return True
     else:
         return False
Пример #7
0
def get_placeholder_options():
    groups = {
        group_id: {
            'title': group_title,
            'options': {}
        }
        for group_id, group_title in GROUP_TITLES.viewitems()
    }
    for pname, placeholder in get_placeholders('designer-fields').viewitems():
        groups[placeholder.group]['options'][pname] = placeholder.description
    return groups
Пример #8
0
    def _draw_badge(self, canvas, registration, template, tpl_data, pos_x,
                    pos_y):
        """
        Draw a badge for a given registration, at position pos_x,
        pos_y (top-left corner).
        """
        config = self.config
        badge_rect = (pos_x, self.height - pos_y - tpl_data.height_cm * cm,
                      tpl_data.width_cm * cm, tpl_data.height_cm * cm)

        if config.dashed_border:
            canvas.saveState()
            canvas.setDash(1, 5)
            canvas.rect(*badge_rect)
            canvas.restoreState()

        if template.background_image:
            with template.background_image.open() as f:
                self._draw_background(
                    canvas, ImageReader(self._remove_transparency(f)),
                    tpl_data, *badge_rect)

        placeholders = get_placeholders('designer-fields')

        # Print images first
        image_placeholders = {
            name
            for name, placeholder in placeholders.items()
            if placeholder.is_image
        }
        items = sorted(tpl_data.items,
                       key=lambda item: item['type'] not in image_placeholders)

        for item in items:
            placeholder = placeholders.get(item['type'])

            if placeholder:
                if placeholder.group == 'registrant':
                    text = placeholder.render(registration)
                else:
                    text = placeholder.render(registration.event)
            elif item['text']:
                text = item['text']
            else:
                continue

            self._draw_item(canvas, item, tpl_data, text, pos_x, pos_y)
Пример #9
0
    def _build_pdf(self, canvas):
        config = self.config
        tpl_data = self.tpl_data

        if self.template.background_image:
            with self.template.background_image.open() as f:
                self._draw_background(canvas, ImageReader(f), tpl_data, config.margin_horizontal,
                                      config.margin_vertical, tpl_data.width_cm * cm, tpl_data.height_cm * cm)

        placeholders = get_placeholders('designer-fields')

        for item in tpl_data.items:
            placeholder = placeholders.get(item['type'])

            if placeholder:
                if placeholder.group == 'event':
                    text = placeholder.render(self.event)
                else:
                    continue
            elif item.get('text') is not None:
                text = item['text']

            self._draw_item(canvas, item, tpl_data, text, config.margin_horizontal, config.margin_vertical)
Пример #10
0
def get_placeholder_options():
    return {name: placeholder
            for name, placeholder in get_placeholders('designer-fields').viewitems()
            if not placeholder.admin_only or session.user.is_admin}
Пример #11
0
    def _draw_badge(self, canvas, registration, template, tpl_data, pos_x,
                    pos_y):
        """
        Draw a badge for a given registration, at position pos_x,
        pos_y (top-left corner).
        """
        config = self.config
        badge_rect = (pos_x, self.height - pos_y - tpl_data.height_cm * cm,
                      tpl_data.width_cm * cm, tpl_data.height_cm * cm)

        if config.dashed_border:
            canvas.saveState()
            canvas.setDash(1, 5)
            canvas.rect(*badge_rect)
            canvas.restoreState()

        if template.background_image:
            with template.background_image.open() as f:
                self._draw_background(
                    canvas, ImageReader(self._remove_transparency(f)),
                    tpl_data, *badge_rect)

        placeholders = get_placeholders('designer-fields')

        # Print images first
        image_placeholders = {
            name
            for name, placeholder in placeholders.items()
            if placeholder.is_image
        }
        items = sorted(tpl_data.items,
                       key=lambda item: (int(item.get('zIndex', 10)), item[
                           'type'] not in image_placeholders))

        for item in items:
            placeholder = placeholders.get(item['type'])

            if placeholder:
                if placeholder.group == 'registrant':
                    text = placeholder.render(registration)
                elif placeholder.group == 'event':
                    text = placeholder.render(registration.event)
                elif placeholder.group == 'fixed':
                    text = placeholder.render(item)
                else:
                    raise ValueError(
                        f'Unknown placeholder group: `{placeholder.group}`')
            else:
                continue

            item_data = {
                'item': item,
                'text': text,
                'pos_x': pos_x,
                'pos_y': pos_y
            }
            for update in values_from_signal(
                    signals.event.designer.draw_item_on_badge.send(
                        registration,
                        items=items,
                        height=self.height,
                        width=self.width,
                        data=item_data),
                    as_list=True):
                item_data.update(update)
            self._draw_item(canvas, item_data['item'], tpl_data,
                            item_data['text'], item_data['pos_x'],
                            item_data['pos_y'])