PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/app/Http/Controllers/Admin/CustomerController.php

https://gitlab.com/yamenpun/repair-tracking-system
PHP | 233 lines | 178 code | 47 blank | 8 comment | 4 complexity | 4ebf5850c0ec845897f1e2188899ceaf MD5 | raw file
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Models\CasesHistory;
  4. use App\User;
  5. use Auth;
  6. use Carbon\Carbon;
  7. use Gate;
  8. use DB;
  9. use PDF;
  10. use Excel;
  11. use AppHelper;
  12. use App\Http\Requests;
  13. use App\Http\Requests\Admin\Customer\AddFormValidation;
  14. use App\Http\Requests\Admin\Customer\UpdateFormValidation;
  15. class CustomerController extends AdminBaseController {
  16. protected $view_path = 'admin.customer';
  17. protected $base_route = 'admin.customer';
  18. protected $model;
  19. public function index()
  20. {
  21. $data = [];
  22. $data['rows'] = User::select('id', 'fullname', 'username', 'email', 'office_name', 'mobile_number', 'home_number', 'address', 'status')->where('role', '=', 'customer')->get();
  23. return view(parent::loadDefaultVars($this->view_path . '.index'), compact('data'));
  24. }
  25. public function view($id)
  26. {
  27. $data = [];
  28. $data['row'] = User::find($id);
  29. $data['cases'] = DB::select(DB::raw("SELECT c.* FROM cases AS c INNER JOIN users AS u ON u.id = c.customer_id WHERE u.id = '$id' "));
  30. return view(parent::loadDefaultVars($this->view_path . '.view'), compact('data'));
  31. }
  32. public function viewCaseHistory($id)
  33. {
  34. $data = [];
  35. $data['case_history'] = CasesHistory::join('cases', 'cases.id', '=', 'cases_history.case_id')
  36. ->join('users', 'users.id', '=', 'cases.customer_id')
  37. ->select('users.fullname', 'cases.case_name', 'cases_history.item_status', 'cases_history.description', 'cases_history.image_one', 'cases_history.image_two',
  38. 'cases_history.remarks', 'cases_history.etr', 'cases_history.total_charge', 'cases_history.created_at', 'cases_history.updated_at',
  39. 'cases.case_name', 'users.fullname')
  40. ->where('cases.id', $id)
  41. ->get();
  42. return view(parent::loadDefaultVars($this->view_path . '.viewCaseHistory'), compact('data'));
  43. }
  44. public function exportAsPrint()
  45. {
  46. $data = [];
  47. $data['rows'] = DB::select(DB::raw(" SELECT * FROM users WHERE role = 'customer' ORDER BY id DESC "));
  48. return view(parent::loadDefaultVars($this->view_path . '.customerPrint'), compact('data'));
  49. }
  50. public function exportAsPdf()
  51. {
  52. $data = [];
  53. $data['rows'] = DB::select(DB::raw(" SELECT * FROM users WHERE role = 'customer' ORDER BY id DESC "));
  54. $pdf = PDF::loadView($this->view_path . '.customerPdf', compact('data'));
  55. $timestamps = Carbon::now()->format('Y-m-d H:i:s');
  56. return $pdf->download('Customer List - ' . $timestamps . '.pdf');
  57. }
  58. public function exportAsExcel()
  59. {
  60. $customers = User::select('users.id', 'users.fullname', 'users.username', 'users.email', 'users.office_name', 'users.mobile_number',
  61. 'users.home_number', 'users.address', 'users.created_at', 'users.updated_at')
  62. ->where('users.role', '=', 'customer')
  63. ->orderBy('users.id', 'ASC')
  64. ->get();
  65. $customersArray = [];
  66. // Define the Excel spreadsheet headers
  67. $customersArray[] = ['S.N.', 'Customer Name', 'Username', 'Email', 'Office Name', 'Mobile Number', 'Home Number', 'Address', 'Created At', 'Updated At'];
  68. // Convert each member of the returned collection into an array,
  69. // and append it to the student array.
  70. foreach ($customers as $customer)
  71. {
  72. $customersArray[] = $customer->toArray();
  73. }
  74. $timestamps = Carbon::now()->format('Y-m-d H:i:s');
  75. // Generate and return the spreadsheet
  76. Excel::create('Customer List - ' . $timestamps, function ($excel) use ($customersArray)
  77. {
  78. // Build the spreadsheet, passing in the student array
  79. $excel->sheet('sheet1', function ($sheet) use ($customersArray)
  80. {
  81. $sheet->fromArray($customersArray, null, 'A1', false, false);
  82. });
  83. })->export('xls');
  84. }
  85. public function create()
  86. {
  87. return view(parent::loadDefaultVars($this->view_path . '.create'));
  88. }
  89. public function store(AddFormValidation $request)
  90. {
  91. User::create([
  92. 'fullname' => $request->get('fullname'),
  93. 'username' => $request->get('username'),
  94. 'email' => $request->get('email'),
  95. 'password' => bcrypt($request->get('password')),
  96. 'office_name' => $request->get('office_name'),
  97. 'mobile_number' => $request->get('mobile_number'),
  98. 'home_number' => $request->get('home_number'),
  99. 'address' => $request->get('address'),
  100. 'status' => '1',
  101. 'role' => 'customer',
  102. 'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
  103. 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
  104. ]);
  105. AppHelper::flash('success', 'Record created Successfully.');
  106. return redirect()->route('admin.cases.add');
  107. }
  108. public function edit($id)
  109. {
  110. if (!$this->idExist($id))
  111. {
  112. return redirect()->route($this->base_route)->withErrors(['message' => 'Invalid Request']);
  113. }
  114. $data = [];
  115. $data['row'] = $this->model;
  116. return view(parent::loadDefaultVars($this->view_path . '.edit'), compact('data'));
  117. }
  118. public function update(UpdateFormValidation $request, $id)
  119. {
  120. if (!$this->idExist($id))
  121. {
  122. return redirect()->route($this->base_route)->withErrors(['message' => 'Invalid Request']);
  123. }
  124. $data = $this->model;
  125. if ($request->get('password') === '')
  126. {
  127. $data->update([
  128. 'fullname' => $request->get('fullname'),
  129. 'username' => $request->get('username'),
  130. 'email' => $request->get('email'),
  131. 'password' => $data->password,
  132. 'office_name' => $request->get('office_name'),
  133. 'mobile_number' => $request->get('mobile_number'),
  134. 'home_number' => $request->get('home_number'),
  135. 'address' => $request->get('address'),
  136. 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
  137. ]);
  138. } else
  139. {
  140. $data->update([
  141. 'fullname' => $request->get('fullname'),
  142. 'username' => $request->get('username'),
  143. 'email' => $request->get('email'),
  144. 'password' => bcrypt($request->get('password')),
  145. 'office_name' => $request->get('office_name'),
  146. 'mobile_number' => $request->get('mobile_number'),
  147. 'home_number' => $request->get('home_number'),
  148. 'address' => $request->get('address'),
  149. 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
  150. ]);
  151. }
  152. AppHelper::flash('success', 'Record updated successfully.');
  153. return redirect()->route($this->base_route);
  154. }
  155. public function destroy($id)
  156. {
  157. if (!$this->idExist($id))
  158. {
  159. AppHelper::flash('warning', 'Invalid Request.');
  160. return redirect()->route($this->base_route);
  161. }
  162. User::destroy($id);
  163. AppHelper::flash('success', 'Record deleted successfully.');
  164. return redirect()->route($this->base_route);
  165. }
  166. public function profile()
  167. {
  168. $data = [];
  169. $data['rows'] = Auth::user();
  170. return view(parent::loadDefaultVars($this->view_path . '.profile'), compact('data'));
  171. }
  172. public function printCustomerDetail($id)
  173. {
  174. $data = [];
  175. $data['customer_details'] = User::select('fullname', 'username', 'password','address','office_name', 'mobile_number')->where('id', $id)->get();
  176. return view(parent::loadDefaultVars($this->view_path . '.customerPrintDetails'), compact('data'));
  177. }
  178. /**
  179. * Helper Methods
  180. */
  181. protected function idExist($id)
  182. {
  183. $this->model = User::find($id);
  184. return $this->model;
  185. }
  186. }