This is the code of Mod1.py:
# coding: utf-8
from __future__ import unicode_literals
from scriptforge import CreateScriptService
#import subprocess
import webbrowser
import uno
from datetime import datetime
doc = CreateScriptService('Calc')
bas = CreateScriptService('Basic')
#-----Magic strings and numbers------
antw_ja = 6
doen = 1
fout1 = 'BNK.G7'
fout2 = 'BNK.G9'
BNK_sheet = 'BNK'
BNK_kolB = 'BNK.B'
BNK_kolC = 'BNK.C'
BNK_printrange = 'BNK.A1:F'
BNK_afresregels = 'BNK.F7'
BNK_regels = 'BNK.F6'
BNK_alles = 'BNK.B10:F100'
BNK_start = 'B10:F'
BNK_datum = 'BNK.D2'
VPM_sheet = 'VPM'
VPM_kolG = 'G'
VPM_kolR = ':R'
VPM_kolV = 'VPM.V'
VPM_start = 'VPM.B3'
VPM_omschr = 'VPM.C3'
VPM_copykol = 'VPM.F3'
VPM_mndnr = 'VPM.T2'
VPM_mndnaam = 'VPM.U2'
VPM_mndkol = 'VPM.V2'
VPM_regels = 'VPM.V1'
VPM_weken = 'VPM.Y4'
VPM_cprange = 'VPM.C3:E'
VPM_mndrange = 'VPM.F3:F94'
VPM_alles = 'VPM.B3:R94'
INS_sheet = 'INS'
INS_pdfmap = 'INS.M3'
INS_werkjaar = 'INS.P2'
#---------------------------------
def today(n):
uno_date = bas.CDateToUnoDateTime(datetime.now())
mnd = str(uno_date.Month)
mnd = mnd.rjust(2,'0')
dag = str(uno_date.Day)
dag = dag.rjust(2,'0')
jaar = str(uno_date.Year)
if (n == 0):
today = jaar + mnd + dag
else:
today = dag + '-' + mnd + '-' +jaar
return today
def show_msb(args=None):
doc.activate(BNK_sheet)
result = bas.MsgBox('Datum op vandaag zetten?',bas.MB_YESNO + bas.MB_ICONINFORMATION,'BankBeheer')
if result == antw_ja :
doc.SetValue(BNK_datum,today(1))
def print_bnk(args=None):
doc.activate(BNK_sheet)
bnk_range = BNK_printrange + str(doc.GetValue(BNK_regels) + 9)
directory = doc.GetValue(INS_pdfmap)
p_file = directory + 'BNK_' + today(0) + '.pdf'
doc.ExportRangeToFile(bnk_range,p_file, 'pdf', overwrite = True)
webbrowser.open('file://' + p_file)
def dialog_sort(args=None):
dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', 'Standard', 'DlgOvSort')
if (dlg.execute() == doen):
try:
cs = ['ASC', 'DESC']
ks = [1, 2, 5, 1, 2, 5]
KzeListbox = dlg.Controls('ListBoxKeuze')
Kze = KzeListbox.ListIndex
ad = cs[dlg.Controls('SortBox').value]
if (Kze <= 2):
sheet = BNK_sheet
rg = BNK_alles
go = doc.GetValue(BNK_regels) != 0
else:
sheet = VPM_sheet
rg = VPM_alles
go = doc.GetValue(VPM_regels) != 0
if go:
sort_data(sheet, rg, ks[Kze], cs[dlg.Controls('SortBox').value])
finally:
dlg.Terminate()
dlg.dispose()
def sort_data(SN,RN,col,AD):
doc.activate(SN)
doc.SortRange(RN, col, AD, casesensitive = True)
def afb_BNK(args=None):
doc.activate(BNK_sheet)
F = doc.GetValue(BNK_afresregels)
if (bas.MsgBox('Doorgaan met verwerken van ' +str(F) + ' regel(s)?',
bas.MB_YESNO + bas.MB_ICONINFORMATION, 'Verwerken afschrift') == antw_ja):
sort_data(BNK_sheet,BNK_alles,5,'ASC')
doc.clearValues(BNK_start + str(F + 9))
sort_data(BNK_sheet,BNK_alles,1,'ASC')
def dialog_month(args=None):
doc.activate(BNK_sheet)
dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', 'Standard', 'DlgMaandPosten')
if (dlg.execute() == doen):
try:
MndListBox = dlg.Controls('MaandenListBox')
Mnd = MndListBox.ListIndex
Mnd = Mnd+1
mnd_add(Mnd)
finally:
dlg.Terminate()
dlg.dispose()
def mnd_add(mnd):
jr_name = str(doc.GetValue(INS_werkjaar))
doc.SetValue(VPM_mndnr, mnd)
m = doc.GetValue(VPM_mndnaam)
k = doc.GetValue(VPM_mndkol)
if (mnd != 12) :
tv_text = 'Vaste posten van '
else :
tv_text = 'LET OP: dit is de laatste maand van het jaar, er moet een nieuw weekschema voor volgend jaar aangemaakt worden.\n\n Vaste posten van '
if (bas.MsgBox(tv_text + m + '. '+jr_name+' toevoegen?',
bas.MB_YESNO + bas.MB_ICONINFORMATION, 'Toevoegen vaste posten') == antw_ja):
copy_content(k)
def copy_content(column):
doc.clearValues(VPM_mndrange)
source_range = doc.range(VPM_sheet + '.' + column + '3:' + column + '94')
doc.copyToCell(source_range, VPM_copykol)
sort_data(VPM_sheet,VPM_alles,5,'ASC')
number = doc.GetValue(VPM_regels) #aantal regels uit VPM.V1
bnk_start = doc.GetValue(BNK_regels)+10 #startpositie in BNK
arrData = [doc.GetValue(doc.Offset(VPM_start,i)) for i in range(number)]
source_range = doc.range(VPM_cprange + str(number +2))
doc.copyToCell(source_range, BNK_kolC + str(bnk_start))
doc.SetArray(BNK_kolB + str(bnk_start),arrData)
sort_data(BNK_sheet,BNK_alles,1,'ASC')
def close_sheet(args=None):
doc.activate(BNK_sheet)
if ((doc.GetValue(fout1)=='!') or (doc.GetValue(fout2)=='NR')):
bas.MsgBox('LET OP: er zijn nog fouten in het blad BNK!',
bas.MB_OK + bas.MB_ICONEXCLAMATION, 'Afsluiten BankBeheer')
def new_monthscheme(args=None):
if(doc.GetValue(VPM_mndnaam) == 'dec'):
doc.activate(INS_sheet)
text = "Reservering hh week 5"
cell_wk5 = 0
for i in range(91):
start_cell = doc.Offset(VPM_omschr,i)
if(text == doc.GetValue(start_cell)):
cell_wk5 = i + 3
break
doc.clearValues(VPM_kolG + str(cell_wk5) + VPM_kolR + str(cell_wk5))
for j in range(12):
start_wk =doc.Offset(VPM_weken,j)
nr = doc.GetValue(start_wk)
if (nr == 5):
col = doc.GetValue(VPM_kolV + str(j+4))
doc.SetValue(VPM_sheet+ '.' + col + str(cell_wk5), 'x')
doc.SetValue(VPM_mndnr,1)
bas.MsgBox('Jaarschema is doorgevoerd',bas.MB_OK + bas.MB_ICONINFORMATION,'Jaarschema doorvoeren')
else:
bas.MsgBox('Maand december is nog niet toegevoegd.',
bas.MB_OK + bas.MB_ICONEXCLAMATION, 'Jaarschema doorvoeren')
def tester(args=None):
bas.MsgBox('Ok')
g_exportedScripts = (show_msb,
print_bnk,
afb_BNK,
sort_data,
copy_content,
close_sheet,
dialog_month,
dialog_sort,
new_monthscheme,
tester,
)