You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.7 KiB
80 lines
2.7 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Cost;
|
|
use App\Models\Business;
|
|
use Illuminate\Http\Request;
|
|
use Spatie\QueryBuilder\QueryBuilder;
|
|
use Spatie\QueryBuilder\AllowedFilter;
|
|
|
|
|
|
class InvoiceController extends Controller
|
|
{
|
|
|
|
public function index(Request $request, int $business)
|
|
{
|
|
$business = Business::findOrFail($business);
|
|
|
|
$builder = Cost::select('month')
|
|
->selectRaw("concat_ws('-',business_id,month) as factor_id")
|
|
->selectRaw("MIN(created_at) as begin")
|
|
->selectRaw("MAX(updated_at) as end")
|
|
->selectRaw("sum(cost) as cost")
|
|
->selectRaw("sum(tax) as tax")
|
|
->where('business_id','=',$business->id)
|
|
->groupBy('month','factor_id');
|
|
|
|
$costs = QueryBuilder::for($builder)
|
|
->allowedSorts([
|
|
'factor_id',
|
|
'begin',
|
|
'end',
|
|
'cost',
|
|
])
|
|
->allowedFilters([
|
|
AllowedFilter::exact('month'),
|
|
AllowedFilter::exact('type'),
|
|
]);
|
|
|
|
return $costs->paginate($request->per_page);
|
|
}
|
|
|
|
public function indexFiltering($business)
|
|
{
|
|
$query = File::where('business_id', $business);
|
|
$fileQ = QueryBuilder::for($query)
|
|
->allowedFilters([
|
|
AllowedFilter::exact('user_id'),
|
|
AllowedFilter::exact('project_id'),
|
|
AllowedFilter::exact('extension'),
|
|
]);
|
|
if (\request('_business_info')['info']['users'][\auth()->id()]['level'] != enum('levels.owner.id')) {
|
|
$requested_projects = isset(\request('filter')['project_id']) ?
|
|
array_unique(explode(',', \request('filter')['project_id'] ?? null)) :
|
|
null;
|
|
$requested_projects = collect($requested_projects)->keyBy(null)->toArray();
|
|
$project_ids = $this->myStateProjects($requested_projects);
|
|
$fileQ->where(function ($q) use ($project_ids) {
|
|
$q->whereIn('project_id', $project_ids['non_guest_ids'])
|
|
->orWhere(function ($q) use ($project_ids) {
|
|
$q->whereIn('project_id', $project_ids['guest_ids'])
|
|
->where('user_id', auth()->id());
|
|
});
|
|
});
|
|
}
|
|
|
|
if (request()->filled('group')) {
|
|
$fileQ->selectRaw("files.group, count(files.id) as file_count, sum(files.size) as file_size")->groupBy('group');
|
|
}
|
|
|
|
return $fileQ;
|
|
}
|
|
|
|
public function show(Request $request, int $business, string $date)
|
|
{
|
|
return Cost::where('business_id', '=', $business)
|
|
->where("month","=",$date)
|
|
->get();
|
|
}
|
|
}
|