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.
ngcp-panel/share/templates/invoice/invoice_template_aux.tt

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-%]