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/ExpenseController.php
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Expense;
use App\Models\ExpenseType;
use App\Models\User;
use App\Library\UserLib;
use Illuminate\Support\Facades\Storage;
use DB;

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

    public function allExpense()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $AllExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $ApprovedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $RejectedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '2')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $TrashExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '1')
            ->where('tbl_expense.Status', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        return view('admin.all-expense', ['AllExpense' => $AllExpense, 'ApprovedExpense' => $ApprovedExpense, 'RejectedExpense' => $RejectedExpense, 'TrashExpense' => $TrashExpense]);
    }



    public function trashExpense()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $AllExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $ApprovedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $RejectedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '2')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $TrashExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '1')
            ->where('tbl_expense.Status', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        return view('admin.trash-expense', ['AllExpense' => $AllExpense, 'ApprovedExpense' => $ApprovedExpense, 'RejectedExpense' => $RejectedExpense, 'TrashExpense' => $TrashExpense]);
    }

    public function approvedExpense()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $AllExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $ApprovedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $RejectedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '2')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $TrashExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '1')
            ->where('tbl_expense.Status', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        return view('admin.approved-expense', ['AllExpense' => $AllExpense, 'ApprovedExpense' => $ApprovedExpense, 'RejectedExpense' => $RejectedExpense, 'TrashExpense' => $TrashExpense]);
    }

    public function rejectedExpense()
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $AllExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $ApprovedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $RejectedExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '0')
            ->where('tbl_expense.ExpenseStatus', '=', '2')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        $TrashExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            ->where('tbl_expense.IsDeleted', '=', '1')
            ->where('tbl_expense.Status', '=', '1')
            ->orderBy('tbl_expense.id', 'desc')
            ->get();
        return view('admin.rejected-expense', ['AllExpense' => $AllExpense, 'ApprovedExpense' => $ApprovedExpense, 'RejectedExpense' => $RejectedExpense, 'TrashExpense' => $TrashExpense]);
    }

    public function viewExpense($ExpenseId)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }
        $ViewExpense = Expense::select('tbl_expense.*', 'tbl_user.FirstName as FirstName', 'tbl_user.LastName as LastName', 'tbl_expense_type.ExpenseTypeName as ExpenseType', 'tbl_expense_type_travel.TravelName as TravelName', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->where('ExpenseId', '=', $ExpenseId)
            ->leftJoin('tbl_user', 'tbl_expense.UserId', '=', 'tbl_user.UserId')
            ->leftJoin('tbl_admin', 'tbl_expense.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_expense_type', 'tbl_expense.ExpenseTypeId', '=', 'tbl_expense_type.ExpenseTypeId')
            ->leftJoin('tbl_expense_type_travel', 'tbl_expense.ExpenseTypeTravelId', '=', 'tbl_expense_type_travel.ExpenseTypeTravelId')
            //->where('tbl_expense.IsDeleted', '=', '0')
            ->orderBy('tbl_expense.id', 'desc')
            ->get()->first();
        return view('admin.view-expense', ['Expense' => $ViewExpense]);
    }

    ### Store New Expense
    public function storeExpense(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $input = $request->all();
        $data = $input;
        ##ExpenseFile1
        // $path1 = '';
        // $addExpenseFile1 = $request->file('addExpenseFile1');
        // $imageName1 = $this->userLib->useridGenrator();
        // $path1 = '';
        // if ($request->hasFile('addExpenseFile1')) {
        //     $file1 = $request->file('addExpenseFile1');
        //     $extension = $file1->getClientOriginalExtension();
        //     $newFileName1 = $imageName1 . '-' . time() . '.' . $extension;

        //     Storage::putFileAs(
        //         'public/expense',
        //         $file1,
        //         $newFileName1
        //     );
        //     $path1 = Storage::url('expense/' . $newFileName1);
        // }
        // $data['ExpenseFile1'] = $path1;
        $imageName1 = $this->userLib->useridGenrator();
        if ($request->hasFile('addExpenseFile1'))
        {
            $path1 = '';
            $file1 = $request->file('addExpenseFile1');
            $extension = $file1->getClientOriginalExtension();
            $newFileName1 = $imageName1 . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/expense/',
                $file1,
                $newFileName1
            );
            $destinationPath = 'expense/';
            $isUploaded = $file1->move($destinationPath,$newFileName1);

            $uploadedFileURL1 = '';
            if($isUploaded)
            {
                $path1 = 'expense/' . $newFileName1;
                $ThumbnailUrl = $path1;
            //File Upload Service as s3
            $sourceFileURL = env('APP_URL').'/'.$path1;
            $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);
            $uploadedFileURL1 = isset($uploadedFile['url']) ? $uploadedFile['url'] : '';
            }
            $data['ExpenseFile1'] = $uploadedFileURL1;
        }

         ##ExpenseFile2
        // $path2 = '';
        // $addExpenseFile2 = $request->file('addExpenseFile2');
        // $imageName2 = $this->userLib->useridGenrator();
        // $path2 = '';
        // if ($request->hasFile('addExpenseFile2')) {
        //     $file2 = $request->file('addExpenseFile2');
        //     $extension = $file2->getClientOriginalExtension();
        //     $newFileName2 = $imageName2 . '-' . time() . '.' . $extension;

        //     Storage::putFileAs(
        //         'public/expense',
        //         $file2,
        //         $newFileName2
        //     );
        //     $path2 = Storage::url('expense/' . $newFileName2);
        // }
        // $data['ExpenseFile2'] = $path2;

        $imageName2 = $this->userLib->useridGenrator();
        if ($request->hasFile('addExpenseFile2'))
        {
            $path2 = '';
            $file2 = $request->file('addExpenseFile2');
            $extension = $file2->getClientOriginalExtension();
            $newFileName2 = $imageName2 . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/expense',
                $file2,
                $newFileName2
            );
            $destinationPath = 'expense';
            $isUploaded = $file2->move($destinationPath,$newFileName2);

            $uploadedFileURL2='';
            if($isUploaded)
            {
                $path2 = 'expense/' . $newFileName2;
                $ThumbnailUrl = $path2;

                //File Upload Service
                $sourceFileURL = env('APP_URL').'/'.$path2;
                $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);
                $uploadedFileURL2 = isset($uploadedFile['url']) ? $uploadedFile['url'] : '';
            }
            $data['ExpenseFile2'] = $uploadedFileURL2;
        }

        // $ExpenseNo = '';
        // $UserId = $input['UserId'];
        // if ($UserId) {
        //     $GetUser = User::where('UserId', '=', $UserId)->get()->first();
        //     $UserName = $GetUser->FirstName;
        //     $UserCode = strtoupper($UserName);
        //     $ExpenseNo = 'EXP-' . $UserCode . '-' . time();

        // }

        $ExpenseTypeId = $input['ExpenseTypeId'];
        $ExpenseName = ExpenseType::select('tbl_expense_type.*')
            ->where('ExpenseTypeId', '=', $ExpenseTypeId)
            ->get()->first();
        $TypeName = $ExpenseName->ExpenseTypeName;

        $data['TypeOfExpense'] = $TypeName;

        $SubmittedDate = '';
        if ($input['Date']) {
            $SubmittedDate = str_replace('/', '-', $input['Date']);
        }
        $Date = date('d-m-Y', strtotime($SubmittedDate));

        $g_expenseId = $this->userLib->useridGenrator();
        $data['ExpenseId'] =  $g_expenseId;
        $ExpenseNo = "EXP-" . time() . '-' . rand();
        $data['ExpenseNo'] = $ExpenseNo;
        $data['IsDeleted'] = 0;
        $data['Status'] = 1;
        $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['Date'] = $Date;

        unset($data['_token']);
        unset($data['addExpenseFile1']);
        unset($data['addExpenseFile2']);
        $insert_expense = Expense::insert($data);

       if($insert_expense){

            $ExpenseId = $g_expenseId;
            $UserId = $request->input('UserId');
            $ExpenseDate = $Date;
            $ExpenseType_Id = $request->input('ExpenseTypeId');
            $ExpenseTypeTravelId = '';
            if($ExpenseType_Id = "4t641xvsBZqkwOo4Wm3AoSnlYCycWKE3l4k83"){
            $ExpenseTypeTravelId = $request->input('ExpenseTypeTravelId');
            }

            $AmountOption = $request->input('AmountOption');
            $TravelKm = "";
            $colName = "";
            if($request->input('TravelKm')){
                $TravelKm = $request->input('TravelKm');
                if($TravelKm)
                {
                    $colName = ",TravelKm__c";
                    $TravelKm = ", '".$TravelKm."'";
                }
            }
            $ExpenseAmount = $request->input('ExpenseAmount');
            $ExpenseStatus = $request->input('ExpenseStatus');
            $Description = '';
            if($request->input('Description')){
            $Description = $request->input('Description');
            }

            $IsDeleted = 0;
            $Status = 1;

            DB::connection('pgsql')->insert("insert into salesforce.Expense__c (Expense_Id__c,UserId__c,Date__c,ExpenseNo__c,Expense_Type_Id__c,Name,Expense_Type_Travel_Id__c,Amount_Option__c,Expense_Amount__c,IsDeleted,Status__c,Description__c,Expense_Status__c $colName) values ('$ExpenseId','$UserId','$ExpenseDate','$ExpenseNo','$ExpenseType_Id','$ExpenseNo','$ExpenseTypeTravelId','$AmountOption','$ExpenseAmount','$IsDeleted','$Status','$Description','$ExpenseStatus' $TravelKm)");
        }
        return response()->json('status_success');
    }

    ### Update Record
    public function updateExpense(Request $request)
    {
        if (empty(session('UserId'))) {
            return redirect('/admin/logout');
        }

        $exp_id = $request->input('id');
        $data['UserId'] = $request->input('UserName');
        $data['ExpenseTypeId'] = $request->input('ExpenseType');
        $data['ExpenseTypeTravelId'] = $request->input('ExpenseVehicleType');
        $data['AmountOption'] = $request->input('editOption');

        if ($request->input('ExpenseKilometer')) {
            $data['TravelKm'] = $request->input('ExpenseKilometer');
        } else {
            $data['TravelKm'] = '0.00';
        }


        $data['ExpenseAmount'] = $request->input('ExpenseAmount');
        $data['Description'] = $request->input('Description');

        $ExpenseTypeId = $request->input('ExpenseType');
        $ExpenseName = ExpenseType::select('tbl_expense_type.*')
            ->where('ExpenseTypeId', '=', $ExpenseTypeId)
            ->get()->first();
        $TypeName = $ExpenseName->ExpenseTypeName;

        $data['TypeOfExpense'] = $TypeName;

        if ($request->input('ExpenseStatus')) {
            $data['ExpenseStatus'] = '1';
        } else {
            $data['ExpenseStatus'] = '0';
        }

        ##ExpenseUpdateFile1
        // if ($request->hasFile('ExpenseFile1')) {
        //     $file1 = $request->file('ExpenseFile1');
        //     $extension = $file1->getClientOriginalExtension();
        //     $imageName1 = $this->userLib->useridGenrator();
        //     $newFileName1 = $imageName1 . '-' . time() . '.' . $extension;

        //     Storage::putFileAs(
        //         'public/expense',
        //         $file1,
        //         $newFileName1
        //     );
        //     $path1 = Storage::url('expense/' . $newFileName1);
        //     $data['ExpenseFile1'] = $path1;
        // }
        $imageName1 = $this->userLib->useridGenrator();
        if ($request->hasFile('ExpenseFile1'))
        {
            $path1 = '';
            $file1 = $request->file('ExpenseFile1');
            $extension = $file1->getClientOriginalExtension();
            $newFileName1 = $imageName1 . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/expense/',
                $file1,
                $newFileName1
            );
            $destinationPath = 'expense/';
            $isUploaded = $file1->move($destinationPath,$newFileName1);

            $uploadedFileURL1 = '';
            if($isUploaded)
            {
                $path1 = 'expense/' . $newFileName1;
                $ThumbnailUrl = $path1;
            //File Upload Service as s3
            $sourceFileURL = env('APP_URL').'/'.$path1;
            $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);
            $uploadedFileURL1 = isset($uploadedFile['url']) ? $uploadedFile['url'] : '';
            }
            $data['ExpenseFile1'] = $uploadedFileURL1;
        }

        ##ExpenseUpdateFile2
        // if ($request->hasFile('ExpenseFile2')) {
        //     $file2 = $request->file('ExpenseFile2');
        //     $extension = $file2->getClientOriginalExtension();
        //     $imageName2 = $this->userLib->useridGenrator();
        //     $newFileName2 = $imageName2 . '-' . time() . '.' . $extension;

        //     Storage::putFileAs(
        //         'public/expense',
        //         $file2,
        //         $newFileName2
        //     );
        //     $path2 = Storage::url('expense/' . $newFileName2);
        //     $data['ExpenseFile2'] = $path2;
        // }

        $imageName2 = $this->userLib->useridGenrator();
        if ($request->hasFile('ExpenseFile2'))
        {
            $path2 = '';
            $file2 = $request->file('ExpenseFile2');
            $extension = $file2->getClientOriginalExtension();
            $newFileName2 = $imageName2 . '-' . time() . '.' . $extension;

            Storage::putFileAs(
                'public/expense',
                $file2,
                $newFileName2
            );
            $destinationPath = 'expense';
            $isUploaded = $file2->move($destinationPath,$newFileName2);

            $uploadedFileURL2='';
            if($isUploaded)
            {
                $path2 = 'expense/' . $newFileName2;
                $ThumbnailUrl = $path2;

                //File Upload Service
                $sourceFileURL = env('APP_URL').'/'.$path2;
                $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);
                $uploadedFileURL2 = isset($uploadedFile['url']) ? $uploadedFile['url'] : '';
            }
            $data['ExpenseFile2'] = $uploadedFileURL2;
        }

        $SubmittedDate = '';
        if ($request->input('ExpenseDate')) {
            $SubmittedDate = str_replace('/', '-', $request->input('ExpenseDate'));
        }
        $Date = date('d-m-Y', strtotime($SubmittedDate));

        $data['Updated_by'] = session('UserId');
        $data['Updated_at'] = date('Y-m-d H:i:s', time());
        $data['Date'] = $Date;
        $exp_update = Expense::where('ExpenseId', $exp_id)->update($data);

        $UserId = $request->input('UserName');
        $ExpenseDate = $Date;
        $ExpenseType_Id = $request->input('ExpenseType');
        if($request->input('ExpenseVehicleType')){
            $ExpenseTypeTravelId = $request->input('ExpenseVehicleType');
        }
        else{
            $ExpenseTypeTravelId = '';
        }
        $AmountOption = $request->input('editOption');

        if ($request->input('ExpenseKilometer')) {
            $TravelKm = $request->input('ExpenseKilometer');
        }
        else{
            $TravelKm = '0.00';
        }
        $ExpenseAmount = $request->input('ExpenseAmount');
        if($request->input('Description')){
        $Description = $request->input('Description');
        }
        else{
            $Description ='';
        }
        $ExpenseName = $TypeName;
        $UpdatedBy = session('UserId');
        $UpdatedAt = date('Y-m-d H:i:s', time());

        DB::connection('pgsql')->update("update salesforce.Expense__c set UserId__c='$UserId',Date__c='$ExpenseDate',Expense_Type_Id__c='$ExpenseType_Id',ExpenseTypeTravelName__c='$ExpenseName',Expense_Type_Travel_Id__c='$ExpenseTypeTravelId',Amount_Option__c='$AmountOption',TravelKm__c='$TravelKm',Expense_Amount__c='$ExpenseAmount',Description__c='$Description',Updated_By__c='$UpdatedBy',Updated_At__c='$UpdatedAt' where Expense_Id__c='$exp_id'");

        if ($exp_update) {
            echo '1';
        } else {
            echo '0';
        }
        return redirect()->back()->with('status_success');
    }

    #### Delete Expense
    public function deleteExpense($id)
    {
        $CreatedDate = date('Y-m-d H:i:s', time());

        $data = array();
        $data['Updated_at'] = $CreatedDate;
        $data['Updated_by'] = session('UserId');
        $data['IsDeleted'] = '1';

        $expense_delete = Expense::where('ExpenseId', $id)->update($data);

        $UpdatedBy = session('UserId');
        $UpdatedAt = date('Y-m-d H:i:s', time());

        DB::connection('pgsql')->update("update salesforce.Expense__c set IsDeleted='1',Status__c='0',Updated_By__c='$UpdatedBy',Updated_At__c='$UpdatedAt' where Expense_Id__c = '$id'");

        if ($expense_delete) {
            echo '1';
        } else {
            echo '0';
        }
    }

    #### Delete Permanent
    public function destroyExpense($id)
    {
        $destroyData = Expense::where('ExpenseId', $id);
        $destroyData->delete();
    }
    #### Restore Expense
    public function restoreExpense($id)
    {
        $CreatedDate = date('Y-m-d H:i:s', time());

        $data = array();
        $data['Updated_at'] = $CreatedDate;
        $data['Updated_by'] = session('UserId');
        $data['IsDeleted'] = '0';

        $expense_restore = Expense::where('ExpenseId', $id)->update($data);

        $UpdatedBy = session('UserId');
        $UpdatedAt = date('Y-m-d H:i:s', time());

        DB::connection('pgsql')->update("update salesforce.Expense__c set IsDeleted='0',Status__c='1',Updated_By__c='$UpdatedBy',Updated_At__c='$UpdatedAt' where Expense_Id__c = '$id'");

        if ($expense_restore) {
            echo '1';
        } else {
            echo '0';
        }
    }

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

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

                    $selected_entry = Expense::where('id', $ExpenseId)->update($data);
                    if ($selected_entry) {
                        echo '1';
                    } else {
                        echo '0';
                    }
                } else {
                    $selected_entry = Expense::find($ExpenseId);
                    $selected_entry->delete();
                }
            }
        }

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

    #### Approve Expense
    public function approveExpense(Request $request)
    {
        $UpdatedDate = date('Y-m-d H:i:s', time());
        //$Comment = $request->input('ApproveComment');
        $id = $request->input('ExpId');
        $Comment = $request->input('ApproveComment');
        $data = array();
        $data['Updated_at'] = $UpdatedDate;
        $UserId = session('UserId');
        $data['Updated_by'] = $UserId;
        $data['ExpenseStatus'] = '1';
        $data['ExpenseComment'] = $Comment;
        //unset($data['_token']);

        $expense_approve = Expense::where('ExpenseId', $id)->update($data);
        if ($expense_approve) {

            $UpdatedBy = session('UserId');
            $UpdatedAt = date('Y-m-d H:i:s', time());

            DB::connection('pgsql')->update("update salesforce.Expense__c set Approved_By__c='$UserId',Approved__c='1',Expense_Comment__c='$Comment',Updated_By__c='$UpdatedBy',Updated_At__c='$UpdatedAt' where Expense_Id__c='$id'");

            return response()->json('status_success');
        } else {
            echo 'failed';
        }
    }

    #### Reject Expense
    public function rejectExpense(Request $request)
    {
        $UpdatedDate = date('Y-m-d H:i:s', time());
        $id = $request->input('ExpId');
        $Comment = $request->input('RejectComment');
        $data = array();
        $data['Updated_at'] = $UpdatedDate;
        $UserId = session('UserId');
        $data['Updated_by'] = $UserId;
        $data['ExpenseStatus'] = '2';
        $data['ExpenseComment'] = $Comment;
        //unset($data['_token']);

        $expense_reject = Expense::where('ExpenseId', $id)->update($data);
        if ($expense_reject) {

            DB::connection('pgsql')->update("update salesforce.Expense__c set Approved_By__c='$UserId',Approved__c='2',Expense_Comment__c='$Comment' where Expense_Id__c='$id'");

            return response()->json('status_success');
        } else {
            echo 'failed';
        }
    }

    ### Edit Records
    public function editExpense($id)
    {
        $Expense = Expense::select('tbl_expense.*')
            ->where('ExpenseId', '=', $id)
            ->get()->first();
        return response()->json([
            'status' => 200,
            'Expense' => $Expense,
        ]);
    }
}