GithubHelp home page GithubHelp logo

momibun926 / redmine_issue_evm Goto Github PK

View Code? Open in Web Editor NEW
55.0 15.0 23.0 9.11 MB

This plugin provides the function of calculating evm of projects . EVM can help you to track your project progress and its status and to forecast the future performance of the project. ***Attention*** For Redmine3.4.x in branch "redmine3-4-3".

License: GNU General Public License v2.0

Ruby 57.10% HTML 40.07% CSS 2.83%
evm chart forecast kpi redmine

redmine_issue_evm's Introduction

Earned Value Management (EVM) Calculation Plugin

Rate at redmine.org

This plugin provides the function of calculating evm of projects . EVM can help you to track your project progress and its status and to forecast the future performance of the project.

Current Version

6.0.2

Compatibility

Redmine 5.0.0 and above

Notification

The redmine3.4.x compatible version in branch "redmine3-4-3". https://github.com/momibun926/redmine_issue_evm/tree/redmine3-4-3

The redmine4.x.x compatible version in branch "redmine4.0". https://github.com/momibun926/redmine_issue_evm/tree/redmine4.0

Main features

Calculate EVM with chart

  • All projects with ES
  • Each version
  • Each assignee (Shown estimated hours each days on chart)
  • Each parent issues
  • Some Trackers
  • Calculating EV based on daily done ratio
  • Daily EAC
  • EVM summary on overview page

Project reporting based on EVM

  • Project overview can be recorded with EVM values
  • List, query, and edit historical summaries

Project metrics

  • Duration
  • Status
  • Days until due date
  • Amount of calculation issues
  • Variance at baseline and show issue list
  • Amount of issue. (version, assignee, tracker)
  • Chart of EVM(PV,EV,AC), Forecast is invalid when project is finished.

Common setting

  • Basic time of day
  • Calculation method of ETC
  • Forecast chart, Performance chart, Threshold value, incomplete issues

Create baselines, and view history

  • Create baseline
  • View past created baseline

How to calculate EVM

The below are used for EVM.

  • start date
  • due date(If empty, effective of version)
  • estimated time (If you set it as 0, you will not get PV, CV)
  • spent time

If you input these into your project, it can help you to calculate both a single issue’s EVM and whole project’s one.

  • PV: Dividing estimated time by the days (from start date to due date(or effective date of version )) to get daily workload
  • EV: After issues are closed, you can get EV. When the progress rate is set, it is calculated by estimated time. (progress rate on the day when the progress is set.)
  • AC: Total work hours of PV issues.

Example

(1) Create an issue with:

  • start date: 2015/08/01
  • due date: 2015/08/03
  • estimated time: 24 hours

At that time, only PV is calculated. As you have not closed the issue yet, EV equals 0. PV: Dividing estimated time: 24hours by 3 days (from start date to due date)

EVM 8/1 8/2 8/3
PV 8 16 24
EV 0 0 0
AC 0 0 0

(2) Input your spent time.

8/1: 10.0hours 8/2: 6.0hours 8/3: 8.0hours

EVM 8/1 8/2 8/3
PV 8 16 24
EV 0 0 0
AC 10 16 24

(3) After finishing the issue, close it on 8/3. EV will be calculated on 8/3.

EVM 8/1 8/2 8/3
PV 8 16 24
EV 0 0 24
AC 10 16 24

Based on these data, EVM and chart are created.

Baseline

If you set baseline, you can know easily how project divergence is and whether new task (issues) can be added by chart. In other words, you can see whether your estimated daily workload is over or not by chart. PV is based on your baseline. In addition, you can set calculation without baseline by options.

View options

  • Change the calculating basic date
  • Using baseline
  • Explanation of EVM

About working days

  1. Excluding weekends and holidays
  2. If it is only weekends or holidays, make it a working day
  3. Use holidays gem -> Regional settings are set in the common setting page(common setting link in contextual)

Example)

In Japan, May 3, May 4, May 5 are holidays

  • Including weekends and holidays
Start date Due date Estimated time Working day PV per day
May 1, 2017 (Monday) May 8, 2017 (Monday) 12 hours 3 days 4 hours
  • Including only a few weekends and holidays
Start date Due date Estimated time Working day PV per day
May 1, 2017 (Monday) May 7, 2017 (Sunday) 10 hours 2 days 5 hours
  • Only weekends and holidays
Start date Due date Estimated time Working day PV per day
May 3, 2017 (Wed) May 7, 2017 (Sunday) 20 hours 5 days 4 hours

Chart

Chart.js is used to display charts, and Chart.bundle.min.js(Ver2) used in Redmine 4.2 is included with this plugin. I will make it compatible with Ver3 someday.

Main Chart. Displays the cumulative PV, EV, and AC values from the issue being calculated in a time series. If a baseline has been set, the baseline is also displayed.

Performance Chart Calculates and displays SPI, CPI, and CR only on days when PV, EV, and AC are calculated. If project members frequently close the ISSUE and enter work hours, the accuracy of measuring and predicting overall project performance will be improved.

Chart by Version. If your project is utilizing versions, this is a very useful chart. You can select any version in your project to view the chart.

Chart by Person. Very useful if you have many members in your project. You can see the performance of each member of the team, which is not possible if you only look at the project as a whole.

Chart by parent issue. This chart is for those who are managing tasks with a hierarchical structure of issues.

Chart by Tracker For those who manage trackers in a subdivided manner and do not want to include trackers in EVM calculations, you can select only the trackers you need and display the chart.

Installation

(1) Getting plugin source

case of zip file.

  • Download zip-file
  • Create a folder named redmine_issue_evm under [redmine_root]/plugins/
  • Extract zip file in redmine_issue_evm

Case of git clone.

git clone https://github.com/momibun926/redmine_issue_evm [redmine_root]/plugins/redmine_issue_evm

(2) bundle install

bundle install

(3) Migration. At the command line type

rake redmine:plugins:migrate NAME=redmine_issue_evm RAILS_ENV=production

(4) Restart your Redmine web servers (e.g. mongrel, thin, mod_rails).

(5) Login and configure the plugin (see Permissions section, Administration->plugin)

UnInstall

rake redmine:plugins:migrate NAME=redmine_issue_evm VERSION=0

Screen shots

Overview-EVM evm sample screenshot

Overview-ES evm sample screenshot

Overview-EVM Chart evm sample screenshot

Overview-EVM Performance chart evm sample screenshot

Overview-EVM Incomplete issue evm sample screenshot

Assignees evm sample screenshot

Prent issues evm sample screenshot

Trackers evm sample screenshot

Create baseline evm sample screenshot

Baseline History evm sample screenshot

Plugin Setting evm sample screenshot

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

My Environment

  • Redmine version 5.0.0.stable.21553
  • Ruby version 3.1.2-p20 (2022-04-12) [x86_64-linux]
  • Rails version 6.1.5.1
  • Environment production
  • Database adapter PostgreSQL
  • Mailer queue ActiveJob::QueueAdapters::AsyncAdapter
  • Mailer delivery smtp

Translators

I appreciate your cooperation, Wen Wen, Shen.

redmine_issue_evm's People

Contributors

alexandermeindl avatar archonwang avatar janbkrejci avatar momibun926 avatar yusuken1983 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

redmine_issue_evm's Issues

nil can't be coerced into Float

We were missing information on some of our issues and got the following error :
TypeError (nil can't be coerced into Float):
plugins/redmine_issue_evm/lib/evm_logic.rb:242:in +' plugins/redmine_issue_evm/lib/evm_logic.rb:242:inblock in calculate_earned_value'
C:in each' C:ineach'

I went in and changed the evm_logic.rb page
On the Math sections I added .to_f to the variables. This turns a nil variable to a float of 0.0
example of one line
temp_ev[close_date].nil? ? temp_ev[close_date] = issue.estimated_hours.to_f : temp_ev[close_date] += issue.estimated_hours.to_f

Now it works great.
when you are working with variables it is best to change them to a float or integer so that you will not get an error message. Just a safety net.

Other than that the plugin seems to work fine. THANKS!

The symbol for the table 'evmbaselines' is different in migration files

When I executed reke redmine:plugins:migrate, I got an error as below.

$ RAILS_ENV=production bundle exec rake redmine:plugins:migrate
Your Gemfile lists the gem mime-types (>= 0) more than once.
You should probably keep only one of them.
While it's not a problem now, it could cause errors if you change the version of just one of them later.
Migrating redmine_issue_evm (Redmine Issue Evm plugin)...
== 3 AddColumnEvmbaselines: migrating =========================================
-- add_column(:Evmbaselines, :author_id, :integer)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'redmine_310_seed.Evmbaselines' doesn't exist: ALTER TABLE `Evmbaselines` ADD `author_id` int(11)/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `query'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `block in execute'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.3/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:467:in `log'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `execute'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/mysql2_adapter.rb:231:in `execute'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:393:in `add_column'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:661:in `block in method_missing'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:631:in `block in say_with_time'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:631:in `say_with_time'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:651:in `method_missing'
/var/rails/redmine-3.1.0-seed/plugins/redmine_issue_evm/db/migrate/003_add_column_evmbaselines.rb:3:in `change'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:605:in `exec_migration'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:589:in `block (2 levels) in migrate'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:588:in `block in migrate'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:in `with_connection'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:587:in `migrate'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:764:in `migrate'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:994:in `block in execute_migration_in_transaction'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:1042:in `ddl_transaction'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:993:in `execute_migration_in_transaction'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:955:in `block in migrate'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:951:in `each'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:951:in `migrate'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:819:in `up'
/var/rails/redmine-3.1.0-seed/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.3/lib/active_record/migration.rb:797:in `migrate'
/var/rails/redmine-3.1.0-seed/lib/redmine/plugin.rb:481:in `migrate_plugin'
/var/rails/redmine-3.1.0-seed/lib/redmine/plugin.rb:453:in `migrate'
/var/rails/redmine-3.1.0-seed/lib/redmine/plugin.rb:467:in `block in migrate'
/var/rails/redmine-3.1.0-seed/lib/redmine/plugin.rb:466:in `each'
/var/rails/redmine-3.1.0-seed/lib/redmine/plugin.rb:466:in `migrate'
/var/rails/redmine-3.1.0-seed/lib/tasks/redmine.rake:127:in `block (3 levels) in <top (required)>'

I found a difference of the table name between db/migrate/001_create_evmbaselines.rb and db/migrate/003_add_column_evmbaselines.rb.
In 001_create_evmbaselines.rb, the symbol :evmbaselines is used.
But in 003_add_column_evmbaselines.rb, the symbol is :Evmbaselines.

In the case of the MySQL, if the variable lower_case_table_names which is the MySQL's variable is "0", this error is caused by using different symbol for the table name.

The issue_EVM is not properly accounting for the aggregate value of activities in the sub-projects

Hello,

In internal testing on my VM, I created our current project structure:

image

In my tests I realized that the EVM Issue work properly in pure redmine, for activities that have estimated the expected date setados, and are within the same project.

image

image

Even with activities in 100% completed the EV remains at 0 at issue graphic EVM.

Tests realized by moving activities History and requirement for team project, and the Issue EVM was lost, not returning values correctly.

Sorry, but my english is not very good. I'm from brazil.

You can't search inside a project

When you're at the home of Redmine and click on "search", you can search among EVM, but if you're inside a project (let's say the issue list) and click on "Search", you don't have the "EVM" choice.
Tested on Redmine 3.2.1.stable

the logic of ev-calculation is wrong

the ev calulation of in-progressing issue is wrong
in "def calculate_earned_value(issues)"
end_date = [issue.due_date, @basis_date].max
should be
end_date = [issue.due_date, @basis_date].min

Basis date can be selected

計測する基準日を選択可能にする。
あまり必要ではない機能なので、時間があったら対応する

"No data to display"

EVM doesn't display data although the project has Open tasks, closed tasks, with estimated hours, and actual hours reported.

Please advise!

Internal Error 500

Environment:
Redmine version 3.2.0.stable
Ruby version 2.1.7-p400 (2015-08-18) [x86_64-linux-gnu]
Rails version 4.2.5
Environment production
Database adapter PostgreSQL
SCM:
Subversion 1.8.8
Mercurial 2.8.2
Cvs 1.12.13
Bazaar 2.7.0
Git 2.6.4
Filesystem
Redmine plugins:
accept 0.0.1
clipboard_image_paste 1.10
my_projects 1.4
progressive_projects_list 2.0.1
redmine__select2 1.0.5
redmine_backlogs v1.0.6
redmine_checklists 3.1.3
redmine_emojibutton 0.4.1
redmine_gamification_plugin 0.0.4
redmine_graphs 0.1.0
redmine_issue_evm 3.5.5
redmine_issue_number_favicon 0.0.1
redmine_jstoolbar_ext 0.2.1
redmine_jstoolbar_ext_coderay 0.2.0
redmine_lightbox2 0.2.4
redmine_login_audit 0.2.2
redmine_monitoring_controlling 0.1.1
redmine_move_comments 0.0.2
redmine_people 1.1.1
redmine_pushover 1.0.1
redmine_revision_branches 0.3.0
redmine_spent_time 3.1.2
redmine_sticky_messages 1.0.1
redmine_timesheet_plugin 0.7.0
redmine_workflow_enhancements 0.5.0
redmine_zenedit 0.0.2
redrisk 1.0.1
release_logs 1.0.0
sidebar_hide 0.0.7
simple_author_change 0.1.1
timelog_timer 2.0.0

refactoring CSS

グラフ関連のCSS指定が冗長的になっているため、整理する

doesn't work upon adding actual time

The basic scenario doesn't work with latest redmine 3.2.0

Environement:

  • Windows 7
  • redmine 3.2.0
  • ruby: ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]
  • Rails 4.2.5
  • Database: sqlite3

Scenario:

  1. add a new project
  2. add a feature with estimated time = 100
  3. click on EVM, it works great
  4. add actual time = 10
  5. click on EVM tab, the following error appears:

Internal error
An error occurred on the page you were trying to access.
If you continue to experience problems please contact your Redmine administrator for assistance.
If you are the Redmine administrator, check your log files for details about the error.

redmine log:
Processing by IssuesController#show as HTML
Parameters: {"id"=>"5"}
Current user: admin (id=1)
Rendered issues/_action_menu.html.erb (3.0ms)
Rendered issue_relations/_form.html.erb (2.0ms)
Rendered issues/_relations.html.erb (2.0ms)
Rendered issues/_action_menu.html.erb (2.0ms)
Rendered issues/_form_custom_fields.html.erb (0.0ms)
Rendered issues/_attributes.html.erb (10.0ms)
Rendered issues/_form.html.erb (17.0ms)
Rendered attachments/_form.html.erb (2.0ms)
Rendered issues/_edit.html.erb (27.0ms)
Rendered issues/_sidebar.html.erb (2.0ms)
Rendered watchers/_watchers.html.erb (3.0ms)
Rendered issues/show.html.erb within layouts/base (60.0ms)
Completed 200 OK in 119ms (Views: 71.5ms | ActiveRecord: 18.0ms)
Started GET "/projects/evm/evms" for ::1 at 2016-02-03 12:01:53 +0200
Processing by EvmsController#index as HTML
Parameters: {"project_id"=>"evm"}
Current user: admin (id=1)
Completed 500 Internal Server Error in 36ms (ActiveRecord: 18.0ms)

ArgumentError (comparison of String with Date failed):
lib/redmine/sudo_mode.rb:63:in `sudo_mode'

印刷時の出力部分を選定する

印刷時に出力されるのは以下の部分に限定
プロジェクト名(グラフのタイトルとして出力済み)
グラフ(メインのみ)
未完了チケット

Baseline settings - question

Hi,
We're setting up the whole company project reporting around your plugin - this just need some proper procedures and policing in place ;)

Just wanted to know what does the baseline setting do? I presume a new baseline saves the state of all issues at a given time in PV fieldsfor that particular baseline. Thanks for explaining.

ロールを設定可能にする

現在管理者メニューの権限は、View evms、 Manage evmsが設定可能であるが、ロジック内には制御するコードが入っていないので、実装する事。
Viewevmsはタブ表示の制御。
Manage evmsはBaselineの設定用のコンテキストメニューの制御。

パフォーマンスグラフの追加

パフォーマンス指標(SPI,CPI,CR)の表示を可能にする。
日々のEV,ACが算出できているわけではないので、補完する方法を考えて対応。
場合によっては1週間単位で実測する。

チャートタイトルの整理

チャートをエクスポートした際に、他のチャートと混同しないようなタイトルを付ける。
メインチャート: プロジェクト-ベースライン
パフォーマンスチャート: Performance-プロジェクト
バージョン: プロジェクト-バージョン

ACの計算方法変更

VersionのACの計算方法が間違っている。
VersionのPVの計算対象となったチケットの作業時間だけを抽出するように変更する

標準設定画面を追加する

プラグイン標準の設定を可能にする。

  • 一日の労働時間:1日何時間で計算するか?
  • SPI,CPI,CRの閾値設定(色表示の閾値)

Does it work with Redmine 2.4.2.stable?

I installed it on Redmine 2.4.2, it launches those errors:

Started GET "/myproject/projects/myproject/evms" for 193.205.162.64 at 2015-12-14 09:15:29 +0000

ActionController::RoutingError (undefined method `before_action' for EvmsController:Class):
  plugins/redmine_issue_evm/app/controllers/evms_controller.rb:7:in `<class:EvmsController>'
  plugins/redmine_issue_evm/app/controllers/evms_controller.rb:3:in `<top (required)>'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:251:in `require'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:251:in `block in require'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:236:in `load_dependency'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:251:in `require'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:359:in `require_or_load'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:502:in `load_missing_constant'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:192:in `block in const_missing'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:190:in `each'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:190:in `const_missing'
  /usr/lib/ruby/vendor_ruby/active_support/inflector/methods.rb:230:in `block in constantize'
  /usr/lib/ruby/vendor_ruby/active_support/inflector/methods.rb:229:in `each'
  /usr/lib/ruby/vendor_ruby/active_support/inflector/methods.rb:229:in `constantize'
  /usr/lib/ruby/vendor_ruby/active_support/dependencies.rb:554:in `get'
  /usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:69:in `controller_reference'
  /usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:54:in `controller'
  /usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:32:in `call'
  /usr/lib/ruby/vendor_ruby/journey/router.rb:68:in `block in call'
  /usr/lib/ruby/vendor_ruby/journey/router.rb:56:in `each'
  /usr/lib/ruby/vendor_ruby/journey/router.rb:56:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:608:in `call'
  /usr/lib/ruby/vendor_ruby/rack/openid.rb:98:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  /usr/lib/ruby/vendor_ruby/rack/etag.rb:23:in `call'
  /usr/lib/ruby/vendor_ruby/rack/conditionalget.rb:25:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/head.rb:14:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/params_parser.rb:21:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/flash.rb:242:in `call'
  /usr/lib/ruby/vendor_ruby/rack/session/abstract/id.rb:210:in `context'
  /usr/lib/ruby/vendor_ruby/rack/session/abstract/id.rb:205:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/cookies.rb:341:in `call'
  /usr/lib/ruby/vendor_ruby/active_record/query_cache.rb:64:in `call'
  /usr/lib/ruby/vendor_ruby/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/callbacks.rb:28:in `block in call'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `_run__3249842283438076298__call__1292781571854966464__callbacks'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `__run_callback'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:385:in `_run_call_callbacks'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:81:in `run_callbacks'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/callbacks.rb:27:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/remote_ip.rb:31:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  /usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:32:in `call_app'
  /usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `block in call'
  /usr/lib/ruby/vendor_ruby/active_support/tagged_logging.rb:22:in `tagged'
  /usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/request_id.rb:22:in `call'
  /usr/lib/ruby/vendor_ruby/rack/methodoverride.rb:21:in `call'
  /usr/lib/ruby/vendor_ruby/rack/runtime.rb:17:in `call'
  /usr/lib/ruby/vendor_ruby/active_support/cache/strategy/local_cache.rb:72:in `call'
  /usr/lib/ruby/vendor_ruby/rack/lock.rb:15:in `call'
  /usr/lib/ruby/vendor_ruby/action_dispatch/middleware/static.rb:63:in `call'
  /usr/lib/ruby/vendor_ruby/rack/cache/context.rb:136:in `forward'
  /usr/lib/ruby/vendor_ruby/rack/cache/context.rb:245:in `fetch'
  /usr/lib/ruby/vendor_ruby/rack/cache/context.rb:185:in `lookup'
  /usr/lib/ruby/vendor_ruby/rack/cache/context.rb:66:in `call!'
  /usr/lib/ruby/vendor_ruby/rack/cache/context.rb:51:in `call'
  /usr/lib/ruby/vendor_ruby/rails/engine.rb:484:in `call'
  /usr/lib/ruby/vendor_ruby/rails/application.rb:231:in `call'
  /usr/lib/ruby/vendor_ruby/rails/railtie/configurable.rb:30:in `method_missing'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:77:in `process_request'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:142:in `accept_and_process_next_request'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
  /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:448:in `block (3 levels) in start_threads'

Completed 500 Internal Server Error in 12.7ms

ActionView::Template::Error (undefined method `id' for nil:NilClass):
    12: <% end %>
    13: <!-- Basline setting -->
    14: <div class="contextual">
    15:   <%= link_to l(:label_baseline_set), {controller:"evmbaselines", action:"index", id: @project.id} ,:class => 'icon icon-edit'%>
    16: </div>
    17: <!--Header-->
    18: <h2><%= l(:title_evm_tab)%></h2>
  plugins/redmine_issue_evm/app/views/evms/index.html.erb:15:in `_plugins_redmine_issue_evm_app_views_evms_index_html_erb___214220133827280966_35794160'
  /usr/lib/ruby/vendor_ruby/action_view/template.rb:145:in `block in render'
  /usr/lib/ruby/vendor_ruby/active_support/notifications.rb:125:in `instrument'
  /usr/lib/ruby/vendor_ruby/action_view/template.rb:143:in `render'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/template_renderer.rb:47:in `block (2 levels) in render_template'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
  /usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `block in instrument'
  /usr/lib/ruby/vendor_ruby/active_support/notifications/instrumenter.rb:20:in `instrument'
  /usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `instrument'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/abstract_renderer.rb:38:in `instrument'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/template_renderer.rb:46:in `block in render_template'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/template_renderer.rb:54:in `render_with_layout'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/template_renderer.rb:45:in `render_template'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/template_renderer.rb:18:in `render'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/renderer.rb:36:in `render_template'
  /usr/lib/ruby/vendor_ruby/action_view/renderer/renderer.rb:17:in `render'
  /usr/lib/ruby/vendor_ruby/abstract_controller/rendering.rb:110:in `_render_template'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/streaming.rb:225:in `_render_template'
  /usr/lib/ruby/vendor_ruby/abstract_controller/rendering.rb:103:in `render_to_body'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/renderers.rb:28:in `render_to_body'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/compatibility.rb:50:in `render_to_body'
 /usr/lib/ruby/vendor_ruby/abstract_controller/rendering.rb:88:in `render'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/rendering.rb:16:in `render'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render'
  /usr/lib/ruby/vendor_ruby/active_support/core_ext/benchmark.rb:5:in `block in ms'
  /usr/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
  /usr/lib/ruby/vendor_ruby/active_support/core_ext/benchmark.rb:5:in `ms'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:40:in `block in render'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:83:in `cleanup_view_runtime'
  /usr/lib/ruby/vendor_ruby/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:39:in `render'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/implicit_render.rb:10:in `default_render'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/implicit_render.rb:4:in `send_action'
  /usr/lib/ruby/vendor_ruby/abstract_controller/base.rb:167:in `process_action'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/rendering.rb:10:in `process_action'
  /usr/lib/ruby/vendor_ruby/abstract_controller/callbacks.rb:18:in `block in process_action'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:469:in `_run__3694420442007710827__process_action__2481296603734003186__callbacks'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `__run_callback'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
  /usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:81:in `run_callbacks'
  /usr/lib/ruby/vendor_ruby/abstract_controller/callbacks.rb:17:in `process_action'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/rescue.rb:29:in `process_action'
  /usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:30:in `block in process_action'
  /usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `block in instrument'
  /usr/lib/ruby/vendor_ruby/active_support/notifications/instrumenter.rb:20:in `instrument'
  /usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `instrument'
  ...

READMEの翻訳

日本語用のREADMEと同等に英語化する
極力シンプルな翻訳にする事

What does baseline mean for this plugin?

Hi,
I've been reading about EVM and baseline, but I don't get how baseline works with this plugin. How does it affect the calculation? What does it mean here? How it works?

Unable to install on redmine 3.1

Hi,
We have problems activating the plugin on our Redmine 3.1. The tab is visible, but the plugin fails to run.
We have tested this on almost clean Redmine running only DMSF Document Management System Features http://www.redmine.org/plugins/dmsf plugin. The log details are:

Processing by EvmsController#index as HTML
Parameters: {"project_id"=>"do-testow-redmine"}
Current user: admin (id=1)
PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ... NULL AND fixed_version_id IS NOT NULL) ORDER BY effective_...
^
: SELECT DISTINCT "issues"."project_id", "issues"."fixed_version_id" FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "versions" ON "versions"."id" = "issues"."fixed_version_id" WHERE ((projects.lft >= 3 AND projects.rgt <= 4)) AND (start_date IS NOT NULL AND due_date IS NOT NULL AND fixed_version_id IS NOT NULL) ORDER BY effective_date ASC
Completed 500 Internal Server Error in 35ms (ActiveRecord: 8.6ms)

ActiveRecord::StatementInvalid (PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ... NULL AND fixed_version_id IS NOT NULL) ORDER BY effective_...
^
: SELECT DISTINCT "issues"."project_id", "issues"."fixed_version_id" FROM "issues" INNER JOIN "projects" ON "projects"."id" = "issues"."project_id" INNER JOIN "versions" ON "versions"."id" = "issues"."fixed_version_id" WHERE ((projects.lft >= 3 AND projects.rgt <= 4)) AND (start_date IS NOT NULL AND due_date IS NOT NULL AND fixed_version_id IS NOT NULL) ORDER BY effective_date ASC):

Any ideas on what may cause this?

About option for independent subtask priority/start date/due date/done ratio

3.1からは、サブタスクの有無にかかわらず、チケット毎に予定工数の入力ができる。
このため、最下層のチケットの工数だけ計算するロジックを修正する必要がある。
変更になった、工数の計算方法は以下参照
http://blog.redmine.jp/articles/3_1/total-time-on-issue-list/

そもそものIssueは以下の通り
Option for independent subtask priority/start date/due date/done ratio
http://www.redmine.org/issues/5490

500 error on Redmine 2.6-stable

Hi, I tried out the EVM Plugin (which looks amazing in your screenshots), but on my 2.6-stable (r13818) Redmine I get a 500 error with the following stacktrace:

Started GET "/projects/csc-wsb1/evms" for 188.195.163.217 at 2015-01-03 00:26:12 +0100
Processing by EvmsController#index as HTML
Parameters: {"project_id"=>"csc-wsb1"}
Current user: fschupp (id=3)
DEPRECATION WARNING: The InstanceMethods module inside ActiveSupport::Concern will be no longer included automatically. Please define instance methods directly in Kaminari::ActiveRecordModelExtension instead. (called from <top (required)> at /opt/redmine/2.6-stable/plugins/redmine_issue_evm/app/models/evmbaseline.rb:1)
DEPRECATION WARNING: The InstanceMethods module inside ActiveSupport::Concern will be no longer included automatically. Please define instance methods directly in Kaminari::ConfigurationMethods instead. (called from <top (required)> at /opt/redmine/2.6-stable/plugins/redmine_issue_evm/app/models/evmbaseline.rb:1)
Completed 500 Internal Server Error in 98.8ms

NoMethodError (undefined method /' for nil:NilClass): plugins/redmine_issue_evm/lib/evm_logic.rb:283:inissue_hours_per_day'
plugins/redmine_issue_evm/lib/evm_logic.rb:218:in block in calculate_planed_value' activerecord (3.2.21) lib/active_record/relation/delegation.rb:6:ineach'
activerecord (3.2.21) lib/active_record/relation/delegation.rb:6:in each' plugins/redmine_issue_evm/lib/evm_logic.rb:216:incalculate_planed_value'
plugins/redmine_issue_evm/lib/evm_logic.rb:12:in initialize' plugins/redmine_issue_evm/app/controllers/evms_controller.rb:27:innew'
plugins/redmine_issue_evm/app/controllers/evms_controller.rb:27:in index' actionpack (3.2.21) lib/action_controller/metal/implicit_render.rb:4:insend_action'
actionpack (3.2.21) lib/abstract_controller/base.rb:167:in process_action' actionpack (3.2.21) lib/action_controller/metal/rendering.rb:10:inprocess_action'
actionpack (3.2.21) lib/abstract_controller/callbacks.rb:18:in block in process_action' activesupport (3.2.21) lib/active_support/callbacks.rb:524:in_run__3518391136052565087__process_action__2568906353503994859__callbacks'
activesupport (3.2.21) lib/active_support/callbacks.rb:405:in __run_callback' activesupport (3.2.21) lib/active_support/callbacks.rb:385:in_run_process_action_callbacks'
activesupport (3.2.21) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (3.2.21) lib/abstract_controller/callbacks.rb:17:inprocess_action'
actionpack (3.2.21) lib/action_controller/metal/rescue.rb:29:in process_action' actionpack (3.2.21) lib/action_controller/metal/instrumentation.rb:30:inblock in process_action'
activesupport (3.2.21) lib/active_support/notifications.rb:123:in block in instrument' activesupport (3.2.21) lib/active_support/notifications/instrumenter.rb:20:ininstrument'
activesupport (3.2.21) lib/active_support/notifications.rb:123:in instrument' actionpack (3.2.21) lib/action_controller/metal/instrumentation.rb:29:inprocess_action'
actionpack (3.2.21) lib/action_controller/metal/params_wrapper.rb:207:in process_action' activerecord (3.2.21) lib/active_record/railties/controller_runtime.rb:18:inprocess_action'
actionpack (3.2.21) lib/abstract_controller/base.rb:121:in process' actionpack (3.2.21) lib/abstract_controller/rendering.rb:45:inprocess'
actionpack (3.2.21) lib/action_controller/metal.rb:203:in dispatch' actionpack (3.2.21) lib/action_controller/metal/rack_delegation.rb:14:indispatch'
actionpack (3.2.21) lib/action_controller/metal.rb:246:in block in action' actionpack (3.2.21) lib/action_dispatch/routing/route_set.rb:73:incall'
actionpack (3.2.21) lib/action_dispatch/routing/route_set.rb:73:in dispatch' actionpack (3.2.21) lib/action_dispatch/routing/route_set.rb:36:incall'
journey (1.0.4) lib/journey/router.rb:68:in block in call' journey (1.0.4) lib/journey/router.rb:56:ineach'
journey (1.0.4) lib/journey/router.rb:56:in call' actionpack (3.2.21) lib/action_dispatch/routing/route_set.rb:608:incall'
rack-openid (1.4.2) lib/rack/openid.rb:98:in call' request_store (1.0.5) lib/request_store/middleware.rb:9:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/best_standards_support.rb:17:in call' rack (1.4.5) lib/rack/etag.rb:23:incall'
rack (1.4.5) lib/rack/conditionalget.rb:25:in call' actionpack (3.2.21) lib/action_dispatch/middleware/head.rb:14:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/params_parser.rb:21:in call' plugins/redmine_dmsf/lib/redmine_dmsf/webdav/no_parse.rb:33:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/flash.rb:242:in call' rack (1.4.5) lib/rack/session/abstract/id.rb:210:incontext'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in call' actionpack (3.2.21) lib/action_dispatch/middleware/cookies.rb:341:incall'
activerecord (3.2.21) lib/active_record/query_cache.rb:64:in call' activerecord (3.2.21) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/callbacks.rb:28:in block in call' activesupport (3.2.21) lib/active_support/callbacks.rb:405:in_run__1890086249368659174__call__2323732647947184975__callbacks'
activesupport (3.2.21) lib/active_support/callbacks.rb:405:in __run_callback' activesupport (3.2.21) lib/active_support/callbacks.rb:385:in_run_call_callbacks'
activesupport (3.2.21) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (3.2.21) lib/action_dispatch/middleware/callbacks.rb:27:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/remote_ip.rb:31:in call' actionpack (3.2.21) lib/action_dispatch/middleware/debug_exceptions.rb:16:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/show_exceptions.rb:56:in call' railties (3.2.21) lib/rails/rack/logger.rb:32:incall_app'
railties (3.2.21) lib/rails/rack/logger.rb:16:in block in call' activesupport (3.2.21) lib/active_support/tagged_logging.rb:22:intagged'
railties (3.2.21) lib/rails/rack/logger.rb:16:in call' actionpack (3.2.21) lib/action_dispatch/middleware/request_id.rb:22:incall'
rack (1.4.5) lib/rack/methodoverride.rb:21:in call' rack (1.4.5) lib/rack/runtime.rb:17:incall'
activesupport (3.2.21) lib/active_support/cache/strategy/local_cache.rb:72:in call' rack (1.4.5) lib/rack/lock.rb:15:incall'
actionpack (3.2.21) lib/action_dispatch/middleware/static.rb:83:in call' rack-cache (1.2) lib/rack/cache/context.rb:136:inforward'
rack-cache (1.2) lib/rack/cache/context.rb:245:in fetch' rack-cache (1.2) lib/rack/cache/context.rb:185:inlookup'
rack-cache (1.2) lib/rack/cache/context.rb:66:in call!' rack-cache (1.2) lib/rack/cache/context.rb:51:incall'
railties (3.2.21) lib/rails/engine.rb:484:in call' railties (3.2.21) lib/rails/application.rb:231:incall'
railties (3.2.21) lib/rails/railtie/configurable.rb:30:in method_missing' passenger (4.0.46) lib/phusion_passenger/rack/thread_handler_extension.rb:74:inprocess_request'
passenger (4.0.46) lib/phusion_passenger/request_handler/thread_handler.rb:141:in accept_and_process_next_request' passenger (4.0.46) lib/phusion_passenger/request_handler/thread_handler.rb:109:inmain_loop'
passenger (4.0.46) lib/phusion_passenger/request_handler.rb:448:in `block (3 levels) in start_threads'

I am no Ruby expert, but this seems to be pretty generic, do you have any idea? My environment:

Environment:
Redmine version 2.6.0.stable.13818
Ruby version 2.0.0-p481 (2014-05-08) [x86_64-linux]
Rails version 3.2.21
Environment production
Database adapter Mysql2
SCM:
Subversion 1.8.8
Git 1.9.1
Filesystem

Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.