2019-07-02 15:21:01 +01:00
package Pear::LocalLoop::Controller::Admin::ImportFrom ;
use Mojo::Base 'Mojolicious::Controller' ;
2019-07-05 15:30:31 +01:00
use Moo ;
2019-07-05 18:44:46 +01:00
use Try::Tiny ;
2019-07-14 15:15:14 +01:00
use Mojo::File qw/path/ ;
2019-07-05 15:30:31 +01:00
2019-07-04 14:16:49 +01:00
sub index {
my $ c = shift ;
2019-07-14 15:15:14 +01:00
$ c - > stash - > { org_entities } = [
map {
{ id = > $ _ - > entity_id , name = > $ _ - > name }
2019-09-06 17:31:09 +01:00
} $ c - > schema - > resultset ( 'Organisation' ) - > search ( { name = > { like = > '%lancashire%' } } , { columns = > [ qw/ entity_id name / ] } )
2019-07-14 15:15:14 +01:00
] ;
2019-07-04 14:16:49 +01:00
2019-07-05 15:30:31 +01:00
$ c - > app - > max_request_size ( 104857600 ) ;
2019-07-04 14:16:49 +01:00
}
sub post_suppliers {
my $ c = shift ;
2019-07-05 15:30:31 +01:00
unless ( $ c - > param ( 'suppliers_csv' ) ) {
2019-07-14 15:15:14 +01:00
$ c - > flash ( error = > "No CSV file given" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
2019-07-05 15:30:31 +01:00
}
# Check file size
if ( $ c - > req - > is_limit_exceeded ) {
2019-07-14 15:15:14 +01:00
$ c - > flash ( error = > "CSV file size is too large" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
2019-07-05 15:30:31 +01:00
}
2019-07-08 16:41:59 +01:00
2019-07-08 18:12:35 +01:00
my $ file = $ c - > param ( 'suppliers_csv' ) ;
2019-07-08 16:41:59 +01:00
2019-07-14 15:15:14 +01:00
my $ filename = path ( $ c - > app - > config - > { upload_path } , time . 'suppliers.csv' ) ;
2019-07-08 16:41:59 +01:00
2019-07-08 18:12:35 +01:00
$ file - > move_to ( $ filename ) ;
2019-07-08 16:41:59 +01:00
2019-07-14 15:15:14 +01:00
my $ job_id = $ c - > minion - > enqueue ( 'csv_supplier_import' = > [ $ filename ] ) ;
2019-07-08 16:41:59 +01:00
2019-09-11 15:02:08 +01:00
my $ job_url = $ c - > url_for ( "/admin/minion/jobs?id=$job_id" ) - > to_abs ;
$ c - > flash ( success = > "CSV import started, see status of minion job at: $job_url" ) ;
2019-08-29 16:37:55 +01:00
return $ c - > redirect_to ( '/admin/import_from' ) ;
}
sub post_postcodes {
my $ c = shift ;
unless ( $ c - > param ( 'postcodes_csv' ) ) {
$ c - > flash ( error = > "No CSV file given" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
}
# Check file size
if ( $ c - > req - > is_limit_exceeded ) {
$ c - > flash ( error = > "CSV file size is too large" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
}
my $ file = $ c - > param ( 'postcodes_csv' ) ;
my $ filename = path ( $ c - > app - > config - > { upload_path } , time . 'postcodes.csv' ) ;
$ file - > move_to ( $ filename ) ;
my $ job_id = $ c - > minion - > enqueue ( 'csv_postcode_import' = > [ $ filename ] ) ;
2019-09-11 15:02:08 +01:00
my $ job_url = $ c - > url_for ( "/admin/minion/jobs?id=$job_id" ) - > to_abs ;
$ c - > flash ( success = > "CSV import started, see status of minion job at: $job_url" ) ;
2019-07-14 15:15:14 +01:00
return $ c - > redirect_to ( '/admin/import_from' ) ;
2019-07-04 14:16:49 +01:00
}
sub post_transactions {
my $ c = shift ;
2019-07-14 15:15:14 +01:00
unless ( $ c - > param ( 'entity_id' ) ne '' ) {
$ c - > flash ( error = > "Please Choose an organisation" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
}
2019-07-05 15:30:31 +01:00
unless ( $ c - > param ( 'transactions_csv' ) ) {
2019-07-14 15:15:14 +01:00
$ c - > flash ( error = > "No CSV file given" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
2019-07-05 15:30:31 +01:00
}
# Check file size
if ( $ c - > req - > is_limit_exceeded ) {
2019-07-14 15:15:14 +01:00
$ c - > flash ( error = > "CSV file size is too large" ) ;
return $ c - > redirect_to ( '/admin/import_from' ) ;
2019-07-05 15:30:31 +01:00
}
2019-07-08 18:12:35 +01:00
my $ file = $ c - > param ( 'transactions_csv' ) ;
2019-07-14 15:15:14 +01:00
my $ filename = path ( $ c - > app - > config - > { upload_path } , time . 'transactions.csv' ) ;
2019-07-08 18:12:35 +01:00
$ file - > move_to ( $ filename ) ;
2019-07-14 15:15:14 +01:00
my $ job_id = $ c - > minion - > enqueue ( 'csv_transaction_import' = > [ $ filename , $ c - > param ( 'entity_id' ) ] ) ;
2019-07-08 18:12:35 +01:00
2019-09-11 15:02:08 +01:00
my $ job_url = $ c - > url_for ( "/admin/minion/jobs?id=$job_id" ) - > to_abs ;
$ c - > flash ( success = > "CSV import started, see status of minion job at: $job_url" ) ;
2019-07-14 15:15:14 +01:00
return $ c - > redirect_to ( '/admin/import_from' ) ;
2019-07-04 14:16:49 +01:00
}
2019-09-09 15:37:26 +01:00
sub org_search {
my $ c = shift ;
my $ term = $ c - > param ( 'term' ) ;
my $ rs = $ c - > schema - > resultset ( 'Organisation' ) - > search (
{ name = > { like = > $ term . '%' } } ,
{
join = > 'entity' ,
columns = > [ qw/ me.name entity.id / ]
} ,
) ;
my @ results = ( map { {
label = > $ _ - > name ,
value = > $ _ - > entity - > id ,
} } $ rs - > all ) ;
$ c - > render ( json = > \ @ results ) ;
}
2019-07-04 14:16:49 +01:00
1 ;