This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Foodloop-Server/lib/Pear/LocalLoop/Schema/Result/Organisation.pm

177 lines
3.8 KiB
Perl
Raw Permalink Normal View History

2017-02-24 19:27:43 +00:00
package Pear::LocalLoop::Schema::Result::Organisation;
use strict;
use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components("InflateColumn::DateTime", "FilterColumn");
2017-02-24 19:27:43 +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',
is_auto_increment => 1,
2019-07-02 14:21:01 +00:00
is_nullable => 0,
},
2019-07-02 14:21:01 +00:00
entity_id => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
2019-07-02 14:21:01 +00:00
name => {
data_type => 'varchar',
size => 255,
is_nullable => 0,
},
2019-07-02 14:21:01 +00:00
street_name => {
data_type => 'text',
is_nullable => 1,
},
2019-07-02 14:21:01 +00:00
town => {
data_type => 'varchar',
size => 255,
is_nullable => 0,
},
2019-07-02 14:21:01 +00:00
postcode => {
data_type => 'varchar',
size => 16,
is_nullable => 1,
},
2019-07-02 14:21:01 +00:00
country => {
data_type => 'varchar',
size => 255,
is_nullable => 1,
},
# 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,
is_nullable => 1,
2017-08-25 14:32:39 +00:00
},
2019-07-02 14:21:01 +00:00
pending => {
data_type => 'boolean',
default => \"false",
is_nullable => 0,
},
2019-07-02 14:21:01 +00:00
is_local => {
data_type => 'boolean',
default => undef,
is_nullable => 1,
},
2019-07-02 14:21:01 +00:00
is_fair => {
data_type => 'boolean',
default => undef,
is_nullable => 1,
},
submitted_by_id => {
2019-07-02 14:21:01 +00:00
data_type => 'integer',
is_nullable => 1,
},
2019-07-02 14:21:01 +00:00
latitude => {
data_type => 'decimal',
size => [ 8, 5 ],
is_nullable => 1,
default_value => undef,
},
2019-07-02 14:21:01 +00:00
longitude => {
data_type => 'decimal',
size => [ 8, 5 ],
is_nullable => 1,
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
);
__PACKAGE__->set_primary_key('id');
2017-02-24 19:27:43 +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' },
);
__PACKAGE__->has_many(
"payroll",
"Pear::LocalLoop::Schema::Result::OrganisationPayroll",
{ "foreign.org_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->filter_column(
2019-07-02 14:21:01 +00:00
pending => {
filter_to_storage => 'to_bool',
},
is_local => {
filter_to_storage => 'to_bool',
},
2019-07-02 14:21:01 +00:00
is_anchor => {
filter_to_storage => 'to_bool',
}
);
# 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) = @_;
my $pending_field = $sqlt_table->get_field('pending');
2019-07-02 14:21:01 +00:00
if ($sqlt_table->schema->translator->producer_type =~ /SQLite$/) {
$pending_field->{default_value} = 0;
2019-07-02 14:21:01 +00:00
}
else {
$pending_field->{default_value} = \"false";
}
}
sub to_bool {
2019-07-02 14:21:01 +00:00
my ($self, $val) = @_;
return if !defined $val;
my $driver_name = $self->result_source->schema->storage->dbh->{Driver}->{Name};
2019-07-02 14:21:01 +00:00
if ($driver_name eq 'SQLite') {
return $val ? 1 : 0;
2019-07-02 14:21:01 +00:00
}
else {
return $val ? 'true' : 'false';
}
}
sub user {
my $self = shift;
return $self->entity->user;
}
2017-02-24 19:27:43 +00:00
1;