From 27f782f65967eb96e4d953d43b3345e9df02c4a6 Mon Sep 17 00:00:00 2001 From: drkthunder02 Date: Wed, 2 Jun 2021 01:49:24 +0900 Subject: [PATCH] added a way for mining operations to be recorded. refactored mining tax invoice jobs with a job chain and new directory structure added views and forms for mining operations added navbar button for mining operations refactored how admin dashboard controller checks for permissions versus roles --- app/Console/Kernel.php | 17 +++- .../Dashboard/AdminDashboardController.php | 29 +++++- .../Dashboard/DashboardController.php | 2 +- .../MiningTaxesAdminController.php | 66 ++++++++++++- .../ProcessAllianceMiningOperations.php | 99 +++++++++++++++++++ .../SendMiningTaxesInvoices.php | 2 +- .../UpdateMiningTaxesLateInvoices15th.php | 2 +- .../UpdateMiningTaxesLateInvoices1st.php | 2 +- .../MiningTaxesWeeklyInvoicing.php | 58 +++++++++++ .../MiningTaxes/ProcessMiningTaxesLedgers.php | 1 + app/Models/MiningTax/MiningOperation.php | 33 +++++++ ...ate_mining_tax_mining_operations_table.php | 50 ++++++++++ .../admin/sidebarmenu/miningtax.blade.php | 10 +- .../layouts/user/dashboard/navbar.blade.php | 4 +- .../admin/display/miningops/form.blade.php | 29 ++++++ vendor/composer/autoload_classmap.php | 3 +- vendor/composer/autoload_static.php | 3 +- 17 files changed, 393 insertions(+), 17 deletions(-) create mode 100644 app/Jobs/Commands/MiningTaxes/Invoices/ProcessAllianceMiningOperations.php rename app/Jobs/Commands/MiningTaxes/{ => Invoices}/SendMiningTaxesInvoices.php (99%) rename app/Jobs/Commands/MiningTaxes/{ => Invoices}/UpdateMiningTaxesLateInvoices15th.php (98%) rename app/Jobs/Commands/MiningTaxes/{ => Invoices}/UpdateMiningTaxesLateInvoices1st.php (98%) create mode 100644 app/Jobs/Commands/MiningTaxes/MiningTaxesWeeklyInvoicing.php create mode 100644 app/Models/MiningTax/MiningOperation.php create mode 100644 database/migrations/2021_06_01_151828_create_mining_tax_mining_operations_table.php create mode 100644 resources/views/miningtax/admin/display/miningops/form.blade.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index aedf17adc..d43ee762f 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -10,9 +10,11 @@ use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use App\Jobs\Commands\MiningTaxes\PreFetchMiningTaxesLedgers; use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesObservers; use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesPayments; -use App\Jobs\Commands\MiningTaxes\SendMiningTaxesInvoices; -use App\Jobs\Commands\MiningTaxes\UpdateMiningTaxesLateInvoices1st; -use App\Jobs\Commands\MiningTaxes\UpdateMiningTaxesLateInvoices15th; +//use App\Jobs\Commands\MiningTaxes\Invoices\SendMiningTaxesInvoices; +use App\Jobs\Commands\MiningTaxes\Invoices\UpdateMiningTaxesLateInvoices1st; +use App\Jobs\Commands\MiningTaxes\Invoices\UpdateMiningTaxesLateInvoices15th; +//use App\Jobs\Commands\MiningTaxes\Invoices\ProcessAllianceMiningOperations; +use App\Jobs\Commands\MiningTaxes\MiningTaxesWeeklyInvoicing; use App\Jobs\Commands\Finances\UpdateAllianceWalletJournalJob; use App\Jobs\Commands\Finances\UpdateItemPrices as UpdateItemPricesJob; use App\Jobs\Commands\Data\PurgeUsers as PurgeUsersJob; @@ -86,9 +88,16 @@ class Kernel extends ConsoleKernel $schedule->job(new PreFetchMiningTaxesLedgers) ->dailyAt('22:00') ->withoutOverlapping(); - $schedule->job(new SendMiningTaxesInvoices) + $schedule->job(new MiningTaxesWeeklyInvoicing) ->weeklyOn(1, '06:00') ->withoutOverlapping(); + //$schedule->job(new ProcessAllianceMiningOperations) + // ->weeklyOn(1, '06:00') + // ->withChain([new SendMiningTaxesInvoices]) + // ->withoutOverlapping(); + //$schedule->job(new SendMiningTaxesInvoices) + // ->weeklyOn(1, '06:00') + // ->withoutOverlapping(); $schedule->job(new ProcessMiningTaxesPayments) ->hourlyAt('15') ->withoutOverlapping(); diff --git a/app/Http/Controllers/Dashboard/AdminDashboardController.php b/app/Http/Controllers/Dashboard/AdminDashboardController.php index 562602603..27f32b9e9 100644 --- a/app/Http/Controllers/Dashboard/AdminDashboardController.php +++ b/app/Http/Controllers/Dashboard/AdminDashboardController.php @@ -33,14 +33,17 @@ class AdminDashboardController extends Controller public function __construct() { $this->middleware('auth'); - $this->middleware('role:Admin'); + $this->middleware('role:User'); } /** * Show the administration dashboard. */ public function displayAdminDashboard() { - if(auth()->user()->hasRole('Admin') || auth()->user()->hasPermission('moon.admin') || auth()->user()->hasPermission('srp.admin') || auth()->user()->hasPermission('contract.admin')) { + if(auth()->user()->hasRole('Admin'); + auth()->user()->hasPermission('srp.admin') || + auth()->user()->hasPermission('contract.admin' || + auth()->user()->hasPermission('mining.officer'))) { //Do nothing and continue on } else { redirect('/dashboard'); @@ -54,6 +57,8 @@ class AdminDashboardController extends Controller * Display users in a paginated format */ public function displayUsersPaginated() { + $this->middleware('role:Admin'); + //Declare array variables $user = array(); $permission = array(); @@ -91,6 +96,8 @@ class AdminDashboardController extends Controller * Search users for a specific user */ public function searchUsers(Request $request) { + $this->middleware('role:Admin'); + //Declare array variables $user = array(); $permission = array(); @@ -133,6 +140,8 @@ class AdminDashboardController extends Controller * Display the allowed logins */ public function displayAllowedLogins() { + $this->middleware('role:Admin'); + //Declare array variables $entities = array(); @@ -155,6 +164,8 @@ class AdminDashboardController extends Controller * */ public function displayTaxes() { + $this->middleware('role:Admin'); + //Declare variables needed for displaying items on the page $months = 3; $pi = array(); @@ -246,6 +257,8 @@ class AdminDashboardController extends Controller * Display the modify user form */ public function displayModifyUser(Request $request) { + $this->middleware('role:Admin'); + $permissions = array(); $roles = array(); @@ -280,6 +293,8 @@ class AdminDashboardController extends Controller * Modify a user's role */ public function modifyRole(Request $request) { + $this->middleware('role:Admin'); + $this->validate($request, [ 'user' => 'required', 'role' => 'required', @@ -293,6 +308,8 @@ class AdminDashboardController extends Controller } public function addPermission(Request $request) { + $this->middleware('role:Admin'); + //Get the user and permission from the form $character = $request->user; $permission = $request->permission; @@ -316,6 +333,8 @@ class AdminDashboardController extends Controller * Delete a user to reset their permissions */ public function removeUser(Request $request) { + $this->middleware('role:Admin'); + //Get the user from the form to delete $user = $request->user; @@ -341,6 +360,8 @@ class AdminDashboardController extends Controller * Add an entity to the allowed login table */ public function addAllowedLogin(Request $request) { + $this->middleware('role:Admin'); + //Set the parameters to validate the form $this->validate($request, [ 'allowedEntityId' => 'required', @@ -380,6 +401,8 @@ class AdminDashboardController extends Controller * Remove an entity from the allowed login table */ public function removeAllowedLogin(Request $request) { + $this->middleware('role:Admin'); + //Set the parameters to validate the form $this->validate($request, [ 'removeAllowedLogin' => 'required', @@ -396,6 +419,8 @@ class AdminDashboardController extends Controller * Show journal entries in a table for admins from alliance wallets */ public function displayJournalEntries() { + $this->middleware('role:Admin'); + $date = Carbon::now()->subDays(60); $journal = AllianceWalletJournal::where('date', '>=', $date) diff --git a/app/Http/Controllers/Dashboard/DashboardController.php b/app/Http/Controllers/Dashboard/DashboardController.php index 12f045cab..584712e75 100644 --- a/app/Http/Controllers/Dashboard/DashboardController.php +++ b/app/Http/Controllers/Dashboard/DashboardController.php @@ -34,7 +34,7 @@ class DashboardController extends Controller public function __construct() { $this->middleware('auth'); - $this->middleware('role:Guest'); + $this->middleware('role:User'); } /** diff --git a/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php b/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php index cdf17f47b..d42a74b5c 100644 --- a/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php +++ b/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php @@ -25,12 +25,74 @@ use App\Models\Moon\ItemComposition; use App\Models\Moon\MineralPrice; use App\Models\Esi\EsiToken; use App\Models\Esi\EsiScope; +use App\Models\Structure\Structure; class MiningTaxesAdminController extends Controller { public function __construct() { $this->middleware('auth'); - $this->middleware('role:Admin'); + $this->middleware('role:User'); + $this->middleware('mining.officer'); + } + + /** + * Display the form for mining operations held by the alliance + */ + public function DisplayMiningOperationForm() { + //Declare variables + $lookup = new LookupHelper; + $sHelper = new StructureHelper; + $structures = new Collection; + + //Get all of the structures + $athanors = $sHelper->GetStructuresByType('Athanor'); + $tataras = $sHelper->GetStructuresByType('Tatara'); + + foreach($athanors as $athanor) { + $structures->push([ + $athanor->structure_name => $athanor->structure_id, + ]); + } + + foreach($tataras as $tatara) { + $structures->push([ + $tatara->structure_name => $tatara->structure_id, + ]); + } + + $structures->sort(); + + return view('miningtax.admin.display.miningops.form')->with('structures', $structures); + } + + /** + * Store the results from the mining operations form + */ + public function StoreMiningOperationForm(Request $request) { + //Validate the data + $this->validate($request, [ + 'name' => 'required', + 'date' => 'required', + 'structure' => 'required', + ]); + + //Get the name of the structure from the table + $moon = Observer::where([ + 'observer_id' => $request->structure, + ])->get(); + + //Save the mining operation into the database + $operation = new MiningOperation; + $operation->structure_id = $request->structure; + $operation->structure_name = $moon->observer_name; + $operation->authorized_by_id = auth()->user()->getId(); + $operation->authorized_by_name = auth()->user()->getName(); + $operation->operation_date = $request->date; + $operation->processed = 'No'; + $operation->processed_on = null; + $operation->save(); + + return redirect('/admin/dashboard')->with('success', 'Operation added successfully.'); } /** @@ -153,6 +215,8 @@ class MiningTaxesAdminController extends Controller 'invoice_id' => $request->invoiceId, ])->update([ 'status' => $request->status, + 'modified_by_id' => auth()->user()->getId(), + 'modified_by_name' => auth()->user()->getName(), ]); return redirect('/miningtax/admin/display/unpaid')->with('success', 'Invoice successfully updated.'); diff --git a/app/Jobs/Commands/MiningTaxes/Invoices/ProcessAllianceMiningOperations.php b/app/Jobs/Commands/MiningTaxes/Invoices/ProcessAllianceMiningOperations.php new file mode 100644 index 000000000..351c5ec00 --- /dev/null +++ b/app/Jobs/Commands/MiningTaxes/Invoices/ProcessAllianceMiningOperations.php @@ -0,0 +1,99 @@ +connection = 'redis'; + $this->onQueue('miningtaxes'); + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $count = MiningOperation::where([ + 'processed' => 'No', + ])->count() + + if($count > 0) { + $operations = MiningOperation::where([ + 'processed' => 'No', + ])->get(); + + foreach($operations as $operation) { + $ledgers = Ledger::where([ + 'observer_id' => $operation->structure_id, + 'invoiced' => 'No', + ])->get(); + + foreach($ledgers as $ledger) { + Ledger::where([ + 'observer_id' => $operation->structure_id, + 'invoiced' => 'No', + ])->update([ + 'invoiced' => 'Yes', + 'invoice_id' => 'Mining Op ', + ]); + } + + MiningOperation::where([ + 'id' => $operation->id, + ])->update([ + 'processed' => 'Yes', + 'processed_on' => Carbon::now(), + ]); + } + } + } + + /** + * Set the tags for Horzion + * + * @var array + */ + public function tags() { + return ['ProcessAllianceMiningOperations', 'MiningTaxes', 'MiningOperations']; + } +} diff --git a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php b/app/Jobs/Commands/MiningTaxes/Invoices/SendMiningTaxesInvoices.php similarity index 99% rename from app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php rename to app/Jobs/Commands/MiningTaxes/Invoices/SendMiningTaxesInvoices.php index 917b1b11b..e20f5a256 100644 --- a/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoices.php +++ b/app/Jobs/Commands/MiningTaxes/Invoices/SendMiningTaxesInvoices.php @@ -1,6 +1,6 @@ connection = 'redis'; + $this->onQueue('miningtaxes'); + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + Bus::chain([ + new ProcessAllianceMiningOperations, + new SendMiningTaxesInvoices, + ])->dispatch(); + } +} diff --git a/app/Jobs/Commands/MiningTaxes/ProcessMiningTaxesLedgers.php b/app/Jobs/Commands/MiningTaxes/ProcessMiningTaxesLedgers.php index ade6e52f9..c5ce4dfc9 100644 --- a/app/Jobs/Commands/MiningTaxes/ProcessMiningTaxesLedgers.php +++ b/app/Jobs/Commands/MiningTaxes/ProcessMiningTaxesLedgers.php @@ -9,6 +9,7 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Carbon\Carbon; +use Log; //App Library use App\Library\Helpers\LookupHelper; diff --git a/app/Models/MiningTax/MiningOperation.php b/app/Models/MiningTax/MiningOperation.php new file mode 100644 index 000000000..1595d4c6f --- /dev/null +++ b/app/Models/MiningTax/MiningOperation.php @@ -0,0 +1,33 @@ +id(); + $table->unsignedBigInteger('structure_id'); + $table->string('structure_name'); + $table->unsignedBigInteger('authorized_by_id'); + $table->string('authorized_by_name'); + $table->date('operation_date'); + $table->enum('processed', [ + 'No', + 'Yes', + ])->default('No'); + $table->date('processed_on')->nullable(); + $table->timestamps(); + }) + } + + if(!Schema::hasTable('alliance_mining_tax_invoices')) { + Schema::table('alliance_mining_tax_invoices', function (Blueprint $table) { + $table->unsignedBigInteger('modified_by_id')->nullable(); + $table->string('modified_by_name')->nullable(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('alliance_mining_tax_operations'); + } +} diff --git a/resources/views/layouts/admin/sidebarmenu/miningtax.blade.php b/resources/views/layouts/admin/sidebarmenu/miningtax.blade.php index 41c9919d5..7826a3ea8 100644 --- a/resources/views/layouts/admin/sidebarmenu/miningtax.blade.php +++ b/resources/views/layouts/admin/sidebarmenu/miningtax.blade.php @@ -1,3 +1,4 @@ +@if(auth()->user()->hasPermission('mining.officer')) + - \ No newline at end of file + +@endif \ No newline at end of file diff --git a/resources/views/layouts/user/dashboard/navbar.blade.php b/resources/views/layouts/user/dashboard/navbar.blade.php index 8e79e9aa0..451cfd97a 100644 --- a/resources/views/layouts/user/dashboard/navbar.blade.php +++ b/resources/views/layouts/user/dashboard/navbar.blade.php @@ -8,7 +8,9 @@ - @if(auth()->user()->hasRole('Admin') || auth()->user()->hasPermission('contract.admin') || auth()->user()->hasPermission('moon.admin')) + @if(auth()->user()->hasRole('Admin') || + auth()->user()->hasPermission('contract.admin') || + auth()->user()->hasPermission('mining.officer')) diff --git a/resources/views/miningtax/admin/display/miningops/form.blade.php b/resources/views/miningtax/admin/display/miningops/form.blade.php new file mode 100644 index 000000000..66cf763a2 --- /dev/null +++ b/resources/views/miningtax/admin/display/miningops/form.blade.php @@ -0,0 +1,29 @@ +@extends('layouts.admin.b4') +@section('content') +
+
+
+
+

Alliance Mining Operations Form

+

Enter in the information, then hit submit.

+
+
+ {!! Form::open(['action' => 'MiningTaxes\MiningTaxesAdminController@submitMiningOperationForm', method' => 'POST']) !!} +
+ {{ Form::label('name', 'Mining Operation Name') }} + {{ Form::text('name', '', ['class' => 'form-control']) }} +
+
+ {{ Form::label('date', 'Date') }} + {{ Form::date('date', \Carbon\Carbon::now(), ['class' => 'form-control'] }} +
+
+ {{ Form::label('structure', 'Mining Structure') }} + {{ Form::select('structure', $structures, 'None', ['class' => 'form-control']) }} +
+ {{ Submit::submit('Submit', ['class' => 'btn btn-primary']) }} + {!! Form::close() !!} +
+
+
+@endsection \ No newline at end of file diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 0511c6378..0c605ced4 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -38,8 +38,6 @@ return array( 'App\\Http\\Controllers\\Logistics\\FuelController' => $baseDir . '/app/Http/Controllers/Logistics/FuelController.php', 'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesAdminController' => $baseDir . '/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php', 'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesController' => $baseDir . '/app/Http/Controllers/MiningTaxes/MiningTaxesController.php', - 'App\\Http\\Controllers\\MoonRental\\MoonRentalAdminController' => $baseDir . '/app/Http/Controllers/MoonRental/MoonRentalAdminController.php', - 'App\\Http\\Controllers\\MoonRental\\MoonRentalController' => $baseDir . '/app/Http/Controllers/MoonRental/MoonRentalController.php', 'App\\Http\\Controllers\\SRP\\SRPAdminController' => $baseDir . '/app/Http/Controllers/SRP/SRPAdminController.php', 'App\\Http\\Controllers\\SRP\\SRPController' => $baseDir . '/app/Http/Controllers/SRP/SRPController.php', 'App\\Http\\Controllers\\Test\\TestController' => $baseDir . '/app/Http/Controllers/Test/TestController.php', @@ -73,6 +71,7 @@ return array( 'App\\Jobs\\Commands\\MiningTaxes\\SendMiningTaxesInvoicesOld' => $baseDir . '/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesOld.php', 'App\\Jobs\\Commands\\MiningTaxes\\UpdateMiningTaxesLateInvoices15th' => $baseDir . '/app/Jobs/Commands/MiningTaxes/UpdateMiningTaxesLateInvoices15th.php', 'App\\Jobs\\Commands\\MiningTaxes\\UpdateMiningTaxesLateInvoices1st' => $baseDir . '/app/Jobs/Commands/MiningTaxes/UpdateMiningTaxesLateInvoices1st.php', + 'App\\Jobs\\Commands\\MoonRental\\UpdateAllianceMoonRentalWorth' => $baseDir . '/app/Jobs/Commands/MoonRental/UpdateAllianceMoonRentalWorth.php', 'App\\Jobs\\Commands\\Structures\\FetchAllianceStructures' => $baseDir . '/app/Jobs/Commands/Structures/FetchAllianceStructures.php', 'App\\Jobs\\Commands\\Structures\\ProcessAllianceStructures' => $baseDir . '/app/Jobs/Commands/Structures/ProcessAllianceStructures.php', 'App\\Jobs\\Commands\\Structures\\PurgeAllianceStructures' => $baseDir . '/app/Jobs/Commands/Structures/PurgeAllianceStructures.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index b8b422d16..a4da77a32 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -606,8 +606,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'App\\Http\\Controllers\\Logistics\\FuelController' => __DIR__ . '/../..' . '/app/Http/Controllers/Logistics/FuelController.php', 'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesAdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/MiningTaxes/MiningTaxesAdminController.php', 'App\\Http\\Controllers\\MiningTaxes\\MiningTaxesController' => __DIR__ . '/../..' . '/app/Http/Controllers/MiningTaxes/MiningTaxesController.php', - 'App\\Http\\Controllers\\MoonRental\\MoonRentalAdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/MoonRental/MoonRentalAdminController.php', - 'App\\Http\\Controllers\\MoonRental\\MoonRentalController' => __DIR__ . '/../..' . '/app/Http/Controllers/MoonRental/MoonRentalController.php', 'App\\Http\\Controllers\\SRP\\SRPAdminController' => __DIR__ . '/../..' . '/app/Http/Controllers/SRP/SRPAdminController.php', 'App\\Http\\Controllers\\SRP\\SRPController' => __DIR__ . '/../..' . '/app/Http/Controllers/SRP/SRPController.php', 'App\\Http\\Controllers\\Test\\TestController' => __DIR__ . '/../..' . '/app/Http/Controllers/Test/TestController.php', @@ -641,6 +639,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'App\\Jobs\\Commands\\MiningTaxes\\SendMiningTaxesInvoicesOld' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/SendMiningTaxesInvoicesOld.php', 'App\\Jobs\\Commands\\MiningTaxes\\UpdateMiningTaxesLateInvoices15th' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/UpdateMiningTaxesLateInvoices15th.php', 'App\\Jobs\\Commands\\MiningTaxes\\UpdateMiningTaxesLateInvoices1st' => __DIR__ . '/../..' . '/app/Jobs/Commands/MiningTaxes/UpdateMiningTaxesLateInvoices1st.php', + 'App\\Jobs\\Commands\\MoonRental\\UpdateAllianceMoonRentalWorth' => __DIR__ . '/../..' . '/app/Jobs/Commands/MoonRental/UpdateAllianceMoonRentalWorth.php', 'App\\Jobs\\Commands\\Structures\\FetchAllianceStructures' => __DIR__ . '/../..' . '/app/Jobs/Commands/Structures/FetchAllianceStructures.php', 'App\\Jobs\\Commands\\Structures\\ProcessAllianceStructures' => __DIR__ . '/../..' . '/app/Jobs/Commands/Structures/ProcessAllianceStructures.php', 'App\\Jobs\\Commands\\Structures\\PurgeAllianceStructures' => __DIR__ . '/../..' . '/app/Jobs/Commands/Structures/PurgeAllianceStructures.php',