Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/Entity/LabelSystem/LabelOptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ class LabelOptions
#[Groups(["extended", "full", "import"])]
protected float $height = 30.0;

// TODO these have to go into the DB to be persisted.
// The default values preserve the current behaviour of the generator (custom css might break though...)
public int $xcount = 1;
public int $ycount = 1;
public int $skipcount = 0;

/**
* @var BarcodeType The type of the barcode that should be used in the label (e.g. 'qr')
*/
Expand Down
28 changes: 28 additions & 0 deletions src/Form/LabelOptionsType.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,34 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
],
]);

$builder->add('xcount', NumberType::class, [
'label' => 'label_options.page_nup.grid',
'html5' => true,
'attr' => [
'placeholder' => 'label_options.page_nup.xcount',
'min' => 1,
'step' => 1,
],
]);
$builder->add('ycount', NumberType::class, [
'label' => false,
'html5' => true,
'attr' => [
'placeholder' => 'label_options.page_nup.ycount',
'min' => 1,
'step' => 1,
],
]);
$builder->add('skipcount', NumberType::class, [
'label' => '//',
'html5' => true,
'attr' => [
'placeholder' => 'label_options.page_nup.skipcount',
'min' => 0,
'step' => 1,
],
]);

$builder->add('supported_element', EnumType::class, [
'label' => 'label_options.supported_elements.label',
'class' => LabelSupportedElement::class,
Expand Down
12 changes: 12 additions & 0 deletions templates/label_system/dialog.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,18 @@
</div>
</div>
</div>
<div class="mb-2 row">
{{ form_label(form.options.xcount) }}
<div class="col-sm-9">
<div class="input-group">
{{ form_widget(form.options.xcount) }}
<span class="input-group-text">x</span>
{{ form_widget(form.options.ycount) }}
<span class="input-group-text">{{ form.options.skipcount.vars.label }}</span>
{{ form_widget(form.options.skipcount) }}
</div>
</div>
</div>
{{ form_row(form.options.barcode_type) }}
{{ form_row(form.options.lines) }}
</div>
Expand Down
57 changes: 46 additions & 11 deletions templates/label_system/labels/base_label.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,51 @@
</style>
</head>
<body>
{% for element in elements %}
<div class="page">
{% if options.barcodeType.none %}
{% include "label_system/labels/label_page_none.html.twig" %}
{% elseif options.barcodeType.is2D() %}
{% include "label_system/labels/label_page_qr.html.twig" %}
{% elseif options.barcodeType.is1D() %}
{% include "label_system/labels/label_page_1d.html.twig" %}
{% endif %}
</div>
{% endfor %}
{% set start_page %}
<div class="page" style="break-after: always;"><table col="{{ options.xcount }}" row="{{ options.ycount }}"><tr>
{% endset %}

{% set end_page %}
</tr></table></div>
{% endset %}

{{ start_page }}
{% set labels = (0 .. options.skipcount)|merge(elements) %}
{% for element in labels %}
{% if loop.first %}
{# continue #}
{% else %}
<td>
{% if element <= options.skipcount %}
{% elseif options.barcodeType.none %}
{% include "label_system/labels/label_page_none.html.twig" %}
{% elseif options.barcodeType.is2D() %}
{% include "label_system/labels/label_page_qr.html.twig" %}
{% elseif options.barcodeType.is1D() %}
{% include "label_system/labels/label_page_1d.html.twig" %}
{% endif %}
</td>
{% if not loop.last %}
{# The current row is full. Start a new row #}
{% if (loop.index > 2) and loop.index0 is divisible by(options.xcount) %}
</tr><tr>
{% endif %}

{# The current page is full and there are still labels in the queue. Start a new page #}
{% if loop.index0 is divisible by(options.xcount * options.ycount) %}
{{ end_page }}
{{ start_page }}
{% endif %}
{% else %}
{# last iteration: fill the row if the generated label count is too small #}
{% for i in (labels|length - 1) .. options.xcount %}
{% if labels|length - 1 < options.xcount and i < options.xcount %}
<td></td>
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endfor %}
{{ end_page }}
</body>
</html>
Loading