diff --git a/app/controllers/jobs_controller.rb b/app/controllers/jobs_controller.rb index c677fab..6314b06 100644 --- a/app/controllers/jobs_controller.rb +++ b/app/controllers/jobs_controller.rb @@ -26,7 +26,7 @@ class JobsController < ApplicationController end def create - @job = Job.new(job_params) + @job = Job.new(remove_empty_time_budgets(job_params)) if @job.save redirect_to project_job_path(@job.project, @job) else diff --git a/app/models/job.rb b/app/models/job.rb index 07c33f7..eb15e9b 100644 --- a/app/models/job.rb +++ b/app/models/job.rb @@ -50,4 +50,23 @@ class Job < ActiveRecord::Base ActionView::Base.send(:include, Rails.application.routes.url_helpers) ActionController::Base.helpers.link_to name, ActionController::Base.helpers.project_job_path(project, self) end + + def self.default_for(time_entry) + projects = [time_entry.project, time_entry.project.parent] + jobs = Job.where(project: projects).active + support = jobs.where(category: JobCategory.support).first + retainer = jobs.where(category: JobCategory.retainer).first + sprints = jobs.where(category: JobCategory.sprints).first + priority_list = [sprints, retainer, support].compact + + return jobs.first if priority_list.empty? + + return support if time_entry.activity.name == "Support" + + return priority_list.first if time_entry.issue.blank? + + return support if time_entry.issue.tracker.name == "Support" + + priority_list.first + end end diff --git a/app/models/job_category.rb b/app/models/job_category.rb index 056014c..3bba2cc 100644 --- a/app/models/job_category.rb +++ b/app/models/job_category.rb @@ -5,6 +5,10 @@ class JobCategory < Enumeration OptionName = :enumeration_job_category + scope :support, -> { where(name: 'Support').first } + scope :retainer, -> { where(name: 'Retainer').first } + scope :sprints, -> { where(name: 'Sprints').first } + def option_name OptionName end diff --git a/lib/time_entry_patch.rb b/lib/time_entry_patch.rb index 38d08c8..29477e1 100644 --- a/lib/time_entry_patch.rb +++ b/lib/time_entry_patch.rb @@ -7,5 +7,13 @@ module TimeEntryPatch included do belongs_to :job + + before_save :set_job, unless: :job + + def set_job + return if job.present? + + self.job = Job.default_for(self) + end end end