Files
Document-Management-System-…/app/Http/Controllers/Api/ReportsController.php
2021-04-07 06:32:42 -04:00

87 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Contracts\Repositories\DocumentRepository;
use App\Contracts\Repositories\BookRepository;
use App\Http\Requests\Document\{
ExportRequest,
};
/**
* Class ReportsController.
*
* @package namespace App\Http\Controllers\Api;
*/
class ReportsController extends Controller
{
/**
* @var DocumentRepository
*/
protected $repository;
/**
* @var BookRepository
*/
protected $bookRepository;
/**
* ReportsController constructor.
*
* @param DocumentRepository $repository
*/
public function __construct(DocumentRepository $repository, BookRepository $bookRepository)
{
$this->repository = $repository;
$this->bookRepository = $bookRepository;
}
/**
* Download report
*
* @return \Illuminate\Http\Response
*/
public function export(ExportRequest $request)
{
$books = $this->bookRepository->all();
if($request->filled('book')){
$books = collect();
$books->push($this->bookRepository->find($request->book));
}
$books->map(function ($book) use ($request)
{
$documents = $this->repository->scopeQuery(function($query) use ($request, $book)
{
$query->where('book_id', $book->id);
if($request->filled('type')){
$query->where('type_id', $request->type);
}
if($request->filled('from')){
$request->to = $request->to ?: date('Y-m-d');
$query->whereBetween('effective_at', [$request->from, $request->to]);
}
$query
->with(['receivers', 'publisher', 'organizes'])
->orderBy('effective_at')
->orderBy('publisher_id');
return $query;
})->all();
return $book->documents = $documents;
});
$name = auth()->user()->name . ' ' . date('d-m-Y');
$fileName = $name . '.' . strtolower($request->export);
$exporter = new \App\Exports\BooksExport($books, $request->from, $request->to);
return \Excel::download($exporter, $fileName, $request->export);
}
}