Implements first pass at csv exports of reports (#35)

This commit is contained in:
Desmond Morris
2013-12-01 22:04:56 -05:00
parent 1f2b3f8505
commit 47b065208e
2 changed files with 59 additions and 0 deletions
@@ -16,6 +16,7 @@ use Sentry;
use Str;
use Validator;
use View;
use Response;
class AssetsController extends AdminController {
@@ -71,6 +72,63 @@ class AssetsController extends AdminController {
return View::make('backend/reports/index', compact('assets'));
}
public function exportReports()
{
// @todo - It may be worthwhile creating a separate controller for reporting
// Grab all the assets
$assets = Asset::orderBy('created_at', 'DESC')->get();
$rows = array();
// Create the header row
$header = array(
Lang::get('admin/hardware/table.asset_tag'),
Lang::get('admin/hardware/table.title'),
Lang::get('admin/hardware/table.serial'),
Lang::get('admin/hardware/table.checkoutto'),
Lang::get('admin/hardware/table.location'),
Lang::get('admin/hardware/table.purchase_date'),
Lang::get('admin/hardware/table.purchase_cost'),
Lang::get('admin/hardware/table.book_value')
);
$header = array_map('trim', $header);
$rows[] = implode($header, ',');
// Create a row per asset
foreach ($assets as $asset) {
$row = array();
$row[] = $asset->asset_tag;
$row[] = $asset->name;
$row[] = $asset->serial;
$row[] = $asset->assigned_to;
if (($asset->assigned_to > 0) && ($asset->assigneduser->location_id > 0)) {
$location = Location::find($asset->assigneduser->location_id);
$row[] = $location->city . ', ' . $location->state;
}
else {
$row[] = ''; // Empty string if location is not set
}
$depreciation = $asset->depreciate();
$row[] = $asset->purchase_date;
$row[] = number_format($asset->purchase_cost);
$row[] = number_format($depreciation);
$row[] = number_format(($asset->purchase_cost - $depreciation));
$rows[] = implode($row, ',');
}
// spit out a csv
$csv = implode($rows, "\n");
$response = Response::make($csv, 200);
$response->header('Content-Type', 'text/csv');
$response->header('Content-disposition', 'attachment;filename=report.csv');
return $response;
}
/**
* Asset create.
*
+1
View File
@@ -265,3 +265,4 @@ Route::get('/', function()
});
Route::get('/', array('as' => 'home', 'uses' => 'Controllers\Admin\AssetsController@getIndex'));
Route::get('reports', array('as' => 'reports', 'uses' => 'Controllers\Admin\AssetsController@getReports'));
Route::get('reports/export', array('as' => 'reports/export', 'uses' => 'Controllers\Admin\AssetsController@exportReports'));