diff options
author | Matthew Somerville <matthew@mysociety.org> | 2013-01-22 16:48:24 +0000 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2013-01-22 16:48:24 +0000 |
commit | e33b0c7e44692137a671054cea6b77f9e1edad59 (patch) | |
tree | 8e0d6616e8506f7850a7eef5f55e02451729726c /bin | |
parent | 78446bf56090e2de57bd5be694790b50b7e4fe36 (diff) |
Script to email Zurich managers when reports are overdue.
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/zurich-overdue-alert | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/bin/zurich-overdue-alert b/bin/zurich-overdue-alert new file mode 100755 index 000000000..aa9f6fe60 --- /dev/null +++ b/bin/zurich-overdue-alert @@ -0,0 +1,83 @@ +#!/usr/bin/env perl + +# zurich-overdue-alert: +# Send email alerts to administrators for overdue admin activities. +# +# Copyright (c) 2012 UK Citizens Online Democracy. All rights reserved. +# Email: matthew@mysociety.org. WWW: http://www.mysociety.org + +use strict; +use warnings; +require 5.8.0; + +use DateTime; +use CronFns; +use FixMyStreet::App; + +my ($verbose, $nomail) = CronFns::options(); + +# Only run on working days +my $now = DateTime->now(); +exit if FixMyStreet::Cobrand::Zurich::is_public_holiday($now) or FixMyStreet::Cobrand::Zurich::is_weekend($now); + +my $cobrand = FixMyStreet::Cobrand->get_class_for_moniker('zurich')->new(); +my %bodies = map { $_->id => $_ } FixMyStreet::App->model("DB::Body")->all; + +loop_through( 'alert-moderation-overdue.txt', 0, 1, [ 'unconfirmed', 'confirmed' ] ); +loop_through( 'alert-overdue.txt', 1, 5, 'in progress' ); + +sub loop_through { + my ( $template, $include_parent, $days, $states ) = @_; + + my $reports = FixMyStreet::App->model("DB::Problem")->search( { + state => $states, + whensent => { '<', FixMyStreet::Cobrand::Zurich::sub_days( $now, $days ) }, + bodies_str => { '!=', undef }, + } ); + + my %to_send = (); + while (my $row = $reports->next) { + $to_send{$row->bodies_str} .= '* ' . $row->id . ": '" . $row->title . "'\n\n"; + } + + my $template_path = FixMyStreet->path_to( "templates", "email", "zurich", $template )->stringify; + $template = Utils::read_file( $template_path ); + + foreach my $body_id (keys %to_send) { + send_alert( $template, $body_id, $to_send{$body_id}, $include_parent ); + } +} + +sub send_alert { + my ( $template, $body_id, $data, $include_parent ) = @_; + + my $body = $bodies{$body_id}; + my $body_email = $body->endpoint; + + my $h = { + data => $data, + admin_url => $cobrand->admin_base_url, + }; + + my $env_to = [ $body_email ]; + my $to = [ [ $body_email, $body->name ] ]; + if ( $include_parent ) { + my $parent = $body->parent; + my $parent_email = $parent->endpoint; + push @$env_to, $parent_email; + push @$to, [ $parent_email, $parent->name ]; + } + + my $result = FixMyStreet::App->send_email_cron( + { + _template_ => $template, + _parameters_ => $h, + To => $to, + From => [ FixMyStreet->config('CONTACT_EMAIL'), FixMyStreet->config('CONTACT_NAME') ], + }, + FixMyStreet->config('CONTACT_EMAIL'), + $env_to, + $nomail + ); +} + |