From dcfc3b17698d56bdca9cd76f819e79475090b1c2 Mon Sep 17 00:00:00 2001 From: tonlls Date: Tue, 25 Oct 2022 12:46:23 +0200 Subject: [PATCH 1/5] added config and all for firamaker --- Config.py | 6 +- Model.py | 148 +------------------ resources/fonts/DIN-Bold.ttf | Bin 0 -> 51832 bytes resources/fonts/DIN-Regular.ttf | Bin 0 -> 44888 bytes resources/{ => fonts}/Montserrat-Regular.ttf | Bin resources/{ => fonts}/SpaceMono-Bold.ttf | Bin resources/{ => fonts}/SpaceMono-Regular.ttf | Bin 7 files changed, 9 insertions(+), 145 deletions(-) create mode 100644 resources/fonts/DIN-Bold.ttf create mode 100644 resources/fonts/DIN-Regular.ttf rename resources/{ => fonts}/Montserrat-Regular.ttf (100%) rename resources/{ => fonts}/SpaceMono-Bold.ttf (100%) rename resources/{ => fonts}/SpaceMono-Regular.ttf (100%) diff --git a/Config.py b/Config.py index 2466952..d36da13 100644 --- a/Config.py +++ b/Config.py @@ -26,8 +26,10 @@ BAK_PATH = path.join(RES_PATH, EDITIONS_FOLDER, EDITION, BAK_FILE) # FONT_FILE = 'Montserrat-Regular.ttf' -FONT_FILE = 'SpaceMono-Bold.ttf' -FONT_PATH = path.join(RES_PATH, FONT_FILE) +FONT_FILE = 'DIN-Bold.ttf' +BOLD_FONT_FILE = 'DIN-Bold.ttf' +FONT_FOLDER = 'fonts' +FONT_PATH = path.join(RES_PATH, FONT_FOLDER, FONT_FILE) TYPE_FONT_SIZE = 18 NAME_FONT_SIZE = 12 FONT_COLOR = (0,0,0) diff --git a/Model.py b/Model.py index fc58307..fd8b86d 100644 --- a/Model.py +++ b/Model.py @@ -7,6 +7,7 @@ import Config import Tools +# expositor, organitzador o voluntari class Card: QR_PIX_SIZE = 1 @@ -45,9 +46,11 @@ def generate_qr(self, crypt_id=False): self.qr = Tools.generate_qr((self.id, Tools.crypt(self.id))[crypt_id], Card.QR_PIX_SIZE, Card.QR_BORDER_SIZE) self.qr = Tools.scale(self.qr, Card.QR_SIZE, False) - def generate_card(self, rgb_back=(255, 255, 255)): + def generate_card(self, rgb_back=(255, 255, 255), name=None): self.card = Image.open(Config.BAK_PATH) Tools.draw_text(self.card, self.type, Card.TYPE_POS, Config.TYPE_FONT, Config.WHITE_FONT_COLOR) + if not name is None: + Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR) @staticmethod def get_data(): @@ -61,69 +64,6 @@ def get_data(): break return res - -class Guest(Assistant): - __ID = 1 - __TYPE = 'INVITADO' - __DATA = 'guests' - - def __init__(self, name, mtype=None, has_qr=False): - super().__init__('HackEPS_Guest_' + str(Guest.__ID), (mtype, Guest.__TYPE)[mtype is None], name) - Guest.__ID += 1 - self.has_qr = has_qr - if has_qr: - self.generate_qr(True) - - def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back) - if self.has_qr: - self.card.paste(self.qr, Card.QR_POS) - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR) - - @staticmethod - def get_data(name=None): - res = [] - data = Tools.DataFile.get_content(Guest._DATA_FILE, 'JSON') - for u in data[Guest.__DATA]: - if name is None or u['name'] == name: - res.append(Guest(u['name'], u['type'], u['qr'])) - if Config.TEST or (name is not None and u['name'] == name): - break - return res - - -class Company(Assistant): - __ID = 1 - __TYPE = '' - __DATA = 'companies' - - def __init__(self, name, image): - super().__init__('C' + str(Company.__ID), Company.__TYPE, name) - Company.__ID += 1 - self.logopath = os.path.join(Config.RES_PATH, Config.EDITIONS_FOLDER, Config.EDITION, 'images', image) - - def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back) - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR) - image = Image.open(self.logopath).convert("RGBA") # .resize((550,350), Image.ANTIALIAS) - image = Tools.scale(image, Card.QR_SIZE) - self.card.paste(image, Card.QR_POS) - - @staticmethod - def get_data(name=None): - res = [] - data = Tools.DataFile.get_content(Company._DATA_FILE, 'JSON') - for u in data[Company.__DATA]: - for _ in range(u['number_of_cards']): - if name is None or u['name'] == name: - res.append(Company(u['name'], u['logo'])) - if Config.TEST: - break - if Config.TEST or (name is not None and u['name'] == name): - break - return res - - class Volunteer(Assistant): __ID = 1 __LOGO_PATH = os.path.join(Config.RES_PATH, 'editions', Config.EDITION, 'images', 'logogran.png') @@ -135,11 +75,7 @@ def __init__(self, name): Volunteer.__ID += 1 def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back) - image = Image.open(Volunteer.__LOGO_PATH).convert("RGBA") - image = Tools.scale(image, Card.QR_SIZE) - self.card.paste(image, Card.QR_POS) - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR) + super().generate_card(rgb_back, name=self.name) @staticmethod def get_data(name=None): @@ -151,77 +87,3 @@ def get_data(name=None): if Config.TEST or (name is not None and name == u['name']): break return res - - -class Organizer(Assistant): - __ID = 1 - __LOGO_PATH = os.path.join(Config.RES_PATH, 'editions', Config.EDITION, 'images', 'logogran.png') - __TYPE = 'ORGANIZACIÓN' - __DATA = 'organizers' - - def __init__(self, name): - super().__init__('O' + str(Organizer.__ID), Organizer.__TYPE, name) - Organizer.__ID += 1 - - def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back) - image = Image.open(Organizer.__LOGO_PATH).convert("RGBA") - image = Tools.scale(image, Card.QR_SIZE) - self.card.paste(image, Card.QR_POS) - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR, False) - - @staticmethod - def get_data(name=None): - res = [] - print(Organizer._DATA_FILE) - data = Tools.DataFile.get_content(Organizer._DATA_FILE, 'JSON') - for u in data[Organizer.__DATA]: - if name is None or u['name'] == name: - res.append(Organizer(u['name'])) - if Config.TEST or (name is not None and u['name'] == name): - break - return res - - -class Contestant(Assistant): - __CRYPT_ID = False - __TYPE = 'HACKER' - __FIREBASE = None - __FIRE_PATH = Config.DB_PATH - - def __init__(self, id, data): - super().__init__(id, Contestant.__TYPE) - self.generate_qr() - self.name = data['fullName'] - self.nick = '\"' + data['nickname'] + '\"' - if Config.TEST: - Contestant.__FIRE_PATH = Config.DB_PATH_T - - def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back) - self.card.paste(self.qr, Card.QR_POS) - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR, False) - # Tools.draw_text(self.card, self.nick, Card.NICK_POS, Config.FONT) - - @staticmethod - def __firebase_init(cred): - if Contestant.__FIREBASE is None: - Contestant.__FIREBASE = firebase_admin.initialize_app(cred) - return Contestant.__FIREBASE - - @staticmethod - def get_data(id=None, name=None): - cred = firebase_admin.credentials.Certificate(Config.DB_CERT_PATH) - Contestant.__firebase_init(cred) - db = firestore.client() - users_ref = db.collection(Contestant.__FIRE_PATH) - usrs = users_ref.stream() - users = [] - for usr in usrs: - if (id is None and name is None) or (id is not None and usr.id == id) or ( - name is not None and name == usr.to_dict()['fullName']): - users.append(Contestant(usr.id, usr.to_dict())) - if Config.TEST or (id is not None and usr.id == id) or ( - name is not None and name == usr.to_dict()['fullName']): - break - return users diff --git a/resources/fonts/DIN-Bold.ttf b/resources/fonts/DIN-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d9a2a3de34ff1ee856c23028bed22bfb02e53401 GIT binary patch literal 51832 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 Kf`-Lr?D#j(G~zY@ literal 0 HcmV?d00001 diff --git a/resources/fonts/DIN-Regular.ttf b/resources/fonts/DIN-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..90a022c0d888e3fb72fcdd2daef6618238c06a1b GIT binary patch literal 44888 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 z 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 HeJ}Ap$(d#4 literal 0 HcmV?d00001 diff --git a/resources/Montserrat-Regular.ttf b/resources/fonts/Montserrat-Regular.ttf similarity index 100% rename from resources/Montserrat-Regular.ttf rename to resources/fonts/Montserrat-Regular.ttf diff --git a/resources/SpaceMono-Bold.ttf b/resources/fonts/SpaceMono-Bold.ttf similarity index 100% rename from resources/SpaceMono-Bold.ttf rename to resources/fonts/SpaceMono-Bold.ttf diff --git a/resources/SpaceMono-Regular.ttf b/resources/fonts/SpaceMono-Regular.ttf similarity index 100% rename from resources/SpaceMono-Regular.ttf rename to resources/fonts/SpaceMono-Regular.ttf From d8fadd2988ef5d4e2b81eb0333e6760e22303e24 Mon Sep 17 00:00:00 2001 From: tonlls Date: Wed, 26 Oct 2022 11:42:35 +0200 Subject: [PATCH 2/5] added some config --- Config.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Config.py b/Config.py index d36da13..b942912 100644 --- a/Config.py +++ b/Config.py @@ -25,8 +25,7 @@ BAK_FILE = 'plantilla.png' BAK_PATH = path.join(RES_PATH, EDITIONS_FOLDER, EDITION, BAK_FILE) -# FONT_FILE = 'Montserrat-Regular.ttf' -FONT_FILE = 'DIN-Bold.ttf' +FONT_FILE = 'DIN-Regular.ttf' BOLD_FONT_FILE = 'DIN-Bold.ttf' FONT_FOLDER = 'fonts' FONT_PATH = path.join(RES_PATH, FONT_FOLDER, FONT_FILE) @@ -36,7 +35,6 @@ WHITE_FONT_COLOR = (255,255,255) TYPE_FONT = ImageFont.truetype(FONT_PATH, TYPE_FONT_SIZE) NAME_FONT = ImageFont.truetype(FONT_PATH, NAME_FONT_SIZE) -# FONT = ImageFont.truetype("Symbola.ttf", 60, encoding='unic') MAIN_COLOR = (31, 33, 36) BAK_COLOR = (247, 247, 242) \ No newline at end of file From a8e8f3c7a34bea2a9b034dd4ab50048d00b67f41 Mon Sep 17 00:00:00 2001 From: tonlls Date: Wed, 2 Nov 2022 01:38:00 +0100 Subject: [PATCH 3/5] positions ok i think --- .gitignore | 1 + Config.py | 9 +++-- Model.py | 36 +++++++++++++++--- main.py | 15 +++++--- .../editions/2022_firaMaker/plantilla.png | Bin 0 -> 54759 bytes 5 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 resources/editions/2022_firaMaker/plantilla.png diff --git a/.gitignore b/.gitignore index 63edd56..e360f85 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ #custom resources/*_firebase_cert.json resources/editions/*/data.json +resources/editions/*/*.pdf _out_/ *.pdf diff --git a/Config.py b/Config.py index b942912..76aa79f 100644 --- a/Config.py +++ b/Config.py @@ -3,7 +3,7 @@ TEST = False -EDITION='2022' +EDITION='2022_firaMaker' EDITIONS_FOLDER = 'editions' DB_PATH_T = 'hackeps-'+EDITION+'/dev/users' @@ -29,11 +29,12 @@ BOLD_FONT_FILE = 'DIN-Bold.ttf' FONT_FOLDER = 'fonts' FONT_PATH = path.join(RES_PATH, FONT_FOLDER, FONT_FILE) -TYPE_FONT_SIZE = 18 -NAME_FONT_SIZE = 12 +BOLD_FONT_PATH = path.join(RES_PATH, FONT_FOLDER, BOLD_FONT_FILE) +TYPE_FONT_SIZE = 80 +NAME_FONT_SIZE = 70 FONT_COLOR = (0,0,0) WHITE_FONT_COLOR = (255,255,255) -TYPE_FONT = ImageFont.truetype(FONT_PATH, TYPE_FONT_SIZE) +TYPE_FONT = ImageFont.truetype(BOLD_FONT_PATH, TYPE_FONT_SIZE) NAME_FONT = ImageFont.truetype(FONT_PATH, NAME_FONT_SIZE) MAIN_COLOR = (31, 33, 36) diff --git a/Model.py b/Model.py index fd8b86d..603b03b 100644 --- a/Model.py +++ b/Model.py @@ -14,10 +14,10 @@ class Card: QR_POS = (1301, 172) QR_SIZE = (723, 723) QR_BORDER_SIZE = 0 - TYPE_POS = (0, 155) + TYPE_POS = (0, 500) # NAME_POS = (500, 1250) - NAME_POS = (140, 120) - NICK_POS = (1198, 870) + NAME_POS = (0, 330) + COMP_NAME_POS = (0, 200) # LOGO_POS = (920, 250) # LOGO_SIZE = (550, 350) @@ -48,9 +48,9 @@ def generate_qr(self, crypt_id=False): def generate_card(self, rgb_back=(255, 255, 255), name=None): self.card = Image.open(Config.BAK_PATH) - Tools.draw_text(self.card, self.type, Card.TYPE_POS, Config.TYPE_FONT, Config.WHITE_FONT_COLOR) + Tools.draw_text(self.card, self.type, Card.TYPE_POS, Config.TYPE_FONT, Config.FONT_COLOR) if not name is None: - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.WHITE_FONT_COLOR) + Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.FONT_COLOR, mayus=False) @staticmethod def get_data(): @@ -87,3 +87,29 @@ def get_data(name=None): if Config.TEST or (name is not None and name == u['name']): break return res + +class Company(Assistant): + __ID = 1 + # __LOGO_PATH = os.path.join(Config.RES_PATH, 'editions', Config.EDITION, 'images', 'logogran.png') + __TYPE = 'EXPOSITOR' + __DATA = 'companies' + + def __init__(self, name, company_name): + super().__init__('C' + str(Company.__ID), Company.__TYPE, name) + Company.__ID += 1 + self.company_name = company_name + + def generate_card(self, rgb_back=(255, 255, 255)): + super().generate_card(rgb_back, name=self.name) + Tools.draw_text(self.card, self.company_name, Card.COMP_NAME_POS, Config.TYPE_FONT, Config.FONT_COLOR) + + @staticmethod + def get_data(name=None): + res = [] + data = Tools.DataFile.get_content(Company._DATA_FILE, 'JSON') + for u in data[Company.__DATA]: + if name is None or name == u['name']: + res.append(Company(u['name'])) + if Config.TEST or (name is not None and name == u['name']): + break + return res \ No newline at end of file diff --git a/main.py b/main.py index 1669112..96f13f7 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ users = [] # users += Model.Contestant.get_data() -users += Model.Organizer.get_data() +# users += Model.Organizer.get_data() # users += Model.Volunteer.get_data() # users += Model.Company.get_data() # users += Model.Guest.get_data() @@ -14,8 +14,13 @@ Tools.create_dir(Config.OUT_PATH) Tools.empty_dir(Config.OUT_PATH) +c=Model.Company('Laura Haro Escoi', 'Lleidahack') +for i in range(10): + c.generate_card() + c.card.save(os.path.join(Config.OUT_PATH, 'card' + str(i) + '.png')) +# for u in users: +# u.generate_card() +# u.save() +# break + -for u in users: - u.generate_card() - u.save() - break \ No newline at end of file diff --git a/resources/editions/2022_firaMaker/plantilla.png b/resources/editions/2022_firaMaker/plantilla.png new file mode 100644 index 0000000000000000000000000000000000000000..5700646b0de5e82da1ececbd7f3276e3309ce5fc GIT binary patch literal 54759 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

N1`7GeggV*c;V%CIx=pIdvT1V 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 QMTQswl%6TFLf7fm&w;G!<^TWy literal 0 HcmV?d00001 From 5a2f0c08cb77040cc3e1b7b4dbeea55911d32d7c Mon Sep 17 00:00:00 2001 From: tonlls Date: Wed, 2 Nov 2022 16:17:44 +0100 Subject: [PATCH 4/5] positions are better now --- Model.py | 9 ++++++--- main.py | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Model.py b/Model.py index 603b03b..1f9ae88 100644 --- a/Model.py +++ b/Model.py @@ -46,7 +46,7 @@ def generate_qr(self, crypt_id=False): self.qr = Tools.generate_qr((self.id, Tools.crypt(self.id))[crypt_id], Card.QR_PIX_SIZE, Card.QR_BORDER_SIZE) self.qr = Tools.scale(self.qr, Card.QR_SIZE, False) - def generate_card(self, rgb_back=(255, 255, 255), name=None): + def generate_card(self, rgb_back=(255, 255, 255), name=None, t=None, h=None): self.card = Image.open(Config.BAK_PATH) Tools.draw_text(self.card, self.type, Card.TYPE_POS, Config.TYPE_FONT, Config.FONT_COLOR) if not name is None: @@ -99,9 +99,12 @@ def __init__(self, name, company_name): Company.__ID += 1 self.company_name = company_name - def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back, name=self.name) + def generate_card(self, rgb_back=(255, 255, 255),t=None,h=None): + super().generate_card(rgb_back, name=self.name, t=t, h=h) Tools.draw_text(self.card, self.company_name, Card.COMP_NAME_POS, Config.TYPE_FONT, Config.FONT_COLOR) + img = Image.new('RGB', (1063, 763),(255,255,255)) + img.paste(self.card, (0,0)) + self.card = img @staticmethod def get_data(name=None): diff --git a/main.py b/main.py index 96f13f7..794b51e 100644 --- a/main.py +++ b/main.py @@ -15,9 +15,12 @@ Tools.create_dir(Config.OUT_PATH) Tools.empty_dir(Config.OUT_PATH) c=Model.Company('Laura Haro Escoi', 'Lleidahack') -for i in range(10): - c.generate_card() +t=40 +h=40 +for i in range(4): + c.generate_card(t=t, h=h) c.card.save(os.path.join(Config.OUT_PATH, 'card' + str(i) + '.png')) + # for u in users: # u.generate_card() # u.save() From c1cd33300f45c4b9cd7d3d4022def86c0271a265 Mon Sep 17 00:00:00 2001 From: tonlls Date: Wed, 9 Nov 2022 20:31:55 +0100 Subject: [PATCH 5/5] finished --- Model.py | 82 +++++++++++++++++++++++++++++++++----------------------- main.py | 19 +++++++------ 2 files changed, 59 insertions(+), 42 deletions(-) diff --git a/Model.py b/Model.py index 1f9ae88..96edb80 100644 --- a/Model.py +++ b/Model.py @@ -46,11 +46,12 @@ def generate_qr(self, crypt_id=False): self.qr = Tools.generate_qr((self.id, Tools.crypt(self.id))[crypt_id], Card.QR_PIX_SIZE, Card.QR_BORDER_SIZE) self.qr = Tools.scale(self.qr, Card.QR_SIZE, False) - def generate_card(self, rgb_back=(255, 255, 255), name=None, t=None, h=None): + def generate_card(self, rgb_back=(255, 255, 255)): self.card = Image.open(Config.BAK_PATH) Tools.draw_text(self.card, self.type, Card.TYPE_POS, Config.TYPE_FONT, Config.FONT_COLOR) - if not name is None: - Tools.draw_text(self.card, self.name, Card.NAME_POS, Config.NAME_FONT, Config.FONT_COLOR, mayus=False) + img = Image.new('RGB', (1062, 762),(255,255,255)) + img.paste(self.card, (0,0)) + self.card = img @staticmethod def get_data(): @@ -67,52 +68,65 @@ def get_data(): class Volunteer(Assistant): __ID = 1 __LOGO_PATH = os.path.join(Config.RES_PATH, 'editions', Config.EDITION, 'images', 'logogran.png') - __TYPE = 'VOLUNTARIA/O' + __TYPE = 'VOLUNTARI' __DATA = 'volunteers' - def __init__(self, name): - super().__init__('V' + str(Volunteer.__ID), Volunteer.__TYPE, name) + def __init__(self): + super().__init__('V' + str(Volunteer.__ID), Volunteer.__TYPE) Volunteer.__ID += 1 def generate_card(self, rgb_back=(255, 255, 255)): - super().generate_card(rgb_back, name=self.name) + super().generate_card(rgb_back) @staticmethod def get_data(name=None): - res = [] - data = Tools.DataFile.get_content(Volunteer._DATA_FILE, 'JSON') - for u in data[Volunteer.__DATA]: - if name is None or name == u['name']: - res.append(Volunteer(u['name'])) - if Config.TEST or (name is not None and name == u['name']): - break - return res + pass -class Company(Assistant): +class Expositor(Assistant): __ID = 1 # __LOGO_PATH = os.path.join(Config.RES_PATH, 'editions', Config.EDITION, 'images', 'logogran.png') __TYPE = 'EXPOSITOR' __DATA = 'companies' - def __init__(self, name, company_name): - super().__init__('C' + str(Company.__ID), Company.__TYPE, name) - Company.__ID += 1 - self.company_name = company_name + def __init__(self): + super().__init__('E' + str(Expositor.__ID), Expositor.__TYPE) + Expositor.__ID += 1 - def generate_card(self, rgb_back=(255, 255, 255),t=None,h=None): - super().generate_card(rgb_back, name=self.name, t=t, h=h) - Tools.draw_text(self.card, self.company_name, Card.COMP_NAME_POS, Config.TYPE_FONT, Config.FONT_COLOR) - img = Image.new('RGB', (1063, 763),(255,255,255)) - img.paste(self.card, (0,0)) - self.card = img + def generate_card(self, rgb_back=(255, 255, 255)): + super().generate_card(rgb_back) @staticmethod def get_data(name=None): - res = [] - data = Tools.DataFile.get_content(Company._DATA_FILE, 'JSON') - for u in data[Company.__DATA]: - if name is None or name == u['name']: - res.append(Company(u['name'])) - if Config.TEST or (name is not None and name == u['name']): - break - return res \ No newline at end of file + pass + +class Colaborator(Assistant): + __ID = 1 + __TYPE = 'COL·LABORADOR' + __DATA = 'companies' + + def __init__(self): + super().__init__('C' + str(Colaborator.__ID), Colaborator.__TYPE) + Colaborator.__ID += 1 + + def generate_card(self, rgb_back=(255, 255, 255)): + super().generate_card(rgb_back) + + @staticmethod + def get_data(name=None): + pass + +class Organizer(Assistant): + __ID = 1 + __TYPE = 'ORGANITZADOR' + __DATA = 'companies' + + def __init__(self): + super().__init__('O' + str(Organizer.__ID), Organizer.__TYPE) + Organizer.__ID += 1 + + def generate_card(self, rgb_back=(255, 255, 255)): + super().generate_card(rgb_back) + + @staticmethod + def get_data(name=None): + pass \ No newline at end of file diff --git a/main.py b/main.py index 794b51e..371a0ff 100644 --- a/main.py +++ b/main.py @@ -14,16 +14,19 @@ Tools.create_dir(Config.OUT_PATH) Tools.empty_dir(Config.OUT_PATH) -c=Model.Company('Laura Haro Escoi', 'Lleidahack') -t=40 -h=40 + + +#create 4 cars on each type +users=[] for i in range(4): - c.generate_card(t=t, h=h) - c.card.save(os.path.join(Config.OUT_PATH, 'card' + str(i) + '.png')) + users.append(Model.Colaborator()) + users.append(Model.Organizer()) + users.append(Model.Volunteer()) + users.append(Model.Expositor()) -# for u in users: -# u.generate_card() -# u.save() +for u in users: + u.generate_card() + u.save() # break