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
예제 #2
0
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()
예제 #4
0
    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
예제 #6
0
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
예제 #7
0
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()
예제 #8
0
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()
예제 #11
0
 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
예제 #13
0
	def list_supplier(self):
		return KorisnikLogic.get_all_profesor()
예제 #14
0
	def list_supplier(self):
		return KorisnikLogic.get_all_ucenik()
예제 #15
0
	def user_identity(self):
		ucenik = self.korisnik
		slusanja = KorisnikLogic.get_uceniks_slusa(ucenik)
		predmetna_tabela = ocene_ucenika_tabela(slusanja)
		return f'''\
예제 #16
0
def informacije_o_uceniku(ucenik):
    slusas = KorisnikLogic.get_uceniks_slusa(ucenik)

    return f'''\
예제 #17
0
 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}