10 Commits
16 changed files with 3716 additions and 17 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ APP_DEBUG=
APP_URL=
LOG_CHANNEL=
BROADCAST_DRIVER=
CACHE_DRIVER=
CACHE_DRIVER=file
QUEUE_CONNECTION=
SESSION_DRIVER=
SESSION_LIFETIME=
File diff suppressed because one or more lines are too long
+49
View File
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\Cycle;
use App\Models\Item;
use App\Models\Package;
use App\Services\ExportCollection;
@@ -123,4 +124,52 @@ class ExportController extends Controller
$export = new ExportCollection( $Packages );
return Excel::download( $export , 'packages.xlsx' , null , [ \Maatwebsite\Excel\Excel::XLSX ] );
}
public function cycles()
{
$cycles = Cycle::with([
'user' => function ($query) {
$query->select('id', 'name', 'medical_center_id');
},
'user.medical_center' => function ($query) {
$query->select('id', 'name');
},
]);
$user = auth('api')->user();
if ($user->hasRole('User') or $user->hasRole('Supervisor')) {
$cycles = $cycles->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
});
}
$cycles = $cycles->orderByDesc('id')->get();
$cycles = $cycles->map(function ($item, $key) {
$row[] = $item["id"];
$row[] = $item["unique_id"];
$row[] = $item["note"];
$row[] = $item["sterilizer_id"];
$row[] = $item["cycle_number"];
$row[] = $item["user"] != null ? $item["user"]["id"] : null;
$row[] = $item["user"] != null ? $item["user"]["name"] : null;
$row[] = $item['user']['medical_center']['id'] ?? null;
$row[] = $item['user']['medical_center']['name'] ?? null;
return $row;
});
$cycles->prepend([
'شناسه آیتم',
'unique_id',
'یادداشت',
'sterilizer_id',
'cycle_number',
'شناسه کاربر',
'نام کاربر',
'شناسه بیمارستان',
'نام بیمارستان',
]);
$export = new ExportCollection($cycles);
return Excel::download($export, 'cycles.xlsx', null, [\Maatwebsite\Excel\Excel::XLSX]);
}
}
+4 -4
View File
@@ -111,13 +111,13 @@ class ItemController extends Controller
public function getItems()
{
$user = auth()->user();
$medicalCenterId = optional(optional($user)->medical_center)->id;
$userIds = User::where('medical_center_id', $medicalCenterId)->pluck('id')->toArray();
$userId = auth('api')->id();
// $medicalCenterId = optional(optional($user)->medical_center)->id;
// $userIds = User::where('medical_center_id', $medicalCenterId)->pluck('id')->toArray();
$Items = Item::where( "status" , StatusTypeEnum::APPROVED )
->where( "package_id" , null )
->whereIn('creator_id', $userIds)
->where('user_id', $userId)
->orderByDesc( 'id' )
->isNotRepaired()
->get();
@@ -77,6 +77,7 @@ class PackageController extends Controller
public function getPackages()
{
$Packages = Package::where("status", StatusTypeEnum::APPROVED)
->where("user_id", auth('api')->id())
->orderByDesc('id')
->get();
return PackageResource::collection($Packages);
+4 -2
View File
@@ -25,8 +25,9 @@ class StoreCycleRequest extends FormRequest
return [
'date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'cycle_number' => 'required|unique:cycles,cycle_number',
'note' => 'nullable',
'labels' => 'required|array|distinct',
'labels.*.id' => 'required|numeric|exists:labels,id',
];
break;
@@ -37,8 +38,9 @@ class StoreCycleRequest extends FormRequest
return [
'date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'cycle_number' => 'required|unique:cycles,cycle_number',
'note' => 'nullable',
'labels' => 'required|array|distinct',
'labels.*.id' => 'required|numeric|exists:labels,id',
];
break;
+2 -2
View File
@@ -26,7 +26,7 @@ class StoreLabelRequest extends FormRequest
'sterile_date' => 'required|date',
'expire_date' => 'required|date',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'cycle_number' => 'required|exists:cycles,cycle_number',
'lot_number' => 'required',
'package_id' => 'required|exists:packages,id',
];
@@ -39,7 +39,7 @@ class StoreLabelRequest extends FormRequest
'sterile_date' => 'required',
'expire_date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'cycle_number' => 'required|exists:cycles,cycle_number',
'lot_number' => 'required',
'package_id' => 'required|exists:packages,id',
];
+5 -2
View File
@@ -2,6 +2,7 @@
namespace App\Http\Requests;
use App\Rules\ValidateItemOwnership;
use Illuminate\Foundation\Http\FormRequest;
class StorePackageRequest extends FormRequest
@@ -23,7 +24,8 @@ class StorePackageRequest extends FormRequest
return [
'name' => 'required|max:250',
'note' => 'nullable',
'items' => 'required',
'items' => 'required|array|min:1',
'items.*' => ['exists:items,id','integer',new ValidateItemOwnership()],
];
break;
}
@@ -33,7 +35,8 @@ class StorePackageRequest extends FormRequest
return [
'name' => 'required|max:250',
'note' => 'nullable',
'items' => 'required',
'items' => 'required|array|min:1',
'items.*' => ['exists:items,id','integer',new ValidateItemOwnership()],
];
break;
-1
View File
@@ -41,7 +41,6 @@ class CycleRepository implements CycleRepositoryInterface
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->where("user_id", $user->id)
->orderByDesc('id')
->paginate(10);
}
-1
View File
@@ -40,7 +40,6 @@ class LabelRepository implements LabelRepositoryInterface
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->where("user_id", $user->id)
->orderByDesc('id')
->paginate(10);
}
-1
View File
@@ -30,7 +30,6 @@ class PackageRepository implements PackageRepositoryInterface
->whereHas('user', function ($query) use ($user) {
$query->where('medical_center_id', $user->medical_center_id);
})
->where("user_id", $user->id)
->orWhere("status", StatusTypeEnum::APPROVED)
->orderByDesc('id')
->paginate(10);
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Rules;
use App\Models\Item;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class ValidateItemOwnership implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string, ?string=): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$item = Item::find($value);
if(!($item && $item->user_id === auth()->id())){
$fail(":attribute have invalid ownership");
}
}
}
+1 -1
View File
@@ -15,7 +15,7 @@ class DatabaseSeeder extends Seeder
public function run()
{
$this->call([
TableSeeder::class
// FakerSeeder::class
]);
}
}
@@ -4,7 +4,7 @@ namespace Database\Seeders;
use Illuminate\Database\Seeder;
class TableSeeder extends Seeder
class FakerSeeder extends Seeder
{
/**
* Seed the application's database.
+1 -1
View File
@@ -83,7 +83,7 @@ Route::middleware('auth:api')->group(function () {
Route::get('export/items', [ExportController::class, 'items']);
Route::get('export/packages', [ExportController::class, 'packages']);
Route::get('export/cycles', [ExportController::class, 'cycles']);
Route::namespace('Media')->group(function () {
Route::post('store_media', StoreMedia::class);
Route::delete('destroy_media/{media}', DestroyMedia::class);
+7
View File
@@ -77,3 +77,10 @@ Route::post('Package/QRCode/{Package}', 'BarCodeController@generatePackageQRCode
Route::any('{all}', function () {
return view('welcome');
})->where(['all' => '.*']);
Route::any('ping', function () {
return response()->json([
'message' => 'pong'
]);
});