def change_password(korisnik): while True: clear_screen() print(' === PROMENA LOZINKE === ') try: new_password = getpass.getpass('Unesite novu lozinku: ').strip() KorisnikLogic.validate_password(new_password) while True: password_confirmation = getpass.getpass( 'Potvrdite lozinku: ').strip() if new_password == password_confirmation: break else: print('Unete lozinke se ne poklapaju, pokusajte ponovo') success = KorisnikLogic.change_password(korisnik, new_password) if success: print('Uspesno ste promenili lozinku') else: print( 'Doslo je do greske prilikom promene lozinke, pokusajte kasnije' ) input() return except InvalidKorisnikInfoError as e: print(' * Greska:', e) if not try_again(): return
def main(): parser = argparse.ArgumentParser(description='Initialize database') parser.add_argument('--auto', dest='auto_init', action='store_true', help='Automatically initialize the system') parser.set_defaults(auto_init=False) args = parser.parse_args() try: if os.path.exists(LOCAL_DATABASE_NAME): if not args.auto_init: hard_reset = input('Baza vec postoji, zelite li da je obrisete i krenete iz pocetka [D/n] ')\ .strip().upper() not in ['N', 'NE'] if not hard_reset: raise Exception() os.remove(LOCAL_DATABASE_NAME) init_db() print('Struktura baze uspesno inicijalizovana') username, password = None, None if args.auto_init: username, password = '******', 'admin12345' else: print(' === UNOS ADMINISTRATOROVOG NALOGA === ') while True: try: username = input('Unesite korisnicko ime: ').strip() KorisnikLogic.validate_username(username) password = getpass.getpass('Unesite lozinku: ').strip() KorisnikLogic.validate_password(password) while True: password_confirmation = getpass.getpass('Potvrdite lozinku: ').strip() if password == password_confirmation: break else: print('Unete lozinke se ne poklapaju, pokusajte ponovo') break except InvalidKorisnikInfoError as e: print(' * Greska:', e) if not input('Zelite li da pokusate ponovo? [D/n] ').strip().upper()\ not in ['N', 'NE']: raise if KorisnikLogic.register_user(username=username, password=password, uloga='admin'): print('Administratorov nalog je uspesno dodat') else: print('Doslo je do greske prilikom dodavanja administratorovog naloga') raise Exception() razredi_ok = True for godina in range(config.MINIMUM_RAZRED, config.MAXIMUM_RAZRED + 1): razredi_ok &= RazredLogic.add_razred(godina) if not razredi_ok: print('Doslo je do greske prilikom dodavanja razreda') raise Exception() print('Razredi su uspesno dodati') print('Sistem je inicijalizovan i spreman za koriscenje') except: print('Doslo je do greske prilikom inicijalizacije sistema')
def promena_prezimena_regularnog_korisnika(korisnik): prezime = input('Novo prezime: ').strip() try: if KorisnikLogic.change_prezime(korisnik, prezime): print('Prezime korisnika je uspesno promenjen') else: print(' * Doslo je do greske prilikom promene prezimena korisnika') except InvalidKorisnikInfoError as e: print(' * Greska:', e) input()
class CustomProfesorPredmetSlusasList(ProfesorPredmetSlusasList): list_heading = f'Ucenici koji pohadjaju predmet {predmet.naziv} kod profesora {profesor.ime} {profesor.prezime}:' prikaz_pojedinacnog = lambda slusa: ProfesorPanelSlusaView( lambda: KorisnikLogic.get_slusa_by_pk(slusa.ucenik_id, slusa. predmet_id)) def list_supplier(self): slusas = KorisnikLogic.get_profesors_predmets_slusa( predmet, profesor) if slusas is None: return None return {slusa.ucenik.id: slusa for slusa in slusas}
def dodavanje_regularnog_korisnika(uloga): uloga = uloga.strip() while True: clear_screen() print(' === Dodavanje {}a ==='.format(uloga)) username = input('Korisnicko ime: ') password = input('Sifra: ') ime = input('Ime: ') prezime = input('Prezime: ') args = { 'username': username, 'password': password, 'ime': ime, 'prezime': prezime, 'uloga': uloga } if uloga == 'ucenik': razred = None while True: razred = input('Razred: ').strip() if razred.isdigit(): break else: print(' * Razred mora biti ceo broj!') razred = int(razred) args['razred'] = razred try: KorisnikLogic.register_user(**args) print('{} je uspesno dodat'.format(uloga.title())) input() return except InvalidKorisnikInfoError as e: print(' * Greska:', e) if not try_again(): return
def login(): while True: print(' === PRIJAVLJIVANJE === ') username = input('Korisnicke ime: ') lozinka = getpass.getpass('Lozinka: ') korisnik = KorisnikLogic.authenticate_user(username, lozinka) if korisnik is None: print(' * Niste uneli postojece ime i lozinku') if not try_again(): return None clear_screen() else: return korisnik
class AdminProfesorList(ListAllView): list_heading = ' === Prikaz svih profesora ===' table_mapping = [ ('ID', lambda profesor: profesor.id), ('IME I PREZIME', lambda profesor: f'{profesor.ime} {profesor.prezime}'), ('PREDMETI', predmeti_profesora_str) ] list_sortings = { 'default': (lambda profesor: profesor.id, False), } prikaz_pojedinacnog = lambda profesor: AdminProfesorView( lambda: KorisnikLogic.get_profesor_by_pk(profesor.id)) def list_supplier(self): return KorisnikLogic.get_all_profesor()
class AdminUcenikList(ListAllView): list_heading = ' === Prikaz svih ucenika ===' table_mapping = [ ('ID', lambda ucenik: ucenik.id), ('IME I PREZIME', lambda ucenik: f'{ucenik.ime} {ucenik.prezime}'), ('GODINA', lambda ucenik: ucenik.razred.godina), ] list_sortings = { 'default': (lambda ucenik: ucenik.id, False), } prikaz_pojedinacnog = lambda ucenik: AdminUcenikView( lambda: KorisnikLogic.get_ucenik_by_pk(ucenik.id)) def list_supplier(self): return KorisnikLogic.get_all_ucenik()
def dodavanje_predmeta_profesoru(profesor): naziv_predmeta = pretty_text_format(input('Naziv predmeta: ')) predmet = PredmetLogic.get_predmet_by_naziv(naziv_predmeta) if predmet is None: print(' * Ne postoji predmet sa unetim imenom') else: try: if KorisnikLogic.add_profesor_predmet_relation(profesor, predmet): print('Predmet je uspesno dodat profesoru') else: print( ' * Doslo je do greske prilikom dodavanja predmeta profesoru' ) except UpdateInfoError as e: print(' * Greska:', e) input()
def dodavanje_slusa_uceniku(ucenik): moguci_predmeti = PredmetLogic.get_predmets_avaliable_to_ucenik(ucenik) if moguci_predmeti is None: print(' * Predmeti se ne mogu ucitati') elif len(moguci_predmeti) == 0: print(' * Ne postoje predmeti koje ucenik moze vise da slusa') else: predmeti_str = ', '.join( map(lambda predmet: predmet.naziv, moguci_predmeti)) print('Predmeti koje ucenik moze da slusa:', predmeti_str) naziv_predmeta = pretty_text_format(input('Naziv predmeta: ')).lower() predmet = next( iter( filter(lambda predmet: predmet.naziv.lower() == naziv_predmeta, moguci_predmeti)), None) if predmet is None: print(' * Ne postoji predmet sa unetim imenom') else: print('Profesori koji predaju dati predmet: ') for profesor in predmet.profesori: print(f' {profesor.id}) {profesor.ime} {profesor.prezime}') id_profesora_txt = input('ID profesora: ').strip() if not id_profesora_txt.isdigit(): print(' * ID Profesora mora biti broj') else: id_profesora = int(id_profesora_txt) profesor = next( iter( filter(lambda profesor: profesor.id == id_profesora, predmet.profesori)), None) if profesor is None: print(' * Ne postoji profesor pod unetim ID-om') else: try: if KorisnikLogic.add_slusa(ucenik, predmet, profesor): print( 'Uspesno ste dodelili profesora i predmet uceniku' ) else: print( ' * Doslo je do greske prilikom povezivanja ucenika i predmeta' ) except UpdateInfoError as e: print(' * Greska:', e) input()
def loop(self): while True: self.korisnik = KorisnikLogic.get_korisnik_by_pk(self.korisnik_id) clear_screen() print(self.panel_heading) print() print(self.user_identity) print() print(' _____ Akcije _____ ') for counter, action in enumerate(self.ACTION_DICTIONARY, self.__STARTING_ACTION_NUMBER): print(' {}) {}'.format(counter, action[0])) print(' X) Odjavi se ') print() action = input('Izaberite akciju: ').strip() if action.upper() == 'X': return self.__handle_action(action)
def change_username(korisnik): while True: clear_screen() print(' === PROMENA KORISNICKOG IMENA === ') try: new_username = input('Unesite novo korisnicko ime: ') success = KorisnikLogic.change_username(korisnik, new_username) if success: print('Uspesno ste promenili korisnicko ime') else: print( 'Doslo je do greske prilikom promene korisnickog imena, pokusajte kasnije' ) input() return except InvalidKorisnikInfoError as e: print(' * Greska:', e) if not try_again(): return
def list_supplier(self): return KorisnikLogic.get_all_profesor()
def list_supplier(self): return KorisnikLogic.get_all_ucenik()
def user_identity(self): ucenik = self.korisnik slusanja = KorisnikLogic.get_uceniks_slusa(ucenik) predmetna_tabela = ocene_ucenika_tabela(slusanja) return f'''\
def informacije_o_uceniku(ucenik): slusas = KorisnikLogic.get_uceniks_slusa(ucenik) return f'''\
def list_supplier(self): slusas = KorisnikLogic.get_profesors_predmets_slusa( predmet, profesor) if slusas is None: return None return {slusa.ucenik.id: slusa for slusa in slusas}