2017-02-24 19:27:43 +00:00
package Pear::LocalLoop::Schema::Result::Organisation ;
use strict ;
use warnings ;
use base 'DBIx::Class::Core' ;
2017-09-06 16:10:34 +01:00
__PACKAGE__ - > load_components ( "InflateColumn::DateTime" , "FilterColumn" ) ;
2017-02-24 19:27:43 +00:00
2017-04-20 22:17:13 +01:00
__PACKAGE__ - > table ( "organisations" ) ;
2017-02-24 19:27:43 +00:00
__PACKAGE__ - > add_columns (
2017-04-20 22:17:13 +01:00
id = > {
data_type = > 'integer' ,
is_auto_increment = > 1 ,
is_nullable = > 0 ,
} ,
2017-08-31 12:29:06 +01:00
entity_id = > {
data_type = > 'integer' ,
is_nullable = > 0 ,
is_foreign_key = > 1 ,
} ,
2017-04-20 22:17:13 +01:00
name = > {
data_type = > 'varchar' ,
size = > 255 ,
is_nullable = > 0 ,
} ,
2017-04-21 14:14:51 +01:00
street_name = > {
2017-04-20 22:17:13 +01:00
data_type = > 'text' ,
is_nullable = > 1 ,
} ,
town = > {
data_type = > 'varchar' ,
size = > 255 ,
is_nullable = > 0 ,
} ,
postcode = > {
data_type = > 'varchar' ,
size = > 16 ,
is_nullable = > 1 ,
} ,
2017-08-31 12:29:06 +01:00
country = > {
data_type = > 'varchar' ,
size = > 255 ,
is_nullable = > 1 ,
} ,
2017-08-25 15:25:52 +01:00
sector = > {
2017-08-31 12:29:06 +01:00
data_type = > 'varchar' ,
2017-08-25 15:25:52 +01:00
size = > 1 ,
is_nullable = > 1 ,
2017-08-25 15:32:39 +01:00
} ,
2017-08-31 12:29:06 +01:00
pending = > {
data_type = > 'boolean' ,
2017-09-06 16:10:34 +01:00
default = > \ "false" ,
2017-08-31 12:29:06 +01:00
is_nullable = > 0 ,
} ,
2017-10-24 13:47:41 +01:00
is_local = > {
data_type = > 'boolean' ,
default = > undef ,
is_nullable = > 1 ,
} ,
2018-01-02 19:56:48 +00:00
is_fair = > {
data_type = > 'boolean' ,
default = > undef ,
is_nullable = > 1 ,
} ,
2017-08-31 12:29:06 +01:00
submitted_by_id = > {
data_type = > 'integer' ,
is_nullable = > 1 ,
} ,
2017-09-21 17:01:10 +01:00
latitude = > {
data_type = > 'decimal' ,
size = > [ 8 , 5 ] ,
is_nullable = > 1 ,
default_value = > undef ,
} ,
longitude = > {
data_type = > 'decimal' ,
size = > [ 8 , 5 ] ,
is_nullable = > 1 ,
default_value = > undef ,
} ,
2017-02-24 19:27:43 +00:00
) ;
2017-04-20 22:17:13 +01:00
__PACKAGE__ - > set_primary_key ( 'id' ) ;
2017-02-24 19:27:43 +00:00
2017-08-31 12:29:06 +01:00
__PACKAGE__ - > belongs_to (
"entity" ,
"Pear::LocalLoop::Schema::Result::Entity" ,
"entity_id" ,
2017-02-24 19:27:43 +00:00
) ;
2017-09-18 17:13:18 +01:00
__PACKAGE__ - > has_many (
"payroll" ,
"Pear::LocalLoop::Schema::Result::OrganisationPayroll" ,
{ "foreign.org_id" = > "self.id" } ,
{ cascade_copy = > 0 , cascade_delete = > 0 } ,
) ;
2017-10-24 13:47:41 +01:00
__PACKAGE__ - > filter_column (
pending = > {
filter_to_storage = > 'to_bool' ,
} ,
is_local = > {
filter_to_storage = > 'to_bool' ,
}
) ;
2017-09-06 16:10:34 +01:00
# Only works when calling ->deploy, but atleast helps for tests
sub sqlt_deploy_hook {
my ( $ source_instance , $ sqlt_table ) = @ _ ;
my $ pending_field = $ sqlt_table - > get_field ( 'pending' ) ;
if ( $ sqlt_table - > schema - > translator - > producer_type =~ /SQLite$/ ) {
$ pending_field - > { default_value } = 0 ;
} else {
$ pending_field - > { default_value } = \ "false" ;
}
}
sub to_bool {
my ( $ self , $ val ) = @ _ ;
2017-10-24 13:47:41 +01:00
return if ! defined $ val ;
2017-09-06 16:10:34 +01:00
my $ driver_name = $ self - > result_source - > schema - > storage - > dbh - > { Driver } - > { Name } ;
if ( $ driver_name eq 'SQLite' ) {
return $ val ? 1 : 0 ;
} else {
return $ val ? 'true' : 'false' ;
}
}
2017-11-20 13:02:07 +00:00
sub user {
my $ self = shift ;
return $ self - > entity - > user ;
}
2017-02-24 19:27:43 +00:00
1 ;