· 7 years ago · Oct 22, 2018, 07:26 PM
1<?php
2
3namespace App\Http\Controllers;
4
5use Illuminate\Http\Request;
6use App\Vimage;
7use Image;
8use App\Vehicle;
9use App\Inventory;
10use DB;
11use App\Setting;
12use App\ntas\ToolBox;
13use App\Role;
14use App\User;
15use \App\ntas\vin_decode\iDecode;
16
17use Illuminate\Support\Facades\Storage;
18
19class AjaxController extends Controller {
20
21 /***********************************************************************************************************************************************************
22 *
23 ***********************************************************************************************************************************************************/
24
25 private $imgWidth = 1024;
26 private $imgHeight = 1024 *.75;
27 private $origImgWidth = 2048;
28 private $config = null;
29
30 private $vehicleThumbnailPath = null;
31 private $vehicleOriginalPath = null;
32
33 /***********************************************************************************************************************************************************
34 * __construct
35 ***********************************************************************************************************************************************************/
36
37 public function __construct() {
38 parent::__construct();
39
40 ToolBox::Trace(sprintf('[AC00038] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
41 ToolBox::Trace(sprintf('[AC00039]--- ToolBox::Config: %s', json_encode(ToolBox::Config() )));
42
43 $this->vehicleThumbnailPath = null;
44 $this->vehicleOriginalPath = null;
45 if( null !== ToolBox::Config() ) {
46 $this->vehicleThumbnailPath = public_path( ToolBox::Config()->vehicleThumbnailPath );
47 $this->vehicleOriginalPath = storage_path( ToolBox::Config()->vehicleOriginalPath );
48
49 ToolBox::Trace(sprintf('[AC00047]--- vehicleThumbnailPath: %s', $this->vehicleThumbnailPath));
50 ToolBox::Trace(sprintf('[AC00048]--- vehicleOriginalPath : %s', $this->vehicleOriginalPath));
51
52 } else {
53 ToolBox::Trace(sprintf('[AC00051]--- ToolBox::Config is null.'));
54 }
55
56 ToolBox::Trace(sprintf('[AC00054] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
57 }
58
59 /***********************************************************************************************************************************************************
60 * vehicleThumbnailPath
61 ***********************************************************************************************************************************************************/
62
63 public function vehicleThumbnailPath() {
64 ToolBox::Trace(sprintf('[AC00062] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
65
66 // if( null === $this->vehicleThumbnailPath && null !== ToolBox::Config() ) {
67 if( null === $this->vehicleThumbnailPath ) {
68 // $this->vehicleThumbnailPath = public_path( ToolBox::Config()->vehicleThumbnailPath );
69 ToolBox::Trace(sprintf('[AC00066]--- vehicleThumbnailPath: %s', $this->vehicleThumbnailPath));
70 // return $this->vehicleThumbnailPath;
71 $this->vehicleThumbnailPath = public_path('images/vehicles');
72 } else {
73 // if( null === $this->vehicleThumbnailPath ) {
74 // ToolBox::Trace(sprintf('[AC00076]--- vehicleThumbnailPath is null.'));
75 // }
76 //
77 // if( null === ToolBox::Config() ) {
78 // ToolBox::Trace(sprintf('[AC00081]--- Config is null.'));
79 // }
80 }
81
82 ToolBox::Trace(sprintf('[AC00078]--- returning: %s', $this->vehicleThumbnailPath));
83 ToolBox::Trace(sprintf('[AC00079] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
84 return( $this->vehicleThumbnailPath );
85 }
86
87 /***********************************************************************************************************************************************************
88 * vehicleOriginalPath
89 ***********************************************************************************************************************************************************/
90
91 public function vehicleOriginalPath() {
92 ToolBox::Trace(sprintf('[AC00087] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
93
94 if( trim($this->vehicleOriginalPath) === '' ) {
95 // if( null !== ToolBox::Config() ) {
96 //
97 // $this->vehicleOriginalPath = storage_path( ToolBox::Config()->vehicleOriginalPath );
98 // ToolBox::Trace(sprintf('[AC00094]--- returning value : %s', $this->vehicleOriginalPath));
99 // } else {
100 // ToolBox::Trace(sprintf('[AC00096]--- config is empty...'));
101 // }
102 $this->vehicleOriginalPath = storage_path('images/vehicles/original');
103 } else {
104 ToolBox::Trace(sprintf('[AC00099]--- vehicleOriginalPath not empty: %s', $this->vehicleOriginalPath));
105 }
106
107 ToolBox::Trace(sprintf('[AC00102] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
108 return( $this->vehicleOriginalPath );
109 }
110
111 /***********************************************************************************************************************************************************
112 * overlayUpload
113 ***********************************************************************************************************************************************************/
114
115 public function overlayUpload(Request $request) {
116 ToolBox::Trace(sprintf('[AC00114] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
117 $image = null;
118 $which_overlay = '';
119 $name = '';
120 $data['files'] = array();
121
122 if( $request->hasFile('primary_overlay_up') ) {
123 $image = $request->file('primary_overlay_up');
124 $which_overlay = 'primary_overlay';
125 } else if( $request->hasFile('secondary_overlay_up') ) {
126 $image = $request->file('secondary_overlay_up');
127 $which_overlay = 'secondary_overlay';
128 } else if( $request->hasFile('certified_overlay_up') ) {
129 $image = $request->file('certified_overlay_up');
130 $which_overlay = 'certified_overlay';
131 }
132
133 $name = sprintf("%s_%s.%s",
134 ToolBox::User()->dealers()->first()->cpin,
135 md5_file( $image->getRealPath() ),
136 $image->getClientOriginalExtension()
137 );
138
139 ToolBox::Trace(sprintf("[AC00137]--- image overlay name: %s", $name));
140
141 $orgimg = Image::make(
142 $image
143 )->save(
144 storage_path('images/overlays') . '/' . $name
145 );
146
147 array_push($data['files'], [
148 'url' => $orgimg->basename,
149 'src' => $which_overlay
150 ]);
151
152 ToolBox::Trace(sprintf('[AC00145] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
153 return response()->json($data);
154 }
155
156 /***********************************************************************************************************************************************************
157 * vehicleUpload
158 ***********************************************************************************************************************************************************/
159
160 public function vehicleUpload(Request $request) {
161 // dd($request);
162 $rtn['files'] = array();
163 $rtn['error'] = null;
164 $baseFileName = strtolower(str_replace(
165 ' ',
166 '_',
167 (
168 trim($request->year) . '-' .
169 trim($request->make) . '-' .
170 trim( str_replace('-', '_', $request->model) ) . '-' .
171 trim($request->cpin) . '-' .
172 trim($request->stock_number)
173 )
174 ));
175
176 $this->checkImagePaths();
177 if( $request->hasFile('uploadedImage') ) {
178 foreach( $request->file('uploadedImage') as $image ) {
179 $hash = hash('joaat', md5_file( $image->getRealPath() ) );
180 ToolBox::Trace(sprintf('[AC00177]--- hash: %s', $hash ));
181
182 // $filename = strtolower($baseFileName . '-' . $hash . '.' . $image->getClientOriginalExtension());
183 $filename = strtolower($baseFileName . '-' . $hash . '.jpg');
184 $location = $this->vehicleThumbnailPath . '/' . $filename;
185 $original = $this->vehicleOriginalPath . '/' . $filename;
186
187 // http://image.intervention.io/ (documentation)
188 // create & save the original file
189 $orgimg = Image::make(
190 $image
191 )->resize(
192 $this->origImgWidth,
193 null,
194 function($constraint) {
195 $constraint->upsize();
196 $constraint->aspectRatio();
197 }
198 )->save(
199 $original
200 );
201
202 $newimg = Image::canvas(
203 $this->imgWidth,
204 $this->imgHeight,
205 '#ffffff'
206 )->insert(
207 Image::make(
208 $orgimg
209 )->resize(
210 $this->imgWidth,
211 null,
212 function($constraint) {
213 $constraint->upsize();
214 $constraint->aspectRatio();
215 }
216 )->sharpen(
217 5
218 ),
219 'top'
220 )->save(
221 $location
222 );
223
224 array_push($rtn['files'], ['url' => $newimg->basename]);
225 }
226
227 return response()->json($rtn);
228
229 } else {
230
231 $rtn['error'] = 'unknown image error';
232 return response()->json($rtn);
233
234 }
235
236 }
237
238 /***********************************************************************************************************************************************************
239 * VehicleDeleteImage
240 ***********************************************************************************************************************************************************/
241
242 public function VehicleDestroyImage(Request $request) {
243
244 $image = Vimage::where('name', '=', $request->name)->first();
245
246 if( $image !== null ) {
247 // Storage::delete(public_path($image->name));
248 // $image->delete();
249 // Hard Delete
250 }
251
252 return response()->json(true);
253
254 }
255
256 public function VehicleDeleteImage(Request $request) {
257
258 $image = Vimage::where('name', '=', $request->name)->first();
259
260 if( $image !== null ) {
261 $image->isDeleted = true;
262 $image->save();
263 }
264
265 return response()->json(true);
266
267 }
268
269 /***********************************************************************************************************************************************************
270 *
271 ***********************************************************************************************************************************************************/
272
273 public function VehicleUndeleteImage(Request $request) {
274 $image = Vimage::where('name', '=', $request->name)->first();
275
276 if( $image !== null ) {
277 $image->isDeleted = false;
278 $image->save();
279 }
280
281 return response()->json(true);
282 }
283
284 /***********************************************************************************************************************************************************
285 *
286 ***********************************************************************************************************************************************************/
287
288 public function checkImagePaths() {
289 ToolBox::Trace(sprintf('[AC00264] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
290
291 // make sure the public vehicles image folder exists
292 if( !file_exists( $this->vehicleThumbnailPath() ) ) {
293 try {
294 ToolBox::Trace(sprintf('[AC00272]--- vehicleThumbnailPath: %s', $this->vehicleThumbnailPath() ));
295 if( !empty($this->vehicleThumbnailPath()) ) {
296 mkdir( $this->vehicleThumbnailPath() );
297 } else {
298 ToolBox::Trace(sprintf('[AC00274]--- mkdir::vehicleThumbnailPath FAILED'));
299 }
300 } catch(Exception $e) {
301 ToolBox::Trace(sprintf('[AC00275]--- vehicleThumbnailPath Exception: %s', $e->getMessage() ));
302 return( false );
303 }
304 }
305
306 // make sure the original vehicle image folder exists
307
308 if( !file_exists( $this->vehicleOriginalPath() ) && $this->vehicleOriginalPath() !== '' ) {
309 try {
310 if( !empty($this->vehicleOriginalPath()) ) {
311 mkdir( $this->vehicleOriginalPath(), 0777, true );
312 } else {
313 ToolBox::Trace(sprintf('[AC00289]--- mkdir::vehicleOriginalPath FAILED'));
314 }
315 } catch(Exception $e) {
316 return( false );
317 }
318 }
319
320 ToolBox::Trace(sprintf('[AC00287] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
321 return( true );
322
323 }
324
325 /***********************************************************************************************************************************************************
326 * updateField
327 ***********************************************************************************************************************************************************/
328
329 public function updateField(Request $request) {
330
331 $vin = $request->input('vin');
332
333 $inventory = null;
334 $vehicle = Vehicle::where('vin', '=', $vin)->first();
335 $field = $request->input('field');
336 $value = $request->input('value');
337
338 if( strtolower(trim($field)) == 'vehicle_type' ) {
339 $inventory = Inventory::where('vehicle_id', '=', $vehicle->id)->first();
340 $inventory->{$field} = $value;
341 $inventory->save();
342 } else {
343 // $vehicle = Vehicle::where('vin', '=', $request->input('vin'))->first();
344 $vehicle->{$field} = $value;
345 $vehicle->save();
346 }
347
348 }
349
350 /***********************************************************************************************************************************************************
351 * updatePricing
352 ***********************************************************************************************************************************************************/
353
354 public function updatePricing(Request $request) {
355 $success = false;
356 $iid = $request->input('iid');
357 $field = null;
358 $value = $request->input('value');
359
360 switch( strtolower($request->input('field')) ) {
361 case 'cost' :
362 $field = 'cost';
363 break;
364 case 'msrp' :
365 $field = 'msrp';
366 break;
367 case 'list_price' :
368 $field = 'list_price';
369 break;
370 case 'retail_price' :
371 $field = 'retail_price';
372 break;
373 case 'internet_price' :
374 $field = 'internet_price';
375 break;
376 }
377
378 if( null !== $field && is_numeric($iid) && (empty($value) || is_numeric($value)) ) {
379 $inv = Inventory::where('id', '=', $iid)->first();
380 if( $field === 'msrp' ) {
381 $v = Vehicle::where('id', '=', $inv->vehicle_id)->first();
382 $v->{$field} = $value;
383 $v->save();
384 $success = true;
385 } else if( !empty($field) ) {
386 $inv->{$field} = $value;
387 $inv->save();
388 $success = true;
389 }
390 }
391
392 return response()->json($success);
393 }
394
395 /***********************************************************************************************************************************************************
396 * roleToggle
397 ***********************************************************************************************************************************************************/
398
399 public function roleToggle(Request $request) {
400 ToolBox::Trace( sprintf('AjaxController.php::roleToggle: [%s]', json_encode($request->input()) ) );
401 $user = User::where('id', '=', $request->input('id'))->first();
402 if( $request->input('value') === "true" ) {
403 ToolBox::Trace( sprintf('--Attaching') );
404 $user->roles()->attach( Role::where('name', '=', $request->input('role'))->first() );
405 } else {
406 // $user = \App\User::where('id', '=', $request->input('id'))->first();
407 ToolBox::Trace( sprintf('--detatching') );
408 $user->roles()->detach( Role::where('name', '=', $request->input('role'))->first() );
409 }
410 }
411
412 /***********************************************************************************************************************************************************
413 * userDeleteToggle
414 ***********************************************************************************************************************************************************/
415
416 public function userDeleteToggle(Request $request) {
417 $user = \App\User::where('id', '=', $request->input('id'))->first();
418 if( $request->input('value') === "true" ) {
419 $user->is_deleted = true;
420 $user->is_active = false;
421 $user->save();
422 } else {
423 $user->is_deleted = false;
424 $user->is_active = true;
425 $user->save();
426 }
427
428 return response()->json(true);
429 }
430
431 /***********************************************************************************************************************************************************
432 * userActiveToggle
433 ***********************************************************************************************************************************************************/
434
435 public function userActiveToggle(Request $request) {
436 $user = \App\User::where('id', '=', $request->input('id'))->first();
437 if( $request->input('value') === "true" ) {
438 $user->is_active = true;
439 $user->save();
440 } else {
441 $user->is_active = false;
442 $user->save();
443 }
444 }
445
446 /***********************************************************************************************************************************************************
447 * addNewUser
448 ***********************************************************************************************************************************************************/
449
450 public function addNewUser(Request $request) {
451 ToolBox::Trace('AjaxController.php::addNewUser: (begin)');
452
453 // dd( $request->input() );
454 $roles = [];
455 $pwd = null !== $request->input('pwd') ? $request->input('pwd') : str_random(12);
456 $user = \App\User::where( 'email', '=', $request->input('email') )->first();
457
458 ToolBox::Trace(
459 sprintf(
460 'AjaxController.php::addNewUser: id=[%s], pwd=[%s]',
461 $request->input('email'),
462 $pwd
463 )
464 );
465
466 if( $user === null ) {
467 $user = new \App\User;
468 }
469
470 $user->first_name = $request->input('fname');
471 $user->last_name = $request->input('lname');
472 $user->name = sprintf("%s %s", $request->input('fname'), $request->input('lname') );
473 $user->email = $request->input('email');
474 $user->password = bcrypt( $pwd );
475 // $user->password = $request->input('pwd');
476 $user->force_password_change = true;
477 // $user->dealer_id = \Auth::user()->dealer_id;
478 $user->api_token = str_random(128);
479 $user->save();
480
481 // $user->dealers()->attach( ToolBox::User()->dealer_id );
482
483 $role_admin = Role::where('name', 'admin')->first();
484 $role_salesperson = Role::where('name', 'salesperson')->first();
485 $role_ntas = Role::where('name', 'ntas')->first();
486 $role_inventory_manager = Role::where('name', 'inventory_manager')->first();
487 $role_customer = Role::where('name', 'customer')->first();
488
489 if( strtolower($request->input('admin')) === "true" ) {
490 array_push($roles, $role_admin->id);
491 }
492
493 if( strtolower($request->input('salesperson')) === "true" ) {
494 array_push($roles, $role_salesperson->id );
495 }
496
497 if( strtolower($request->input('inventorymanager')) === "true" ) {
498 array_push($roles, $role_inventory_manager->id );
499 }
500
501 $user->roles()->attach($roles);
502
503 ToolBox::Trace('AjaxController.php::addNewUser: (end)');
504 return $user->toJson();
505
506 }
507
508 /***********************************************************************************************************************************************************
509 * getVehicleValueByVin
510 ***********************************************************************************************************************************************************/
511
512 public function getVehicleValueByVin(Request $request) {
513 $nada = new \App\ntas\nada;
514 $results = null;
515
516 \App\ntas\ToolBox::Trace(sprintf('ToolBox.php::getVehicleValueByVin: Input=[ %s ]', json_encode($request->input()) ) );
517
518 try {
519 $results = $nada->getValueByVin(
520 array(
521 'vin' => $request->input('vin'),
522 'mileage' => $request->input('mileage')
523 )
524 );
525
526 \App\ntas\ToolBox::Trace(sprintf('ToolBox.php::getVehicleValueByVin: results=[ %s ]', json_encode($results) ) );
527
528 return json_encode($results);
529 } catch(Exception $ex) {
530 \App\ntas\ToolBox::Trace(sprintf('ToolBox.php::getVehicleValueByVin: fail=[ %s ]', json_encode($ex) ) );
531 return null;
532 }
533 } // end getVehicleValueByVin
534
535 /***********************************************************************************************************************************************************
536 * getNadaAccessories
537 ***********************************************************************************************************************************************************/
538
539 public function getNadaAccessories(Request $request) {
540 $nada = new \App\ntas\nada;
541 $results = null;
542
543 try {
544 $results = $nada->getAccessories(
545 array(
546 'vin' => $request->input('vin'),
547 'period' => 0,
548 'vehicletype' => 'UsedCar',
549 'uid' => $request->input('uid'),
550 'region' => 5
551 )
552 );
553
554 return json_encode($results);
555 } catch(Exception $ex) {
556 return null;
557 }
558 } // end getAccessories
559
560 /***********************************************************************************************************************************************************
561 * putNadaAccessory
562 ***********************************************************************************************************************************************************/
563
564 public function putNadaAccessory(Request $request) {
565 $option = new \App\Option;
566 }
567
568 /***********************************************************************************************************************************************************
569 * setDealerId
570 ***********************************************************************************************************************************************************/
571
572 public function setDealerId(Request $request) {
573
574 ToolBox::Trace( sprintf('AjaxController::setDealerId: begin (%s)', json_encode($request->input() )) );
575
576 if( null !== $request->input('dealer_id') ) {
577 session( ['dealer_id' => $request->input('dealer_id') ] );
578
579 if( \Auth::user() ) {
580 \Auth::user()->dealer_id = $request->input('dealer_id');
581 \Auth::user()->save();
582 }
583
584 return response()->json(true);
585 }
586
587 return response()->json(false);
588 }
589
590 /***********************************************************************************************************************************************************
591 * removeDealerId
592 ***********************************************************************************************************************************************************/
593
594 public function removeDealerId(Request $request) {
595 \App\ntas\ToolBox::forgetSession('dealer_id');
596 return response()->json(true);
597 }
598
599 /***********************************************************************************************************************************************************
600 * getTemplate
601 ***********************************************************************************************************************************************************/
602
603 public function getTemplate(Request $request) {
604 ToolBox::Trace(sprintf('[AC00577] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
605 ToolBox::Trace(sprintf('[AC00578]--- $request->input(): %s', json_encode($request->input())));
606
607 if( $request->input('template') ) {
608 $dgroups = null;
609 $dealersArray = null;
610
611 switch( $request->input('template') ) {
612 case 'hbjs_linkdealertogroup_tpl':
613 case 'hbjs_adddealer_tpl':
614 $dgroups[0] = '';
615 foreach( \App\dgroup::where('is_active', '=', 1)->where('is_deleted', '=', 0)->orderBy('name')->select('id', 'name')->get() as $row ) {
616 $dgroups[$row->id] = $row->name;
617 }
618 break;
619 case 'hbjs_linkusertodealer_tpl':
620 case 'hbjs_linkgrouptodealer_tpl':
621 $dealersArray[0] = '';
622 foreach( \App\Dealer::where('is_active', '=', '1')->where('is_deleted', '=', 0)->orderBy('name')->get() as $row ) {
623 $dealersArray[$row->id] = $row->name;
624 }
625 break;
626 }
627
628 // dd('params', $request->input('params') );
629
630 return response(
631 view(
632 sprintf(
633 // 'themes.%s.shared.%s',
634 // ToolBox::Config()->theme,
635 'shared.%s',
636 $request->input('template')
637 )
638 )->with(
639 'dgroups',
640 $dgroups
641 )->with(
642 'dealersarray',
643 $dealersArray
644 )->with(
645 'params',
646 $request->input('params')
647 )->render()
648 );
649 }
650
651 ToolBox::Trace(sprintf('[AC00622] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
652 return response()->json(null);
653 }
654
655 /***********************************************************************************************************************************************************
656 * checkUserExists
657 ***********************************************************************************************************************************************************/
658
659 public function checkUserExists(Request $request) {
660 $email = $request->input('email');
661
662 $user = \App\User::where('email', '=', trim($email) )->first();
663
664 if( null !== $user ) {
665 return response()->json([
666 'status' => true,
667 'user' => [
668 'id' => $user->id,
669 'first_name' => $user->first_name,
670 'last_name' => $user->last_name,
671 'email' => $user->email,
672 'phone' => $user->phone,
673 'fax' => $user->fax
674 ]
675 ]);
676 } else {
677 return response()->json([
678 'status' => false
679 ]);
680 }
681 }
682
683 /***********************************************************************************************************************************************************
684 * newDealerGroup
685 ***********************************************************************************************************************************************************/
686
687 public function newDealerGroup(Request $request) {
688 ToolBox::Trace(sprintf('[AC00646] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
689 ToolBox::Trace(sprintf('[AC00647]--- $request: %s', json_encode( $request->input() ) ));
690
691 $incomingGroup = $request->input('group');
692 $incomingUser = $request->input('user');
693 $group = null;
694 $user = null;
695
696 $group = new \App\dgroup;
697 $group->name = $incomingGroup['name'];
698 $group->address_1 = $incomingGroup['address1'];
699 $group->address_2 = $incomingGroup['address2'];
700 $group->city = $incomingGroup['city'];
701 $group->state = $incomingGroup['state'];
702 $group->zip = $incomingGroup['zip'];
703 $group->phone = $incomingGroup['phone'];
704 $group->fax = $incomingGroup['fax'];
705 $group->email = $incomingGroup['email'];
706 $group->website = $incomingGroup['website'];
707 $group->save();
708
709 if( isset($incomingUser['email']) ) {
710 $user = \App\User::where('email', '=', $incomingUser['email'])->first();
711
712 if( null === $user ) {
713 $user = new \App\User;
714 $user->first_name = $incomingUser['first_name'];
715 $user->last_name = $incomingUser['last_name'];
716 $user->name = sprintf("%s %s", trim($incomingUser['first_name']), trim($incomingUser['last_name']));
717 $user->email = $incomingUser['email'];
718 $user->phone = $incomingUser['phone'];
719 $user->fax = $incomingUser['fax'];
720 $user->password = bcrypt("ChangeMeN0w");
721 // $user->password = "ChangeMeN0w";
722 $user->force_password_change = true;
723 $user->api_token = str_random(128);
724 $user->save();
725 }
726
727 $user->roles()->attach( \App\Role::where('name', 'admin')->first() );
728 $user->group_id = $group->id;
729 $user->save();
730
731 }
732
733 return response()->json(true);
734 }
735
736 /***********************************************************************************************************************************************************
737 * linkg (link dealer to dealer group)
738 ***********************************************************************************************************************************************************/
739
740 public function linkg(Request $request) {
741 $group_id = null !== $request->input('group_id') ? $request->input('group_id') : null;
742 $dealer_id = null !== $request->input('dealer_id')? $request->input('dealer_id') : null;
743 $rtnFlag = false;
744
745 \App\ntas\ToolBox::Trace(
746 sprintf("AjaxController.php::linkg: [(%s) = (%s)], [(%s) = (%s)]",
747 "group_id",
748 $group_id,
749 "dealer_id",
750 $dealer_id
751 )
752 );
753
754 $dealer = \App\Dealer::where('id', '=', $dealer_id)->first();
755
756 if( null !== $dealer ) {
757 $dealer->dgroup_id = (int) $group_id;
758 $dealer->save();
759 $dealer->group()->attach($group_id);
760 $rtnFlag = true;
761 }
762
763 return response()->json($rtnFlag);
764 }
765
766 /***********************************************************************************************************************************************************
767 * unlinkg (unlink dealer from dealer group)
768 ***********************************************************************************************************************************************************/
769
770 public function unlinkg(Request $request) {
771 $group_id = null !== $request->input('group_id') ? $request->input('group_id') : null;
772 $dealer_id = null !== $request->input('dealer_id')? $request->input('dealer_id') : null;
773 $rtnFlag = false;
774
775 $dealer = \App\Dealer::where('id', '=', $dealer_id)->first();
776
777 if( null !== $dealer ) {
778 $dealer->dgroup_id = -1;
779 $dealer->save();
780 $dealer->group()->detach($group_id);
781 $rtnFlag = true;
782 }
783
784 return response()->json($rtnFlag);
785 }
786
787 /***********************************************************************************************************************************************************
788 * linkd (link dealer to dealer)
789 ***********************************************************************************************************************************************************/
790
791 public function linkd(Request $request) {
792 $group_id = null !== $request->input('group_id') ? $request->input('group_id') : null;
793 $dealer_id = null !== $request->input('dealer_id')? $request->input('dealer_id') : null;
794 $group = null;
795 $rtnFlag = false;
796
797 \App\ntas\ToolBox::Trace(
798 sprintf("AjaxController.php::linkd: [(%s) = (%s)], [(%s) = (%s)]",
799 "group_id",
800 $group_id,
801 "dealer_id",
802 $dealer_id
803 )
804 );
805
806 if( isset($group_id) ) {
807 $group = \App\dgroup::where('id', '=', $group_id)->first();
808 }
809
810 if( null !== $group ) {
811 // $group->dealers()->attach($group_id);
812 $group->dealers()->attach($dealer_id);
813 $rtnFlag = true;
814 }
815
816 return response()->json($rtnFlag);
817 }
818
819 /***********************************************************************************************************************************************************
820 * unlinkd (unlink dealer from dealer group)
821 ***********************************************************************************************************************************************************/
822
823 public function unlinkd(Request $request) {
824 $group_id = null !== $request->input('group_id') ? $request->input('group_id') : null;
825 $dealer_id = null !== $request->input('dealer_id')? $request->input('dealer_id') : null;
826
827 $rtnFlag = false;
828
829 $group = \App\dgroup::where('id', '=', $group_id)->first();
830
831 // dd( $request->input() );
832 // dd( $group );
833 if( null !== $group ) {
834 $group->dealers()->detach($dealer_id);
835 $rtnFlag = true;
836 }
837
838 return response()->json($rtnFlag);
839 }
840
841 /***********************************************************************************************************************************************************
842 * linku (link user to dealer)
843 ***********************************************************************************************************************************************************/
844
845 public function linku(Request $request) {
846 $user_id = null !== $request->input('user_id') ? $request->input('user_id') : null;
847 $dealer_id = null !== $request->input('dealer_id')? $request->input('dealer_id') : null;
848 $group = null;
849 $rtnFlag = false;
850
851 \App\ntas\ToolBox::Trace(
852 sprintf("AjaxController.php::linku: [(%s) = (%s)], [(%s) = (%s)]",
853 "user_id",
854 $user_id,
855 "dealer_id",
856 $dealer_id
857 )
858 );
859
860 if( isset($user_id) ) {
861 $user = \App\User::where('id', '=', $user_id)->first();
862 }
863
864 if( null !== $user ) {
865 $user->dealers()->attach($dealer_id);
866 $rtnFlag = true;
867 }
868
869 return response()->json($rtnFlag);
870 }
871
872 /***********************************************************************************************************************************************************
873 * unlinku (unlink user from dealer)
874 ***********************************************************************************************************************************************************/
875
876 public function unlinku(Request $request) {
877 $dealer_id = $request->input('dealer_id');
878 $user_id = $request->input('user_id');
879 $rtnFlag = false;
880
881 $user = \App\User::where('id', '=', $user_id)->first();
882
883 if( null !== $user ) {
884 $user->dealers()->detach($dealer_id);
885 $rtnFlag = true;
886 }
887
888 return response()->json($rtnFlag);
889 }
890
891 /***********************************************************************************************************************************************************
892 * addNewDealer
893 ***********************************************************************************************************************************************************/
894
895 public function addNewDealer(Request $request) {
896 ToolBox::Trace(sprintf('[AC00867] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
897 ToolBox::Trace(sprintf('[AC00868]--- $request->input(): %s', json_encode( $request->input() )));
898
899 $new_dealer = null !== $request->input('dealer') ? $request->input('dealer') : null;
900 $incomingUser = null !== $request->input('user') ? $request->input('user') : null;
901 $dealer = null;
902 $user = null;
903
904 ToolBox::Trace(sprintf('[AC00875]--- $new_dealer: %s', json_encode($new_dealer)));
905 ToolBox::Trace(sprintf('[AC00876]--- $incomingUser: %s', json_encode($incomingUser)));
906 if( null !== $new_dealer ) {
907 $new_dealer_settings = array(
908 'cpin' => isset($new_dealer['cpin']) ? $new_dealer['cpin'] : null,
909 'name' => isset($new_dealer['name']) ? $new_dealer['name'] : null,
910 'street_address_1' => isset($new_dealer['address_1']) ? $new_dealer['address_1'] : null,
911 'street_address_2' => isset($new_dealer['address_2']) ? $new_dealer['address_2'] : null,
912 'city' => isset($new_dealer['city']) ? $new_dealer['city'] : null,
913 'state' => isset($new_dealer['state']) ? $new_dealer['state'] : null,
914 'zip' => isset($new_dealer['zip']) ? $new_dealer['zip'] : null,
915 'phone' => isset($new_dealer['phone']) ? $new_dealer['phone'] : null,
916 'fax' => isset($new_dealer['fax']) ? $new_dealer['fax'] : null,
917 'email' => isset($new_dealer['email']) ? $new_dealer['email'] : '',
918 'website' => isset($new_dealer['website']) ? $new_dealer['website'] : null
919 );
920
921 ToolBox::Trace(sprintf('[AC00892]--- $new_dealer_settings: %s', json_encode($new_dealer_settings)));
922 $dealer = \App\Dealer::where('cpin', '=', $new_dealer['cpin'])->first();
923
924 if( null === $dealer ) {
925 $dealer = new \App\Dealer;
926 }
927
928 ToolBox::Trace(sprintf('[AC00894]--- back from creating new Dealer.'));
929 $dealer->Add( $new_dealer_settings );
930
931 // create dealer settings.
932 $new_dealer_config = config('dealer.config');
933 // $new_dealer_config['cpin'] = $new_dealer['cpin'];
934 $new_dealer_config['primary_overlay'] = isset($new_dealer['primary_overlay']) ? $new_dealer['primary_overlay'] : null;
935 $new_dealer_config['secondary_overlay'] = isset($new_dealer['secondary_overlay']) ? $new_dealer['secondary_overlay'] : null;
936 $new_dealer_config['certified_overlay'] = isset($new_dealer['certified_overlay']) ? $new_dealer['certified_overlay'] : null;
937
938 // $settings = \App\Setting::where('')
939 $settings = new \App\Setting;
940 $settings->Add(
941 array(
942 'dealer_id' => $dealer->id,
943 // 'cpin' => $dealer->cpin,
944 'key' => 'config',
945 'val' => $new_dealer_config
946 )
947 );
948
949 if( null !== $settings ) {
950 ToolBox::Trace(sprintf('[AC00913]--- great success.'));
951 return response()->json(
952 array(
953 'success' => true,
954 'message' => '[AC00913] great success!'
955 )
956 );
957 } else {
958 ToolBox::Trace(sprintf('[AC00920]--- settings variable is null.'));
959 return response()->json(
960 array(
961 'success' => false,
962 'message' => '[AC00920] settings variable is null'
963 )
964 );
965 }
966
967 } else {
968 ToolBox::Trace(sprintf('[AC00930]--- $new_dealer is null or missing.'));
969 return response()->json(
970 array(
971 'success' => false,
972 'message' => '[AC00929] missing incoming dealer settings'
973 )
974 );
975 }
976
977 }
978
979 /***********************************************************************************************************************************************************
980 * vinDecode
981 *
982 *
983 *
984 * $data is expected to be in the following format:
985 *
986 * array(
987 * "vin":"XXXXXXXXXXXXXXXXXX", // The vehicle vin to decode
988 * "service":"chrome", // Chrome, NADA, etc. (chrome is the only service currently supported)
989 * "apikey":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // 64 characters in length
990 * )
991 ***********************************************************************************************************************************************************/
992
993 public function vinDecode(Request $request) {
994 // ToolBox::Trace(sprintf('[AC00989] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
995
996 // $site_config = config(sprintf('vin_decode.%s', ToolBox::whichInstall() ));
997 // ToolBox::Trace(sprintf('[AC01004]--- $site_config: %s', json_encode($site_config) ));
998
999
1000 $data = $request->input();
1001 // return($data['vin']);
1002 // $data['apikey'] = $site_config['vin_decode_api_key'];
1003
1004
1005 // ToolBox::Trace(sprintf('[AC00975]--- $data : %s', json_encode($data)));
1006 // $rtnData = ToolBox::CallAPI( 'POST', $site_config['vin_decode_api_url'], $data );
1007
1008 $url = 'https://test.dealerstart.com/api/vin/v4';
1009 // VIN to decode
1010 // $vin = '1HGCR3F80FA015359';
1011 $fields_string = '';
1012
1013 $fields = array(
1014 'vin' => $data['vin'],
1015 'service' => 'chrome',
1016 'apikey' => '4da34d1a811c6337797ec2750838dcb938dc783063c1289e71ea1fb964351985'
1017 );
1018 //url-ify the data for the POST
1019 foreach($fields as $key=>$value) {
1020 $fields_string .= $key.'='.$value.'&';
1021 }
1022 rtrim($fields_string, '&');
1023
1024 //open connection
1025 $ch = curl_init();
1026
1027 //set the url, number of POST vars, POST data
1028 curl_setopt($ch,CURLOPT_URL, $url);
1029 curl_setopt($ch,CURLOPT_POST, count($fields));
1030 curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
1031 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
1032
1033 //execute post
1034 $result = curl_exec($ch);
1035
1036 //close connection
1037 curl_close($ch);
1038
1039 // return($result);
1040
1041 // convert JSON result to an array
1042 $result_array = json_decode($result);
1043
1044 $vin_explode_results = json_decode($result, true);
1045
1046 // echo(json_encode($rtnData));
1047
1048 // ToolBox::Trace(sprintf('[AC01016]--- $vin_explode_results: %s', json_encode($vin_explode_results)));
1049 if( !empty($vin_explode_results) && $vin_explode_results['success'] ) {
1050 $vin_explode_results['ntas']['stock_image_name'] = sprintf("%s",
1051 ToolBox::saveStockImage(
1052 array(
1053 'image_url' => $vin_explode_results['ntas']['stock_image_url'],
1054 'image_name' => $vin_explode_results['source']['styles'][0]['stockimage']['filename'],
1055 'vin' => $vin_explode_results['ntas']['vin'],
1056 'inventory_id' => rand(),
1057 'dealer_id' => rand(),
1058 'vehicle_id' => rand(),
1059 'year' => $vin_explode_results['ntas']['year'],
1060 'make' => $vin_explode_results['ntas']['make'],
1061 'model' => $vin_explode_results['ntas']['model'],
1062 'trim' => $vin_explode_results['ntas']['trim']
1063 )
1064 )
1065 );
1066
1067 ToolBox::add_task(
1068 array(
1069 'user_id' => (null !== \Auth::user() ? \Auth::user()->id : 0),
1070 'type' => 'cd_vin_explode',
1071 'data' => $vin_explode_results,
1072 'run_at' => date("Y-m-d H:i:s")
1073 )
1074 );
1075
1076 dispatch(
1077 (new \App\Jobs\ProcessChromeDataJob(
1078 $vin_explode_results
1079 ))->delay(
1080 \Carbon\Carbon::now()->addMinutes(5)
1081 )->onQueue('import_chromedata')
1082 );
1083
1084 }
1085
1086 // ToolBox::Trace(sprintf('[AC01008]--- $vin_explode_results: %s', json_encode($vin_explode_results)));
1087 // ToolBox::Trace(sprintf('[AC01024] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
1088 return $vin_explode_results;
1089
1090 }
1091
1092 /***********************************************************************************************************************************************************
1093 * saveStockImage
1094 ***********************************************************************************************************************************************************/
1095
1096 public function saveStockImage($params) {
1097
1098 // if( !isset($params['image_url']) ) { return array('success' => false, 'message' => 'missing field [image_url]'); }
1099 // if( !isset($params['image_name']) ) { return array('success' => false, 'message' => 'missing field [image_name]'); }
1100 // if( !isset($params['vin']) ) { return array('success' => false, 'message' => 'missing field [vin]'); }
1101 // if( !isset($params['inventory_id']) ) { return array('success' => false, 'message' => 'missing field [inventory_id]'); }
1102 // if( !isset($params['dealer_id']) ) { return array('success' => false, 'message' => 'missing field [dealer_id]'); }
1103 // if( !isset($params['vehicle_id']) ) { return array('success' => false, 'message' => 'missing field [vehicle_id]'); }
1104 // if( !isset($params['year']) ) { return array('success' => false, 'message' => 'missing field [year]'); }
1105 // if( !isset($params['make']) ) { return array('success' => false, 'message' => 'missing field [make]'); }
1106 // if( !isset($params['model']) ) { return array('success' => false, 'message' => 'missing field [model]'); }
1107 // if( !isset($params['trim']) ) { return array('success' => false, 'message' => 'missing field [trim]'); }
1108 //
1109 // $baseFileName = strtolower(str_replace(
1110 // ' ',
1111 // '_',
1112 // sprintf('%s-%s-%s-%s-%s.png',
1113 // 'stock',
1114 // trim($params['year']),
1115 // trim($params['make']),
1116 // trim( str_replace('-', '_', $params['model']) ),
1117 // substr( $params['image_name'], 0, strrpos( $params['image_name'], '.' ) )
1118 // )
1119 // ));
1120 //
1121 // ToolBox::Trace(sprintf('[AC01115]--- $baseFileName: %s', $baseFileName));
1122 //
1123 // if( !file_exists( sprintf('%s/%s', $this->vehicleOriginalPath(), $baseFileName) )) {
1124 //
1125 // if( $this->checkImagePaths() ) {
1126 // $newimg = Image::canvas(
1127 // 400,
1128 // 300
1129 // )->insert(
1130 // Image::make( $params['image_url'] ),
1131 // 'center'
1132 // )->save(
1133 // sprintf('%s/%s', $this->vehicleOriginalPath(), $baseFileName)
1134 // );
1135 // } else {
1136 // ToolBox::Trace(sprintf('[AC01078]--- checkImagePaths returned null, not copying image from server.'));
1137 // }
1138 //
1139 // }
1140 //
1141 // if( !file_exists( sprintf('%s/%s', $this->vehicleThumbnailPath(), $baseFileName) ) ) {
1142 // ToolBox::Trace(sprintf('[AC01069]--- (begin) copying to public path'));
1143 // copy(
1144 // sprintf('%s/%s', $this->vehicleOriginalPath(), $baseFileName),
1145 // sprintf('%s/%s', $this->vehicleThumbnailPath(), $baseFileName)
1146 // );
1147 // ToolBox::Trace(sprintf('[AC01074]--- (end) copying to public path'));
1148 // }
1149 //
1150 // ToolBox::Trace(sprintf('[AC01108] (END) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
1151 // return $baseFileName;
1152 }
1153
1154 public function vehicleStatusUpdate(Request $request) {
1155 ToolBox::Trace(sprintf('[AC01095]--- $request->input: %s', json_encode($request->input() )));
1156
1157 if( count($request->input()) > 0 ) {
1158 if( $inv = \App\Inventory::find( $request->input('invid') ) ) {
1159 $inv->vehicle_status = $request->input('statid');
1160 $inv->save();
1161 } else {
1162 return response()->json(false);
1163 }
1164
1165 return response()->json(true);
1166 } else {
1167 return response()->json(false);
1168 }
1169
1170 }
1171
1172 public function vehicleSave(Request $request) {
1173 ToolBox::Trace(sprintf('[AC01113] (BEGIN) %s::%s:%s', __FILE__, __FUNCTION__, __LINE__ ));
1174 ToolBox::Trace(sprintf('[AC01114]--- $request->input(): %s', json_encode($request->input()) ));
1175 // dd($request->input());
1176
1177 $vehicle = null;
1178 if( !$vehicle = \App\Vehicle::where('vin', '=', trim($request->input('vin')) )->first() ) {
1179 $vehicle = new \App\Vehicle();
1180 }
1181
1182 $vehicle->vin = $request->input('vin');
1183 $vehicle->year = $request->input('year');
1184 $vehicle->make = $request->input('make');
1185 $vehicle->model = $request->input('model');
1186 $vehicle->trim = $request->input('trim');
1187 $vehicle->engine = $request->input('engine');
1188 $vehicle->engine_displacement = $request->input('engine_displacement');
1189 $vehicle->engine_cylinders = $request->input('engine_cylinders');
1190 $vehicle->transmission = $request->input('transmission');
1191 $vehicle->transmission_speed = $request->input('transmission_speed');
1192 $vehicle->mpg_city = $request->input('mpg_city');
1193 $vehicle->mpg_highway = $request->input('mpg_highway');
1194 $vehicle->drive_type = $request->input('drive_type');
1195 $vehicle->exterior_color = $request->input('exterior_color');
1196 $vehicle->interior_color = $request->input('interior_color');
1197 $vehicle->fuel_type = $request->input('fuel_type');
1198 $vehicle->weight = $request->input('weight');
1199 $vehicle->description = $request->input('description') ? $request->input('description') : '';
1200 $vehicle->msrp = $request->input('msrp');
1201 $vehicle->record_locked = true;
1202 $vehicle->ntas_id = ToolBox::get_ntas_id(
1203 $request->input('vin'),
1204 $request->input('make'),
1205 $request->input('model'),
1206 $request->input('trim'),
1207 $request->input('exterior_color')
1208 );
1209
1210 $vehicle->save();
1211
1212 $inventory = null;
1213 $dealerID = \Auth::user()->dealers()->first()->id;
1214
1215 $inventory = $vehicle->inventory()->first();
1216
1217 if( null === $inventory ) {
1218 $inventory = new \App\Inventory();
1219 $inventory->vehicle_id = $vehicle->id;
1220 $inventory->dealer_id = $dealerID;
1221 $inventory->record_locked = true;
1222 // $inventory->save();
1223 }
1224
1225 $inventory->adjustments = $request->input('adjustments');
1226 $inventory->holdback = $request->input('holdback');
1227 $inventory->invoice_price = $request->input('invoice');
1228 $inventory->repair_order = $request->input('repair_order');
1229 $inventory->reconditioning = $request->input('reconditioning');
1230 $inventory->cost = $request->input('cost');
1231
1232 $inventory->vehicle_id = $vehicle->id;
1233 $inventory->dealer_id = $dealerID;
1234 $inventory->cpin = \Auth::user()->dealers()->first()->cpin;
1235 $inventory->purchase_price = $request->input('purchase_price');
1236 $inventory->list_price = $request->input('list_price');
1237 $inventory->cost = $request->input('cost');
1238 $inventory->internet_price = $request->input('internet_price');
1239 $inventory->stock_number = $request->input('stock_number');
1240 $inventory->odometer = $request->input('odometer');
1241 $inventory->is_active = true;
1242 $inventory->display_on_web = $request->input('display_on_web');
1243 $inventory->record_locked = $request->input('record_locked');
1244 $inventory->import_locked = $request->input('record_locked');
1245 $inventory->third_party_push_lock = null === $request->input('third_party_push_lock') ? false : true;
1246 $inventory->sticky = $request->input('sticky');
1247 $inventory->is_deleted = $request->input('is_deleted');
1248 $inventory->export_autotrader = $request->input('export_autotrader');
1249 $inventory->export_carsdotcom = $request->input('export_carsdotcom');
1250 $inventory->export_carsforsale = $request->input('export_carsforsale');
1251 $inventory->export_cargurus = $request->input('export_cargurus');
1252 $inventory->export_cdk = $request->input('export_cdk');
1253 $inventory->export_craigslist = $request->input('export_craigslist');
1254 $inventory->export_dealerspecialties = $request->input('export_dealerspecialties');
1255 $inventory->export_dealereprocess = $request->input('export_dealereprocess');
1256 $inventory->export_homenet = $request->input('export_homenet');
1257 $inventory->export_inventoryplus = $request->input('export_inventoryplus');
1258 $inventory->export_recycler = $request->input('export_recycler');
1259 $inventory->video_url = $request->input('video_url');
1260 $inventory->vehicle_status = $request->input('vehicle_status');
1261 $inventory->save();
1262
1263 // Update image table
1264 $ctrSequence = 0;
1265 $flgWatermark = false;
1266 if( null !== $imgData = collect( json_decode(trim($request->input('vehicleImages'))) )->unique() ) {
1267
1268 $imgData->each( function($image) use($inventory, $dealerID, $vehicle, &$ctrSequence) {
1269 $vimage = Vimage::where(
1270 'inventory_id', '=', $inventory->id
1271 )->where(
1272 'dealer_id', '=', $dealerID
1273 )->where(
1274 'vehicle_id', '=', $vehicle->id
1275 )->where(
1276 'name', '=', strtolower(trim($image))
1277 )->first();
1278
1279 if( $vimage === null ) {
1280 $vimage = new Vimage;
1281 }
1282
1283 $vimage->inventory_id = $inventory->id;
1284 $vimage->vehicle_id = $vehicle->id;
1285 $vimage->dealer_id = $dealerID;
1286 $vimage->sequence = $ctrSequence;
1287 $vimage->name = $image;
1288 $vimage->save();
1289
1290 $ctrSequence++;
1291
1292 });
1293
1294 }
1295
1296 // Session::flash('success', 'vechicle information sucessfully updated...');
1297
1298 // return(json_encode($request->input()));
1299 return response()->json(true);
1300 }
1301
1302 /***********************************************************************************************************************************************************
1303 * getDBuilderCustoms
1304 ***********************************************************************************************************************************************************/
1305
1306 public function getDBuilderCustoms(Request $request, $dealer_id) {
1307
1308 $dbuilder = \App\dbuilder::where('dealer_id', '=', $dealer_id)->get();
1309 //$dbuilder = \App\dbuilder::where('dealer_id', '=', $dealer_id)->get()->toJson();
1310 // return \Response::json($dbuilder);
1311 return response()->json(array('dbuilder'=> $dbuilder));
1312
1313
1314
1315
1316 }
1317
1318}