4.0 Beta (Build 20245)
This commit is contained in:
@@ -6,3 +6,7 @@ quota(I) = 500
|
|||||||
country(S) = Rzeczypospolita Polska
|
country(S) = Rzeczypospolita Polska
|
||||||
schoolData(MSAs) = [LO, 4, 0]|[BS, 3, 1]
|
schoolData(MSAs) = [LO, 4, 0]|[BS, 3, 1]
|
||||||
schoolyearStart(D) = 01.09.* *:*:*
|
schoolyearStart(D) = 01.09.* *:*:*
|
||||||
|
ifHeadlineInMail(B) = 0
|
||||||
|
headlineInMail(S) = beta
|
||||||
|
ifHeadlineInOffice(B) = 0
|
||||||
|
headlineInOffice(S) = beta
|
||||||
@@ -103,6 +103,9 @@ EPOSLabelAnchor(FAanchor) = center
|
|||||||
radiobutton1Background(C) = #21242D
|
radiobutton1Background(C) = #21242D
|
||||||
radiobutton1TextColor(C) = #C0C0C0
|
radiobutton1TextColor(C) = #C0C0C0
|
||||||
radiobutton1IndicatorBackground(C) = #21242D
|
radiobutton1IndicatorBackground(C) = #21242D
|
||||||
|
checkbutton1Background(C) = #21242D
|
||||||
|
checkbutton1TextColor(C) = #C0C0C0
|
||||||
|
checkbutton1IndicatorBackground(C) = #21242D
|
||||||
text1Background(C) = #333842
|
text1Background(C) = #333842
|
||||||
text1TextColor(C) = #C0C0C0
|
text1TextColor(C) = #C0C0C0
|
||||||
text1Relief(FArelief) = flat
|
text1Relief(FArelief) = flat
|
||||||
@@ -118,6 +121,8 @@ settingsCodeLabelWidth(I) = 35
|
|||||||
settingsCodeLabelAnchor(FAanchor) = w
|
settingsCodeLabelAnchor(FAanchor) = w
|
||||||
settingsOtherLabelWidth(I) = 35
|
settingsOtherLabelWidth(I) = 35
|
||||||
settingsOtherLabelAnchor(FAanchor) = w
|
settingsOtherLabelAnchor(FAanchor) = w
|
||||||
|
settingsHeadlineLabelWidth(I) = 35
|
||||||
|
settingsHeadlineLabelAnchor(FAanchor) = w
|
||||||
settingsSchoolDataLabelAnchor(FAanchor) = center
|
settingsSchoolDataLabelAnchor(FAanchor) = center
|
||||||
settingsButtonsPadY(I) = 6
|
settingsButtonsPadY(I) = 6
|
||||||
settingsButtonSaveWidth(I) = 20
|
settingsButtonSaveWidth(I) = 20
|
||||||
|
|||||||
@@ -128,4 +128,15 @@
|
|||||||
- Wyeliminowanie błędu wyrzucającego wyjątek po naciśnięciu przycisku START bez wprowadzenia danych powyżej
|
- Wyeliminowanie błędu wyrzucającego wyjątek po naciśnięciu przycisku START bez wprowadzenia danych powyżej
|
||||||
- Poprawki w pliku wyjściowym office (usunięcie dwóch przecinków pomiedzy stanowiskiem a klasą)
|
- Poprawki w pliku wyjściowym office (usunięcie dwóch przecinków pomiedzy stanowiskiem a klasą)
|
||||||
- Wyeliminowanie błędu pokazującego w komunikacie o błędnych danych, przy zapisie format presetu, wpisanej wartości zamiast recordu
|
- Wyeliminowanie błędu pokazującego w komunikacie o błędnych danych, przy zapisie format presetu, wpisanej wartości zamiast recordu
|
||||||
- Wyeliminowanie błędu pozwalającego na zapisanie wprowadzonego w spinboxie tekstu
|
- Wyeliminowanie błędu pozwalającego na zapisanie wprowadzonego w spinboxie tekstu.
|
||||||
|
|
||||||
|
4.0 Beta (Build 20245)
|
||||||
|
- Wyeliminowanie błędu uniemożliwającego pierwsze uruchomienie programu
|
||||||
|
- Wyeliminowanie błędu pozwalającego na wybranie tej samej lokalizacji dla pliku wyjściowego poczty i office
|
||||||
|
- Skrócenie sekcji strony "O programie"
|
||||||
|
- Dodanie mechanizmu usuwania katalogu programu w appdata po aktualizacji programu
|
||||||
|
- Wyeliminowanie błędu uniemożliwiającego zapisanie ustawień
|
||||||
|
- Dodanie możliwości dodawania nagłówków do plików wyjściowych
|
||||||
|
- Wsparcie dla kodowania ISO-8859-2
|
||||||
|
- Wyeliminowanie błędu wyrzucającego wyjątek w przypadku próby zapisania format presetu o nazwie zawierającej zakazane znaki.
|
||||||
|
- Dodanie mechanizmu pozwalającego na automatyczne resetowanie katalogu programu w appdata podczas uruchamiania programu
|
||||||
@@ -27,42 +27,5 @@
|
|||||||
<br>
|
<br>
|
||||||
<b>dla ZSP Sobolew</b><br>
|
<b>dla ZSP Sobolew</b><br>
|
||||||
</p>
|
</p>
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<hr>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<p>
|
|
||||||
<b>Inne informacje:</b><br>
|
|
||||||
<br><br>
|
|
||||||
Język programowania, użyty w programie: <b>Python</b><br>
|
|
||||||
<br>
|
|
||||||
Biblioteki:
|
|
||||||
</p>
|
|
||||||
<b>
|
|
||||||
<ul>
|
|
||||||
<li>sys</li>
|
|
||||||
<li>os</li>
|
|
||||||
<li>time</li>
|
|
||||||
<li>codecs</li>
|
|
||||||
<li>pathlib</li>
|
|
||||||
<li>shutil</li>
|
|
||||||
</ul>
|
|
||||||
</b>
|
|
||||||
<p>
|
|
||||||
<br>
|
|
||||||
Biblioteki GUI:
|
|
||||||
</p>
|
|
||||||
<b>
|
|
||||||
<ul>
|
|
||||||
<li>tkinter</li>
|
|
||||||
<li>pillow</li>
|
|
||||||
</ul>
|
|
||||||
</b>
|
|
||||||
<p>
|
|
||||||
<br>
|
|
||||||
Języki, użyte do stworzenia strony z instrukcją i dokumentacją techniczną: <b>HTML</b>, <b>CSS</b>, <b>JavaScript</b>
|
|
||||||
</p>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -79,6 +79,10 @@
|
|||||||
<p>W tym polu należy wpisać ilość miejsca (w megabajtach) przeznaczoną dla każdego użytkownika na przechowywanie maili. Te dane są używane w pliku wyjściowym poczty. Przykład: jan.kowalski2023a@losobolew.pl,1234567u:JK,<b>500</b></p>
|
<p>W tym polu należy wpisać ilość miejsca (w megabajtach) przeznaczoną dla każdego użytkownika na przechowywanie maili. Te dane są używane w pliku wyjściowym poczty. Przykład: jan.kowalski2023a@losobolew.pl,1234567u:JK,<b>500</b></p>
|
||||||
<h5>Kraj (zapisany w danych na office)</h5>
|
<h5>Kraj (zapisany w danych na office)</h5>
|
||||||
<p>W tym polu należy wpisać nazwę kraju zamieszkania użytkowników. Będzie ona wykorzystywana w pliku wyjściowym office oraz widoczna w profilu użytkownika w serwisie office. Przykład: jan.kowalski2023a@losobolew.pl,Jan,Kowalski,Jan Kowalski,uczeń,1b LO,,,,,,,,,<b>Rzeczpospolita Polska</b></p>
|
<p>W tym polu należy wpisać nazwę kraju zamieszkania użytkowników. Będzie ona wykorzystywana w pliku wyjściowym office oraz widoczna w profilu użytkownika w serwisie office. Przykład: jan.kowalski2023a@losobolew.pl,Jan,Kowalski,Jan Kowalski,uczeń,1b LO,,,,,,,,,<b>Rzeczpospolita Polska</b></p>
|
||||||
|
<h5>Nagłówek dla pliku wyjściowego poczty</h5>
|
||||||
|
<p>Jeżeli chcesz aby w pierwszej linii pliku wyjściowego dla poczty znajdował się nagłowek, zaznacz opcję "Umieść w pliku". Zawartość nagłówka można edytować w polu tekstowym po lewej.</p>
|
||||||
|
<h5>Nagłówek dla pliku wyjściowego office</h5>
|
||||||
|
<p>Jeżeli chcesz aby w pierwszej linii pliku wyjściowego dla office znajdował się nagłowek, zaznacz opcję "Umieść w pliku". Zawartość nagłówka można edytować w polu tekstowym po lewej.</p>
|
||||||
<h5>Rozpoczęcie roku szkolnego (DD | MM)</h5>
|
<h5>Rozpoczęcie roku szkolnego (DD | MM)</h5>
|
||||||
<p>W tych polach należy wpisać datę rozpoczęcia roku szkolnego (z reguły). W pierwszym polu (po lewo) należy wpisać dzień, a w drugim (po prawo) miesiąc. Te dane są używane do obliczania roku w znaczniku klasy (przykłądowy znacznik klasy: 2023a).</p>
|
<p>W tych polach należy wpisać datę rozpoczęcia roku szkolnego (z reguły). W pierwszym polu (po lewo) należy wpisać dzień, a w drugim (po prawo) miesiąc. Te dane są używane do obliczania roku w znaczniku klasy (przykłądowy znacznik klasy: 2023a).</p>
|
||||||
<h5>Dane o szkołach</h5>
|
<h5>Dane o szkołach</h5>
|
||||||
|
|||||||
@@ -7,6 +7,6 @@
|
|||||||
<title>Generator CSV</title>
|
<title>Generator CSV</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p>nic</p>
|
<p>reset_appdata</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
231
generator.pyw
231
generator.pyw
@@ -16,14 +16,14 @@ class VAR:
|
|||||||
# Informacje o programie
|
# Informacje o programie
|
||||||
programName = 'Generator CSV'
|
programName = 'Generator CSV'
|
||||||
programVersion = '4.0'
|
programVersion = '4.0'
|
||||||
programVersionStage = ''
|
programVersionStage = 'Beta'
|
||||||
programVersionBuild = '20242'
|
programVersionBuild = '20245'
|
||||||
programCustomer = 'ZSP Sobolew'
|
programCustomer = 'ZSP Sobolew'
|
||||||
programAuthors = ['Mateusz Skoczek']
|
programAuthors = ['Mateusz Skoczek']
|
||||||
programToW = ['styczeń', '2019', 'wrzesień', '2020']
|
programToW = ['styczeń', '2019', 'wrzesień', '2020']
|
||||||
|
|
||||||
# Dozwolone kodowanie plików
|
# Dozwolone kodowanie plików
|
||||||
allowedCoding = ['utf-8', 'ANSI']
|
allowedCoding = ['utf-8', 'ANSI', 'iso-8859-2']
|
||||||
|
|
||||||
# Dozwolone znaki
|
# Dozwolone znaki
|
||||||
allowedCharactersInSeparator = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '(', ')', '-', '_', '=', '+', '[', ']', ' ', '?', '/', '>', '.', '<', ',', '"', "'", ':', ';', '|']
|
allowedCharactersInSeparator = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '(', ')', '-', '_', '=', '+', '[', ']', ' ', '?', '/', '>', '.', '<', ',', '"', "'", ':', ';', '|']
|
||||||
@@ -87,6 +87,7 @@ MSGlist = {
|
|||||||
'I0002' : 'Aplikacja zostanie zamknięta w celu przeładowania ustawień',
|
'I0002' : 'Aplikacja zostanie zamknięta w celu przeładowania ustawień',
|
||||||
'E0015' : 'Nie można usunąć wybranych format presetów',
|
'E0015' : 'Nie można usunąć wybranych format presetów',
|
||||||
'E0016' : 'Nie można uruchomić pliku instrukcji (documentation/index.html)',
|
'E0016' : 'Nie można uruchomić pliku instrukcji (documentation/index.html)',
|
||||||
|
'E0017' : 'Nie można zapisać pliku formatu',
|
||||||
}
|
}
|
||||||
|
|
||||||
def MSG(code, terminate, *optionalInfo):
|
def MSG(code, terminate, *optionalInfo):
|
||||||
@@ -124,37 +125,76 @@ def MSG(code, terminate, *optionalInfo):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------- # Opcje deweloperskie # ----------------------------------- #
|
||||||
|
|
||||||
|
dev_config = []
|
||||||
|
if 'dev.cfg' in [x for x in OS.listdir('.\configs')]:
|
||||||
|
try:
|
||||||
|
dev_config = CD.open(r'.\configs\dev.cfg', 'r', 'utf-8').read().split('\n')
|
||||||
|
except Exception as exceptInfo:
|
||||||
|
print('DEVELOPER CONSOLE LOG: Nie można załadować listy aktywnych opcji developerskich')
|
||||||
|
else:
|
||||||
|
print('DEVELOPER CONSOLE LOG: Pomyślnie załadowano listę aktywnych opcji developerskich')
|
||||||
|
print('DEVELOPER CONSOLE LOG: Lista aktywnych opcji developerskich: %s' % str(dev_config))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------- # Sprawdzanie katalogu programu w APPDATA # ------------------------- #
|
# ------------------------- # Sprawdzanie katalogu programu w APPDATA # ------------------------- #
|
||||||
|
|
||||||
appdata = PT.Path.home() / 'Appdata/Roaming'
|
appdata = PT.Path.home() / 'Appdata/Roaming'
|
||||||
|
|
||||||
#TODO
|
if 'reset_appdata' in dev_config:
|
||||||
#SU.rmtree(str(appdata) + '/Generator CSV')
|
try:
|
||||||
#TODO
|
SU.rmtree(str(appdata) + '\Generator CSV')
|
||||||
|
OS.mkdir(str(appdata) + '\Generator CSV')
|
||||||
|
versionFile = CD.open((str(appdata) + r'\Generator CSV\version'), 'w', 'utf-8')
|
||||||
|
versionFile.write(VAR.programVersionBuild)
|
||||||
|
versionFile.close()
|
||||||
|
SU.copy('configs\config.cfg', str(appdata) + '\Generator CSV\config.cfg')
|
||||||
|
SU.copy('configs\style.cfg', str(appdata) + '\Generator CSV\style.cfg')
|
||||||
|
OS.mkdir(str(appdata) + r'\Generator CSV\format-presets')
|
||||||
|
except Exception as exceptInfo:
|
||||||
|
print("DEVELOPER CONSOLE LOG: Folder 'Generator CSV' w folderze 'APPDATA' nie został zresetowany z powodu błędu: %s" % exceptInfo)
|
||||||
|
else:
|
||||||
|
print("DEVELOPER CONSOLE LOG: Folder 'Generator CSV' w folderze 'APPDATA' został zresetowany pomyślnie")
|
||||||
|
|
||||||
def checkAppdata():
|
def checkAppdata():
|
||||||
if 'Generator CSV' not in [x for x in OS.listdir(appdata)]:
|
if 'Generator CSV' not in [x for x in OS.listdir(appdata)]:
|
||||||
try:
|
try:
|
||||||
OS.mkdir(str(appdata) + '/Generator CSV')
|
OS.mkdir(str(appdata) + '\Generator CSV')
|
||||||
SU.copy('configs/config.cfg', str(appdata) + '\Generator CSV\config.cfg')
|
versionFile = CD.open((str(appdata) + r'\Generator CSV\version'), 'w', 'utf-8')
|
||||||
SU.copy('configs/style.cfg', str(appdata) + '\Generator CSV\style.cfg')
|
versionFile.write(VAR.programVersionBuild)
|
||||||
OS.mkdir(str(appdata) + '/Generator CSV/format-presets')
|
versionFile.close()
|
||||||
|
SU.copy('configs\config.cfg', str(appdata) + '\Generator CSV\config.cfg')
|
||||||
|
SU.copy('configs\style.cfg', str(appdata) + '\Generator CSV\style.cfg')
|
||||||
|
OS.mkdir(str(appdata) + r'\Generator CSV\format-presets')
|
||||||
except Exception as exceptInfo:
|
except Exception as exceptInfo:
|
||||||
MSG('E0001', True, exceptInfo)
|
MSG('E0001', True, exceptInfo)
|
||||||
else:
|
else:
|
||||||
if 'config.cfg' not in [x for x in OS.listdir(str(appdata) + '/Generator CSV')]:
|
if 'version' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
|
||||||
|
SU.rmtree(str(appdata) + '\Generator CSV')
|
||||||
|
checkAppdata()
|
||||||
|
else:
|
||||||
|
versionFile = CD.open((str(appdata) + r'\Generator CSV\version'), 'r', 'utf-8')
|
||||||
|
if versionFile.read() != VAR.programVersionBuild:
|
||||||
|
versionFile.close()
|
||||||
|
SU.rmtree(str(appdata) + '\Generator CSV')
|
||||||
|
checkAppdata()
|
||||||
|
if 'config.cfg' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
|
||||||
try:
|
try:
|
||||||
SU.copy('configs/config.cfg', str(appdata) + '\Generator CSV\config.cfg')
|
SU.copy('configs\config.cfg', str(appdata) + '\Generator CSV\config.cfg')
|
||||||
except Exception as exceptInfo:
|
except Exception as exceptInfo:
|
||||||
MSG('E0001', True, exceptInfo)
|
MSG('E0001', True, exceptInfo)
|
||||||
if 'style.cfg' not in [x for x in OS.listdir(str(appdata) + '/Generator CSV')]:
|
if 'style.cfg' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
|
||||||
try:
|
try:
|
||||||
SU.copy('configs/style.cfg', str(appdata) + '\Generator CSV\style.cfg')
|
SU.copy('configs\style.cfg', str(appdata) + '\Generator CSV\style.cfg')
|
||||||
except Exception as exceptInfo:
|
except Exception as exceptInfo:
|
||||||
MSG('E0001', True, exceptInfo)
|
MSG('E0001', True, exceptInfo)
|
||||||
if 'format-presets'not in [x for x in OS.listdir(str(appdata) + '/Generator CSV')]:
|
if 'format-presets' not in [x for x in OS.listdir(str(appdata) + '\Generator CSV')]:
|
||||||
try:
|
try:
|
||||||
OS.mkdir(str(appdata) + '/Generator CSV/format-presets')
|
OS.mkdir(str(appdata) + r'\Generator CSV\format-presets')
|
||||||
except Exception as exceptInfo:
|
except Exception as exceptInfo:
|
||||||
MSG('E0001', True, exceptInfo)
|
MSG('E0001', True, exceptInfo)
|
||||||
|
|
||||||
@@ -221,7 +261,7 @@ class CFG:
|
|||||||
var['D'] = int(var['D'])
|
var['D'] = int(var['D'])
|
||||||
except:
|
except:
|
||||||
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
||||||
if int(var['s']) > 31 or int(var['s']) < 1:
|
if int(var['D']) > 31 or int(var['D']) < 1:
|
||||||
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
||||||
day = str(var['D'])
|
day = str(var['D'])
|
||||||
if len(day) == 1:
|
if len(day) == 1:
|
||||||
@@ -235,7 +275,7 @@ class CFG:
|
|||||||
var['M'] = int(var['M'])
|
var['M'] = int(var['M'])
|
||||||
except:
|
except:
|
||||||
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
||||||
if int(var['s']) > 12 or int(var['s']) < 1:
|
if int(var['M']) > 12 or int(var['M']) < 1:
|
||||||
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
||||||
month = str(var['M'])
|
month = str(var['M'])
|
||||||
if len(month) == 1:
|
if len(month) == 1:
|
||||||
@@ -307,6 +347,7 @@ class CFG:
|
|||||||
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
return (False, 'Niepoprawne dane - klucz: %s' % record)
|
||||||
index = 0
|
index = 0
|
||||||
for x in var:
|
for x in var:
|
||||||
|
x = x.strip('\r')
|
||||||
if x != '*':
|
if x != '*':
|
||||||
try:
|
try:
|
||||||
x = int(x)
|
x = int(x)
|
||||||
@@ -367,6 +408,26 @@ class CFG:
|
|||||||
return [False, 'Niepoprawne dane - klucz: %s' % record]
|
return [False, 'Niepoprawne dane - klucz: %s' % record]
|
||||||
return [True, var]
|
return [True, var]
|
||||||
|
|
||||||
|
def __checkB(self, write, record, var):
|
||||||
|
if write:
|
||||||
|
if var:
|
||||||
|
var = '1'
|
||||||
|
else:
|
||||||
|
var = '0'
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
var = int(var)
|
||||||
|
except:
|
||||||
|
return [False, 'Niepoprawne dane - klucz: %s' % record]
|
||||||
|
if var != 0 and var != 1:
|
||||||
|
return [False, 'Niepoprawne dane - klucz: %s' % record]
|
||||||
|
else:
|
||||||
|
if var == 0:
|
||||||
|
var = False
|
||||||
|
else:
|
||||||
|
var = True
|
||||||
|
return [True, var]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def R(self, record):
|
def R(self, record):
|
||||||
@@ -417,6 +478,13 @@ class CFG:
|
|||||||
return checkingOutput[1]
|
return checkingOutput[1]
|
||||||
else:
|
else:
|
||||||
MSG('E0003', True, checkingOutput[1])
|
MSG('E0003', True, checkingOutput[1])
|
||||||
|
elif var[1] == 'B':
|
||||||
|
# Boolean
|
||||||
|
checkingOutput = self.__checkB(False, record, var[0])
|
||||||
|
if checkingOutput[0]:
|
||||||
|
return checkingOutput[1]
|
||||||
|
else:
|
||||||
|
MSG('E0003', True, checkingOutput[1])
|
||||||
else:
|
else:
|
||||||
MSG('E0003', True, 'Nie można rozpoznać typu klucza %s' % record)
|
MSG('E0003', True, 'Nie można rozpoznać typu klucza %s' % record)
|
||||||
|
|
||||||
@@ -474,6 +542,14 @@ class CFG:
|
|||||||
else:
|
else:
|
||||||
MSG('E0006', False, checkingOutput[1])
|
MSG('E0006', False, checkingOutput[1])
|
||||||
return False
|
return False
|
||||||
|
elif type == 'B':
|
||||||
|
# Boolean
|
||||||
|
checkingOutput = self.__checkB(True, name, var)
|
||||||
|
if checkingOutput[0]:
|
||||||
|
var = checkingOutput[1]
|
||||||
|
else:
|
||||||
|
MSG('E0006', False, checkingOutput[1])
|
||||||
|
return False
|
||||||
else:
|
else:
|
||||||
MSG('E0003', False, 'Nie można rozpoznać typu klucza %s' % name)
|
MSG('E0003', False, 'Nie można rozpoznać typu klucza %s' % name)
|
||||||
return False
|
return False
|
||||||
@@ -889,12 +965,16 @@ class FMT:
|
|||||||
MSG('E0006', False, checkingOutput[1])
|
MSG('E0006', False, checkingOutput[1])
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
MSG('E0003', False, 'Nie można rozpoznać typu klucza %s' % name)
|
MSG('E0006', False, 'Nie można rozpoznać typu klucza %s' % name)
|
||||||
return False
|
return False
|
||||||
content[name] = [var, type]
|
content[name] = [var, type]
|
||||||
with CD.open(str(appdata) + '/Generator CSV/format-presets/%s.fmt' % preset, 'w', 'utf-8') as file:
|
try:
|
||||||
for x in content:
|
with CD.open(str(appdata) + '/Generator CSV/format-presets/%s.fmt' % preset, 'w', 'utf-8') as file:
|
||||||
file.write('%s(%s) = %s\n' % (x, (content[x])[1], (content[x][0])))
|
for x in content:
|
||||||
|
file.write('%s(%s) = %s\n' % (x, (content[x])[1], (content[x][0])))
|
||||||
|
except Exception as exceptInfo:
|
||||||
|
MSG('E0017', False, exceptInfo)
|
||||||
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@@ -936,6 +1016,8 @@ class dataProcess:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def __checkIfCreatingOutputFilesIsPossible(self, files):
|
def __checkIfCreatingOutputFilesIsPossible(self, files):
|
||||||
|
if files[0] == files[1]:
|
||||||
|
return False
|
||||||
try:
|
try:
|
||||||
check = CD.open(files[0], 'w', CFG.R('mailOutputCoding'))
|
check = CD.open(files[0], 'w', CFG.R('mailOutputCoding'))
|
||||||
check = CD.open(files[1], 'w', CFG.R('officeOutputCoding'))
|
check = CD.open(files[1], 'w', CFG.R('officeOutputCoding'))
|
||||||
@@ -1103,8 +1185,12 @@ class dataProcess:
|
|||||||
mailData = data[0]
|
mailData = data[0]
|
||||||
officeData = data[1]
|
officeData = data[1]
|
||||||
with CD.open(mailPath, 'w', CFG.R('mailOutputCoding')) as mail:
|
with CD.open(mailPath, 'w', CFG.R('mailOutputCoding')) as mail:
|
||||||
|
if CFG.R('ifHeadlineInMail'):
|
||||||
|
mail.write(CFG.R('headlineInMail') + '\n')
|
||||||
mail.write('\n'.join(mailData))
|
mail.write('\n'.join(mailData))
|
||||||
with CD.open(officePath, 'w', CFG.R('officeOutputCoding')) as office:
|
with CD.open(officePath, 'w', CFG.R('officeOutputCoding')) as office:
|
||||||
|
if CFG.R('ifHeadlineInOffice'):
|
||||||
|
office.write(CFG.R('headlineInOffice') + '\n')
|
||||||
office.write('\n'.join(officeData))
|
office.write('\n'.join(officeData))
|
||||||
|
|
||||||
|
|
||||||
@@ -2412,7 +2498,7 @@ class mainWindow:
|
|||||||
|
|
||||||
###############################
|
###############################
|
||||||
|
|
||||||
# (4) Rozpoczęcir roku szkolnego
|
# (4) Rozpoczęcie roku szkolnego
|
||||||
|
|
||||||
self.settingsOtherDRRSFrame = TKttk.Frame(self.settingsOtherFrame)
|
self.settingsOtherDRRSFrame = TKttk.Frame(self.settingsOtherFrame)
|
||||||
self.settingsOtherDRRSFrame.config(style = 'layoutFrame.TFrame')
|
self.settingsOtherDRRSFrame.config(style = 'layoutFrame.TFrame')
|
||||||
@@ -2450,6 +2536,97 @@ class mainWindow:
|
|||||||
|
|
||||||
#########################################
|
#########################################
|
||||||
|
|
||||||
|
# (3) Separator #########################
|
||||||
|
|
||||||
|
self.settingsSeparator4 = TKttk.Separator(self.settingsLeftFrame)
|
||||||
|
self.settingsSeparator4.config(style = 'separator1.TSeparator')
|
||||||
|
self.settingsSeparator4.config(orient = TK.HORIZONTAL)
|
||||||
|
self.settingsSeparator4.pack(fill = TK.X, pady = GUI.R('settingsHorizontalSeparatorPadY'))
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
# (4) Nagłówki ##########################
|
||||||
|
|
||||||
|
self.settingsHeadlinesFrame = TKttk.Frame(self.settingsLeftFrame)
|
||||||
|
self.settingsHeadlinesFrame.config(style = 'layoutFrame.TFrame')
|
||||||
|
self.settingsHeadlinesFrame.pack(fill = TK.X)
|
||||||
|
|
||||||
|
# (4) Nagłówek poczty #########
|
||||||
|
|
||||||
|
self.settingsHeadlinesMailFrame = TKttk.Frame(self.settingsHeadlinesFrame)
|
||||||
|
self.settingsHeadlinesMailFrame.config(style = 'layoutFrame.TFrame')
|
||||||
|
self.settingsHeadlinesMailFrame.pack(fill = TK.X, expand = 1, pady = 6)
|
||||||
|
|
||||||
|
# 'Nagłówek dla pliku wyjściowego poczty'
|
||||||
|
self.settingsHeadlinesMailLabel = TKttk.Label(self.settingsHeadlinesMailFrame)
|
||||||
|
self.settingsHeadlinesMailLabel.config(style = 'label1.TLabel')
|
||||||
|
self.settingsHeadlinesMailLabel.config(width = GUI.R('settingsHeadlineLabelWidth'))
|
||||||
|
self.settingsHeadlinesMailLabel.config(anchor = GUI.R('settingsHeadlineLabelAnchor'))
|
||||||
|
self.settingsHeadlinesMailLabel.config(text = 'Nagłówek dla pliku wyjściowego poczty')
|
||||||
|
self.settingsHeadlinesMailLabel.pack(side = TK.LEFT)
|
||||||
|
|
||||||
|
# Nagłówek poczty - checkbutton
|
||||||
|
self.settingsHeadlinesMailCheckbuttonVar = TK.BooleanVar()
|
||||||
|
self.settingsHeadlinesMailCheckbutton = TK.Checkbutton(self.settingsHeadlinesMailFrame)
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(bg = GUI.R('checkbutton1Background'))
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(fg = GUI.R('checkbutton1TextColor'))
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(selectcolor = GUI.R('checkbutton1IndicatorBackground'))
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(activebackground = GUI.R('checkbutton1Background'))
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(activeforeground = GUI.R('checkbutton1TextColor'))
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(text = 'Umieść w pliku')
|
||||||
|
self.settingsHeadlinesMailCheckbutton.config(variable = self.settingsHeadlinesMailCheckbuttonVar)
|
||||||
|
self.settingsHeadlinesMailCheckbutton.pack(side = TK.RIGHT, padx = (6, 0))
|
||||||
|
self.settingsHeadlinesMailCheckbuttonVar.set(CFG.R('ifHeadlineInMail'))
|
||||||
|
|
||||||
|
# Nagłówek poczty - Entry
|
||||||
|
self.settingsHeadlinesMailEntryVar = TK.StringVar()
|
||||||
|
self.settingsHeadlinesMailEntry = TKttk.Entry(self.settingsHeadlinesMailFrame)
|
||||||
|
self.settingsHeadlinesMailEntry.config(style = 'entry1.TEntry')
|
||||||
|
self.settingsHeadlinesMailEntry.config(textvariable = self.settingsHeadlinesMailEntryVar)
|
||||||
|
self.settingsHeadlinesMailEntry.pack(side = TK.RIGHT, fill = TK.X, expand = 1, padx = (0, 6))
|
||||||
|
self.settingsHeadlinesMailEntryVar.set(CFG.R('headlineInMail'))
|
||||||
|
|
||||||
|
###############################
|
||||||
|
|
||||||
|
# (4) Nagłówek office #########
|
||||||
|
|
||||||
|
self.settingsHeadlinesOfficeFrame = TKttk.Frame(self.settingsHeadlinesFrame)
|
||||||
|
self.settingsHeadlinesOfficeFrame.config(style = 'layoutFrame.TFrame')
|
||||||
|
self.settingsHeadlinesOfficeFrame.pack(fill = TK.X, expand = 1, pady = 6)
|
||||||
|
|
||||||
|
# 'Nagłówek dla pliku wyjściowego poczty'
|
||||||
|
self.settingsHeadlinesOfficeLabel = TKttk.Label(self.settingsHeadlinesOfficeFrame)
|
||||||
|
self.settingsHeadlinesOfficeLabel.config(style = 'label1.TLabel')
|
||||||
|
self.settingsHeadlinesOfficeLabel.config(width = GUI.R('settingsHeadlineLabelWidth'))
|
||||||
|
self.settingsHeadlinesOfficeLabel.config(anchor = GUI.R('settingsHeadlineLabelAnchor'))
|
||||||
|
self.settingsHeadlinesOfficeLabel.config(text = 'Nagłówek dla pliku wyjściowego office')
|
||||||
|
self.settingsHeadlinesOfficeLabel.pack(side = TK.LEFT)
|
||||||
|
|
||||||
|
# Nagłówek poczty - checkbutton
|
||||||
|
self.settingsHeadlinesOfficeCheckbuttonVar = TK.BooleanVar()
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton = TK.Checkbutton(self.settingsHeadlinesOfficeFrame)
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(bg = GUI.R('checkbutton1Background'))
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(fg = GUI.R('checkbutton1TextColor'))
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(selectcolor = GUI.R('checkbutton1IndicatorBackground'))
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(activebackground = GUI.R('checkbutton1Background'))
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(activeforeground = GUI.R('checkbutton1TextColor'))
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(text = 'Umieść w pliku')
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.config(variable = self.settingsHeadlinesOfficeCheckbuttonVar)
|
||||||
|
self.settingsHeadlinesOfficeCheckbutton.pack(side = TK.RIGHT, padx = (6, 0))
|
||||||
|
self.settingsHeadlinesOfficeCheckbuttonVar.set(CFG.R('ifHeadlineInOffice'))
|
||||||
|
|
||||||
|
# Nagłówek poczty - Entry
|
||||||
|
self.settingsHeadlinesOfficeEntryVar = TK.StringVar()
|
||||||
|
self.settingsHeadlinesOfficeEntry = TKttk.Entry(self.settingsHeadlinesOfficeFrame)
|
||||||
|
self.settingsHeadlinesOfficeEntry.config(style = 'entry1.TEntry')
|
||||||
|
self.settingsHeadlinesOfficeEntry.config(textvariable = self.settingsHeadlinesOfficeEntryVar)
|
||||||
|
self.settingsHeadlinesOfficeEntry.pack(side = TK.RIGHT, fill = TK.X, expand = 1, padx = (0, 6))
|
||||||
|
self.settingsHeadlinesOfficeEntryVar.set(CFG.R('headlineInOffice'))
|
||||||
|
|
||||||
|
###############################
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
|
||||||
###################################################
|
###################################################
|
||||||
|
|
||||||
# (2) Separator ###################################
|
# (2) Separator ###################################
|
||||||
@@ -2939,6 +3116,10 @@ class mainWindow:
|
|||||||
x[2] = '0'
|
x[2] = '0'
|
||||||
x[1] = str(x[1])
|
x[1] = str(x[1])
|
||||||
self.settingsSchoolDataText.insert(TK.END, (' | '.join(x) + '\n'))
|
self.settingsSchoolDataText.insert(TK.END, (' | '.join(x) + '\n'))
|
||||||
|
self.settingsHeadlinesMailCheckbuttonVar.set(CFG.R('ifHeadlineInMail'))
|
||||||
|
self.settingsHeadlinesMailEntryVar.set(CFG.R('headlineInMail'))
|
||||||
|
self.settingsHeadlinesOfficeCheckbuttonVar.set(CFG.R('ifHeadlineInOffice'))
|
||||||
|
self.settingsHeadlinesOfficeEntryVar.set(CFG.R('headlineInOffice'))
|
||||||
|
|
||||||
def settingsButtonSaveAction(self):
|
def settingsButtonSaveAction(self):
|
||||||
if MSG('A0004', False):
|
if MSG('A0004', False):
|
||||||
@@ -2957,6 +3138,10 @@ class mainWindow:
|
|||||||
's' : None,
|
's' : None,
|
||||||
}
|
}
|
||||||
changes['schoolData'] = (self.settingsSchoolDataText.get("1.0", TK.END)).split('\n')
|
changes['schoolData'] = (self.settingsSchoolDataText.get("1.0", TK.END)).split('\n')
|
||||||
|
changes['ifHeadlineInMail'] = self.settingsHeadlinesMailCheckbuttonVar.get()
|
||||||
|
changes['headlineInMail'] = self.settingsHeadlinesMailEntryVar.get()
|
||||||
|
changes['ifHeadlineInOffice'] = self.settingsHeadlinesOfficeCheckbuttonVar.get()
|
||||||
|
changes['headlineInOffice'] = self.settingsHeadlinesOfficeEntryVar.get()
|
||||||
CFG.W(changes)
|
CFG.W(changes)
|
||||||
self.settingsReset()
|
self.settingsReset()
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user