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 15:10:34 +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 (
2019-07-02 14:21:01 +00:00
id = > {
data_type = > 'integer' ,
2017-04-20 21:17:13 +00:00
is_auto_increment = > 1 ,
2019-07-02 14:21:01 +00:00
is_nullable = > 0 ,
2017-04-20 21:17:13 +00:00
} ,
2019-07-02 14:21:01 +00:00
entity_id = > {
data_type = > 'integer' ,
is_nullable = > 0 ,
2017-08-31 11:29:06 +00:00
is_foreign_key = > 1 ,
} ,
2019-07-02 14:21:01 +00:00
name = > {
data_type = > 'varchar' ,
size = > 255 ,
2017-04-20 21:17:13 +00:00
is_nullable = > 0 ,
} ,
2019-07-02 14:21:01 +00:00
street_name = > {
data_type = > 'text' ,
2017-04-20 21:17:13 +00:00
is_nullable = > 1 ,
} ,
2019-07-02 14:21:01 +00:00
town = > {
data_type = > 'varchar' ,
size = > 255 ,
2017-04-20 21:17:13 +00:00
is_nullable = > 0 ,
} ,
2019-07-02 14:21:01 +00:00
postcode = > {
data_type = > 'varchar' ,
size = > 16 ,
2017-04-20 21:17:13 +00:00
is_nullable = > 1 ,
} ,
2019-07-02 14:21:01 +00:00
country = > {
data_type = > 'varchar' ,
size = > 255 ,
2017-08-31 11:29:06 +00:00
is_nullable = > 1 ,
} ,
2019-07-12 12:39:37 +00:00
# Stores codes based on https://www.ons.gov.uk/methodology/classificationsandstandards/ukstandardindustrialclassificationofeconomicactivities/uksic2007
2019-07-02 14:21:01 +00:00
sector = > {
data_type = > 'varchar' ,
size = > 1 ,
2017-08-25 14:25:52 +00:00
is_nullable = > 1 ,
2017-08-25 14:32:39 +00:00
} ,
2019-07-02 14:21:01 +00:00
pending = > {
data_type = > 'boolean' ,
2019-09-02 14:34:28 +00:00
default_value = > \ "false" ,
2017-08-31 11:29:06 +00:00
is_nullable = > 0 ,
} ,
2019-07-02 14:21:01 +00:00
is_local = > {
data_type = > 'boolean' ,
2019-09-02 14:34:28 +00:00
default_value = > undef ,
2017-10-24 12:47:41 +00:00
is_nullable = > 1 ,
} ,
2019-07-02 14:21:01 +00:00
is_fair = > {
data_type = > 'boolean' ,
2019-09-02 14:34:28 +00:00
default_value = > undef ,
2018-01-02 19:56:48 +00:00
is_nullable = > 1 ,
} ,
2017-08-31 11:29:06 +00:00
submitted_by_id = > {
2019-07-02 14:21:01 +00:00
data_type = > 'integer' ,
2017-08-31 11:29:06 +00:00
is_nullable = > 1 ,
} ,
2019-07-02 14:21:01 +00:00
latitude = > {
data_type = > 'decimal' ,
size = > [ 8 , 5 ] ,
is_nullable = > 1 ,
2017-09-21 16:01:10 +00:00
default_value = > undef ,
} ,
2019-07-02 14:21:01 +00:00
longitude = > {
data_type = > 'decimal' ,
size = > [ 8 , 5 ] ,
is_nullable = > 1 ,
2017-09-21 16:01:10 +00:00
default_value = > undef ,
} ,
2019-07-02 14:21:01 +00:00
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
2017-08-31 11:29:06 +00:00
__PACKAGE__ - > belongs_to (
"entity" ,
"Pear::LocalLoop::Schema::Result::Entity" ,
"entity_id" ,
2017-02-24 19:27:43 +00:00
) ;
2019-07-03 16:36:36 +00:00
__PACKAGE__ - > belongs_to (
"organisation_type" ,
"Pear::LocalLoop::Schema::Result::OrganisationType" ,
"type_id" ,
) ;
__PACKAGE__ - > belongs_to (
"social_type" ,
2019-07-05 14:30:31 +00:00
"Pear::LocalLoop::Schema::Result::OrganisationSocialType" ,
2019-07-03 16:36:36 +00:00
"social_type_id" ,
) ;
2019-07-05 14:30:31 +00:00
__PACKAGE__ - > has_many (
"external_reference" ,
"Pear::LocalLoop::Schema::Result::OrganisationExternal" ,
{ 'foreign.org_id' = > 'self.id' } ,
) ;
2017-09-18 16:13:18 +00:00
__PACKAGE__ - > has_many (
"payroll" ,
"Pear::LocalLoop::Schema::Result::OrganisationPayroll" ,
{ "foreign.org_id" = > "self.id" } ,
{ cascade_copy = > 0 , cascade_delete = > 0 } ,
) ;
2017-10-24 12:47:41 +00:00
__PACKAGE__ - > filter_column (
2019-07-02 14:21:01 +00:00
pending = > {
filter_to_storage = > 'to_bool' ,
} ,
is_local = > {
2017-10-24 12:47:41 +00:00
filter_to_storage = > 'to_bool' ,
} ,
2019-07-02 14:21:01 +00:00
is_anchor = > {
2017-10-24 12:47:41 +00:00
filter_to_storage = > 'to_bool' ,
}
) ;
2017-09-06 15:10:34 +00:00
# Only works when calling ->deploy, but atleast helps for tests
sub sqlt_deploy_hook {
2019-07-02 14:21:01 +00:00
my ( $ source_instance , $ sqlt_table ) = @ _ ;
2017-09-06 15:10:34 +00:00
my $ pending_field = $ sqlt_table - > get_field ( 'pending' ) ;
2019-07-02 14:21:01 +00:00
if ( $ sqlt_table - > schema - > translator - > producer_type =~ /SQLite$/ ) {
2017-09-06 15:10:34 +00:00
$ pending_field - > { default_value } = 0 ;
2019-07-02 14:21:01 +00:00
}
else {
2017-09-06 15:10:34 +00:00
$ pending_field - > { default_value } = \ "false" ;
}
}
sub to_bool {
2019-07-02 14:21:01 +00:00
my ( $ self , $ val ) = @ _ ;
return if ! defined $ val ;
2017-09-06 15:10:34 +00:00
my $ driver_name = $ self - > result_source - > schema - > storage - > dbh - > { Driver } - > { Name } ;
2019-07-02 14:21:01 +00:00
if ( $ driver_name eq 'SQLite' ) {
2017-09-06 15:10:34 +00:00
return $ val ? 1 : 0 ;
2019-07-02 14:21:01 +00:00
}
else {
2017-09-06 15:10:34 +00:00
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 ;