Fix home page upload to use json api instead of seperate upload code
This commit is contained in:
parent
00b0687136
commit
a097db2017
6 changed files with 27 additions and 115 deletions
|
@ -142,7 +142,9 @@ sub startup {
|
||||||
|
|
||||||
$user_routes->get('/home')->to('root#home');
|
$user_routes->get('/home')->to('root#home');
|
||||||
|
|
||||||
$user_routes->post('/portal/upload')->to('portal#post_upload');
|
my $portal_api = $r->under('/portal')->to('api-auth#check_json')->under('/')->to('portal#under');
|
||||||
|
|
||||||
|
$portal_api->post('/upload')->to('api-upload#post_upload');
|
||||||
|
|
||||||
$self->hook( before_dispatch => sub {
|
$self->hook( before_dispatch => sub {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
|
@ -1,116 +1,11 @@
|
||||||
package Pear::LocalLoop::Controller::Portal;
|
package Pear::LocalLoop::Controller::Portal;
|
||||||
use Mojo::Base 'Mojolicious::Controller';
|
use Mojo::Base 'Mojolicious::Controller';
|
||||||
|
|
||||||
has error_messages => sub {
|
sub under {
|
||||||
return {
|
|
||||||
transaction_type => {
|
|
||||||
required => { message => 'transaction_type is missing.', status => 400 },
|
|
||||||
in => { message => 'transaction_type is not a valid value.', status => 400 },
|
|
||||||
},
|
|
||||||
transaction_value => {
|
|
||||||
required => { message => 'transaction_value is missing', status => 400 },
|
|
||||||
number => { message => 'transaction_value does not look like a number', status => 400 },
|
|
||||||
gt_num => { message => 'transaction_value cannot be equal to or less than zero', status => 400 },
|
|
||||||
},
|
|
||||||
file => {
|
|
||||||
required => { message => 'No file uploaded', status => 400 },
|
|
||||||
upload => { message => 'file key does not contain a file', status => 400 },
|
|
||||||
filetype => { message => 'File must be of type image/jpeg', status => 400 },
|
|
||||||
},
|
|
||||||
organisation_id => {
|
|
||||||
required => { message => 'organisation_id is missing', status => 400 },
|
|
||||||
number => { message => 'organisation_id is not a number', status => 400 },
|
|
||||||
in_resultset => { message => 'organisation_id does not exist in the database', status => 400 },
|
|
||||||
},
|
|
||||||
organisation_name => {
|
|
||||||
required => { message => 'organisation_name is missing', status => 400 },
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
sub post_upload {
|
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
|
||||||
my $user = $c->current_user;
|
$c->stash( api_user => $c->current_user );
|
||||||
my $validation = $c->validation;
|
return 1;
|
||||||
|
|
||||||
$validation->required('file')->upload->filetype('image/jpeg');
|
|
||||||
$validation->required('transaction_value')->number->gt_num(0);
|
|
||||||
$validation->required('transaction_type')->in( 1, 2, 3 );
|
|
||||||
|
|
||||||
# First pass of required items
|
|
||||||
return $c->api_validation_error if $validation->has_error;
|
|
||||||
|
|
||||||
my $type = $validation->param('transaction_type');
|
|
||||||
|
|
||||||
if ( $type == 1 ) {
|
|
||||||
# Validated Organisation
|
|
||||||
my $valid_org_rs = $c->schema->resultset('Organisation');
|
|
||||||
$validation->required('organisation_id')->number->in_resultset( 'organisationalid', $valid_org_rs );
|
|
||||||
} elsif ( $type == 2 ) {
|
|
||||||
# Unvalidated Organisation
|
|
||||||
my $valid_org_rs = $c->schema->resultset('PendingOrganisation')->search({ usersubmitted_fk => $user->id });
|
|
||||||
$validation->required('organisation_id')->number->in_resultset( 'pendingorganisationid', $valid_org_rs );
|
|
||||||
} elsif ( $type == 3 ) {
|
|
||||||
# Unknown Organisation
|
|
||||||
$validation->required('organisation_name');
|
|
||||||
$validation->optional('street_name');
|
|
||||||
$validation->optional('town');
|
|
||||||
$validation->optional('postcode')->postcode;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $c->api_validation_error if $validation->has_error;
|
|
||||||
|
|
||||||
my $transaction_value = $validation->param('transaction_value');
|
|
||||||
my $upload = $validation->param('file');
|
|
||||||
|
|
||||||
my $file = $c->store_file_from_upload( $upload );
|
|
||||||
|
|
||||||
if ( $type == 1 ) {
|
|
||||||
# Validated organisation
|
|
||||||
$c->schema->resultset('Transaction')->create({
|
|
||||||
buyeruserid_fk => $user->id,
|
|
||||||
sellerorganisationid_fk => $validation->param('organisation_id'),
|
|
||||||
valuemicrocurrency => $transaction_value,
|
|
||||||
proof_image => $file,
|
|
||||||
timedatesubmitted => DateTime->now,
|
|
||||||
});
|
|
||||||
} elsif ( $type == 2 ) {
|
|
||||||
# Unvalidated Organisation
|
|
||||||
$c->schema->resultset('PendingTransaction')->create({
|
|
||||||
buyeruserid_fk => $user->id,
|
|
||||||
pendingsellerorganisationid_fk => $validation->param('organisation_id'),
|
|
||||||
valuemicrocurrency => $transaction_value,
|
|
||||||
proof_image => $file,
|
|
||||||
timedatesubmitted => DateTime->now,
|
|
||||||
});
|
|
||||||
} elsif ( $type == 3 ) {
|
|
||||||
my $organisation_name = $validation->param('organisation_name');
|
|
||||||
my $street_name = $validation->param('street_name');
|
|
||||||
my $town = $validation->param('town');
|
|
||||||
my $postcode = $validation->param('postcode');
|
|
||||||
|
|
||||||
my $pending_org = $c->schema->resultset('PendingOrganisation')->create({
|
|
||||||
submitted_by => $user,
|
|
||||||
submitted_at => DateTime->now,
|
|
||||||
name => $organisation_name,
|
|
||||||
street_name => $street_name,
|
|
||||||
town => $town,
|
|
||||||
postcode => $postcode,
|
|
||||||
});
|
|
||||||
|
|
||||||
$c->schema->resultset('PendingTransaction')->create({
|
|
||||||
buyeruserid_fk => $user->id,
|
|
||||||
pendingsellerorganisationid_fk => $pending_org->id,
|
|
||||||
valuemicrocurrency => $transaction_value,
|
|
||||||
proof_image => $file,
|
|
||||||
timedatesubmitted => DateTime->now,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return $c->render( json => {
|
|
||||||
success => Mojo::JSON->true,
|
|
||||||
message => 'Upload Successful',
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -4,14 +4,29 @@ $(function() {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
// Create new form data object with the contents of this form
|
// Create new form data object with the contents of this form
|
||||||
var formData = new FormData(this);
|
var formData = new FormData();
|
||||||
|
formData.append('file', $('#tran-file')[0].files[0]);
|
||||||
|
formData.append('json', JSON.stringify({
|
||||||
|
transaction_type: $('#tran-type').val(),
|
||||||
|
organisation_name: $('#org-name').val(),
|
||||||
|
street_name: $('#org-street').val(),
|
||||||
|
town: $('#org-town').val(),
|
||||||
|
postcode: $('#org-postcode').val(),
|
||||||
|
transaction_value: $('#tran-value').val()
|
||||||
|
}));
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: $(this).attr("action"),
|
url: $(this).attr("action"),
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: formData,
|
data: formData,
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
alert(data);
|
console.log(data);
|
||||||
|
alert(data.message);
|
||||||
|
$('form#receipt-form')[0].reset();
|
||||||
|
},
|
||||||
|
error: function(data) {
|
||||||
|
console.log(data);
|
||||||
|
alert(data.responseJSON.message);
|
||||||
},
|
},
|
||||||
cache: false,
|
cache: false,
|
||||||
contentType: false,
|
contentType: false,
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
% }
|
% }
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
% for my $user (@$users) {
|
% for my $user (@$users) {
|
||||||
<a href="<%= url_for . '/' . $user->{userid} %>" class="list-group-item list-group-item-action">
|
<a href="<%= url_for . '/' . $user->{id} %>" class="list-group-item list-group-item-action">
|
||||||
<div>
|
<div>
|
||||||
%= $user->{email}
|
%= $user->{email}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,11 +18,11 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="joindate">Join Date</label>
|
<label for="joindate">Join Date</label>
|
||||||
<input id="joindate" type="datetime" class="form-control" placeholder="Date" name="joindate" value="<%= $user->joindate %>" disabled>
|
<input id="joindate" type="datetime" class="form-control" placeholder="Date" name="joindate" value="<%= $user->join_date %>" disabled>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="type">Account Type</label>
|
<label for="type">Account Type</label>
|
||||||
<input id="type" type="text" class="form-control" value="<%= defined $user->customerid_fk ? 'Customer' : 'Organisation' %>" disabled>
|
<input id="type" type="text" class="form-control" value="<%= defined $user->customer_id ? 'Customer' : 'Organisation' %>" disabled>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<button class="btn btn-primary form-control" type="submit">Update</button>
|
<button class="btn btn-primary form-control" type="submit">Update</button>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<h3 class="card-header">Submit Receipt</h3>
|
<h3 class="card-header">Submit Receipt</h3>
|
||||||
<div class="card-block">
|
<div class="card-block">
|
||||||
<form id="receipt-form" action="<%= url_for '/portal/upload' %>">
|
<form id="receipt-form" action="<%= url_for '/portal/upload' %>">
|
||||||
<input type="hidden" name="transaction_type" value="3" hidden>
|
<input id="tran-type" type="hidden" name="transaction_type" value="3" hidden>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="org-name">Organisation Name</label>
|
<label for="org-name">Organisation Name</label>
|
||||||
<input id="org-name" type="text" class="form-control" name="organisation_name" placeholder="Organisation Name" required>
|
<input id="org-name" type="text" class="form-control" name="organisation_name" placeholder="Organisation Name" required>
|
||||||
|
|
Reference in a new issue