Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,299 changes: 642 additions & 657 deletions ProjectManagement/ProjectManagement.php

Large diffs are not rendered by default.

402 changes: 386 additions & 16 deletions ProjectManagement/ProjectManagementAPI.php

Large diffs are not rendered by default.

58 changes: 58 additions & 0 deletions ProjectManagement/changes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
Issue view:
- Added link at the top of the issue view (EVENT_MENU_ISSUE).

Created view 2:
- Register time for work type and minutes type.
- Added 'info' field in table 'work'
- Substract 'todo' when 'done' is informed
- When minutes_type=='est' => target_date=book_date
- When minutes_type=='done' => done=done+minutes / todo=todo-minutes
- When minutes_type=='completed' (new just for select) => completed_date=book_date / done=done+minutes / todo=0
- Remove own time register (if admin_own_threshold)
- Remove others time register (if admin_threshold)
- Show/Hide all work types on target table (show_all_work_types_on_bug_targets)
- When a 'todo' is defined without 'est', 'todo' is shown in red and with a tooltip containing the error

Config options:
- [bug_view_mode][new] View selection: 1 (original) or 2 (purposed)
- [show_all_work_types_on_bug_targets][new] Show/Hide all work types on target table. Only works on view 2
- [admin_own_threshold][new] Enabled to remove custom registers. Only works on view 2
- [edit_targets_threshold][old] Enable to modify targets over the targets table. It was defined on function config, but now is updatable from config page
- [billable_mandatory_minimun_status] Select the minimun status for billable required shows the error
- [billable_behavior_over_severity] Define behavior of billing requirement according to severity


General:
- More specific errors
- More detailed history actions

Customers:
- Added 'association_mode' field in table 'customer'
- Created 'project_customer' table
- Customer management page updated with 'association_mode' field
- When a new project is created, the customers with association_mode='auto' are attached automatically
- From project, you can attach/detach customers, except those marked with association_mode='all'
- When a issue is resolved or closed, 'all customers' is transformed in the current customers list. It avoids future billing changes when adding a new customer to the project.
- 'paying_customers' is required only if 'is_billable' is set to true, and the issue has adquired the minimum status (currently, the minimum status is defined hardcoded in 'pm_bug_is_billable_affecting_required_paying_customers')

Reports:
- Added 'dashboard' report
- Error control added for 'Resource progress' report
- Added validation in 'print_progressbar_span' and 'print_progress_span' to avoid error when no resources are defined (only exploited when $g_show_detailed_errors=ON)
- Show hourly rate and cost only is user has 'view_billing_threshold' permissions

Report 'Time registration overview':
- Layout adjustment to avoid paddings and margins
- Collapsible panels

Report 'Billing':
- Shows only issues marked as billable

Account configuration:
- Moved the unavailability management to a self account preferences menu
- Added list of future and past unavailability, allowing to remove just for future


*** TODO's ***
- Upgrade plugin task to upgrade database in a existing installation
- update_bug_form has 2 view options... decide which is better and delete the other
78 changes: 69 additions & 9 deletions ProjectManagement/lang/strings_english.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,31 @@
$s_plugin_ProjectManagement_title = 'Project Management';
$s_plugin_ProjectManagement_configuration = 'Configuration';
$s_plugin_ProjectManagement_settings_updated = 'Settings updated';

$s_plugin_ProjectManagement_timerecord_menu = 'Jump to Time registration';

$s_plugin_ProjectManagement_work_type = 'Type of work';
$s_plugin_ProjectManagement_est = 'Est';
$s_plugin_ProjectManagement_est = 'Estimated';
$s_plugin_ProjectManagement_done = 'Done';
$s_plugin_ProjectManagement_todo = 'Todo';
$s_plugin_ProjectManagement_diff = 'Difference';
$s_plugin_ProjectManagement_total = 'total';


$s_plugin_ProjectManagement_association_mode_title = 'Association mode';
$s_plugin_ProjectManagement_association_mode_info = 'Defines the default relation of the customer with projects.';
$s_plugin_ProjectManagement_association_mode_all = 'Always associated to all projects';
$s_plugin_ProjectManagement_association_mode_auto = 'Associated by default to all projects';
$s_plugin_ProjectManagement_association_mode_manual = 'Manual association';

$s_plugin_ProjectManagement_clear = 'Clear';
$s_plugin_ProjectManagement_book_date = 'Book date';
$s_plugin_ProjectManagement_reports = 'Project management';
$s_plugin_ProjectManagement_report_by_project_users = "Projects brief - Register per User";
$s_plugin_ProjectManagement_report_by_project_work_types = "Projects brief - Register per Type of work";
$s_plugin_ProjectManagement_report_by_project_detail = "Projects details";
$s_plugin_ProjectManagement_time_division = 'Time division';
$s_plugin_ProjectManagement_per = 'Per';
$s_plugin_ProjectManagement_time_registration = 'Time registration';
$s_plugin_ProjectManagement_time_dashboard = 'Dashboard';
$s_plugin_ProjectManagement_time_registration_worksheet = 'Time registration worksheet';
$s_plugin_ProjectManagement_time_registration_overview = 'Time registration overview';
$s_plugin_ProjectManagement_project_progress = 'Project progress';
Expand All @@ -34,21 +45,21 @@
$s_plugin_ProjectManagement_last_months = 'Last months';
$s_plugin_ProjectManagement_month = 'Month';
$s_plugin_ProjectManagement_unassigned = 'Unassigned';

$s_plugin_ProjectManagement_hourly_rate = 'Hourly rate';
$s_plugin_ProjectManagement_hours_per_week = 'Hours per week';
$s_plugin_ProjectManagement_color = 'Color';
$s_plugin_ProjectManagement_deployability = 'Deployability';

$s_plugin_ProjectManagement_work_types = 'Types of work';
$s_plugin_ProjectManagement_work_types_info = 'An enumeration containing the differend kinds of work someone can perform on a ticket. Use only one to ignore this feature.';

$s_plugin_ProjectManagement_edit_estimates_threshold = 'Edit estimations threshold';
$s_plugin_ProjectManagement_edit_estimates_threshold_info = 'Once a starting estimation was supplied for a certain ticket and type of work, it can no longer by modified unless with this permission.';

$s_plugin_ProjectManagement_include_bookdate_threshold = 'Include bookdate threshold';
$s_plugin_ProjectManagement_include_bookdate_threshold_info = 'Allows users with this security profile or higher to include a different book date when registering hours worked.';

$s_plugin_ProjectManagement_work_type_thresholds = 'Thresholds for types of work';
$s_plugin_ProjectManagement_work_type_thresholds_info = 'Users with an access level lower than the one specified can\'t see or modify the specified type of work.<br><b>Syntax</b>: array ( val => ACCLEVEL[, val2 => ACCLEVEL2,...] )<br><b>Example</b>: array ( 20 => REPORTER, 50 => DEVELOPER )';

Expand All @@ -70,6 +81,12 @@
$s_plugin_ProjectManagement_view_target_overview_threshold = 'View target overview threshold';
$s_plugin_ProjectManagement_view_all_targets_threshold = 'Threshold for viewing other users\' targets';
$s_plugin_ProjectManagement_admin_threshold = 'Plugin administrator threshold';
$s_plugin_ProjectManagement_admin_own_threshold = 'Manage own registers threshold';
$s_plugin_ProjectManagement_edit_targets_threshold = 'Manage targets threshold';
$s_plugin_ProjectManagement_show_all_work_types_on_bug_targets = 'Show all work types available on ticket';
$s_plugin_ProjectManagement_show_all_work_types_on_bug_targets_info = 'Show all work types available on targets table in the ticket view';
$s_plugin_ProjectManagement_bug_view_mode = 'View mode on ticket';
$s_plugin_ProjectManagement_bug_view_mode_info = 'Only two options available: 1 or 2';

$s_plugin_ProjectManagement_decimal_separator = 'Decimal separator';
$s_plugin_ProjectManagement_thousand_separator = 'Thousand separator';
Expand All @@ -85,19 +102,29 @@
$s_plugin_ProjectManagement_enable_customer_approval_threshold = 'Enable customer approval threshold';
$s_plugin_ProjectManagement_enable_customer_approval_threshold_info = 'Allows customers to indicate whether or not they approve development on specific bugs.';
$s_plugin_ProjectManagement_view_billing_threshold = 'View billing threshold';
$s_plugin_ProjectManagement_billable_mandatory_minimun_status = 'Estado m�nimo para requerir que se indiquen los clientes a facturar';
$s_plugin_ProjectManagement_billable_behavior_over_severity = 'Comportamiento del requisito de facturable seg�n la severidad del ticket';
$s_plugin_ProjectManagement_billable_behavior_over_severity_optional_unselected = 'Optional, unselected by default';
$s_plugin_ProjectManagement_billable_behavior_over_severity_optional_selected = 'Optional, selected by default';
$s_plugin_ProjectManagement_billable_behavior_over_severity_always_required = 'Always required';
$s_plugin_ProjectManagement_billable_behavior_over_severity_never_required = 'Never required';
$s_plugin_ProjectManagement_billable_behavior_over_severity_never_billable = 'Never billable';

$s_plugin_ProjectManagement_customer_section = 'Customer section';
$s_plugin_ProjectManagement_is_billable = 'Issue is billable';
$s_plugin_ProjectManagement_paying_customers = 'Paying customers';
$s_plugin_ProjectManagement_integration_custom_dev = 'Integration custom development';
$s_plugin_ProjectManagement_integration_custom_dev_info = 'Integration of a core functionality with existing custom features.';
$s_plugin_ProjectManagement_approving_customers = 'Approving customers';
$s_plugin_ProjectManagement_general_configuration = 'Plugin configuration';
$s_plugin_ProjectManagement_customer_management = 'Customer configuration';
$s_plugin_ProjectManagement_add_new_customer = 'Add new customer';
$s_plugin_ProjectManagement_add_customer = 'Add customer';
$s_plugin_ProjectManagement_edit_customer = 'Edit customer';
$s_plugin_ProjectManagement_customer_name = 'Customer name';
$s_plugin_ProjectManagement_customer_share = 'Share';
$s_plugin_ProjectManagement_customer_can_approve = 'Can approve';
$s_plugin_ProjectManagement_customer_association_mode = 'Association mode';
$s_plugin_ProjectManagement_billing = 'Billing';
$s_plugin_ProjectManagement_fields_to_include_in_overviews = 'Extra columns to include in overviews';
$s_plugin_ProjectManagement_fields_to_include_in_overviews_info = 'Both custom fields and plugin-columns are possible. Use the column names as suggested in \'Manage configuration\' > \'Manage columns\'';
Expand All @@ -114,9 +141,13 @@
$s_plugin_ProjectManagement_all_versions_selected = 'In order to view this page, a specific project must be selected instead of \'All projects\'.';
$s_plugin_ProjectManagement_project_selection_disabled = 'In order to view this page, the configuration \'show_project_menu_bar\' must be turned \'ON\'. Contact an administrator.';

$s_plugin_ProjectManagement_unavailability_account_title = 'Unavailability';
$s_plugin_ProjectManagement_unavailability_period_title = 'Unavailability periods';
$s_plugin_ProjectManagement_unavailability_past_period_title = 'Past unavailability periods';
$s_plugin_ProjectManagement_unavailability = 'Unavailability';
$s_plugin_ProjectManagement_unavailability_types = 'Unavailability types';
$s_plugin_ProjectManagement_unavailability_add_new = 'Add new period of unavailability';
$s_plugin_ProjectManagement_unavailability_add_new_title = 'Add new period of unavailability';
$s_plugin_ProjectManagement_unavailability_add_new = 'Add';
$s_plugin_ProjectManagement_unavailability_overview = 'Overview of periods of unavailability';
$s_plugin_ProjectManagement_unavailability_remove = 'Remove period of unavailability';
$s_plugin_ProjectManagement_unavailability_period = 'Period';
Expand All @@ -126,6 +157,15 @@
$s_plugin_ProjectManagement_unavailability_ignore_work = 'Ignore work during these periods';
$s_plugin_ProjectManagement_unavailability_ignore_work_info = 'Hours registered during a period of unavailability of this type will be ignored on the \'Resource progress\' page.<br><b>Example</b>: array ( 60, 80 )';

$s_plugin_ProjectManagement_user = 'User';
$s_plugin_ProjectManagement_information = 'Information';
$s_plugin_ProjectManagement_entry_date = 'Entry Date (automatic)';
$s_plugin_ProjectManagement_time_error = 'Please enter a valid number in field Hours!';
$s_plugin_ProjectManagement_date_error = 'Please enter a valid date';
$s_plugin_ProjectManagement_minutes_type = 'Time type';
$s_plugin_ProjectManagement_add_time_registration = 'Add';
$s_plugin_ProjectManagement_delete_time_registration = 'Delete';

$s_plugin_ProjectManagement_unplanned = 'Unplanned';
$s_plugin_ProjectManagement_planned = 'Planned';
$s_plugin_ProjectManagement_unavailable = 'Unavailable';
Expand All @@ -151,4 +191,24 @@
$s_plugin_ProjectManagement_friday = 'friday';
$s_plugin_ProjectManagement_saturday = 'saturday';
$s_plugin_ProjectManagement_sunday = 'sunday';
?>

$s_plugin_ProjectManagement_January = 'January';
$s_plugin_ProjectManagement_February = 'February';
$s_plugin_ProjectManagement_March = 'March';
$s_plugin_ProjectManagement_April = 'April';
$s_plugin_ProjectManagement_May = 'May';
$s_plugin_ProjectManagement_June = 'June';
$s_plugin_ProjectManagement_July = 'July';
$s_plugin_ProjectManagement_August = 'August';
$s_plugin_ProjectManagement_September = 'September';
$s_plugin_ProjectManagement_October = 'October';
$s_plugin_ProjectManagement_November = 'November';
$s_plugin_ProjectManagement_December = 'December';

$s_plugin_ProjectManagement_history_deleted = 'Time registration deleted';
$s_plugin_ProjectManagement_history_added = 'Time registration added for \'%1$s\': %2$s';
$s_plugin_ProjectManagement_history_completed_date = 'Completed date updated for \'%1$s\'';
$s_plugin_ProjectManagement_history_owner_changed = 'Owner changed for \'%1$s\'';
$s_plugin_ProjectManagement_history_new_target = 'New target for \'%1$s\'';
$s_plugin_ProjectManagement_history_change_target = 'Target updated for \'%1$s\'';
$s_plugin_ProjectManagement_todo_without_est_warning = 'Pendant work is not used while estimated time is not defined';
2 changes: 0 additions & 2 deletions ProjectManagement/lang/strings_french.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@
$s_plugin_ProjectManagement_customer_share = 'Partage';
$s_plugin_ProjectManagement_customer_can_approve = 'Peut valider';
$s_plugin_ProjectManagement_billing = 'Facturation';
$s_plugin_ProjectManagement_custom_fields_to_include_in_overviews = 'Champs personnalisés à inclure dans les résumés';

$s_plugin_ProjectManagement_targets = 'Objectifs';
$s_plugin_ProjectManagement_target_date = 'Date ciblée';
Expand Down Expand Up @@ -147,5 +146,4 @@
$s_plugin_ProjectManagement_friday = 'vendredi';
$s_plugin_ProjectManagement_saturday = 'samedi';
$s_plugin_ProjectManagement_sunday = 'dimanche';
$s_plugin_ProjectManagement_project = 'projet';
?>
Loading