Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use App\Classes\RouteCalc\CalcOptions;
- use App\Mail\LeadMail;
- use App\Mail\OrderMail;
- use App\Models\Entity;
- use App\Models\ExternalFormSettings;
- use App\Classes\Settings;
- use App\Models\Vehicle;
- use App\Models\VehicleType;
- use App\Services\ConvertDateService;
- use App\Services\ExternalFormService;
- use App\Services\RouteCalcService;
- use App\Services\VehicleService;
- use Carbon\Carbon;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use App\Models\City;
- use Illuminate\Support\Facades\Mail;
- use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
- use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
- /**
- * Class ExternalFormController
- *
- * @package App\Http\Controllers
- * @author Sergey Lazarev <sergey.lazarev@attractgroup.com>
- */
- class ExternalFormController extends Controller
- {
- private $path = 'external_form.';
- private $service = null;
- /**
- * ParseEmail constructor.
- *
- * @param ExternalFormService $service
- */
- public function __construct(
- ExternalFormService $service
- ) {
- $this->service = $service;
- \View::share('footerView', 'external_form._partials.footer');
- }
- public function getIndex()
- {
- return view($this->path . 'index');
- }
- public function getProcess($type)
- {
- $data = $this->service->getTypeConfig($type);
- return view($this->path . 'process-vehicle', $data);
- }
- public function postCheckInfo(Request $request)
- {
- if (!$request->filled('step')) {
- throw new AccessDeniedHttpException();
- }
- if($request->get('anti_spm') && !empty($request->get('anti_spm'))){
- throw new AccessDeniedHttpException();
- }
- $requestClass = $request->get('step');
- $split = explode('-', $requestClass);
- if (count($split) == 2) {
- $requestClass = ucfirst($split[0]) . ucfirst($split[1]) . 'Request';
- /**
- * @var $requestObject \App\Http\Requests\Request
- */
- $requestObject = app('App\\Http\\Requests\\External\\' . $requestClass);
- $requestObject->replace($request->all());
- $requestObject->validateResolved();
- return new JsonResponse(['status' => 'OK'], 200);
- } else {
- throw new BadRequestHttpException();
- }
- }
- public function postSave($type, Request $request, ConvertDateService $convertDateService)
- {
- $convertDateService->convertDates($request, ['ship_date']);
- $saveData = $request->except([
- 'pickup_zip',
- 'pickup_city',
- 'pickup_state_id',
- 'delivery_zip',
- 'delivery_city',
- 'delivery_state_id',
- ]);
- $this->service->getFeetInchString($saveData, 'height');
- $this->service->getFeetInchString($saveData, 'width');
- $this->service->getFeetInchString($saveData, 'length');
- if (isset($saveData['weight_lbs']) && $saveData['weight_lbs'] > 0) {
- $saveData['weight'] = $saveData['weight_lbs'];
- $saveData['weight_str'] = $saveData['weight_lbs'] . ' lbs';
- }
- $saveData['bike_type'] = ($saveData['bike_trike'] ?? 0) == 1
- ? 'trike'
- : (
- ($saveData['bike_sidecar'] ?? 0) == 1
- ? 'sidecar'
- : null
- );
- $fieldsToNote = [
- 'length',
- 'width',
- 'height',
- 'weight',
- 'bike_type',
- 'trailer_not_road_worth',
- ];
- $fieldsToNoteNames = [
- 'length' => 'Length',
- 'width' => 'Width',
- 'height' => 'Height',
- 'weight' => 'Weight',
- 'bike_type' => 'Bike type',
- 'trailer_not_road_worth' => 'Trailer not road worth',
- ];
- // $processType = $saveData['process_type'] ?? 'car';
- $config = $this->service->getTypeConfig($type);
- $vehicles = [];
- if ($config['vehicleBlock'] == 'input') {
- for ($i = 1; $i <= ($saveData['vehicles_count'] ?? 1); $i++) {
- $fieldsToNote[] = 'vehicle_' . $i;
- $saveData["vehicle_{$i}_year"] = Carbon::now()->format('Y');
- $saveData["vehicle_{$i}_make"] = $config['make'];
- $saveData["vehicle_{$i}_model"] = $config['model'];
- $saveData["vehicle_{$i}_type"] = $config['vehicle_type'];
- $vehicles[] = [
- 'year' => $saveData["vehicle_{$i}_year"],
- 'make' => $saveData["vehicle_{$i}_make"],
- 'model' => $saveData["vehicle_{$i}_model"],
- 'type' => $saveData["vehicle_{$i}_type"],
- ];
- }
- } else {
- for ($i = 1; $i <= ($saveData['vehicles_count'] ?? 1); $i++) {
- if (0 == $config['vehicle_type']) {
- /** @var VehicleService $vehicleService */
- $vehicleService = app(VehicleService::class);
- $realVehicleType = $vehicleService->detectVehicleType(
- $saveData["vehicle_{$i}_make"],
- $saveData["vehicle_{$i}_model"],
- VehicleType::TYPE_OTHER
- );
- } else {
- $realVehicleType = $config['vehicle_type'];
- }
- $saveData["vehicle_{$i}_type"] = $realVehicleType;
- $vehicles[] = [
- 'year' => $saveData["vehicle_{$i}_year"],
- 'make' => $saveData["vehicle_{$i}_make"],
- 'model' => $saveData["vehicle_{$i}_model"],
- 'type' => $saveData["vehicle_{$i}_type"],
- ];
- }
- }
- $shipperNote = '';
- foreach ($fieldsToNote as $item) {
- if (isset($saveData[$item . '_str'])) {
- $shipperNote .= ($fieldsToNoteNames[$item] ?? $item) . ": " . $saveData[$item . '_str'] . "\n";
- } else if (isset($saveData[$item])) {
- $shipperNote .= ($fieldsToNoteNames[$item] ?? $item) . ": " . $saveData[$item] . "\n";
- }
- }
- $saveData['notes_from_shipper'] = $shipperNote;
- $pickupCity = City::find($saveData['pickup_zip_id']);
- $deliveryCity = City::find($saveData['delivery_zip_id']);
- $saveData['pickup_city'] = $pickupCity->city;
- $saveData['pickup_zip'] = $pickupCity->zip;
- $saveData['pickup_state_id'] = optional($pickupCity->stateInfo)->id ?? '';
- $saveData['pickup_country_id'] = 233;
- $saveData['delivery_city'] = $deliveryCity->city;
- $saveData['delivery_zip'] = $deliveryCity->zip;
- $saveData['delivery_state_id'] = optional($deliveryCity->stateInfo)->id ?? '';
- $saveData['delivery_country_id'] = 233;
- $dataForCalc = [
- 'pickup_zip' => $saveData['pickup_zip'],
- 'delivery_zip' => $saveData['delivery_zip'],
- 'vehicle_types' => array_column($vehicles, 'type'),
- 'ship_via' => Entity::SHIP_VIA_OPEN,
- 'vehicle_run' => $saveData['vehicle_run'] ?? Entity::VEHICLE_RUN_YES,
- 'height' => $saveData['height'] ?? 0,
- 'width' => $saveData['width'] ?? 0,
- 'length' => $saveData['length'] ?? 0,
- 'boat_not_on_trailer' => $saveData['boat_not_on_trailer'] ?? 0,
- 'motocycle_type' => $saveData['bike_type'],
- 'trailer_not_road_worth' => ($saveData['trailer_not_road_worth'] ?? 'yes') == 'yes' ? 1 : 2,
- ];
- /**
- * @var $routeCalcService RouteCalcService
- */
- $routeCalcService = app(RouteCalcService::class);
- $calcOptions = new CalcOptions();
- $calcOptions->returnFormatted = false;
- $calcOptions->returnSum = false;
- $calcResult = $routeCalcService->calcQuote($dataForCalc, $calcOptions);
- $forOutput = [];
- if (!$calcResult->returnMessage) {
- $sumQuote = $calcResult->sumQuoteNoFormat;
- $settings = ExternalFormSettings::firstOrNew([]);
- $forOutput = [
- 'flexible' => ceil($sumQuote * $settings->quote_coefficients['flexible']),
- 'recommended' => ceil($sumQuote * $settings->quote_coefficients['recommended']),
- 'expedited' => ceil($sumQuote * $settings->quote_coefficients['expedited']),
- 'enclosed' => ceil($sumQuote * $settings->quote_coefficients['enclosed']),
- ];
- $saveData['recommended_price'] = $sumQuote;
- }
- /**
- * @var $oEntity Entity
- */
- $oEntity = new Entity();
- $oEntity->fill($saveData);
- $userId = null;
- $queue_name = null;
- $oEntity->save();
- for ($i = 1; $i <= ($saveData['vehicles_count'] ?? 1); $i++) {
- $oVehicle = new Vehicle();
- $oVehicle->year = $saveData['vehicle_' . $i . '_year'];
- $oVehicle->make = $saveData['vehicle_' . $i . '_make'];
- $oVehicle->model = $saveData['vehicle_' . $i . '_model'];
- $oVehicle->type = $saveData['vehicle_' . $i . '_type'];
- $oVehicle->recommended_price = $calcResult->calcResults[$i - 1] ?? 0;
- $oVehicle->name = $oEntity->id . '_V' . ($i);
- $oVehicle->entity_vehicle_num = $i;
- $oVehicle->entity_id = $oEntity->id;
- $oVehicle->save();
- }
- $oEntity = $oEntity->fresh(['vehicles_info']);
- if($_SESSION['utm_sourcee'] == 'google') Mail::to(env('UTMLEAD_TO'))->send(new LeadMail($oEntity->id));
- else Mail::to(env('LEAD_TO'))->send(new LeadMail($oEntity->id));
- $termsConditionsText = Settings::$termCondition;;
- if ($calcResult->returnMessage) {
- return view(
- $this->path . 'thankpage',
- [
- 'email' => $oEntity->shipper_email,
- ]
- );
- } else {
- \View::share('footerView', 'external_form._partials.footer_prices');
- return view(
- $this->path . 'prices',
- [
- 'prices' => $forOutput,
- 'entity' => $oEntity,
- 'dateType' => $request->get('date_type', 'flexible'),
- 'termsConditionsText' => $termsConditionsText,
- ]
- );
- }
- }
- public function getCheckout($name, $type = 'recommended', Request $request)
- {
- $oEntity = Entity::where('name', '=', $name)->first();
- $termsAndConditions = Settings::$termCondition;
- \View::share('termsAndConditions', $termsAndConditions);
- if ($oEntity) {
- $settings = ExternalFormSettings::firstOrNew([]);
- $forOutput = [
- 'flexible' => ceil($oEntity->recommended_price * $settings->quote_coefficients['flexible']),
- 'recommended' => ceil($oEntity->recommended_price * $settings->quote_coefficients['recommended']),
- 'expedited' => ceil($oEntity->recommended_price * $settings->quote_coefficients['expedited']),
- 'enclosed' => ceil($oEntity->recommended_price * $settings->quote_coefficients['enclosed']),
- ];
- if ($oEntity->type == Entity::TYPE_LEAD) {
- $oEntity->type = Entity::TYPE_QUOTE;
- }
- $oEntity->flag = $type;
- $oEntity->quote_tariff = $forOutput[$type];
- $oEntity->save();
- foreach($oEntity->vehicles_info as $vehicle) {
- $vehicle->tariff = ceil($vehicle->recommended_price * $settings->quote_coefficients[$type]);
- $vehicle->save();
- }
- return view($this->path . 'checkout2', ['entity' => $oEntity, 'type' => $type]);
- } else {
- abort(404);
- }
- }
- public function postCheckout($name, $type = 'recommended', Request $request)
- {
- $oEntity = Entity::where('name', '=', $name)->first();
- $saveData = $request->all();
- if ($oEntity) {
- $oEntity->fill($request->all());
- $fieldsToNote = [
- 'pickup_phone1_ext',
- 'delivery_phone1_ext',
- ];
- $fieldsToNoteNames = [
- 'pickup_phone1_ext' => 'Pickup phone ext',
- 'delivery_phone1_ext' => 'Delivery phone ext',
- ];
- $shipperNote = $oEntity->notes_from_shipper ?? '';
- foreach ($fieldsToNote as $item) {
- if (isset($saveData[$item . '_str']) && trim($saveData[$item . '_str'])) {
- $shipperNote .= ($fieldsToNoteNames[$item] ?? $item) . ": " . $saveData[$item . '_str'] . "\n";
- } else if (isset($saveData[$item]) && trim($saveData[$item])) {
- $shipperNote .= ($fieldsToNoteNames[$item] ?? $item) . ": " . $saveData[$item] . "\n";
- }
- }
- $shipperNote = 'Selected Package: ' . $type . "\n" . $shipperNote;
- $oEntity->notes_from_shipper = $shipperNote;
- if ($oEntity->type != Entity::TYPE_ORDER) {
- $oEntity->type = Entity::TYPE_ORDER;
- }
- $oEntity->save();
- if($oEntity->type == Entity::TYPE_ORDER) {
- if($_SESSION['utm_sourcee'] == 'google') Mail::to(env('UTMLEAD_TO'))->send(new OrderMail($oEntity->id));
- else Mail::to(env('LEAD_TO'))->send(new OrderMail($oEntity->id));
- return view(
- $this->path . 'thankpage',
- [
- 'email' => $oEntity->shipper_email,
- 'entity' => $oEntity,
- ]
- );
- }
- return \Redirect::route(
- 'external_form_get_checkout',
- [
- 'name' => $name,
- 'type' => $type,
- ]
- );
- } else {
- abort(404);
- }
- }
- // public function postCheckout2($name, Request $request)
- // {
- // $oEntity = Entity::where('name', '=', $name)->first();
- // dd($request);
- //
- // if ($oEntity) {
- // $oEntity->fill($request->all());
- // $oEntity->save();
- //
- // return view(
- // $this->path . 'thankpage',
- // [
- // 'email' => $oEntity->shipper_email,
- // 'entity' => $oEntity,
- // ]
- // );
- // } else {
- // abort(404);
- // }
- // }
- public function getAutocompleteCity(Request $request)
- {
- $term = $request->input('name');
- $limit = 10;
- if (strlen($term) == City::ZIP_LENGHT && preg_match('/\d+/', $term)) {
- $aCities = City::where("zip", $term)->limit($limit)->get();
- } else {
- $params = [
- 'multi_match' => [
- 'query' => $term,
- "type" => "cross_fields",
- "operator" => "and",
- "fields" => ["city", "state", 'zip'],
- ],
- ];
- if(!isset($aCities)) {
- $aCities = City::whereRaw("city LIKE '%" . $term . "%'")
- ->orWhereRaw("zip LIKE '%" . $term . "%'")
- ->limit($limit)->get();
- }
- }
- return response()->json($aCities);
- }
- public function getThankPage($name = '')
- {
- $oEntity = null;
- if ($name) {
- $oEntity = Entity::where('name', '=', $name)->first();
- }
- if ($oEntity) {
- $oEntity = $oEntity->load(
- [
- 'pickupState',
- 'deliveryState',
- ]
- );
- return view(
- $this->path . 'thankpage',
- [
- 'entity' => $oEntity,
- ]
- );
- } else {
- return view($this->path . 'thankpage');
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement