<?php

class InhouseRequisitionsController extends \BaseController {

	/**
	* Display a listing of the resource.
	*
	* @return Response
	*/
	public function index()
	{
		$inhouse = Inhouse::orderBy('created_at','DESC')->get();
		$incharge = DepartmentHeads::all();
		$metrics = Metric::orderBy('name', 'ASC')->lists('name', 'id');
		$department = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director','9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio-Repository', '12' => 'Sickle Cell Lab', '13' => 'Records', '14' => 'Operations/Logistics', '15' => 'Records QC', '16'=>'Bio Safety Bio Security');
		return View::make('InhouseRequisition.index')
		->with('inhouse', $inhouse)
		->with('incharge', $incharge)
		->with('department', $department)
		->with('metrics', $metrics);
	}

	public function inhousecreate()
	{
		return View::make('InhouseRequisition.inhousecreate');
	}

	public function eidcreate()
	{
		return View::make('InhouseRequisition.eidcreate');
	}

	public function vlcreate()
	{
		return View::make('InhouseRequisition.vlcreate');
	}

	public function create()
	{
		$department_list = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director', '9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio Repository', '12' => 'Sickle Cell Lab', '13' => 'Records', '14' => 'Operations/Logistics', '15' => 'Results QC', '16'=>'Bio Safety Bio Security', );
		$commodities = array('')+Commodity::orderBy('name', 'ASC')->lists('name', 'id');
		$metrics = Metric::orderBy('name', 'ASC')->lists('name', 'id');
		$incharge = DepartmentHeads::orderBy('name', 'ASC')->lists('name');
		return View::make('InhouseRequisition.create')
		->with('commodities', $commodities)
		->with('department_list', $department_list)
		->with('incharge', $incharge)
		->with('metrics', $metrics);
	}

	public function dashboard()
	{
		$inhouse = Inhouse::orderBy('created_at','DESC')->get();
		return View::make('user.dashboard')->with('inhouse', $inhouse);
	}

	public function store()
	{

	    $input = Input::all();
	    $condition = $input['commodity_id'];
	    foreach ($condition as $key => $condition) {
	        $inhouse = new Inhouse;
	        $inhouse->commodity_id = $input['commodity_id'][$key];
	        $inhouse->quantity = $input['quantity'][$key];
	        $inhouse->issue_unit= $input['issue_unit'][$key];
	        $inhouse->department = Input::get('department');
	        $inhouse->incharge = Input::get('incharge');
	        $inhouse->incharge_mail = Input::get('incharge_mail');
	        $inhouse->requested_by = Auth::user()->name;
	        $inhouse->user_id = Auth::user()->id;
	        $inhouse->requestor_email = Auth::user()->email;
	        $inhouse->request_status_id = 0;
	        $inhouse->save();
	    }
	    return View::make('user.home');
	}


	/**
	* Display the specified resource.
	*
	* @param  int  $id
	* @return Response
	*/
	public function show($id)
	{
		//
	}

	//Generating pdf
	public function pdfview()
	{
		// view()->share('inhouse',$inhouse);
		// return View::make('InhouseRequisition.pdfview')
		$inhouse = Inhouse::get();
		$template = AdhocConfig::where('name','Report')->first()->getReportTemplate();
		$content = View::make($template)
		->with('inhouse', $inhouse);

		$pdf = new Mypdf;
		$pdf->SetAutoPageBreak(TRUE, 15);
		$pdf->AddPage();
		$pdf->SetFont('times','','11');
		$pdf->writeHTML($content, 'true', 'false', 'false', 'false', '');

		return $pdf->output('report.pdf');

	}


	// public function htmlToPD()
	// {
	// 	$view = \View::make('myview_name');
	// 	$html = $view->render();
	//
	// 	$pdf = new TCPDF();
	// 	$pdf::SetTitle('Hello World');
	// 	$pdf::AddPage();
	// 	$pdf::writeHTML($html, true, false, true, false, '');
	// 	$pdf::Output('hello_world.pdf');
	// }


	/**
	* Show the form for editing the specified resource.
	*
	* @param  int  $id
	* @return Response
	*/
	public function edit($id)
	{

		$inhouse = Inhouse::find($id);
		$department_list = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director', '9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio Repository', '12' => 'Sickle Cell Lab', '16'=>'Bio Safety Bio Security');
		$commodities = array('')+Commodity::orderBy('name', 'ASC')->lists('name', 'id');
		return View::make('InhouseRequisition.edit')
		->with('inhouse', $inhouse)
		->with('commodities', $commodities)
		->with('department_list', $department_list);
	}

	public function approveddoc($id)
	{
		$inhouse = Inhouse::find($id);
		$department_list = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director', '9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio Repository', '12' => 'Sickle Cell Lab', '16'=>'Bio Safety Bio Security');
		$commodities = array('')+Commodity::orderBy('name', 'ASC')->lists('name', 'id');
		return View::make('InhouseRequisition.requisitionapproved')
		->with('inhouse', $inhouse)
		->with('commodities', $commodities)
		->with('department_list', $department_list);
	}

	/**
	* Update the specified resource in storage.
	*
	* @param  int  $id
	* @return Response
	*/
	public function update($id)
	{
		$rules = [
		'department' => 'required',
		'quantity' => 'required',
		];

		$validator = Validator::make(Input::all(), $rules);

		// process the validation
		if ($validator->fails()) {
			return Redirect::back()->withErrors($validator)->withInput(Input::except('password'));
		}
		else {
			$inhouse = Inhouse::find($id);
			$inhouse->commodity_id = Input::get('commodity_id');
			$inhouse->quantity = Input::get('quantity');
			$inhouse->department = Input::get('department');
			$inhouse->requested_by = Auth::user()->name;
			$inhouse->requestor_email = Input::get('requestor_email');

			try{
				$inhouse->save();
				return Redirect::route('inhouserequest.index')
				->with('message', trans('messages.success-updating-requsition'))->with('inhouse', $inhouse->id);
			}catch(QueryException $e){
				Log::error($e);
			}
		}
	}

	/**
	* Remove the specified resource from storage.
	*
	* @param  int  $id
	* @return Response
	*/

	public function delete($id)
	{
		//Soft delete the item
		$inhouse = Inhouse::find($id);
		$inhouse->delete();

		// redirect
		return Redirect::route('inhouserequest.index')
		->with('message', trans('Request Succesfully Removed'));
	}

	//Approval by Dept Head
	public function approve($id)
	{
		$inhouse =Inhouse::find($id);
		$inhouse->approved_by = Auth::user()->name;
		$inhouse->request_status_id = 1;

		try{
			$inhouse->save();
			$email = Inhouse::findOrFail($id);

			Mail::send('InhouseRequisition.requisitionapproved', array('commodity'=>$inhouse->commodity->name,
				'quantity'=>$inhouse->quantity,'requested_by'=>Auth::user()->name,
				'approved_by'=>$inhouse->approved_by),
				 function($message) use ($email){
				 $message->from('unhlsims@gmail.com', 'UNHLS Inventory Management System');
				$message->to($email->requestor_email, $email->requested_by)->subject('Request Approved By HoD!');
				});
			return Redirect::route('inhouserequest.index')
				->with('message', 'Requisition Approved');
		}
		catch(QueryException $e){

			Log::error($e);
		}
	}
//Approval by store manager
	public function storeapproval($id)
	{
		$inhouse =Inhouse::find($id);
		$inhouse->store_approved_by = Auth::user()->name;
		$inhouse->request_status_id = 4;

		try{
			$inhouse->save();
			$email = Inhouse::findOrFail($id);

			Mail::send('InhouseRequisition.store_approval_notice', array('commodity'=>$inhouse->commodity->name,
				'quantity'=>$inhouse->quantity,'requested_by'=>Auth::user()->name,
				'created_at'=>$inhouse->created_at,
				'approved_by'=>$inhouse->approved_by),
				 function($message) use ($email){
				 $message->from('unhlsims@gmail.com', 'UNHLS Inventory Management System');
				$message->to($email->requestor_email, $email->requested_by)->subject('Request Approved by UNHLS Store Manager!');
			});

				return Redirect::route('inhouserequest.index')	
				->with('message', 'Requisition Approved By Store Manager');
		}
		catch(QueryException $e){
			Log::error($e);
		}
	}

//proceeding to issue stock
	public function issuestock($id)
	{
		$inhouse =Inhouse::find($id);
		$inhouse->issued_by = Auth::user()->name;
		$inhouse->request_status_id = 3;

		try{
			$inhouse->save();
			$email = Inhouse::findOrFail($id);

			Mail::send('InhouseRequisition.stock_issued', array('commodity'=>$inhouse->commodity->name,
				'quantity'=>$inhouse->quantity,'requested_by'=>Auth::user()->name,
				'created_at'=>$inhouse->created_at,
				'issued_by'=>$inhouse->issued_by,
				'issue_unit'=>$inhouse->issued_unit),
				 function($message) use ($email){
				 $message->from('unhlsims@gmail.com', 'UNHLS Inventory Management System');
				$message->to($email->requestor_email, $email->requested_by)->subject('Request Approved by UNHLS Store Manager!');
			});

				return Redirect::route('stockcard.index')
				->with('message', 'Proceed to issue stock');
		}
		catch(QueryException $e){
			Log::error($e);
		}
	}

	public function reject($id)
	{
		$inhouse = Inhouse::find($id);
		$inhouse->rejected_by = Auth::user()->name;
		$inhouse->request_status_id = 2;
		try{
			$inhouse->save();

			$email = Inhouse::findOrFail($id);

			Mail::send('InhouseRequisition.requisitionreject', ['email' => $email], function ($message) use ($email) {
				// $pathToFile = realpath('app/views/order/purchaseRequestForm.blade.php');
				// $message->attach($pathToFile);
				$message->from('unhlsims@gmail.com.com', 'UNHLS Inventory Management System');
				$message->to($email->requestor_email, $email->requested_by)->subject('Rejection Notice!');
			});

			return Redirect::route('inhouserequest.index')->with('message', 'Requisition Rejected');
		}catch(QueryException $e){
			Log::error($e);
		}
	}

	// function to list all pending departmental requests
	public function pending()
	{
		$metrics = Metric::orderBy('name', 'ASC')->lists('name', 'id');
		$department = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director','9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio-Repository', '12' => 'Sickle Cell Lab', '13' => 'Records', '14' => 'Operations/Logistics', '15' => 'Records QC', '16' => 'Bio Safety Bio Security' );

		$pending = Inhouse::where('request_status_id', '=', '0')->get	();
		return View::make('InhouseRequisition.pending')
		->with('pending', $pending)
		->with('metrics', $metrics)
		->with('department', $department);
	}

	// function to list all Approved departmental requests
	public function approved()
	{

		$metrics = Metric::orderBy('name', 'ASC')->lists('name', 'id');
		$department = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director','9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio-Repository', '12' => 'Sickle Cell Lab', '13' => 'Records', '14' => 'Operations/Logistics', '15' => 'Records QC', '16' => 'Bio Safety Bio Security' );
		$pending = Inhouse::where('request_status_id', '=', '1')->get	();
		return View::make('InhouseRequisition.approved')
		->with('pending', $pending)
		->with('metrics', $metrics)
		->with('department', $department);
	}
	// function to list all Rejected departmental requests
	public function rejected()
	{

		$metrics = Metric::orderBy('name', 'ASC')->lists('name', 'id');

	        $department = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director','9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio-Repository', '12' => 'Sickle Cell Lab', '13' => 'Records', '14' => 'Operations/Logistics', '15' => 'Records QC', '16' => 'Bio Safety Bio Security' );
		$inhouse = Inhouse::where('request_status_id', '=', '2')->get	();
		return View::make('InhouseRequisition.index')
		->with('inhouse', $inhouse)
		->with('metrics', $metrics)
		->with('department', $department);
	}

	// function to list all Completed departmental requests
	public function complete()
	{

		$metrics = Metric::orderBy('name', 'ASC')->lists('name', 'id');
		$department = array('0' => 'Operations', '1' => 'Finance & Accounts', '2' => 'Data','3' => 'Sample Reception', '4' => 'Logistics/Stores', '5' => 'EID Lab', '6' => 'Viral Load', '7' => 'Microbiology','8' => 'Executive Director','9' => 'HLIMS', '10' =>'ICT', '11' => 'Bio-Repository', '12' => 'Sickle Cell Lab', '13' => 'Records', '14' => 'Operations/Logistics', '15' => 'Records QC', '16' => 'Bio Safety Bio Security' );
		$pending = Inhouse::where('request_status_id', '=', '3')->get	();
		return View::make('InhouseRequisition.approved')
		->with('pending', $pending)
		->with('metrics', $metrics)
		->with('department', $department);
	}

}
