require 'application_helper'
include ApplicationHelper
module PdfGen
module Generate
require 'pdf/wrapper'
=begin rdoc
Generates header for Tariff.generate_provider_rates_pdf
*Params*
+pdf+ - PdfWrapper PDF object
+i+ - current possition
+options+ - pdf options hash.
*Returns*
+pdf+ - PdfWrapper PDF object with header and page number.
=end
def Generate.generate_provider_rates_pdf_header(pdf, i, options)
pdf.text(_('Destination'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col1_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Subcode'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col2_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Prefix'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col3_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Rate'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col4_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Connection_Fee'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col5_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Increment'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col6_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Min_Time'), {:top=> options[:page_pos] - options[:header_eleveation], :left=> options[:col7_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text("#{PdfGen::Count.pages(i+1, options[:per_page_1], options[:per_page_2] )}/#{options[:total_pages]}", {:top => options[:page_num_pos],:font_size => options[:fontsize] + options[:header_size_add] , :alignment => :right})
pdf
end
# Personal Rates ###############################################################
=begin rdoc
=end
def Generate.generate_personal_rates(dgroups, tariff, tax, usr, currency, options)
digits = Confline.get_value("Nice_Number_Digits").to_i
gnd = Confline.get_value("Global_Number_Decimal").to_s
cgnd = gnd.to_s == '.' ? false : true
i = 1
in_page = 1
options[:page_pos] = options[:first_page_pos]
options[:total_pages] = PdfGen::Count.pages(dgroups.size, options[:per_page1], options[:per_page2])
options[:per_page] = options[:per_page1]
options[:total_items] = dgroups.size
pdf = PDF::Wrapper.new(:paper => :A4)
pdf.font("Nimbus Sans L")
pdf.text(_('Personal_rates'), {:top => options[:title_pos], :font_size => options[:title_fontsize], :alignment => :left})
pdf.text(_('Name') + ": #{usr.username}", {:top => options[:title2_pos], :font_size => options[:title2_fontsize], :alignment => :left})
pdf.text(_('Currency') + ": " +currency , {:top => options[:title3_pos], :font_size => options[:title2_fontsize], :alignment => :left})
pdf = PdfGen::Generate.generate_personal_rates_pdf_header(pdf,i, options)
exrate = Currency.count_exchange_rate(tariff.currency, currency)
for dg in dgroups
@arates, @crates, @arate_cur = Rate.get_personal_rate_details(tariff, dg, usr.id, exrate)
if @arates.size > 0
pdf.text(dg.name, {:top => options[:page_pos]+ in_page*options[:step_size], :left => options[:col1_x], :font_size => options[:fontsize]})
pdf.text(dg.desttype, {:top => options[:page_pos]+ in_page*options[:step_size], :left => options[:col2_x], :font_size => options[:fontsize]})
if @arates.size > 0
if @arates.size > 1 || (@arates.size > 0 && @crates.size > 0)
@arate_cur_ = nice_number(@arate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}).to_s + " *"
else
@arate_cur_ = nice_number(@arate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd})
end
pdf.text(@arate_cur_, {:top => options[:page_pos]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
pdf.text(nice_number(tax.count_tax_amount(@arate_cur)+@arate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:top => options[:page_pos]+ in_page*options[:step_size], :left => options[:col4_x], :font_size => options[:fontsize]})
else
pdf.text("0", {:top => options[:page_pos]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
pdf.text("0", {:top => options[:page_pos]+ in_page*options[:step_size], :left => options[:col4_x], :font_size => options[:fontsize]})
end
if in_page == options[:per_page] and i != options[:total_items]
pdf.start_new_page
options[:per_page] = options[:per_page2]
options[:page_pos] = options[:second_page_pos]
pdf = PdfGen::Generate.generate_personal_rates_pdf_header(pdf,i, options)
in_page = 0
end
i += 1
in_page += 1
end
end
pdf
end
=begin rdoc
=end
def Generate.generate_personal_rates_pdf_header(pdf, i, options)
pdf.text(_('Name'), {:top => options[:page_pos] - options[:header_elevation], :left => options[:col1_x], :font_size => options[:fontsize] + options[:header_add_size]})
pdf.text(_('Type'), {:top => options[:page_pos] - options[:header_elevation], :left => options[:col2_x], :font_size => options[:fontsize] + options[:header_add_size]})
pdf.text(_('Rate'), {:top => options[:page_pos] - options[:header_elevation], :left => options[:col3_x], :font_size => options[:fontsize] + options[:header_add_size]})
pdf.text(_('Rate_with_VAT'), {:top => options[:page_pos] - options[:header_elevation], :left => options[:col4_x], :font_size => options[:fontsize] + options[:header_add_size]})
pdf.text(PdfGen::Count.pages(i+1,options[:per_page1], options[:per_page2]).to_s + "/#{options[:total_pages]}",{:alignment => :right, :top=> options[:page_number_pos] , :font_size =>options[:fontsize] + options[:header_add_size]})
pdf
end
=begin rdoc
Generates basic header data for pdf with given options
*Params*
pdf - PDF::Wrapper pdf object.
options - hash containing setup values.
*Returns*
pdf - PDF::Wrapper pdf object with basic pdf header data
=end
def Generate.call_list_to_pdf_header_basic(pdf, options)
pdf.text(_('date'), {:left=> options[:dat_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(_('called_from'), {:left=> options[:caf_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(_('called_to'), {:left=> options[:cat_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(_('duration'), {:left=> options[:dur_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(_('hangup_cause'), {:left=> options[:han_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf
end
=begin rdoc
Need def
=end
def Generate.call_list_to_pdf_header(pdf, direction, usertype, i,options)
ystart = options[:ystart]
header_elevation = options[:header_elevation]
fontsize = options[:fontsize]
header_add_size = options[:header_add_size]
pdf = call_list_to_pdf_header_basic(pdf, options)
if options[:pdf_last_calls].to_i == 1
header_elevation2 = options[:header_elevation2]
if ['admin', 'accountant'].include?(usertype)
pdf.text(_('Server'),{:left=> options[:ser], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Provider'),{:left=> options[:p_na], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Name'),{:left=> options[:p_na], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Rate'),{:left=> options[:p_ra], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Price'),{:left=> options[:p_pr], :top=> ystart - header_elevation2, :font_size =>fontsize})
if options[:rs_active]
pdf.text(_('Reseller'),{:left=> options[:r_na], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Name'),{:left=> options[:r_na], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Rate'),{:left=> options[:r_ra], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Price'),{:left=> options[:r_pr], :top=> ystart - header_elevation2, :font_size =>fontsize})
end
pdf.text(_('User'),{:left=> options[:u_na], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Name'),{:left=> options[:u_na], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Rate'),{:left=> options[:u_ra], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Price'),{:left=> options[:u_pr], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Did'),{:left=> options[:did], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Number'),{:left=> options[:did], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Provider'),{:left=> options[:did_p], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Incoming'),{:left=> options[:did_inc], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Owner'),{:left=> options[:did_ow], :top=> ystart - header_elevation2, :font_size =>fontsize})
end
if usertype == 'reseller'
if options[:reseller_allow_providers_tariff]
pdf.text(_('Provider'),{:left=> options[:p_na], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Name'),{:left=> options[:p_na], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Rate'),{:left=> options[:p_ra], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Price'),{:left=> options[:p_pr], :top=> ystart - header_elevation2, :font_size =>fontsize})
end
pdf.text(_('Selfcost'),{:left=> options[:r_ra], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size}) if options[:rs_active]
pdf.text(_('Rate'),{:left=> options[:r_ra], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Price'),{:left=> options[:r_pr], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('User'),{:left=> options[:u_na], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Name'),{:left=> options[:u_na], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Rate'),{:left=> options[:u_ra], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Price'),{:left=> options[:u_pr], :top=> ystart - header_elevation2, :font_size =>fontsize})
pdf.text(_('Did'),{:left=> options[:did], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#--------------------- rate price name
pdf.text(_('Number'),{:left=> options[:did], :top=> ystart - header_elevation2, :font_size =>fontsize})
end
if usertype == 'user'
pdf.text(_('Prefix_used'),{:left=> options[:prefix], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Price'),{:left=> options[:u_pr], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
end
else
if usertype == "admin"
if direction == "incoming"
pdf.text(_('Provider'),{:left=> options[:pri_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Incoming'),{:left=> options[:pri2_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Owner'), {:left=> options[:pri3_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Profit'), {:left=> options[:pri4_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
else
pdf.text(_('Price'), {:left=> options[:pri_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Provider_price'),{:left=> options[:pri2_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Profit'), {:left=> options[:pri3_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Margin'), {:left=> options[:pri4_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Markup'), {:left=> options[:pri5_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
end
end
if usertype == "reseller"
if direction == "incoming"
# pdf.text(_('Provider'),{:left=> options[:pri_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
# pdf.text(_('Incoming'),{:left=> options[:pri2_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
# pdf.text(_('Owner'), {:left=> options[:pri3_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
# pdf.text(_('Profit'), {:left=> options[:pri4_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Price'),{:left=> options[:pri_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
else
pdf.text(_('Price'), {:left=> options[:pri_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Provider_price'),{:left=> options[:pri2_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Profit'), {:left=> options[:pri3_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Margin'), {:left=> options[:pri4_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
pdf.text(_('Markup'), {:left=> options[:pri5_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
end
end
if usertype == "user"
#if direction != "incoming"
pdf.text(_('Price'),{:left=> options[:pri_x], :top=> ystart - header_elevation, :font_size =>fontsize+header_add_size})
#end
end
end
pdf.text(PdfGen::Count.pages(i+1,options[:calls_per_page_first], options[:calls_per_page_second]).to_s + "/#{options[:total_pages]}",{:alignment => :right, :top=> 780, :font_size =>options[:page_number_size]})
pdf
end
=begin rdoc
=end
def Generate.providers_calls_to_pdf_header(pdf, i,options)
pdf = call_list_to_pdf_header_basic(pdf, options)
pdf.text(_('User_price'), {:left=> options[:col1_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(_('Provider_price'), {:left=> options[:col2_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(_('Profit'), {:left=> options[:col3_x], :top=> options[:ystart] - options[:header_elevation], :font_size => options[:fontsize]+options[:header_add_size]})
pdf.text(PdfGen::Count.pages(i+1,options[:first_page_items], options[:second_page_items]).to_s + "/#{options[:total_pages]}",{:alignment => :right, :top=> 780, :font_size =>options[:page_number_size]})
pdf
end
=begin rdoc
Generate provider calls PDF.
*Params*
provider - Provider object.
calls - Array of Call objects.
options - hash containing format options.
*Returns*
pdf - PDF::Wrapper generated document.
=end
def Generate.providers_calls_to_pdf(provider, calls ,options)
options[:ystart] = options[:first_page_pos]
options[:per_page] = options[:first_page_items]
options[:total_items] = calls.size
options[:total_pages] = PdfGen::Count.pages(options[:total_items],options[:first_page_items], options[:second_page_items]).to_i
digits = Confline.get_value("Nice_Number_Digits").to_i
gnd = Confline.get_value("Global_Number_Decimal").to_s
cgnd = gnd.to_s == '.' ? false : true
i = 1
in_page = 1
pdf = PDF::Wrapper.new(:paper => :A4)
pdf.font("Nimbus Sans L")
# title
pdf.text(_('CDR_Records') + ": #{provider.name}", {:top => options[:title_pos1], :font_size => options[:title_fontsize], :alignment => :left})
pdf.text(_('Call_type') + ": " + options[:call_type], {:top => options[:title_pos2], :font_size => options[:title_fontsize2], :alignment => :left})
pdf.text(_('Period') + ": " + options[:date_from] + " - " + options[:date_till], {:top => options[:title_pos3], :font_size => options[:title_fontsize2], :alignment => :left})
pdf.text(_('Currency') + ": #{options[:currency]}", {:top => options[:title_pos4], :font_size => options[:title_fontsize3], :alignment => :left})
pdf.text(_('Total_calls') + ": #{calls.size}", {:top => options[:title_pos5], :font_size => options[:title_fontsize3], :alignment => :left})
pdf = Generate.providers_calls_to_pdf_header(pdf,i, options)
total_price = 0
total_billsec = 0
exrate = Currency.count_exchange_rate(options[:default_currency], options[:currency])
for call in calls
rate_cur, rate_cpr = Rate.get_provider_rate(call, options[:direction],exrate)
pdf.text(call.calldate.strftime("%Y-%m-%d %H:%M:%S"), {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:dat_x], :font_size => options[:fontsize]})
pdf.text(call.src, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:caf_x], :font_size => options[:fontsize]})
pdf.text(call.dst, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:cat_x], :font_size => options[:fontsize]})
if @direction == "incoming"
billsec = call.did_billsec
else
billsec = call.billsec
end
if billsec == 0
pdf.text("00:00:00", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:dur_x ], :font_size => options[:fontsize]})
else
pdf.text(nice_time(billsec), {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:dur_x ], :font_size => options[:fontsize]})
end
pdf.text(call.disposition, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:han_x], :font_size => options[:fontsize]})
pdf.text(nice_number(rate_cur, {:nice_number_digits => options [:nice_number_digits]}), {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col1_x], :font_size => options[:fontsize]})
pdf.text(nice_number(rate_cpr, {:nice_number_digits => options [:nice_number_digits]}), {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col2_x], :font_size => options[:fontsize]})
user_price = 0
user_price = rate_cur if call.user_price
provider_price = 0
provider_price = rate_cpr if provider_price
pdf.text(nice_number(user_price - provider_price, {:nice_number_digits => options [:nice_number_digits]}), {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
if in_page == options[:per_page] and i != options[:total_items]
pdf.start_new_page
options[:per_page] = options[:second_page_items]
options[:ystart] = options[:second_page_pos]
pdf = Generate.providers_calls_to_pdf_header(pdf,i, options)
in_page = 0
end
total_price +=rate_cur if call.user_price
total_billsec += call.billsec
i += 1
in_page += 1
end
pdf.text(_('Profit'), {:left=> options[:dat_x], :top=> 760, :font_size => options[:fontsize]+options[:header_add_size]})
if total_billsec == 0
pdf.text("00:00:00", {:left=> options[:dur_x], :top=> 760, :font_size => options[:fontsize]+options[:header_add_size]})
else
pdf.text(nice_time(total_billsec), {:left=> options[:dur_x], :top=> 760, :font_size => options[:fontsize]+options[:header_add_size]})
end
pdf.text(nice_number(total_price, options), {:left=> options[:col3_x], :top=> 760, :font_size => options[:fontsize]+options[:header_add_size]})
pdf
end
=begin rdoc
Generates header for wholesale rates pdf.
=end
def Generate.generate_personal_wholesale_rates_pdf_header(pdf, i, options)
pdf.text(_('Destination'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col1_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Subcode'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col2_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Prefix'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col3_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Rate'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col4_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Connection_Fee'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col5_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Increment'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col6_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Min_Time'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col7_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(PdfGen::Count.pages(i+1,options[:first_page_items], options[:second_page_items]).to_s + "/#{options[:total_pages]}",{:alignment => :right, :top=> options[:page_num_pos], :font_size =>options[:page_number_size]})
pdf
end
=begin rdoc
Generates wholesale rates pdf.
=end
def Generate.generate_personal_wholesale_rates_pdf(rates,tariff, user, options)
pdf = PDF::Wrapper.new(:paper => :A4)
pdf.font("Nimbus Sans L")
options[:ystart] = options[:first_page_pos]
options[:per_page] = options[:first_page_items]
options[:total_items] = rates.size
options[:total_pages] = PdfGen::Count.pages(options[:total_items],options[:first_page_items], options[:second_page_items]).to_i
digits = Confline.get_value("Nice_Number_Digits").to_i
gnd = Confline.get_value("Global_Number_Decimal").to_s
cgnd = gnd.to_s == '.' ? false : true
i = 1
in_page = 1
@country_codes = {}
Direction.find(:all).each { |dc| @country_codes[dc.code] = dc.name }
pdf.text(_('Rates') , {:top => options[:title_pos1], :font_size => options[:title_fontsize1], :alignment => :left})
pdf.text(_('Currency') + ": " + (options[:currency]).to_s,{:top => options[:title_pos2], :font_size => options[:title_fontsize2], :alignment => :left})
pdf = Generate.generate_personal_wholesale_rates_pdf_header(pdf, i,options)
exrate = Currency.count_exchange_rate(tariff.currency, options[:currency])
for rate in rates
rate_details, rate_cur = Rate.get_provider_rate_details(rate, exrate)
if rate.destination && @country_codes[rate.destination.direction_code]
pdf.text(@country_codes[rate.destination.direction_code], {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col1_x], :font_size => options[:fontsize]})
pdf.text(rate.destination.subcode, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col2_x], :font_size => options[:fontsize]})
pdf.text(rate.destination.prefix, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
else
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col1_x], :font_size => options[:fontsize]})
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col2_x], :font_size => options[:fontsize]})
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
end
if rate_details.size > 0
rate_cur = rate_details.size > 1 ? nice_number(rate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}).to_s + " *" : nice_number(rate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd})
pdf.text(rate_cur, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col4_x], :font_size => options[:fontsize]})
pdf.text(rate_details[0]['connection_fee'], {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col5_x], :font_size => options[:fontsize]})
pdf.text(rate_details[0]['increment_s'], {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col6_x], :font_size => options[:fontsize]})
pdf.text(rate_details[0]['min_time'], {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col7_x], :font_size => options[:fontsize]})
else
pdf.text("0.0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col4_x], :font_size => options[:fontsize]})
pdf.text("0.0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col5_x], :font_size => options[:fontsize]})
pdf.text(0, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col6_x], :font_size => options[:fontsize]})
pdf.text(0, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col7_x], :font_size => options[:fontsize]})
end
if rate_details.size > 1
pdf.text(_('*_Maximum_rate'), {:top => options[:page_num_pos], :left => options[:col1_x], :font_size => options[:fontsize]})
end
if in_page == options[:per_page] and i != options[:total_items]
pdf.start_new_page
options[:per_page] = options[:second_page_items]
options[:ystart] = options[:second_page_pos]
pdf = Generate.generate_personal_wholesale_rates_pdf_header(pdf, i,options)
in_page = 0
end
i += 1
in_page += 1
end
pdf
end
=begin rdoc
=end
def Generate.generate_user_rates_pdf_header(pdf, i, options)
pdf.text(_('Destination'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col1_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Subcode'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col2_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Rate'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col3_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(_('Round'), {:top=> options[:ystart] - options[:header_eleveation], :left=> options[:col4_x], :font_size => options[:fontsize] + options[:header_size_add]} )
pdf.text(PdfGen::Count.pages(i+1,options[:first_page_items], options[:second_page_items]).to_s + "/#{options[:total_pages]}",{:alignment => :right, :top=> options[:page_num_pos], :font_size =>options[:page_number_size]})
pdf
end
=begin rdoc
=end
def Generate.generate_user_rates_pdf(rates, tariff, options)
pdf = PDF::Wrapper.new(:paper => :A4)
pdf.font("Nimbus Sans L")
options[:ystart] = options[:first_page_pos]
options[:per_page] = options[:first_page_items]
options[:total_items] = rates.size
options[:total_pages] = PdfGen::Count.pages(options[:total_items],options[:first_page_items], options[:second_page_items]).to_i
digits = Confline.get_value("Nice_Number_Digits").to_i
gnd = Confline.get_value("Global_Number_Decimal").to_s
cgnd = gnd.to_s == '.' ? false : true
i = 1
in_page = 1
pdf.text(_('Users_rates') , {:top => options[:title_pos1], :font_size => options[:title_fontsize1], :alignment => :left})
pdf.text(_('Name') + ": #{tariff.name}", {:top => options[:title_pos2], :font_size => options[:title_fontsize2], :alignment => :left})
pdf.text(_('Currency') + ": " + options[:currency], {:top => options[:title_pos3], :font_size => options[:title_fontsize2], :alignment => :left})
pdf = Generate.generate_user_rates_pdf_header(pdf, i, options)
exrate = Currency.count_exchange_rate(tariff.currency, options[:currency])
for rate in rates
arate_details, arate_cur = Rate.get_user_rate_details(rate, exrate)
if rate.destinationgroup
pdf.text(rate.destinationgroup.name, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col1_x], :font_size => options[:fontsize]})
pdf.text(rate.destinationgroup.desttype, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col2_x], :font_size => options[:fontsize]})
else
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col1_x], :font_size => options[:fontsize]})
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col2_x], :font_size => options[:fontsize]})
end
if arate_details.size > 0
arate_cur = arate_details.size > 1 ? nice_number(arate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}).to_s + " *" : nice_number(arate_cur, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd})
pdf.text(arate_cur, {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
pdf.text(arate_details[0]['round'], {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col4_x], :font_size => options[:fontsize]})
else
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col3_x], :font_size => options[:fontsize]})
pdf.text("0", {:top => options[:ystart]+ in_page*options[:step_size], :left => options[:col4_x], :font_size => options[:fontsize]})
end
if in_page == options[:per_page] and i != options[:total_items]
pdf.start_new_page
options[:per_page] = options[:second_page_items]
options[:ystart] = options[:second_page_pos]
pdf = Generate.generate_user_rates_pdf_header(pdf, i, options)
in_page = 0
end
i += 1
in_page += 1
end
pdf
end
=begin rdoc
=end
def Generate.generate_cc_invoice(invoice, options)
# additional values used in header generation
options[:box_bottom] = options[:item_line_start]+options[:lines]*options[:item_line_height]
options[:box_right] = options[:left]+options[:length]
options[:box2_length] = options[:box_right]- options[:col3_x]
options[:tax_start] = options[:box_bottom] + options[:item_line_height]+options[:tax_box_text_add_y]
options[:tax_box_start] = options[:box_bottom] + options[:item_line_height]
options[:gnd] = Confline.get_value("Global_Number_Decimal").to_s
options[:cgnd] = options[:gnd].to_s == '.' ? false : true
i = 1
in_page = 1
subtotal = 0
options[:order] = invoice.ccorder
line_items = Cclineitem.find(:all, :include => [:cardgroup], :conditions => "ccorder_id = #{options[:order].id}")
cg = line_items[0].cardgroup
options[:owner_id] = cg.owner_id.to_i
options[:company] = Confline.get_value("Company", options[:owner_id]).to_s
options[:tax] = cg.get_tax
options[:total_tax_name] = options[:tax].total_tax_name.to_s
options[:total_tax_name] += " " + nice_number(options[:tax].tax1_value.to_f, {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}).to_s + "%" if options[:tax].get_tax_count == 1
options[:email] =invoice.email
Confline.get_value("Round_finals_to_2_decimals").to_i == 1 ? options[:nice_num_dig] = 2 : options[:nice_num_dig] = Confline.get_value("Nice_Number_Digits").to_i
options[:line_items] = line_items.size
options[:total_pages] = PdfGen::Count.pages(options[:line_items],options[:lines])
pdf = PDF::Wrapper.new(:paper => :A4)
pdf.font("Nimbus Sans L")
pdf = Generate.generate_cc_invoice_header(pdf, invoice,i,options)
txt_start = options[:item_line_start] + options[:item_line_add_y]-options[:item_line_height]
line_items.each{ |item|
pdf.text(item.cardgroup.name, {:left => options[:left] + options[:item_line_add_x], :top =>txt_start + in_page*options[:item_line_height] , :font_size => options[:address_fontsize]})
pdf.text(item.quantity, {:left => options[:col1_x]+options[:item_line_add_x], :top =>txt_start + in_page*options[:item_line_height] , :font_size => options[:address_fontsize]})
pdf.text(nice_number(item.price, {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}), {:left => options[:col2_x]+options[:item_line_add_x], :top =>txt_start + in_page*options[:item_line_height] , :font_size => options[:address_fontsize]})
pdf.text(nice_number(item.price*item.quantity, {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}), {:left => options[:col3_x]+options[:item_line_add_x], :top =>txt_start + in_page*options[:item_line_height] , :font_size => options[:address_fontsize]})
subtotal += (item.price*item.quantity).to_f
if (in_page == options[:lines]) and (i != options[:line_items])
pdf.start_new_page
pdf = Generate.generate_cc_invoice_header(pdf, invoice,i,options)
in_page =0
end
i += 1
in_page +=1
}
options[:taxes] = options[:tax].applied_tax_list(subtotal)
pdf = Generate.generate_cc_invoice_tax_and_total(pdf,subtotal, options)
pdf
end
end
private
=begin rdoc
=end
def Generate.generate_cc_invoice_header(pdf, invoice, current_position, options)
#additional values
#options[:box_top]
#options[:box2_bottom] = options[:box_bottom] + options[:box2_items]*options[:item_line_height]
# text
page = PdfGen::Count.pages(current_position+1,options[:lines])
pdf.color(:Gray)
pdf.text( _('INVOICE'), {:left => options[:title_left2], :top => options[:title_pos0], :font_size =>options[:title_fontsize1]})
pdf.color(:Black)
pdf.text(_('Date') + ": " + nice_date_time(invoice.created_at).to_s, {:left => options[:title_left2], :top => options[:title_pos1], :font_size => options[:title_fontsize2]})
pdf.text(_('Invoice_number') + ": " + invoice.number.to_s, {:left => options[:title_left2], :top => options[:title_pos2], :font_size => options[:title_fontsize2]})
pdf.text(options[:company], {:left => options[:left], :top => options[:address_pos1], :font_size => options[:title_fontsize]})
pdf.text(Confline.get_value("Invoice_Address1", options[:owner_id]), {:left => options[:left], :top => options[:address_pos2], :font_size => options[:address_fontsize]})
pdf.text(Confline.get_value("Invoice_Address2", options[:owner_id]), {:left => options[:left], :top => options[:address_pos3], :font_size => options[:address_fontsize]})
pdf.text(Confline.get_value("Invoice_Address3", options[:owner_id]), {:left => options[:left], :top => options[:address_pos4], :font_size => options[:address_fontsize]})
pdf.text(Confline.get_value("Invoice_Address4", options[:owner_id]), {:left => options[:left], :top => options[:address_pos5], :font_size => options[:address_fontsize]})
pdf.text("#{_("Email")}: #{options[:email]}", {:left => options[:left], :top =>(options[:line_y]+options[:item_line_start] - options[:item_line_height])/2 , :font_size => options[:address_fontsize]})
# grid
pdf.rectangle(options[:left], options[:line_y], options[:length], 0,{:line_width => 1, :fill_color => :Gray, :color => :Gray})
(options[:lines]/2).times { |i|
pdf.rectangle(options[:left], options[:item_line_start]+(i)*options[:item_line_height]*2,options[:length] , options[:item_line_height], {:line_width => 0, :fill_color => :LIGHT_GREY})
}
pdf.line(options[:left], options[:item_line_start]-options[:item_line_height], options[:left]+options[:length], options[:item_line_start]-options[:item_line_height],{:line_width => 1})
pdf.line(options[:left], options[:item_line_start], options[:box_right], options[:item_line_start],{:line_width => 1})
pdf.line(options[:left], options[:box_bottom], options[:box_right], options[:box_bottom],{:line_width => 1})
pdf.line(options[:left], options[:item_line_start] -options[:item_line_height], options[:left], options[:box_bottom],{:line_width => 1})
pdf.line(options[:box_right], options[:item_line_start]-options[:item_line_height], options[:box_right], options[:box_bottom],{:line_width => 1})
pdf.line(options[:col1_x], options[:item_line_start]-options[:item_line_height], options[:col1_x], options[:box_bottom],{:line_width => 1})
pdf.line(options[:col2_x], options[:item_line_start]-options[:item_line_height], options[:col2_x], options[:box_bottom],{:line_width => 1})
pdf.line(options[:col3_x], options[:item_line_start]-options[:item_line_height], options[:col3_x], options[:box_bottom],{:line_width => 1})
# header text
pdf.text(_("Card"), {:left => options[:left]+ options[:item_line_add_x] , :top =>options[:item_line_start] - options[:item_line_height] + options[:item_line_add_y] , :font_size => options[:address_fontsize]})
pdf.text(_("Quantity"), {:left => options[:col1_x]+options[:item_line_add_x] , :top =>options[:item_line_start] - options[:item_line_height] + options[:item_line_add_y] , :font_size => options[:address_fontsize]})
pdf.text(_("Price"), {:left => options[:col2_x]+options[:item_line_add_x] , :top =>options[:item_line_start] - options[:item_line_height] + options[:item_line_add_y] , :font_size => options[:address_fontsize]})
pdf.text(_("Total"), {:left => options[:col3_x]+options[:item_line_add_x] , :top =>options[:item_line_start] - options[:item_line_height] + options[:item_line_add_y] , :font_size => options[:address_fontsize]})
#address
if page == options[:total_pages]
bank_y = options[:box_bottom]+ options[:item_line_add_y]
i = -1
pdf.text(Confline.get_value("Invoice_Bank_Details_Line1", options[:owner_id]), {:left =>options[:left]+options[:item_line_add_x], :top => bank_y+options[:bank_details_step]*(i+=1) , :font_size => options[:title_fontsize2]})
pdf.text(Confline.get_value("Invoice_Bank_Details_Line2", options[:owner_id]), {:left =>options[:left]+options[:item_line_add_x], :top => bank_y+options[:bank_details_step]*(i+=1) , :font_size => options[:title_fontsize2]})
pdf.text(Confline.get_value("Invoice_Bank_Details_Line3", options[:owner_id]), {:left =>options[:left]+options[:item_line_add_x], :top => bank_y+options[:bank_details_step]*(i+=1) , :font_size => options[:title_fontsize2]})
pdf.text(Confline.get_value("Invoice_Bank_Details_Line4", options[:owner_id]), {:left =>options[:left]+options[:item_line_add_x], :top => bank_y+options[:bank_details_step]*(i+=1) , :font_size => options[:title_fontsize2]})
pdf.text(Confline.get_value("Invoice_Bank_Details_Line5", options[:owner_id]), {:left =>options[:left]+options[:item_line_add_x], :top => bank_y+options[:bank_details_step]*(i+=1) , :font_size => options[:title_fontsize2]})
pdf.text(Confline.get_value("Invoice_End_Title", options[:owner_id]), {:left => 0, :top => 770, :font_size =>options[:title_fontsize], :alignment=>:center})
end
pdf.text(page.to_s + "/#{options[:total_pages]}",{:alignment => :right, :top=> 770, :font_size =>options[:title_fontsize2]})
pdf
end
=begin rdoc
=end
def Generate.generate_cc_invoice_tax_and_total_box(pdf, options)
i = 0
pdf.rectangle(options[:col3_x], options[:box_bottom],options[:box2_length] , options[:item_line_height],{:line_width => 1})
pdf.text(_("Subtotal"), {:left =>options[:tax_box_text_x], :top => options[:box_bottom] +options[:item_line_add_y], :font_size => options[:title_fontsize2]})
if (options[:order].amount*100).to_i == ((options[:order].gross + options[:tax].count_tax_amount(options[:order].gross))*100).to_i
options[:taxes].each { |tax|
pdf.text(tax[:name] + ": " +tax[:value].to_s+ " %", {:left =>options[:tax_box_text_x], :top => options[:tax_start]+i*options[:tax_box_h], :font_size => options[:tax_fontsize]})
pdf.rectangle(options[:col3_x], options[:tax_box_start]+i*options[:tax_box_h],options[:box2_length], options[:tax_box_h],{:line_width => 1})
i+=1
}
end
pdf.rectangle(options[:col3_x], options[:tax_box_start]+i*options[:tax_box_h],options[:box2_length] , options[:item_line_height],{:line_width => 1})
pdf.text(options[:total_tax_name], {:left =>options[:tax_box_text_x], :top => options[:tax_box_start]+i*options[:tax_box_h]+options[:item_line_add_y], :font_size => options[:title_fontsize2]})
#total price box
pdf.rectangle(options[:col3_x], options[:tax_box_start]+i*options[:tax_box_h]+options[:item_line_height],options[:box2_length] , options[:item_line_height],{:line_width => 1})
pdf.text(_("Total"), {:left =>options[:tax_box_text_x], :top => options[:tax_box_start]+i*options[:tax_box_h]+options[:item_line_add_y]+options[:item_line_height], :font_size => options[:title_fontsize2]})
pdf
end
=begin rdoc
=end
def Generate.generate_cc_invoice_tax_and_total(pdf, subtotal, options)
pdf = Generate.generate_cc_invoice_tax_and_total_box(pdf, options)
i = 0
pdf.text(nice_number(subtotal, {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}), {:left => options[:col3_x]+options[:item_line_add_x] , :top => options[:box_bottom] + options[:item_line_add_y], :font_size => options[:address_fontsize]})
if (options[:order].amount*100).to_i == ((options[:order].gross + options[:tax].count_tax_amount(options[:order].gross))*100).to_i
options[:taxes].each { |tax|
pdf.text(nice_number(tax[:tax], {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}), {:left =>options[:col3_x] + options[:item_line_add_x], :top => options[:tax_start]+i*options[:tax_box_h], :font_size => options[:tax_fontsize]})
i+=1
}
end
pdf.text(nice_number(options[:tax].count_tax_amount(subtotal), {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}), {:left =>options[:col3_x] + options[:item_line_add_x], :top => options[:tax_box_start]+i*options[:tax_box_h]+options[:item_line_add_y], :font_size => options[:title_fontsize2]})
pdf.text(nice_number(subtotal+options[:tax].count_tax_amount(subtotal), {:nice_number_digits => options[:nice_num_dig], :change_decimal=>options[:cgnd], :global_decimal=>options[:gnd]}), {:left =>options[:col3_x] + options[:item_line_add_x], :top => options[:tax_box_start]+i*options[:tax_box_h]+options[:item_line_add_y]+options[:item_line_height], :font_size => options[:title_fontsize2]})
pdf
end
=begin rdoc
Generates last calls pdf.
=end
def Generate.generate_last_calls_pdf(calls, total_calls, current_user, main_options={})
###### Generate PDF ########
pdf = PDF::Wrapper.new(:paper => :A4)
pdf.font("Nimbus Sans L")
#logo
#pdf.image "../images/logo/kolmisoft.png", :justification => :center, :resize => 0.75
digits = Confline.get_value("Nice_Number_Digits").to_i
gnd = Confline.get_value("Global_Number_Decimal").to_s
cgnd = gnd.to_s == '.' ? false : true
usertype = current_user.usertype
#options
options = {}
options = options.merge({
:xdelta => 9,
:fontsize => 3,
:calls_per_page_first => 70,
:calls_per_page_second => 80,
:ystart => 125,
:second_page_start => 50,
:header_elevation => 15,
:header_elevation2 => 6,
:header_add_size => 1,
:total_possition => 770,
:pdf_last_calls=>1,
:rs_active=>main_options[:rs_active],
:can_see_finaces=>main_options[:can_see_finances],
:reseller_allow_providers_tariff => current_user.reseller_allow_providers_tariff?,
:page_number_size => 10})
z = options[:rs_active] ? 0 : 90
if ['admin', 'accountant'].include?(usertype)
options = options.merge({
:dat_x => 5,
:caf_x => 50,
:cat_x => 105,
:dur_x => 145,
:han_x => 175,
:ser => 215,
:p_na => 240,
:p_ra => 275,
:p_pr => 295,
:r_na => 315,
:r_ra => 365,
:r_pr => 385,
:u_na => 405-z,
:u_ra => 450-z,
:u_pr => 470-z,
:did => 490-z,
:did_p => 529-z,
:did_inc => 548-z,
:did_ow =>572-z,
:pri_x => 360,
:pri2_x => 395,
:pri3_x => 450,
:pri4_x => 485,
:pri5_x => 500
})
end
z = main_options[:can_see_finances] ? 0 : 50
zz = current_user.reseller_allow_providers_tariff? ? 0 : 110
if usertype == 'reseller'
options = options.merge({
:fontsize => 3,
:dat_x => 15,
:caf_x => 65,
:cat_x => 125,
:dur_x => 170,
:han_x => 200,
:p_na => 260,
:p_ra => 310-z-zz,
:p_pr => 340-z-zz,
:r_ra => 370-z-zz,
:r_pr => 400-z-zz,
:u_na => 430-z-zz,
:u_ra => 480-z-zz,
:u_pr => 500-z-zz,
:did => 530-z-zz
})
end
if usertype == 'user'
options = options.merge({
:fontsize => 5,
:dat_x => 15,
:caf_x => 100,
:cat_x => 200,
:prefix => 270,
:dur_x => 350,
:han_x => 400,
:u_pr => 500
})
end
# pdf.text(_('CDR_Records') + ": #{user.first_name} #{user.last_name}", {:font_size => 16, :top => 30, :alignment => :left})
pdf.text(_('Period') + ": " + main_options[:date_from] + " - " + main_options[:date_till], {:font_size => 10, :top => 55, :alignment => :left})
pdf.text(_('Currency') + ": #{main_options[:show_currency]}", {:font_size => 8, :top => 74, :alignment => :left})
pdf.text(_('Total_calls') + ": #{calls.size}", {:font_size => 8, :top => 94, :alignment => :left})
options[:total_calls] = calls.size
options[:calls_per_page] = options[:calls_per_page_first]
options = options.merge({:total_pages => PdfGen::Count.pages(calls.size, options[:calls_per_page], options[:calls_per_page_second])})
#/options
i = 1
page_calls = 1
#table header
pdf = PdfGen::Generate.call_list_to_pdf_header(pdf, main_options[:direction], usertype, i, options)
#/table header
#page
for call in calls
#calldate2 - because something overwites calldate when changing date format
pdf.text(call.calldate2,{:left=>options[:dat_x] , :top=>options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_src(call, {:pdf=>1}), {:left=>options[:caf_x] , :top=>options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(hide_dst_for_user(current_user, "pdf", call.dst.to_s), {:left=>options[:cat_x] , :top=>options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_time(call['nice_billsec']), {:left=>options[:dur_x] , :top=>options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(call.dispod, {:left=>options[:han_x] , :top=>options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
if ['admin', 'accountant'].include?(usertype)
pdf.text(call.server_id, {:left=> options[:ser], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(call['provider_name'], {:left=> options[:p_na], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
if main_options[:can_see_finances]
pdf.text(nice_number(call['provider_rate'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:p_ra], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['provider_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:p_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
if main_options[:rs_active]
pdf.text(call['nice_reseller'], {:left=> options[:r_na], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
if main_options[:can_see_finances]
pdf.text(nice_number(call['reseller_rate'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:r_ra], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['reseller_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:r_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
end
pdf.text(call['user'], {:left=> options[:u_na], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
if main_options[:can_see_finances]
pdf.text(nice_number(call['user_rate'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_ra], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['user_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
pdf.text(call['did'], {:left=> options[:did], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
if main_options[:can_see_finances]
pdf.text(nice_number(call['did_prov_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}),{:left=> options[:did_p], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['did_inc_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:did_inc], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['did_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:did_ow], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
else
if current_user.show_billing_info == 1 and main_options[:can_see_finances]
if usertype == 'reseller'
if current_user.reseller_allow_providers_tariff?
pdf.text(call['provider_name'], {:left=> options[:p_na], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
if main_options[:can_see_finances]
pdf.text(nice_number(call['reseller_rate'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:p_ra], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['reseller_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:p_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
end
pdf.text(nice_number(call['reseller_rate'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:r_ra], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['reseller_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:r_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(call['user'], {:left=> options[:u_na], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['user_rate'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_ra], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['user_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(call['did'], {:left=> options[:did], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
if usertype == 'user'
pdf.text(call['prefix'], {:left=> options[:prefix], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
pdf.text(nice_number(call['user_price'], {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_pr], :top=> options[:ystart]+(page_calls % options[:calls_per_page] * options[:xdelta]), :font_size =>options[:fontsize]})
end
end
end
if page_calls == options[:calls_per_page] and i != options[:total_calls]
options[:ystart] = options[:second_page_start]
page_calls = 0
pdf.start_new_page
pdf = PdfGen::Generate.call_list_to_pdf_header(pdf, main_options[:direction],current_user.usertype, i, options)
options[:calls_per_page] = options[:calls_per_page_second]
end
page_calls += 1
i += 1
end
#Totals
pdf.text(_('Total'), {:left=> 40, :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_time(total_calls.total_duration),{:left=> options[:dur_x], :top=>options[:total_possition], :font_size =>options[:fontsize]})
if main_options[:can_see_finances]
if ['admin', 'accountant'].include?(usertype)
pdf.text(nice_number(total_calls.total_provider_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:p_pr], :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_number(total_calls.total_reseller_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:r_pr], :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_number(total_calls.total_user_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_pr], :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_number(total_calls.total_did_prov_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:did_p], :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_number(total_calls.total_did_inc_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:did_inc], :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_number(total_calls.total_did_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:did_ow], :top=>options[:total_possition], :font_size =>options[:fontsize]})
end
if usertype == 'reseller'
if current_user.reseller_allow_providers_tariff?
pdf.text(nice_number(total_calls.total_provider_price, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:p_pr], :top=>options[:total_possition], :font_size =>options[:fontsize]})
end
pdf.text(nice_number(total_calls.total_reseller_price_with_dids, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:r_pr], :top=>options[:total_possition], :font_size =>options[:fontsize]})
pdf.text(nice_number(total_calls.total_user_price_with_dids, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_pr], :top=>options[:total_possition], :font_size =>options[:fontsize]})
end
if usertype == 'user'
pdf.text(nice_number(total_calls.total_user_price_with_dids, {:nice_number_digits => digits, :change_decimal=>cgnd, :global_decimal=>gnd}), {:left=> options[:u_pr], :top=>options[:total_possition], :font_size =>options[:fontsize] })
end
end
page_calls +=1
# end
return pdf
end
def Generate.generate_additional_details_for_invoice_pdf(pdf, details, options={})
xdelta = 15
ystart = 20
dts = details.split("\n")
pdf.start_new_page
if options[:page]
pdf = PdfGen::Count.page_number(pdf, options[:page], options[:pages])
end
i = 0
dts.each{|d|
numbers = (d.to_s.length.to_i / 93)
if numbers.to_f > 1.to_f
pdf.text(d.to_s, {:left =>10, :top=> ystart+(i.to_i % 30 * xdelta), :font_size => 8, :alignment => :left})
(numbers.ceil.to_i-1).to_i.times{
pdf.text('', {:left =>10, :top=> ystart+(i.to_i % 30 * xdelta), :font_size => 8, :alignment => :left})
i+=1
}
else
pdf.text(d.to_s, {:left =>10, :top=> ystart+(i.to_i % 30 * xdelta), :font_size => 8, :alignment => :left})
end
i+=1
}
return pdf
end
end