<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Api;
use App\ApiUser;
use App\ShippingCity;
use App\Template;
use Illuminate\Support\Facades\Http;
use DB;
use App\OrderStatus;
use Auth;
use App\AirwayBill;
use File;
use App\Order;
use App\OrderCustomerDetail;
use App\OrderItem;
use App\OrderComment;
use App\OrderToken;
use Validator;
use Rap2hpoutre\FastExcel\FastExcel;

class BookingController extends Controller
{

	/**
	 * Display a listing of the resource.
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function index(Request $request)
	{  
		$orderItems = array();
		$order = array();
		$apiId = NULL;
		$api = NULL;
		$emailAddress = NULL;
		// $cust_phone_number = "";

		if ($request->has('order')) {
			try {
				$client = new \GuzzleHttp\Client();
	
				$response = $client->request('GET', 'https://connector.ecompk.com/api/fetch_custom_order?order_name='.$request->order, []);
	
				$result = $response->getBody()->getContents();
			}catch(\Exception $e) {
				$result = $e->getMessage();
			}

			$decodedResult = json_decode($result, true);
			
			if(empty($decodedResult)){
				return back()->with('error','Invalid or empty order number. Please insert an appropriate order number');
			}

			$checkOrder = DB::table('orders')->where('order_id', $decodedResult['order']['order_id'])->first();
			
			if(is_null($checkOrder)){
				// if($decodedResult['order']['tags'] != 'In Process' || $decodedResult['order']['tags'] != 'Partially Shipped' || $decodedResult['order']['tags'] != 'Shipped'){
				//     return back()->with('error','Order status must be in process or partially shipped');
				// }

				$createOrder = DB::table('orders')->insertGetId([
					'order_id' => $decodedResult['order']['order_id'], 'order_number' => $decodedResult['order']['order_number'], 'order_name' => $decodedResult['order']['order_name'], 'tags' => $decodedResult['order']['tags'], 'status' => $decodedResult['order']['tags'], 'shipping_method' => $decodedResult['order']['shipping_method'], 'gateway' => $decodedResult['order']['gateway'], 'payment_method' => $decodedResult['order']['gateway'], 'subtotal' => $decodedResult['order']['subtotal_price'], 'shipping_amount' => $decodedResult['order']['shipping_rates'],  'tax_amount' => $decodedResult['order']['total_tax'], 'taxes_included' => $decodedResult['order']['taxes_included'], 'discount_amount' => $decodedResult['order']['total_discounts'], 'currency' => $decodedResult['order']['currency'], 'financial_status' => $decodedResult['order']['financial_status'], 'fulfillment_status' => $decodedResult['order']['fulfillment_status'], 'total_line_items_price' => $decodedResult['order']['total_line_items_price'], 'total_price' => $decodedResult['order']['total_price'], 'total_weight' => $decodedResult['order']['total_weight'], 'connector_status' => $decodedResult['order']['connector_status']
				]);

				$createCustomerDetails = DB::table('order_customer_details')->insert([
					'parent_id' => $createOrder, 'name' => $decodedResult['shippingDetails']['first_name'].' '.$decodedResult['shippingDetails']['last_name'], 'email' => $decodedResult['customerDetails']['email'], 'phone' => $decodedResult['shippingDetails']['phone'], 'address' => $decodedResult['shippingDetails']['address1'].''.$decodedResult['shippingDetails']['address2'], 'city' => $decodedResult['shippingDetails']['city'], 'country_code' => $decodedResult['shippingDetails']['country_code'], 'postcode' => $decodedResult['shippingDetails']['zip'], 'zip' => $decodedResult['shippingDetails']['zip'], 'country' => $decodedResult['shippingDetails']['country_code'], 'type' => 'shipping', 'created_at' => now(), 'updated_at' => now()
				]);

				if(!is_null($decodedResult['billingDetails'])){
					$billing_customer_phone = str_replace('+92', '0', $decodedResult['billingDetails']['phone']);
					$createCustomerDetailsBilling = DB::table('order_customer_details')->insert([
						'parent_id' => $createOrder, 'name' => $decodedResult['billingDetails']['first_name'].' '.$decodedResult['billingDetails']['last_name'], 'email' => $decodedResult['customerDetails']['email'], 'phone' => $billing_customer_phone, 'address' => $decodedResult['billingDetails']['address1'].''.$decodedResult['billingDetails']['address2'] , 'city' => $decodedResult['billingDetails']['city'], 'country_code' => $decodedResult['billingDetails']['country_code'], 'postcode' => $decodedResult['billingDetails']['zip'], 'zip' => $decodedResult['billingDetails']['zip'], 'country' => $decodedResult['billingDetails']['country_code'], 'type' => 'billing', 'created_at' => now(), 'updated_at' => now()
					]);
				} else {
					$shipping_customer_phone = str_replace('+92', '0', $decodedResult['shippingDetails']['phone']);
					$createCustomerDetailsBilling = DB::table('order_customer_details')->insert([
						'parent_id' => $createOrder, 'name' => $decodedResult['shippingDetails']['first_name'].' '.$decodedResult['shippingDetails']['last_name'], 'email' => $decodedResult['customerDetails']['email'], 'phone' => $shipping_customer_phone, 'address' => $decodedResult['shippingDetails']['address1'].''.$decodedResult['shippingDetails']['address2'] , 'city' => $decodedResult['shippingDetails']['city'], 'country_code' => $decodedResult['shippingDetails']['country_code'], 'postcode' => $decodedResult['shippingDetails']['zip'], 'zip' => $decodedResult['shippingDetails']['zip'], 'country' => $decodedResult['shippingDetails']['country_code'], 'type' => 'billing', 'created_at' => now(), 'updated_at' => now()
					]);
				}

				$firstComment = 'Order dropped in custom panel at '.now().' <br>(Automated message from cp.makeupcityshop.com)';

				$createCommnets = OrderComment::create([
					'parent_id' => $createOrder, 'comment' => $firstComment, 'status' => $decodedResult['order']['tags']
				]);

				foreach($decodedResult['itemData'] as $itemData){
					$orderedQty = $itemData['quantity'];

					$createItems = DB::table('order_items')->insert([
						'parent_id' => $createOrder, 'item_id' => $itemData['product_id'], 'product_id' => $itemData['product_id'], 'order_product_id' => $itemData['order_product_id'], 'sku' => $itemData['sku'], 'title' => $itemData['title'], 'item_name' => $itemData['name'], 'upc' => $itemData['upc'], 'vendor' => $itemData['vendor'], 'color' => $itemData['color'], 'size' => $itemData['size'], 'brand_id' => 1, 'qty_ordered' => $orderedQty, 'base_price' => $itemData['price'], 'compare_at_price' => $itemData['compare_at_price'], 'base_discount_amount' => 0, 'base_tax_amount' => 0, 'base_row_total' => $itemData['price']*$orderedQty, 'remarks' => 'N/A', 'qty_confirmed' => 0, 'product_image_url' => $itemData['product_image_url'], 'created_at' => now()
					]);
				}

				// $firstComment = 'Order dropped in custom panel at '.now().' <br>(Automated message from cp.makeupcityshop.com)';

				// try {
				//     $client = new \GuzzleHttp\Client();
		
				//     $response = $client->request('GET', 'https://connector.ecompk.com/api/addordercomment?order_id='.$decodedResult['orderData']['entity_id'].'&comment='.$firstComment, []);
		
				//     $result = $response->getBody()->getContents();
				// }catch(\Exception $e) {
				//     $result = $e->getMessage();
				// }

				// $createCommnets = OrderComment::create([
				//         'parent_id' => $createOrder->id, 'comment' => $firstComment, 'status' => $decodedResult['orderData']['status']
				// ]);
			}
			
			$order = Order::where('orders.order_name', $request->order)
			->join('order_customer_details', 'order_customer_details.parent_id', 'orders.id')
			->select(
				'orders.id as id', 'orders.order_id', 'orders.status as status', 'orders.shipping_amount', 'orders.subtotal', 'orders.subtotal', 'orders.tax_amount','orders.total_line_items_price', 'orders.discount_amount', 'orders.payment_method',
				'order_customer_details.city as customer_city', 'order_customer_details.name as customer_name', 'order_customer_details.email as customer_email', 'order_customer_details.address as customer_address', 'order_customer_details.phone as customer_phone',
				'order_customer_details.country_code as country_code', 'order_customer_details.country as country', 'order_customer_details.postcode as postcode'
			)
			->first();
			
			if($order->status == 'Shipped'){
				return back()->with('error','Order marked as COD Shipped.');
			}

			if($order->status == 'codshipped'){
				return back()->with('error','Order marked as COD Shipped.');
			}

			if(!in_array($order->status, array('In Process', 'Partially Shipped', 'Shipped'))){
				return back()->with('error','Set order in process to book');
			}

			$apiId = null;
			$api = null;

			if($order->shipping_courier != 'DHL - Express worldwide'){
				if(!getBookingApi(Auth::user()->id, $order->customer_city)){
					return back()->with('error','City '.$order->customer_city.' not assigned to any API');
				}

				$apiId = getBookingApi(Auth::user()->id, $order->customer_city);

				$api = Api::where('id', $apiId)->first();
			}

			
			$orderItems = DB::table('order_items')->where('parent_id', $order->id)
			->select(
				'sku as item_sku', 'weight as item_weight', 'qty_confirmed', 'qty_ordered as item_quantity_ordered', 'item_id', 'brand_id', 'base_row_total as item_row_total', 'base_price as item_price', 'base_tax_amount as item_tax_amount', 'base_discount_amount as item_discount_amount', 'upc', 'hscode', 'international_row_total', 'item_name', 'order_product_id'
			)
			->get();
			
		}
		
		return view('modules.booking.index', compact('order', 'orderItems', 'apiId', 'api', 'emailAddress'));
	}

	/**
	 * Show the form for creating a new resource.
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function create()
	{

	}

	/**
	 * Store a newly created resource in storage.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @return \Illuminate\Http\Response
	 */
	public function store(Request $request)
	{   
	  
		$request->request->add((['order_number' => strtoupper($request->order_number)]));
		
		$getToken = OrderToken::where([['order_number', $request->order_number], ['token', $request->order_token]])->first();

// die();


		if(!is_null($getToken)){
			return redirect('booking')->with('error','Order already processed please check shipments for more details');
		}

		// $insertToken = OrderToken::create([
		//     'order_number' => $request->order_number,
		//     'token' => $request->order_token
		// ]);

		if($request->order_shipping_method == 'DHL'){
			echo 'DHL';
			die;
		}
		
		$api = Api::where('id', $request->apiId)->first();
		$api_user = ApiUser::where([['user_id', getLoggedInUserId()], ['api_id', $api->id]])->first();

//echo $api;
 //echo $api_user;die();
	  
		// Check city and get Name/Code or die if city not found
		if(!getCityNameOrCode($request->destination_city, $api->id)){
			return back()->with('error','City not found');
		}

		$cityNameOrCode = getCityNameOrCode($request->destination_city, $api->id);
		
		$request->request->add((['destination_city' => $cityNameOrCode]));
		
		// Checking if Key Fields has headers variables and replacing them according to user logged in
		$headers = [];

		if($api->headers != '{}'){
			$decodedApiHeaders = json_decode($api->headers, true);
			$decodedUserHeaderValues = json_decode($api_user->key_values, true);

			foreach($decodedApiHeaders as $key => $value){
				if (array_key_exists($value, $decodedUserHeaderValues)){
					$decodedApiHeaders[$key] = $decodedUserHeaderValues[$decodedApiHeaders[$key]];
				}
			}

			$headers = $decodedApiHeaders;
		}

		// Replacing post array variables with respect to customer order details
		$decodedApiBody = json_decode($api->body, true);
  
//print_r($decodedApiBody);die;      
		$postArray = [];

		foreach($decodedApiBody as $key => $value){
			$postArray[$key] = $value;

			if($request->has(str_replace(array('{', '}'), '', $value))){
				$postArray[$key] = $request->input(str_replace(array('{', '}'), '', $value));
			}
		}

		// Checking if Key Fields has body variables and replacing them according to user logged in
		foreach($postArray as $key => $value){
			//echo $key.':'.$value.'<br>';
			$decodedApiBodyValues = json_decode($api_user->key_values, true);
		
			if (array_key_exists($value, $decodedApiBodyValues)){
				$postArray[$key] = $decodedApiBodyValues[$value];
			}
		}
 
		// Computing weight, pieces and product details
		$requestBodies = computePackageDetails($request, $postArray);
	   
	//print_r($requestBodies);die;
		$cn_number = [];
		$awbs = [];
		
		$citiesForLabel = array(
			'1' => array('originCityName', 'destinationCityName'),
			'3' => array('origin_city', 'destination_city'),
			'6' => array('OriginCityId', 'DestCityId'),
			'4' => array('consignee_city_id'),
			'7' => array('delivery_city'),
		'9' => array('cityName'),
		 '11' => array('CONSIGNEE_CITY'),
		);

		$serviceIndex = array_search('{api_service}', $decodedApiBody);
		
		if($serviceIndex){
			$serviceForLabel = array(
				$api->id => json_decode($api->extra_fields, true)['api_service'],
			);
		}
		
		$cityNames = [];

// print_r($requestBodies);die;
		// Checking if API is SOAP or RESTFull
		foreach($requestBodies as $key => $_body){
			if($api->type == 'REST'){
				$cn_number[$key] = get_response($api->name, rest_request($api->method, $api->url, $headers, $_body));
			}elseif($api->type == 'SOAP'){
				$cn_number[$key] = get_response($api->name, soap_request($api->method, $api->url, $headers, $_body));
			}
			
			$airway = Template::where([['api_id', $api->id], ['type', 'airway label']])->first();

			$keys = [];
			$values = [];

			$_body['date_now'] = date('Y-m-d', strtotime(now()));
			$_body['time_now'] = date('H:i:s', strtotime(now()));
			$_body['package'] = ($key+1) .' / '. count($requestBodies);
			$_body['key'] = $key;
			// $cn_number[$key] = rand();
			$_body['cn_number'] = $cn_number[$key];
			
//testing
//print_r($_body);
//die();
			if($api->id == 9){
				$item_weight = array_sum($request->item_weight);
				$pieces = array_sum($request->quantity_confirmed);

				$user_values = json_decode($api_user->key_values, true);
				$shipper_address = $user_values['{shipper_address}'];
				$shipper_name = $user_values['{shipper_name}'];
				$origin_city = $user_values['{origin_city}'];

				$_body['weight'] = $item_weight;
				$_body['pieces'] = $pieces;
				$_body['shipper_address'] = $shipper_address;
				$_body['shipper_name'] = $shipper_name;
				$_body['origin_city'] = $origin_city;
				
				$phone = substr($_body['customerPhone'], 0, 2);
				if($phone == '92'){
					$getPhone = DB::table('orders')->where('order_number', $_body['orderRefNumber'])
					->join('order_customer_details', 'order_customer_details.parent_id', 'orders.id')
					->select('order_customer_details.*')
					->first();

					$number = '0' . substr($getPhone->phone, 2);
					$_body['customerPhone'] = $number;
				}
			}

			
			foreach($citiesForLabel[$api->id] as $city_key){
				$shippingCityName = ShippingCity::where([['api_id', $api->id], ['code', $_body[$city_key]]])->first();
			   
				$_body[$city_key] = is_null($shippingCityName)? '' : $shippingCityName->city;
			}
			
			if($serviceIndex){
				$_body[$serviceIndex] = $serviceForLabel[$api->id][$_body[$serviceIndex]];
			}
		
//print_r($_body);
//die();
			foreach($_body as $key => $value){
				$keys[] = '{'.$key.'}';
				if($key == "invoicePayment"){
		// $values[] = $request->order_shipping_amount + $request->order_total_amount - $request->order_discount_amount; 
			$values[] = $value;
		  }
				else{
					$values[] = $value;
				   
				   
				}
			}
// testing
//print_r($values);
//die();

			$awb = str_replace($keys, $values, $airway->html);

			$storeAWB = AirwayBill::create([
				'cnnumber' => $_body['cn_number'],
				'order_number' => $request->order_number,
				'content' => $awb
			]);
			
			$awbs[] = $awb;
		}
		
		updateCurrentDetails($request, $cn_number, $api->name);
		
		$links = [];

		$counter = 0;
	
		foreach($awbs as $_awb){
			$currentTime = rand(5000, 10000);

			$counter++; 

			$file = fopen(public_path('upload/awb').'/'.$currentTime.".html","w");

			$fileWrite = fwrite($file, $_awb);

			$filePath = asset('upload/awb').'/'.$currentTime.".html";
	
			$links[] = '<a href="'.$filePath.'" target="_blank">Download Airway Bill '.$counter.'</a>';
		
			fclose($file);
		}

		return redirect('booking')->with('error', implode(', ', $links));
	}

	/**
	 * Display the specified resource.
	 *
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function show($id)
	{

	}

	/**
	 * Show the form for editing the specified resource.
	 *
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function edit($id)
	{
		//
	}

	/**
	 * Update the specified resource in storage.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function update(Request $request, $id)
	{
		//
	}

	/**
	 * Remove the specified resource from storage.
	 *
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function destroy($id)
	{
		//
	}

	public function book_international(Request $request)
	{
		$request->request->add((['order_number' => strtoupper($request->order_number)]));
		
		$getToken = OrderToken::where([['order_number', $request->order_number], ['token', $request->order_token]])->first();

		if(!is_null($getToken)){
			return redirect('booking')->with('error','Order already processed please check shipments for more details');
		}

		$insertToken = OrderToken::create([
			'order_number' => $request->order_number,
			'token' => $request->order_token
		]);

		$request->order_shipping_method == 'DHL';

		updateIntlCurrentDetails($request);
 
		return redirect('booking')->with('error', 'Order'. $request->order_number.' booked');
	}


	public function book_jaranwala(Request $request)
	{   
		$request->request->add((['order_number' => strtoupper($request->order_number)]));
		
		$getToken = OrderToken::where([['order_number', $request->order_number], ['token', $request->order_token]])->first();

		if(!is_null($getToken)){
			return redirect('booking')->with('error','Order already processed please check shipments for more details');
		}

		$insertToken = OrderToken::create([
			'order_number' => $request->order_number,
			'token' => $request->order_token
		]);

		if($request->order_shipping_method == 'DHL'){
			echo 'DHL';
			die;
		}
		
		$api = Api::where('id', $request->apiId)->first();
		
		$api_user = ApiUser::where([['user_id', getLoggedInUserId()], ['api_id', $api->id]])->first();

		// Check city and get Name/Code or die if city not found
		if(!getCityNameOrCode($request->destination_city, $api->id)){
			return back()->with('error','City not found');
		}

		$cityNameOrCode = getCityNameOrCode($request->destination_city, $api->id);
		
		$request->request->add((['destination_city' => $cityNameOrCode]));

		// $cityNameOrCode = 'Jaranwala';
			
		// Checking if Key Fields has headers variables and replacing them according to user logged in
		$headers = [];

		if($api->headers != '{}'){
			$decodedApiHeaders = json_decode($api->headers, true);
			$decodedUserHeaderValues = json_decode($api_user->key_values, true);

			foreach($decodedApiHeaders as $key => $value){
				if (array_key_exists($value, $decodedUserHeaderValues)){
					$decodedApiHeaders[$key] = $decodedUserHeaderValues[$decodedApiHeaders[$key]];
				}
			}

			$headers = $decodedApiHeaders;
		}

		// Replacing post array variables with respect to customer order details
		$decodedApiBody = json_decode($api->body, true);
	   
		$postArray = [];

		foreach($decodedApiBody as $key => $value){
			$postArray[$key] = $value;

			if($request->has(str_replace(array('{', '}'), '', $value))){
				$postArray[$key] = $request->input(str_replace(array('{', '}'), '', $value));
			}
		}
		
		// Checking if Key Fields has body variables and replacing them according to user logged in
		foreach($postArray as $key => $value){
			$decodedApiBodyValues = json_decode($api_user->key_values, true);
		
			if (array_key_exists($value, $decodedApiBodyValues)){
				$postArray[$key] = $decodedApiBodyValues[$value];
			}
		}
		
		// Computing weight, pieces and product details
		$requestBodies = computePackageDetails($request, $postArray);
		
		$cn_number = [];
		$awbs = [];
		
		$citiesForLabel = array(
			'1' => array('originCityName', 'destinationCityName'),
			'6' => array('OriginCityId', 'DestCityId'),
			'4' => array('consignee_city_id'),
			'7' => array('delivery_city'),
			'8' => array('delivery_city'),
		);

		$serviceIndex = array_search('{api_service}', $decodedApiBody);
		
		if($serviceIndex){
			$serviceForLabel = array(
				$api->id => json_decode($api->extra_fields, true)['api_service'],
			);
		}
		
		$cityNames = [];
		
		// Checking if API is SOAP or RESTFull
		foreach($requestBodies as $key => $_body){
			$cn_number[$key] = 'JRW'.rand();
			
			$airway = Template::where([['api_id', $api->id], ['type', 'airway label']])->first();

			$keys = [];
			$values = [];

			$_body['date_now'] = date('Y-m-d', strtotime(now()));
			$_body['time_now'] = date('H:i:s', strtotime(now()));
			$_body['package'] = ($key+1) .' / '. count($requestBodies);
			$_body['key'] = $key;
			// $cn_number[$key] = rand();
			$_body['cn_number'] = $cn_number[$key];
			
			foreach($citiesForLabel[$api->id] as $city_key){
				$shippingCityName = ShippingCity::where([['api_id', $api->id], ['code', $_body[$city_key]]])->first();
			   
				$_body[$city_key] = is_null($shippingCityName)? '' : $shippingCityName->city;
			}
			
			if($serviceIndex){
				$_body[$serviceIndex] = $serviceForLabel[$api->id][$_body[$serviceIndex]];
			}
		
			foreach($_body as $key => $value){
				$keys[] = '{'.$key.'}';
				$values[] = $value;
			}
			
			$awb = str_replace($keys, $values, $airway->html);

			$storeAWB = AirwayBill::create([
				'cnnumber' => $_body['cn_number'],
				'order_number' => $request->order_number,
				'content' => $awb
			]);
			
			$awbs[] = $awb;
		}
		
		updateCurrentDetails($request, $cn_number, $api->name);
		
		$links = [];

		$counter = 0;
	
		foreach($awbs as $_awb){
			$currentTime = rand(5000, 10000);

			$counter++; 

			$file = fopen(public_path('upload/awb').'/'.$currentTime.".html","w");

			$fileWrite = fwrite($file, $_awb);

			$filePath = asset('upload/awb').'/'.$currentTime.".html";
	
			$links[] = '<a href="'.$filePath.'" target="_blank">Download Airway Bill '.$counter.'</a>';
		
			fclose($file);
		}

		return redirect('booking')->with('error', implode(', ', $links));
	}


	public function international_page($order_number, $page)
	{
		$awb_link = DB::table('airway_bills_intl')->where('awb_link', $page)->first();

		$pages = $awb_link->airway_bill;

		$order_num = $order_number;

		header("Content-type:application/pdf");
		header("Content-Disposition:inline;filename=label_".$order_num.".pdf");
		echo base64_decode($pages); die;

		return view('modules.extra.index', compact('order_num', 'pages'));
	}


	public function international_page_invoice($order_number, $page)
	{
		$invoice_link = DB::table('airway_bills_intl')->where('invoice_link', $page)->first();

		$pages = $invoice_link->invoice;

		$order_num = $order_number;

		header("Content-type:application/pdf");
		header("Content-Disposition:inline;filename=label_".$order_num.".pdf");
		echo base64_decode($pages); die;

		return view('modules.extra.index', compact('order_num', 'pages'));
	}


	public function addupc()
	{
		return view('modules.sku_upc.index');
	}

	public function import_upc(Request $request)
	{
		if (!$request->hasFile('file')) {
			return redirect()->back()->withError('File Not Found');
		}

		$collection = (new FastExcel)->configureCsv(';', '#', '\n', 'gbk')->import($request->file);

		foreach($collection as $data){
			if(!$data['S.No.']) {
				return redirect()->back()->withError('File does not have the required column names');
			} 
			break;
		}

		$countRowsAdded = 0;
		$rowAlreadyExist = [];
		$sheet = rand();

		foreach($collection as $value) {
			
			
			$get_row = DB::table('sku_upc_example')->where([['upc', $value['Intl/Product Barcode']], ['sku', $value['Tehno Barcode']]])->first();

			if(is_null($get_row)){
				$update_item = DB::table('sku_upc_example')->insert([
					'upc' => $value['Intl/Product Barcode'],
					'sku' => $value['Tehno Barcode'],
				]);   
				$countRowsAdded++;   
			}else{
				$rowAlreadyExist[] = $value['S.No.'];
			}
		}
		return redirect()->back()->withError('File Uploaded. <br>Row(s) Added: <b>'.$countRowsAdded.'</b> <br>Order(s) not synced: <b>'.implode(', ', $rowAlreadyExist). '</b>');
	}

	public function reimport_order_index()
	{
		return view('modules.booking.reimport');
	}

	public function reimport_order(Request $request)
	{
		$orderCheck = DB::table('orders')->where('order_name', $request->order)->first();

		if(is_null($orderCheck)){
			return redirect()->back()->withError('Invalid Order '. $request->order);
		}

		if($orderCheck->status == 'In Process'){
			$remove_order = DB::table('orders')->where('order_name', $request->order)->delete();

			// $this->index($request->order);

			return redirect()->back()->withError('Order '.$request->order.' has been Re-imported.');
		} else {
			return redirect()->back()->withError('Order '.$request->order.' must be inprocess to be removed.');
		}
	   
	}

	public function set_in_process()
	{ 
		return view('modules.set_in_process.index');
	}

	public function update_in_process(Request $request)
	{
		$request->validate([
			'order' => 'required'
		]);

		$order = Order::where('order_name', $request->order)->first();
		if(!$order){
			return redirect()->back()->with(['msg'=>"Invalid Order number", "alert"=>"danger"]);
		}

		Order::where('order_name', $request->order)->update([
			'tags' => 'In Process'
		]);

		return redirect()->back()->with(['msg'=>'Order # '.$request->order.' set in process successfully.', 'alert'=>'success']);
	}

}
