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().'
(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().'
(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();
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', '3')->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]));
// 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.'
';
$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[] = 'Download Airway Bill '.$counter.'';
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[] = 'Download Airway Bill '.$counter.'';
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.
Row(s) Added: '.$countRowsAdded.'
Order(s) not synced: '.implode(', ', $rowAlreadyExist). '');
}
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']);
}
}