redmine-0.7.3.diff

Giovanni Junior, 2008-08-10 06:55

Download (65 KB)

View differences:

app/helpers/issues_helper.rb (revision 56)
19 19

  
20 20
module IssuesHelper
21 21
  include ApplicationHelper
22
  
23
  def issue_ancestors(issue=@issue)
24
    ancestors = ""
25
    return "" if issue.parent == nil
26
    ancestors += "issue-#{issue.parent.id}-child " + issue_ancestors(issue.parent)        
27
  end
22 28

  
23 29
  def render_issue_tooltip(issue)
24 30
    @cached_label_start_date ||= l(:field_start_date)
......
69 75
      when 'fixed_version_id'
70 76
        v = Version.find_by_id(detail.value) and value = v.name if detail.value
71 77
        v = Version.find_by_id(detail.old_value) and old_value = v.name if detail.old_value
78
      when 'potential_parent'
79
        value = detail.value == '0' ? l(:general_text_No) : l(:general_text_Yes) if detail.value
80
        old_value = detail.old_value == '0' ? l(:general_text_No) : l(:general_text_Yes) if detail.old_value
72 81
      end
73 82
    when 'cf'
74 83
      custom_field = CustomField.find_by_id(detail.prop_key)
......
174 183
    export.rewind
175 184
    export
176 185
  end
186
  
187
  def set_parent(issue, parent_id)
188
    puts 'parent_id', parent_id
189
    if (issue && parent_id.to_s.size > 0)
190
      issue.relations_from.each do |relation|
191
        if relation.relation_type == IssueRelation::TYPE_PARENTS
192
          relation.destroy
193
        end
194
      end
195
      issue.reload
196
      IssueRelation.new do |relation|
197
        relation.issue_from = issue
198
        relation.issue_to = Issue.find(parent_id)
199
        relation.relation_type = IssueRelation::TYPE_PARENTS
200
        relation.save
201
      end
202
    end    
203
  end
204
  
177 205
end
app/helpers/queries_helper.rb (revision 56)
40 40
      else
41 41
        case column.name
42 42
        when :subject
43
        h((@project.nil? || @project != issue.project) ? "#{issue.project.name} - " : '') +
44
          link_to(h(value), :controller => 'issues', :action => 'show', :id => issue)
43
          subject_in_tree(issue, value)
45 44
        when :done_ratio
46 45
          progress_bar(value, :width => '80px')
47 46
        else
......
50 49
      end
51 50
    end
52 51
  end
52
  
53
  #private?
54
  
55
  def subject_in_tree(issue, value)
56
    image = ""
57
    unless issue.edge? #don't show + or - icons for leaf issues
58
      #o controle das tarefas a ser mostradas não está sendo feito por _list? verificar
59
      image = @show_all_issues || 
60
      @show_children ? 
61
      link_to_remote(image_tag("contract.png", :class=>'contract-icon'), {:url => {:controller => 'issues', :action => "hide_children", :id => issue}}, :class=>'contract-link') : 
62
      link_to_remote(image_tag("expand.png", :class=>'expand-icon'), {:url => {:controller => 'issues', :action => "show_children", :id => issue}}, :class=>'expand-link')
63
    end
64
    content_tag('span', image + content_tag('div', subject_text(issue, value), :class=>'issue-subject'), :class=>"issue-subject-level-#{issue.hierarchical_level}")
65
  end
66
  
67
  def subject_text(issue, value)
68
    if User.current.allowed_to?(:edit_issues, issue.project)            
69
      subject_id = "issue-" +"#{issue.id}" + "-subject"
70
      subject_text = "<span id=#{subject_id}>#{issue.subject}</span>\
71
              <script type=\"text/javascript\">\
72
              new Ajax.InPlaceEditor('#{subject_id}', '" + 
73
              url_for({:controller => 'issues', :action => 'update_subject', :id => issue, :back_to => @back}) + "', \
74
              {okButton:false, callback: function(form, value) { return 'subject=' + value }});</script>"
75
    else
76
      subject_text = link_to(h(value), :controller => 'issues', :action => 'show', :id => issue)
77
    end
78
    h((@project.nil? || @project != issue.project) ? "#{issue.project.name} - " : '') + subject_text
79
  end
80
  
53 81
end
app/models/issue.rb (revision 56)
130 130
        @current_journal.details << JournalDetail.new(:property => 'attr',
131 131
                                                      :prop_key => c,
132 132
                                                      :old_value => @issue_before_change.send(c),
133
                                                      :value => send(c)) unless send(c)==@issue_before_change.send(c)
133
                                                      :value => send(c)) unless send(c)==@issue_before_change.send(c) || (!self.edge? && %w(status_id priority_id fixed_version_id start_date due_date done_ratio estimated_hours).include?(c))
134 134
      }
135 135
      # custom fields changes
136 136
      custom_values.each {|c|
......
230 230
    relations.select {|r| r.relation_type == IssueRelation::TYPE_DUPLICATES}.collect {|r| r.other_issue(self)}
231 231
  end
232 232
  
233
  def duration1
234
    (start_date && due_date) ? (due_date - start_date + 1) : 0
235
  end
236
  
233 237
  def duration
234 238
    (start_date && due_date) ? due_date - start_date : 0
235 239
  end
......
244 248
    end
245 249
  end
246 250
  
251
  #o cálculo original de sunday_walker não considera apenas as taxas de realização das tarefas filhas. Ele baseia-se também
252
  #na duração das tarefas. Entretanto, quando as tarefas-filhas não têm data de término definida, elas não são consideradas no
253
  #cálculo da taxa de realização da tarefa-mãe
254
  def done_ratio
255
    if children?
256
      #aparentemente Érica não é favorável a incluir as informações da tarefa-mãe no cálculo, como fez sunday_walker
257
      #@total_planned_days ||= self.duration1 # previsão de duração da tarefa-mãe
258
      #@total_actual_days ||= read_attribute(:done_ratio) ?  (@total_planned_days * read_attribute(:done_ratio) / 100).floor : 0 # dias trabalhados na tarefa-mãe (calculados de acordo com a porcentagem realizada da tarefa)
259
      @total_planned_days ||= 0
260
      @total_actual_days ||= 0
261
      children.each do |child| # de cada tarefa filha obtenha o total de dias e os dias trabalhados
262
        planned_days = child.duration1
263
        actual_days = child.done_ratio ?  (planned_days * child.done_ratio / 100).floor : 0
264
        @total_planned_days += planned_days
265
        @total_actual_days += actual_days
266
      end
267
      @total_done_ratio = @total_planned_days != 0 ? (@total_actual_days * 100 / @total_planned_days).floor : 0
268
    else
269
      read_attribute(:done_ratio)
270
    end
271
  end
272
  
273
  def estimated_hours
274
    if children?
275
      is_set = false
276
      children.each do |child|
277
        if child.estimated_hours
278
          if is_set
279
            @est_hours += child.estimated_hours
280
          else
281
            @est_hours = child.estimated_hours
282
            is_set = true
283
          end
284
        end     
285
      end
286
      @est_hours
287
    else
288
      read_attribute(:estimated_hours)
289
    end
290
  end
291
  
292
  def start_date
293
    calculate 'start_date'
294
  end  
295
  
296
  def due_date
297
    calculate 'due_date'
298
  end  
299
  
300
  def priority
301
    if children?
302
      children.each do |child|
303
        @pri = child.priority
304
        if @pri.id < child.priority.id
305
          @pri = child.priority
306
        end
307
      end
308
      @pri     
309
    else
310
      Enumeration.find(self[:priority_id]) if self[:priority_id] && self[:priority_id] != 0
311
    end     
312
  end
313
  
314
  def fixed_version
315
    if children?
316
      children.each do |child|
317
        @fixed_version = child.fixed_version
318
        if child.fixed_version && (!self[:fixed_version_id] || Version.find(self[:fixed_version_id]).id < child.fixed_version.id)
319
          @fixed_version = child.fixed_version
320
        end
321
      end
322
      @fixed_version     
323
    else
324
      Version.find(self[:fixed_version_id]) if self[:fixed_version_id]  && self[:fixed_version_id] != 0
325
    end 
326
  end
327
  
328
  def status    
329
    if children?
330
      children.each do |child|
331
        @sta = child.status
332
        if @sta.id > child.status.id
333
          @sta = child.status
334
        end
335
      end
336
      @sta
337
    else
338
      IssueStatus.find(self[:status_id]) if self[:status_id] && self[:status_id] != 0
339
    end     
340
  end
341
   
342
  def calculate(field)
343
    if children?
344
      @value = eval "children.first.#{field}" 
345
      children.each do |child|        
346
        case field
347
          when 'start_date'
348
          if child.start_date && (!@value || @value > child.start_date)
349
            @value = child.start_date
350
          end
351
          when 'due_date'
352
          if child.due_date && (!@value || @value < child.due_date)
353
            @value = child.due_date
354
          end
355
        end        
356
      end
357
      @value
358
    else
359
      read_attribute(eval(":#{field}"))
360
    end
361
  end  
362

  
363
  def children?
364
    children != []
365
  end
366
  
367
  def children
368
    children = []
369
    relations_to.each do |relation|
370
      if relation.relation_type == IssueRelation::TYPE_PARENTS
371
        children << relation.other_issue(self)
372
      end
373
    end
374
    children
375
  end
376
  
377
  def parent
378
    relations_from.each do |relation|
379
      if relation.relation_type == IssueRelation::TYPE_PARENTS
380
        return parent = relation.other_issue(self)
381
      end
382
    end
383
    return nil
384
  end
385
 
386
  def parent_issue=(parent_id)
387
    #workaround that allows the use of a select box for choosing the parent issue in the create issue form
388
    #is it possible to have a select box in a form without a corresponding method in the model?
389
  end
390
  
391
  def parent_issue
392
    #workaround that allows the use of a select box for choosing the parent issue in the create issue form
393
    #is it possible to have a select box in a form without a corresponding method in the model?
394
  end
395
   
396
  def parent?
397
    parent != nil
398
  end 
399
  
400
  def root?
401
    !parent?
402
  end
403
  
404
  def ancestors(issue=self)
405
    a = []
406
    return a if ! issue.parent?
407
    (a << issue.parent) | ancestors(issue.parent)
408
  end
409
  
410
  #Nível hierárquico de uma tarefa (tarefas de 1º nível têm nível hierárquico 1)
411
  def hierarchical_level(issue=self)
412
    issue.parent? ? (1 + hierarchical_level(issue.parent)) : 1
413
  end
414
  
415
  #TODO validar código
416
  def edge?
417
    relations_to.each do |relation|
418
      if relation.relation_type == IssueRelation::TYPE_PARENTS
419
        return false
420
      end
421
    end
422
    return true
423
  end
424
  
247 425
  def to_s
248 426
    "#{tracker} ##{id}: #{subject}"
249 427
  end
app/models/issue_relation.rb (revision 56)
23 23
  TYPE_DUPLICATES   = "duplicates"
24 24
  TYPE_BLOCKS       = "blocks"
25 25
  TYPE_PRECEDES     = "precedes"
26
  TYPE_PARENTS     = "parents"
26 27
  
27 28
  TYPES = { TYPE_RELATES =>     { :name => :label_relates_to, :sym_name => :label_relates_to, :order => 1 },
28 29
            TYPE_DUPLICATES =>  { :name => :label_duplicates, :sym_name => :label_duplicates, :order => 2 },
......
28 29
            TYPE_DUPLICATES =>  { :name => :label_duplicates, :sym_name => :label_duplicates, :order => 2 },
29 30
            TYPE_BLOCKS =>      { :name => :label_blocks, :sym_name => :label_blocked_by, :order => 3 },
30 31
            TYPE_PRECEDES =>    { :name => :label_precedes, :sym_name => :label_follows, :order => 4 },
32
            TYPE_PARENTS =>    { :name => :label_parents, :sym_name => :label_children, :order => 5 },
31 33
          }.freeze
32 34
  
33 35
  validates_presence_of :issue_from, :issue_to, :relation_type
......
32 34
  
33 35
  validates_presence_of :issue_from, :issue_to, :relation_type
34 36
  validates_inclusion_of :relation_type, :in => TYPES.keys
37
  validates_uniqueness_of :relation_type, :scope => [:issue_from_id, :relation_type], :message=>l(:error_issue_can_have_only_one_parent)
35 38
  validates_numericality_of :delay, :allow_nil => true
36 39
  validates_uniqueness_of :issue_to_id, :scope => :issue_from_id
37 40
  
app/controllers/issues_controller.rb (revision 56)
19 19
  layout 'base'
20 20
  menu_item :new_issue, :only => :new
21 21
  
22
  before_filter :find_issue, :only => [:show, :edit, :destroy_attachment]
22
  before_filter :find_issue, :only => [:show, :edit, :destroy_attachment, :update_subject, :show_children, :hide_children]
23 23
  before_filter :find_issues, :only => [:bulk_edit, :move, :destroy]
24 24
  before_filter :find_project, :only => [:new, :update_form, :preview]
25
  before_filter :authorize, :except => [:index, :changes, :preview, :update_form, :context_menu]
25
  before_filter :authorize, :except => [:index, :changes, :preview, :update_form, :context_menu, :show_children, :hide_children]
26 26
  before_filter :find_optional_project, :only => [:index, :changes]
27 27
  accept_key_auth :index, :changes
28 28

  
......
43 43
  helper :sort
44 44
  include SortHelper
45 45
  include IssuesHelper
46
  include ActionView::Helpers::PrototypeHelper
47
  
48
  def update_subject
49
    @notes = params[:notes]
50
    journal = @issue.init_journal(User.current, @notes)
51
    @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
52
    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
53
    if (@edit_allowed || !@allowed_statuses.empty?) && params[:subject]
54
      @issue.subject = params[:subject]
55
    end    
56
    if @issue.save
57
      if !journal.new_record?
58
      # Only send notification if something was actually changed
59
      flash[:notice] = l(:notice_successful_update)
60
      Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
61
    end
62
      render(:text => params[:subject])
63
    end    
64
  rescue ActiveRecord::StaleObjectError
65
    # Optimistic locking exception
66
    flash.now[:error] = l(:notice_locking_conflict)       
67
  end
68
  
69
  def show_children
70
    retrieve_query
71
    if @query.valid?
72
      render :update do |page|
73
        page.replace "issue-#{@issue.id}", :partial => 'show_children', :locals => {:issue => @issue, :query => @query}
74
      end
75
    end    
76
  end
46 77

  
78
  def hide_children
79
    retrieve_query #verificar necessidade
80
    if @query.valid?
81
      render :update do |page|
82
        page.select(".issue-#{@issue.id}-child").each do |child|
83
          child.remove
84
        end
85
        page.select("#issue-#{@issue.id} a.contract-link").each do |contractIcon|
86
          contractIcon.replace link_to_remote(image_tag("expand.png", :class=>'expand-icon'), {:url => {:controller => 'issues', :action => "show_children", :id => @issue}}, :class=>'expand-link')
87
        end
88
      end
89
    end    
90
  end
91
  
47 92
  def index
48 93
    sort_init "#{Issue.table_name}.id", "desc"
49 94
    sort_update
......
146 191
                                                                                                       :value => (params[:custom_fields] ? params[:custom_fields][x.id.to_s] : nil)) }
147 192
      @issue.custom_values = @custom_values
148 193
      if @issue.save
194
        set_parent(@issue, params[:issue][:parent_issue]) if params[:issue][:parent_issue]
149 195
        attach_files(@issue, params[:attachments])
150 196
        flash[:notice] = l(:notice_successful_create)
151 197
        Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
......
191 237
      attachments = attach_files(@issue, params[:attachments])
192 238
      attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
193 239
      if @issue.save
240
        set_parent(@issue, params[:issue][:parent_issue]) if params[:issue][:parent_issue]
194 241
        # Log spend time
195 242
        if current_role.allowed_to?(:log_time)
196 243
          @time_entry.save
......
227 274
        issue.start_date = params[:start_date] unless params[:start_date].blank?
228 275
        issue.due_date = params[:due_date] unless params[:due_date].blank?
229 276
        issue.done_ratio = params[:done_ratio] unless params[:done_ratio].blank?
277
        issue.potential_parent = params[:potential_parent] unless params[:potential_parent].blank?
230 278
        # Don't save any change to the issue if the user is not authorized to apply the requested status
231 279
        if (status.nil? || (issue.status.new_status_allowed_to?(status, current_role, issue.tracker) && issue.status = status)) && issue.save
280
          set_parent(issue, params[:parent_issue]) unless params[:parent_issue].blank?
232 281
          # Send notification for each issue (if changed)
233 282
          Mailer.deliver_issue_edit(journal) if journal.details.any? && Setting.notified_events.include?('issue_updated')
234 283
        else
app/controllers/projects_controller.rb (revision 56)
381 381
    @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
382 382
    
383 383
    @events = []
384
    @issues = []
385
    @versions = []
384 386
    @project.issues_with_subprojects(@with_subprojects) do
385
      @events += Issue.find(:all, 
387
      @issues = Issue.find(:all, 
386 388
                           :order => "start_date, due_date",
387 389
                           :include => [:tracker, :status, :assigned_to, :priority, :project], 
388
                           :conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}))", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to]
390
                           :conditions => ["(#{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}))"]
389 391
                           ) unless @selected_tracker_ids.empty?
390
      @events += Version.find(:all, :include => :project,
392
      @versions = Version.find(:all, :include => :project,
391 393
                                    :conditions => ["effective_date BETWEEN ? AND ?", @date_from, @date_to])
392 394
    end
393
    @events.sort! {|x,y| x.start_date <=> y.start_date }
395
    #restrição de datas. Antes era feita no SQL, mas isso não é mais possível devido ao cálculo baseado nas subtarefas
396
    @issues = @issues.select {|issue| issue.start_date and issue.due_date and ((issue.start_date>=@date_from and issue.start_date<=@date_to) || (issue.due_date>=@date_from and issue.due_date<=@date_to) || (issue.start_date<@date_from and issue.due_date>@date_to))}
397
#    params[:display] = 'first-level-only'
398
#    params[:display] = 'tree'
399
#    if params[:display] == 'first-level-only'
400
#      @issues = @issues.select {|issue| !issue.parent?}
401
#    elsif params[:display] == 'tree'
402
#      Array.new(@issues).each do |issue|
403
#        @issues = @issues + issue.ancestors
404
#      end
405
#      @issues.uniq!
406
#      @issues = sort_as_tree(@issues)
407
#    end
408
    
409
    case params[:display]
410
      when 'first-level-only'
411
      @issues = @issues.select {|issue| !issue.parent?}
412
      when 'tree'
413
      Array.new(@issues).each {|issue| @issues += issue.ancestors}
414
      @issues.uniq!
415
      @issues = sort_as_tree(@issues)
416
      @events = integrate_versions_with_issues_tree(@issues, @versions)
417
    end
418
    
419
    unless params[:display] == 'tree' 
420
      @events += @issues
421
      @events += @versions
422
      @events.sort! {|x,y| x.start_date <=> y.start_date }
423
    end
424
    
394 425
    
395 426
    if params[:format]=='pdf'
396 427
      @options_for_rfpdf ||= {}
......
430 461
      @selected_tracker_ids = selectable_trackers.collect {|t| t.id.to_s }
431 462
    end
432 463
  end
464
  
465
  
466
  def sort_as_tree(issues)
467
    issues.sort!{|a,b| a.hierarchical_level <=> b.hierarchical_level}
468
    @sorted_issues = []
469
    issues.each do |issue|
470
      if @sorted_issues.empty?
471
        @sorted_issues << issue
472
        next
473
      end
474
      @time_to_stop = false #indica quando a tarefa atual atinge a tarefa-mãe (importante porque ela precisa parar entre a tarefa-mãe e a próxima tarefa-tia
475
      @sorted_issues.each do |sorted_issue|
476
        #mesmo pai e menor data, pare; mesmo pai, mesma data e menor id, pare; depois do pai e antes do próximo pai, pare; 
477
        if ((sorted_issue.parent == issue.parent) && (sorted_issue.start_date > issue.start_date)) ||
478
         ((sorted_issue.parent == issue.parent) && (sorted_issue.start_date == issue.start_date) && (sorted_issue.id > issue.id)) ||
479
         (@time_to_stop && (sorted_issue.hierarchical_level < issue.hierarchical_level))
480
          @sorted_issues.insert(@sorted_issues.index(sorted_issue), issue)
481
          break
482
        end
483
        @time_to_stop = true if sorted_issue == issue.parent      
484
      end
485
      #if this issue's parent is the last element
486
      @sorted_issues << issue if @time_to_stop
487
    end
488
    @sorted_issues
489
  end
490
  
491
  #presume que as issues de primeiro nível estejam ordenadas por data (sort_as_tree)
492
  def integrate_versions_with_issues_tree(issues, versions)
493
    versions.sort! {|x,y| x.start_date <=> y.start_date }    
494
    versions.each do |version|
495
      issues << version if issues.empty?
496
      issues.each do |issue|
497
        if ((issue.is_a? Issue && issue.root?) || (issue.is_a? Version)) && version.start_date < issue.start_date
498
          #inserir versão antes da tarefa raiz ou de outra versão com data imediatamente posterior 
499
          issues.insert(issues.index(issue), version)
500
        elsif issue == issues.last
501
          issues << version        
502
        end
503
      end
504
    end
505
    issues
506
  end  
507
  
433 508
end
app/views/issues/bulk_edit.rhtml (revision 56)
38 38
<label><%= l(:field_done_ratio) %>: 
39 39
<%= select_tag 'done_ratio', options_for_select([[l(:label_no_change_option), '']] + (0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></label>
40 40
</p>
41

  
42
<p>
43
<label><%= l(:field_parent_issue) %>: 
44
<%= select_tag('parent_issue', content_tag('option', l(:label_no_change_option), :value => '') +
45
                                 content_tag('option', l(:label_none), :value => '') +
46
                                 options_from_collection_for_select(Issue.find(:all, :conditions => [ "potential_parent = true"]).sort {|a, b| a.id <=> b.id}, :id, :subject)) %></label>
47
<label><%= l(:field_potential_parent) %>: 
48
<%= select_tag('potential_parent', content_tag('option', l(:label_no_change_option), :value => '') +
49
                                 content_tag('option', l(:general_text_Yes), :value => 'true') +
50
								 content_tag('option', l(:general_text_No), :value => 'false')) %></label>
51
</p>
41 52
</fieldset>
42 53

  
43 54
<fieldset><legend><%= l(:field_notes) %></legend>
app/views/issues/_form.rhtml (revision 56)
16 16
</div>
17 17

  
18 18
<div class="splitcontentleft">
19
<% if @issue.new_record? || @allowed_statuses.any? %>
19
<% if (@issue.new_record? || @allowed_statuses.any?) && @issue.edge? %>
20 20
<p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p>
21 21
<% else %>
22 22
<p><label><%= l(:field_status) %></label> <%= @issue.status.name %></p>
......
22 22
<p><label><%= l(:field_status) %></label> <%= @issue.status.name %></p>
23 23
<% end %>
24 24

  
25
<% if @issue.edge? %>
25 26
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
27
<% else %>
28
<p><label><%= l(:field_priority) %></label> <%= @issue.priority.name %></p>
29
<% end %>
30

  
26 31
<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
27 32
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
28 33
<%= prompt_to_remote(l(:label_issue_category_new),
29 34
                     l(:label_issue_category_new), 'category[name]', 
30 35
                     {:controller => 'projects', :action => 'add_issue_category', :id => @project},
31 36
                     :class => 'small', :tabindex => 199) if authorize_for('projects', 'add_issue_category') %></p>
37

  
38
<% if @issue.edge? %>
32 39
<%= content_tag('p', f.select(:fixed_version_id, 
33 40
                              (@project.versions.sort.collect {|v| [v.name, v.id]}),
34 41
                              { :include_blank => true })) unless @project.versions.empty? %>
42
<% else %>
43
<p><label><%= l(:field_fixed_version) %></label> <%= @issue.fixed_version ? @issue.fixed_version.name : '-' %></p>
44
<% end %>
35 45
</div>
36 46

  
37 47
<div class="splitcontentright">
48
<% if @issue.edge? %>	
38 49
<p><%= f.text_field :start_date, :size => 10 %><%= calendar_for('issue_start_date') %></p>
39 50
<p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
40 51
<p><%= f.text_field :estimated_hours, :size => 3 %> <%= l(:field_hours) %></p>
......
39 50
<p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
40 51
<p><%= f.text_field :estimated_hours, :size => 3 %> <%= l(:field_hours) %></p>
41 52
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
53
<% else %>
54
<p><label><%= l(:field_start_date) %></label> <%= format_date(@issue.start_date) %></p>
55
<p><label><%= l(:field_due_date) %></label> <%= format_date(@issue.due_date) %></p>
56
<p><label><%= l(:field_done_ratio) %></label> <%= "#{@issue.done_ratio}%" %></p>
57
<% end %>
58
<p><%= f.check_box :potential_parent %></p>
42 59
</div>
60
<p><%= f.select :parent_issue, (Issue.find(:all, :conditions => [ "potential_parent = true"]).sort {|a, b| a.id <=> b.id}.collect {|p| ['#' << p.id.to_s << ' - ' << (p.subject.length > 50 ? p.subject[0..50] << '...' : p.subject), p.id]}),  :include_blank => true  %></p>
43 61

  
44 62
<div style="clear:both;"> </div>
45 63
<%= render :partial => 'form_custom_fields', :locals => {:values => @custom_values} %>
app/views/issues/_form_update.rhtml (revision 56)
1 1
<div class="splitcontentleft">
2
<% if @issue.edge? %>
2 3
<p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p>
4
<% else %>
5
<p><label><%= l(:field_status) %></label> <%= @issue.status.name %></p>
6
<% end %>
3 7
<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
4 8
</div>
5 9
<div class="splitcontentright">
10
<% if @issue.edge? %>
6 11
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
7 12
<%= content_tag('p', f.select(:fixed_version_id, 
8 13
                          (@project.versions.sort.collect {|v| [v.name, v.id]}),
......
7 12
<%= content_tag('p', f.select(:fixed_version_id, 
8 13
                          (@project.versions.sort.collect {|v| [v.name, v.id]}),
9 14
                          { :include_blank => true })) unless @project.versions.empty? %>
15
<% else %>
16
<p><label><%= l(:field_done_ratio) %></label> <%= "#{@issue.done_ratio}%" %></p>
17
<p><label><%= l(:field_fixed_version) %></label> <%= @issue.fixed_version ? @issue.fixed_version.name : '-' %></p>
18
<% end %>
10 19
</div>
app/views/issues/context_menu.rhtml (revision 56)
2 2
<% if !@issue.nil? -%>
3 3
	<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
4 4
	        :class => 'icon-edit', :disabled => !@can[:edit] %></li>
5
	<% if @issue.edge? %>
5 6
	<li class="folder">			
6 7
		<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
7 8
		<ul>
......
10 11
		                              :selected => (s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
11 12
		<% end -%>
12 13
		</ul>
13
	</li>
14
	</li>	
14 15
	<li class="folder">			
15 16
		<a href="#" class="submenu"><%= l(:field_priority) %></a>
16 17
		<ul>
......
20 21
		<% end -%>
21 22
		</ul>
22 23
	</li>
24
	<% end %>
23 25
	<li class="folder">			
24 26
		<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
25 27
		<ul>
......
31 33
		                              :selected => @issue.assigned_to.nil?, :disabled => !@can[:update] %></li>
32 34
		</ul>
33 35
	</li>
36
	<% if @issue.edge? %>
34 37
	<li class="folder">
35 38
		<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
36 39
		<ul>
......
39 42
		                                  :selected => (p == @issue.done_ratio), :disabled => !@can[:edit] %></li>
40 43
		<% end -%>
41 44
		</ul>
42
	</li>
45
	</li>	
43 46
	<li><%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue},
44 47
	        :class => 'icon-copy', :disabled => !@can[:copy] %></li>
48
	<% end %>
45 49
<% else -%>
46 50
	<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
47 51
	        :class => 'icon-edit', :disabled => !@can[:edit] %></li>
app/views/issues/_list.rhtml (revision 56)
10 10
        <% end %>
11 11
	</tr></thead>
12 12
	<tbody>
13
	<% issues.each do |issue| -%>
13
	<% issues.each do |issue| 
14
	   next if !@show_all_issues && (issue.hierarchical_level != 1) -%>	    
14 15
	<tr id="issue-<%= issue.id %>" class="issue hascontextmenu <%= cycle('odd', 'even') %> <%= "status-#{issue.status.position} priority-#{issue.priority.position}" %>">
15 16
	    <td class="checkbox"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
16 17
		<td><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
app/views/issues/show.rhtml (revision 56)
43 43
    <% end %>
44 44
</tr>
45 45
<tr>
46
    <td><b><%=l(:field_potential_parent)%> :</b></td><td><%= @issue.potential_parent ? l(:general_text_Yes) : l(:general_text_No) %></td>
47
</tr>
48
<tr>
46 49
<% n = 0
47 50
for custom_value in @custom_values %>
48 51
    <td valign="top"><b><%= custom_value.custom_field.name %> :</b></td><td valign="top"><%= simple_format(h(show_value(custom_value))) %></td>
app/views/issues/index.rfpdf (revision 56)
24 24
   	pdf.Cell(30, row_height, l(:field_priority), 0, 0, 'L', 1)
25 25
   	pdf.Cell(40, row_height, l(:field_assigned_to), 0, 0, 'L', 1)
26 26
   	pdf.Cell(25, row_height, l(:field_updated_on), 0, 0, 'L', 1)
27
   	pdf.Cell(15, row_height, l(:field_parent_issue), 0, 0, 'L', 1)
27 28
   	pdf.Cell(0, row_height, l(:field_subject), 0, 0, 'L', 1)
28 29
   	pdf.Line(10, pdf.GetY, 287, pdf.GetY)
29 30
   	pdf.Ln
......
42 43
	   	pdf.Cell(30, row_height, issue.priority.name, 0, 0, 'L', 1)
43 44
	   	pdf.Cell(40, row_height, issue.assigned_to ? issue.assigned_to.name : '', 0, 0, 'L', 1)
44 45
	   	pdf.Cell(25, row_height, format_date(issue.updated_on), 0, 0, 'L', 1)
46
   		pdf.Cell(15, row_height, issue.parent ? "# #{issue.parent.id}" : '', 0, 0, 'L', 1)
45 47
	   	pdf.MultiCell(0, row_height, (@project == issue.project ? issue.subject : "#{issue.project.name} - #{issue.subject}"))
46 48
   		pdf.Line(10, pdf.GetY, 287, pdf.GetY)
47 49
   		pdf.SetY(pdf.GetY() + 1)
app/views/issues/_edit.rhtml (revision 56)
14 14
        <%= render :partial => (@edit_allowed ? 'form' : 'form_update'), :locals => {:f => f} %>
15 15
        </fieldset>
16 16
    <% end %>
17
    <% if authorize_for('timelog', 'edit') %>
17
    <% if authorize_for('timelog', 'edit') && @issue.edge? %>
18 18
        <fieldset class="tabular"><legend><%= l(:button_log_time) %></legend>
19 19
        <% fields_for :time_entry, @time_entry, { :builder => TabularFormBuilder, :lang => current_language} do |time_entry| %>
20 20
        <div class="splitcontentleft">
app/views/issues/_show_children.rhtml (revision 56)
1
<%	
2
issues = [@issue]
3
issues += @issue.children
4
issues.each do |issue|
5
	is_parent = (issue == @issue)
6
    #usado em queries_helper.rb para decidir qual ícone será mostrado (se + ou -)  
7
	@show_children = is_parent -%>	    
8
	<tr id="issue-<%=issue.id%>" class="issue <%= issue_ancestors(issue) %> hascontextmenu <%= cycle('odd', 'even') %> <%= "status-#{issue.status.position} priority-#{issue.priority.position}" %>">
9
	    <td class="checkbox"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
10
		<td><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
11
	    <% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %>
12
	</tr>
13
<%	
14
end -%>
lang/lt.yml (revision 56)
126 126
field_assigned_to: Paskirtas 
127 127
field_priority: Prioritetas 
128 128
field_fixed_version: Target version
129
field_parent_issue: Child of
130
field_potential_parent: Potential parent
129 131
field_user: Vartotojas 
130 132
field_role: Vaidmuo 
131 133
field_homepage: Pagrindinis puslapis 
......
414 416
label_blocked_by: blokuotas 
415 417
label_precedes: įvyksta pirma 
416 418
label_follows: seka 
419
label_parents: child of
420
label_children: parent of
417 421
label_end_to_start: užbaigti, kad pradėti
418 422
label_end_to_end: užbaigti, kad pabaigti 
419 423
label_start_to_start: pradėkite pradėti 
......
618 622
setting_default_projects_public: Naujas projektas viešas pagal nutylėjimą
619 623
error_scm_annotate: "Įrašas neegzituoja arba negalima jo atvaizduoti."
620 624
label_planning: Planavimas
625
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
621 626
text_subprojects_destroy_warning: 'Šis(ie) subprojektas(ai): %s taip pat bus ištrintas(i).'
622 627
label_and_its_subprojects: %s projektas ir jo subprojektai
623 628

  
lang/uk.yml (revision 56)
123 123
field_assigned_to: Призначена до
124 124
field_priority: Пріоритет
125 125
field_fixed_version: Target version
126
field_parent_issue: Child of
127
field_potential_parent: Potential parent
126 128
field_user: Користувач
127 129
field_role: Роль
128 130
field_homepage: Домашня сторінка
......
411 413
label_blocked_by: заблоковане 
412 414
label_precedes: передує
413 415
label_follows: наступний за
416
label_parents: child of
417
label_children: parent of
414 418
label_end_to_start: з кінця до початку
415 419
label_end_to_end: з кінця до кінця
416 420
label_start_to_start: з початку до початку
......
619 623
setting_default_projects_public: New projects are public by default
620 624
error_scm_annotate: "The entry does not exist or can not be annotated."
621 625
label_planning: Planning
626
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
622 627
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/ro.yml (revision 56)
118 118
field_assigned_to: Atribuit pentru
119 119
field_priority: Prioritate
120 120
field_fixed_version: Target version
121
field_parent_issue: Child of
122
field_potential_parent: Potential parent
121 123
field_user: Utilizator
122 124
field_role: Rol
123 125
field_homepage: Pagina principala
......
393 395
label_blocked_by: blocat de
394 396
label_precedes: precedes
395 397
label_follows: follows
398
label_parents: child of
399
label_children: parent of
396 400
label_end_to_start: de la sfarsit la capat
397 401
label_end_to_end: de la sfarsit la sfarsit
398 402
label_start_to_start: de la capat la capat
......
617 621
setting_default_projects_public: New projects are public by default
618 622
error_scm_annotate: "The entry does not exist or can not be annotated."
619 623
label_planning: Planning
624
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/zh.yml (revision 56)
131 131
field_assigned_to: 指派给
132 132
field_priority: 优先级
133 133
field_fixed_version: 目标版本
134
field_parent_issue: Child of
135
field_potential_parent: Potential parent
134 136
field_user: 用户
135 137
field_role: 角色
136 138
field_homepage: 主页
......
452 454
label_blocked_by: 被阻挡
453 455
label_precedes: 优先于
454 456
label_follows: 跟随于
457
label_parents: child of
458
label_children: parent of
455 459
label_end_to_start: 结束-开始
456 460
label_end_to_end: 结束-结束
457 461
label_start_to_start: 开始-开始
......
560 564
text_regexp_info: 例如:^[A-Z0-9]+$
561 565
text_min_max_length_info: 0 表示没有限制
562 566
text_project_destroy_confirmation: 您确信要删除这个项目以及所有相关的数据吗?
567
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
563 568
text_subprojects_destroy_warning: '以下子项目也将被同时删除:%s'
564 569
text_workflow_edit: 选择角色和跟踪标签来编辑工作流程
565 570
text_are_you_sure: 您确定?
lang/pt.yml (revision 56)
118 118
field_assigned_to: Atribuído para
119 119
field_priority: Prioridade
120 120
field_fixed_version: Target version
121
field_parent_issue: Child of
122
field_potential_parent: Potential parent
121 123
field_user: Usuário
122 124
field_role: Regra
123 125
field_homepage: Página inicial
......
395 397
label_blocked_by: bloqueado por
396 398
label_precedes: procede
397 399
label_follows: segue
400
label_parents: child of
401
label_children: parent of
398 402
label_end_to_start: fim ao início
399 403
label_end_to_end: fim ao fim
400 404
label_start_to_start: ínícia ao inícia
......
617 621
setting_default_projects_public: New projects are public by default
618 622
error_scm_annotate: "The entry does not exist or can not be annotated."
619 623
label_planning: Planning
624
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/da.yml (revision 56)
127 127
field_assigned_to: Tildelt til
128 128
field_priority: Prioritet
129 129
field_fixed_version: Target version
130
field_parent_issue: Child of
131
field_potential_parent: Potential parent
130 132
field_user: Bruger
131 133
field_role: Rolle
132 134
field_homepage: Hjemmeside
......
442 444
label_blocked_by: blokeret af
443 445
label_precedes: kommer før
444 446
label_follows: følger
447
label_parents: child of
448
label_children: parent of
445 449
label_end_to_start: slut til start
446 450
label_end_to_end: slut til slut
447 451
label_start_to_start: start til start
......
619 623
setting_default_projects_public: Nye projekter er offentlige som default
620 624
error_scm_annotate: "The entry does not exist or can not be annotated."
621 625
label_planning: Planlægning
626
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
622 627
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/pt-br.yml (revision 56)
118 118
field_assigned_to: Atribuído para
119 119
field_priority: Prioridade
120 120
field_fixed_version: Versão
121
field_parent_issue: Filha de
122
field_potential_parent: Potential tarefa-mãe
121 123
field_user: Usuário
122 124
field_role: Papel
123 125
field_homepage: Página inicial
......
395 397
label_blocked_by: bloqueado por
396 398
label_precedes: precede
397 399
label_follows: segue
400
label_parents: filha de
401
label_children: mãe de
398 402
label_end_to_start: fim para o início
399 403
label_end_to_end: fim para fim
400 404
label_start_to_start: início para início
......
616 620
setting_default_projects_public: Novos projetos são públicos por padrão
617 621
error_scm_annotate: "Esta entrada não existe ou não pode ser anotada."
618 622
label_planning: Planejamento
623
error_issue_can_have_only_one_parent: permite apenas uma relação (uma tarefa pode ter apenas uma tarefa-mãe).
619 624
text_subprojects_destroy_warning: 'Seu(s) subprojeto(s): %s também serão excluídos.'
620 625
label_age: Age
lang/sr.yml (revision 56)
122 122
field_assigned_to: Dodeljeno
123 123
field_priority: Prioritet
124 124
field_fixed_version: Target version
125
field_parent_issue: Child of
126
field_potential_parent: Potential parent
125 127
field_user: Korisnik
126 128
field_role: Uloga
127 129
field_homepage: Homepage
......
405 407
label_blocked_by: blokiran od strane
406 408
label_precedes: prethodi
407 409
label_follows: sledi
410
label_parents: child of
411
label_children: parent of
408 412
label_end_to_start: od kraja do početka
409 413
label_end_to_end: od kraja do kraja
410 414
label_start_to_start: od početka do pocetka
......
618 622
setting_default_projects_public: New projects are public by default
619 623
error_scm_annotate: "The entry does not exist or can not be annotated."
620 624
label_planning: Planning
625
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
621 626
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/ru.yml (revision 56)
128 128
field_assigned_to: Назначена
129 129
field_priority: Приоритет
130 130
field_fixed_version: Версия
131
field_parent_issue: Child of
132
field_potential_parent: Potential parent
131 133
field_user: Пользователь
132 134
field_role: Роль
133 135
field_homepage: Стартовая страница
......
418 420
label_blocked_by: заблокировано 
419 421
label_precedes: предшествует
420 422
label_follows: следующий
423
label_parents: child of
424
label_children: parent of
421 425
label_end_to_start: с конца к началу
422 426
label_end_to_end: с конца к концу
423 427
label_start_to_start: с начала к началу
......
621 625
setting_default_projects_public: Новые проекты являются публичными
622 626
error_scm_annotate: "Данные отсутствуют или не могут быть подписаны."
623 627
label_planning: Планирование
628
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
624 629
text_subprojects_destroy_warning: 'Подпроекты: %s также будут удалены.'
625 630
label_and_its_subprojects: %s и все подпроекты
626 631
mail_body_reminder: "%d назначенных на вас задач на следующие %d дней:" 
lang/de.yml (revision 56)
129 129
field_assigned_to: Zugewiesen an
130 130
field_priority: Priorität
131 131
field_fixed_version: Zielversion
132
field_parent_issue: Child of
133
field_potential_parent: Potential parent
132 134
field_user: Benutzer
133 135
field_role: Rolle
134 136
field_homepage: Projekt-Homepage
......
449 451
label_blocked_by: Blockiert durch
450 452
label_precedes: Vorgänger von
451 453
label_follows: folgt
454
label_parents: child of
455
label_children: parent of
452 456
label_end_to_start: Ende - Anfang
453 457
label_end_to_end: Ende - Ende
454 458
label_start_to_start: Anfang - Anfang
......
618 622
enumeration_issue_priorities: Ticket-Prioritäten
619 623
enumeration_doc_categories: Dokumentenkategorien
620 624
enumeration_activities: Aktivitäten (Zeiterfassung)
625
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
621 626
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/bg.yml (revision 56)
118 118
field_assigned_to: Възложена на
119 119
field_priority: Приоритет
120 120
field_fixed_version: Планувана версия
121
field_parent_issue: Child of
122
field_potential_parent: Potential parent
121 123
field_user: Потребител
122 124
field_role: Роля
123 125
field_homepage: Начална страница
......
395 397
label_blocked_by: блокирана от
396 398
label_precedes: предшества
397 399
label_follows: изпълнява се след
400
label_parents: child of
401
label_children: parent of
398 402
label_end_to_start: end to start
399 403
label_end_to_end: end to end
400 404
label_start_to_start: start to start
......
617 621
setting_default_projects_public: Новите проекти са публични по подразбиране
618 622
error_scm_annotate: "Обектът не съществува или не може да бъде анотиран."
619 623
label_planning: Планиране
624
error_issue_can_have_only_one_parent: allows only one relationship (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/sv.yml (revision 56)
118 118
field_assigned_to: Tilldelad
119 119
field_priority: Prioritet
120 120
field_fixed_version: Target version
121
field_parent_issue: Child of
122
field_potential_parent: Potential parent
121 123
field_user: Användare
122 124
field_role: Roll
123 125
field_homepage: Hemsida
......
395 397
label_blocked_by: blocked by
396 398
label_precedes: precedes
397 399
label_follows: follows
400
label_parents: child of
401
label_children: parent of
398 402
label_end_to_start: end to start
399 403
label_end_to_end: end to end
400 404
label_start_to_start: start to start
......
618 622
setting_default_projects_public: New projects are public by default
619 623
error_scm_annotate: "The entry does not exist or can not be annotated."
620 624
label_planning: Planning
625
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
621 626
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/ja.yml (revision 56)
119 119
field_assigned_to: 担当者
120 120
field_priority: 優先度
121 121
field_fixed_version: Target version
122
field_parent_issue: Child of
123
field_potential_parent: Potential parent
122 124
field_user: ユーザ
123 125
field_role: 役割
124 126
field_homepage: ホームページ
......
396 398
label_blocked_by: ブロックされている
397 399
label_precedes: 先行する
398 400
label_follows: 後続する
401
label_parents: child of
402
label_children: parent of
399 403
label_end_to_start: end to start
400 404
label_end_to_end: end to end
401 405
label_start_to_start: start to start
......
618 622
setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
619 623
error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。"
620 624
label_planning: 計画
625
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
621 626
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/he.yml (revision 56)
120 120
field_assigned_to: מוצב ל
121 121
field_priority: עדיפות
122 122
field_fixed_version: גירסאת יעד
123
field_parent_issue: Child of
124
field_potential_parent: Potential parent
123 125
field_user: מתשמש
124 126
field_role: תפקיד
125 127
field_homepage: דף הבית
......
400 402
label_blocked_by: חסום ע"י
401 403
label_precedes: מקדים את
402 404
label_follows: עוקב אחרי
405
label_parents: child of
406
label_children: parent of
403 407
label_end_to_start: מהתחלה לסוף
404 408
label_end_to_end: מהסוף לסוף
405 409
label_start_to_start: מהתחלה להתחלה
......
617 621
setting_default_projects_public: פרויקטים חדשים הינם פומביים כברירת מחדל
618 622
error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה."
619 623
label_planning: תכנון
624
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/fi.yml (revision 56)
127 127
field_assigned_to: Nimetty
128 128
field_priority: Prioriteetti
129 129
field_fixed_version: Kohde versio
130
field_parent_issue: Child of
131
field_potential_parent: Potential parent
130 132
field_user: Käyttäjä
131 133
field_role: Rooli
132 134
field_homepage: Kotisivu
......
416 418
label_blocked_by: estetty
417 419
label_precedes: edeltää
418 420
label_follows: seuraa
421
label_parents: child of
422
label_children: parent of
419 423
label_end_to_start: loppu alkuun
420 424
label_end_to_end: loppu loppuun
421 425
label_start_to_start: alku alkuun
......
617 621
label_overall_activity: Kokonaishistoria
618 622
error_scm_annotate: "Merkintää ei ole tai siihen ei voi lisätä selityksiä."
619 623
label_planning: Suunnittelu
624
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Tämän alaprojekti(t): %s tullaan myös poistamaan.'
lang/en.yml (revision 56)
129 129
field_assigned_to: Assigned to
130 130
field_priority: Priority
131 131
field_fixed_version: Target version
132
field_parent_issue: Child of
133
field_potential_parent: Potential parent
132 134
field_user: User
133 135
field_role: Role
134 136
field_homepage: Homepage
......
449 451
label_blocked_by: blocked by
450 452
label_precedes: precedes
451 453
label_follows: follows
454
label_parents: child of
455
label_children: parent of
452 456
label_end_to_start: end to start
453 457
label_end_to_end: end to end
454 458
label_start_to_start: start to start
......
557 561
text_regexp_info: eg. ^[A-Z0-9]+$
558 562
text_min_max_length_info: 0 means no restriction
559 563
text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
564
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
560 565
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
561 566
text_workflow_edit: Select a role and a tracker to edit the workflow
562 567
text_are_you_sure: Are you sure ?
lang/cs.yml (revision 56)
132 132
field_assigned_to: Přiřazeno
133 133
field_priority: Priorita
134 134
field_fixed_version: Přiřazeno k verzi
135
field_parent_issue: Child of
136
field_potential_parent: Potential parent
135 137
field_user: Uživatel
136 138
field_role: Role
137 139
field_homepage: Homepage
......
452 454
label_blocked_by: zablokován
453 455
label_precedes: předchází
454 456
label_follows: následuje
457
label_parents: child of
458
label_children: parent of
455 459
label_end_to_start: od konce do začátku
456 460
label_end_to_end: od konce do konce
457 461
label_start_to_start: od začátku do začátku
......
622 626
enumeration_activities: Aktivity (sledování času)
623 627
error_scm_annotate: "Položka neexistuje nebo nemůže být komentována."
624 628
label_planning: Plánování
629
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
625 630
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/fr.yml (revision 56)
129 129
field_assigned_to: Assigné à
130 130
field_priority: Priorité
131 131
field_fixed_version: Version cible
132
field_parent_issue: Child of
133
field_potential_parent: Potential parent
132 134
field_user: Utilisateur
133 135
field_role: Rôle
134 136
field_homepage: Site web
......
449 451
label_blocked_by: bloqué par
450 452
label_precedes: précède
451 453
label_follows: suit
454
label_parents: child of
455
label_children: parent of
452 456
label_end_to_start: fin à début
453 457
label_end_to_end: fin à fin
454 458
label_start_to_start: début à début
......
557 561
text_regexp_info: ex. ^[A-Z0-9]+$
558 562
text_min_max_length_info: 0 pour aucune restriction
559 563
text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et toutes ses données ?
564
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
560 565
text_subprojects_destroy_warning: 'Ses sous-projets: %s seront également supprimés.'
561 566
text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
562 567
text_are_you_sure: Etes-vous sûr ?
lang/es.yml (revision 56)
115 115
field_assigned_to: Asignado a
116 116
field_priority: Prioridad
117 117
field_fixed_version: Target version
118
field_parent_issue: Child of
119
field_potential_parent: Potential parent
118 120
field_user: Usuario
119 121
field_role: Perfil
120 122
field_homepage: Sitio web
......
386 388
label_blocked_by: bloqueado por
387 389
label_precedes: anterior a
388 390
label_follows: posterior a 
391
label_parents: child of
392
label_children: parent of
389 393
label_end_to_start: fin a principio
390 394
label_end_to_end: fin a fin
391 395
label_start_to_start: principio a principio
......
620 624
setting_default_projects_public: Los proyectos nuevos son públicos por defecto 
621 625
error_scm_annotate: "No existe la entrada o no ha podido ser anotada"
622 626
label_planning: Planificación
627
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
623 628
text_subprojects_destroy_warning: 'Sus subprojectos: %s también se eliminarán' 
lang/nl.yml (revision 56)
118 118
field_assigned_to: Toegewezen aan
119 119
field_priority: Prioriteit
120 120
field_fixed_version: Target version
121
field_parent_issue: Child of
122
field_potential_parent: Potential parent
121 123
field_user: Gebruiker
122 124
field_role: Rol
123 125
field_homepage: Homepage
......
395 397
label_blocked_by: geblokkeerd door
396 398
label_precedes: gaat vooraf aan
397 399
label_follows: volgt op
400
label_parents: child of
401
label_children: parent of
398 402
label_end_to_start: eind tot start
399 403
label_end_to_end: eind tot eind
400 404
label_start_to_start: start tot start
......
618 622
setting_default_projects_public: New projects are public by default
619 623
error_scm_annotate: "The entry does not exist or can not be annotated."
620 624
label_planning: Planning
625
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
621 626
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/ko.yml (revision 56)
120 120
field_assigned_to: 담당자
121 121
field_priority: 우선순위
122 122
field_fixed_version: Target version
123
field_parent_issue: Child of
124
field_potential_parent: Potential parent
123 125
field_user: 유저
124 126
field_role: 역할
125 127
field_homepage: 홈페이지
......
402 404
label_blocked_by: 막고 있는 이슈
403 405
label_precedes: 다음 이슈보다 앞서서 처리해야 함.
404 406
label_follows: 선처리 이슈
407
label_parents: child of
408
label_children: parent of
405 409
label_end_to_start: end to start
406 410
label_end_to_end: end to end
407 411
label_start_to_start: start to start
......
617 621
setting_default_projects_public: New projects are public by default
618 622
error_scm_annotate: "The entry does not exist or can not be annotated."
619 623
label_planning: Planning
624
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/zh-tw.yml (revision 56)
131 131
field_assigned_to: 分派給
132 132
field_priority: 優先權
133 133
field_fixed_version: 版本
134
field_parent_issue: Child of
135
field_potential_parent: Potential parent
134 136
field_user: 用戶
135 137
field_role: 角色
136 138
field_homepage: 網站首頁
......
453 455
label_blocked_by: 被阻擋
454 456
label_precedes: 優先於
455 457
label_follows: 跟隨於
458
label_parents: child of
459
label_children: parent of
456 460
label_end_to_start: end to start
457 461
label_end_to_end: end to end
458 462
label_start_to_start: start to start
......
561 565
text_regexp_info: eg. ^[A-Z0-9]+$
562 566
text_min_max_length_info: 0 代表「不限制」
563 567
text_project_destroy_confirmation: 您確定要刪除這個專案和其他相關資料?
568
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
564 569
text_subprojects_destroy_warning: '下列子專案: %s 將一併被刪除。'
565 570
text_workflow_edit: 選擇角色與追蹤標籤以設定其工作流程
566 571
text_are_you_sure: 確定執行?
lang/pl.yml (revision 56)
115 115
field_assigned_to: Przydzielony do
116 116
field_priority: Priorytet
117 117
field_fixed_version: Wersja docelowa
118
field_parent_issue: Child of
119
field_potential_parent: Potential parent
118 120
field_user: Użytkownik
119 121
field_role: Rola
120 122
field_homepage: Strona www
......
386 388
label_blocked_by: zablokowane przez
387 389
label_precedes: poprzedza
388 390
label_follows: podąża
391
label_parents: child of
392
label_children: parent of
389 393
label_end_to_start: koniec do początku
390 394
label_end_to_end: koniec do końca
391 395
label_start_to_start: początek do początku
......
617 621
setting_default_projects_public: Nowe projekty są domyślnie publiczne
618 622
error_scm_annotate: "Wpis nie istnieje lub nie można do niego dodawać adnotacji."
619 623
label_planning: Planning
624
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
620 625
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
lang/th.yml (revision 56)
129 129
field_assigned_to: มอบหมายให้
130 130
field_priority: ความสำคัญ
131 131
field_fixed_version: รุ่น
132
field_parent_issue: Child of
133
field_potential_parent: Potential parent
132 134
field_user: ผู้ใช้
133 135
field_role: บทบาท
134 136
field_homepage: หน้าแรก
......
451 453
label_blocked_by: กีดกันโดย
452 454
label_precedes: นำหน้า
453 455
label_follows: ตามหลัง
456
label_parents: child of
457
label_children: parent of
454 458
label_end_to_start: จบ-เริ่ม
455 459
label_end_to_end: จบ-จบ
456 460
label_start_to_start: เริ่ม-เริ่ม
......
559 563
text_regexp_info: ตัวอย่าง ^[A-Z0-9]+$
560 564
text_min_max_length_info: 0 หมายถึงไม่จำกัด
561 565
text_project_destroy_confirmation: คุณแน่ใจไหมว่าต้องการลบโครงการและข้อมูลที่เกี่ยวข้่อง ?
566
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
562 567
text_subprojects_destroy_warning: 'โครงการย่อย: %s จะถูกลบด้วย.'
563 568
text_workflow_edit: เลือกบทบาทและการติดตาม เพื่อแก้ไขลำดับงาน
564 569
text_are_you_sure: คุณแน่ใจไหม ?
lang/no.yml (revision 56)
131 131
field_assigned_to: Tildelt til
132 132
field_priority: Prioritet
133 133
field_fixed_version: Mål-versjon
134
field_parent_issue: Child of
135
field_potential_parent: Potential parent
134 136
field_user: Bruker
135 137
field_role: Rolle
136 138
field_homepage: Hjemmeside
......
453 455
label_blocked_by: blokkert av
454 456
label_precedes: kommer før
455 457
label_follows: følger
458
label_parents: child of
459
label_children: parent of
456 460
label_end_to_start: slutt til start
457 461
label_end_to_end: slutt til slutt
458 462
label_start_to_start: start til start
......
561 565
text_regexp_info: eg. ^[A-Z0-9]+$
562 566
text_min_max_length_info: 0 betyr ingen begrensning
563 567
text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ?
568
error_issue_can_have_only_one_parent: allows only one relation (a task can have only one parent).
564 569
text_subprojects_destroy_warning: 'Underprojekt(ene): %s vil også bli slettet.'
565 570
text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten
566 571
text_are_you_sure: Er du sikker ?
lang/it.yml (revision 56)
118 118
field_assigned_to: Assegnato a
119 119
field_priority: Priorita'
120 120
field_fixed_version: Target version
121
field_parent_issue: Child of
122
field_potential_parent: Potential parent
121 123
field_user: Utente
... This diff was truncated because it exceeds the maximum size that can be displayed.