Viewing file: ShippingController.php (6.44 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
* @package ShippingController
* @author TechVillage <support@techvill.org>
* @contributor Al Mamun <[almamun.techvill@gmail.com]>
* @created 15-12-2021
*/
namespace Modules\Shipping\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Preference;
use Modules\Shipping\Entities\{
ShippingZone,
ShippingZoneGeolocale,
ShippingZoneShippingMethod,
ShippingClass,
ShippingZoneShippingClass
};
use DB;
class ShippingController extends Controller
{
/**
* Shipping List
*
* @return \illuminate\contracts\View
*/
public function index()
{
$data['shippingZones'] = ShippingZone::with(['shippingZoneGeolocales', 'shippingZoneShippingMethods', 'availableClasses'])->get();
$classes = ShippingClass::select('*')->get();
$data['shippingClasses'] = $classes->where('slug', '!=', 'no-class');
$data['zoneClasses'] = $classes->where('slug', '!=', '');
$data['setting'] = Preference::getAll()->where('category', 'shipping_setting')->pluck('value', 'field')->toArray();
return view('shipping::index', $data);
}
/**
* Store Shipping Zone
*
* @param Request $request
* @return \Illuminate\Routing\Redirector
*/
public function store(Request $request)
{
$shippingZone = [];
$shippingZoneMethod = [];
$shippingZoneGeolocale = [];
$shippingZoneClass = [];
foreach (json_decode($request->data) as $key => $value) {
$shippingZone[] = ['id' => $value->id, 'name' => $value->name];
$shippingZoneMethod[] = [
'shipping_zone_id' => $value->id,
'shipping_method_id' => $value->flat_rate_id,
'method_title' => $value->flat_rate_name,
'tax_status' => $value->flat_rate_tax_status,
'cost' => $value->flat_rate_cost,
'cost_type' => $value->flat_rate_cost_type,
'calculation_type' => $value->flat_rate_calculation_type ?? null,
'requirements' => null,
'status' => $value->flat_rate_status,
];
$shippingZoneMethod[] = [
'shipping_zone_id' => $value->id,
'shipping_method_id' => $value->local_pickup_id,
'method_title' => $value->local_pickup_name,
'tax_status' => $value->local_pickup_tax_status,
'cost' => $value->local_pickup_cost,
'cost_type' => $value->local_pickup_cost_type,
'calculation_type' => null,
'requirements' => null,
'status' => $value->local_pickup_status
];
$shippingZoneMethod[] = [
'shipping_zone_id' => $value->id,
'shipping_method_id' => $value->free_shipping_id,
'method_title' => $value->free_shipping_name,
'tax_status' => null,
'cost' => $value->free_shipping_cost ?? null,
'cost_type' => null,
'calculation_type' => $value->free_calculation_type ?? null,
'requirements' => $value->free_shipping_requirement,
'status' => $value->free_shipping_status,
];
foreach ($value->location as $key => $location) {
$shippingZoneGeolocale[] = [
'shipping_zone_id' => $value->id,
'country' => $location->country,
'state' => $location->state,
'city' => $location->city,
'zip' => $location->zip
];
}
foreach ($value->classes as $key => $class) {
$shippingZoneClass[] = [
'shipping_zone_id' => $value->id,
'shipping_class_slug' => $class->slug,
'cost' => $class->cost,
'cost_type' => $class->cost_type,
];
}
}
$response = ['status' => 'success', 'message' => __('The :x has been successfully saved.', ['x' => __('Shipping Zone')])];
try {
DB::beginTransaction();
(new ShippingZone)->remove();
(new ShippingZone)->store($shippingZone);
(new ShippingZoneGeolocale)->store($shippingZoneGeolocale);
(new ShippingZoneShippingMethod)->store($shippingZoneMethod);
(new ShippingZoneShippingClass)->store($shippingZoneClass);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
$response = ['status' => 'fail', 'message' => $e];
}
return $response;
}
/**
* Store Shipping Class
*
* @param Request $request
* @return array $response
*/
public function storeClass(Request $request)
{
$response = ['status' => 'success', 'message' => __('The :x has been successfully saved.', ['x' => __('Shipping Class')])];
try {
(new ShippingClass)->store($request->data);
} catch (\Exception $e) {
$response = ['status' => 'fail', 'message' => $e->getMessage()];
}
return $response;
}
/**
* Store Shipping Setting
*
* @param Request $request
* @return \Illuminate\Routing\Redirector
*/
public function storeSetting(Request $request)
{
$response = $this->messageArray(__('Invalid Request'), 'fail');
$category = 'shipping_setting';
$request['shipping_calculator_cart_page'] = isset($request->shipping_calculator_cart_page) ? 1 : 0;
$request['hide_shipping_cost'] = isset($request->hide_shipping_cost) ? 1 : 0;
$i = 0;
foreach ($request->only(['shipping_calculator_cart_page', 'hide_shipping_cost', 'shipping_destination']) as $key => $value) {
$data[$i]['category'] = $category;
$data[$i]['field'] = $key;
$data[$i]['value'] = $value;
$i++;
}
foreach ($data as $key => $value) {
if ((new Preference())->storeOrUpdate($value)) {
$response = $this->messageArray(__('The :x has been successfully saved.', ['x' => __('Shipping setting')]), 'success');
}
}
return $response;
}
}
|