summaryrefslogtreecommitdiffstats
path: root/lib/redmine/export/pdf.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/redmine/export/pdf.rb')
-rw-r--r--lib/redmine/export/pdf.rb190
1 files changed, 5 insertions, 185 deletions
diff --git a/lib/redmine/export/pdf.rb b/lib/redmine/export/pdf.rb
index 9b1f2b8a2..27905b2bb 100644
--- a/lib/redmine/export/pdf.rb
+++ b/lib/redmine/export/pdf.rb
@@ -184,7 +184,7 @@ module Redmine
end
pdf.Output
end
-
+
# Returns a PDF string of a single issue
def issue_to_pdf(issue)
pdf = IFPDF.new(current_language)
@@ -208,7 +208,7 @@ module Redmine
pdf.SetFontStyle('',9)
pdf.Cell(60,5, issue.priority.to_s,"RT")
pdf.Ln
-
+
pdf.SetFontStyle('B',9)
pdf.Cell(35,5, l(:field_author) + ":","L")
pdf.SetFontStyle('',9)
@@ -238,14 +238,14 @@ module Redmine
pdf.SetFontStyle('',9)
pdf.Cell(60,5, format_date(issue.due_date),"RB")
pdf.Ln
-
+
for custom_value in issue.custom_field_values
pdf.SetFontStyle('B',9)
pdf.Cell(35,5, custom_value.custom_field.name + ":","L")
pdf.SetFontStyle('',9)
pdf.MultiCell(155,5, (show_value custom_value),"R")
end
-
+
pdf.SetFontStyle('B',9)
pdf.Cell(35,5, l(:field_subject) + ":","LTB")
pdf.SetFontStyle('',9)
@@ -311,187 +311,7 @@ module Redmine
end
pdf.Output
end
-
- # Returns a PDF string of a gantt chart
- def gantt_to_pdf(gantt, project)
- pdf = IFPDF.new(current_language)
- pdf.SetTitle("#{l(:label_gantt)} #{project}")
- pdf.AliasNbPages
- pdf.footer_date = format_date(Date.today)
- pdf.AddPage("L")
- pdf.SetFontStyle('B',12)
- pdf.SetX(15)
- pdf.Cell(70, 20, project.to_s)
- pdf.Ln
- pdf.SetFontStyle('B',9)
-
- subject_width = 100
- header_heigth = 5
-
- headers_heigth = header_heigth
- show_weeks = false
- show_days = false
-
- if gantt.months < 7
- show_weeks = true
- headers_heigth = 2*header_heigth
- if gantt.months < 3
- show_days = true
- headers_heigth = 3*header_heigth
- end
- end
-
- g_width = 280 - subject_width
- zoom = (g_width) / (gantt.date_to - gantt.date_from + 1)
- g_height = 120
- t_height = g_height + headers_heigth
-
- y_start = pdf.GetY
-
- # Months headers
- month_f = gantt.date_from
- left = subject_width
- height = header_heigth
- gantt.months.times do
- width = ((month_f >> 1) - month_f) * zoom
- pdf.SetY(y_start)
- pdf.SetX(left)
- pdf.Cell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
- left = left + width
- month_f = month_f >> 1
- end
-
- # Weeks headers
- if show_weeks
- left = subject_width
- height = header_heigth
- if gantt.date_from.cwday == 1
- # gantt.date_from is monday
- week_f = gantt.date_from
- else
- # find next monday after gantt.date_from
- week_f = gantt.date_from + (7 - gantt.date_from.cwday + 1)
- width = (7 - gantt.date_from.cwday + 1) * zoom-1
- pdf.SetY(y_start + header_heigth)
- pdf.SetX(left)
- pdf.Cell(width + 1, height, "", "LTR")
- left = left + width+1
- end
- while week_f <= gantt.date_to
- width = (week_f + 6 <= gantt.date_to) ? 7 * zoom : (gantt.date_to - week_f + 1) * zoom
- pdf.SetY(y_start + header_heigth)
- pdf.SetX(left)
- pdf.Cell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
- left = left + width
- week_f = week_f+7
- end
- end
-
- # Days headers
- if show_days
- left = subject_width
- height = header_heigth
- wday = gantt.date_from.cwday
- pdf.SetFontStyle('B',7)
- (gantt.date_to - gantt.date_from + 1).to_i.times do
- width = zoom
- pdf.SetY(y_start + 2 * header_heigth)
- pdf.SetX(left)
- pdf.Cell(width, height, day_name(wday).first, "LTR", 0, "C")
- left = left + width
- wday = wday + 1
- wday = 1 if wday > 7
- end
- end
-
- pdf.SetY(y_start)
- pdf.SetX(15)
- pdf.Cell(subject_width+g_width-15, headers_heigth, "", 1)
-
- # Tasks
- top = headers_heigth + y_start
- pdf.SetFontStyle('B',7)
- gantt.events.each do |i|
- pdf.SetY(top)
- pdf.SetX(15)
-
- text = ""
- if i.is_a? Issue
- text = "#{i.tracker} #{i.id}: #{i.subject}"
- else
- text = i.name
- end
- text = "#{i.project} - #{text}" unless project && project == i.project
- pdf.Cell(subject_width-15, 5, text, "LR")
-
- pdf.SetY(top + 0.2)
- pdf.SetX(subject_width)
- pdf.SetFillColor(255, 255, 255)
- pdf.Cell(g_width, 4.6, "", "LR", 0, "", 1)
- pdf.SetY(top+1.5)
-
- if i.is_a? Issue
- i_start_date = (i.start_date >= gantt.date_from ? i.start_date : gantt.date_from )
- i_end_date = (i.due_before <= gantt.date_to ? i.due_before : gantt.date_to )
-
- i_done_date = i.start_date + ((i.due_before - i.start_date+1)*i.done_ratio/100).floor
- i_done_date = (i_done_date <= gantt.date_from ? gantt.date_from : i_done_date )
- i_done_date = (i_done_date >= gantt.date_to ? gantt.date_to : i_done_date )
-
- i_late_date = [i_end_date, Date.today].min if i_start_date < Date.today
-
- i_left = ((i_start_date - gantt.date_from)*zoom)
- i_width = ((i_end_date - i_start_date + 1)*zoom)
- d_width = ((i_done_date - i_start_date)*zoom)
- l_width = ((i_late_date - i_start_date+1)*zoom) if i_late_date
- l_width ||= 0
-
- pdf.SetX(subject_width + i_left)
- pdf.SetFillColor(200,200,200)
- pdf.Cell(i_width, 2, "", 0, 0, "", 1)
-
- if l_width > 0
- pdf.SetY(top+1.5)
- pdf.SetX(subject_width + i_left)
- pdf.SetFillColor(255,100,100)
- pdf.Cell(l_width, 2, "", 0, 0, "", 1)
- end
- if d_width > 0
- pdf.SetY(top+1.5)
- pdf.SetX(subject_width + i_left)
- pdf.SetFillColor(100,100,255)
- pdf.Cell(d_width, 2, "", 0, 0, "", 1)
- end
-
- pdf.SetY(top+1.5)
- pdf.SetX(subject_width + i_left + i_width)
- pdf.Cell(30, 2, "#{i.status} #{i.done_ratio}%")
- else
- i_left = ((i.start_date - gantt.date_from)*zoom)
-
- pdf.SetX(subject_width + i_left)
- pdf.SetFillColor(50,200,50)
- pdf.Cell(2, 2, "", 0, 0, "", 1)
-
- pdf.SetY(top+1.5)
- pdf.SetX(subject_width + i_left + 3)
- pdf.Cell(30, 2, "#{i.name}")
- end
-
- top = top + 5
- pdf.SetDrawColor(200, 200, 200)
- pdf.Line(15, top, subject_width+g_width, top)
- if pdf.GetY() > 180
- pdf.AddPage("L")
- top = 20
- pdf.Line(15, top, subject_width+g_width, top)
- end
- pdf.SetDrawColor(0, 0, 0)
- end
-
- pdf.Line(15, top, subject_width+g_width, top)
- pdf.Output
- end
+
end
end
end