PageRenderTime 27ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/app/Http/Controllers/InventoryController.php

https://gitlab.com/jeruick/imosa
PHP | 366 lines | 281 code | 80 blank | 5 comment | 31 complexity | 2ed13a9da7a2679ca1b84fd16cb7feb4 MD5 | raw file
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Brand;
  5. use App\Cellar;
  6. use App\Customer;
  7. use App\Http\Controllers\Controller;
  8. use App\Http\Requests;
  9. use App\Jobs\ExportData;
  10. use App\Motorcycle;
  11. use App\MotorcycleModel;
  12. use App\MotorcycleType;
  13. use App\Provider;
  14. use App\Replacement;
  15. use App\ReplacementModel;
  16. use Auth;
  17. use DB;
  18. use Excel;
  19. use File;
  20. use PDF;
  21. use Storage;
  22. use Validator;
  23. class InventoryController extends Controller
  24. {
  25. public function replacements()
  26. {
  27. $replacements = Replacement::simplePaginate(10);
  28. $brands = Brand::all();
  29. $models = MotorcycleModel::all();
  30. $cellars = Cellar::all();
  31. $providers = Provider::all();
  32. return view('inventory.replacements', ['replacements' => $replacements, 'models' => $models, 'cellars' => $cellars, 'providers' => $providers, 'brands' => $brands,'inventory_active' => true, 'paginate' => true]);
  33. }
  34. public function newReplacement(Request $request)
  35. {
  36. $replacement = new Replacement();
  37. $models = $request->models;
  38. $rules = [
  39. 'wholesale_price' => 'required',
  40. 'route_price' => 'required',
  41. 'quantity' => 'required',
  42. 'description' => 'required',
  43. 'provider' => 'required',
  44. 'cellar' => 'required',
  45. 'code' => 'required|unique:replacements',
  46. 'location' => 'required',
  47. ];
  48. $validator = Validator::make($request->all(), $rules);
  49. if ($validator->fails())
  50. {
  51. return redirect()->back()->withErrors($validator->errors());
  52. }
  53. $replacement = $this->saveReplacement($request, $replacement);
  54. if ($models && $replacement)
  55. {
  56. $this->saveReplacementModels($replacement, $models);
  57. }
  58. return redirect()->back();
  59. }
  60. public function getReplacement($id)
  61. {
  62. $brands = Brand::all();
  63. $replacement = Replacement::find($id);
  64. $cellars = Cellar::all();
  65. $providers = Provider::all();
  66. return view('inventory.replacement', ['replacement' => $replacement, 'cellars' => $cellars, 'providers' => $providers, 'brands' => $brands]);
  67. }
  68. public function getReplacementPrice($id, $customer)
  69. {
  70. $replacement = Replacement::find($id);
  71. $customer = Customer::where('customer_id', $customer)->first();
  72. if($customer->type->description == 'LOCAL')
  73. {
  74. return $replacement->wholesale_price;
  75. }
  76. else
  77. {
  78. return $replacement->route_price;
  79. }
  80. }
  81. public function searchReplacement($text)
  82. {
  83. if ($text == 'blank')
  84. {
  85. return ['redirect' => 'repuestos'];
  86. }
  87. else
  88. {
  89. $replacements = $this->getSearchResult($text);
  90. if(count($replacements) > 0)
  91. {
  92. return view('inventory.items', ['replacements' => $replacements]);
  93. }
  94. else
  95. {
  96. return response()->json(['error' => 'No se encontraron resultados']);
  97. }
  98. }
  99. }
  100. public function searchReplacements($text)
  101. {
  102. if ($text == 'blank')
  103. {
  104. return ['redirect' => 'repuestos'];
  105. }
  106. else
  107. {
  108. $replacements = $this->getSearchResult($text);
  109. if(count($replacements) > 0)
  110. {
  111. return response()->json($replacements);
  112. }
  113. else
  114. {
  115. return response()->json(['error' => 'No se encontraron resultados']);
  116. }
  117. }
  118. }
  119. public function exportInventory()
  120. {
  121. Excel::create('Inventario', function($excel) {
  122. $excel->sheet('New sheet', function($sheet) {
  123. $replacements = Replacement::all();
  124. $sheet->loadView('excel.inventory', ['replacements' => $replacements]);
  125. });
  126. })->download('xls');
  127. }
  128. public function getSearchResult($text)
  129. {
  130. $result = DB::table('replacements')
  131. ->join('replacements_models', 'replacements_models.replacement_id', '=', 'replacements.replacement_id')
  132. ->join('providers', 'providers.provider_id', '=', 'replacements.provider_id')
  133. ->join('models', 'replacements_models.model_id', '=', 'models.model_id')
  134. ->select('replacements.*','models.description as model_description','replacements.quantity', 'providers.name as provider')
  135. ->where(function($query) use ($text){
  136. $query->where('replacements.description', 'LIKE', "%$text%")
  137. ->orWhere('models.description', 'LIKE', "%$text%")
  138. ->orWhere('replacements.code', 'LIKE', "%$text%")
  139. ->orWhere('replacements.bar_code' , 'LIKE', "%$text%");
  140. })
  141. ->groupBy('replacement_id')
  142. ->get();
  143. $replacements = [];
  144. if($result)
  145. {
  146. foreach ($result as $key => $item)
  147. {
  148. $temp = Replacement::find($item->replacement_id);
  149. array_push($replacements, $temp);
  150. }
  151. }
  152. return $replacements;
  153. }
  154. public function deleteReplacement($id)
  155. {
  156. $replacement = Replacement::find($id);
  157. if($replacement->picture)
  158. {
  159. $picture_name = substr($replacement->picture, strrpos($replacement->picture, '/') + 1);
  160. if(Storage::disk('s3')->exists($picture_name))
  161. {
  162. Storage::disk('s3')->delete($picture_name);
  163. }
  164. }
  165. ReplacementModel::where('replacement_id', $id)->delete();
  166. Replacement::destroy($id);
  167. return redirect()->back();
  168. }
  169. public function updateReplacement(Request $request, $id)
  170. {
  171. $replacement = Replacement::find($id);
  172. $models = $request->input('models');
  173. $rules = [
  174. 'wholesale_price' => 'required',
  175. 'route_price' => 'required',
  176. 'quantity' => 'required',
  177. 'description' => 'required',
  178. 'provider' => 'required',
  179. 'cellar' => 'required',
  180. 'code' => 'required',
  181. 'location' => 'required',
  182. ];
  183. $validator = Validator::make($request->all(), $rules);
  184. if ($validator->fails())
  185. {
  186. return redirect()->back()->withErrors($validator->errors());
  187. }
  188. $replacement = $this->saveReplacement($request, $replacement);
  189. if ($models)
  190. {
  191. $this->saveReplacementModels($replacement, $models);
  192. }
  193. return redirect()->back();
  194. }
  195. public function saveReplacement($request, $replacement)
  196. {
  197. /*replacement data*/
  198. $wholesale_price = $request->input('wholesale_price');
  199. $route_price = $request->input('route_price');
  200. $description = $request->input('description');
  201. $code = $request->input('code');
  202. $cellar = $request->input('cellar');
  203. $location = $request->input('location');
  204. $provider_id = $request->input('provider');
  205. $quantity = $request->input('quantity');
  206. $replacement->wholesale_price = $wholesale_price;
  207. $replacement->route_price = $route_price;
  208. $replacement->description = $description;
  209. $replacement->code = $code;
  210. $replacement->location = $location;
  211. $replacement->quantity = $quantity;
  212. $replacement->cellar_id =$cellar;
  213. $replacement->provider_id = $provider_id;
  214. /* replacement image */
  215. if($file = $request->file('picture'))
  216. {
  217. $image = $request->file('picture');
  218. $thumbnailName = 'thumb_'. $image->getClientOriginalName();
  219. $destinationPath = "uploads";
  220. /*save replacement image to s3*/
  221. // Storage::put($file->getFilename().'.'.$extension, File::get($file));
  222. //$replacement->picture = Storage::getAdapter()->getClient()->getObjectUrl(env('AWS_BUCKET'), $file->getFilename().'.'.$extension);
  223. $replacement->picture = $request->file('picture')->move($destinationPath, $thumbnailName);
  224. }
  225. if($replacement->save())
  226. {
  227. return $replacement;
  228. }
  229. else
  230. {
  231. return redirect()->back()->withErrors(['error' => 'Ocurrio un error al guardar el repuesto']);
  232. }
  233. }
  234. public function saveReplacementModels($replacement, $models)
  235. {
  236. ReplacementModel::where('replacement_id',$replacement->replacement_id)->delete();
  237. foreach ($models as $key => $value)
  238. {
  239. $o = new ReplacementModel();
  240. $o->replacement_id = $replacement->replacement_id;
  241. $o->model_id = $value;
  242. if (!$o->save())
  243. {
  244. return redirect()->back()->withErrors(['error' => 'Ocurrio un error al guardar el repuesto']);
  245. }
  246. }
  247. }
  248. public function newMotorcycleType(Request $request)
  249. {
  250. $type = new MotorcycleType();
  251. $type->description = $request->input('type');
  252. if ($type->save())
  253. {
  254. return $type;
  255. }
  256. }
  257. public function totalProducts(Request $request)
  258. {
  259. if($request->ajax())
  260. {
  261. $type = $request->input('type');
  262. if ($type == 'replacements' || $type == 'motorcycles')
  263. {
  264. $products = $request->input('replacements') ? $request->input('replacements') : $request->input('motorcycles');
  265. if (isset($products))
  266. {
  267. $total = 0.0;
  268. foreach ($products as $key => $value)
  269. {
  270. if ($type == 'replacements')
  271. {
  272. $replacement = Replacement::find($value['replacement_id']);
  273. $total += $replacement->wholesale_price * $value['quantity'];
  274. }
  275. else if ($type == 'motorcycles')
  276. {
  277. $motorcycle = Motorcycle::find($value['motorcycle_id']);
  278. $total += $motorcycle->price * $value['quantity'];
  279. }
  280. }
  281. return $total;
  282. }
  283. }
  284. }
  285. }
  286. }