11 Commits

Author SHA1 Message Date
Richard Říman
bbe55e098a Merge branch 'master' of github.com:railsformers/redmine_rate 2012-09-12 16:45:37 +02:00
Richard Říman
dd3bcd9dce added missing czech translations 2012-09-12 16:44:57 +02:00
Richard Říman
a9dcecc838 Merge https://github.com/edavis10/redmine_rate 2012-06-12 12:37:11 +02:00
Eric Davis
f42b419bf3 [#6898] Replace SortHelper patch with a plain helper 2012-05-15 09:09:43 -07:00
Richard Říman
8288455356 add original github source location for automation plugin updates 2012-03-02 15:57:03 +01:00
Richard
dc8c5eefd2 translates 2011-11-30 08:29:02 +01:00
Eric Davis
00453672c6 Add Gemfile for bundler 2011-07-30 19:29:08 -07:00
Eric Davis
268b1b7107 Remove Rubyforge 2011-04-28 11:18:47 -07:00
Eric Davis
25c3bf5898 Release v0.2.1 2011-04-28 11:17:06 -07:00
Eric Davis
4c3e6b6b6d [#5734] Fix the cost caching case where Time Entry attributes changed
A cost value wasn't getting recaclulated by TimeEntry#cost when the
attributes were changing. It only was recalculated when .cost changed.
2011-04-06 09:27:20 -07:00
Eric Davis
b20ebe587b Tweak ObjectDaddy so it's loaded into Rate when testing 2011-04-06 09:18:54 -07:00
11 changed files with 65 additions and 24 deletions

1
.github_origin Normal file
View File

@@ -0,0 +1 @@
https://github.com/edavis10/redmine_rate.git

1
Gemfile Normal file
View File

@@ -0,0 +1 @@
gem 'lockfile'

View File

@@ -19,7 +19,6 @@ begin
s.homepage = "https://projects.littlestreamsoftware.com/projects/redmine-rate"
s.description = "The Rate plugin stores billing rates for Users. It also provides an API that can be used to find the rate for a Member of a Project at a specific date."
s.authors = ["Eric Davis"]
s.rubyforge_project = "redmine_rate" # TODO
s.files = FileList[
"[A-Z]*",
"init.rb",
@@ -29,9 +28,6 @@ begin
]
end
Jeweler::GemcutterTasks.new
Jeweler::RubyforgeTasks.new do |rubyforge|
rubyforge.doc_task = "rdoc"
end
rescue LoadError
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
end

View File

@@ -1 +1 @@
0.2.0
0.2.1

View File

@@ -1,12 +1,7 @@
module RateSortHelperPatch
def self.included(base) # :nodoc:
base.send(:include, InstanceMethods)
end
module InstanceMethods
module RateHelper
# Allows more parameters than the standard sort_header_tag
def rate_sort_header_tag(column, options = {})
caption = options.delete(:caption) || titleize(Inflector::humanize(column))
caption = options.delete(:caption) || titleize(ActiveSupport::Inflector::humanize(column))
default_order = options.delete(:default_order) || 'asc'
options[:title]= l(:label_sort_by, "\"#{caption}\"") unless options[:title]
content_tag('th',
@@ -80,7 +75,7 @@ module RateSortHelperPatch
icon = nil
order = default_order
end
caption = titleize(Inflector::humanize(column)) unless caption
caption = titleize(ActiveSupport::Inflector::humanize(column)) unless caption
sort_options = { :sort_key => column, :sort_order => order }
# don't reuse params if filters are present
@@ -98,5 +93,4 @@ module RateSortHelperPatch
(icon ? nbsp(2) + image_tag(icon) : '')
end
end
end

View File

@@ -151,6 +151,9 @@ class Rate < ActiveRecord::Base
end
if Rails.env.test?
require 'object_daddy'
include ObjectDaddy
public
generator_for :date_in_effect => Date.today
end

18
config/locales/cs.yml Normal file
View File

@@ -0,0 +1,18 @@
cs:
rate_label_rates: Míra
rate_label_rate: Míra
rate_label_rate_history: Historie míry
rate_label_new_rate: Nová míra
rate_label_currency:
rate_error_user_not_found: Uživatel nebyl nalezen
rate_label_set_rate: Nastavit míru
rate_label_default: Výchozí míra
rate_cost: Cena
text_rate_caches_panel: "Míra mezipaměti"
text_no_cache_run: "nebyla nalezena žádná běžící mezipaměť"
text_last_caching_run: "Poslední spuštěná mezipaměť: "
text_last_cache_clearing_run: "Poslední čištění mezipaměti: "
text_load_missing_caches: "Nahrát chybějící mezipaměť"
text_clear_and_load_all_caches: "Vyčistit a nahrát všechny mezipaměti"
text_caches_loaded_successfully: "Mezipaměti byly nahrány"
permission_view_rate: "Zobrazit míry"

View File

@@ -6,8 +6,9 @@ require 'dispatcher'
Dispatcher.to_prepare :redmine_rate do
gem 'lockfile'
require_dependency 'sort_helper'
SortHelper.send(:include, RateSortHelperPatch)
require_dependency 'application_controller'
ApplicationController.send(:include, RateHelper)
ApplicationController.send(:helper, :rate)
require_dependency 'time_entry'
TimeEntry.send(:include, RateTimeEntryPatch)
@@ -26,7 +27,7 @@ Redmine::Plugin.register :redmine_rate do
url 'https://projects.littlestreamsoftware.com/projects/redmine-rate'
author_url 'http://www.littlestreamsoftware.com'
description "The Rate plugin provides an API that can be used to find the rate for a Member of a Project at a specific date. It also stores historical rate data so calculations will remain correct in the future."
version '0.2.0'
version '0.2.1'
requires_redmine :version_or_higher => '1.0.0'

View File

@@ -9,7 +9,7 @@ module RateTimeEntryPatch
unloadable # Send unloadable so it will not be unloaded in development
belongs_to :rate
before_save :cost
before_save :recalculate_cost
end
@@ -32,7 +32,9 @@ module RateTimeEntryPatch
# Returns the current cost of the TimeEntry based on it's rate and hours
#
# Is a read-through cache method
def cost
def cost(options={})
store_to_db = options[:store] || false
unless read_attribute(:cost)
if self.rate.nil?
amount = Rate.amount_for(self.user, self.project, self.spent_on.to_s)
@@ -43,8 +45,13 @@ module RateTimeEntryPatch
if amount.nil?
write_attribute(:cost, 0.0)
else
# Write the cost to the database for caching
update_attribute(:cost, amount.to_f * hours.to_f)
if store_to_db
# Write the cost to the database for caching
update_attribute(:cost, amount.to_f * hours.to_f)
else
# Cache to object only
write_attribute(:cost, amount.to_f * hours.to_f)
end
end
end
@@ -59,6 +66,12 @@ module RateTimeEntryPatch
clear_cost_cache
update_attribute(:cost, cost)
end
def recalculate_cost
clear_cost_cache
cost(:store => false)
true # for callback
end
end
end

View File

@@ -5,11 +5,11 @@
Gem::Specification.new do |s|
s.name = %q{redmine_rate}
s.version = "0.2.0"
s.version = "0.2.1"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Eric Davis"]
s.date = %q{2011-03-03}
s.date = %q{2011-04-28}
s.description = %q{The Rate plugin stores billing rates for Users. It also provides an API that can be used to find the rate for a Member of a Project at a specific date.}
s.email = %q{edavis@littlestreamsoftware.com}
s.extra_rdoc_files = [
@@ -79,7 +79,6 @@ Gem::Specification.new do |s|
s.homepage = %q{https://projects.littlestreamsoftware.com/projects/redmine-rate}
s.rdoc_options = ["--charset=UTF-8"]
s.require_paths = ["lib"]
s.rubyforge_project = %q{redmine_rate}
s.rubygems_version = %q{1.3.7}
s.summary = %q{A Rate plugin for Redmine to store billing rate for user.}
s.test_files = [

View File

@@ -71,6 +71,21 @@ class RateTimeEntryPatchTest < ActiveSupport::TestCase
assert_equal 2000.0, @time_entry.read_attribute(:cost)
end
should "clear and recalculate the cache when the attribute is already set but stale" do
# Set the cost
assert @time_entry.save
assert_equal 2000.0, @time_entry.read_attribute(:cost)
@time_entry.reload
@time_entry.hours = 20
assert @time_entry.save
assert_equal 4000.0, @time_entry.read_attribute(:cost)
assert_equal 4000.0, @time_entry.reload.cost
end
end