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
This commit is contained in:
2021-06-02 01:49:24 +09:00
parent 17b1db88c1
commit 27f782f659
17 changed files with 393 additions and 17 deletions

View File

@@ -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();

View File

@@ -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)

View File

@@ -34,7 +34,7 @@ class DashboardController extends Controller
public function __construct()
{
$this->middleware('auth');
$this->middleware('role:Guest');
$this->middleware('role:User');
}
/**

View File

@@ -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.');

View File

@@ -0,0 +1,99 @@
<?php
namespace App\Jobs\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Bus;
use Carbon\Carbon;
use Log;
//Models
use App\Models\MiningTax\MiningOperation;
use App\Models\MiningTax\Ledger;
class ProcessAllianceMiningOperations implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set job parameters
$this->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'];
}
}

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Bus;
use App\Jobs\Commands\MiningTaxes\Invoices\SendMiningTaxesInvoices;
use App\Jobs\Commands\MiningTaxes\Invoices\ProcessAllianceMiningOperations;
class MiningTaxesWeeklyInvoicing implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 2;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set job parameters
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Bus::chain([
new ProcessAllianceMiningOperations,
new SendMiningTaxesInvoices,
])->dispatch();
}
}

View File

@@ -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;

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MiningOperation extends Model
{
//Table Name
protected $table = 'alliance_mining_tax_operations';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
/**
* The array of variables which are mass assignable
*
* @var array
*/
protected $fillable = [
'structure_id',
'structure_name',
'authorized_by_id',
'authorized_by_name',
'operation_date',
'processed',
'processed_on',
];
}

View File

@@ -0,0 +1,50 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMiningTaxMiningOperationsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if(!Schema::hasTable('alliance_mining_tax_operations')) {
Schema::create('alliance_mining_tax_operations', function (Blueprint $table) {
$table->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');
}
}

View File

@@ -1,3 +1,4 @@
@if(auth()->user()->hasPermission('mining.officer'))
<li class="nav-item has-treeview">
<a href="#" class="nav-link">
<i class="nav-icon fas fa-cubes"></i>
@@ -17,5 +18,12 @@
<p>Paid Invoices</p>
</a>
</li>
<li class="nav-item">
<a href="/miningtax/admin/display/form/operations" class="nav-link">
<i class="far fa-money-bill-alt nav-icon"></i>
<p>Mining Operation Form</p>
</a>
</li>
</ul>
</li>
</li>
@endif

View File

@@ -8,7 +8,9 @@
<li class="nav-item d-none d-sm-inline-block">
<a href="/dashboard" class="nav-link">Dashboard</a>
</li>
@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'))
<li class="nav-item d-non d-sm-inline-block">
<a class="nav-link" href="/admin/dashboard">Admin Dashboard</a>
</li>

View File

@@ -0,0 +1,29 @@
@extends('layouts.admin.b4')
@section('content')
<br>
<div class="container">
<div class="card">
<div class="card-header">
<h2>Alliance Mining Operations Form</h2>
<h4>Enter in the information, then hit submit.</h4>
</div>
<div class="card-body">
{!! Form::open(['action' => 'MiningTaxes\MiningTaxesAdminController@submitMiningOperationForm', method' => 'POST']) !!}
<div class="form-group col-md-6">
{{ Form::label('name', 'Mining Operation Name') }}
{{ Form::text('name', '', ['class' => 'form-control']) }}
</div>
<div class="form-group col-md-6">
{{ Form::label('date', 'Date') }}
{{ Form::date('date', \Carbon\Carbon::now(), ['class' => 'form-control'] }}
</div>
<div class="form-group col-md-6">
{{ Form::label('structure', 'Mining Structure') }}
{{ Form::select('structure', $structures, 'None', ['class' => 'form-control']) }}
</div>
{{ Submit::submit('Submit', ['class' => 'btn btn-primary']) }}
{!! Form::close() !!}
</div>
</div>
</div>
@endsection

View File

@@ -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',

View File

@@ -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',