quotations new section in the mobile app

This commit is contained in:
saparatayev 2022-05-10 11:19:02 +05:00
parent 80ddd8a8bd
commit 532318e154
7 changed files with 210 additions and 4 deletions

View File

@ -0,0 +1,14 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ApiBaseController extends Controller
{
protected function localeValidationRule()
{
return ['locale' => 'required|in:tm,ru,en'];
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\ExportResource;
use App\Models\Export;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ExportController extends ApiBaseController
{
public function index(Request $request)
{
$validator = Validator::make($request->all(), array_merge([
'page' => 'numeric|gt:0',
'group' => 'required|exists:groups,id',
'category' => 'exists:categories,id',
'type' => 'in:internal,external'
], $this->localeValidationRule()));
if($validator->fails()) {
return response()->json($validator->errors());
}
$exports = Export::query()
->where('group_id', request('group'))
->where('locale', request('locale'))
// ->when(request('title'), fn ($q) => $q->whereIn('id', $searchIds))
->when(request('category'), fn ($q) => $q->where('category_id', request('category')))
->when(request('unit'), fn ($q) => $q->where('unit', request('unit')))
->when(request('currency'), fn ($q) => $q->where('currency', request('currency')))
->when(request('payment'), fn ($q) => $q->where('payment', request('payment')))
->when(request('send'), fn ($q) => $q->where('send', request('send')))
->when(request('type'), fn ($q) => $q->where('type', request('type')));
return response()->json([
'exports' => ExportResource::collection($exports->simplePaginate(5)),
], 200);
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\CategoryApiResource;
use App\Http\Resources\GroupResource;
use App\Models\Category;
use App\Models\Group;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class FiltersController extends ApiBaseController
{
public function groups(Request $request)
{
$data = $request->only(['type', 'locale']);
$validator = Validator::make($data, array_merge([
'type' => 'required|in:export,import'
], $this->localeValidationRule()));
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
return GroupResource::collection(Group::whereType($data['type'])->orderBy('is_default', 'desc')->get());
}
public function categories(Request $request)
{
$validator = Validator::make($request->only('locale'), $this->localeValidationRule());
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
return CategoryApiResource::collection(Category::all());
}
public function otherFilters(Request $request)
{
$validator = Validator::make($request->all(), array_merge([
'model' => 'required|in:Export,Import',
'group' => 'required|exists:groups,id',
'filter' => 'required|in:unit,currency,payment,send,country'
], $this->localeValidationRule()));
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
$modelClass = '\\App\\Models\\' . $request['model'];
return $modelClass::selectRaw(request('filter'))
->where('group_id', request('group'))
->where('locale', request('locale'))
->distinct()
->pluck(request('filter'));
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\ImportResource;
use App\Models\Import;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ImportController extends ApiBaseController
{
public function index(Request $request)
{
$validator = Validator::make($request->all(), array_merge([
'page' => 'numeric|gt:0',
'group' => 'required|exists:groups,id'
], $this->localeValidationRule()));
if ($validator->fails()) {
return response()->json($validator->errors());
}
$imports = Import::query()
->where('group_id', request('group'))
->where('locale', request('locale'))
// ->when(request('title'), fn ($q) => $q->whereIn('id', $searchIds))
->when(request('country'), fn ($q) => $q->where('country', request('country')))
->when(request('unit'), fn ($q) => $q->where('unit', request('unit')))
->when(request('currency'), fn ($q) => $q->where('currency', request('currency')));
// ->when(request('registered_at'), fn ($q) => $q->whereDate('registered_at', request('registered_at')));
return response()->json([
'imports' => ImportResource::collection($imports->simplePaginate(5)),
], 200);
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class CategoryApiResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->getTranslation('title', $request->get('locale')),
];
}
}

View File

@ -0,0 +1,28 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class GroupResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$locale = $request->get('locale');
return [
'id' => $this->id,
'title' => $this->getTranslation('title', $locale),
'type' => $this->type,
'file' => $this->getTranslation('file', $locale),
'is_default' => $this->is_default,
'hashid' => $this->hashid
];
}
}

View File

@ -1,10 +1,10 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\ExportController;
use App\Http\Controllers\Api\FiltersController;
use App\Http\Controllers\Api\ImportController;
use App\Http\Controllers\Api\LineController;
use App\Http\Controllers\Api\RequestController;
/*
|--------------------------------------------------------------------------
@ -17,8 +17,12 @@ use App\Http\Controllers\Api\LineController;
|
*/
// Route::get('exports', [ExportController::class, 'index']);
// Route::get('imports', [ImportController::class, 'index']);
Route::get('imports', [ImportController::class, 'index'])->name('api.imports');
Route::get('exports', [ExportController::class, 'index'])->name('api.exports');
Route::get('groups', [FiltersController::class, 'groups']);
Route::get('categories', [FiltersController::class, 'categories']);
Route::get('other-filters', [FiltersController::class, 'otherFilters']);
// Route::post('requests', [RequestController::class, 'store']);
// Route::get('lines', [LineController::class, 'index']);
// Route::middleware('auth:sanctum')->get('/user', function (Request $request) {