From a6c5ec6f935a9bd17e99f5b3190b1af9eb350018 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Thu, 3 Sep 2015 03:59:39 +0000 Subject: Bug 1196508: Intern Request Metric Dashboard --- extensions/BMO/Extension.pm | 4 + extensions/BMO/lib/Reports/Internship.pm | 119 +++++++++++++++++++++ .../en/default/bug/create/comment-intern.txt.tmpl | 6 ++ .../en/default/bug/create/create-intern.html.tmpl | 6 +- .../en/default/hook/reports/menu-end.html.tmpl | 6 ++ .../default/pages/internship_dashboard.html.tmpl | 50 +++++++++ .../default/pages/recruiting_dashboard.html.tmpl | 2 +- 7 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 extensions/BMO/lib/Reports/Internship.pm create mode 100644 extensions/BMO/template/en/default/pages/internship_dashboard.html.tmpl (limited to 'extensions/BMO') diff --git a/extensions/BMO/Extension.pm b/extensions/BMO/Extension.pm index cc439eeed..f4e16d416 100644 --- a/extensions/BMO/Extension.pm +++ b/extensions/BMO/Extension.pm @@ -202,6 +202,10 @@ sub page_before_template { require Bugzilla::Extension::BMO::Reports::Recruiting; Bugzilla::Extension::BMO::Reports::Recruiting::report($vars); } + elsif ($page eq 'internship_dashboard.html') { + require Bugzilla::Extension::BMO::Reports::Internship; + Bugzilla::Extension::BMO::Reports::Internship::report($vars); + } elsif ($page eq 'email_queue.html') { print Bugzilla->cgi->redirect('view_job_queue.cgi'); } diff --git a/extensions/BMO/lib/Reports/Internship.pm b/extensions/BMO/lib/Reports/Internship.pm new file mode 100644 index 000000000..cad403d09 --- /dev/null +++ b/extensions/BMO/lib/Reports/Internship.pm @@ -0,0 +1,119 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::BMO::Reports::Internship; +use strict; +use warnings; + +use Bugzilla::Error; +use Bugzilla::Bug; +use Bugzilla::Product; +use Bugzilla::Component; + +sub report { + my ($vars) = @_; + my $user = Bugzilla->user; + + $user->in_group('hr') + || ThrowUserError('auth_failure', { group => 'hr', + action => 'run', + object => 'internship_dashboard' }); + + my $product = Bugzilla::Product->check({ name => 'Recruiting', cache => 1 }); + my $component = Bugzilla::Component->new({ product => $product, name => 'Intern', cache => 1 }); + + # find all open internship bugs + my $bugs = Bugzilla::Bug->match({ + product_id => $product->id, + component_id => $component->id, + resolution => '', + }); + + # filter bugs based on visibility and re-bless + $user->visible_bugs($bugs); + $bugs = [ + map { bless($_, 'InternshipBug') } + grep { $user->can_see_bug($_->id) } + @$bugs + ]; + + $vars->{bugs} = $bugs; +} + +1; + +package InternshipBug; +use strict; +use warnings; + +use base qw(Bugzilla::Bug); + +use Bugzilla::Comment; +use Bugzilla::Util qw(trim); + +sub _extract { + my ($self) = @_; + return if exists $self->{internship_data}; + $self->{internship_data} = {}; + + # we only need the first comment + my $comment = Bugzilla::Comment->match({ + bug_id => $self->id, + LIMIT => 1, + })->[0]->body; + + # extract just what we need + # changing the comment will break this + + if ($comment =~ /Hiring Manager:\s+(.+)\nTeam:\n/s) { + $self->{internship_data}->{hiring_manager} = trim($1); + } + if ($comment =~ /\nVP Authority:\s+(.+)\nProduct Line:\n/s) { + $self->{internship_data}->{scvp} = trim($1); + } + if ($comment =~ /\nProduct Line:\s+(.+)\nLevel 1/s) { + $self->{internship_data}->{product_line} = trim($1); + } + if ($comment =~ /\nBusiness Need:\s+(.+)\nPotential Project:\n/s) { + $self->{internship_data}->{business_need} = trim($1); + } + if ($comment =~ /\nName:\s+(.+)$/s) { + $self->{internship_data}->{intern_name} = trim($1); + } +} + +sub hiring_manager { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{hiring_manager}; +} + +sub scvp { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{scvp}; +} + +sub business_need { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{business_need}; +} + +sub product_line { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{product_line}; +} + +sub intern_name { + my ($self) = @_; + $self->_extract(); + return $self->{internship_data}->{intern_name}; +} + +1; diff --git a/extensions/BMO/template/en/default/bug/create/comment-intern.txt.tmpl b/extensions/BMO/template/en/default/bug/create/comment-intern.txt.tmpl index 33bcf6764..5f30b4168 100644 --- a/extensions/BMO/template/en/default/bug/create/comment-intern.txt.tmpl +++ b/extensions/BMO/template/en/default/bug/create/comment-intern.txt.tmpl @@ -21,6 +21,9 @@ Cost Center: VP Authority: [%+ cgi.param('vp_authority') %] +Product Line: +[%+ cgi.param('product_line') %] + Level 1/Level 2: [%+ cgi.param("level_1_or_2") %] @@ -32,6 +35,9 @@ Other Location: [%+ cgi.param("other_location") %] [% END %] +Onsite Mentorship: +[%+ cgi.param('onsite') %] + [% IF cgi.param("possible_mentor") %] Possible Mentor: [%+ cgi.param("possible_mentor") %] diff --git a/extensions/BMO/template/en/default/bug/create/create-intern.html.tmpl b/extensions/BMO/template/en/default/bug/create/create-intern.html.tmpl index b0fd8cf05..9c04abc7e 100644 --- a/extensions/BMO/template/en/default/bug/create/create-intern.html.tmpl +++ b/extensions/BMO/template/en/default/bug/create/create-intern.html.tmpl @@ -258,10 +258,8 @@ $(document).ready(function() { + placeholder="Please add link to Mana or copy and paste a JD. (if you are looking for multiple types interns please include a job description for each)" + >
diff --git a/extensions/BMO/template/en/default/hook/reports/menu-end.html.tmpl b/extensions/BMO/template/en/default/hook/reports/menu-end.html.tmpl index 991a685be..b561221a8 100644 --- a/extensions/BMO/template/en/default/hook/reports/menu-end.html.tmpl +++ b/extensions/BMO/template/en/default/hook/reports/menu-end.html.tmpl @@ -65,6 +65,12 @@ Recruiting Dashboard - Dashboard for open requested requisitions. +
  • + + Internship Dashboard + - Dashboard for open intern requisitions. +
  • + [% END %] diff --git a/extensions/BMO/template/en/default/pages/internship_dashboard.html.tmpl b/extensions/BMO/template/en/default/pages/internship_dashboard.html.tmpl new file mode 100644 index 000000000..d3571697d --- /dev/null +++ b/extensions/BMO/template/en/default/pages/internship_dashboard.html.tmpl @@ -0,0 +1,50 @@ +[%# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + # + # This Source Code Form is "Incompatible With Secondary Licenses", as + # defined by the Mozilla Public License, v. 2.0. + #%] + +[% PROCESS global/variables.none.tmpl %] +[% INCLUDE global/header.html.tmpl + title = "Internship Dashboard" + style_urls = [ "extensions/BMO/web/styles/reports.css" ] + style = "#report td { vertical-align: top; }" +%] + +

    Internship Dashboard

    + +[% IF bugs.size %] + + + + + + + + + + + + + [% FOREACH bug = bugs %] + + + + + + + + + + + [% END %] +
    [% terms.Bug %]SummaryStatusHiring ManagerSCVPProduct LineBusiness NeedName
    [% bug.id FILTER bug_link(bug) FILTER none %][% bug.short_desc FILTER html %][% bug.bug_status FILTER html %][% bug.hiring_manager FILTER html %][% bug.scvp FILTER html %][% bug.product_line FILTER html FILTER html %][% bug.business_need FILTER html FILTER html_line_break %][% bug.intern_name FILTER html FILTER html %]
    +[% ELSE %] +

    + No open intern requisitions. +

    +[% END %] + +[% INCLUDE global/footer.html.tmpl %] diff --git a/extensions/BMO/template/en/default/pages/recruiting_dashboard.html.tmpl b/extensions/BMO/template/en/default/pages/recruiting_dashboard.html.tmpl index 8eeae3b87..ef0704ae2 100644 --- a/extensions/BMO/template/en/default/pages/recruiting_dashboard.html.tmpl +++ b/extensions/BMO/template/en/default/pages/recruiting_dashboard.html.tmpl @@ -13,7 +13,7 @@ style = "#report td { vertical-align: top; }" %] -

    Recuriting Dashboard

    +

    Recruiting Dashboard

    [% IF bugs.size %] -- cgit v1.2.3-24-g4f1b