You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
9.9 KiB
215 lines
9.9 KiB
[%USE Dumper%]
|
|
[%USE Math%]
|
|
[%USE date%]
|
|
[% total = {perpage => [], global => {} } -%]
|
|
|
|
[%MACRO date_format(dateval) BLOCK%]
|
|
[%date.format(dateval,'%B')%] [%ordinate(date.format(dateval,'%e'))%] [%date.format(dateval,'%Y')%]
|
|
[%END%]
|
|
|
|
[%MACRO ordinate(num) BLOCK -%]
|
|
[% IF num.search('(?<!1)1$') -%]
|
|
[% sfx = 'st' -%]
|
|
[% ELSIF num.search('(?<!1)2$') -%]
|
|
[% sfx = 'nd' -%]
|
|
[% ELSIF num.search('(?<!1)3$') -%]
|
|
[% sfx = 'rd' -%]
|
|
[% ELSE -%]
|
|
[% sfx = 'th' -%]
|
|
[%END%]
|
|
[% num _ sfx %]
|
|
[%END%]
|
|
|
|
[%MACRO if(prefix, value) BLOCK -%]
|
|
[%value_clear = value.replace('[ ,]','')%]
|
|
[% IF value_clear -%]
|
|
[% prefix _ value -%]
|
|
[%END%]
|
|
[%END%]
|
|
|
|
[%MACRO get_page(pagetype) BLOCK -%]
|
|
[%#use this macro until no symbolic references in tt %]
|
|
[%#data can be empty, if we just need y - it doesn't depend on data %]
|
|
[%IF pagetype == 'titlepage' %]
|
|
[%page = titlepage()%]
|
|
[%ELSIF pagetype == 'zonepage' %]
|
|
[%page = zonepage()%]
|
|
[%ELSIF pagetype == 'callpage' %]
|
|
[%page = callpage()%]
|
|
[%END%]
|
|
[%page%]
|
|
[%END%]
|
|
|
|
[%MACRO adjustrow(data, page, pagelocal, pageslocalnum, rowtype, tt_type, rows_interval_in, rownumber) BLOCK -%]
|
|
[% rows_interval = ( rows_interval_in > 0 ) ? rows_interval_in : row_vertical_interval%]
|
|
[%IF rowtype == 'datarow' %]
|
|
[%row = datarow(data)%]
|
|
[%ELSIF rowtype == 'totalrow' %]
|
|
===[%Dumper.dump(data)%]
|
|
[%row = totalrow( (pagelocal == pageslocalnum) ? data.global : data.perpage.${pagelocal} )%]
|
|
[%END%]
|
|
[% IF tt_type == 'svg' -%]
|
|
[% y_re = '(?s)(<(?:text)[^>]*\s+y\s*=.*?)([-\d\.,]+)(.*)' -%]
|
|
[%END%]
|
|
[% matches = row.match( y_re ) -%]
|
|
[% IF matches.size > 0 -%]
|
|
[% y_old = Math.int(matches.1) %]
|
|
[% y = y_old + ( rows_interval * ( rownumber - 1 ) ) %]
|
|
[% row = matches.0 _ y _ matches.2 %]
|
|
[% matches_other = row.match('(<.*?\s+y\s*=.*?)([-\d\.,]+)', 1) %]
|
|
[% i = 0 %]
|
|
[%#matches_other[%Dumper.dump_html(matches_other)%]
|
|
[% WHILE i*2 < matches_other.size() %]
|
|
[%IF !matches_other.item(i*2).search('<text')%]
|
|
[% search = matches_other.item(i*2) _ matches_other.item(i*2 + 1)%]
|
|
[% replace = matches_other.item(i*2) _ ( Math.int( matches_other.item(i*2 + 1)) - y_old + y ) %][%#+ rows_interval%][%# + ( rowtype == 'totalrow' ? rows_interval : 0)%]
|
|
[%#search1=[% search%]
|
|
[%#search=[% row.search(search)%]
|
|
[%#replace=[% replace%]
|
|
[% row = row.replace(search, replace ) %]
|
|
[%END -%]
|
|
[% i = i + 1 %]
|
|
[%END -%]
|
|
[%END -%]
|
|
[%row%]
|
|
[%END -%]
|
|
|
|
[%MACRO list_zones(callsdata, page, pagelocal, pageslocalnum, rowtype, total, tt_type, rows_interval) BLOCK-%]
|
|
[% FOR call IN callsdata -%][%#invoice_details%]
|
|
[% total.global.number = total.global.number + call.get_column('number') -%]
|
|
[% total.global.duration = total.global.duration + call.get_column('duration') -%]
|
|
[% total.global.free_time = total.global.free_time + call.get_column('free_time') -%]
|
|
[% total.global.cost = total.global.cost + call.get_column('cost') -%]
|
|
[% total.perpage.${pagelocal}.number = total.perpage.${pagelocal}.number + call.get_column('number') -%]
|
|
[% total.perpage.${pagelocal}.duration = total.perpage.${pagelocal}.duration + call.get_column('duration') -%]
|
|
[% total.perpage.${pagelocal}.free_time = total.perpage.${pagelocal}.free_time + call.get_column('free_time') -%]
|
|
[% total.perpage.${pagelocal}.cost = total.perpage.${pagelocal}.cost + call.get_column('cost') -%]
|
|
[% adjustrow(call, page, pagelocal, pageslocalnum, rowtype, tt_type, rows_interval, loop.count) -%]
|
|
[%END -%]
|
|
[%END -%]
|
|
|
|
[%MACRO list_calls(callsdata, page, pagelocal, pageslocalnum, rowtype, total, tt_type, rows_interval) BLOCK-%]
|
|
[% FOR call IN callsdata -%][%#invoice_details%]
|
|
[% total.global.duration = total.global.duration + call.get_column('duration') -%]
|
|
[% total.global.cost = total.global.cost + call.get_column('source_customer_cost') -%]
|
|
[% total.perpage.${pagelocal}.duration = total.perpage.${pagelocal}.duration + call.get_column('duration') -%]
|
|
[% total.perpage.${pagelocal}.cost = total.perpage.${pagelocal}.cost + call.get_column('source_customer_cost') -%]
|
|
[% adjustrow(call, page, pagelocal, pageslocalnum, rowtype, tt_type, rows_interval, loop.count) -%]
|
|
[%END -%]
|
|
[%END -%]
|
|
|
|
[%MACRO get_page_rows_number(pagetype, tt_type, rows_type) BLOCK-%]
|
|
[% IF tt_type == 'svg' -%]
|
|
[% rows_type = rows_type ? rows_type _ '-' : '' %]
|
|
[% page_rows_re = rows_type _ 'rows="([0-9]+)"' -%]
|
|
[%END%]
|
|
|
|
[% page = get_page(pagetype) %]
|
|
[% matches = page.match( page_rows_re ) -%]
|
|
|
|
[%rows = matches.0 || matches.1 %]
|
|
[%rows = Math.int(rows)%]
|
|
[%rows%]
|
|
[%END -%]
|
|
|
|
[%MACRO get_page_interval(pagetype, tt_type, interval_type) BLOCK-%]
|
|
[% IF tt_type == 'svg' -%]
|
|
[% interval_type = interval_type ? interval_type _ '-' : '' %]
|
|
[% page_interval_re = interval_type _ 'rows-interval="([0-9]+)"' -%]
|
|
[%END%]
|
|
|
|
[% page = get_page(pagetype) %]
|
|
[% matches = page.match( page_interval_re ) -%]
|
|
|
|
[%interval = matches.0 || matches.1 %]
|
|
[%interval = Math.int(rows)%]
|
|
[%interval%]
|
|
[%END -%]
|
|
|
|
[%MACRO show_pages(invoice_details_zones, invoice_details_calls, pagetype, pagenum_in) BLOCK-%]
|
|
[%#todo: remove copypast with some macro, later%]
|
|
[% allzonerowsnumber = invoice_details_zones.size() %]
|
|
[% titlezonerows = get_page_rows_number('titlepage','svg','zone') %]
|
|
[% midzonerows = get_page_rows_number('zonepage','svg') %]
|
|
[% titlezoneinterval = get_page_interval('titlepage','svg','zone') %]
|
|
[% midzoneinterval = get_page_interval('zonepage','svg') %]
|
|
[% midzonerows = get_page_rows_number('zonepage','svg') %]
|
|
[% midzonerows = ( midzonerows < 1 ) ? 30 : midzonerows %]
|
|
|
|
[% allmidzonepages = ( (allzonerowsnumber - titlezonerows) / midzonerows )|format('%d') %]
|
|
[% allmidzonerows = allmidzonepages * midzonerows %]
|
|
[% lastzonerows = allzonerowsnumber - allmidzonerows - titlezonerows %]
|
|
[% allzonepages = allmidzonepages + ( lastzonerows ? 1 : 0 ) %]
|
|
|
|
|
|
[% allcallrowsnumber = invoice_details_calls.size() %]
|
|
[% titlecallrows = get_page_rows_number('titlepage','svg','call') %]
|
|
[% midcallrows = get_page_rows_number('callpage','svg') %]
|
|
[% midcallrows = ( midcallrows < 1 ) ? 30 : midcallrows %]
|
|
[% titlecallinterval = get_page_interval('titlepage','svg', 'call') %]
|
|
[% midcallinterval = get_page_interval('callpage','svg') %]
|
|
|
|
[% allmidcallpages = ( (allcallrowsnumber - titlecallrows) / midcallrows )|format('%d') %]
|
|
[% allmidcallrows = allmidcallpages * midcallrows %]
|
|
[% lastcallrows = allcallrowsnumber - allmidcallrows - titlecallrows %]
|
|
[% allcallpages = allmidcallpages + ( lastcallrows ? 1 : 0 ) %]
|
|
|
|
|
|
[%IF ( pagetype == 'title' || pagetype=='all') %]
|
|
[% pagenum = 1%]
|
|
[% document_header()%]
|
|
|
|
[% titlepage(
|
|
( titlezonerows > 0 && invoice_details_zones.size > 0 ) ? invoice_details_zones.slice(0, titlezonerows - 1 ) : [],
|
|
|
|
( titlecallrows > 0 && invoice_details_calls.size > 0 ) ? invoice_details_calls.slice(0, titlecallrows - 1 ) : [],
|
|
pagenum,
|
|
titlezoneinterval
|
|
titlecallinterval
|
|
) -%]
|
|
[% bgpage(pagenum) -%]
|
|
[% document_footer()%]
|
|
[%END-%]
|
|
[%IF ( pagetype == 'zone' || pagetype=='all' ) && allmidzonerows %]
|
|
[% pages = pagenum_in ? [ pagenum_in ] : [ 1 .. allmidzonepages ] %]
|
|
[%FOREACH pagenum IN pages %]
|
|
[% pagerowsstart = titlezonerows + midzonerows * ( pagenum - 1 )%]
|
|
[% pagerowsend = titlezonerows + midzonerows * pagenum - 1 %]
|
|
[%# pagerowsend = pagerowsend > invoice_details_zones.size() - 1 ? invoice_details_zones.size() - 1 : pagerowsend %]
|
|
[% document_header()%]
|
|
[% zonepage( invoice_details_zones.slice( pagerowsstart, pagerowsend ), total, pagenum + 1, pagenum, allzonepages, midzoneinterval ) -%]
|
|
[%#+1 because of 1 for titlepage %]
|
|
[% bgpage(pagenum + 1, pagenum, allzonepages) -%]
|
|
[% document_footer()%]
|
|
[%END-%]
|
|
[%IF lastzonerows > 0 %]
|
|
[%#2 because zonepages started from 1, not from 0, and we need add 1 for titlepage %]
|
|
[% pagenum = 2 + allmidzonepages %]
|
|
[% document_header()%]
|
|
[% zonepage( invoice_details_zones.slice( allzonerowsnumber - lastzonerows ), total, pagenum, allzonepages, allzonepages, midzoneinterval ) -%]
|
|
[% bgpage(pagenum, allzonepages, allzonepages) -%]
|
|
[% document_footer()%]
|
|
[%END-%]
|
|
[%END-%]
|
|
[%IF ( pagetype == 'call' || pagetype=='all' )%]
|
|
[% pages = pagenum_in ? [ pagenum_in ] : [ 1 .. allmidcallpages ] %]
|
|
[%FOREACH pagenum IN pages %]
|
|
[% pagerowsstart = titlecallrows + midcallrows * ( pagenum - 1 )%]
|
|
[% pagerowsend = titlecallrows + midcallrows * pagenum - 1 %]
|
|
[% document_header()%]
|
|
[% callpage( invoice_details_calls.slice( pagerowsstart, pagerowsend ), total, pagenum + 1 + allzonepages, pagenum, allcallpages, midcallinterval ) -%]
|
|
[%#+1 because of 1 for titlepage %]
|
|
[% bgpage(pagenum + 1 + allzonepages, pagenum, allcallpages ) -%]
|
|
[% document_footer()%]
|
|
[%END-%]
|
|
[%IF lastcallrows > 0 %]
|
|
[%#2 because callpages started from 1, not from 0, and we need add 1 for titlepage %]
|
|
[% pagenum = 2 + allmidcallpages + ( allzonepages ? 1 : 0 ) %]
|
|
[% document_header()%]
|
|
[% callpage( invoice_details_calls.slice( allcallrowsnumber - lastcallrows ), total, pagenum, allcallpages, allcallpages, midcallinterval ) -%]
|
|
[% bgpage(pagenum, allcallpages, allcallpages) -%]
|
|
[% document_footer()%]
|
|
[%END-%]
|
|
[%END-%]
|
|
[%END-%]
|