2016-03-25 01:18:05 -07:00
|
|
|
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use App\Models\Accessory;
|
|
|
|
use App\Models\Actionlog;
|
|
|
|
use App\Models\Asset;
|
|
|
|
use App\Models\AssetMaintenance;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
use Category;
|
|
|
|
use App\Models\Company;
|
|
|
|
use Illuminate\Support\Facades\Lang;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
use Illuminate\Support\Facades\Response;
|
|
|
|
use Illuminate\Support\Facades\View;
|
|
|
|
use Input;
|
|
|
|
use League\Csv\Reader;
|
|
|
|
use App\Models\License;
|
|
|
|
use App\Models\Location;
|
|
|
|
use App\Models\AssetModel;
|
|
|
|
use Redirect;
|
|
|
|
use App\Models\Setting;
|
|
|
|
use App\Models\User;
|
|
|
|
|
2016-04-07 13:21:09 -07:00
|
|
|
/**
|
|
|
|
* This controller handles all actions related to Reports for
|
|
|
|
* the Snipe-IT Asset Management application.
|
|
|
|
*
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
class ReportsController extends Controller
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
2016-04-07 13:39:35 -07:00
|
|
|
* Returns a view that displaysthe accessories report.
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return View
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function getAccessoryReport()
|
|
|
|
{
|
|
|
|
$accessories = Accessory::orderBy('created_at', 'DESC')->with('company')->get();
|
|
|
|
|
|
|
|
return View::make('reports/accessories', compact('accessories'));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 13:39:35 -07:00
|
|
|
* Exports the accessories to CSV
|
|
|
|
*
|
|
|
|
* @deprecated Server-side exports have been replaced by datatables export since v2.
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @see ManufacturersController::getDatatable() method that generates the JSON response
|
|
|
|
* @since [v1.0]
|
2016-04-07 17:08:38 -07:00
|
|
|
* @return \Illuminate\Http\Response
|
2016-04-07 13:39:35 -07:00
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function exportAccessoryReport()
|
|
|
|
{
|
|
|
|
$accessories = Accessory::orderBy('created_at', 'DESC')->get();
|
|
|
|
|
|
|
|
$rows = array();
|
|
|
|
$header = array(
|
2016-04-07 13:39:35 -07:00
|
|
|
trans('admin/accessories/table.title'),
|
|
|
|
trans('admin/accessories/general.accessory_category'),
|
|
|
|
trans('admin/accessories/general.total'),
|
|
|
|
trans('admin/accessories/general.remaining')
|
2016-03-25 01:18:05 -07:00
|
|
|
);
|
|
|
|
$header = array_map('trim', $header);
|
|
|
|
$rows[] = implode($header, ', ');
|
|
|
|
|
|
|
|
// Row per accessory
|
|
|
|
foreach ($accessories as $accessory) {
|
|
|
|
$row = array();
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($accessory->accessory_name);
|
|
|
|
$row[] = e($accessory->accessory_category);
|
|
|
|
$row[] = e($accessory->total);
|
|
|
|
$row[] = e($accessory->remaining);
|
2016-03-25 01:18:05 -07:00
|
|
|
|
|
|
|
$rows[] = implode($row, ',');
|
|
|
|
}
|
|
|
|
|
|
|
|
$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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 13:39:35 -07:00
|
|
|
* Display asset report.
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return View
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function getAssetsReport()
|
|
|
|
{
|
2016-04-19 06:11:20 -07:00
|
|
|
$settings = \App\Models\Setting::first();
|
2016-03-25 01:18:05 -07:00
|
|
|
// Grab all the assets
|
|
|
|
$assets = Asset::with(
|
|
|
|
'model',
|
|
|
|
'assigneduser.userLoc',
|
|
|
|
'assetstatus',
|
|
|
|
'defaultLoc',
|
|
|
|
'assetlog',
|
|
|
|
'supplier',
|
|
|
|
'model.manufacturer',
|
|
|
|
'company'
|
|
|
|
)
|
|
|
|
->orderBy('created_at', 'DESC')
|
|
|
|
->get();
|
|
|
|
|
2016-04-19 06:11:20 -07:00
|
|
|
return View::make('reports/asset', compact('assets'))->with('settings',$settings);
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 13:39:35 -07:00
|
|
|
* Exports the assets to CSV
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
2016-04-07 17:08:38 -07:00
|
|
|
* @return \Illuminate\Http\Response
|
2016-04-07 13:39:35 -07:00
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function exportAssetReport()
|
|
|
|
{
|
|
|
|
// Grab all the assets
|
|
|
|
$assets = Asset::orderBy('created_at', 'DESC')->get();
|
|
|
|
|
|
|
|
$rows = [ ];
|
|
|
|
|
|
|
|
// Create the header row
|
|
|
|
$header = [
|
2016-04-07 13:39:35 -07:00
|
|
|
trans('admin/hardware/table.asset_tag'),
|
|
|
|
trans('admin/hardware/form.manufacturer'),
|
|
|
|
trans('admin/hardware/form.model'),
|
|
|
|
trans('general.model_no'),
|
|
|
|
trans('general.name'),
|
|
|
|
trans('admin/hardware/table.serial'),
|
|
|
|
trans('general.status'),
|
|
|
|
trans('admin/hardware/table.purchase_date'),
|
|
|
|
trans('admin/hardware/table.purchase_cost'),
|
|
|
|
trans('admin/hardware/form.order'),
|
|
|
|
trans('admin/hardware/form.supplier'),
|
|
|
|
trans('admin/hardware/table.checkoutto'),
|
|
|
|
trans('admin/hardware/table.location'),
|
|
|
|
trans('general.notes'),
|
2016-03-25 01:18:05 -07:00
|
|
|
];
|
|
|
|
$header = array_map('trim', $header);
|
|
|
|
$rows[] = implode($header, ',');
|
|
|
|
|
|
|
|
// Create a row per asset
|
|
|
|
foreach ($assets as $asset) {
|
|
|
|
$row = [ ];
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->asset_tag);
|
2016-03-25 01:18:05 -07:00
|
|
|
if ($asset->model->manufacturer) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->model->manufacturer->name);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . e($asset->model->name) . '"';
|
|
|
|
$row[] = '"' . e($asset->model->modelno) . '"';
|
|
|
|
$row[] = e($asset->name);
|
|
|
|
$row[] = e($asset->serial);
|
2016-03-25 01:18:05 -07:00
|
|
|
if ($asset->assetstatus) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->assetstatus->name);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
$row[] = $asset->purchase_date;
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . number_format($asset->purchase_cost, 2) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
if ($asset->order_number) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->order_number);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
if ($asset->supplier_id) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->supplier->name);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($asset->assigned_to > 0) {
|
|
|
|
$user = User::find($asset->assigned_to);
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($user->fullName());
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = ''; // Empty string if unassigned
|
|
|
|
}
|
|
|
|
|
|
|
|
if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
|
|
|
|
$location = Location::find($asset->assigneduser->location_id);
|
|
|
|
if ($location) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($location->name);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
} elseif ($asset->rtd_location_id) {
|
|
|
|
$location = Location::find($asset->rtd_location_id);
|
|
|
|
if ($location->name) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($location->name);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$row[] = ''; // Empty string if location is not set
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($asset->notes) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . e($asset->notes) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
$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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 17:08:38 -07:00
|
|
|
* Show depreciation report for assets.
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return View
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function getDeprecationReport()
|
|
|
|
{
|
|
|
|
|
|
|
|
// Grab all the assets
|
|
|
|
$assets = Asset::with('model', 'assigneduser', 'assetstatus', 'defaultLoc', 'assetlog', 'company')
|
|
|
|
->orderBy('created_at', 'DESC')->get();
|
|
|
|
|
|
|
|
return View::make('reports/depreciation', compact('assets'));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 17:08:38 -07:00
|
|
|
* Exports the depreciations to CSV
|
|
|
|
*
|
|
|
|
* @deprecated Server-side exports have been replaced by datatables export since v2.
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function exportDeprecationReport()
|
|
|
|
{
|
|
|
|
|
|
|
|
// Grab all the assets
|
|
|
|
$assets = Asset::with('model', 'assigneduser', 'assetstatus', 'defaultLoc', 'assetlog')
|
|
|
|
->orderBy('created_at', 'DESC')->get();
|
|
|
|
|
|
|
|
$csv = \League\Csv\Writer::createFromFileObject(new \SplTempFileObject());
|
|
|
|
$csv->setOutputBOM(Reader::BOM_UTF16_BE);
|
|
|
|
|
|
|
|
$rows = [ ];
|
|
|
|
|
|
|
|
// Create the header row
|
|
|
|
$header = [
|
2016-04-07 13:39:35 -07:00
|
|
|
trans('admin/hardware/table.asset_tag'),
|
|
|
|
trans('admin/hardware/table.title'),
|
|
|
|
trans('admin/hardware/table.serial'),
|
|
|
|
trans('admin/hardware/table.checkoutto'),
|
|
|
|
trans('admin/hardware/table.location'),
|
|
|
|
trans('admin/hardware/table.purchase_date'),
|
|
|
|
trans('admin/hardware/table.purchase_cost'),
|
|
|
|
trans('admin/hardware/table.book_value'),
|
|
|
|
trans('admin/hardware/table.diff')
|
2016-03-25 01:18:05 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
//we insert the CSV header
|
|
|
|
$csv->insertOne($header);
|
|
|
|
|
|
|
|
// Create a row per asset
|
|
|
|
foreach ($assets as $asset) {
|
|
|
|
$row = [ ];
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->asset_tag);
|
|
|
|
$row[] = e($asset->name);
|
|
|
|
$row[] = e($asset->serial);
|
2016-03-25 01:18:05 -07:00
|
|
|
|
|
|
|
if ($asset->assigned_to > 0) {
|
|
|
|
$user = User::find($asset->assigned_to);
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($user->fullName());
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = ''; // Empty string if unassigned
|
|
|
|
}
|
|
|
|
|
|
|
|
if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
|
|
|
|
$location = Location::find($asset->assigneduser->location_id);
|
|
|
|
if ($location->city) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($location->city) . ', ' . e($location->state);
|
2016-03-25 01:18:05 -07:00
|
|
|
} elseif ($location->name) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($location->name);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$row[] = ''; // Empty string if location is not set
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($asset->assetloc) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$currency = e($asset->assetloc->currency);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
2016-03-25 15:24:12 -07:00
|
|
|
$currency = e(Setting::first()->default_currency);
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
$row[] = $asset->purchase_date;
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = $currency . number_format($asset->purchase_cost, 2);
|
|
|
|
$row[] = $currency . number_format($asset->getDepreciatedValue(), 2);
|
|
|
|
$row[] = $currency . number_format(( $asset->purchase_cost - $asset->getDepreciatedValue() ), 2);
|
2016-03-25 01:18:05 -07:00
|
|
|
$csv->insertOne($row);
|
|
|
|
}
|
|
|
|
|
|
|
|
$csv->output('depreciation-report-' . date('Y-m-d') . '.csv');
|
|
|
|
die;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 17:08:38 -07:00
|
|
|
* Displays activity report.
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return View
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function getActivityReport()
|
|
|
|
{
|
|
|
|
$log_actions = Actionlog::orderBy('created_at', 'DESC')
|
|
|
|
->with('adminlog')
|
|
|
|
->with('accessorylog')
|
|
|
|
->with('assetlog')
|
|
|
|
->with('licenselog')
|
|
|
|
->with('userlog')
|
|
|
|
->orderBy('created_at', 'DESC')
|
|
|
|
->get();
|
|
|
|
|
|
|
|
return View::make('reports/activity', compact('log_actions'));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 17:08:38 -07:00
|
|
|
* Displays license report
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return View
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function getLicenseReport()
|
|
|
|
{
|
|
|
|
|
|
|
|
$licenses = License::orderBy('created_at', 'DESC')
|
|
|
|
->with('company')
|
|
|
|
->get();
|
|
|
|
|
|
|
|
return View::make('reports/licenses', compact('licenses'));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-04-07 17:08:38 -07:00
|
|
|
* Exports the licenses to CSV
|
|
|
|
*
|
|
|
|
* @deprecated Server-side exports have been replaced by datatables export since v2.
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function exportLicenseReport()
|
|
|
|
{
|
|
|
|
$licenses = License::orderBy('created_at', 'DESC')->get();
|
|
|
|
|
|
|
|
$rows = [ ];
|
|
|
|
$header = [
|
2016-04-07 13:39:35 -07:00
|
|
|
trans('admin/licenses/table.title'),
|
|
|
|
trans('admin/licenses/table.serial'),
|
|
|
|
trans('admin/licenses/form.seats'),
|
|
|
|
trans('admin/licenses/form.remaining_seats'),
|
|
|
|
trans('admin/licenses/form.expiration'),
|
|
|
|
trans('admin/licenses/form.date'),
|
|
|
|
trans('admin/licenses/form.cost')
|
2016-03-25 01:18:05 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
$header = array_map('trim', $header);
|
|
|
|
$rows[] = implode($header, ', ');
|
|
|
|
|
|
|
|
// Row per license
|
|
|
|
foreach ($licenses as $license) {
|
|
|
|
$row = [ ];
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($license->name);
|
|
|
|
$row[] = e($license->serial);
|
|
|
|
$row[] = e($license->seats);
|
2016-03-25 01:18:05 -07:00
|
|
|
$row[] = $license->remaincount();
|
|
|
|
$row[] = $license->expiration_date;
|
|
|
|
$row[] = $license->purchase_date;
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . number_format($license->purchase_cost, 2) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
|
|
|
|
$rows[] = implode($row, ',');
|
|
|
|
}
|
|
|
|
|
|
|
|
$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;
|
|
|
|
}
|
|
|
|
|
2016-04-07 17:08:38 -07:00
|
|
|
/**
|
|
|
|
* Returns a form that allows the user to generate a custom CSV report.
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @see ReportsController::postCustomReport() method that generates the CSV
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function getCustomReport()
|
|
|
|
{
|
|
|
|
|
|
|
|
return View::make('reports/custom');
|
|
|
|
}
|
|
|
|
|
2016-04-07 17:08:38 -07:00
|
|
|
/**
|
|
|
|
* Exports the custom report to CSV
|
|
|
|
*
|
|
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
|
|
* @see ReportsController::getCustomReport() method that generates form view
|
|
|
|
* @since [v1.0]
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
public function postCustom()
|
|
|
|
{
|
|
|
|
$assets = Asset::orderBy('created_at', 'DESC')->get();
|
|
|
|
|
|
|
|
$rows = [ ];
|
|
|
|
$header = [ ];
|
|
|
|
|
|
|
|
if (e(Input::get('asset_name')) == '1') {
|
|
|
|
$header[] = 'Asset Name';
|
|
|
|
}
|
|
|
|
if (e(Input::get('asset_tag')) == '1') {
|
|
|
|
$header[] = 'Asset Tag';
|
|
|
|
}
|
|
|
|
if (e(Input::get('manufacturer')) == '1') {
|
|
|
|
$header[] = 'Manufacturer';
|
|
|
|
}
|
|
|
|
if (e(Input::get('model')) == '1') {
|
|
|
|
$header[] = 'Model';
|
|
|
|
$header[] = 'Model Number';
|
|
|
|
}
|
|
|
|
if (e(Input::get('category')) == '1') {
|
|
|
|
$header[] = 'Category';
|
|
|
|
}
|
|
|
|
if (e(Input::get('serial')) == '1') {
|
|
|
|
$header[] = 'Serial';
|
|
|
|
}
|
|
|
|
if (e(Input::get('purchase_date')) == '1') {
|
|
|
|
$header[] = 'Purchase Date';
|
|
|
|
}
|
|
|
|
if (( e(Input::get('purchase_cost')) == '1' ) && ( e(Input::get('depreciation')) != '1' )) {
|
|
|
|
$header[] = 'Purchase Cost';
|
|
|
|
}
|
|
|
|
if (e(Input::get('order')) == '1') {
|
|
|
|
$header[] = 'Order Number';
|
|
|
|
}
|
|
|
|
if (e(Input::get('supplier')) == '1') {
|
|
|
|
$header[] = 'Supplier';
|
|
|
|
}
|
|
|
|
if (e(Input::get('location')) == '1') {
|
|
|
|
$header[] = 'Location';
|
|
|
|
}
|
|
|
|
if (e(Input::get('assigned_to')) == '1') {
|
|
|
|
$header[] = 'Assigned To';
|
|
|
|
}
|
|
|
|
if (e(Input::get('status')) == '1') {
|
|
|
|
$header[] = 'Status';
|
|
|
|
}
|
|
|
|
if (e(Input::get('warranty')) == '1') {
|
|
|
|
$header[] = 'Warranty';
|
|
|
|
$header[] = 'Warranty Expires';
|
|
|
|
}
|
|
|
|
if (e(Input::get('depreciation')) == '1') {
|
|
|
|
$header[] = 'Purchase Cost';
|
|
|
|
$header[] = 'Value';
|
|
|
|
$header[] = 'Diff';
|
|
|
|
}
|
|
|
|
|
|
|
|
$header = array_map('trim', $header);
|
|
|
|
$rows[] = implode($header, ',');
|
|
|
|
|
|
|
|
foreach ($assets as $asset) {
|
|
|
|
$row = [ ];
|
|
|
|
if (e(Input::get('asset_name')) == '1') {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' .e($asset->name) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
if (e(Input::get('asset_tag')) == '1') {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->asset_tag);
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
if (e(Input::get('manufacturer')) == '1') {
|
|
|
|
if ($asset->model->manufacturer) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' .e($asset->model->manufacturer->name) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (e(Input::get('model')) == '1') {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . e($asset->model->name) . '"';
|
|
|
|
$row[] = '"' . e($asset->model->modelno) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
if (e(Input::get('category')) == '1') {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' .e($asset->model->category->name) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
if (e(Input::get('serial')) == '1') {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->serial);
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
if (e(Input::get('purchase_date')) == '1') {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->purchase_date);
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
if (e(Input::get('purchase_cost')) == '1' && ( e(Input::get('depreciation')) != '1' )) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . number_format($asset->purchase_cost, 2) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
if (e(Input::get('order')) == '1') {
|
|
|
|
if ($asset->order_number) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = e($asset->order_number);
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (e(Input::get('supplier')) == '1') {
|
|
|
|
if ($asset->supplier_id) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' .e($asset->supplier->name) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (e(Input::get('location')) == '1') {
|
|
|
|
$show_loc = '';
|
|
|
|
if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id !='' )) {
|
|
|
|
$location = Location::find($asset->assigneduser->location_id);
|
|
|
|
if ($location) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$show_loc .= '"' .e($location->name). '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$show_loc .= 'User location '.$asset->assigneduser->location_id.' is invalid';
|
|
|
|
}
|
|
|
|
} elseif ($asset->rtd_location_id!='') {
|
|
|
|
$location = Location::find($asset->rtd_location_id);
|
|
|
|
if ($location) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$show_loc .= '"' .e($location->name). '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$show_loc .= 'Default location '.$asset->rtd_location_id.' is invalid';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$row[] = $show_loc;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (e(Input::get('assigned_to')) == '1') {
|
|
|
|
if ($asset->assigned_to > 0) {
|
|
|
|
$user = User::find($asset->assigned_to);
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' .e($user->fullName()). '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = ''; // Empty string if unassigned
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (e(Input::get('status')) == '1') {
|
|
|
|
if (( $asset->status_id == '0' ) && ( $asset->assigned_to == '0' )) {
|
2016-04-07 13:39:35 -07:00
|
|
|
$row[] = trans('general.ready_to_deploy');
|
2016-03-25 01:18:05 -07:00
|
|
|
} elseif (( $asset->status_id == '' ) && ( $asset->assigned_to == '0' )) {
|
2016-04-07 13:39:35 -07:00
|
|
|
$row[] = trans('general.pending');
|
2016-03-25 01:18:05 -07:00
|
|
|
} elseif ($asset->assetstatus) {
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' .e($asset->assetstatus->name). '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (e(Input::get('warranty')) == '1') {
|
|
|
|
if ($asset->warranty_months) {
|
|
|
|
$row[] = $asset->warranty_months;
|
|
|
|
$row[] = $asset->warrantee_expires();
|
|
|
|
} else {
|
|
|
|
$row[] = '';
|
|
|
|
$row[] = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (e(Input::get('depreciation')) == '1') {
|
|
|
|
$depreciation = $asset->getDepreciatedValue();
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = '"' . number_format($asset->purchase_cost, 2) . '"';
|
|
|
|
$row[] = '"' . number_format($depreciation, 2) . '"';
|
|
|
|
$row[] = '"' . number_format($asset->purchase_cost - $depreciation, 2) . '"';
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
$rows[] = implode($row, ',');
|
|
|
|
}
|
|
|
|
|
|
|
|
// spit out a csv
|
|
|
|
if (array_filter($rows)) {
|
|
|
|
$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;
|
|
|
|
} else {
|
2016-04-28 21:06:41 -07:00
|
|
|
return redirect()->to("reports/custom")
|
2016-04-07 13:39:35 -07:00
|
|
|
->with('error', trans('admin/reports/message.error'));
|
2016-03-25 01:18:05 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getImprovementsReport
|
|
|
|
*
|
2016-04-07 17:08:38 -07:00
|
|
|
* @return View
|
2016-03-25 01:18:05 -07:00
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
public function getAssetMaintenancesReport()
|
|
|
|
{
|
|
|
|
// Grab all the improvements
|
2016-03-25 19:26:22 -07:00
|
|
|
$assetMaintenances = AssetMaintenance::with('asset', 'supplier', 'asset.company')
|
2016-03-25 01:18:05 -07:00
|
|
|
->orderBy('created_at', 'DESC')
|
|
|
|
->get();
|
|
|
|
|
|
|
|
return View::make('reports/asset_maintenances', compact('assetMaintenances'));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* exportImprovementsReport
|
|
|
|
*
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
public function exportAssetMaintenancesReport()
|
|
|
|
{
|
|
|
|
// Grab all the improvements
|
|
|
|
$assetMaintenances = AssetMaintenance::with('asset', 'supplier')
|
|
|
|
->orderBy('created_at', 'DESC')
|
|
|
|
->get();
|
|
|
|
|
|
|
|
$rows = [ ];
|
|
|
|
|
|
|
|
$header = [
|
2016-04-07 13:39:35 -07:00
|
|
|
trans('admin/asset_maintenances/table.asset_name'),
|
|
|
|
trans('admin/asset_maintenances/table.supplier_name'),
|
|
|
|
trans('admin/asset_maintenances/form.asset_maintenance_type'),
|
|
|
|
trans('admin/asset_maintenances/form.title'),
|
|
|
|
trans('admin/asset_maintenances/form.start_date'),
|
|
|
|
trans('admin/asset_maintenances/form.completion_date'),
|
|
|
|
trans('admin/asset_maintenances/form.asset_maintenance_time'),
|
|
|
|
trans('admin/asset_maintenances/form.cost')
|
2016-03-25 01:18:05 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
$header = array_map('trim', $header);
|
|
|
|
$rows[] = implode($header, ',');
|
|
|
|
|
|
|
|
foreach ($assetMaintenances as $assetMaintenance) {
|
|
|
|
$row = [ ];
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = str_replace(',', '', e($assetMaintenance->asset->name));
|
|
|
|
$row[] = str_replace(',', '', e($assetMaintenance->supplier->name));
|
|
|
|
$row[] = e($assetMaintenance->improvement_type);
|
|
|
|
$row[] = e($assetMaintenance->title);
|
|
|
|
$row[] = e($assetMaintenance->start_date);
|
2016-03-25 18:51:44 -07:00
|
|
|
$row[] = e($assetMaintenance->completion_date);
|
2016-03-25 01:18:05 -07:00
|
|
|
if (is_null($assetMaintenance->asset_maintenance_time)) {
|
|
|
|
$improvementTime = intval(Carbon::now()
|
|
|
|
->diffInDays(Carbon::parse($assetMaintenance->start_date)));
|
|
|
|
} else {
|
|
|
|
$improvementTime = intval($assetMaintenance->asset_maintenance_time);
|
|
|
|
}
|
|
|
|
$row[] = $improvementTime;
|
2016-04-07 13:39:35 -07:00
|
|
|
$row[] = trans('general.currency') . number_format($assetMaintenance->cost, 2);
|
2016-03-25 01:18:05 -07:00
|
|
|
$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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getAssetAcceptanceReport
|
|
|
|
*
|
|
|
|
* @return mixed
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
public function getAssetAcceptanceReport()
|
|
|
|
{
|
|
|
|
$assetsForReport = Asset::notYetAccepted()->with('company')->get();
|
|
|
|
|
|
|
|
return View::make('reports/unaccepted_assets', compact('assetsForReport'));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* exportAssetAcceptanceReport
|
|
|
|
*
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
public function exportAssetAcceptanceReport()
|
|
|
|
{
|
|
|
|
|
|
|
|
// Grab all the improvements
|
|
|
|
$assetsForReport = Actionlog::whereIn('id', $this->getAssetsNotAcceptedYet())
|
|
|
|
->get();
|
|
|
|
|
|
|
|
$rows = [ ];
|
|
|
|
|
|
|
|
$header = [
|
2016-04-07 13:39:35 -07:00
|
|
|
trans('general.category'),
|
|
|
|
trans('admin/hardware/form.model'),
|
|
|
|
trans('admin/hardware/form.name'),
|
|
|
|
trans('admin/hardware/table.asset_tag'),
|
|
|
|
trans('admin/hardware/table.checkoutto'),
|
2016-03-25 01:18:05 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
$header = array_map('trim', $header);
|
|
|
|
$rows[] = implode($header, ',');
|
|
|
|
|
|
|
|
foreach ($assetsForReport as $assetItem) {
|
|
|
|
$row = [ ];
|
2016-03-25 15:24:12 -07:00
|
|
|
$row[] = str_replace(',', '', e($assetItem->assetlog->model->category->name));
|
|
|
|
$row[] = str_replace(',', '', e($assetItem->assetlog->model->name));
|
|
|
|
$row[] = str_replace(',', '', e($assetItem->assetlog->showAssetName()));
|
|
|
|
$row[] = str_replace(',', '', e($assetItem->assetlog->asset_tag));
|
|
|
|
$row[] = str_replace(',', '', e($assetItem->assetlog->assigneduser->fullName()));
|
2016-03-25 01:18:05 -07:00
|
|
|
$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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getCheckedOutAssetsRequiringAcceptance
|
|
|
|
*
|
|
|
|
* @param $modelsInCategoriesThatRequireAcceptance
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
protected function getCheckedOutAssetsRequiringAcceptance($modelsInCategoriesThatRequireAcceptance)
|
|
|
|
{
|
|
|
|
$assets = Asset::deployed()
|
|
|
|
->inModelList($modelsInCategoriesThatRequireAcceptance)
|
|
|
|
->select('id')
|
|
|
|
->get()
|
|
|
|
->toArray();
|
|
|
|
|
|
|
|
return array_pluck($assets, 'id');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getModelsInCategoriesThatRequireAcceptance
|
|
|
|
*
|
|
|
|
* @param $assetCategoriesRequiringAcceptance
|
|
|
|
* @return array
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
protected function getModelsInCategoriesThatRequireAcceptance($assetCategoriesRequiringAcceptance)
|
|
|
|
{
|
|
|
|
|
|
|
|
return array_pluck(Model::inCategory($assetCategoriesRequiringAcceptance)
|
|
|
|
->select('id')
|
|
|
|
->get()
|
|
|
|
->toArray(), 'id');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getCategoriesThatRequireAcceptance
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
protected function getCategoriesThatRequireAcceptance()
|
|
|
|
{
|
|
|
|
|
|
|
|
return array_pluck(Category::requiresAcceptance()
|
|
|
|
->select('id')
|
|
|
|
->get()
|
|
|
|
->toArray(), 'id');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getAssetsCheckedOutRequiringAcceptance
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
protected function getAssetsCheckedOutRequiringAcceptance()
|
|
|
|
{
|
|
|
|
|
|
|
|
return $this->getCheckedOutAssetsRequiringAcceptance(
|
|
|
|
$this->getModelsInCategoriesThatRequireAcceptance($this->getCategoriesThatRequireAcceptance())
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getAssetsNotAcceptedYet
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
|
|
* @version v1.0
|
|
|
|
*/
|
|
|
|
protected function getAssetsNotAcceptedYet()
|
|
|
|
{
|
|
|
|
return Asset::unaccepted();
|
|
|
|
}
|
|
|
|
}
|