mirror of
https://github.com/snipe/snipe-it.git
synced 2026-08-18 11:15:42 +00:00
Write headers to output
This commit is contained in:
@ -5,6 +5,8 @@ namespace App\Http\Controllers\Reports;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ReportTemplate;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
|
||||
class CustomComponentReportController extends Controller
|
||||
{
|
||||
@ -37,5 +39,136 @@ class CustomComponentReportController extends Controller
|
||||
ini_set('max_execution_time', env('REPORT_TIME_LIMIT', 12000)); // 12000 seconds = 200 minutes
|
||||
|
||||
$this->disableDebugbar();
|
||||
|
||||
$response = new StreamedResponse(function () use ($request) {
|
||||
Log::debug('Starting streamed response');
|
||||
Log::debug('CSV escaping is set to: '.config('app.escape_formulas'));
|
||||
|
||||
// Open output stream
|
||||
$handle = fopen('php://output', 'w');
|
||||
stream_set_timeout($handle, 2000);
|
||||
|
||||
fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));
|
||||
|
||||
$header = [];
|
||||
|
||||
if ($request->filled('id')) {
|
||||
$header[] = trans('general.id');
|
||||
}
|
||||
|
||||
if ($request->filled('company')) {
|
||||
$header[] = trans('general.company');
|
||||
}
|
||||
|
||||
if ($request->filled('category')) {
|
||||
$header[] = trans('general.category');
|
||||
}
|
||||
|
||||
if ($request->filled('component_name')) {
|
||||
$header[] = trans('admin/components/general.component_name');
|
||||
}
|
||||
|
||||
if ($request->filled('manufacturer')) {
|
||||
$header[] = trans('general.manufacturer');
|
||||
}
|
||||
|
||||
if ($request->filled('model')) {
|
||||
$header[] = trans('general.model_no');
|
||||
}
|
||||
|
||||
if ($request->filled('serial')) {
|
||||
$header[] = trans('general.serial_number');
|
||||
}
|
||||
|
||||
if ($request->filled('purchase_date')) {
|
||||
$header[] = trans('general.purchase_date');
|
||||
}
|
||||
|
||||
if ($request->filled('quantity')) {
|
||||
$header[] = trans('general.quantity');
|
||||
}
|
||||
|
||||
if ($request->filled('min_amount')) {
|
||||
$header[] = trans('general.min_amt');
|
||||
}
|
||||
|
||||
if ($request->filled('unit_cost')) {
|
||||
$header[] = trans('general.unit_cost');
|
||||
}
|
||||
|
||||
if ($request->filled('order')) {
|
||||
$header[] = trans('admin/hardware/form.order');
|
||||
}
|
||||
|
||||
if ($request->filled('supplier')) {
|
||||
$header[] = trans('general.suppliers');
|
||||
}
|
||||
|
||||
if ($request->filled('location')) {
|
||||
$header[] = trans('general.location');
|
||||
}
|
||||
|
||||
if ($request->filled('location_address')) {
|
||||
$header[] = trans('general.address');
|
||||
$header[] = trans('general.address');
|
||||
$header[] = trans('general.city');
|
||||
$header[] = trans('general.state');
|
||||
$header[] = trans('general.country');
|
||||
$header[] = trans('general.zip');
|
||||
}
|
||||
|
||||
if ($request->filled('checkout_date')) {
|
||||
$header[] = trans('admin/hardware/table.checkout_date');
|
||||
}
|
||||
|
||||
if ($request->filled('created_at')) {
|
||||
$header[] = trans('general.created_at');
|
||||
}
|
||||
|
||||
if ($request->filled('updated_at')) {
|
||||
$header[] = trans('general.updated_at');
|
||||
}
|
||||
|
||||
if ($request->filled('deleted_at')) {
|
||||
$header[] = trans('general.deleted');
|
||||
}
|
||||
|
||||
if ($request->filled('notes')) {
|
||||
$header[] = trans('general.notes');
|
||||
}
|
||||
|
||||
if ($request->filled('asset_name')) {
|
||||
$header[] = trans('admin/hardware/form.name');
|
||||
}
|
||||
|
||||
if ($request->filled('asset_tag')) {
|
||||
$header[] = trans('admin/hardware/form.tag');
|
||||
}
|
||||
|
||||
if ($request->filled('asset_company')) {
|
||||
$header[] = trans('admin/reports/general.custom_export.asset_company');
|
||||
}
|
||||
|
||||
if ($request->filled('asset_serial')) {
|
||||
$header[] = trans('admin/reports/general.custom_export.asset_serial');
|
||||
}
|
||||
|
||||
$executionTime = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
|
||||
Log::debug('Starting headers: '.$executionTime);
|
||||
fputcsv($handle, $header);
|
||||
$executionTime = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
|
||||
Log::debug('Added headers: '.$executionTime);
|
||||
|
||||
// Close the output stream
|
||||
fclose($handle);
|
||||
$executionTime = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
|
||||
Log::debug('-- SCRIPT COMPLETED IN '.$executionTime);
|
||||
|
||||
}, 200, [
|
||||
'Content-Type' => 'text/csv',
|
||||
'Content-Disposition' => 'attachment; filename="custom-accessories-report-'.date('Y-m-d-his').'.csv"',
|
||||
]);
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
@ -67,7 +67,62 @@ class CustomComponentReportTest extends TestCase
|
||||
|
||||
public function test_custom_component_report_headers()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
$this->actingAs(User::factory()->canViewReports()->create())
|
||||
->post(route('reports.custom.component.run'), [
|
||||
'id' => '1',
|
||||
'company' => '1',
|
||||
'category' => '1',
|
||||
'component_name' => '1',
|
||||
'manufacturer' => '1',
|
||||
'model' => '1',
|
||||
'serial' => '1',
|
||||
'purchase_date' => '1',
|
||||
'quantity' => '1',
|
||||
'min_amount' => '1',
|
||||
'unit_cost' => '1',
|
||||
'order' => '1',
|
||||
'supplier' => '1',
|
||||
'location' => '1',
|
||||
'location_address' => '1',
|
||||
'checkout_date' => '1',
|
||||
'created_at' => '1',
|
||||
'updated_at' => '1',
|
||||
'deleted_at' => '1',
|
||||
'notes' => '1',
|
||||
'asset_name' => '1',
|
||||
'asset_tag' => '1',
|
||||
'asset_company' => '1',
|
||||
'asset_serial' => '1',
|
||||
])->assertOk()
|
||||
->assertHeader('content-type', 'text/csv; charset=utf-8')
|
||||
->assertSeeTextInStreamedResponse(trans('general.id'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.company'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.category'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/components/general.component_name'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.manufacturer'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.model_no'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.serial_number'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.purchase_date'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.quantity'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.min_amt'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.unit_cost'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/hardware/form.order'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.suppliers'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.location'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.address'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.city'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.state'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.country'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.zip'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/hardware/table.checkout_date'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.created_at'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.updated_at'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.deleted'))
|
||||
->assertSeeTextInStreamedResponse(trans('general.notes'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/hardware/form.name'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/hardware/form.tag'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/reports/general.custom_export.asset_company'))
|
||||
->assertSeeTextInStreamedResponse(trans('admin/reports/general.custom_export.asset_serial'));
|
||||
}
|
||||
|
||||
public function test_custom_component_report_content()
|
||||
|
||||
Reference in New Issue
Block a user