HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/fieldsblaze-heroku/app/Http/Controllers/ProductController.php
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Product;
use App\Models\GST;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use App\Library\UserLib;
use DB;

class ProductController extends Controller
{

    protected $userLib;
    public function __construct(UserLib $userLib)
    {
        $this->userLib = $userLib;
    }


    #All Products
    public function allProduct()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }


        $Product = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $TrashProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '1')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $ActiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '1')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $InactiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '0')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();


        return view('admin.all-product', ['Product' => $Product, 'TrashProduct' => $TrashProduct, 'ActiveProduct' => $ActiveProduct, 'InactiveProduct' => $InactiveProduct]);
    }

    #Inactive Products
    public function inactiveProduct()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $Product = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $TrashProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '1')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $ActiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '1')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $InactiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '0')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        return view('admin.inactive-product', ['Product' => $Product, 'TrashProduct' => $TrashProduct, 'ActiveProduct' => $ActiveProduct, 'InactiveProduct' => $InactiveProduct]);
    }

    #Active Products
    public function activeProduct()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $Product = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $TrashProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '1')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $ActiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '1')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $InactiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '0')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        return view('admin.active-product', ['Product' => $Product, 'TrashProduct' => $TrashProduct, 'ActiveProduct' => $ActiveProduct, 'InactiveProduct' => $InactiveProduct]);
    }

    #Trash Products
    public function trashProduct()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $Product = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $TrashProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.IsDeleted', '=', '1')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $ActiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '1')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        $InactiveProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->where('tbl_products.Status', '=', '0')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->orderBy('tbl_products.id', 'desc')
            ->get();

        return view('admin.trash-product', ['Product' => $Product, 'TrashProduct' => $TrashProduct, 'ActiveProduct' => $ActiveProduct, 'InactiveProduct' => $InactiveProduct]);
    }

    ### View Record
    public function viewProduct($ProductId)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $ViewProduct = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit', 'tbl_gst_slab.Name as GstSlab', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')->where('tbl_products.ProductId', '=', $ProductId)
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
            ->leftJoin('tbl_gst_slab', 'tbl_products.GstSlabId', '=', 'tbl_gst_slab.GstSlabId')
            ->get()->first();
        // $ThumbnailUrl = $ViewProduct->ThumbnailUrl;
        return view('admin.view-product', ['Product' => $ViewProduct]);
    }

    ### Store New Record
    public function storeProduct(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $input = $request->all();
        $data = $input;

        ##Product File
        // $imageName = $this->userLib->useridGenrator();
        // if ($request->hasFile('ThumbnailUrl')) {
        //     $path = '';
        //     $file = $request->file('ThumbnailUrl');
        //     $extension = $file->getClientOriginalExtension();
        //     $newFileName = $imageName . '-' . time() . '.' . $extension;

        //     // Storage::putFileAs(
        //     //     'public/products',
        //     //     $file,
        //     //     $newFileName
        //     // );
        //     $destinationPath = 'storage/products';
        //     $isUploaded = $file->move($destinationPath, $newFileName);

        //     if ($isUploaded) {
        //         $path = 'storage/products/' . $newFileName;
        //         $ThumbnailUrl = $path;
        //     }
        //     $data['ThumbnailUrl'] = $ThumbnailUrl;
        // }

        ##Product File
        $imageName = $this->userLib->useridGenrator();
        if ($request->hasFile('ThumbnailUrl')) {
            $path = '';
            $file = $request->file('ThumbnailUrl');
            $extension = $file->getClientOriginalExtension();
            $newFileName = $imageName . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/products/',
                $file,
                $newFileName
            );
            $destinationPath = 'products/';
            $isUploaded = $file->move($destinationPath,$newFileName);

            $uploadedFileURL = '';
            if($isUploaded)
            {
                $path = 'products/' . $newFileName;
                $ThumbnailUrl = $path;
            //File Upload Service as s3
            $sourceFileURL = env('APP_URL').'/'.$path;
            $curl = curl_init();
            curl_setopt_array($curl, array(
            CURLOPT_URL => 'http://172.105.42.62/s3-file-server/api-upload.php',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => array('file_url' => $sourceFileURL),
            CURLOPT_HTTPHEADER => array(
                'Cookie: private_content_version=3f7abce738dd8b52d0dcb8653bfe8e93; mage-messages=%5B%7B%22type%22%3A%22error%22%2C%22text%22%3A%22Invalid%20Form%20Key.%20Please%20refresh%20the%20page.%22%7D%2C%7B%22type%22%3A%22error%22%2C%22text%22%3A%22Invalid%20Form%20Key.%20Please%20refresh%20the%20page.%22%7D%2C%7B%22type%22%3A%22error%22%2C%22text%22%3A%22Invalid%20Form%20Key.%20Please%20refresh%20the%20page.%22%7D%5D'
            ),
            ));
            $response = curl_exec($curl);
            curl_close($curl);
            $uploadedFile = json_decode($response,true);
            $uploadedFileURL = isset($uploadedFile['url']) ? $uploadedFile['url'] : '';
            }
            $data['ThumbnailUrl'] = $uploadedFileURL;
        }
        $g_productId = $this->userLib->useridGenrator();
        $data['ProductId'] = $g_productId;
        $data['Created_by'] = session('UserId');
        $data['Created_at'] = date('Y-m-d H:i:s', time());
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());
        $data['IsDeleted'] = '0';

        unset($data['_token']);
        $insert_product = Product::insert($data);

        $ProductId = $g_productId;
        $ProductName = $request->input('ProductName');
        $ProductCode = $request->input('ProductCode');
        $Family = $request->input('Family');
        $Unit = $request->input('Unit');
        $Description = $request->input('Description');
        $GstSlabId = $request->input('GstSlabId');
        $IsDeleted = 0;
        $Status = 1;
        $Active = true;

        DB::connection('pgsql')->insert("insert into salesforce.Product2 (ProductId__c,Name,ProductCode,Family__c,Unit__c,Description,GST_SlabId__c,IsDeleted,Status__c,IsActive) values ('$ProductId','$ProductName','$ProductCode','$Family','$Unit','$Description','$GstSlabId','$IsDeleted','$Status','$Active')");

        return response()->json('status_success');
    }

    #### Change Status
    public function statusUpdateProduct($id)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $data = Product::find($id);
        if ($data->Status == '1') {
            $Status = '0';
        } else {
            $Status = '1';
        }

        $values = array('Status' => $Status);
        Product::find($id)->update($values);
        return redirect()->back();
    }

    #### Delete Temporary
    public function deleteProduct($id)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $CreatedDate = date('Y-m-d H:i:s', time());
        $value = array();
        $value['Updated_at'] = $CreatedDate;
        $value['IsDeleted'] = '1';
        $value['Status'] = '0';
        Product::where('ProductId', $id)->update($value);

        DB::connection('pgsql')->update("update salesforce.Product2 set IsDeleted='1',Status__c='0' where ProductId__c = '$id'");
    }

    #### Delete Selected Product
    public function deleteSelectedProduct(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $id = $request->input('SelectedProduct');
        if ($id) {
            foreach ($id as $product) {
                $checkData = Product::find($product);
                if ($checkData->IsDeleted == '0') {
                    $CreatedDate = date(
                        'Y-m-d H:i:s',
                        time()
                    );
                    $data = array();
                    $data['Updated_at'] = $CreatedDate;
                    $data['IsDeleted'] = '1';

                    $selected_product = Product::where('id', $product)->update($data);
                    if ($selected_product) {
                        echo '1';
                    } else {
                        echo '0';
                    }
                } else {
                    $selected_product = Product::find($product);
                    $selected_product->delete();
                }
            }
        }

        return redirect()->back()->with('status_success');
    }

    #### Restore
    public function restoreProduct($id)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $CreatedDate = date('Y-m-d H:i:s', time());

        $value = array();
        $value['Updated_at'] = $CreatedDate;
        $value['IsDeleted'] = '0';
        Product::where('ProductId', $id)->update($value);

        DB::connection('pgsql')->update("update salesforce.Product2 set IsDeleted='0',Status__c='1',Active='true' where ProductId__c = '$id'");
    }

    #### Delete Permanent
    public function destroyProduct($id)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $destroyData = Product::where('ProductId', $id);
        $destroyData->delete();
    }

    ### Edit Records
    public function editProduct($id)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $Product = Product::select('tbl_products.*')
            ->where('ProductId', '=', $id)
            ->get()->first();
        return response()->json([
            'status' => 200,
            'Product' => $Product,
        ]);
    }

    ### Update Records
    public function updateProduct(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $CreatedDate = date('Y-m-d H:i:s', time());
        $product_id =  $request->input('id');
        $data['ProductName'] = $request->input('name');
        $data['Description'] = $request->input('description');
        $data['Family'] = $request->input('productFamily');
        $data['ProductCode'] = $request->input('productCode');
        $data['Unit'] = $request->input('unit');
        $data['GstSlabId'] = $request->input('gstSlab');

        // $imageName = $this->userLib->useridGenrator();
        // if ($request->hasFile('productImage')) {
        //     $path = '';
        //     $file = $request->file('productImage');
        //     $extension = $file->getClientOriginalExtension();
        //     $newFileName = $imageName . '-' . time() . '.' . $extension;

        //     // Storage::putFileAs(
        //     //     'public/products',
        //     //     $file,
        //     //     $newFileName
        //     // );
        //     $destinationPath = 'storage/products';
        //     $isUploaded = $file->move($destinationPath, $newFileName);

        //     if ($isUploaded) {
        //         $path = 'storage/products/' . $newFileName;
        //         $ThumbnailUrl = $path;
        //     }
        //     $data['ThumbnailUrl'] = $ThumbnailUrl;
        // }

        $imageName = $this->userLib->useridGenrator();
        if ($request->hasFile('productImage')) {
            $path = '';
            $file = $request->file('productImage');
            $extension = $file->getClientOriginalExtension();
            $newFileName = $imageName . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/products/',
                $file,
                $newFileName
            );
            $destinationPath = 'products/';
            $isUploaded = $file->move($destinationPath,$newFileName);

            $uploadedFileURL = '';
            if($isUploaded)
            {
                $path = 'products/' . $newFileName;
                $ThumbnailUrl = $path;
            //File Upload Service as s3
            $sourceFileURL = env('APP_URL').'/'.$path;
            $curl = curl_init();
            curl_setopt_array($curl, array(
            CURLOPT_URL => 'http://172.105.42.62/s3-file-server/api-upload.php',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => array('file_url' => $sourceFileURL),
            CURLOPT_HTTPHEADER => array(
                'Cookie: private_content_version=3f7abce738dd8b52d0dcb8653bfe8e93; mage-messages=%5B%7B%22type%22%3A%22error%22%2C%22text%22%3A%22Invalid%20Form%20Key.%20Please%20refresh%20the%20page.%22%7D%2C%7B%22type%22%3A%22error%22%2C%22text%22%3A%22Invalid%20Form%20Key.%20Please%20refresh%20the%20page.%22%7D%2C%7B%22type%22%3A%22error%22%2C%22text%22%3A%22Invalid%20Form%20Key.%20Please%20refresh%20the%20page.%22%7D%5D'
            ),
            ));
            $response = curl_exec($curl);
            curl_close($curl);
            $uploadedFile = json_decode($response,true);
            $uploadedFileURL = isset($uploadedFile['url']) ? $uploadedFile['url'] : '';
            }
            $data['ThumbnailUrl'] = $uploadedFileURL;
        }

        if ($request->has('editStatus')) {
            $data['Status'] = '1';
        } else {
            $data['Status'] = '0';
        }
        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = $CreatedDate;

        $product_update = Product::where('ProductId', $product_id)->update($data);
        if ($product_update) {
            echo '1';
        } else {
            echo '0';
        }
        $ProductId =  $request->input('id');
        $ProductName = $request->input('name');
        $ProductCode = $request->input('productCode');
        $Family = $request->input('productFamily');
        $Unit = $request->input('unit');
        $Description = $request->input('description');
        $GstSlabId = $request->input('gstSlab');

        DB::connection('pgsql')->update("update salesforce.Product2 set Name='$ProductName',ProductCode='$ProductCode',Family__c='$Family',Unit__c='$Unit',Description='$Description',GST_SlabId__c='$GstSlabId' where ProductId__c='$ProductId'");

        return redirect()->back()->with('status_success');
    }


    ### Check Code and Name
    public function checkProductCodeold($ProductCode)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $Product = Product::select('tbl_products.*')
            ->where('ProductCode', '=', $ProductCode)
            //->where('Status', '=', '1')
            //->where('IsDeleted', '=', '0')
            ->get()->first();
        return response()->json([
            'status' => 200,
            'Product' => $Product,
        ]);
    }

    ### Check Product if Exist
    public function checkProductCode(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $ProductCode = $request->input('ProductCode');
        $id = $request->input('id');
        $ProductCode = Product::where('ProductCode', $ProductCode)
            ->orWhere('ProductId', $id)->first();
        if ($ProductCode) {
            return response()->json(array("exists" => true));
        } else {
            return response()->json(array("exists" => false));
        }
    }

    ### Check Product if Exist in Edit form
    public function checkProductCodeEdit(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $ProductCode = $request->input('ProductCode');
        $id = $request->input('id');
        $ProductCode = Product::where('ProductCode', $ProductCode)
            ->where('ProductId', '!=', $id)
            ->get()->first();

        if ($ProductCode) {
            return response()->json(array("exists" => true));
        } else {
            return response()->json(array("exists" => false));
        }
    }
}