From 0649b206274a42d28f77958a069705299d474fdd Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 11 Feb 2026 03:23:15 +0000 Subject: [PATCH] updating sku generartor --- core/__pycache__/views.cpython-311.pyc | Bin 105622 -> 106105 bytes core/templates/core/barcode_labels.html | 99 ++++++++++++++---------- core/views.py | 9 ++- 3 files changed, 64 insertions(+), 44 deletions(-) diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 74be99258f5d3c2f79dc5df27343cad990df6283..98e1a4898c0e246a32d239b4161c7a4afe9623ba 100644 GIT binary patch delta 5889 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 L&bw?ggqi*g{tv+G delta 5499 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 diff --git a/core/templates/core/barcode_labels.html b/core/templates/core/barcode_labels.html index 174a3f2..f792fd0 100644 --- a/core/templates/core/barcode_labels.html +++ b/core/templates/core/barcode_labels.html @@ -186,13 +186,16 @@ overflow: visible !important; z-index: 9999; background: white; + text-align: left !important; } body { margin: 0; padding: 0; background: white !important; - -webkit-print-color-adjust: exact; + -webkit-print-color-adjust: exact; + text-align: left !important; + display: block !important; } @page { @@ -208,21 +211,27 @@ .label-sheet { position: relative; - width: 210mm; - min-height: 297mm; /* Ensure full page height for sheets */ - margin: 0 auto; + width: 210mm !important; /* Force A4 width */ + min-height: 297mm; + margin: 0 !important; /* Strict Left align */ + padding: 0; background: white; page-break-after: always; box-sizing: border-box; - display: block; /* Default fallback */ + + /* Use Flexbox for Grid Layout - More reliable for print */ + display: flex !important; + flex-wrap: wrap !important; + justify-content: flex-start !important; + align-items: flex-start !important; } /* Direct print container override */ body.direct-print-mode .label-sheet { - width: auto; + width: auto !important; min-height: auto; page-break-after: auto; - display: block; + display: block !important; } .label-item { @@ -233,32 +242,33 @@ flex-direction: column; justify-content: center; align-items: center; - width: 100%; /* Fills the grid cell or container */ - height: 100%; + /* REMOVED width: 100% to prevent full-width expansion */ page-break-inside: avoid; + float: left; /* Fallback */ } - /* --- SHEET GRIDS --- */ + /* --- SHEET CONFIGURATIONS (Flexbox + Explicit Dimensions) --- */ /* Avery L7651 (5x13 = 65) */ .sheet-l7651 { - display: grid !important; - grid-template-columns: repeat(5, 38.1mm) !important; - grid-auto-rows: 21.2mm !important; padding: 10.7mm 9.75mm !important; - gap: 0; } - .label-l7651 { padding: 1mm; } + .label-l7651 { + width: 38.1mm !important; + height: 21.2mm !important; + padding: 1mm; + border: none; /* Debug: add border: 1px solid #eee if needed */ + } /* Avery L7656 (4x21 = 84) */ .sheet-l7656 { - display: grid !important; - grid-template-columns: repeat(4, 46mm) !important; - grid-auto-rows: 11.1mm !important; padding: 31.95mm 13mm !important; - gap: 0; } - .label-l7656 { padding: 0.5mm; } + .label-l7656 { + width: 46mm !important; + height: 11.1mm !important; + padding: 0.5mm; + } .label-l7656 .inner-flex { display: flex; flex-direction: row; justify-content: space-around; align-items: center; height: 100%; width: 100%; } @@ -267,36 +277,46 @@ /* Avery L7156 (3x7 = 21) */ .sheet-l7156 { - display: grid !important; - grid-template-columns: repeat(3, 63.5mm) !important; - grid-auto-rows: 38.1mm !important; padding: 15.15mm 9.75mm !important; - gap: 0; } - .label-l7156 { padding: 2mm; } + .label-l7156 { + width: 63.5mm !important; + height: 38.1mm !important; + padding: 2mm; + } /* A4 24 (3x8) */ .sheet-a4-24 { - display: grid !important; - grid-template-columns: repeat(3, 63.5mm) !important; - grid-auto-rows: 33.9mm !important; padding: 12.9mm 9.75mm !important; - gap: 0; } - .label-a4-24 { padding: 2mm; } + .label-a4-24 { + width: 63.5mm !important; + height: 33.9mm !important; + padding: 2mm; + } /* A4 40 (4x10) */ .sheet-a4-40 { - display: grid !important; - grid-template-columns: repeat(4, 48.5mm) !important; - grid-auto-rows: 25.4mm !important; padding: 21.5mm 8mm !important; - gap: 0; } - .label-a4-40 { padding: 1mm; } + .label-a4-40 { + width: 48.5mm !important; + height: 25.4mm !important; + padding: 1mm; + } + /* Standard / Small / Price Tag */ + .sheet-standard, .sheet-small { + padding: 5mm !important; + gap: 2mm !important; + } + .label-standard { width: 50mm !important; height: 25mm !important; border: 1px dotted #ccc; } + .label-small { width: 38mm !important; height: 25mm !important; border: 1px dotted #ccc; } + .label-price-tag { width: 25mm !important; height: 15mm !important; border: 1px dotted #ccc; } + + /* Inner Content Styling */ .label-item svg { - max-width: 100%; + max-width: 95%; height: auto; display: block; margin: 0 auto; @@ -635,13 +655,6 @@ document.addEventListener('DOMContentLoaded', function() { const sheetLabels = allLabels.slice(s, s + labelsPerSheet); const sheet = document.createElement('div'); - // Add specific classes - if (labelType === 'a4-24') sheet.classList.add('sheet-a4-24'); - else if (labelType === 'a4-40') sheet.classList.add('sheet-a4-40'); - else if (labelType === 'l7651') sheet.classList.add('sheet-l7651'); - else if (labelType === 'l7656') sheet.classList.add('sheet-l7656'); - else if (labelType === 'l7156') sheet.classList.add('sheet-l7156'); - sheet.classList.add('label-sheet'); sheet.classList.add('sheet-' + labelType); diff --git a/core/views.py b/core/views.py index 4d8d00f..9bb5ec8 100644 --- a/core/views.py +++ b/core/views.py @@ -17,6 +17,7 @@ import datetime import logging import base64 import os +import random from django.conf import settings as django_settings from django.contrib.auth.models import User, Group, Permission from django.contrib.contenttypes.models import ContentType @@ -1153,7 +1154,13 @@ def barcode_labels(request): @login_required def suggest_sku(request): - return JsonResponse({'sku': f"SKU-{int(timezone.now().timestamp())}"}) + while True: + # Generate 7 random digits + digits = ''.join([str(random.randint(0, 9)) for _ in range(7)]) + new_sku = f"{digits}" + # Ensure it does not exist + if not Product.objects.filter(sku=new_sku).exists(): + return JsonResponse({'sku': new_sku}) @login_required def add_category(request):