2017-02-24 19:27:43 +00:00
package Pear::LocalLoop::Schema::Result::Organisation ;
use strict ;
use warnings ;
use base 'DBIx::Class::Core' ;
2021-03-20 12:09:50 +00:00
__PACKAGE__ - > load_components ( "InflateColumn::DateTime" , "FilterColumn" ) ;
2017-02-24 19:27:43 +00:00
2017-04-20 21:17:13 +00:00
__PACKAGE__ - > table ( "organisations" ) ;
2017-02-24 19:27:43 +00:00
__PACKAGE__ - > add_columns (
2021-03-20 12:09:50 +00:00
id = > {
data_type = > 'integer' ,
is_auto_increment = > 1 ,
is_nullable = > 0 ,
} ,
entity_id = > {
data_type = > 'integer' ,
is_nullable = > 0 ,
is_foreign_key = > 1 ,
} ,
name = > {
data_type = > 'varchar' ,
size = > 255 ,
is_nullable = > 0 ,
} ,
street_name = > {
data_type = > 'text' ,
is_nullable = > 1 ,
} ,
town = > {
data_type = > 'varchar' ,
size = > 255 ,
is_nullable = > 0 ,
} ,
postcode = > {
data_type = > 'varchar' ,
size = > 16 ,
is_nullable = > 1 ,
} ,
country = > {
data_type = > 'varchar' ,
size = > 255 ,
is_nullable = > 1 ,
} ,
# Stores codes based on https://www.ons.gov.uk/methodology/classificationsandstandards/ukstandardindustrialclassificationofeconomicactivities/uksic2007
sector = > {
data_type = > 'varchar' ,
size = > 1 ,
is_nullable = > 1 ,
} ,
pending = > {
data_type = > 'boolean' ,
default_value = > \ "false" ,
is_nullable = > 0 ,
} ,
is_local = > {
data_type = > 'boolean' ,
default_value = > undef ,
is_nullable = > 1 ,
} ,
is_fair = > {
data_type = > 'boolean' ,
default_value = > undef ,
is_nullable = > 1 ,
} ,
submitted_by_id = > {
data_type = > 'integer' ,
is_nullable = > 1 ,
} ,
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 ,
} ,
type_id = > {
data_type = > 'integer' ,
is_nullable = > 1 ,
is_foreign_key = > 1 ,
} ,
social_type_id = > {
data_type = > 'integer' ,
is_nullable = > 1 ,
is_foreign_key = > 1 ,
} ,
is_anchor = > {
data_type = > 'boolean' ,
is_nullable = > 0 ,
default_value = > \ 'FALSE' ,
}
2017-02-24 19:27:43 +00:00
) ;
2017-04-20 21:17:13 +00:00
__PACKAGE__ - > set_primary_key ( 'id' ) ;
2017-02-24 19:27:43 +00:00
2021-03-20 12:09:50 +00:00
__PACKAGE__ - > belongs_to ( "entity" , "Pear::LocalLoop::Schema::Result::Entity" ,
"entity_id" , ) ;
2017-02-24 19:27:43 +00:00
2021-03-20 12:09:50 +00:00
__PACKAGE__ - > belongs_to ( "organisation_type" ,
"Pear::LocalLoop::Schema::Result::OrganisationType" , "type_id" , ) ;
2019-07-03 16:36:36 +00:00
2021-03-20 12:09:50 +00:00
__PACKAGE__ - > belongs_to ( "social_type" ,
"Pear::LocalLoop::Schema::Result::OrganisationSocialType" ,
"social_type_id" , ) ;
2019-07-03 16:36:36 +00:00
2019-07-05 14:30:31 +00:00
__PACKAGE__ - > has_many (
2021-03-20 12:09:50 +00:00
"external_reference" ,
"Pear::LocalLoop::Schema::Result::OrganisationExternal" ,
{ 'foreign.org_id' = > 'self.id' } ,
2019-07-05 14:30:31 +00:00
) ;
2017-09-18 16:13:18 +00:00
__PACKAGE__ - > has_many (
2021-03-20 12:09:50 +00:00
"payroll" ,
"Pear::LocalLoop::Schema::Result::OrganisationPayroll" ,
{ "foreign.org_id" = > "self.id" } ,
{ cascade_copy = > 0 , cascade_delete = > 0 } ,
2017-09-18 16:13:18 +00:00
) ;
2017-10-24 12:47:41 +00:00
__PACKAGE__ - > filter_column (
2021-03-20 12:09:50 +00:00
pending = > {
filter_to_storage = > 'to_bool' ,
} ,
is_local = > {
filter_to_storage = > 'to_bool' ,
} ,
is_anchor = > {
filter_to_storage = > 'to_bool' ,
}
2017-10-24 12:47:41 +00:00
) ;
2017-09-06 15:10:34 +00:00
# Only works when calling ->deploy, but atleast helps for tests
sub sqlt_deploy_hook {
2021-03-20 12:09:50 +00:00
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" ;
}
2017-09-06 15:10:34 +00:00
}
sub to_bool {
2021-03-20 12:09:50 +00:00
my ( $ self , $ val ) = @ _ ;
return if ! defined $ val ;
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-09-06 15:10:34 +00:00
}
2017-11-20 13:02:07 +00:00
sub user {
2021-03-20 12:09:50 +00:00
my $ self = shift ;
2017-11-20 13:02:07 +00:00
2021-03-20 12:09:50 +00:00
return $ self - > entity - > user ;
2017-11-20 13:02:07 +00:00
}
2017-02-24 19:27:43 +00:00
1 ;