Add code formatter, format all code

This commit is contained in:
Rumperuu 2021-03-20 12:09:50 +00:00
parent 602a59f1c3
commit 47a55f6322
120 changed files with 8061 additions and 6967 deletions

View file

@ -8,16 +8,16 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("account_tokens");
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"name",
{ data_type => "text", is_nullable => 0 },
"used",
{ data_type => "integer", default_value => 0, is_nullable => 0 },
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"name",
{ data_type => "text", is_nullable => 0 },
"used",
{ data_type => "integer", default_value => 0, is_nullable => 0 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["name"]);
__PACKAGE__->add_unique_constraint( ["name"] );
1;

View file

@ -8,39 +8,37 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("category");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
# See here for all possible options http://simplelineicons.com/
"line_icon" => {
data_type => "varchar",
size => 255,
is_nullable => 1,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
# See here for all possible options http://simplelineicons.com/
"line_icon" => {
data_type => "varchar",
size => 255,
is_nullable => 1,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["name"]);
__PACKAGE__->add_unique_constraint( ["name"] );
__PACKAGE__->has_many(
"transaction_category",
"Pear::LocalLoop::Schema::Result::TransactionCategory",
{ "foreign.category_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 1 },
"transaction_category",
"Pear::LocalLoop::Schema::Result::TransactionCategory",
{ "foreign.category_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 1 },
);
__PACKAGE__->many_to_many(
"transactions",
"transaction_category",
"transaction",
);
__PACKAGE__->many_to_many( "transactions", "transaction_category",
"transaction", );
1;

View file

@ -8,55 +8,52 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("customers");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
is_foreign_key => 1,
},
"display_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"full_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"year_of_birth" => {
data_type => "integer",
is_nullable => 0,
},
"postcode" => {
data_type => "varchar",
size => 16,
is_nullable => 0,
},
latitude => {
data_type => 'decimal',
size => [5,2],
is_nullable => 1,
default_value => undef,
},
longitude => {
data_type => 'decimal',
size => [5,2],
is_nullable => 1,
default_value => undef,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
is_foreign_key => 1,
},
"display_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"full_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"year_of_birth" => {
data_type => "integer",
is_nullable => 0,
},
"postcode" => {
data_type => "varchar",
size => 16,
is_nullable => 0,
},
latitude => {
data_type => 'decimal',
size => [ 5, 2 ],
is_nullable => 1,
default_value => undef,
},
longitude => {
data_type => 'decimal',
size => [ 5, 2 ],
is_nullable => 1,
default_value => undef,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
1;

View file

@ -8,37 +8,37 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("device_subscriptions");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"device_token_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"topic_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"device_token_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"topic_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"device_token",
"Pear::LocalLoop::Schema::Result::DeviceToken",
"device_token_id",
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"device_token",
"Pear::LocalLoop::Schema::Result::DeviceToken",
"device_token_id",
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"topic",
"Pear::LocalLoop::Schema::Result::Topic",
"topic_id",
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"topic",
"Pear::LocalLoop::Schema::Result::Topic",
"topic_id",
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -5,52 +5,54 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components( qw/
InflateColumn::DateTime
TimeStamp
FilterColumn
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
FilterColumn
/
);
__PACKAGE__->table("device_tokens");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"user_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"token" => {
data_type => "varchar",
size => 200,
is_nullable => 0,
},
"register_date" => {
data_type => "datetime",
set_on_create => 1,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"user_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"token" => {
data_type => "varchar",
size => 200,
is_nullable => 0,
},
"register_date" => {
data_type => "datetime",
set_on_create => 1,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"user",
"Pear::LocalLoop::Schema::Result::User",
{ id => "user_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"user",
"Pear::LocalLoop::Schema::Result::User",
{ id => "user_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->has_many(
"device_subscriptions",
"Pear::LocalLoop::Schema::Result::DeviceSubscription",
{ "foreign.device_token_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"device_subscriptions",
"Pear::LocalLoop::Schema::Result::DeviceSubscription",
{ "foreign.device_token_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many('topics' => 'device_subscriptions', 'topic');
__PACKAGE__->many_to_many( 'topics' => 'device_subscriptions', 'topic' );
1;

View file

@ -8,109 +8,103 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("entities");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"type" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"type" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->might_have(
"customer",
"Pear::LocalLoop::Schema::Result::Customer" => "entity_id",
);
__PACKAGE__->might_have( "customer",
"Pear::LocalLoop::Schema::Result::Customer" => "entity_id", );
__PACKAGE__->might_have(
"organisation",
"Pear::LocalLoop::Schema::Result::Organisation" => "entity_id",
);
__PACKAGE__->might_have( "organisation",
"Pear::LocalLoop::Schema::Result::Organisation" => "entity_id", );
__PACKAGE__->might_have(
"user",
"Pear::LocalLoop::Schema::Result::User" => "entity_id",
);
__PACKAGE__->might_have( "user",
"Pear::LocalLoop::Schema::Result::User" => "entity_id", );
__PACKAGE__->might_have(
"associations",
"Pear::LocalLoop::Schema::Result::EntityAssociation" => "entity_id",
);
__PACKAGE__->might_have( "associations",
"Pear::LocalLoop::Schema::Result::EntityAssociation" => "entity_id", );
__PACKAGE__->might_have(
"postcode",
"Pear::LocalLoop::Schema::Result::EntityPostcode" => "entity_id",
__PACKAGE__->might_have( "postcode",
"Pear::LocalLoop::Schema::Result::EntityPostcode" => "entity_id", );
__PACKAGE__->has_many(
"purchases",
"Pear::LocalLoop::Schema::Result::Transaction",
{ "foreign.buyer_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"purchases",
"Pear::LocalLoop::Schema::Result::Transaction",
{ "foreign.buyer_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"sales",
"Pear::LocalLoop::Schema::Result::Transaction",
{ "foreign.seller_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"sales",
"Pear::LocalLoop::Schema::Result::Transaction",
{ "foreign.seller_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"global_user_medals",
"Pear::LocalLoop::Schema::Result::GlobalUserMedals",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"global_user_medals",
"Pear::LocalLoop::Schema::Result::GlobalUserMedals",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"global_user_medal_progress",
"Pear::LocalLoop::Schema::Result::GlobalUserMedalProgress",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"global_user_medal_progress",
"Pear::LocalLoop::Schema::Result::GlobalUserMedalProgress",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"org_user_medals",
"Pear::LocalLoop::Schema::Result::OrgUserMedals",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"org_user_medals",
"Pear::LocalLoop::Schema::Result::OrgUserMedals",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"org_user_medal_progress",
"Pear::LocalLoop::Schema::Result::OrgUserMedalProgress",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"org_user_medal_progress",
"Pear::LocalLoop::Schema::Result::OrgUserMedalProgress",
{ "foreign.entity_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
sub name {
my $self = shift;
my $self = shift;
if ( $self->type eq 'customer' ) {
return $self->customer->display_name;
} elsif ( $self->type eq 'organisation' ) {
return $self->organisation->name;
} else {
return "Unknown Name";
}
if ( $self->type eq 'customer' ) {
return $self->customer->display_name;
}
elsif ( $self->type eq 'organisation' ) {
return $self->organisation->name;
}
else {
return "Unknown Name";
}
}
sub type_object {
my $self = shift;
my $self = shift;
if ( $self->type eq 'customer' ) {
return $self->customer;
} elsif ( $self->type eq 'organisation' ) {
return $self->organisation;
} else {
return;
}
if ( $self->type eq 'customer' ) {
return $self->customer;
}
elsif ( $self->type eq 'organisation' ) {
return $self->organisation;
}
else {
return;
}
}
1;

View file

@ -8,32 +8,29 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("entity_association");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
"lis" => {
data_type => 'boolean',
default_value => undef,
is_nullable => 1,
},
"esta" => {
data_type => 'boolean',
default_value => undef,
is_nullable => 1,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
"lis" => {
data_type => 'boolean',
default_value => undef,
is_nullable => 1,
},
"esta" => {
data_type => 'boolean',
default_value => undef,
is_nullable => 1,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );

View file

@ -8,37 +8,34 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table('entities_postcodes');
__PACKAGE__->add_columns(
outcode => {
data_type => 'char',
size => 4,
is_nullable => 0,
},
incode => {
data_type => 'char',
size => 3,
is_nullable => 0,
},
entity_id => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
outcode => {
data_type => 'char',
size => 4,
is_nullable => 0,
},
incode => {
data_type => 'char',
size => 3,
is_nullable => 0,
},
entity_id => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
);
__PACKAGE__->set_primary_key(qw/ outcode incode entity_id /);
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->belongs_to(
"gb_postcode",
"Pear::LocalLoop::Schema::Result::GbPostcode",
{
"foreign.outcode" => "self.outcode",
"foreign.incode" => "self.incode",
},
"gb_postcode",
"Pear::LocalLoop::Schema::Result::GbPostcode",
{
"foreign.outcode" => "self.outcode",
"foreign.incode" => "self.incode",
},
);
1;

View file

@ -8,32 +8,32 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("external_references");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint([ qw/name/ ]);
__PACKAGE__->add_unique_constraint( [qw/name/] );
__PACKAGE__->has_many(
'transactions',
"Pear::LocalLoop::Schema::Result::TransactionExternal",
{ 'foreign.external_reference_id' => 'self.id' },
'transactions',
"Pear::LocalLoop::Schema::Result::TransactionExternal",
{ 'foreign.external_reference_id' => 'self.id' },
);
__PACKAGE__->has_many(
'organisations',
"Pear::LocalLoop::Schema::Result::OrganisationExternal",
{ 'foreign.external_reference_id' => 'self.id' },
'organisations',
"Pear::LocalLoop::Schema::Result::OrganisationExternal",
{ 'foreign.external_reference_id' => 'self.id' },
);
1;
1;

View file

@ -7,81 +7,87 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("feedback");
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
TimeStamp
FilterColumn
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
FilterColumn
/
);
__PACKAGE__->add_columns(
"id",
{
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0
},
"user_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"submitted_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"feedbacktext" => {
data_type => "text",
is_nullable => 0,
},
"app_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"package_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"version_code" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"version_number" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"actioned" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
"id",
{
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0
},
"user_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"submitted_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"feedbacktext" => {
data_type => "text",
is_nullable => 0,
},
"app_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"package_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"version_code" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"version_number" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"actioned" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"user",
"Pear::LocalLoop::Schema::Result::User",
{ id => "user_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"user",
"Pear::LocalLoop::Schema::Result::User",
{ id => "user_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->filter_column( actioned => {
filter_to_storage => 'to_bool',
});
__PACKAGE__->filter_column(
actioned => {
filter_to_storage => 'to_bool',
}
);
sub to_bool {
my ( $self, $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';
}
my ( $self, $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';
}
}
1;

View file

@ -8,42 +8,39 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table('gb_postcodes');
__PACKAGE__->add_columns(
outcode => {
data_type => 'char',
size => 4,
is_nullable => 0,
},
incode => {
data_type => 'char',
size => 3,
is_nullable => 0,
default_value => '',
},
latitude => {
data_type => 'decimal',
size => [7,5],
is_nullable => 1,
default_value => undef,
},
longitude => {
data_type => 'decimal',
size => [7,5],
is_nullable => 1,
default_value => undef,
},
ward_id => {
data_type => 'integer',
is_nullable => 1,
default_value => undef,
},
outcode => {
data_type => 'char',
size => 4,
is_nullable => 0,
},
incode => {
data_type => 'char',
size => 3,
is_nullable => 0,
default_value => '',
},
latitude => {
data_type => 'decimal',
size => [ 7, 5 ],
is_nullable => 1,
default_value => undef,
},
longitude => {
data_type => 'decimal',
size => [ 7, 5 ],
is_nullable => 1,
default_value => undef,
},
ward_id => {
data_type => 'integer',
is_nullable => 1,
default_value => undef,
},
);
__PACKAGE__->set_primary_key(qw/ outcode incode /);
__PACKAGE__->belongs_to(
"ward",
"Pear::LocalLoop::Schema::Result::GbWard",
"ward_id",
);
__PACKAGE__->belongs_to( "ward", "Pear::LocalLoop::Schema::Result::GbWard",
"ward_id", );
1;

View file

@ -8,25 +8,25 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table('gb_wards');
__PACKAGE__->add_columns(
id => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
ward => {
data_type => 'varchar',
size => 100,
is_nullable => 0,
},
id => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
ward => {
data_type => 'varchar',
size => 100,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key(qw/ id /);
__PACKAGE__->has_many(
"postcodes",
"Pear::LocalLoop::Schema::Result::GbPostcode",
{ "foreign.ward_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"postcodes",
"Pear::LocalLoop::Schema::Result::GbPostcode",
{ "foreign.ward_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;

View file

@ -8,27 +8,27 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("global_medal_group");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["group_name"]);
__PACKAGE__->add_unique_constraint( ["group_name"] );
__PACKAGE__->has_many(
"medals",
"Pear::LocalLoop::Schema::Result::GlobalMedals",
{ "foreign.group_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"medals",
"Pear::LocalLoop::Schema::Result::GlobalMedals",
{ "foreign.group_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;

View file

@ -8,32 +8,32 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("global_medals");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"group",
"Pear::LocalLoop::Schema::Result::GlobalMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"group",
"Pear::LocalLoop::Schema::Result::GlobalMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -8,38 +8,35 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("global_user_medal_progress");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"total" => {
data_type => "integer",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"total" => {
data_type => "integer",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->belongs_to(
"group",
"Pear::LocalLoop::Schema::Result::GlobalMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"group",
"Pear::LocalLoop::Schema::Result::GlobalMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -5,55 +5,54 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
TimeStamp
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
/
);
__PACKAGE__->table("global_user_medals");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
"awarded_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
"awarded_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->belongs_to(
"group",
"Pear::LocalLoop::Schema::Result::GlobalMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"group",
"Pear::LocalLoop::Schema::Result::GlobalMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -8,50 +8,50 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("import_lookups");
__PACKAGE__->add_columns(
id => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
set_id => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
name => {
data_type => "varchar",
size => 255,
},
entity_id => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
id => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
set_id => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
name => {
data_type => "varchar",
size => 255,
},
entity_id => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"import_set",
"Pear::LocalLoop::Schema::Result::ImportSet",
{ "foreign.id" => "self.set_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"import_set",
"Pear::LocalLoop::Schema::Result::ImportSet",
{ "foreign.id" => "self.set_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
{ "foreign.id" => "self.entity_id" },
{
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
{ "foreign.id" => "self.entity_id" },
{
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
1;

View file

@ -5,40 +5,42 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components( qw/
InflateColumn::DateTime
TimeStamp
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
/
);
__PACKAGE__->table("import_sets");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"date" => {
data_type => "datetime",
set_on_create => 1,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"date" => {
data_type => "datetime",
set_on_create => 1,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->has_many(
"values",
"Pear::LocalLoop::Schema::Result::ImportValue",
{ "foreign.set_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"values",
"Pear::LocalLoop::Schema::Result::ImportValue",
{ "foreign.set_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"lookups",
"Pear::LocalLoop::Schema::Result::ImportLookup",
{ "foreign.set_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"lookups",
"Pear::LocalLoop::Schema::Result::ImportLookup",
{ "foreign.set_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;

View file

@ -5,74 +5,76 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components( qw/
InflateColumn::DateTime
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
/
);
__PACKAGE__->table("import_values");
__PACKAGE__->add_columns(
id => {
data_type => 'integer',
is_auto_increment => 1,
is_nullable => 0,
},
set_id => {
data_type => 'integer',
is_foreign_key => 1,
is_nullable => 0,
},
user_name => {
data_type => 'varchar',
size => 255,
},
purchase_date => {
data_type => "datetime",
is_nullable => 0,
},
purchase_value => {
data_type => 'varchar',
size => 255,
},
org_name => {
data_type => 'varchar',
size => 255,
},
transaction_id => {
data_type => 'integer',
is_foreign_key => 1,
is_nullable => 1,
},
ignore_value => {
data_type => 'boolean',
default_value => \'false',
is_nullable => 0,
},
id => {
data_type => 'integer',
is_auto_increment => 1,
is_nullable => 0,
},
set_id => {
data_type => 'integer',
is_foreign_key => 1,
is_nullable => 0,
},
user_name => {
data_type => 'varchar',
size => 255,
},
purchase_date => {
data_type => "datetime",
is_nullable => 0,
},
purchase_value => {
data_type => 'varchar',
size => 255,
},
org_name => {
data_type => 'varchar',
size => 255,
},
transaction_id => {
data_type => 'integer',
is_foreign_key => 1,
is_nullable => 1,
},
ignore_value => {
data_type => 'boolean',
default_value => \'false',
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"import_set",
"Pear::LocalLoop::Schema::Result::ImportSet",
{ "foreign.id" => "self.set_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"import_set",
"Pear::LocalLoop::Schema::Result::ImportSet",
{ "foreign.id" => "self.set_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
__PACKAGE__->belongs_to(
"transaction",
"Pear::LocalLoop::Schema::Result::Transaction",
{ "foreign.id" => "self.transaction_id" },
{
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"transaction",
"Pear::LocalLoop::Schema::Result::Transaction",
{ "foreign.id" => "self.transaction_id" },
{
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
1;

View file

@ -10,242 +10,271 @@ use DateTime;
__PACKAGE__->table("leaderboards");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"type" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"type" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["type"]);
__PACKAGE__->add_unique_constraint( ["type"] );
__PACKAGE__->has_many(
"sets",
"Pear::LocalLoop::Schema::Result::LeaderboardSet",
{ "foreign.leaderboard_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"sets",
"Pear::LocalLoop::Schema::Result::LeaderboardSet",
{ "foreign.leaderboard_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
sub create_new {
my $self = shift;
my $start = shift;
my $self = shift;
my $start = shift;
my $type = $self->type;
my $type = $self->type;
if ( $type eq 'daily_total' ) {
return $self->_create_total_set( $start, $start->clone->add( days => 1 ) );
} elsif ( $type eq 'weekly_total' ) {
return $self->_create_total_set( $start, $start->clone->add( days => 7 ) );
} elsif ( $type eq 'monthly_total' ) {
return $self->_create_total_set( $start, $start->clone->add( months => 1 ) );
} elsif ( $type eq 'all_time_total' ) {
return $self->_create_total_all_time( $start );
} elsif ( $type eq 'daily_count' ) {
return $self->_create_count_set( $start, $start->clone->add( days => 1 ) );
} elsif ( $type eq 'weekly_count' ) {
return $self->_create_count_set( $start, $start->clone->add( days => 7 ) );
} elsif ( $type eq 'monthly_count' ) {
return $self->_create_count_set( $start, $start->clone->add( months => 1 ) );
} elsif ( $type eq 'all_time_count' ) {
return $self->_create_count_all_time( $start );
}
warn "Unrecognised type";
return $self;
if ( $type eq 'daily_total' ) {
return $self->_create_total_set( $start,
$start->clone->add( days => 1 ) );
}
elsif ( $type eq 'weekly_total' ) {
return $self->_create_total_set( $start,
$start->clone->add( days => 7 ) );
}
elsif ( $type eq 'monthly_total' ) {
return $self->_create_total_set( $start,
$start->clone->add( months => 1 ) );
}
elsif ( $type eq 'all_time_total' ) {
return $self->_create_total_all_time($start);
}
elsif ( $type eq 'daily_count' ) {
return $self->_create_count_set( $start,
$start->clone->add( days => 1 ) );
}
elsif ( $type eq 'weekly_count' ) {
return $self->_create_count_set( $start,
$start->clone->add( days => 7 ) );
}
elsif ( $type eq 'monthly_count' ) {
return $self->_create_count_set( $start,
$start->clone->add( months => 1 ) );
}
elsif ( $type eq 'all_time_count' ) {
return $self->_create_count_all_time($start);
}
warn "Unrecognised type";
return $self;
}
sub _get_customer_rs {
my $self = shift;
return $self->result_source->schema->resultset('Entity')->search({
type => 'customer',
});
my $self = shift;
return $self->result_source->schema->resultset('Entity')->search(
{
type => 'customer',
}
);
}
sub _set_position_and_trend {
my ( $self, @leaderboard ) = @_;
my ( $self, @leaderboard ) = @_;
# Sort numerically descending
@leaderboard = sort { $b->{value} <=> $a->{value} } @leaderboard;
# Sort numerically descending
@leaderboard = sort { $b->{value} <=> $a->{value} } @leaderboard;
my $position = 0;
my $position = 0;
my $previous_board = $self->get_latest;
if ( defined $previous_board ) {
$previous_board = $previous_board->values;
}
for my $lb_val ( @leaderboard ) {
$position++;
$lb_val->{position} = $position;
my $previous_value;
my $previous_board = $self->get_latest;
if ( defined $previous_board ) {
$previous_value = $previous_board->find({ entity_id => $lb_val->{entity_id} });
$previous_board = $previous_board->values;
}
my $trend;
for my $lb_val (@leaderboard) {
$position++;
$lb_val->{position} = $position;
if ( ! defined $previous_value ) {
$trend = 0;
} elsif ( $previous_value->position > $position ) {
$trend = -1;
} elsif ( $previous_value->position < $position ) {
$trend = 1;
} else {
$trend = 0;
my $previous_value;
if ( defined $previous_board ) {
$previous_value =
$previous_board->find( { entity_id => $lb_val->{entity_id} } );
}
my $trend;
if ( !defined $previous_value ) {
$trend = 0;
}
elsif ( $previous_value->position > $position ) {
$trend = -1;
}
elsif ( $previous_value->position < $position ) {
$trend = 1;
}
else {
$trend = 0;
}
$lb_val->{trend} = $trend;
}
$lb_val->{trend} = $trend;
}
return @leaderboard;
return @leaderboard;
}
sub _create_total_set {
my ( $self, $start, $end ) = @_;
my ( $self, $start, $end ) = @_;
my $user_rs = $self->_get_customer_rs;
my $user_rs = $self->_get_customer_rs;
my @leaderboard;
my @leaderboard;
while ( my $user_result = $user_rs->next ) {
my $transaction_rs = $user_result->purchases->search_between( $start, $end );
while ( my $user_result = $user_rs->next ) {
my $transaction_rs =
$user_result->purchases->search_between( $start, $end );
my $transaction_sum = $transaction_rs->get_column('value')->sum;
my $transaction_sum = $transaction_rs->get_column('value')->sum;
push @leaderboard, {
entity_id => $user_result->id,
value => $transaction_sum || 0,
};
}
push @leaderboard,
{
entity_id => $user_result->id,
value => $transaction_sum || 0,
};
}
@leaderboard = $self->_set_position_and_trend(@leaderboard);
@leaderboard = $self->_set_position_and_trend(@leaderboard);
$self->create_related(
'sets',
{
date => $start,
values => \@leaderboard,
},
);
$self->create_related(
'sets',
{
date => $start,
values => \@leaderboard,
},
);
return $self;
return $self;
}
sub _create_count_set {
my ( $self, $start, $end ) = @_;
my ( $self, $start, $end ) = @_;
my $user_rs = $self->_get_customer_rs;
my $user_rs = $self->_get_customer_rs;
my @leaderboard;
my @leaderboard;
while ( my $user_result = $user_rs->next ) {
my $transaction_rs = $user_result->purchases->search_between( $start, $end );
while ( my $user_result = $user_rs->next ) {
my $transaction_rs =
$user_result->purchases->search_between( $start, $end );
my $transaction_count = $transaction_rs->count;
my $transaction_count = $transaction_rs->count;
push @leaderboard, {
entity_id => $user_result->id,
value => $transaction_count || 0,
};
}
push @leaderboard,
{
entity_id => $user_result->id,
value => $transaction_count || 0,
};
}
@leaderboard = $self->_set_position_and_trend(@leaderboard);
@leaderboard = $self->_set_position_and_trend(@leaderboard);
$self->create_related(
'sets',
{
date => $start,
values => \@leaderboard,
},
);
$self->create_related(
'sets',
{
date => $start,
values => \@leaderboard,
},
);
return $self;
return $self;
}
sub _create_total_all_time {
my ( $self, $end ) = @_;
my ( $self, $end ) = @_;
my $user_rs = $self->_get_customer_rs;
my @leaderboard;
my $user_rs = $self->_get_customer_rs;
while ( my $user_result = $user_rs->next ) {
my $transaction_rs = $user_result->purchases->search_before( $end );
my @leaderboard;
my $transaction_sum = $transaction_rs->get_column('value')->sum;
while ( my $user_result = $user_rs->next ) {
my $transaction_rs = $user_result->purchases->search_before($end);
push @leaderboard, {
entity_id => $user_result->id,
value => $transaction_sum || 0,
};
}
my $transaction_sum = $transaction_rs->get_column('value')->sum;
@leaderboard = $self->_set_position_and_trend(@leaderboard);
push @leaderboard,
{
entity_id => $user_result->id,
value => $transaction_sum || 0,
};
}
$self->create_related(
'sets',
{
date => $end,
values => \@leaderboard,
},
);
@leaderboard = $self->_set_position_and_trend(@leaderboard);
return $self;
$self->create_related(
'sets',
{
date => $end,
values => \@leaderboard,
},
);
return $self;
}
sub _create_count_all_time {
my ( $self, $end ) = @_;
my ( $self, $end ) = @_;
my $user_rs = $self->_get_customer_rs;
my $user_rs = $self->_get_customer_rs;
my @leaderboard;
my @leaderboard;
while ( my $user_result = $user_rs->next ) {
my $transaction_rs = $user_result->purchases->search_before( $end );
while ( my $user_result = $user_rs->next ) {
my $transaction_rs = $user_result->purchases->search_before($end);
my $transaction_count = $transaction_rs->count;
my $transaction_count = $transaction_rs->count;
push @leaderboard, {
entity_id => $user_result->id,
value => $transaction_count || 0,
};
}
push @leaderboard,
{
entity_id => $user_result->id,
value => $transaction_count || 0,
};
}
@leaderboard = $self->_set_position_and_trend(@leaderboard);
@leaderboard = $self->_set_position_and_trend(@leaderboard);
$self->create_related(
'sets',
{
date => $end,
values => \@leaderboard,
},
);
$self->create_related(
'sets',
{
date => $end,
values => \@leaderboard,
},
);
return $self;
return $self;
}
sub get_latest {
my $self = shift;
my $self = shift;
my $latest = $self->search_related('sets', {}, {
order_by => { -desc => 'date' },
})->first;
my $latest = $self->search_related(
'sets',
{},
{
order_by => { -desc => 'date' },
}
)->first;
return $latest;
return $latest;
}
1;

View file

@ -5,48 +5,50 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components( qw/
InflateColumn::DateTime
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
/
);
__PACKAGE__->table("leaderboard_sets");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"leaderboard_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"date" => {
data_type => "datetime",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"leaderboard_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"date" => {
data_type => "datetime",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"leaderboard",
"Pear::LocalLoop::Schema::Result::Leaderboard",
{ "foreign.id" => "self.leaderboard_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"leaderboard",
"Pear::LocalLoop::Schema::Result::Leaderboard",
{ "foreign.id" => "self.leaderboard_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
__PACKAGE__->has_many(
"values",
"Pear::LocalLoop::Schema::Result::LeaderboardValue",
{ "foreign.set_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"values",
"Pear::LocalLoop::Schema::Result::LeaderboardValue",
{ "foreign.set_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;

View file

@ -8,62 +8,62 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("leaderboard_values");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"set_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"position" => {
data_type => "integer",
is_nullable => 0,
},
"value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"trend" => {
data_type => "integer",
default_value => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"set_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"position" => {
data_type => "integer",
is_nullable => 0,
},
"value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"trend" => {
data_type => "integer",
default_value => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint([qw/ entity_id set_id /]);
__PACKAGE__->add_unique_constraint( [qw/ entity_id set_id /] );
__PACKAGE__->belongs_to(
"set",
"Pear::LocalLoop::Schema::Result::LeaderboardSet",
{ "foreign.id" => "self.set_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"set",
"Pear::LocalLoop::Schema::Result::LeaderboardSet",
{ "foreign.id" => "self.set_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
{ "foreign.id" => "self.entity_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
{ "foreign.id" => "self.entity_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
1;

View file

@ -8,27 +8,27 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("org_medal_group");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["group_name"]);
__PACKAGE__->add_unique_constraint( ["group_name"] );
__PACKAGE__->has_many(
"medals",
"Pear::LocalLoop::Schema::Result::OrgMedals",
{ "foreign.group_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"medals",
"Pear::LocalLoop::Schema::Result::OrgMedals",
{ "foreign.group_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;

View file

@ -8,32 +8,32 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("org_medals");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"group",
"Pear::LocalLoop::Schema::Result::OrgMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"group",
"Pear::LocalLoop::Schema::Result::OrgMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -8,38 +8,35 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("org_user_medal_progress");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"total" => {
data_type => "integer",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"total" => {
data_type => "integer",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->belongs_to(
"group",
"Pear::LocalLoop::Schema::Result::OrgMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"group",
"Pear::LocalLoop::Schema::Result::OrgMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -5,55 +5,54 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
TimeStamp
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
/
);
__PACKAGE__->table("org_user_medals");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
"awarded_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_nullable => 0,
},
"group_id" => {
data_type => "integer",
is_nullable => 0,
},
"points" => {
data_type => "integer",
is_nullable => 0,
},
"awarded_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"threshold" => {
data_type => "integer",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->belongs_to(
"group",
"Pear::LocalLoop::Schema::Result::OrgMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"group",
"Pear::LocalLoop::Schema::Result::OrgMedalGroup",
{ id => "group_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -5,172 +5,166 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components("InflateColumn::DateTime", "FilterColumn");
__PACKAGE__->load_components( "InflateColumn::DateTime", "FilterColumn" );
__PACKAGE__->table("organisations");
__PACKAGE__->add_columns(
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',
}
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',
}
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
);
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->belongs_to(
"organisation_type",
"Pear::LocalLoop::Schema::Result::OrganisationType",
"type_id",
);
__PACKAGE__->belongs_to( "organisation_type",
"Pear::LocalLoop::Schema::Result::OrganisationType", "type_id", );
__PACKAGE__->belongs_to(
"social_type",
"Pear::LocalLoop::Schema::Result::OrganisationSocialType",
"social_type_id",
__PACKAGE__->belongs_to( "social_type",
"Pear::LocalLoop::Schema::Result::OrganisationSocialType",
"social_type_id", );
__PACKAGE__->has_many(
"external_reference",
"Pear::LocalLoop::Schema::Result::OrganisationExternal",
{ 'foreign.org_id' => 'self.id' },
);
__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 },
"payroll",
"Pear::LocalLoop::Schema::Result::OrganisationPayroll",
{ "foreign.org_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->filter_column(
pending => {
filter_to_storage => 'to_bool',
},
is_local => {
filter_to_storage => 'to_bool',
},
is_anchor => {
filter_to_storage => 'to_bool',
}
pending => {
filter_to_storage => 'to_bool',
},
is_local => {
filter_to_storage => 'to_bool',
},
is_anchor => {
filter_to_storage => 'to_bool',
}
);
# 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";
}
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) = @_;
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';
}
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';
}
}
sub user {
my $self = shift;
my $self = shift;
return $self->entity->user;
return $self->entity->user;
}
1;

View file

@ -8,42 +8,42 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("organisations_external");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"org_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_reference_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_id" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"org_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_reference_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_id" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint([ qw/external_reference_id external_id/ ]);
__PACKAGE__->add_unique_constraint( [qw/external_reference_id external_id/] );
__PACKAGE__->belongs_to(
"organisation",
"Pear::LocalLoop::Schema::Result::Organisation",
{ 'foreign.id' => 'self.org_id' },
"organisation",
"Pear::LocalLoop::Schema::Result::Organisation",
{ 'foreign.id' => 'self.org_id' },
);
__PACKAGE__->belongs_to(
"external_reference",
"Pear::LocalLoop::Schema::Result::ExternalReference",
{ 'foreign.id' => 'self.external_reference_id' },
"external_reference",
"Pear::LocalLoop::Schema::Result::ExternalReference",
{ 'foreign.id' => 'self.external_reference_id' },
);
1;
1;

View file

@ -5,79 +5,78 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
TimeStamp
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
/
);
__PACKAGE__->table("organisation_payroll");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"org_id" => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
"submitted_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"entry_period" => {
data_type => "datetime",
is_nullable => 0,
},
"employee_amount" => {
data_type => "integer",
is_nullable => 0,
},
"local_employee_amount" => {
data_type => "integer",
is_nullable => 0,
},
"gross_payroll" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_income_tax" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_employee_ni" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_employer_ni" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_total_pension" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_other_benefit" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"org_id" => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
"submitted_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"entry_period" => {
data_type => "datetime",
is_nullable => 0,
},
"employee_amount" => {
data_type => "integer",
is_nullable => 0,
},
"local_employee_amount" => {
data_type => "integer",
is_nullable => 0,
},
"gross_payroll" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_income_tax" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_employee_ni" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_employer_ni" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_total_pension" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"payroll_other_benefit" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"organisation",
"Pear::LocalLoop::Schema::Result::Organisation",
"org_id",
);
__PACKAGE__->belongs_to( "organisation",
"Pear::LocalLoop::Schema::Result::Organisation", "org_id", );
1;

View file

@ -8,32 +8,32 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("organisation_social_types");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"key" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"key" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint([ qw/key/ ]);
__PACKAGE__->add_unique_constraint( [qw/key/] );
__PACKAGE__->has_many(
"organisations",
"Pear::LocalLoop::Schema::Result::Organisation",
{ 'foreign.social_type_id' => 'self.id' },
"organisations",
"Pear::LocalLoop::Schema::Result::Organisation",
{ 'foreign.social_type_id' => 'self.id' },
);
1;
1;
1;

View file

@ -8,31 +8,31 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("organisation_types");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"key" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"key" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint([ qw/key/ ]);
__PACKAGE__->add_unique_constraint( [qw/key/] );
__PACKAGE__->has_many(
"organisations",
"Pear::LocalLoop::Schema::Result::Organisation",
{ 'foreign.type_id' => 'self.id' },
"organisations",
"Pear::LocalLoop::Schema::Result::Organisation",
{ 'foreign.type_id' => 'self.id' },
);
1;
1;

View file

@ -8,32 +8,32 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("session_tokens");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"token" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"user_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"token" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"user_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["token"]);
__PACKAGE__->add_unique_constraint( ["token"] );
__PACKAGE__->belongs_to(
"user",
"Pear::LocalLoop::Schema::Result::User",
{ id => "user_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"user",
"Pear::LocalLoop::Schema::Result::User",
{ id => "user_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -5,36 +5,41 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components( qw/
InflateColumn::DateTime
TimeStamp
FilterColumn
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
FilterColumn
/
);
__PACKAGE__->table("topics");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 200,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"name" => {
data_type => "varchar",
size => 200,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->has_many(
"device_subscriptions",
"Pear::LocalLoop::Schema::Result::DeviceSubscription",
{ "foreign.topic_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"device_subscriptions",
"Pear::LocalLoop::Schema::Result::DeviceSubscription",
{ "foreign.topic_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many('device_tokens' => 'device_subscriptions', 'device_token');
__PACKAGE__->many_to_many(
'device_tokens' => 'device_subscriptions',
'device_token'
);
1;

View file

@ -5,80 +5,81 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
TimeStamp
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
/
);
__PACKAGE__->table("transactions");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"buyer_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"seller_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"proof_image" => {
data_type => "text",
is_nullable => 1,
},
"submitted_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"purchase_time" => {
data_type => "datetime",
timezone => "UTC",
is_nullable => 0,
set_on_create => 1,
},
"essential" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
distance => {
data_type => 'numeric',
size => [15],
is_nullable => 1,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"buyer_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"seller_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"proof_image" => {
data_type => "text",
is_nullable => 1,
},
"submitted_at" => {
data_type => "datetime",
is_nullable => 0,
set_on_create => 1,
},
"purchase_time" => {
data_type => "datetime",
timezone => "UTC",
is_nullable => 0,
set_on_create => 1,
},
"essential" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
distance => {
data_type => 'numeric',
size => [15],
is_nullable => 1,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->might_have(
"category",
"Pear::LocalLoop::Schema::Result::TransactionCategory" => "transaction_id",
__PACKAGE__->might_have( "category",
"Pear::LocalLoop::Schema::Result::TransactionCategory" => "transaction_id",
);
__PACKAGE__->has_one(
@ -94,13 +95,14 @@ __PACKAGE__->has_many(
);
sub sqlt_deploy_hook {
my ( $source_instance, $sqlt_table ) = @_;
my $pending_field = $sqlt_table->get_field('essential');
if ( $sqlt_table->schema->translator->producer_type =~ /SQLite$/ ) {
$pending_field->{default_value} = 0;
} else {
$pending_field->{default_value} = \"false";
}
my ( $source_instance, $sqlt_table ) = @_;
my $pending_field = $sqlt_table->get_field('essential');
if ( $sqlt_table->schema->translator->producer_type =~ /SQLite$/ ) {
$pending_field->{default_value} = 0;
}
else {
$pending_field->{default_value} = \"false";
}
}
1;

View file

@ -8,32 +8,28 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("transaction_category");
__PACKAGE__->add_columns(
"category_id" => {
data_type => "integer",
is_nullable => 0,
is_foreign_key => 1,
},
"transaction_id" => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
"category_id" => {
data_type => "integer",
is_nullable => 0,
is_foreign_key => 1,
},
"transaction_id" => {
data_type => 'integer',
is_nullable => 0,
is_foreign_key => 1,
},
);
__PACKAGE__->add_unique_constraint(["transaction_id"]);
__PACKAGE__->add_unique_constraint( ["transaction_id"] );
__PACKAGE__->belongs_to(
"category",
"Pear::LocalLoop::Schema::Result::Category",
"category_id",
{ cascade_delete => 0 },
"category", "Pear::LocalLoop::Schema::Result::Category",
"category_id", { cascade_delete => 0 },
);
__PACKAGE__->belongs_to(
"transaction",
"Pear::LocalLoop::Schema::Result::Transaction",
"transaction_id",
{ cascade_delete => 0 },
"transaction", "Pear::LocalLoop::Schema::Result::Transaction",
"transaction_id", { cascade_delete => 0 },
);
1;

View file

@ -8,42 +8,42 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("transactions_external");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"transaction_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_reference_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_id" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"transaction_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_reference_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"external_id" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
}
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint([ qw/external_reference_id external_id/ ]);
__PACKAGE__->add_unique_constraint( [qw/external_reference_id external_id/] );
__PACKAGE__->belongs_to(
"transaction",
"Pear::LocalLoop::Schema::Result::Transaction",
{ 'foreign.id' => 'self.transaction_id' },
"transaction",
"Pear::LocalLoop::Schema::Result::Transaction",
{ 'foreign.id' => 'self.transaction_id' },
);
__PACKAGE__->belongs_to(
"external_reference",
"Pear::LocalLoop::Schema::Result::ExternalReference",
{ 'foreign.id' => 'self.external_reference_id' },
"external_reference",
"Pear::LocalLoop::Schema::Result::ExternalReference",
{ 'foreign.id' => 'self.external_reference_id' },
);
1;

View file

@ -8,17 +8,17 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("transactions_meta");
__PACKAGE__->add_columns(
"id" => {
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"transaction_id" => {
"transaction_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"net_value" => {
"net_value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
@ -28,45 +28,45 @@ __PACKAGE__->add_columns(
size => [ 100, 0 ],
is_nullable => 0,
},
"gross_value" => {
"gross_value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"local_service" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
"regional_service" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
"national_service" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
"private_household_rebate" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
"business_tax_and_rebate" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
"stat_loc_gov" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
"central_loc_gov" => {
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
data_type => 'boolean',
default_value => \"false",
is_nullable => 0,
},
);

View file

@ -5,88 +5,88 @@ use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
TimeStamp
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
TimeStamp
/
);
__PACKAGE__->table("transaction_recurring");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"buyer_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"seller_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"start_time" => {
data_type => "datetime",
timezone => "UTC",
is_nullable => 0,
},
"last_updated" => {
data_type => "datetime",
timezone => "UTC",
is_nullable => 1,
datetime_undef_if_invalid => 1,
},
"essential" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
"distance" => {
data_type => 'numeric',
size => [15],
is_nullable => 1,
},
"category_id" => {
data_type => "integer",
is_nullable => 1,
is_foreign_key => 1,
},
"recurring_period" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"buyer_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"seller_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"value" => {
data_type => "numeric",
size => [ 100, 0 ],
is_nullable => 0,
},
"start_time" => {
data_type => "datetime",
timezone => "UTC",
is_nullable => 0,
},
"last_updated" => {
data_type => "datetime",
timezone => "UTC",
is_nullable => 1,
datetime_undef_if_invalid => 1,
},
"essential" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
"distance" => {
data_type => 'numeric',
size => [15],
is_nullable => 1,
},
"category_id" => {
data_type => "integer",
is_nullable => 1,
is_foreign_key => 1,
},
"recurring_period" => {
data_type => "varchar",
size => 255,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"category",
"Pear::LocalLoop::Schema::Result::Category",
"category_id",
{ cascade_delete => 0 },
"category", "Pear::LocalLoop::Schema::Result::Category",
"category_id", { cascade_delete => 0 },
);
1;

View file

@ -7,151 +7,159 @@ use base 'DBIx::Class::Core';
use Data::UUID;
__PACKAGE__->load_components( qw/
InflateColumn::DateTime
PassphraseColumn
TimeStamp
FilterColumn
/);
__PACKAGE__->load_components(
qw/
InflateColumn::DateTime
PassphraseColumn
TimeStamp
FilterColumn
/
);
__PACKAGE__->table("users");
__PACKAGE__->add_columns(
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"email" => {
data_type => "text",
is_nullable => 0,
},
"join_date" => {
data_type => "datetime",
set_on_create => 1,
},
"password" => {
data_type => "varchar",
is_nullable => 0,
size => 100,
passphrase => 'crypt',
passphrase_class => 'BlowfishCrypt',
passphrase_args => {
salt_random => 1,
cost => 8,
"id" => {
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
},
"entity_id" => {
data_type => "integer",
is_foreign_key => 1,
is_nullable => 0,
},
"email" => {
data_type => "text",
is_nullable => 0,
},
"join_date" => {
data_type => "datetime",
set_on_create => 1,
},
"password" => {
data_type => "varchar",
is_nullable => 0,
size => 100,
passphrase => 'crypt',
passphrase_class => 'BlowfishCrypt',
passphrase_args => {
salt_random => 1,
cost => 8,
},
passphrase_check_method => 'check_password',
},
"is_admin" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
passphrase_check_method => 'check_password',
},
"is_admin" => {
data_type => "boolean",
default_value => \"false",
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->add_unique_constraint(["email"]);
__PACKAGE__->add_unique_constraint( ["email"] );
__PACKAGE__->belongs_to(
"entity",
"Pear::LocalLoop::Schema::Result::Entity",
"entity_id",
__PACKAGE__->belongs_to( "entity", "Pear::LocalLoop::Schema::Result::Entity",
"entity_id", );
__PACKAGE__->has_many(
"session_tokens",
"Pear::LocalLoop::Schema::Result::SessionToken",
{ "foreign.user_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"session_tokens",
"Pear::LocalLoop::Schema::Result::SessionToken",
{ "foreign.user_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"device_tokens",
"Pear::LocalLoop::Schema::Result::DeviceToken",
{ "foreign.user_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"device_tokens",
"Pear::LocalLoop::Schema::Result::DeviceToken",
{ "foreign.user_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"feedback",
"Pear::LocalLoop::Schema::Result::Feedback",
{ "foreign.user_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
"feedback",
"Pear::LocalLoop::Schema::Result::Feedback",
{ "foreign.user_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
sub sqlt_deploy_hook {
my ( $source_instance, $sqlt_table ) = @_;
my $pending_field = $sqlt_table->get_field('is_admin');
if ( $sqlt_table->schema->translator->producer_type =~ /SQLite$/ ) {
$pending_field->{default_value} = 0;
} else {
$pending_field->{default_value} = \"false";
}
my ( $source_instance, $sqlt_table ) = @_;
my $pending_field = $sqlt_table->get_field('is_admin');
if ( $sqlt_table->schema->translator->producer_type =~ /SQLite$/ ) {
$pending_field->{default_value} = 0;
}
else {
$pending_field->{default_value} = \"false";
}
}
__PACKAGE__->filter_column( is_admin => {
filter_to_storage => 'to_bool',
});
__PACKAGE__->filter_column(
is_admin => {
filter_to_storage => 'to_bool',
}
);
sub to_bool {
my ( $self, $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';
}
my ( $self, $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';
}
}
sub generate_session {
my $self = shift;
my $self = shift;
my $token = Data::UUID->new->create_str();
$self->create_related(
'session_tokens',
{
token => $token,
},
);
my $token = Data::UUID->new->create_str();
$self->create_related(
'session_tokens',
{
token => $token,
},
);
return $token;
return $token;
}
sub name {
my $self = shift;
my $self = shift;
if ( defined $self->entity->customer ) {
return $self->entity->customer->display_name;
} elsif ( defined $self->entity->organisation ) {
return $self->entity->organisation->name;
} else {
return;
}
if ( defined $self->entity->customer ) {
return $self->entity->customer->display_name;
}
elsif ( defined $self->entity->organisation ) {
return $self->entity->organisation->name;
}
else {
return;
}
}
sub full_name {
my $self = shift;
my $self = shift;
if ( defined $self->entity->customer ) {
return $self->entity->customer->full_name;
} elsif ( defined $self->entity->organisation ) {
return $self->entity->organisation->name;
} else {
return;
}
if ( defined $self->entity->customer ) {
return $self->entity->customer->full_name;
}
elsif ( defined $self->entity->organisation ) {
return $self->entity->organisation->name;
}
else {
return;
}
}
# TODO Deprecate this sub?
sub type {
my $self = shift;
my $self = shift;
return $self->entity->type;
return $self->entity->type;
}
1;

View file

@ -9,7 +9,8 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('view_quantised_transactions');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition( qq/
__PACKAGE__->result_source_instance->view_definition(
qq/
SELECT "transactions"."value",
"transactions"."distance",
"transactions"."purchase_time",
@ -22,6 +23,7 @@ SELECT "transactions"."value",
DATE_TRUNC('week', "transactions"."purchase_time") AS "quantised_weeks"
FROM "transactions"
LEFT JOIN "transaction_category" ON "transactions"."id" = "transaction_category"."transaction_id"
/);
/
);
1;

View file

@ -9,7 +9,8 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('view_quantised_transactions');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition( qq/
__PACKAGE__->result_source_instance->view_definition(
qq/
SELECT "transactions"."value",
"transactions"."distance",
"transactions"."purchase_time",
@ -22,6 +23,7 @@ SELECT "transactions"."value",
DATETIME(STRFTIME('%Y-%m-%d 00:00:00',"transactions"."purchase_time", 'weekday 0','-6 days')) AS "quantised_weeks"
FROM "transactions"
LEFT JOIN "transaction_category" ON "transactions"."id" = "transaction_category"."transaction_id"
/);
/
);
1;

View file

@ -9,7 +9,8 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('view_quantised_transactions');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition( qq/
__PACKAGE__->result_source_instance->view_definition(
qq/
SELECT "value",
"distance",
"purchase_time",
@ -20,20 +21,21 @@ SELECT "value",
DATE_TRUNC('week', "purchase_time") AS "quantised_weeks",
DATE_TRUNC('month', "purchase_time") AS "quantised_months"
FROM "transactions"
/);
__PACKAGE__->belongs_to(
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
/
);
__PACKAGE__->belongs_to(
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -9,7 +9,8 @@ __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('view_quantised_transactions');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition( qq/
__PACKAGE__->result_source_instance->view_definition(
qq/
SELECT "value",
"distance",
"purchase_time",
@ -21,20 +22,21 @@ SELECT "value",
DATETIME(STRFTIME('%Y-%m-%d 00:00:00',"purchase_time",'weekday 0','-6 days')) AS "quantised_weeks",
DATETIME(STRFTIME('%Y-%m-00 00:00:00',"purchase_time")) AS "quantised_months"
FROM "transactions"
/);
__PACKAGE__->belongs_to(
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
/
);
__PACKAGE__->belongs_to(
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
"buyer",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "buyer_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"seller",
"Pear::LocalLoop::Schema::Result::Entity",
{ id => "seller_id" },
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
1;

View file

@ -6,31 +6,27 @@ use warnings;
use base 'DBIx::Class::ResultSet';
sub as_hash {
my ( $self ) = @_;
my ($self) = @_;
my %category_list = (
(
map {
$_->id => $_->name,
} $self->all
),
0 => 'Uncategorised',
);
return \%category_list;
my %category_list = (
(
map { $_->id => $_->name, } $self->all
),
0 => 'Uncategorised',
);
return \%category_list;
}
sub as_hash_name_icon {
my ( $self ) = @_;
my ($self) = @_;
my %category_list = (
(
map {
$_->name => $_->line_icon,
} $self->all
),
0 => 'Uncategorised',
);
return \%category_list;
my %category_list = (
(
map { $_->name => $_->line_icon, } $self->all
),
0 => 'Uncategorised',
);
return \%category_list;
}
1;

View file

@ -5,15 +5,17 @@ use warnings;
use base 'DBIx::Class::ResultSet';
sub sales { shift->search_related('sales', @_) }
sub sales { shift->search_related( 'sales', @_ ) }
sub create_org {
my ( $self, $org ) = @_;
my ( $self, $org ) = @_;
return $self->create({
organisation => $org,
type => 'organisation',
});
return $self->create(
{
organisation => $org,
type => 'organisation',
}
);
}
1;

View file

@ -6,81 +6,83 @@ use warnings;
use base 'DBIx::Class::ResultSet';
sub get_values {
my $self = shift;
my $id = shift;
my $include_ignored = shift;
my $include_imported = shift;
my $self = shift;
my $id = shift;
my $include_ignored = shift;
my $include_imported = shift;
return $self->find($id)->search_related(
'values',
{
( $include_ignored ? () : ( ignore_value => 0 ) ),
( $include_imported ? () : ( transaction_id => undef ) ),
},
{
order_by => { '-asc' => 'id' },
},
);
return $self->find($id)->search_related(
'values',
{
( $include_ignored ? () : ( ignore_value => 0 ) ),
( $include_imported ? () : ( transaction_id => undef ) ),
},
{
order_by => { '-asc' => 'id' },
},
);
}
sub _unordered_get_values {
my $self = shift;
my $id = shift;
my $include_ignored = shift;
my $include_imported = shift;
my $self = shift;
my $id = shift;
my $include_ignored = shift;
my $include_imported = shift;
return $self->find($id)->search_related(
'values',
{
( $include_ignored ? () : ( ignore_value => 0 ) ),
( $include_imported ? () : ( transaction_id => undef ) ),
},
);
return $self->find($id)->search_related(
'values',
{
( $include_ignored ? () : ( ignore_value => 0 ) ),
( $include_imported ? () : ( transaction_id => undef ) ),
},
);
}
sub get_users {
my $self = shift;
my $self = shift;
return $self->_unordered_get_values(@_)->search({},
{
group_by => 'user_name',
columns => [ qw/ user_name / ],
},
);
return $self->_unordered_get_values(@_)->search(
{},
{
group_by => 'user_name',
columns => [qw/ user_name /],
},
);
}
sub get_orgs {
my $self = shift;
return $self->_unordered_get_values(@_)->search({},
{
group_by => 'org_name',
columns => [ qw/ org_name / ],
},
);
my $self = shift;
return $self->_unordered_get_values(@_)->search(
{},
{
group_by => 'org_name',
columns => [qw/ org_name /],
},
);
}
sub get_lookups {
my $self = shift;
my $id = shift;
my $self = shift;
my $id = shift;
my $lookup_rs = $self->find($id)->search_related(
'lookups',
undef,
{
prefetch => { entity => [ qw/ organisation customer / ] },
order_by => { '-asc' => 'me.id' },
},
);
my $lookup_map = {
map {
$_->name => {
entity_id => $_->entity->id,
name => $_->entity->name,
},
} $lookup_rs->all
};
return $lookup_map;
my $lookup_rs = $self->find($id)->search_related(
'lookups',
undef,
{
prefetch => { entity => [qw/ organisation customer /] },
order_by => { '-asc' => 'me.id' },
},
);
my $lookup_map = {
map {
$_->name => {
entity_id => $_->entity->id,
name => $_->entity->name,
},
} $lookup_rs->all
};
return $lookup_map;
}
1;

View file

@ -8,87 +8,103 @@ use base 'DBIx::Class::ResultSet';
use DateTime;
sub get_latest {
my $self = shift;
my $type = shift;
my $self = shift;
my $type = shift;
my $type_result = $self->find_by_type( $type );
my $type_result = $self->find_by_type($type);
return unless defined $type_result;
return unless defined $type_result;
my $latest = $type_result->search_related('sets', {}, {
order_by => { -desc => 'date' },
})->first;
my $latest = $type_result->search_related(
'sets',
{},
{
order_by => { -desc => 'date' },
}
)->first;
return $latest;
return $latest;
}
sub create_new {
my $self = shift;
my $type = shift;
my $date = shift;
my $self = shift;
my $type = shift;
my $date = shift;
my $type_result = $self->find_by_type($type);
my $type_result = $self->find_by_type($type);
return unless $type_result;
return unless $type_result;
return $type_result->create_new($date);
return $type_result->create_new($date);
}
sub find_by_type {
my $self = shift;
my $type = shift;
my $self = shift;
my $type = shift;
return $self->find({ type => $type });
return $self->find( { type => $type } );
}
sub recalculate_all {
my $self = shift;
my $self = shift;
for my $leaderboard_result ( $self->all ) {
my $lb_type = $leaderboard_result->type;
if ( $lb_type =~ /^daily/ ) {
for my $leaderboard_result ( $self->all ) {
my $lb_type = $leaderboard_result->type;
if ( $lb_type =~ /^daily/ ) {
# Recalculating a daily set. This is calculated from the start of the
# day, so we need yesterdays date:
my $date = DateTime->today->subtract( days => 1 );
$self->_recalculate_leaderboard( $leaderboard_result, $date, 'days' );
# Recalculating a daily set. This is calculated from the start of the
# day, so we need yesterdays date:
my $date = DateTime->today->subtract( days => 1 );
$self->_recalculate_leaderboard( $leaderboard_result, $date,
'days' );
} elsif ( $lb_type =~ /^weekly/ ) {
}
elsif ( $lb_type =~ /^weekly/ ) {
# Recalculating a weekly set. This is calculated from a Monday, of the
# week before.
my $date = DateTime->today->truncate( to => 'week' )->subtract( weeks => 1 );
$self->_recalculate_leaderboard( $leaderboard_result, $date, 'weeks' );
# Recalculating a weekly set. This is calculated from a Monday, of the
# week before.
my $date =
DateTime->today->truncate( to => 'week' )->subtract( weeks => 1 );
$self->_recalculate_leaderboard( $leaderboard_result, $date,
'weeks' );
} elsif ( $lb_type =~ /^monthly/ ) {
}
elsif ( $lb_type =~ /^monthly/ ) {
# Recalculate a monthly set. This is calculated from the first of the
# month, for the month before.
my $date = DateTime->today->truncate( to => 'month' )->subtract( months => 1);
$self->_recalculate_leaderboard( $leaderboard_result, $date, 'months' );
# Recalculate a monthly set. This is calculated from the first of the
# month, for the month before.
my $date = DateTime->today->truncate( to => 'month' )
->subtract( months => 1 );
$self->_recalculate_leaderboard( $leaderboard_result, $date,
'months' );
} elsif ( $lb_type =~ /^all_time/ ) {
}
elsif ( $lb_type =~ /^all_time/ ) {
# Recalculate for an all time set. This is calculated similarly to
# daily, but is calculated from an end time.
my $date = DateTime->today;
$self->_recalculate_leaderboard( $leaderboard_result, $date, 'days' );
# Recalculate for an all time set. This is calculated similarly to
# daily, but is calculated from an end time.
my $date = DateTime->today;
$self->_recalculate_leaderboard( $leaderboard_result, $date,
'days' );
} else {
warn "Unrecognised Set";
}
else {
warn "Unrecognised Set";
}
}
}
}
sub _recalculate_leaderboard {
my ( $self, $lb_result, $date, $diff ) = @_;
my ( $self, $lb_result, $date, $diff ) = @_;
$self->result_source->schema->txn_do( sub {
$lb_result->sets->related_resultset('values')->delete_all;
$lb_result->sets->delete_all;
$lb_result->create_new($date->clone->subtract( $diff => 1 ));
$lb_result->create_new($date);
});
$self->result_source->schema->txn_do(
sub {
$lb_result->sets->related_resultset('values')->delete_all;
$lb_result->sets->delete_all;
$lb_result->create_new( $date->clone->subtract( $diff => 1 ) );
$lb_result->create_new($date);
}
);
}
1;

View file

@ -5,6 +5,6 @@ use warnings;
use base 'DBIx::Class::ResultSet';
sub entity { shift->search_related('entity', @_) }
sub entity { shift->search_related( 'entity', @_ ) }
1;

View file

@ -8,47 +8,51 @@ use base 'DBIx::Class::ResultSet';
use DateTime;
sub search_between {
my ( $self, $from, $to ) = @_;
my ( $self, $from, $to ) = @_;
my $dtf = $self->result_source->schema->storage->datetime_parser;
return $self->search({
purchase_time => {
-between => [
$dtf->format_datetime($from),
$dtf->format_datetime($to),
],
},
});
my $dtf = $self->result_source->schema->storage->datetime_parser;
return $self->search(
{
purchase_time => {
-between =>
[ $dtf->format_datetime($from), $dtf->format_datetime($to), ],
},
}
);
}
sub search_before {
my ( $self, $date ) = @_;
my ( $self, $date ) = @_;
my $dtf = $self->result_source->schema->storage->datetime_parser;
return $self->search({
purchase_time => { '<' => $dtf->format_datetime( $date ) },
});
my $dtf = $self->result_source->schema->storage->datetime_parser;
return $self->search(
{
purchase_time => { '<' => $dtf->format_datetime($date) },
}
);
}
sub today_rs {
my ( $self ) = @_;
my ($self) = @_;
my $today = DateTime->today();
return $self->search_between( $today, $today->clone->add( days => 1 ) );
my $today = DateTime->today();
return $self->search_between( $today, $today->clone->add( days => 1 ) );
}
sub week_rs {
my ( $self ) = @_;
my ($self) = @_;
my $today = DateTime->today();
return $self->search_between( $today->clone->subtract( days => 7 ), $today );
my $today = DateTime->today();
return $self->search_between( $today->clone->subtract( days => 7 ),
$today );
}
sub month_rs {
my ( $self ) = @_;
my ($self) = @_;
my $today = DateTime->today();
return $self->search_between( $today->clone->subtract( days => 30 ), $today );
my $today = DateTime->today();
return $self->search_between( $today->clone->subtract( days => 30 ),
$today );
}
1;

View file

@ -37,11 +37,11 @@ This option is then provided to the Schema's 'connect' function.
=cut
option connection => (
is => 'ro',
format => 's',
required => 0,
short => 'c',
doc => "The DBI connection string to use",
is => 'ro',
format => 's',
required => 0,
short => 'c',
doc => "The DBI connection string to use",
);
=head2 --username ( -u )
@ -51,11 +51,11 @@ The username to use for connection to the database
=cut
option username => (
is => 'ro',
format => 's',
default => '',
short => 'u',
doc => "The username for the DB connection",
is => 'ro',
format => 's',
default => '',
short => 'u',
doc => "The username for the DB connection",
);
=head2 --password ( -p )
@ -65,11 +65,11 @@ The password to use for connection to the database
=cut
option password => (
is => 'ro',
format => 's',
default => '',
short => 'p',
doc => "The password for the supplied user",
is => 'ro',
format => 's',
default => '',
short => 'p',
doc => "The password for the supplied user",
);
=head2 --force ( -f )
@ -80,10 +80,10 @@ the same version of ddl items.
=cut
option force => (
is => 'ro',
default => sub { 0 },
short => 'f',
doc => "Force the action if required",
is => 'ro',
default => sub { 0 },
short => 'f',
doc => "Force the action if required",
);
=head2 --version ( -v )
@ -94,11 +94,11 @@ ddl.
=cut
option version => (
is => 'ro',
format => 'i',
default => sub { shift->dh->schema->schema_version },
short => 'v',
doc => "Version to use as target",
is => 'ro',
format => 'i',
default => sub { shift->dh->schema->schema_version },
short => 'v',
doc => "Version to use as target",
);
=head1 ATTRIBUTES
@ -113,8 +113,8 @@ to be defined in the 'new_with_options' call.
=cut
has schema_class => (
is => 'ro',
required => 1,
is => 'ro',
required => 1,
);
=head2 schema
@ -125,15 +125,12 @@ This is the connected schema. This uses the 'schema_class' attribute and
=cut
has schema => (
is => 'lazy',
builder => sub {
my $self = shift;
return use_module( $self->schema_class )->connect(
$self->connection,
$self->username,
$self->password,
);
},
is => 'lazy',
builder => sub {
my $self = shift;
return use_module( $self->schema_class )
->connect( $self->connection, $self->username, $self->password, );
},
);
=head2 script_directory
@ -144,8 +141,8 @@ versions. Defaults to 'share/ddl'.
=cut
has script_directory => (
is => 'ro',
default => 'share/ddl',
is => 'ro',
default => 'share/ddl',
);
=head2 databases
@ -160,8 +157,8 @@ defaults to returning the following:
=cut
has databases => (
is => 'ro',
default => sub { [ qw/ PostgreSQL SQLite / ] },
is => 'ro',
default => sub { [qw/ PostgreSQL SQLite /] },
);
=head2 dh
@ -172,16 +169,18 @@ This returns the actual DeploymentHandler, set up using the 'schema',
=cut
has dh => (
is => 'lazy',
builder => sub {
my ( $self ) = @_;
return DBIx::Class::DeploymentHandler->new({
schema => $self->schema,
force_overwrite => $self->force,
script_directory => $self->script_directory,
databases => $self->databases,
});
}
is => 'lazy',
builder => sub {
my ($self) = @_;
return DBIx::Class::DeploymentHandler->new(
{
schema => $self->schema,
force_overwrite => $self->force,
script_directory => $self->script_directory,
databases => $self->databases,
}
);
}
);
=head1 COMMANDS
@ -195,17 +194,19 @@ This will create the ddl files required to perform an upgrade.
=cut
sub cmd_write_ddl {
my ( $self ) = @_;
my ($self) = @_;
$self->dh->prepare_install;
my $v = $self->version;
$self->dh->prepare_install;
my $v = $self->version;
if ( $v > 1 ) {
$self->dh->prepare_upgrade({
from_version => $v - 1,
to_version => $v,
});
}
if ( $v > 1 ) {
$self->dh->prepare_upgrade(
{
from_version => $v - 1,
to_version => $v,
}
);
}
}
=head2 install_dh
@ -216,12 +217,14 @@ database. Only for use on a pre-existing database.
=cut
sub cmd_install_dh {
my ( $self ) = @_;
my ($self) = @_;
$self->dh->install_version_storage;
$self->dh->add_database_version({
version => $self->version,
});
$self->dh->install_version_storage;
$self->dh->add_database_version(
{
version => $self->version,
}
);
}
=head2 install
@ -231,11 +234,13 @@ This command will install all the tables to the provided database
=cut
sub cmd_install {
my ( $self ) = @_;
my ($self) = @_;
$self->dh->install({
version => $self->version,
});
$self->dh->install(
{
version => $self->version,
}
);
}
=head2 upgrade
@ -245,9 +250,9 @@ This command will upgrade all tables to the latest versions
=cut
sub cmd_upgrade {
my ( $self ) = @_;
my ($self) = @_;
$self->dh->upgrade;
$self->dh->upgrade;
}
=head1 AUTHOR