Skip to content

johnkommas/BarcodeReader

Repository files navigation

MIT licensed GitHub code size in bytes GitHub repo file count GitHub forks GitHub issues GitHub last commit GitHub language count GitHub top language Discord


image


ΑΠΑΙΤΗΣΕΙΣ ΛΟΓΙΣΜΙΚΟΥ

  • Entersoft Expert / Business Suite (installed)
  • Microsoft SQL Server Administrator (credentials requirement)
  • Company Network Administrator (credentials required)
  • D-Net Mobile (installed)
  • Slack App (installed, credential requirements)

Αρχικοποίηση:

  • Βάσης Δεδομένων (Entersoft SQL SERVER DB)
  • Εικονικού Ιδιωτικού Δικτύου (VPN - L2TP with IPSec)
database.mov

SVG BARCODE GENERATOR PREVIEW

image image image image image


Δημιουργία Normal Price Tag

simple.mov

Τελικό Αποτέλεσμα

final.mov

Προσφορές

special_offers.mov

Ταμπελάκι Σήμανσης Τιμής - Προσφοράς - Ιδιότητας

Οι διαφορετικές περιπτώσεις που εμφανίζονται συχνά είναι:
Α. Το προϊόν να έχει μια σταθερή τιμή
Β. Το προϊόν να έχει μια σταθερή τιμή και έκπτωση
Γ. Το προϊόν να είναι σε προσφορά ορισμένου χρόνου και να έχει τοποθετηθεί έκπτωση επί της τιμής
Δ. Το προϊόν να είναι σε προσφορά ορισμένου χρόνου και να έχει τοποθετηθεί απευθείας τιμή.
Όλα τα παραπάνω σενάρια αναγνωρίζονται αυτόματα και δεν χρειάζεται από τον χρήστη να τις διαχωρίσει, σε κάθε περίπτωση το ταμπελάκι διαμορφώνεται ως εξης:

price = (df['ΝΕΑ ΤΙΜΗ'].values[0] if df['ΕΚΠΤΩΣΗ'].values[0] <= 0 else round(df[init_price].values[0] * (100 - df['ΕΚΠΤΩΣΗ'].values[0]) / 100, 2))
    
  • ΚΑΝΟΝΙΚΕΣ ΤΙΜΕΣ / Είδος με Τιμή Λιανικής
  • (επιλέξαμε Τag "Best Choice")
  • (επιλέξαμε Χρώμα: Πράσινο)

0102

  • ΚΑΝΟΝΙΚΕΣ ΤΙΜΕΣ / Είδος με Τιμή Λιανικής και Έκπτωση
  • (επιλέξαμε Χρώμα: Πράσινο)

0102

  • ΠΡΟΣΦΟΡΕΣ / Προσφορά Ορισμένου Χρόνου με Έκπτωση
  • (επιλέξαμε Χρώμα: Κόκκινο)

0102

  • ΠΡΟΣΦΟΡΕΣ / Προσφορά Ορισμένου Χρόνου με Απευθείας Ανάθεση Τιμής
  • (επιλέξαμε Χρώμα: Κόκκινο)

0102

Για την καλύτερη προώθηση των προϊόντων σε προσφορά, προτείνετε το ταμπελάκι να συνδυάζεται με σήμανση, παρακάτω απεικονίζεται ο Συνδυασμός Προσφοράς με Καρτελάκι Έκπτωσης.

0101


Ταμπελάκια με χρώμα:

0101

Τα ταμπελάκια στο σύνολο τους κάθε φορά είναι αρκετά, για την εκτύπωση τους έχω διαμορφώσει δύο διαφορετικά μεγέθη
Α. Μεγάλο Μέγεθος, εκτυπώνονται 8 ταμπελάκια σε κάθε σελίδα και το χαρτί δεν χωράει στην ετικετοθέση του ραφιού
Β. Μικρό Μέγεθος, εκτυπώνονται 14 ταμπελάκια σε κάθε σελίδα και το χαρτί χωράει ακριβώς στην ετικετοθέση του ραφιού

def a4_page_fit_images(labels, ouptut_name, big=False):
    path = pathlib.Path(__file__).parent.resolve()
    if big:
        image_name = "A4_Labels_Saloon_big.png"
        # Συντεταγμένες για κάθε εικόνα
        x = [163, 1754]
        y = [56, 653, 1250, 1847]
        c = list(itertools.product(x, y))
        size = (1591, 597)
    else:
        image_name = "A4_Labels_Saloon.png"
        # Συντεταγμένες για κάθε εικόνα
        x = [49, 1240]
        y = [158, 604, 1050, 1496, 1942, 2388, 2834]
        c = list(itertools.product(x, y))
        size = (1191, 446)

    my_image = Image.open(f'{path}/images/{image_name}')
    for name, place in tqdm(zip(labels, c), "A4 Page Maker"):
        logger.info(f"Fitting IMAGE: {name} to A4 in (X, Y): {place}")
        overlay = Image.open(f"{path}/merged_images/{name}")
        overlay = overlay.resize(size, Image.ANTIALIAS)
        my_image.paste(overlay, place, mask=overlay)
    file_out = f"{path}/to_print_labels/{ouptut_name}"
    my_image.save(file_out)

8 Printable Labels per Page (A4) (SPECIAL OFFER)

0102


8 Printable Labels per Page (A4) (NORMAL PRICES WITH TAG)

0102


14 Printable Labels per Page (A4)

0102


Εκτύπωση

Το τελικό στάδιο είναι η εκτύπωση, σε αυτό το σημείο έχουμε στη διάθεση μας δύο επιλογές:
Α. Άμεση Εκτύπωση, η εκτύπωση ξεκινά άμεσα
B. Χωρίς Εκτύπωση, το πρόγραμμα εμφανίζει τον φάκελο με τις σελίδες προς εκτύπωση

def export_to_printer(printer_name):
    path = pathlib.Path(__file__).parent.resolve()
    if printer_name == "0":
        logger.info("No Print Asked, Opening Folder Instead")
        subprocess.call(['open', f"{path}/to_print_labels"])
    else:
        list_of_names = os.listdir(f"{path}/to_print_labels")
        for file_name in list_of_names:
            file = f"{path}/to_print_labels/{file_name}"
            os.system(f"lpr -P {printer_name} {file}")

Requirements

  • crefi==2.0.9
  • pip==22.2.1
  • python-barcode==0.14.0
  • python-Levenshtein==0.12.2
  • pyxattr==0.7.2
  • setuptools==63.2.0
  • wheel==0.37.1
  • pandas~=1.4.3
  • uvicorn~=0.18.2
  • fastapi~=0.79.0
  • pyodbc~=4.0.34
  • Pillow~=9.2.0
  • CairoSVG~=2.5.2
  • tqdm~=4.64.0
  • cryptography~=37.0.4

Python Version

  • Version: 3.9

Contributors

  • Ioannis E. Kommas

Thank you to everyone who has contributed. We appreciate you!