aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/send-reports294
-rw-r--r--conf/crontab.ugly6
-rw-r--r--conf/general.yml-example2
-rw-r--r--db/schema.sql10
-rw-r--r--db/schema_0013-add_send_method_column_to_open311conf.sql7
-rw-r--r--db/schema_0014-add_send_fail_columns_to_problem.sql10
-rw-r--r--perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE.pm248
-rw-r--r--perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE/Exception.pm64
-rw-r--r--perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATEResponse.pm183
-rw-r--r--perllib/BarnetInterfaces/service/ZLBB_SERVICE_ORDER.pm166
-rw-r--r--perllib/BarnetTypemaps/service.pm103
-rw-r--r--perllib/BarnetTypes/BAPIRET2.pm219
-rw-r--r--perllib/BarnetTypes/BAPI_TTET_ADDRESS_COM.pm165
-rw-r--r--perllib/BarnetTypes/CRMT_SERVICE_REQUEST_TEXT.pm102
-rw-r--r--perllib/BarnetTypes/RfcException/Message.pm111
-rw-r--r--perllib/BarnetTypes/RfcException/Message/Number.pm65
-rw-r--r--perllib/BarnetTypes/TABLE_OF_BAPIRET2.pm117
-rw-r--r--perllib/BarnetTypes/TABLE_OF_CRMT_SERVICE_REQUEST_TEXT.pm104
-rw-r--r--perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcException.pm123
-rw-r--r--perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcExceptions.pm65
-rw-r--r--perllib/BarnetTypes/char1.pm65
-rw-r--r--perllib/BarnetTypes/char10.pm65
-rw-r--r--perllib/BarnetTypes/char132.pm65
-rw-r--r--perllib/BarnetTypes/char2.pm65
-rw-r--r--perllib/BarnetTypes/char20.pm65
-rw-r--r--perllib/BarnetTypes/char220.pm65
-rw-r--r--perllib/BarnetTypes/char241.pm65
-rw-r--r--perllib/BarnetTypes/char3.pm65
-rw-r--r--perllib/BarnetTypes/char30.pm65
-rw-r--r--perllib/BarnetTypes/char32.pm65
-rw-r--r--perllib/BarnetTypes/char35.pm65
-rw-r--r--perllib/BarnetTypes/char40.pm65
-rw-r--r--perllib/BarnetTypes/char5.pm65
-rw-r--r--perllib/BarnetTypes/char50.pm65
-rw-r--r--perllib/BarnetTypes/numeric3.pm65
-rw-r--r--perllib/BarnetTypes/numeric6.pm65
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm19
-rw-r--r--perllib/FixMyStreet/DB.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Abuse.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/AdminLog.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Alert.pm22
-rw-r--r--perllib/FixMyStreet/DB/Result/AlertSent.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/AlertType.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Comment.pm26
-rw-r--r--perllib/FixMyStreet/DB/Result/Contact.pm7
-rw-r--r--perllib/FixMyStreet/DB/Result/ContactsHistory.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Open311conf.pm8
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm53
-rw-r--r--perllib/FixMyStreet/DB/Result/Questionnaire.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Secret.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Session.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/Token.pm6
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm6
-rw-r--r--perllib/SOAP/WSDL/Serializer/XSD.pm148
-rw-r--r--perllib/Utils.pm41
-rw-r--r--templates/web/default/report/_main.html7
-rw-r--r--templates/web/fixmystreet/report/new/councils_text_all.html4
57 files changed, 3507 insertions, 98 deletions
diff --git a/bin/send-reports b/bin/send-reports
index 22bd12732..a0c084c1c 100755
--- a/bin/send-reports
+++ b/bin/send-reports
@@ -22,6 +22,7 @@ use CronFns;
use FixMyStreet::App;
use EastHantsWSDL;
+use BarnetInterfaces::service::ZLBB_SERVICE_ORDER;
use Utils;
use mySociety::Config;
use mySociety::EmailUtil;
@@ -30,6 +31,22 @@ use mySociety::Web qw(ent);
use Open311;
+# maximum number of webservice attempts to send before not trying any more (XXX may be better in config?)
+use constant SEND_FAIL_RETRIES_CUTOFF => 3;
+
+# specific council numbers
+use constant COUNCIL_ID_BARNET => 2489;
+use constant COUNCIL_ID_EAST_HANTS => 2330;
+
+use constant MAX_LINE_LENGTH => 132;
+
+# send_method config values found in by-area config data, for selecting to appropriate method
+use constant SEND_METHOD_EMAIL => 'email';
+use constant SEND_METHOD_OPEN311 => 'open311';
+use constant SEND_METHOD_BARNET => 'barnet';
+use constant SEND_METHOD_EAST_HANTS => 'easthants';
+use constant SEND_METHOD_LONDON => 'london';
+
# Set up site, language etc.
my ($verbose, $nomail) = CronFns::options();
my $base_url = mySociety::Config::get('BASE_URL');
@@ -40,6 +57,9 @@ my $unsent = FixMyStreet::App->model("DB::Problem")->search( {
whensent => undef,
council => { '!=', undef },
} );
+
+my %sending_skipped_by_method = ();
+
my (%notgot, %note);
while (my $row = $unsent->next) {
@@ -56,8 +76,10 @@ while (my $row = $unsent->next) {
next;
}
- my $send_email = 0;
- my $send_web = 0;
+ # Due to multiple councils, it's possible to want to send both by email *and* another method
+ # NB: might need to revist this if multiple councils have custom send methods
+ my $send_email = 0;
+ my $send_method = 0;
# Template variables for the email
my $email_base_url = $cobrand->base_url_for_emails($row->cobrand_data);
@@ -118,6 +140,7 @@ while (my $row = $unsent->next) {
push @to, [ $council_email, $name ];
@recips = ($council_email);
+ $send_method = 0;
$send_email = 1;
$template = Utils::read_file("$FindBin::Bin/../templates/email/emptyhomes/" . $row->lang . "/submit.txt");
@@ -133,15 +156,37 @@ while (my $row = $unsent->next) {
foreach my $council (@councils) {
my $name = $areas_info->{$council}->{name};
push @dear, $name;
- if ($council == 2330) { # E. Hants have a web service
- $send_web = 'easthants';
+
+ # look in the DB to determine if there is a special handler for this council (e.g., open311, or custom)
+ my $council_config = FixMyStreet::App->model("DB::Open311conf")->search( { area_id => $council} )->first;
+ $send_method = $council_config->send_method if $council_config;
+ if ($council == COUNCIL_ID_EAST_HANTS) { # E. Hants have a web service
+ $send_method = SEND_METHOD_EAST_HANTS; # TODO: delete? should be in the db
$h{category} = 'Customer Services' if $h{category} eq 'Other';
- } elsif ($areas_info->{$council}->{type} eq 'LBO') { # London
- $send_web = 'london';
- } elsif ( my $endpoint = FixMyStreet::App->model("DB::Open311conf")->search( { area_id => $council, endpoint => { '!=', '' } } )->first ) {
- push @open311_councils, $endpoint;
- $send_web = 'open311';
- } else {
+ }
+
+ # if council lookup provided no explicit send_method, maybe there's some other criterion for setting it:
+ if (! $send_method) {
+ if ($areas_info->{$council}->{type} eq 'LBO') { # London
+ $send_method = SEND_METHOD_LONDON;
+ }
+ }
+ $send_email = 1 unless $send_method; # default to email if nothing explicit was provided
+
+ # currently: open311 or Barnet without an endpoint is useless, so check the endpoint is set
+ if ($send_method eq SEND_METHOD_OPEN311 or $send_method eq SEND_METHOD_BARNET) {
+ if ($council_config->endpoint) {
+ if ($send_method eq SEND_METHOD_OPEN311) {
+ push @open311_councils, $council_config;
+ }
+ } else {
+ print "Warning: no endpoint specified in config data for council=$council (will try email instead)\n";
+ $send_method = 0;
+ $send_email = 1;
+ }
+ }
+
+ if ($send_email) {
my $contact = FixMyStreet::App->model("DB::Contact")->find( {
deleted => 0,
area_id => $council,
@@ -160,7 +205,6 @@ while (my $row = $unsent->next) {
}
push @to, [ $council_email, $name ];
$recips{$council_email} = 1;
- $send_email = 1;
}
}
@recips = keys %recips;
@@ -199,15 +243,19 @@ while (my $row = $unsent->next) {
}
- unless ($send_email || $send_web) {
+ unless ($send_method) {
die 'Report not going anywhere for ID ' . $row->id . '!';
}
if (mySociety::Config::get('STAGING_SITE')) {
# on a staging server send emails to ourselves rather than the councils
- @recips = ( mySociety::Config::get('CONTACT_EMAIL') );
- $send_web = 0;
- $send_email = 1;
+ # ...webservice calls will only go through if explictly allowed here:
+ my @testing_councils = (COUNCIL_ID_BARNET);
+ unless (grep {$row->council eq $_} @testing_councils) {
+ @recips = ( mySociety::Config::get('CONTACT_EMAIL') );
+ $send_method = 0;
+ $send_email = 1;
+ }
} elsif ($site eq 'emptyhomes') {
my $council = $row->council;
my $country = $areas_info->{$council}->{country};
@@ -243,17 +291,28 @@ while (my $row = $unsent->next) {
);
}
- if ($send_web eq 'easthants') {
+ if ($send_method eq SEND_METHOD_EAST_HANTS) {
$h{message} = construct_easthants_message(%h);
if (!$nomail) {
$result *= post_easthants_message(%h);
}
- } elsif ($send_web eq 'london') {
+ } elsif ($send_method eq SEND_METHOD_BARNET) {
+ $h{message} = construct_barnet_message(%h);
+ if (!$nomail) {
+ if (my $cutoff_msg = does_exceed_cutoff_limit($row, "barnet")) {
+ print "$cutoff_msg\n" if $verbose;
+ } else {
+ my ($barnet_result, $err_msg) = post_barnet_message( $row, %h );
+ update_send_fail_data($row, $err_msg) if $barnet_result;
+ $result *= $barnet_result;
+ }
+ }
+ } elsif ($send_method eq SEND_METHOD_LONDON) {
$h{message} = construct_london_message(%h);
if (!$nomail) {
$result *= post_london_report( $row, %h );
}
- } elsif ($send_web eq 'open311') {
+ } elsif ($send_method eq SEND_METHOD_OPEN311) {
foreach my $conf ( @open311_councils ) {
print 'posting to end point for ' . $conf->area_id . "\n" if $verbose;
@@ -316,6 +375,17 @@ if ($verbose) {
}
}
+# not conditional on verbose because these can be considered failures (more relevant than one-off error messages?)
+if (keys %sending_skipped_by_method) {
+ my $c = 0;
+ print "\nProblem reports that send-reports did not attempt to send because retries >= " . SEND_FAIL_RETRIES_CUTOFF . ":\n";
+ foreach my $send_method (sort keys %sending_skipped_by_method) {
+ printf " %-24s %4d\n", "$send_method:", $sending_skipped_by_method{$send_method};
+ $c+=$sending_skipped_by_method{$send_method};
+ }
+ printf " %-24s %4d\n", "Total:", $c;
+}
+
sub _get_district_for_contact {
my ( $lat, $lon ) = @_;
my $district =
@@ -358,6 +428,8 @@ sub construct_easthants_message {
$message .= <<EOF;
Subject: $h{title}
+Category: $h{category}
+
Details: $h{detail}
$h{fuzzy}, or to provide an update on the problem, please visit the following link:
@@ -390,6 +462,115 @@ sub post_easthants_message {
return $return;
}
+# currently just blind copy of construct_easthants_message
+sub construct_barnet_message {
+ my %h = @_;
+ my $message = <<EOF;
+Subject: $h{title}
+
+Details: $h{detail}
+
+$h{fuzzy}, or to provide an update on the problem, please visit the following link:
+
+$h{url}
+
+$h{closest_address}
+EOF
+}
+
+sub post_barnet_message {
+ my ( $problem, %h ) = @_;
+ my $return = 1;
+ my $err_msg = "";
+
+ my $default_kbid = 14; # This is the default, "Street Scene"
+ my $kbid = sprintf( "%050d", Utils::barnet_categories()->{$h{category}} || $default_kbid);
+
+ my $geo_code = "$h{easting} $h{northing}";
+
+ my $interface = BarnetInterfaces::service::ZLBB_SERVICE_ORDER->new();
+
+ my ($nearest_postcode, $nearest_street);
+ for ($h{closest_address}) {
+ $nearest_postcode = sprintf("%-10s", $1) if /Nearest postcode [^:]+: ((\w{1,4}\s?\w+|\w+))/;
+ # use partial postcode or comma as delimiter, strip leading number (possible letter 221B) off too
+ # "99 Foo Street, London N11 1XX" becomes Foo Street
+ # "99 Foo Street N11 1XX" becomes Foo Street
+ $nearest_street = sprintf("%-30s", $1) if /Nearest road [^:]+: (?:\d+\w? )?(.*?)(\b[A-Z]+\d|,|$)/m;
+ }
+ my $postcode = $h{postcode} || $nearest_postcode; # use given postcode if available
+
+ # note: endpoint can be of form 'https://username:password@:url'
+ my $council_config = FixMyStreet::App->model("DB::Open311conf")->search( { area_id => COUNCIL_ID_BARNET} )->first;
+ if ($council_config and $council_config->endpoint) {
+ $interface->set_proxy($council_config->endpoint);
+ # Barnet web service doesn't like namespaces in the elements so use a prefix
+ $interface->set_prefix('urn');
+ } else {
+ die "Barnet webservice FAIL: looks like you're missing some config data: no endpoint (URL) found for area_id=" . COUNCIL_ID_BARNET;
+ }
+
+ eval {
+ my $result = $interface->Z_CRM_SERVICE_ORDER_CREATE( {
+ ET_RETURN => { # ignored by server
+ item => {
+ TYPE => "", ID => "", NUMBER => "", MESSAGE => "", LOG_NO => "", LOG_MSG_NO => "",
+ MESSAGE_V1 => "", MESSAGE_V2 => "", MESSAGE_V3 => "", MESSAGE_V4 => "", PARAMETER => "",
+ ROW => "", FIELD => "", SYSTEM => "",
+ },
+ },
+ IT_PROBLEM_DESC => { # MyTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT
+ item => [ # MyTypes::CRMT_SERVICE_REQUEST_TEXT
+ map { { TEXT_LINE => $_ } } split_text_with_entities(ent(encode_utf8($h{message})), 132) # char132
+ ],
+ },
+ IV_CUST_EMAIL => truncate_string_with_entities(ent(encode_utf8($h{email})), 241), # char241
+ IV_CUST_NAME => truncate_string_with_entities(ent(encode_utf8($h{name})), 50), # char50
+ IV_KBID => $kbid, # char50
+ IV_PROBLEM_ID => $h{id}, # char35
+ IV_PROBLEM_LOC => { # MyTypes::BAPI_TTET_ADDRESS_COM
+ COUNTRY2 => 'GB', # char2
+ REGION => "", # char3
+ COUNTY => "", # char30
+ CITY => "", # char30
+ POSTALCODE => $postcode, # char10
+ STREET => $nearest_street, # char30
+ STREETNUMBER => "", # char5
+ GEOCODE => $geo_code, # char32
+ },
+ IV_PROBLEM_SUB => truncate_string_with_entities(ent(encode_utf8($h{title})), 40), # char40
+ },
+ );
+ if ($result) {
+ # currently not using this: get_EV_ORDER_GUID (maybe that's the customer number in the CRM)
+ if (my $barnet_id = $result->get_EV_ORDER_NO()) {
+ $problem->external_id( $barnet_id );
+ $problem->external_body( 'Barnet Borough Council' ); # better to use $problem->body()?
+ $return = 0;
+ } else {
+ $err_msg = "Failed (problem id $h{id}): service returned no external id";
+ }
+ } else {
+ my %fault = (
+ 'code' => $result->get_faultcode(),
+ 'actor' => $result->get_faultactor(),
+ 'string' => $result->get_faultstring(),
+ # 'detail' => $result->get_detail(), # possibly only contains debug info
+ );
+ $fault{$_}=~s/^\s*|\s*$//g foreach keys %fault;
+ $fault{actor}&&=" (actor: $fault{actor})";
+ $err_msg = "Failed (problem id $h{id}): Fault $fault{code}$fault{actor}\n$fault{string}";
+ }
+
+ };
+ print "$err_msg\n" if $err_msg;
+ if ($@) {
+ my $e = shift;
+ print "Caught an error: $@\n";
+ }
+ return ($return, $err_msg);
+}
+
# London
sub construct_london_message {
@@ -489,3 +670,80 @@ sub london_lookup {
return $str;
}
+# for barnet webservice: max-length fields require truncate and split
+
+# truncate_string_with_entities
+# args: text to truncate
+# max number of chars
+# returns: string truncated
+# Note: must not partially truncate an entity (e.g., &amp;)
+sub truncate_string_with_entities {
+ my ($str, $max_len) = @_;
+ my $retVal = "";
+ foreach my $chunk (split /(\&(?:\#\d+|\w+);)/, $str) {
+ if ($chunk=~/^\&(\#\d+|\w+);$/){
+ my $next = $retVal.$chunk;
+ last if length $next > $max_len;
+ $retVal=$next
+ } else {
+ $retVal.=$chunk;
+ if (length $retVal > $max_len) {
+ $retVal = substr($retVal, 0, $max_len);
+ last
+ }
+ }
+ }
+ return $retVal
+}
+
+# split_text_with_entities into lines
+# args: text to be broken into lines
+# max length (option: uses constant MAX_LINE_LENGTH)
+# returns: array of lines
+# Must not to split an entity (e.g., &amp;)
+# Not worrying about hyphenating here, since a word is only ever split if
+# it's longer than the whole line, which is uncommon in genuine problem reports
+sub split_text_with_entities {
+ my ($text, $max_line_length) = @_;
+ $max_line_length ||= MAX_LINE_LENGTH;
+ my @lines;
+ foreach my $line (split "\n", $text) {
+ while (length $line > $max_line_length) {
+ if (! ($line =~ s/^(.{1,$max_line_length})\s// # break on a space
+ or $line =~ s/^(.{1,$max_line_length})(\&(\#\d+|\w+);)/$2/ # break before an entity
+ or $line =~ s/(.{$max_line_length})//)) { # break the word ruthlessly
+ $line =~ s/(.*)//; # otherwise gobble whole line (which is now shorter than max length)
+ }
+ push @lines, $1;
+ }
+ push @lines, $line;
+ }
+ return @lines;
+}
+
+# tests send_fail_count agains cutoff limit
+# args: problem (row from problem db)
+# returns false if there is no cutoff, otherwise error message
+sub does_exceed_cutoff_limit {
+ my ($problem, $council_name) = @_;
+ my $err_msg = "";
+ if ($problem->send_fail_count >= SEND_FAIL_RETRIES_CUTOFF) {
+ $sending_skipped_by_method{$council_name || '?'}++;
+ $council_name &&= " to $council_name";
+ $err_msg = "skipped: problem id=" . $problem->id . " send$council_name has failed "
+ . $problem->send_fail_count . " times, cutoff is " . SEND_FAIL_RETRIES_CUTOFF;
+ }
+ return $err_msg;
+}
+
+# update_send_fail_data records the failure (of a webservice send)
+# args: problem (row from problem db)
+# returns: no return value (updates record)
+sub update_send_fail_data {
+ my ($problem, $err_msg) = @_;
+ $problem->update( {
+ send_fail_count => $problem->send_fail_count + 1,
+ send_fail_timestamp => \'ms_current_timestamp()',
+ send_fail_reason => $err_msg
+ } );
+} \ No newline at end of file
diff --git a/conf/crontab.ugly b/conf/crontab.ugly
index 2d4467aab..4052275ee 100644
--- a/conf/crontab.ugly
+++ b/conf/crontab.ugly
@@ -7,7 +7,11 @@
# $Id: crontab.ugly,v 1.23 2010-01-07 10:32:24 louise Exp $
PATH=/usr/local/bin:/usr/bin:/bin
+!!(* if ($vhost eq 'integration-staging.fixmystreet.com') { *)!!
+MAILTO=dave@mysociety.org
+!!(* } else { *)!!
MAILTO=cron-!!(*= $site *)!!@mysociety.org
+!!(* } *)!!
# On only one server
!!(* if ($vhost eq 'reportemptyhomes.com') { *)!!
@@ -18,7 +22,7 @@ MAILTO=cron-!!(*= $site *)!!@mysociety.org
#2 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-alerts.lock "/data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/cron-wrapper send-alerts" || echo "stalled?"
0,30 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-questionnaires.lock "/data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/cron-wrapper send-questionnaires" || echo "stalled?"
-!!(* } elsif (($vhost eq 'www.fixmystreet.com') || ($vhost eq 'matthew.fixmystreet.com')) { *)!!
+!!(* } elsif (($vhost eq 'www.fixmystreet.com') || ($vhost eq 'matthew.fixmystreet.com') || ($vhost eq 'integration-staging.fixmystreet.com')) { *)!!
5,10,15,20,25,30,35,40,45,50,55 * * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock "/data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/cron-wrapper send-reports" || echo "stalled?"
0 0-8,10,11,13,14,16,17,19-23 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock "/data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/cron-wrapper send-reports" || echo "stalled?"
0 9,12,15,18 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/send-reports.lock "/data/vhost/!!(*= $vhost *)!!/fixmystreet/bin/cron-wrapper send-reports --verbose" || echo "stalled?"
diff --git a/conf/general.yml-example b/conf/general.yml-example
index 06af11a55..ec77e6ba8 100644
--- a/conf/general.yml-example
+++ b/conf/general.yml-example
@@ -61,3 +61,5 @@ RSS_LIMIT: '20'
# Should problem reports link to the council summary pages?
AREA_LINKS_FROM_PROBLEMS: '0'
+
+
diff --git a/db/schema.sql b/db/schema.sql
index 395d1c07b..5824b2d6d 100644
--- a/db/schema.sql
+++ b/db/schema.sql
@@ -189,7 +189,12 @@ create table problem (
send_questionnaire boolean not null default 't',
extra text, -- extra fields required for open311
flagged boolean not null default 'f',
- geocode bytea
+ geocode bytea,
+
+ -- logging sending failures (used by webservices)
+ send_fail_count integer not null default 0,
+ send_fail_reason text,
+ send_fail_timestamp timestamp
);
create index problem_state_latitude_longitude_idx on problem(state, latitude, longitude);
create index problem_user_id_idx on problem ( user_id );
@@ -419,5 +424,6 @@ create table open311conf (
area_id integer not null unique,
endpoint text not null,
jurisdiction text,
- api_key text
+ api_key text,
+ send_method text
);
diff --git a/db/schema_0013-add_send_method_column_to_open311conf.sql b/db/schema_0013-add_send_method_column_to_open311conf.sql
new file mode 100644
index 000000000..516fdd698
--- /dev/null
+++ b/db/schema_0013-add_send_method_column_to_open311conf.sql
@@ -0,0 +1,7 @@
+
+begin;
+
+ALTER table open311conf
+ ADD column send_method TEXT;
+
+commit;
diff --git a/db/schema_0014-add_send_fail_columns_to_problem.sql b/db/schema_0014-add_send_fail_columns_to_problem.sql
new file mode 100644
index 000000000..369c4118d
--- /dev/null
+++ b/db/schema_0014-add_send_fail_columns_to_problem.sql
@@ -0,0 +1,10 @@
+begin;
+
+ALTER table problem
+ ADD column send_fail_count integer not null default 0;
+ALTER table problem
+ ADD column send_fail_reason text;
+ALTER table problem
+ ADD column send_fail_timestamp timestamp;
+
+commit;
diff --git a/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE.pm b/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE.pm
new file mode 100644
index 000000000..2c398ab1b
--- /dev/null
+++ b/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE.pm
@@ -0,0 +1,248 @@
+
+package BarnetElements::Z_CRM_SERVICE_ORDER_CREATE;
+use strict;
+use warnings;
+
+{ # BLOCK to scope variables
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' }
+
+__PACKAGE__->__set_name('Z_CRM_SERVICE_ORDER_CREATE');
+__PACKAGE__->__set_nillable();
+__PACKAGE__->__set_minOccurs();
+__PACKAGE__->__set_maxOccurs();
+__PACKAGE__->__set_ref();
+
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Element
+ SOAP::WSDL::XSD::Typelib::ComplexType
+);
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %ET_RETURN_of :ATTR(:get<ET_RETURN>);
+my %IT_PROBLEM_DESC_of :ATTR(:get<IT_PROBLEM_DESC>);
+my %IV_CUST_EMAIL_of :ATTR(:get<IV_CUST_EMAIL>);
+my %IV_CUST_NAME_of :ATTR(:get<IV_CUST_NAME>);
+my %IV_KBID_of :ATTR(:get<IV_KBID>);
+my %IV_PROBLEM_ID_of :ATTR(:get<IV_PROBLEM_ID>);
+my %IV_PROBLEM_LOC_of :ATTR(:get<IV_PROBLEM_LOC>);
+my %IV_PROBLEM_SUB_of :ATTR(:get<IV_PROBLEM_SUB>);
+
+__PACKAGE__->_factory(
+ [ qw( ET_RETURN
+ IT_PROBLEM_DESC
+ IV_CUST_EMAIL
+ IV_CUST_NAME
+ IV_KBID
+ IV_PROBLEM_ID
+ IV_PROBLEM_LOC
+ IV_PROBLEM_SUB
+
+ ) ],
+ {
+ 'ET_RETURN' => \%ET_RETURN_of,
+ 'IT_PROBLEM_DESC' => \%IT_PROBLEM_DESC_of,
+ 'IV_CUST_EMAIL' => \%IV_CUST_EMAIL_of,
+ 'IV_CUST_NAME' => \%IV_CUST_NAME_of,
+ 'IV_KBID' => \%IV_KBID_of,
+ 'IV_PROBLEM_ID' => \%IV_PROBLEM_ID_of,
+ 'IV_PROBLEM_LOC' => \%IV_PROBLEM_LOC_of,
+ 'IV_PROBLEM_SUB' => \%IV_PROBLEM_SUB_of,
+ },
+ {
+ 'ET_RETURN' => 'BarnetTypes::TABLE_OF_BAPIRET2',
+ 'IT_PROBLEM_DESC' => 'BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT',
+ 'IV_CUST_EMAIL' => 'BarnetTypes::char241',
+ 'IV_CUST_NAME' => 'BarnetTypes::char50',
+ 'IV_KBID' => 'BarnetTypes::char50',
+ 'IV_PROBLEM_ID' => 'BarnetTypes::char35',
+ 'IV_PROBLEM_LOC' => 'BarnetTypes::BAPI_TTET_ADDRESS_COM',
+ 'IV_PROBLEM_SUB' => 'BarnetTypes::char40',
+ },
+ {
+
+ 'ET_RETURN' => 'ET_RETURN',
+ 'IT_PROBLEM_DESC' => 'IT_PROBLEM_DESC',
+ 'IV_CUST_EMAIL' => 'IV_CUST_EMAIL',
+ 'IV_CUST_NAME' => 'IV_CUST_NAME',
+ 'IV_KBID' => 'IV_KBID',
+ 'IV_PROBLEM_ID' => 'IV_PROBLEM_ID',
+ 'IV_PROBLEM_LOC' => 'IV_PROBLEM_LOC',
+ 'IV_PROBLEM_SUB' => 'IV_PROBLEM_SUB',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+} # end of BLOCK
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetElements::Z_CRM_SERVICE_ORDER_CREATE
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined element
+Z_CRM_SERVICE_ORDER_CREATE from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+
+=head1 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * ET_RETURN
+
+ $element->set_ET_RETURN($data);
+ $element->get_ET_RETURN();
+
+
+
+
+=item * IT_PROBLEM_DESC
+
+ $element->set_IT_PROBLEM_DESC($data);
+ $element->get_IT_PROBLEM_DESC();
+
+
+
+
+=item * IV_CUST_EMAIL
+
+ $element->set_IV_CUST_EMAIL($data);
+ $element->get_IV_CUST_EMAIL();
+
+
+
+
+=item * IV_CUST_NAME
+
+ $element->set_IV_CUST_NAME($data);
+ $element->get_IV_CUST_NAME();
+
+
+
+
+=item * IV_KBID
+
+ $element->set_IV_KBID($data);
+ $element->get_IV_KBID();
+
+
+
+
+=item * IV_PROBLEM_ID
+
+ $element->set_IV_PROBLEM_ID($data);
+ $element->get_IV_PROBLEM_ID();
+
+
+
+
+=item * IV_PROBLEM_LOC
+
+ $element->set_IV_PROBLEM_LOC($data);
+ $element->get_IV_PROBLEM_LOC();
+
+
+
+
+=item * IV_PROBLEM_SUB
+
+ $element->set_IV_PROBLEM_SUB($data);
+ $element->get_IV_PROBLEM_SUB();
+
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+ my $element = BarnetElements::Z_CRM_SERVICE_ORDER_CREATE->new($data);
+
+Constructor. The following data structure may be passed to new():
+
+ {
+ ET_RETURN => { # BarnetTypes::TABLE_OF_BAPIRET2
+ item => { # BarnetTypes::BAPIRET2
+ TYPE => $some_value, # char1
+ ID => $some_value, # char20
+ NUMBER => $some_value, # numeric3
+ MESSAGE => $some_value, # char220
+ LOG_NO => $some_value, # char20
+ LOG_MSG_NO => $some_value, # numeric6
+ MESSAGE_V1 => $some_value, # char50
+ MESSAGE_V2 => $some_value, # char50
+ MESSAGE_V3 => $some_value, # char50
+ MESSAGE_V4 => $some_value, # char50
+ PARAMETER => $some_value, # char32
+ ROW => $some_value, # int
+ FIELD => $some_value, # char30
+ SYSTEM => $some_value, # char10
+ },
+ },
+ IT_PROBLEM_DESC => { # BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT
+ item => { # BarnetTypes::CRMT_SERVICE_REQUEST_TEXT
+ TEXT_LINE => $some_value, # char132
+ },
+ },
+ IV_CUST_EMAIL => $some_value, # char241
+ IV_CUST_NAME => $some_value, # char50
+ IV_KBID => $some_value, # char50
+ IV_PROBLEM_ID => $some_value, # char35
+ IV_PROBLEM_LOC => { # BarnetTypes::BAPI_TTET_ADDRESS_COM
+ COUNTRY2 => $some_value, # char2
+ REGION => $some_value, # char3
+ COUNTY => $some_value, # char30
+ CITY => $some_value, # char30
+ POSTALCODE => $some_value, # char10
+ STREET => $some_value, # char30
+ STREETNUMBER => $some_value, # char5
+ GEOCODE => $some_value, # char32
+ },
+ IV_PROBLEM_SUB => $some_value, # char40
+ },
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE/Exception.pm b/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE/Exception.pm
new file mode 100644
index 000000000..ae95d3234
--- /dev/null
+++ b/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATE/Exception.pm
@@ -0,0 +1,64 @@
+
+package BarnetElements::Z_CRM_SERVICE_ORDER_CREATE::Exception;
+use strict;
+use warnings;
+
+{ # BLOCK to scope variables
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' }
+
+__PACKAGE__->__set_name('Z_CRM_SERVICE_ORDER_CREATE.Exception');
+__PACKAGE__->__set_nillable();
+__PACKAGE__->__set_minOccurs();
+__PACKAGE__->__set_maxOccurs();
+__PACKAGE__->__set_ref();
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Element
+ BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcException
+);
+
+}
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetElements::Z_CRM_SERVICE_ORDER_CREATE::Exception
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined element
+Z_CRM_SERVICE_ORDER_CREATE.Exception from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+
+=head1 METHODS
+
+=head2 new
+
+ my $element = BarnetElements::Z_CRM_SERVICE_ORDER_CREATE::Exception->new($data);
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcException
+ Name => $some_value, # Z_CRM_SERVICE_ORDER_CREATE.RfcExceptions
+ Text => $some_value, # string
+ Message => { # BarnetTypes::RfcException::Message
+ ID => $some_value, # string
+ Number => $some_value, # RfcException.Message.Number
+ },
+ },
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATEResponse.pm b/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATEResponse.pm
new file mode 100644
index 000000000..5755d0b49
--- /dev/null
+++ b/perllib/BarnetElements/Z_CRM_SERVICE_ORDER_CREATEResponse.pm
@@ -0,0 +1,183 @@
+
+package BarnetElements::Z_CRM_SERVICE_ORDER_CREATEResponse;
+use strict;
+use warnings;
+
+{ # BLOCK to scope variables
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' }
+
+__PACKAGE__->__set_name('Z_CRM_SERVICE_ORDER_CREATEResponse');
+__PACKAGE__->__set_nillable();
+__PACKAGE__->__set_minOccurs();
+__PACKAGE__->__set_maxOccurs();
+__PACKAGE__->__set_ref();
+
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Element
+ SOAP::WSDL::XSD::Typelib::ComplexType
+);
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %ET_RETURN_of :ATTR(:get<ET_RETURN>);
+my %EV_ORDER_GUID_of :ATTR(:get<EV_ORDER_GUID>);
+my %EV_ORDER_NO_of :ATTR(:get<EV_ORDER_NO>);
+my %IT_PROBLEM_DESC_of :ATTR(:get<IT_PROBLEM_DESC>);
+
+__PACKAGE__->_factory(
+ [ qw( ET_RETURN
+ EV_ORDER_GUID
+ EV_ORDER_NO
+ IT_PROBLEM_DESC
+
+ ) ],
+ {
+ 'ET_RETURN' => \%ET_RETURN_of,
+ 'EV_ORDER_GUID' => \%EV_ORDER_GUID_of,
+ 'EV_ORDER_NO' => \%EV_ORDER_NO_of,
+ 'IT_PROBLEM_DESC' => \%IT_PROBLEM_DESC_of,
+ },
+ {
+ 'ET_RETURN' => 'BarnetTypes::TABLE_OF_BAPIRET2',
+ 'EV_ORDER_GUID' => 'BarnetTypes::char32',
+ 'EV_ORDER_NO' => 'BarnetTypes::char10',
+ 'IT_PROBLEM_DESC' => 'BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT',
+ },
+ {
+
+ 'ET_RETURN' => 'ET_RETURN',
+ 'EV_ORDER_GUID' => 'EV_ORDER_GUID',
+ 'EV_ORDER_NO' => 'EV_ORDER_NO',
+ 'IT_PROBLEM_DESC' => 'IT_PROBLEM_DESC',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+} # end of BLOCK
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetElements::Z_CRM_SERVICE_ORDER_CREATEResponse
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined element
+Z_CRM_SERVICE_ORDER_CREATEResponse from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+
+=head1 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * ET_RETURN
+
+ $element->set_ET_RETURN($data);
+ $element->get_ET_RETURN();
+
+
+
+
+=item * EV_ORDER_GUID
+
+ $element->set_EV_ORDER_GUID($data);
+ $element->get_EV_ORDER_GUID();
+
+
+
+
+=item * EV_ORDER_NO
+
+ $element->set_EV_ORDER_NO($data);
+ $element->get_EV_ORDER_NO();
+
+
+
+
+=item * IT_PROBLEM_DESC
+
+ $element->set_IT_PROBLEM_DESC($data);
+ $element->get_IT_PROBLEM_DESC();
+
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+ my $element = BarnetElements::Z_CRM_SERVICE_ORDER_CREATEResponse->new($data);
+
+Constructor. The following data structure may be passed to new():
+
+ {
+ ET_RETURN => { # BarnetTypes::TABLE_OF_BAPIRET2
+ item => { # BarnetTypes::BAPIRET2
+ TYPE => $some_value, # char1
+ ID => $some_value, # char20
+ NUMBER => $some_value, # numeric3
+ MESSAGE => $some_value, # char220
+ LOG_NO => $some_value, # char20
+ LOG_MSG_NO => $some_value, # numeric6
+ MESSAGE_V1 => $some_value, # char50
+ MESSAGE_V2 => $some_value, # char50
+ MESSAGE_V3 => $some_value, # char50
+ MESSAGE_V4 => $some_value, # char50
+ PARAMETER => $some_value, # char32
+ ROW => $some_value, # int
+ FIELD => $some_value, # char30
+ SYSTEM => $some_value, # char10
+ },
+ },
+ EV_ORDER_GUID => $some_value, # char32
+ EV_ORDER_NO => $some_value, # char10
+ IT_PROBLEM_DESC => { # BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT
+ item => { # BarnetTypes::CRMT_SERVICE_REQUEST_TEXT
+ TEXT_LINE => $some_value, # char132
+ },
+ },
+ },
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetInterfaces/service/ZLBB_SERVICE_ORDER.pm b/perllib/BarnetInterfaces/service/ZLBB_SERVICE_ORDER.pm
new file mode 100644
index 000000000..94e0cd4db
--- /dev/null
+++ b/perllib/BarnetInterfaces/service/ZLBB_SERVICE_ORDER.pm
@@ -0,0 +1,166 @@
+package BarnetInterfaces::service::ZLBB_SERVICE_ORDER;
+use strict;
+use warnings;
+use Class::Std::Fast::Storable;
+use Scalar::Util qw(blessed);
+use base qw(SOAP::WSDL::Client::Base);
+
+# only load if it hasn't been loaded before
+require BarnetTypemaps::service
+ if not BarnetTypemaps::service->can('get_class');
+
+sub START {
+ $_[0]->set_proxy('http://lbbcrmdev.barnet.gov.uk:8000/sap/bc/srt/rfc/sap/zlbb_service_order/200/zlbb_service_order/zlbb_service_order') if not $_[2]->{proxy};
+ $_[0]->set_class_resolver('BarnetTypemaps::service')
+ if not $_[2]->{class_resolver};
+
+ $_[0]->set_prefix($_[2]->{use_prefix}) if exists $_[2]->{use_prefix};
+}
+
+sub Z_CRM_SERVICE_ORDER_CREATE {
+ my ($self, $body, $header) = @_;
+ die "Z_CRM_SERVICE_ORDER_CREATE must be called as object method (\$self is <$self>)" if not blessed($self);
+ return $self->SUPER::call({
+ operation => 'Z_CRM_SERVICE_ORDER_CREATE',
+ soap_action => '',
+ style => 'document',
+ body => {
+
+
+ 'use' => 'literal',
+ namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
+ encodingStyle => '',
+ parts => [qw( BarnetElements::Z_CRM_SERVICE_ORDER_CREATE )],
+ },
+ header => {
+
+ },
+ headerfault => {
+
+ }
+ }, $body, $header);
+}
+
+
+
+
+1;
+
+
+
+__END__
+
+=pod
+
+=head1 NAME
+
+BarnetInterfaces::service::ZLBB_SERVICE_ORDER - SOAP Interface for the service Web Service
+
+=head1 SYNOPSIS
+
+ use BarnetInterfaces::service::ZLBB_SERVICE_ORDER;
+ my $interface = BarnetInterfaces::service::ZLBB_SERVICE_ORDER->new();
+
+ my $response;
+ $response = $interface->Z_CRM_SERVICE_ORDER_CREATE();
+
+
+
+=head1 DESCRIPTION
+
+SOAP Interface for the service web service
+located at http://lbbcrmdev.barnet.gov.uk:8000/sap/bc/srt/rfc/sap/zlbb_service_order/200/zlbb_service_order/zlbb_service_order.
+
+=head1 SERVICE service
+
+
+
+=head2 Port ZLBB_SERVICE_ORDER
+
+
+
+=head1 METHODS
+
+=head2 General methods
+
+=head3 new
+
+Constructor.
+
+All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
+
+=head2 SOAP Service methods
+
+Method synopsis is displayed with hash refs as parameters.
+
+The commented class names in the method's parameters denote that objects
+of the corresponding class can be passed instead of the marked hash ref.
+
+You may pass any combination of objects, hash and list refs to these
+methods, as long as you meet the structure.
+
+List items (i.e. multiple occurences) are not displayed in the synopsis.
+You may generally pass a list ref of hash refs (or objects) instead of a hash
+ref - this may result in invalid XML if used improperly, though. Note that
+SOAP::WSDL always expects list references at maximum depth position.
+
+XML attributes are not displayed in this synopsis and cannot be set using
+hash refs. See the respective class' documentation for additional information.
+
+
+
+=head3 Z_CRM_SERVICE_ORDER_CREATE
+
+
+
+Returns a L<BarnetElements::Z_CRM_SERVICE_ORDER_CREATEResponse|BarnetElements::Z_CRM_SERVICE_ORDER_CREATEResponse> object.
+
+ $response = $interface->Z_CRM_SERVICE_ORDER_CREATE( {
+ ET_RETURN => { # BarnetTypes::TABLE_OF_BAPIRET2
+ item => { # BarnetTypes::BAPIRET2
+ TYPE => $some_value, # char1
+ ID => $some_value, # char20
+ NUMBER => $some_value, # numeric3
+ MESSAGE => $some_value, # char220
+ LOG_NO => $some_value, # char20
+ LOG_MSG_NO => $some_value, # numeric6
+ MESSAGE_V1 => $some_value, # char50
+ MESSAGE_V2 => $some_value, # char50
+ MESSAGE_V3 => $some_value, # char50
+ MESSAGE_V4 => $some_value, # char50
+ PARAMETER => $some_value, # char32
+ ROW => $some_value, # int
+ FIELD => $some_value, # char30
+ SYSTEM => $some_value, # char10
+ },
+ },
+ IT_PROBLEM_DESC => { # BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT
+ item => { # BarnetTypes::CRMT_SERVICE_REQUEST_TEXT
+ TEXT_LINE => $some_value, # char132
+ },
+ },
+ IV_CUST_EMAIL => $some_value, # char241
+ IV_CUST_NAME => $some_value, # char50
+ IV_KBID => $some_value, # char50
+ IV_PROBLEM_ID => $some_value, # char35
+ IV_PROBLEM_LOC => { # BarnetTypes::BAPI_TTET_ADDRESS_COM
+ COUNTRY2 => $some_value, # char2
+ REGION => $some_value, # char3
+ COUNTY => $some_value, # char30
+ CITY => $some_value, # char30
+ POSTALCODE => $some_value, # char10
+ STREET => $some_value, # char30
+ STREETNUMBER => $some_value, # char5
+ GEOCODE => $some_value, # char32
+ },
+ IV_PROBLEM_SUB => $some_value, # char40
+ },,
+ );
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL on Fri Apr 8 10:23:03 2011
+
+=cut
diff --git a/perllib/BarnetTypemaps/service.pm b/perllib/BarnetTypemaps/service.pm
new file mode 100644
index 000000000..dd9f98162
--- /dev/null
+++ b/perllib/BarnetTypemaps/service.pm
@@ -0,0 +1,103 @@
+
+package BarnetTypemaps::service;
+use strict;
+use warnings;
+
+our $typemap_1 = {
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/EV_ORDER_NO' => 'BarnetTypes::char10',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/GEOCODE' => 'BarnetTypes::char32',
+ 'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/COUNTRY2' => 'BarnetTypes::char2',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/NUMBER' => 'BarnetTypes::numeric3',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IT_PROBLEM_DESC/item' => 'BarnetTypes::CRMT_SERVICE_REQUEST_TEXT',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/MESSAGE_V1' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/POSTALCODE' => 'BarnetTypes::char10',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/LOG_NO' => 'BarnetTypes::char20',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/MESSAGE_V2' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/MESSAGE_V3' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_SUB' => 'BarnetTypes::char40',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IT_PROBLEM_DESC/item/TEXT_LINE' => 'BarnetTypes::char132',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/LOG_NO' => 'BarnetTypes::char20',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN' => 'BarnetTypes::TABLE_OF_BAPIRET2',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/ROW' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/IT_PROBLEM_DESC/item' => 'BarnetTypes::CRMT_SERVICE_REQUEST_TEXT',
+ 'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/PARAMETER' => 'BarnetTypes::char32',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item' => 'BarnetTypes::BAPIRET2',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_CUST_NAME' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/MESSAGE_V2' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/ROW' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
+ 'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
+ 'Z_CRM_SERVICE_ORDER_CREATE.Exception/Message/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/IT_PROBLEM_DESC' => 'BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/NUMBER' => 'BarnetTypes::numeric3',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse' => 'BarnetElements::Z_CRM_SERVICE_ORDER_CREATEResponse',
+ 'Z_CRM_SERVICE_ORDER_CREATE.Exception/Text' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/MESSAGE_V1' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/PARAMETER' => 'BarnetTypes::char32',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/MESSAGE' => 'BarnetTypes::char220',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/TYPE' => 'BarnetTypes::char1',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/MESSAGE' => 'BarnetTypes::char220',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC' => 'BarnetTypes::BAPI_TTET_ADDRESS_COM',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/TYPE' => 'BarnetTypes::char1',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_CUST_EMAIL' => 'BarnetTypes::char241',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/FIELD' => 'BarnetTypes::char30',
+ 'Z_CRM_SERVICE_ORDER_CREATE.Exception/Name' => 'BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcExceptions',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/IT_PROBLEM_DESC/item/TEXT_LINE' => 'BarnetTypes::char132',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/ID' => 'BarnetTypes::char20',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/EV_ORDER_GUID' => 'BarnetTypes::char32',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/SYSTEM' => 'BarnetTypes::char10',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN' => 'BarnetTypes::TABLE_OF_BAPIRET2',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_ID' => 'BarnetTypes::char35',
+ 'Z_CRM_SERVICE_ORDER_CREATE' => 'BarnetElements::Z_CRM_SERVICE_ORDER_CREATE',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/REGION' => 'BarnetTypes::char3',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/LOG_MSG_NO' => 'BarnetTypes::numeric6',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/MESSAGE_V4' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/FIELD' => 'BarnetTypes::char30',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/SYSTEM' => 'BarnetTypes::char10',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/COUNTY' => 'BarnetTypes::char30',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item/LOG_MSG_NO' => 'BarnetTypes::numeric6',
+ 'Z_CRM_SERVICE_ORDER_CREATE.Exception/Message' => 'BarnetTypes::RfcException::Message',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IT_PROBLEM_DESC' => 'BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT',
+ 'Z_CRM_SERVICE_ORDER_CREATE/ET_RETURN/item' => 'BarnetTypes::BAPIRET2',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/CITY' => 'BarnetTypes::char30',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/MESSAGE_V4' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATE.Exception' => 'BarnetElements::Z_CRM_SERVICE_ORDER_CREATE::Exception',
+ 'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/STREETNUMBER' => 'BarnetTypes::char5',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/ID' => 'BarnetTypes::char20',
+ 'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_PROBLEM_LOC/STREET' => 'BarnetTypes::char30',
+ 'Z_CRM_SERVICE_ORDER_CREATE.Exception/Message/Number' => 'BarnetTypes::RfcException::Message::Number',
+ 'Z_CRM_SERVICE_ORDER_CREATE/IV_KBID' => 'BarnetTypes::char50',
+ 'Z_CRM_SERVICE_ORDER_CREATEResponse/ET_RETURN/item/MESSAGE_V3' => 'BarnetTypes::char50'
+ };
+;
+
+sub get_class {
+ my $name = join '/', @{ $_[1] };
+ return $typemap_1->{ $name };
+}
+
+sub get_typemap {
+ return $typemap_1;
+}
+
+1;
+
+__END__
+
+__END__
+
+=pod
+
+=head1 NAME
+
+BarnetTypemaps::service - typemap for service
+
+=head1 DESCRIPTION
+
+Typemap created by SOAP::WSDL for map-based SOAP message parsers.
+
+=cut
+
diff --git a/perllib/BarnetTypes/BAPIRET2.pm b/perllib/BarnetTypes/BAPIRET2.pm
new file mode 100644
index 000000000..2ca20894c
--- /dev/null
+++ b/perllib/BarnetTypes/BAPIRET2.pm
@@ -0,0 +1,219 @@
+package BarnetTypes::BAPIRET2;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %TYPE_of :ATTR(:get<TYPE>);
+my %ID_of :ATTR(:get<ID>);
+my %NUMBER_of :ATTR(:get<NUMBER>);
+my %MESSAGE_of :ATTR(:get<MESSAGE>);
+my %LOG_NO_of :ATTR(:get<LOG_NO>);
+my %LOG_MSG_NO_of :ATTR(:get<LOG_MSG_NO>);
+my %MESSAGE_V1_of :ATTR(:get<MESSAGE_V1>);
+my %MESSAGE_V2_of :ATTR(:get<MESSAGE_V2>);
+my %MESSAGE_V3_of :ATTR(:get<MESSAGE_V3>);
+my %MESSAGE_V4_of :ATTR(:get<MESSAGE_V4>);
+my %PARAMETER_of :ATTR(:get<PARAMETER>);
+my %ROW_of :ATTR(:get<ROW>);
+my %FIELD_of :ATTR(:get<FIELD>);
+my %SYSTEM_of :ATTR(:get<SYSTEM>);
+
+__PACKAGE__->_factory(
+ [ qw( TYPE
+ ID
+ NUMBER
+ MESSAGE
+ LOG_NO
+ LOG_MSG_NO
+ MESSAGE_V1
+ MESSAGE_V2
+ MESSAGE_V3
+ MESSAGE_V4
+ PARAMETER
+ ROW
+ FIELD
+ SYSTEM
+
+ ) ],
+ {
+ 'TYPE' => \%TYPE_of,
+ 'ID' => \%ID_of,
+ 'NUMBER' => \%NUMBER_of,
+ 'MESSAGE' => \%MESSAGE_of,
+ 'LOG_NO' => \%LOG_NO_of,
+ 'LOG_MSG_NO' => \%LOG_MSG_NO_of,
+ 'MESSAGE_V1' => \%MESSAGE_V1_of,
+ 'MESSAGE_V2' => \%MESSAGE_V2_of,
+ 'MESSAGE_V3' => \%MESSAGE_V3_of,
+ 'MESSAGE_V4' => \%MESSAGE_V4_of,
+ 'PARAMETER' => \%PARAMETER_of,
+ 'ROW' => \%ROW_of,
+ 'FIELD' => \%FIELD_of,
+ 'SYSTEM' => \%SYSTEM_of,
+ },
+ {
+ 'TYPE' => 'BarnetTypes::char1',
+ 'ID' => 'BarnetTypes::char20',
+ 'NUMBER' => 'BarnetTypes::numeric3',
+ 'MESSAGE' => 'BarnetTypes::char220',
+ 'LOG_NO' => 'BarnetTypes::char20',
+ 'LOG_MSG_NO' => 'BarnetTypes::numeric6',
+ 'MESSAGE_V1' => 'BarnetTypes::char50',
+ 'MESSAGE_V2' => 'BarnetTypes::char50',
+ 'MESSAGE_V3' => 'BarnetTypes::char50',
+ 'MESSAGE_V4' => 'BarnetTypes::char50',
+ 'PARAMETER' => 'BarnetTypes::char32',
+ 'ROW' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
+ 'FIELD' => 'BarnetTypes::char30',
+ 'SYSTEM' => 'BarnetTypes::char10',
+ },
+ {
+
+ 'TYPE' => 'TYPE',
+ 'ID' => 'ID',
+ 'NUMBER' => 'NUMBER',
+ 'MESSAGE' => 'MESSAGE',
+ 'LOG_NO' => 'LOG_NO',
+ 'LOG_MSG_NO' => 'LOG_MSG_NO',
+ 'MESSAGE_V1' => 'MESSAGE_V1',
+ 'MESSAGE_V2' => 'MESSAGE_V2',
+ 'MESSAGE_V3' => 'MESSAGE_V3',
+ 'MESSAGE_V4' => 'MESSAGE_V4',
+ 'PARAMETER' => 'PARAMETER',
+ 'ROW' => 'ROW',
+ 'FIELD' => 'FIELD',
+ 'SYSTEM' => 'SYSTEM',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::BAPIRET2
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+BAPIRET2 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * TYPE
+
+
+=item * ID
+
+
+=item * NUMBER
+
+
+=item * MESSAGE
+
+
+=item * LOG_NO
+
+
+=item * LOG_MSG_NO
+
+
+=item * MESSAGE_V1
+
+
+=item * MESSAGE_V2
+
+
+=item * MESSAGE_V3
+
+
+=item * MESSAGE_V4
+
+
+=item * PARAMETER
+
+
+=item * ROW
+
+
+=item * FIELD
+
+
+=item * SYSTEM
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::BAPIRET2
+ TYPE => $some_value, # char1
+ ID => $some_value, # char20
+ NUMBER => $some_value, # numeric3
+ MESSAGE => $some_value, # char220
+ LOG_NO => $some_value, # char20
+ LOG_MSG_NO => $some_value, # numeric6
+ MESSAGE_V1 => $some_value, # char50
+ MESSAGE_V2 => $some_value, # char50
+ MESSAGE_V3 => $some_value, # char50
+ MESSAGE_V4 => $some_value, # char50
+ PARAMETER => $some_value, # char32
+ ROW => $some_value, # int
+ FIELD => $some_value, # char30
+ SYSTEM => $some_value, # char10
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/BAPI_TTET_ADDRESS_COM.pm b/perllib/BarnetTypes/BAPI_TTET_ADDRESS_COM.pm
new file mode 100644
index 000000000..b4a8b00ca
--- /dev/null
+++ b/perllib/BarnetTypes/BAPI_TTET_ADDRESS_COM.pm
@@ -0,0 +1,165 @@
+package BarnetTypes::BAPI_TTET_ADDRESS_COM;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %COUNTRY2_of :ATTR(:get<COUNTRY2>);
+my %REGION_of :ATTR(:get<REGION>);
+my %COUNTY_of :ATTR(:get<COUNTY>);
+my %CITY_of :ATTR(:get<CITY>);
+my %POSTALCODE_of :ATTR(:get<POSTALCODE>);
+my %STREET_of :ATTR(:get<STREET>);
+my %STREETNUMBER_of :ATTR(:get<STREETNUMBER>);
+my %GEOCODE_of :ATTR(:get<GEOCODE>);
+
+__PACKAGE__->_factory(
+ [ qw( COUNTRY2
+ REGION
+ COUNTY
+ CITY
+ POSTALCODE
+ STREET
+ STREETNUMBER
+ GEOCODE
+
+ ) ],
+ {
+ 'COUNTRY2' => \%COUNTRY2_of,
+ 'REGION' => \%REGION_of,
+ 'COUNTY' => \%COUNTY_of,
+ 'CITY' => \%CITY_of,
+ 'POSTALCODE' => \%POSTALCODE_of,
+ 'STREET' => \%STREET_of,
+ 'STREETNUMBER' => \%STREETNUMBER_of,
+ 'GEOCODE' => \%GEOCODE_of,
+ },
+ {
+ 'COUNTRY2' => 'BarnetTypes::char2',
+ 'REGION' => 'BarnetTypes::char3',
+ 'COUNTY' => 'BarnetTypes::char30',
+ 'CITY' => 'BarnetTypes::char30',
+ 'POSTALCODE' => 'BarnetTypes::char10',
+ 'STREET' => 'BarnetTypes::char30',
+ 'STREETNUMBER' => 'BarnetTypes::char5',
+ 'GEOCODE' => 'BarnetTypes::char32',
+ },
+ {
+
+ 'COUNTRY2' => 'COUNTRY2',
+ 'REGION' => 'REGION',
+ 'COUNTY' => 'COUNTY',
+ 'CITY' => 'CITY',
+ 'POSTALCODE' => 'POSTALCODE',
+ 'STREET' => 'STREET',
+ 'STREETNUMBER' => 'STREETNUMBER',
+ 'GEOCODE' => 'GEOCODE',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::BAPI_TTET_ADDRESS_COM
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+BAPI_TTET_ADDRESS_COM from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * COUNTRY2
+
+
+=item * REGION
+
+
+=item * COUNTY
+
+
+=item * CITY
+
+
+=item * POSTALCODE
+
+
+=item * STREET
+
+
+=item * STREETNUMBER
+
+
+=item * GEOCODE
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::BAPI_TTET_ADDRESS_COM
+ COUNTRY2 => $some_value, # char2
+ REGION => $some_value, # char3
+ COUNTY => $some_value, # char30
+ CITY => $some_value, # char30
+ POSTALCODE => $some_value, # char10
+ STREET => $some_value, # char30
+ STREETNUMBER => $some_value, # char5
+ GEOCODE => $some_value, # char32
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/CRMT_SERVICE_REQUEST_TEXT.pm b/perllib/BarnetTypes/CRMT_SERVICE_REQUEST_TEXT.pm
new file mode 100644
index 000000000..39e2ad1ce
--- /dev/null
+++ b/perllib/BarnetTypes/CRMT_SERVICE_REQUEST_TEXT.pm
@@ -0,0 +1,102 @@
+package BarnetTypes::CRMT_SERVICE_REQUEST_TEXT;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %TEXT_LINE_of :ATTR(:get<TEXT_LINE>);
+
+__PACKAGE__->_factory(
+ [ qw( TEXT_LINE
+
+ ) ],
+ {
+ 'TEXT_LINE' => \%TEXT_LINE_of,
+ },
+ {
+ 'TEXT_LINE' => 'BarnetTypes::char132',
+ },
+ {
+
+ 'TEXT_LINE' => 'TEXT_LINE',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::CRMT_SERVICE_REQUEST_TEXT
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+CRMT_SERVICE_REQUEST_TEXT from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * TEXT_LINE
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::CRMT_SERVICE_REQUEST_TEXT
+ TEXT_LINE => $some_value, # char132
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/RfcException/Message.pm b/perllib/BarnetTypes/RfcException/Message.pm
new file mode 100644
index 000000000..71b94bf7c
--- /dev/null
+++ b/perllib/BarnetTypes/RfcException/Message.pm
@@ -0,0 +1,111 @@
+package BarnetTypes::RfcException::Message;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %ID_of :ATTR(:get<ID>);
+my %Number_of :ATTR(:get<Number>);
+
+__PACKAGE__->_factory(
+ [ qw( ID
+ Number
+
+ ) ],
+ {
+ 'ID' => \%ID_of,
+ 'Number' => \%Number_of,
+ },
+ {
+ 'ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
+ 'Number' => 'BarnetTypes::RfcException::Message::Number',
+ },
+ {
+
+ 'ID' => 'ID',
+ 'Number' => 'Number',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::RfcException::Message
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+RfcException.Message from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * ID
+
+
+=item * Number
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::RfcException::Message
+ ID => $some_value, # string
+ Number => $some_value, # RfcException.Message.Number
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/RfcException/Message/Number.pm b/perllib/BarnetTypes/RfcException/Message/Number.pm
new file mode 100644
index 000000000..9353df454
--- /dev/null
+++ b/perllib/BarnetTypes/RfcException/Message/Number.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::RfcException::Message::Number;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+RfcException.Message.Number from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/TABLE_OF_BAPIRET2.pm b/perllib/BarnetTypes/TABLE_OF_BAPIRET2.pm
new file mode 100644
index 000000000..c248bc907
--- /dev/null
+++ b/perllib/BarnetTypes/TABLE_OF_BAPIRET2.pm
@@ -0,0 +1,117 @@
+package BarnetTypes::TABLE_OF_BAPIRET2;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %item_of :ATTR(:get<item>);
+
+__PACKAGE__->_factory(
+ [ qw( item
+
+ ) ],
+ {
+ 'item' => \%item_of,
+ },
+ {
+ 'item' => 'BarnetTypes::BAPIRET2',
+ },
+ {
+
+ 'item' => 'item',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::TABLE_OF_BAPIRET2
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+TABLE_OF_BAPIRET2 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * item
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::TABLE_OF_BAPIRET2
+ item => { # BarnetTypes::BAPIRET2
+ TYPE => $some_value, # char1
+ ID => $some_value, # char20
+ NUMBER => $some_value, # numeric3
+ MESSAGE => $some_value, # char220
+ LOG_NO => $some_value, # char20
+ LOG_MSG_NO => $some_value, # numeric6
+ MESSAGE_V1 => $some_value, # char50
+ MESSAGE_V2 => $some_value, # char50
+ MESSAGE_V3 => $some_value, # char50
+ MESSAGE_V4 => $some_value, # char50
+ PARAMETER => $some_value, # char32
+ ROW => $some_value, # int
+ FIELD => $some_value, # char30
+ SYSTEM => $some_value, # char10
+ },
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/TABLE_OF_CRMT_SERVICE_REQUEST_TEXT.pm b/perllib/BarnetTypes/TABLE_OF_CRMT_SERVICE_REQUEST_TEXT.pm
new file mode 100644
index 000000000..62eb7b774
--- /dev/null
+++ b/perllib/BarnetTypes/TABLE_OF_CRMT_SERVICE_REQUEST_TEXT.pm
@@ -0,0 +1,104 @@
+package BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %item_of :ATTR(:get<item>);
+
+__PACKAGE__->_factory(
+ [ qw( item
+
+ ) ],
+ {
+ 'item' => \%item_of,
+ },
+ {
+ 'item' => 'BarnetTypes::CRMT_SERVICE_REQUEST_TEXT',
+ },
+ {
+
+ 'item' => 'item',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+TABLE_OF_CRMT_SERVICE_REQUEST_TEXT from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * item
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::TABLE_OF_CRMT_SERVICE_REQUEST_TEXT
+ item => { # BarnetTypes::CRMT_SERVICE_REQUEST_TEXT
+ TEXT_LINE => $some_value, # char132
+ },
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcException.pm b/perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcException.pm
new file mode 100644
index 000000000..8d04adf53
--- /dev/null
+++ b/perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcException.pm
@@ -0,0 +1,123 @@
+package BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcException;
+use strict;
+use warnings;
+
+
+__PACKAGE__->_set_element_form_qualified(0);
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions' };
+
+our $XML_ATTRIBUTE_CLASS;
+undef $XML_ATTRIBUTE_CLASS;
+
+sub __get_attr_class {
+ return $XML_ATTRIBUTE_CLASS;
+}
+
+use Class::Std::Fast::Storable constructor => 'none';
+use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
+
+Class::Std::initialize();
+
+{ # BLOCK to scope variables
+
+my %Name_of :ATTR(:get<Name>);
+my %Text_of :ATTR(:get<Text>);
+my %Message_of :ATTR(:get<Message>);
+
+__PACKAGE__->_factory(
+ [ qw( Name
+ Text
+ Message
+
+ ) ],
+ {
+ 'Name' => \%Name_of,
+ 'Text' => \%Text_of,
+ 'Message' => \%Message_of,
+ },
+ {
+ 'Name' => 'BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcExceptions',
+ 'Text' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
+ 'Message' => 'BarnetTypes::RfcException::Message',
+ },
+ {
+
+ 'Name' => 'Name',
+ 'Text' => 'Text',
+ 'Message' => 'Message',
+ }
+);
+
+} # end BLOCK
+
+
+
+
+
+
+
+1;
+
+
+=pod
+
+=head1 NAME
+
+BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcException
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined complexType
+Z_CRM_SERVICE_ORDER_CREATE.RfcException from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+
+=head2 PROPERTIES
+
+The following properties may be accessed using get_PROPERTY / set_PROPERTY
+methods:
+
+=over
+
+=item * Name
+
+
+=item * Text
+
+
+=item * Message
+
+
+
+
+=back
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor. The following data structure may be passed to new():
+
+ { # BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcException
+ Name => $some_value, # Z_CRM_SERVICE_ORDER_CREATE.RfcExceptions
+ Text => $some_value, # string
+ Message => { # BarnetTypes::RfcException::Message
+ ID => $some_value, # string
+ Number => $some_value, # RfcException.Message.Number
+ },
+ },
+
+
+
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcExceptions.pm b/perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcExceptions.pm
new file mode 100644
index 000000000..ffc2237bc
--- /dev/null
+++ b/perllib/BarnetTypes/Z_CRM_SERVICE_ORDER_CREATE/RfcExceptions.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::Z_CRM_SERVICE_ORDER_CREATE::RfcExceptions;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+Z_CRM_SERVICE_ORDER_CREATE.RfcExceptions from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char1.pm b/perllib/BarnetTypes/char1.pm
new file mode 100644
index 000000000..d0bab8e5e
--- /dev/null
+++ b/perllib/BarnetTypes/char1.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char1;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char1 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char10.pm b/perllib/BarnetTypes/char10.pm
new file mode 100644
index 000000000..6ff454e4b
--- /dev/null
+++ b/perllib/BarnetTypes/char10.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char10;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char10 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char132.pm b/perllib/BarnetTypes/char132.pm
new file mode 100644
index 000000000..46a41077b
--- /dev/null
+++ b/perllib/BarnetTypes/char132.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char132;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char132 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char2.pm b/perllib/BarnetTypes/char2.pm
new file mode 100644
index 000000000..35c476fbe
--- /dev/null
+++ b/perllib/BarnetTypes/char2.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char2;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char2 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char20.pm b/perllib/BarnetTypes/char20.pm
new file mode 100644
index 000000000..1c2df092a
--- /dev/null
+++ b/perllib/BarnetTypes/char20.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char20;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char20 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char220.pm b/perllib/BarnetTypes/char220.pm
new file mode 100644
index 000000000..7ccde81f8
--- /dev/null
+++ b/perllib/BarnetTypes/char220.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char220;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char220 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char241.pm b/perllib/BarnetTypes/char241.pm
new file mode 100644
index 000000000..e6567554f
--- /dev/null
+++ b/perllib/BarnetTypes/char241.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char241;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char241 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char3.pm b/perllib/BarnetTypes/char3.pm
new file mode 100644
index 000000000..f9d001cda
--- /dev/null
+++ b/perllib/BarnetTypes/char3.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char3;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char3 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char30.pm b/perllib/BarnetTypes/char30.pm
new file mode 100644
index 000000000..91d98eb30
--- /dev/null
+++ b/perllib/BarnetTypes/char30.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char30;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char30 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char32.pm b/perllib/BarnetTypes/char32.pm
new file mode 100644
index 000000000..c5efdaabd
--- /dev/null
+++ b/perllib/BarnetTypes/char32.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char32;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char32 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char35.pm b/perllib/BarnetTypes/char35.pm
new file mode 100644
index 000000000..40aef3d7a
--- /dev/null
+++ b/perllib/BarnetTypes/char35.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char35;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char35 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char40.pm b/perllib/BarnetTypes/char40.pm
new file mode 100644
index 000000000..4402875c1
--- /dev/null
+++ b/perllib/BarnetTypes/char40.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char40;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char40 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char5.pm b/perllib/BarnetTypes/char5.pm
new file mode 100644
index 000000000..fed108437
--- /dev/null
+++ b/perllib/BarnetTypes/char5.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char5;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char5 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/char50.pm b/perllib/BarnetTypes/char50.pm
new file mode 100644
index 000000000..34e5720d1
--- /dev/null
+++ b/perllib/BarnetTypes/char50.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::char50;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+char50 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/numeric3.pm b/perllib/BarnetTypes/numeric3.pm
new file mode 100644
index 000000000..c473d2866
--- /dev/null
+++ b/perllib/BarnetTypes/numeric3.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::numeric3;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+numeric3 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/BarnetTypes/numeric6.pm b/perllib/BarnetTypes/numeric6.pm
new file mode 100644
index 000000000..b5438c1aa
--- /dev/null
+++ b/perllib/BarnetTypes/numeric6.pm
@@ -0,0 +1,65 @@
+package BarnetTypes::numeric6;
+use strict;
+use warnings;
+
+sub get_xmlns { 'urn:sap-com:document:sap:rfc:functions'};
+
+# derivation by restriction
+use base qw(
+ SOAP::WSDL::XSD::Typelib::Builtin::string);
+
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+
+
+=head1 DESCRIPTION
+
+Perl data type class for the XML Schema defined simpleType
+numeric6 from the namespace urn:sap-com:document:sap:rfc:functions.
+
+
+
+
+
+This clase is derived from
+ SOAP::WSDL::XSD::Typelib::Builtin::string
+. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
+like it's base type.
+
+# Description of restrictions not implemented yet.
+
+
+=head1 METHODS
+
+=head2 new
+
+Constructor.
+
+=head2 get_value / set_value
+
+Getter and setter for the simpleType's value.
+
+=head1 OVERLOADING
+
+Depending on the simple type's base type, the following operations are overloaded
+
+ Stringification
+ Numerification
+ Boolification
+
+Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
+
+=head1 AUTHOR
+
+Generated by SOAP::WSDL
+
+=cut
+
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index af4cdd5aa..6d22a0556 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -78,6 +78,8 @@ partial
=cut
+use constant COUNCIL_ID_BARNET => 2489;
+
sub report_new : Path : Args(0) {
my ( $self, $c ) = @_;
@@ -545,9 +547,15 @@ sub setup_categories_and_councils : Private {
} elsif ($first_council->{type} eq 'LBO') {
$area_ids_to_list{ $first_council->{id} } = 1;
+ my @local_categories;
+ if ($first_council->{id} == COUNCIL_ID_BARNET) {
+ @local_categories = sort(keys %{ Utils::barnet_categories() }); # removed 'Other' option
+ } else {
+ @local_categories = sort keys %{ Utils::london_categories() }
+ }
@category_options = (
_('-- Pick a category --'),
- sort keys %{ Utils::london_categories() }
+ @local_categories
);
$category_label = _('Category:');
@@ -733,8 +741,15 @@ sub process_report : Private {
$councils = join( ',', @{ $c->stash->{area_ids_to_list} } ) || -1;
$report->council( $councils );
- } elsif ( $first_council->{type} eq 'LBO') {
+ } elsif ( $first_council->{id} == COUNCIL_ID_BARNET ) {
+ unless ( exists Utils::barnet_categories()->{ $report->category } or $report->category eq 'Other') {
+ $c->stash->{field_errors}->{category} = _('Please choose a category');
+ }
+ $report->council( $first_council->{id} );
+
+ } elsif ( $first_council->{type} eq 'LBO') {
+
unless ( Utils::london_categories()->{ $report->category } ) {
$c->stash->{field_errors}->{category} = _('Please choose a category');
}
diff --git a/perllib/FixMyStreet/DB.pm b/perllib/FixMyStreet/DB.pm
index 18c8cc2ca..a1767abe9 100644
--- a/perllib/FixMyStreet/DB.pm
+++ b/perllib/FixMyStreet/DB.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB;
# Created by DBIx::Class::Schema::Loader
@@ -10,8 +11,9 @@ use base 'DBIx::Class::Schema';
__PACKAGE__->load_namespaces;
-# Created by DBIx::Class::Schema::Loader v0.07009 @ 2011-03-01 15:43:43
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:tJZ+CpaAfZVPrctDXTZTuQ
+
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CjFpUvon7KggFM7OF7VK/w
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;
diff --git a/perllib/FixMyStreet/DB/Result/Abuse.pm b/perllib/FixMyStreet/DB/Result/Abuse.pm
index b1cf9c1ed..e8e554afa 100644
--- a/perllib/FixMyStreet/DB/Result/Abuse.pm
+++ b/perllib/FixMyStreet/DB/Result/Abuse.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Abuse;
# Created by DBIx::Class::Schema::Loader
@@ -7,15 +8,14 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("abuse");
__PACKAGE__->add_columns("email", { data_type => "text", is_nullable => 0 });
__PACKAGE__->set_primary_key("email");
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:IuTLiJSDZGLF/WX8q3iKIQ
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:PnQhGMx+ktK++3gWOMJBpQ
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;
diff --git a/perllib/FixMyStreet/DB/Result/AdminLog.pm b/perllib/FixMyStreet/DB/Result/AdminLog.pm
index da97950a0..ede786871 100644
--- a/perllib/FixMyStreet/DB/Result/AdminLog.pm
+++ b/perllib/FixMyStreet/DB/Result/AdminLog.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::AdminLog;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("admin_log");
__PACKAGE__->add_columns(
@@ -36,8 +36,8 @@ __PACKAGE__->add_columns(
__PACKAGE__->set_primary_key("id");
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:7427CuN3/6IL2GxiQDoWUA
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:+NlSH8U+beRjBZl8CpqK9A
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/Alert.pm b/perllib/FixMyStreet/DB/Result/Alert.pm
index eddd98f37..ca9ad45c2 100644
--- a/perllib/FixMyStreet/DB/Result/Alert.pm
+++ b/perllib/FixMyStreet/DB/Result/Alert.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Alert;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("alert");
__PACKAGE__->add_columns(
@@ -24,6 +24,8 @@ __PACKAGE__->add_columns(
{ data_type => "text", is_nullable => 1 },
"parameter2",
{ data_type => "text", is_nullable => 1 },
+ "user_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
"confirmed",
{ data_type => "integer", default_value => 0, is_nullable => 0 },
"lang",
@@ -40,8 +42,6 @@ __PACKAGE__->add_columns(
},
"whendisabled",
{ data_type => "timestamp", is_nullable => 1 },
- "user_id",
- { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
@@ -50,22 +50,22 @@ __PACKAGE__->belongs_to(
{ ref => "alert_type" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
+__PACKAGE__->has_many(
+ "alerts_sent",
+ "FixMyStreet::DB::Result::AlertSent",
+ { "foreign.alert_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
__PACKAGE__->belongs_to(
"user",
"FixMyStreet::DB::Result::User",
{ id => "user_id" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
-__PACKAGE__->has_many(
- "alert_sents",
- "FixMyStreet::DB::Result::AlertSent",
- { "foreign.alert_id" => "self.id" },
- { cascade_copy => 0, cascade_delete => 0 },
-);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:d2TrE9UIZdXu3eXYJH0Zmw
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:vump36YxUO4FQi5Do6DwvA
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/AlertSent.pm b/perllib/FixMyStreet/DB/Result/AlertSent.pm
index a901c2fde..a537c95cd 100644
--- a/perllib/FixMyStreet/DB/Result/AlertSent.pm
+++ b/perllib/FixMyStreet/DB/Result/AlertSent.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::AlertSent;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("alert_sent");
__PACKAGE__->add_columns(
@@ -30,8 +30,8 @@ __PACKAGE__->belongs_to(
);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:fTiWIoriQUvHpWc9PpFLvA
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:oN+36hDWJuc0hqkCW9BHOw
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/AlertType.pm b/perllib/FixMyStreet/DB/Result/AlertType.pm
index d23a2983d..3aa9677e0 100644
--- a/perllib/FixMyStreet/DB/Result/AlertType.pm
+++ b/perllib/FixMyStreet/DB/Result/AlertType.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::AlertType;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("alert_type");
__PACKAGE__->add_columns(
@@ -47,8 +47,8 @@ __PACKAGE__->has_many(
);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:+PKqo7IZ4MlM9ur4V2P9tA
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:KDBYzNEAM5lPvZjb9cv22g
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/Comment.pm b/perllib/FixMyStreet/DB/Result/Comment.pm
index 195fe4019..5b45c63a8 100644
--- a/perllib/FixMyStreet/DB/Result/Comment.pm
+++ b/perllib/FixMyStreet/DB/Result/Comment.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Comment;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("comment");
__PACKAGE__->add_columns(
@@ -20,6 +20,10 @@ __PACKAGE__->add_columns(
},
"problem_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "user_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "anonymous",
+ { data_type => "boolean", is_nullable => 0 },
"name",
{ data_type => "text", is_nullable => 1 },
"website",
@@ -48,30 +52,26 @@ __PACKAGE__->add_columns(
{ data_type => "boolean", is_nullable => 0 },
"mark_open",
{ data_type => "boolean", default_value => \"false", is_nullable => 0 },
- "user_id",
- { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
- "anonymous",
- { data_type => "boolean", is_nullable => 0 },
"problem_state",
{ data_type => "text", is_nullable => 1 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
- "user",
- "FixMyStreet::DB::Result::User",
- { id => "user_id" },
- { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
-);
-__PACKAGE__->belongs_to(
"problem",
"FixMyStreet::DB::Result::Problem",
{ id => "problem_id" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
+__PACKAGE__->belongs_to(
+ "user",
+ "FixMyStreet::DB::Result::User",
+ { id => "user_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-27 10:07:32
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ilLn3dlagg5COdpZDmzrVQ
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:E+96vo/AB0zz1jAEPj/OKw
use DateTime::TimeZone;
use Image::Size;
diff --git a/perllib/FixMyStreet/DB/Result/Contact.pm b/perllib/FixMyStreet/DB/Result/Contact.pm
index 941e4e1bb..c32b75d0c 100644
--- a/perllib/FixMyStreet/DB/Result/Contact.pm
+++ b/perllib/FixMyStreet/DB/Result/Contact.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Contact;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("contacts");
__PACKAGE__->add_columns(
@@ -40,8 +40,9 @@ __PACKAGE__->add_columns(
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint("contacts_area_id_category_idx", ["area_id", "category"]);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-08-01 10:07:59
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:4y6yRz4rMN66pBpkzfJJhg
+
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:hyvU0bMWSFxEPAJT7wqM/Q
__PACKAGE__->filter_column(
extra => {
diff --git a/perllib/FixMyStreet/DB/Result/ContactsHistory.pm b/perllib/FixMyStreet/DB/Result/ContactsHistory.pm
index 811a06b44..deb00fb95 100644
--- a/perllib/FixMyStreet/DB/Result/ContactsHistory.pm
+++ b/perllib/FixMyStreet/DB/Result/ContactsHistory.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::ContactsHistory;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("contacts_history");
__PACKAGE__->add_columns(
@@ -40,8 +40,8 @@ __PACKAGE__->add_columns(
__PACKAGE__->set_primary_key("contacts_history_id");
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9APvBwAOebG5g4MGxJuVKQ
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dN2ueIDoP3d/+Mg1UDqsMw
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/Open311conf.pm b/perllib/FixMyStreet/DB/Result/Open311conf.pm
index 0a5784560..742a12ebd 100644
--- a/perllib/FixMyStreet/DB/Result/Open311conf.pm
+++ b/perllib/FixMyStreet/DB/Result/Open311conf.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Open311conf;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("open311conf");
__PACKAGE__->add_columns(
@@ -26,13 +26,15 @@ __PACKAGE__->add_columns(
{ data_type => "text", is_nullable => 1 },
"api_key",
{ data_type => "text", is_nullable => 1 },
+ "send_method",
+ { data_type => "text", is_nullable => 1 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint("open311conf_area_id_key", ["area_id"]);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-07-29 18:09:25
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ryqCpvwjNtQrZm4I3s0hxg
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ClYnPB2gsKapnfHuco5d/w
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index ce7488703..4b738b66c 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Problem;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("problem");
__PACKAGE__->add_columns(
@@ -84,6 +84,12 @@ __PACKAGE__->add_columns(
{ data_type => "boolean", default_value => \"false", is_nullable => 0 },
"geocode",
{ data_type => "bytea", is_nullable => 1 },
+ "send_fail_count",
+ { data_type => "integer", is_nullable => 1 },
+ "send_fail_reason",
+ { data_type => "text", is_nullable => 1 },
+ "send_fail_timestamp",
+ { data_type => "timestamp", is_nullable => 1 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->has_many(
@@ -92,22 +98,22 @@ __PACKAGE__->has_many(
{ "foreign.problem_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
-__PACKAGE__->belongs_to(
- "user",
- "FixMyStreet::DB::Result::User",
- { id => "user_id" },
- { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
-);
__PACKAGE__->has_many(
"questionnaires",
"FixMyStreet::DB::Result::Questionnaire",
{ "foreign.problem_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
+__PACKAGE__->belongs_to(
+ "user",
+ "FixMyStreet::DB::Result::User",
+ { id => "user_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-09-19 14:38:43
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nq8Ufn/SEoDGSrrGlHIxag
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-16 10:08:56
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:VODeZlWk8l/+IzBBlRNV0A
# Add fake relationship to stored procedure table
__PACKAGE__->has_one(
@@ -563,6 +569,35 @@ sub body {
}
# TODO Some/much of this could be moved to the template
+
+# either:
+# "sent to council 3 mins later"
+# "council ref: XYZ"
+# or
+# "sent to council 3 mins later, their ref: XYZ"
+#
+# Note: some silliness with pronouns and the adjacent comma mean this is
+# being presented as a single string rather than two
+sub processed_summary_string {
+ my ( $problem, $c ) = @_;
+ my ($duration_clause, $external_ref_clause);
+ if ($problem->whensent) {
+ $duration_clause = $problem->duration_string($c)
+ }
+ if ($problem->external_id) {
+ if ($duration_clause) {
+ $external_ref_clause = sprintf(_('their ref:&nbsp;%s'), $problem->external_id);
+ } else {
+ $external_ref_clause = sprintf(_('%s ref:&nbsp;%s'), $problem->external_body, $problem->external_id);
+ }
+ }
+ if ($duration_clause and $external_ref_clause) {
+ return "$duration_clause, $external_ref_clause"
+ } else {
+ return $duration_clause || $external_ref_clause
+ }
+}
+
sub duration_string {
my ( $problem, $c ) = @_;
my $body = $problem->body( $c );
diff --git a/perllib/FixMyStreet/DB/Result/Questionnaire.pm b/perllib/FixMyStreet/DB/Result/Questionnaire.pm
index cc4ec300b..b6791603a 100644
--- a/perllib/FixMyStreet/DB/Result/Questionnaire.pm
+++ b/perllib/FixMyStreet/DB/Result/Questionnaire.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Questionnaire;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("questionnaire");
__PACKAGE__->add_columns(
@@ -40,8 +40,8 @@ __PACKAGE__->belongs_to(
);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:QNFqqCg6J4SFlg4zwm7TWw
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:NGlSRjoBpDoIvK3EueqN6Q
use DateTime::TimeZone;
diff --git a/perllib/FixMyStreet/DB/Result/Secret.pm b/perllib/FixMyStreet/DB/Result/Secret.pm
index 8a1fa671d..449dfec0e 100644
--- a/perllib/FixMyStreet/DB/Result/Secret.pm
+++ b/perllib/FixMyStreet/DB/Result/Secret.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Secret;
# Created by DBIx::Class::Schema::Loader
@@ -7,14 +8,13 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("secret");
__PACKAGE__->add_columns("secret", { data_type => "text", is_nullable => 0 });
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:MfqW1K0aFtwpa/1c/UwHjg
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9XiWSKJ1PD3LSYjrSA3drw
# You can replace this text with custom code or comments, and it will be preserved on regeneration
diff --git a/perllib/FixMyStreet/DB/Result/Session.pm b/perllib/FixMyStreet/DB/Result/Session.pm
index 9d5d509dc..4713c99eb 100644
--- a/perllib/FixMyStreet/DB/Result/Session.pm
+++ b/perllib/FixMyStreet/DB/Result/Session.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Session;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("sessions");
__PACKAGE__->add_columns(
@@ -21,8 +21,8 @@ __PACKAGE__->add_columns(
__PACKAGE__->set_primary_key("id");
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:TagSQOXnDttkwfJ7oDH8Yw
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:MVmCn4gLQWXTDIIaDHiVmA
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;
diff --git a/perllib/FixMyStreet/DB/Result/Token.pm b/perllib/FixMyStreet/DB/Result/Token.pm
index 3a900858d..b223ada3a 100644
--- a/perllib/FixMyStreet/DB/Result/Token.pm
+++ b/perllib/FixMyStreet/DB/Result/Token.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::Token;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("token");
__PACKAGE__->add_columns(
@@ -27,8 +27,8 @@ __PACKAGE__->add_columns(
__PACKAGE__->set_primary_key("scope", "token");
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-23 15:49:48
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:frl+na3HrIzGw9D1t891nA
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:+LLZ8P5GXqPetuGyrra2vw
# Trying not to use this
# use mySociety::DBHandle qw(dbh);
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm
index 56d726a8d..e13d88b88 100644
--- a/perllib/FixMyStreet/DB/Result/User.pm
+++ b/perllib/FixMyStreet/DB/Result/User.pm
@@ -1,3 +1,4 @@
+use utf8;
package FixMyStreet::DB::Result::User;
# Created by DBIx::Class::Schema::Loader
@@ -7,7 +8,6 @@ use strict;
use warnings;
use base 'DBIx::Class::Core';
-
__PACKAGE__->load_components("FilterColumn", "InflateColumn::DateTime", "EncodedColumn");
__PACKAGE__->table("users");
__PACKAGE__->add_columns(
@@ -53,8 +53,8 @@ __PACKAGE__->has_many(
);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-06-27 10:25:21
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9IHuqRTcHZCqJeBAaiQxzw
+# Created by DBIx::Class::Schema::Loader v0.07017 @ 2012-03-08 17:19:55
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:tM1LUGrqDeQnF4BDgnYXGQ
__PACKAGE__->add_columns(
"password" => {
diff --git a/perllib/SOAP/WSDL/Serializer/XSD.pm b/perllib/SOAP/WSDL/Serializer/XSD.pm
new file mode 100644
index 000000000..f233f74e7
--- /dev/null
+++ b/perllib/SOAP/WSDL/Serializer/XSD.pm
@@ -0,0 +1,148 @@
+#!/usr/bin/perl -w
+package SOAP::WSDL::Serializer::XSD;
+use strict;
+use warnings;
+use Class::Std::Fast::Storable;
+use Scalar::Util qw(blessed);
+
+use version; our $VERSION = qv('2.00.10');
+
+use SOAP::WSDL::Factory::Serializer;
+
+my $SOAP_NS = 'http://schemas.xmlsoap.org/soap/envelope/';
+my $XML_INSTANCE_NS = 'http://www.w3.org/2001/XMLSchema-instance';
+
+sub serialize {
+ my ($self, $args_of_ref) = @_;
+
+ my $opt = $args_of_ref->{ options };
+
+ if (not $opt->{ namespace }->{ $SOAP_NS })
+ {
+ $opt->{ namespace }->{ $SOAP_NS } = 'SOAP-ENV';
+ }
+
+ if (not $opt->{ namespace }->{ $XML_INSTANCE_NS })
+ {
+ $opt->{ namespace }->{ $XML_INSTANCE_NS } = 'xsi';
+ }
+
+ my $soap_prefix = $opt->{ namespace }->{ $SOAP_NS };
+
+ # envelope start with namespaces
+ my $xml = "<$soap_prefix\:Envelope ";
+
+ while (my ($uri, $prefix) = each %{ $opt->{ namespace } })
+ {
+ $xml .= "xmlns:$prefix=\"$uri\" ";
+ }
+ #
+ # add namespace for user-supplied prefix if needed
+ $xml .= "xmlns:$opt->{prefix}=\"" . $args_of_ref->{ body }->get_xmlns() . "\" "
+ if $opt->{prefix};
+
+ # TODO insert encoding
+ $xml.='>';
+ $xml .= $self->serialize_header($args_of_ref->{ method }, $args_of_ref->{ header }, $opt);
+ $xml .= $self->serialize_body($args_of_ref->{ method }, $args_of_ref->{ body }, $opt);
+ $xml .= '</' . $soap_prefix .':Envelope>';
+ return $xml;
+}
+
+sub serialize_header {
+ my ($self, $method, $data, $opt) = @_;
+
+ # header is optional. Leave out if there's no header data
+ return q{} if not $data;
+ return join ( q{},
+ "<$opt->{ namespace }->{ $SOAP_NS }\:Header>",
+ blessed $data ? $data->serialize_qualified : (),
+ "</$opt->{ namespace }->{ $SOAP_NS }\:Header>",
+ );
+}
+
+sub serialize_body {
+ my ($self, $method, $data, $opt) = @_;
+
+ # TODO This one wipes out the old class' XML name globally
+ # Fix in some more appropriate place...
+ # $data->__set_name("$opt->{prefix}:" . $data->__get_name() ) if $opt->{prefix};
+ # fix: -------v from https://rt.cpan.org/Public/Bug/Display.html?id=38035
+ if ( $opt->{prefix} ) {
+ my $body_name = $data->__get_name();
+ $body_name =~ s/.+://;
+ $data->__set_name($opt->{prefix} . ":" . $body_name );
+ }
+ # fix end ----^
+
+ # Body is NOT optional. Serialize to empty body
+ # if we have no data.
+ return join ( q{},
+ "<$opt->{ namespace }->{ $SOAP_NS }\:Body>",
+ defined $data
+ ? ref $data eq 'ARRAY'
+ ? join q{}, map { blessed $_ ? $_->serialize_qualified() : () } @{ $data }
+ : blessed $data
+ ? $opt->{prefix}
+ ? $data->serialize()
+ : $data->serialize_qualified()
+ : ()
+ : (),
+ "</$opt->{ namespace }->{ $SOAP_NS }\:Body>",
+ );
+}
+
+__END__
+
+=pod
+
+=head1 NAME
+
+SOAP:WSDL::Serializer::XSD - Serializer for SOAP::WSDL::XSD::Typelib:: objects
+
+=head1 DESCRIPTION
+
+This is the default serializer for SOAP::WSDL::Client and Interface classes
+generated by SOAP::WSDL
+
+It may be used as a template for creating custom serializers.
+
+See L<SOAP::WSDL::Factory::Serializer|SOAP::WSDL::Factory::Serializer> for
+details on that.
+
+=head1 METHODS
+
+=head2 serialize
+
+Creates a SOAP envelope based on the body and header arguments passed.
+
+Sets SOAP namespaces.
+
+=head2 serialize_body
+
+Serializes a message body to XML
+
+=head2 serialize_header
+
+Serializes a message header to XML
+
+=head1 LICENSE AND COPYRIGHT
+
+Copyright (c) 2007 Martin Kutter. All rights reserved.
+
+This file is part of SOAP-WSDL. You may distribute/modify it under
+the same terms as perl itself
+
+=head1 AUTHOR
+
+Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
+
+=head1 REPOSITORY INFORMATION
+
+ $Rev: 851 $
+ $LastChangedBy: kutterma $
+ $Id: XSD.pm 851 2009-05-15 22:45:18Z kutterma $
+ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Serializer/XSD.pm $
+
+=cut
+
diff --git a/perllib/Utils.pm b/perllib/Utils.pm
index 4e64836c6..6a47fd17d 100644
--- a/perllib/Utils.pm
+++ b/perllib/Utils.pm
@@ -140,6 +140,47 @@ sub london_categories {
};
}
+sub barnet_categories {
+ # The values here are KBIDs from Barnet's system: see bin/send-reports for formatting
+ if (mySociety::Config::get('STAGING_SITE')) { # note staging site must use different KBIDs
+ return {
+ 'Blocked drain' => 255, # Gullies-Blocked
+ 'Dead animal' => 286, # Animals-Dead-Removal
+ 'Dog fouling' => 288, # Dog Fouling-Clear
+ 'Fly tipping' => 347, # Fly tipping-Clear
+ 'Graffiti' => 292, # Graffiti-Removal
+ 'Litter, accumulated' => 349, # Accumulated Litter
+ 'Litter, overflowing bins' => 205, # Litter Bins-Overflowing
+ 'Pavements' => 195, # Pavements-Damaged/Cracked
+ 'Pothole' => 204, # Pothole
+ 'Roads Signs' => 432, # Roads Signs - Maintenance
+ 'Street Lighting' => 251, # Street Lighting
+ 'Traffic Lights' => 103, # Traffic Lights
+ }
+ } else {
+ return {
+ 'Abandoned Vehicle' => 468,
+ 'Accumulated Litter' => 349,
+ 'Dog Bin' => 203,
+ 'Dog Fouling' => 288,
+ 'Drain or Gully' => 256,
+ 'Fly Posting' => 465,
+ 'Fly Tipping' => 449,
+ 'Graffiti' => 292,
+ 'Gritting' => 200,
+ 'Highways' => 186,
+ 'Litter Bin Overflowing' => 205,
+ 'Manhole Cover' => 417,
+ 'Overhanging Foliage' => 421,
+ 'Pavement Damaged/Cracked' => 195,
+ 'Pothole' => 204,
+ 'Road Sign' => 80,
+ 'Roadworks' => 246,
+ 'Street Lighting' => 251,
+ };
+ }
+}
+
=head2 trim_text
my $text = trim_text( $text_to_trim );
diff --git a/templates/web/default/report/_main.html b/templates/web/default/report/_main.html
index 8cc1efec2..552be17e6 100644
--- a/templates/web/default/report/_main.html
+++ b/templates/web/default/report/_main.html
@@ -2,9 +2,12 @@
<p><em>[% problem.meta_line(c) | html %]
[% IF problem.council %]
- [% IF problem.whensent %]
- <small class="council_sent_info"><br>[% problem.duration_string(c) %]</small>
+ [% IF problem.whensent || problem.external_id %]
+ <small class="council_sent_info"><br>
+ [% problem.processed_summary_string(c) %]
+ </small>
[% END %]
+
[% ELSE %]
<br><small>[% loc('Not reported to council') %]</small>
[% END %]
diff --git a/templates/web/fixmystreet/report/new/councils_text_all.html b/templates/web/fixmystreet/report/new/councils_text_all.html
index fb10ec4fd..fe2d5be12 100644
--- a/templates/web/fixmystreet/report/new/councils_text_all.html
+++ b/templates/web/fixmystreet/report/new/councils_text_all.html
@@ -1,5 +1,5 @@
<p>
-[% IF all_councils.${area_ids_to_list.0}.type == 'LBO' %]
+[% IF area_ids_to_list.0 != 2489 && all_councils.${area_ids_to_list.0}.type == 'LBO' %]
[%
tprintf(
loc('All the information you provide here will be sent to <strong>%s</strong> or a relevant local body such as <strong>TfL</strong>, via the London Report-It system.'),
@@ -16,4 +16,4 @@
[% END %]
[% loc('The subject and details of the problem will be public, plus your name if you give us permission.') %]
-</p> \ No newline at end of file
+</p>