2017-04-24 11:49:18 +00:00
|
|
|
package Pear::LocalLoop::Controller::Admin::Organisations;
|
|
|
|
use Mojo::Base 'Mojolicious::Controller';
|
|
|
|
|
2017-07-25 13:33:11 +00:00
|
|
|
use Try::Tiny;
|
2017-08-18 11:56:14 +00:00
|
|
|
use Data::Dumper;
|
2017-07-25 13:33:11 +00:00
|
|
|
|
2017-04-24 11:49:18 +00:00
|
|
|
sub list {
|
|
|
|
my $c = shift;
|
|
|
|
|
|
|
|
my $valid_orgs_rs = $c->schema->resultset('Organisation');
|
|
|
|
my $pending_orgs_rs = $c->schema->resultset('PendingOrganisation');
|
|
|
|
|
|
|
|
$c->stash(
|
|
|
|
valid_orgs_rs => $valid_orgs_rs,
|
|
|
|
pending_orgs_rs => $pending_orgs_rs,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-08-21 14:10:33 +00:00
|
|
|
sub add_org {
|
|
|
|
my $c = shift;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub add_org_submit {
|
|
|
|
my $c = shift;
|
|
|
|
|
|
|
|
my $validation = $c->validation;
|
|
|
|
|
|
|
|
$validation->required('name');
|
|
|
|
$validation->optional('street_name');
|
|
|
|
$validation->required('town');
|
2017-08-25 14:25:52 +00:00
|
|
|
$validation->optional('sector');
|
2017-08-21 14:10:33 +00:00
|
|
|
$validation->optional('postcode')->postcode;
|
|
|
|
|
|
|
|
if ( $validation->has_error ) {
|
|
|
|
$c->flash( error => 'The validation has failed' );
|
|
|
|
$c->app->log->warn(Dumper $validation);
|
|
|
|
return $c->redirect_to( '/admin/organisations/add/' );
|
|
|
|
}
|
|
|
|
|
|
|
|
my $organisation;
|
|
|
|
|
|
|
|
try {
|
|
|
|
$organisation = $c->schema->resultset('Organisation')->create({
|
|
|
|
name => $validation->param('name'),
|
|
|
|
street_name => $validation->param('street_name'),
|
|
|
|
town => $validation->param('town'),
|
2017-08-25 14:25:52 +00:00
|
|
|
sector => $validation->param('sector'),
|
2017-08-21 14:10:33 +00:00
|
|
|
postcode => $validation->param('postcode'),
|
|
|
|
});
|
|
|
|
} finally {
|
|
|
|
if ( @_ ) {
|
|
|
|
$c->flash( error => 'Something went wrong Adding the Organisation' );
|
|
|
|
$c->app->log->warn(Dumper @_);
|
|
|
|
} else {
|
|
|
|
$c->flash( success => 'Added Organisation' );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
$c->redirect_to( '/admin/organisations/add/' );
|
|
|
|
}
|
|
|
|
|
2017-04-24 11:49:18 +00:00
|
|
|
sub valid_read {
|
|
|
|
my $c = shift;
|
|
|
|
my $valid_org = $c->schema->resultset('Organisation')->find( $c->param('id') );
|
2017-07-25 14:44:16 +00:00
|
|
|
my $transactions = $valid_org->transactions->search(
|
|
|
|
undef, {
|
|
|
|
page => $c->param('page') || 1,
|
|
|
|
rows => 10,
|
2017-08-31 10:51:22 +00:00
|
|
|
order_by => { -desc => 'submitted_at' },
|
2017-07-25 14:44:16 +00:00
|
|
|
},
|
|
|
|
);
|
|
|
|
$c->stash(
|
|
|
|
valid_org => $valid_org,
|
|
|
|
transactions => $transactions,
|
|
|
|
);
|
2017-04-24 11:49:18 +00:00
|
|
|
}
|
|
|
|
|
2017-08-18 11:56:14 +00:00
|
|
|
sub valid_edit {
|
|
|
|
my $c = shift;
|
|
|
|
|
|
|
|
my $validation = $c->validation;
|
|
|
|
$validation->required('name');
|
|
|
|
$validation->required('street_name');
|
|
|
|
$validation->required('town');
|
2017-08-25 14:25:52 +00:00
|
|
|
$validation->optional('sector');
|
2017-08-18 11:56:14 +00:00
|
|
|
$validation->required('postcode')->postcode;
|
|
|
|
|
|
|
|
if ( $validation->has_error ) {
|
|
|
|
$c->flash( error => 'The validation has failed' );
|
|
|
|
$c->app->log->warn(Dumper $validation);
|
|
|
|
return $c->redirect_to( '/admin/organisations/valid/' . $c->param('id') );
|
|
|
|
}
|
|
|
|
|
|
|
|
my $valid_org = $c->schema->resultset('Organisation')->find( $c->param('id') );
|
|
|
|
|
|
|
|
try {
|
|
|
|
$c->schema->storage->txn_do( sub {
|
|
|
|
$valid_org->update({
|
|
|
|
name => $validation->param('name'),
|
|
|
|
street_name => $validation->param('street_name'),
|
|
|
|
town => $validation->param('town'),
|
2017-08-25 14:25:52 +00:00
|
|
|
sector => $validation->param('sector'),
|
2017-08-18 11:56:14 +00:00
|
|
|
postcode => $validation->param('postcode'),
|
|
|
|
});
|
|
|
|
} );
|
|
|
|
} finally {
|
|
|
|
if ( @_ ) {
|
|
|
|
$c->flash( error => 'Something went wrong Updating the Organisation' );
|
|
|
|
$c->app->log->warn(Dumper @_);
|
|
|
|
} else {
|
|
|
|
$c->flash( success => 'Updated Organisation' );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
$c->redirect_to( '/admin/organisations/valid/' . $valid_org->id );
|
|
|
|
}
|
|
|
|
|
2017-04-24 11:49:18 +00:00
|
|
|
sub pending_read {
|
|
|
|
my $c = shift;
|
|
|
|
my $pending_org = $c->schema->resultset('PendingOrganisation')->find( $c->param('id') );
|
2017-07-25 14:44:16 +00:00
|
|
|
my $transactions = $pending_org->transactions->search(
|
|
|
|
undef, {
|
|
|
|
page => $c->param('page') || 1,
|
|
|
|
rows => 10,
|
|
|
|
},
|
|
|
|
);
|
|
|
|
$c->stash(
|
|
|
|
pending_org => $pending_org,
|
|
|
|
transactions => $transactions,
|
|
|
|
);
|
2017-04-24 11:49:18 +00:00
|
|
|
}
|
|
|
|
|
2017-08-18 11:56:14 +00:00
|
|
|
sub pending_edit {
|
|
|
|
my $c = shift;
|
|
|
|
|
|
|
|
my $validation = $c->validation;
|
|
|
|
$validation->required('name');
|
|
|
|
$validation->required('street_name');
|
|
|
|
$validation->required('town');
|
|
|
|
$validation->required('postcode')->postcode;
|
|
|
|
|
|
|
|
if ( $validation->has_error ) {
|
|
|
|
$c->flash( error => 'The validation has failed' );
|
|
|
|
$c->app->log->warn(Dumper $validation);
|
|
|
|
return $c->redirect_to( '/admin/organisations/pending/' . $c->param('id') );
|
|
|
|
}
|
|
|
|
|
|
|
|
my $pending_org = $c->schema->resultset('PendingOrganisation')->find( $c->param('id') );
|
|
|
|
|
|
|
|
try {
|
|
|
|
$c->schema->storage->txn_do( sub {
|
|
|
|
$pending_org->update({
|
|
|
|
name => $validation->param('name'),
|
|
|
|
street_name => $validation->param('street_name'),
|
|
|
|
town => $validation->param('town'),
|
|
|
|
postcode => $validation->param('postcode'),
|
|
|
|
});
|
|
|
|
} );
|
|
|
|
} finally {
|
|
|
|
if ( @_ ) {
|
|
|
|
$c->flash( error => 'Something went wrong Updating the Organisation' );
|
|
|
|
$c->app->log->warn(Dumper @_);
|
|
|
|
} else {
|
|
|
|
$c->flash( success => 'Updated Organisation' );
|
|
|
|
}
|
|
|
|
};
|
2017-08-18 15:46:49 +00:00
|
|
|
$c->redirect_to( '/admin/organisations/pending/' . $pending_org->id );
|
2017-08-18 11:56:14 +00:00
|
|
|
}
|
|
|
|
|
2017-04-24 11:49:18 +00:00
|
|
|
sub pending_approve {
|
|
|
|
my $c = shift;
|
|
|
|
my $pending_org = $c->schema->resultset('PendingOrganisation')->find( $c->param('id') );
|
2017-07-25 13:33:11 +00:00
|
|
|
|
|
|
|
my $valid_org;
|
|
|
|
try {
|
|
|
|
$c->schema->storage->txn_do( sub {
|
|
|
|
$valid_org = $c->schema->resultset('Organisation')->create({
|
|
|
|
name => $pending_org->name,
|
|
|
|
street_name => $pending_org->street_name,
|
|
|
|
town => $pending_org->town,
|
|
|
|
postcode => $pending_org->postcode,
|
|
|
|
});
|
|
|
|
$c->copy_transactions_and_delete( $pending_org, $valid_org );
|
|
|
|
} );
|
|
|
|
} finally {
|
|
|
|
if ( @_ ) {
|
|
|
|
$c->flash( error => 'Something went wrong Validating the Organisation' );
|
|
|
|
$c->redirect_to( '/admin/organisations/pending/' . $pending_org->id );
|
|
|
|
} else {
|
|
|
|
$c->flash( success => 'Validated Organisation' );
|
|
|
|
$c->redirect_to( '/admin/organisations/valid/' . $valid_org->id );
|
|
|
|
}
|
|
|
|
}
|
2017-04-24 11:49:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
1;
|