diff --git a/lib/Lacuna/DB/Result/Laws.pm b/lib/Lacuna/DB/Result/Laws.pm index 1e51f32b..c9307a1a 100644 --- a/lib/Lacuna/DB/Result/Laws.pm +++ b/lib/Lacuna/DB/Result/Laws.pm @@ -23,6 +23,7 @@ __PACKAGE__->typecast_map(type => { Jurisdiction => 'Lacuna::DB::Result::Laws::Jurisdiction', MembersOnlyColonization => 'Lacuna::DB::Result::Laws::MembersOnlyColonization', MembersOnlyMiningRights => 'Lacuna::DB::Result::Laws::MembersOnlyMiningRights', + Taxation => 'Lacuna::DB::Result::Laws::Taxation', Writ => 'Lacuna::DB::Result::Laws::Writ', }); diff --git a/lib/Lacuna/DB/Result/Laws/Taxation.pm b/lib/Lacuna/DB/Result/Laws/Taxation.pm new file mode 100644 index 00000000..da1016f2 --- /dev/null +++ b/lib/Lacuna/DB/Result/Laws/Taxation.pm @@ -0,0 +1,9 @@ +package Lacuna::DB::Result::Laws::Taxation; + +use Moose; +use utf8; +no warnings qw(uninitialized); +extends 'Lacuna::DB::Result::Laws'; + +no Moose; +__PACKAGE__->meta->make_immutable(inline_constructor => 0); diff --git a/lib/Lacuna/DB/Result/Propositions.pm b/lib/Lacuna/DB/Result/Propositions.pm index edb801d5..070fc765 100644 --- a/lib/Lacuna/DB/Result/Propositions.pm +++ b/lib/Lacuna/DB/Result/Propositions.pm @@ -44,6 +44,7 @@ __PACKAGE__->typecast_map(type => { RepairModule => 'Lacuna::DB::Result::Propositions::RepairModule', RepealLaw => 'Lacuna::DB::Result::Propositions::RepealLaw', SeizeStar => 'Lacuna::DB::Result::Propositions::SeizeStar', + Taxation => 'Lacuna::DB::Result::Propositions::Taxation', TransferStationOwnership=> 'Lacuna::DB::Result::Propositions::TransferStationOwnership', UpgradeModule => 'Lacuna::DB::Result::Propositions::UpgradeModule', }); diff --git a/lib/Lacuna/DB/Result/Propositions/Taxation.pm b/lib/Lacuna/DB/Result/Propositions/Taxation.pm new file mode 100644 index 00000000..caea2cb3 --- /dev/null +++ b/lib/Lacuna/DB/Result/Propositions/Taxation.pm @@ -0,0 +1,21 @@ +package Lacuna::DB::Result::Propositions::Taxation; + +use Moose; +use utf8; +no warnings qw(uninitialized); +extends 'Lacuna::DB::Result::Propositions'; + +before pass => sub { + my ($self) = @_; + my $law = Lacuna->db->resultset('Lacuna::DB::Result::Laws')->new({ + name => $self->name, + description => $self->description, + type => 'Taxation', + scratch => $self->scratch, + station_id => $self->station_id, + })->insert; +}; + + +no Moose; +__PACKAGE__->meta->make_immutable(inline_constructor => 0); diff --git a/lib/Lacuna/RPC/Building/Parliament.pm b/lib/Lacuna/RPC/Building/Parliament.pm index 4457ee9d..a2662614 100644 --- a/lib/Lacuna/RPC/Building/Parliament.pm +++ b/lib/Lacuna/RPC/Building/Parliament.pm @@ -111,6 +111,21 @@ sub view_laws { }; } +sub view_taxes_collected { + my ($self, $session_id, $building_id) = @_; + my $empire = $self->get_empire_by_session($session_id); + my $building = $self->get_building($empire, $building_id); + my @out; +# BUG get the taxes collected here + my $taxes = $building->taxes->search({}); + while (my $tax = $taxes->next) { + push @out, $tax->get_status($empire); + } + return { + status => $self->format_status($empire, $building->body), + taxes_collected => \@out, + }; +} sub cast_vote { my ($self, $session_id, $building_id, $proposition_id, $vote) = @_; @@ -436,6 +451,36 @@ sub propose_rename_asteroid { }; } +sub propose_taxation { + my ($self, $session_id, $building_id, $taxes) = @_; + my $empire = $self->get_empire_by_session($session_id); + if ($empire->current_session->is_sitter) { + confess [1015, 'Sitters cannot create propositions.']; + } + my $building = $self->get_building($empire, $building_id); + unless ($building->level >= 15) { + confess [1013, 'Parliament must be level 15 to propose taxation.',15]; + } + unless ($taxes =~ /^\d+$/ && $taxes > 0 ) + { + confess [1009, 'Taxes must be an integer greater than 0.']; + } + my $proposition = Lacuna->db->resultset('Lacuna::DB::Result::Propositions')->new({ + type => 'Taxation', + name => 'Tax of '.$taxes.' resources per day', + description => 'Implement a tax of '.$taxes. ' resources per day for all empires in the jurisdiction of this station', + scratch => { taxes => $taxes }, + proposed_by_id => $empire->id, + }); + $proposition->station($building->body); + $proposition->proposed_by($empire); + $proposition->insert; + return { + status => $self->format_status($empire, $building->body), + proposition => $proposition->get_status($empire), + }; +} + sub propose_rename_uninhabited { my ($self, $session_id, $building_id, $planet_id, $name) = @_; my $empire = $self->get_empire_by_session($session_id); @@ -686,6 +731,7 @@ sub propose_expel_member { } + __PACKAGE__->register_rpc_method_names(qw(get_bodies_for_star_in_jurisdiction get_mining_platforms_for_asteroid_in_jurisdiction propose_evict_mining_platform propose_members_only_mining_rights propose_members_only_colonization propose_rename_asteroid propose_rename_uninhabited propose_broadcast_on_network19 get_stars_in_jurisdiction propose_rename_star propose_repeal_law propose_seize_star propose_transfer_station_ownership view_propositions view_laws cast_vote propose_fire_bfg propose_writ propose_elect_new_leader propose_induct_member propose_expel_member)); no Moose; diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 48f98dcf..04a64018 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -2,6 +2,7 @@ - API: Added proposing induction of new alliance members at Parliament level 10. - API: Added proposing expulstion of alliance members at Parliament level 10. - API: Added proposing election of a new alliance leader at Parliament level 11. + - API: Added proposing taxation at Parliament level 15. - API: Added proposing renaming uninhabited planets at Parliament level 17. - API: Added proposing members only colonization at Parliament level 18. - Fix: Police Station docs now show up under Modules instead of Buildings.