2019-07-02 15:21:01 +01:00
package Pear::LocalLoop::Import::LCCCsv::Transactions ;
use Moo ;
2019-07-05 16:52:32 +01:00
use DateTime ;
use DateTime::Format::Strptime ;
2019-07-02 15:21:01 +01:00
extends qw/Pear::LocalLoop::Import::LCCCsv/ ;
2019-07-05 16:52:32 +01:00
has '+csv_required_columns' = > (
2019-07-05 18:44:46 +01:00
builder = > sub { return [ (
'transaction_id' ,
'supplier_id' ,
'net_amount' ,
'vat amount' ,
'gross_amount' ,
) ] } ,
2019-07-05 16:52:32 +01:00
) ;
sub import_csv {
my ( $ self ) = @ _ ;
my $ rows = $ self - > csv_data ;
2019-07-10 17:23:27 +01:00
my $ lcc_org = $ self - > schema - > resultset ( 'Organisation' ) - > find ( {
name = > "Lancashire County Council" ,
street_name = > "County Hall"
} ) ;
unless ( $ lcc_org ) {
Pear::LocalLoop::Error - > throw ( "Cannot find LCC Organisation, please contact an admin" ) ;
}
2019-07-05 16:52:32 +01:00
foreach my $ row ( @ { $ rows } ) {
2019-07-10 17:23:27 +01:00
$ self - > _row_to_result ( $ row , $ lcc_org ) ;
2019-07-05 16:52:32 +01:00
}
}
sub _row_to_result {
my ( $ self , $ row , $ lcc_org ) = @ _ ;
2019-07-05 17:56:21 +01:00
my $ supplier_id = $ row - > { supplier_id } ;
my $ organisation = $ self - > schema - > resultset ( 'Organisation' ) - > find ( {
'external_reference.external_id' = > $ supplier_id
} , { join = > 'external_reference' } ) ;
unless ( $ organisation ) {
Pear::LocalLoop::Error - > throw ( "Cannot find an organisation with supplier_id $supplier_id" ) ;
}
2019-07-05 16:52:32 +01:00
2019-07-10 17:23:27 +01:00
use Devel::Dwarn ;
Dwarn $ organisation - > entity - > id ;
2019-07-05 16:52:32 +01:00
my $ date_formatter = DateTime::Format::Strptime - > new (
pattern = > '%Y/%m/%d'
) ;
my $ paid_date = ( $ row - > { paid_date } ? $ date_formatter - > parse_datetime ( $ row - > { paid_date } ) : DateTime - > today ) ;
2019-07-09 18:06:31 +01:00
my $ gross_value = $ row - > { gross_amount } ;
$ gross_value =~ s/,//g ;
my $ sales_tax_value = $ row - > { "vat amount" } ;
$ sales_tax_value =~ s/,//g ;
my $ net_value = $ row - > { net_amount } ;
$ net_value =~ s/,//g ;
2019-07-09 17:55:50 +01:00
2019-07-05 18:44:46 +01:00
# TODO negative values are sometimes present
2019-07-05 16:52:32 +01:00
$ self - > external_result - > find_or_create_related ( 'transactions' , {
2019-07-05 17:56:21 +01:00
external_id = > $ row - > { transaction_id } ,
2019-07-05 16:52:32 +01:00
transaction = > {
2019-07-05 17:56:21 +01:00
seller = > $ organisation - > entity ,
2019-07-10 17:23:27 +01:00
buyer = > $ lcc_org - > entity ,
2019-07-05 16:52:32 +01:00
purchase_time = > $ paid_date ,
2019-07-10 17:23:27 +01:00
value = > $ gross_value * 100000 ,
2019-07-05 16:52:32 +01:00
meta = > {
2019-07-09 18:06:31 +01:00
gross_value = > $ gross_value * 100000 ,
sales_tax_value = > $ sales_tax_value * 100000 ,
net_value = > $ net_value * 100000 ,
2019-07-05 16:52:32 +01:00
} ,
}
} ) ;
2019-07-02 15:21:01 +01:00
}
2019-07-05 16:52:32 +01:00
1 ;