MOON
Server: Apache
System: Linux 101-53-147-124.cprapid.com 4.18.0-553.121.1.el8_10.x86_64 #1 SMP Thu Apr 30 09:06:34 EDT 2026 x86_64
User: clientsoftwares (1005)
PHP: 8.2.30
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
File: /home/clientsoftwares/www/erp.clientsoftwares.com/app/Http/Controllers/ProposalController.php
<?php

namespace App\Http\Controllers;

use App\Events\ConvertToInvoice;
use App\Events\CreateProposal;
use App\Events\DestroyProposal;
use App\Events\DuplicateProposal;
use App\Events\ResentProposal;
use App\Events\SentProposal;
use App\Events\StatusChangeProposal;
use App\Events\UpdateProposal;
use App\Models\Invoice;
use App\Models\Proposal;
use App\Models\ProposalProduct;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Rawilk\Settings\Support\Context;
use App\Models\InvoiceProduct;
use App\Models\EmailTemplate;
use App\Models\ProposalAttechment;
use Modules\ProductService\Entities\ProductService;

class ProposalController extends Controller
{
     /**
     * Display a listing of the resource.
     * @return Renderable
     */
    public function index(Request $request)
    {
        if (Auth::user()->can('proposal manage'))
        {
            $status = Proposal::$statues;
            $customer  = User::where('workspace_id', '=', getActiveWorkSpace())->where('type','Client')->get()->pluck('name', 'id');
            $query = Proposal::where('workspace',getActiveWorkSpace());
            if (!empty($request->customer))
            {
                $query->where('customer_id', '=', $request->customer);

            }
            if (!empty($request->issue_date))
            {
                $date_range = explode('to', $request->issue_date);
                if(count($date_range) == 2)
                {
                    $query->whereBetween('issue_date',$date_range);
                }
                else
                {
                    $query->where('issue_date',$date_range[0]);
                }
            }

            if (!empty($request->status)) {

                $query->where('status', $request->status);
            }
            $proposals = $query->get();
            return view('proposal.index', compact('proposals', 'customer', 'status'));
        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));
        }
    }
    public function Grid(Request $request)
    {
        if (Auth::user()->can('proposal manage'))
        {
            $status = Proposal::$statues;
            $customer  = User::where('workspace_id', '=', getActiveWorkSpace())->where('type','Client')->get()->pluck('name', 'id');
            $query = Proposal::where('workspace',getActiveWorkSpace());
            if (!empty($request->customer))
            {
                $query->where('customer_id', '=', $request->customer);

            }
            if (!empty($request->issue_date))
            {
                $date_range = explode('to', $request->issue_date);
                if(count($date_range) == 2)
                {
                    $query->whereBetween('issue_date',$date_range);
                }
                else
                {
                    $query->where('issue_date',$date_range[0]);
                }
            }

            if (!empty($request->status)) {

                $query->where('status', $request->status);
            }
            $proposals = $query->get();
            return view('proposal.grid', compact('proposals', 'customer', 'status'));
        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));
        }
    }

    /**
     * Show the form for creating a new resource.
     * @return Renderable
     */
    public function create($customerId)
    {
        if(module_is_active('ProductService'))
        {
            if (Auth::user()->can('proposal create'))
            {

                $proposal_number = Proposal::proposalNumberFormat($this->proposalNumber());

                $customers   = User::where('workspace_id', '=', getActiveWorkSpace())->where('type','Client')->get()->pluck('name', 'id');
                $category=[];
                $product_services=[];
                $projects=[];
                $taxs=[];
                if(module_is_active('Account'))
                {
                    if ($customerId > 0) {
                        $temp_cm = \Modules\Account\Entities\Customer::where('customer_id',$customerId)->first();
                        if($temp_cm)
                        {
                            $customerId = $temp_cm->user_id;
                        }
                        else
                        {
                            return redirect()->back()->with('error', __('Something went wrong please try again!'));
                        }
                    }
                    $category = \Modules\ProductService\Entities\Category::where('created_by', '=', creatorId())->where('workspace_id', getActiveWorkSpace())->where('type', 1)->get()->pluck
                    ('name', 'id');
                    $product_services = \Modules\ProductService\Entities\ProductService::where('workspace_id', getActiveWorkSpace())->get()->pluck('name', 'id');
                }
                if(module_is_active('Taskly'))
                {
                    if(module_is_active('ProductService'))
                    {
                        $taxs = \Modules\ProductService\Entities\Tax::where('workspace_id', getActiveWorkSpace())->get()->pluck('name', 'id');
                    }
                    $projects = \Modules\Taskly\Entities\Project::select('projects.*')->join('user_projects', 'projects.id', '=', 'user_projects.project_id')->where('user_projects.user_id', '=', Auth::user()->id)->where('workspace', getActiveWorkSpace())->projectonly()->get()->pluck('name', 'id');
                }
                if(module_is_active('CustomField')){
                    $customFields =  \Modules\CustomField\Entities\CustomField::where('workspace_id',getActiveWorkSpace())->where('module', '=', 'Base')->where('sub_module','Proposal')->get();
                }else{
                    $customFields = null;
                }
                return view('proposal.create', compact('customers', 'proposal_number', 'product_services', 'category', 'customerId','projects','taxs','customFields'));
            }
            else
            {
                return redirect()->back()->with('error', __('Permission Denied.'));
            }
        }
        else
        {
            return redirect()->route('proposal.index')->with('error', __('Please Enable Product & Service Module'));
        }
    }

    /**
     * Store a newly created resource in storage.
     * @param Request $request
     * @return Renderable
     */
    public function store(Request $request)
    {
        if (\Auth::user()->can('proposal create'))
        {
            if($request->proposal_type == "product")
            {

                $validator = \Validator::make(
                    $request->all(),
                    [
                        'customer_id' => 'required',
                        'issue_date' => 'required',
                        'category_id' => 'required',
                        'items' => 'required',

                    ]
                );
                if ($validator->fails()) {
                    $messages = $validator->getMessageBag();

                    return redirect()->back()->with('error', $messages->first());
                }
                $status = Proposal::$statues;
                $proposal                 = new Proposal();
                $proposal->proposal_id    = $this->proposalNumber();
                $proposal->customer_id    = $request->customer_id;
                $proposal->status         = 0;
                $proposal->issue_date     = $request->issue_date;
                $proposal->category_id    = $request->category_id;
                $proposal->workspace       = getActiveWorkSpace();
                $proposal->created_by      = creatorId();
                $proposal->save();
                Invoice::starting_number($proposal->proposal_id + 1, 'proposal');

                if(module_is_active('CustomField'))
                    {
                        \Modules\CustomField\Entities\CustomField::saveData($proposal, $request->customField);
                    }
                $products = $request->items;
                for ($i = 0; $i < count($products); $i++)
                {
                    $proposalProduct                = new ProposalProduct();
                    $proposalProduct->proposal_id   = $proposal->id;
                    $proposalProduct->product_type  = $products[$i]['product_type'];
                    $proposalProduct->product_id    = $products[$i]['item'];
                    $proposalProduct->quantity      = $products[$i]['quantity'];
                    $proposalProduct->tax           = $products[$i]['tax'];
                    $proposalProduct->discount      = isset($products[$i]['discount']) ? $products[$i]['discount'] : 0;
                    $proposalProduct->price         = $products[$i]['price'];
                    $proposalProduct->description   = $products[$i]['description'];
                    $proposalProduct->save();
                }
                  // first parameter request second parameter proposal
                event(new CreateProposal($request, $proposal));
                return redirect()->route('proposal.index')->with('success', __('Proposal successfully created.'));
            }
            else if($request->proposal_type == "project")
            {
                $validator = \Validator::make(
                    $request->all(), [

                                    'customer_id' => 'required',
                                    'issue_date' => 'required',
                                    'project' => 'required',
                                    'tax_project' => 'required',
                                    'items' => 'required',

                                ]
                );
                if($validator->fails())
                {
                    $messages = $validator->getMessageBag();

                    return redirect()->back()->with('error', $messages->first());
                }

                $proposal                 = new Proposal();
                if(module_is_active('Account'))
                {
                    $customer = \Modules\Account\Entities\Customer::where('user_id', '=', $request->customer_id)->first();
                    $proposal->customer_id    = !empty($customer) ?  $customer->id : null;
                }

                $status = Proposal::$statues;
                $proposal->proposal_id     = $this->proposalNumber();
                $proposal->customer_id         = $request->customer_id;
                $proposal->status          = 0;
                $proposal->proposal_module = 'taskly';
                $proposal->issue_date      = $request->issue_date;
                $proposal->category_id     = $request->project;
                $proposal->workspace       = getActiveWorkSpace();
                $proposal->created_by      = Auth::user()->id;

                $proposal->save();

                $products = $request->items;

                Invoice::starting_number( $proposal->proposal_id + 1, 'proposal');

                if(module_is_active('CustomField'))
                {
                    \Modules\CustomField\Entities\CustomField::saveData($proposal, $request->customField);
                }
                $project_tax = implode(',',$request->tax_project);

                for($i = 0; $i < count($products); $i++)
                {
                    $proposalProduct               = new ProposalProduct();
                    $proposalProduct->proposal_id  = $proposal->id;
                    $proposalProduct->product_id   = $products[$i]['item'];
                    $proposalProduct->quantity     = 1;
                    $proposalProduct->tax          = $project_tax;
                    $proposalProduct->discount     = isset($products[$i]['discount']) ? $products[$i]['discount'] : 0;
                    $proposalProduct->price        = $products[$i]['price'];
                    $proposalProduct->description  = $products[$i]['description'];
                    $proposalProduct->save();
                }
                // first parameter request second parameter proposal
                event(new CreateProposal($request, $proposal));

                return redirect()->route('proposal.index', $proposal->id)->with('success', __('Proposal successfully created.'));
            }
        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    /**
     * Show the specified resource.
     * @param int $id
     * @return Renderable
     */
    public function show($e_id)
    {
        if (Auth::user()->can('proposal show'))
        {
            try {
                $id       = Crypt::decrypt($e_id);
            } catch (\Throwable $th) {
                return redirect()->back()->with('error', __('Proposal Not Found.'));
            }
            $proposal = Proposal::find($id);
            if(!empty($proposal) && $proposal->workspace == getActiveWorkSpace())
            {
                $user = $proposal->customer;
                $proposal_attachment = ProposalAttechment::where('proposal_id', $proposal->id)->get();
                $customer = [];
                if(module_is_active('Account') && !empty($user->id))
                {
                    $customer    = \Modules\Account\Entities\Customer::where('user_id',$user->id)->where('workspace',getActiveWorkSpace())->first();
                }
                $iteams   = $proposal->items;
                $status   = Proposal::$statues;
                if(module_is_active('CustomField')){
                    $proposal->customField = \Modules\CustomField\Entities\CustomField::getData($proposal, 'Base','Proposal');
                    $customFields      = \Modules\CustomField\Entities\CustomField::where('workspace_id', '=', getActiveWorkSpace())->where('module', '=', 'Base')->where('sub_module','Proposal')->get();
                }else{
                    $customFields = null;
                }

                return view('proposal.view', compact('proposal', 'customer', 'iteams', 'status','customFields','proposal_attachment'));
            } else {
                return redirect()->route('proposal.index')->with('error', __('Proposal Not Found.'));
            }
        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    /**
     * Show the form for editing the specified resource.
     * @param int $id
     * @return Renderable
     */
    public function edit($e_id)
    {
        if (Auth::user()->can('proposal edit'))
        {
            try {
                $id       = Crypt::decrypt($e_id);
            } catch (\Throwable $th) {
                return redirect()->back()->with('error', __('Proposal Not Found.'));
            }
            $proposal        = Proposal::find($id);
            if($proposal->workspace == getActiveWorkSpace())
            {
                $proposal_number = Proposal::proposalNumberFormat($proposal->proposal_id);
                $customers       = User::where('workspace_id', '=', getActiveWorkSpace())->where('type','Client')->get()->pluck('name', 'id');
                if(module_is_active('ProductService'))
                {
                    $category = \Modules\ProductService\Entities\Category::where('created_by', '=', creatorId())->where('workspace_id', getActiveWorkSpace())->where('type', 1)->get()->pluck('name', 'id');

                }
                else
                {
                    $category=[];
                    $product_services=[];
                }


                $items = [];
                $taxs = [];
                $projects = [];
                if(module_is_active('Taskly'))
                {
                    if(module_is_active('ProductService'))
                    {
                        $taxs = \Modules\ProductService\Entities\Tax::where('workspace_id', getActiveWorkSpace())->get()->pluck('name', 'id');
                    }
                    $projects = \Modules\Taskly\Entities\Project::where('workspace', getActiveWorkSpace())->projectonly()->get()->pluck('name', 'id');
                }
                foreach ($proposal->items as $proposalItem)
                {
                    $itemAmount               = $proposalItem->quantity * $proposalItem->price;
                    $proposalItem->itemAmount = $itemAmount;
                    $proposalItem->taxes      = Proposal::tax($proposalItem->tax);
                    $items[]                  = $proposalItem;
                }
                if(module_is_active('CustomField')){
                    $proposal->customField = \Modules\CustomField\Entities\CustomField::getData($proposal, 'Base','Proposal');
                    $customFields             = \Modules\CustomField\Entities\CustomField::where('workspace_id', '=', getActiveWorkSpace())->where('module', '=', 'Base')->where('sub_module','Proposal')->get();
                }else{
                    $customFields = null;
                }
                return view('proposal.edit', compact('customers','proposal', 'proposal_number', 'category', 'items','taxs','projects','customFields'));
            }
            else
            {
                return redirect()->back()->with('error', __('Permission denied.'));
            }
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }

    }

    /**
     * Update the specified resource in storage.
     * @param Request $request
     * @param int $id
     * @return Renderable
     */
    public function update(Request $request, Proposal $proposal)
    {
        if (Auth::user()->can('proposal edit'))
        {
            if($proposal->workspace == getActiveWorkSpace())
            {
                if($request->proposal_type == "product")
                {
                    $validator = \Validator::make(
                        $request->all(),
                        [
                            'customer_id' => 'required',
                            'issue_date' => 'required',
                            'category_id' => 'required',
                            'items' => 'required',
                        ]
                    );
                    if ($validator->fails()) {
                        $messages = $validator->getMessageBag();

                        return redirect()->route('proposal.index')->with('error', $messages->first());
                    }
                    $proposal->customer_id        = $request->customer_id;
                    $proposal->issue_date         = $request->issue_date;
                    $proposal->category_id        = $request->category_id;
                    $proposal->proposal_module    = 'account';
                    $proposal->save();
                    if(module_is_active('CustomField'))
                    {
                        \Modules\CustomField\Entities\CustomField::saveData($proposal, $request->customField);
                    }
                    $products = $request->items;

                    for ($i = 0; $i < count($products); $i++)
                    {
                        $proposalProduct = ProposalProduct::find($products[$i]['id']);
                        if ($proposalProduct == null) {
                            $proposalProduct                = new ProposalProduct();
                            $proposalProduct->proposal_id   = $proposal->id;
                        }

                        if (isset($products[$i]['item'])) {
                            $proposalProduct->product_id    = $products[$i]['item'];
                        }
                        $proposalProduct->product_type      = $products[$i]['product_type'];
                        $proposalProduct->quantity          = $products[$i]['quantity'];
                        $proposalProduct->tax               = $products[$i]['tax'];
                        $proposalProduct->discount          = isset($products[$i]['discount']) ? $products[$i]['discount'] : 0;
                        $proposalProduct->price             = $products[$i]['price'];
                        $proposalProduct->description       = $products[$i]['description'];
                        $proposalProduct->save();
                    }

                    // first parameter request second parameter proposal
                    event(new UpdateProposal($request, $proposal));

                    return redirect()->route('proposal.index')->with('success', __('Proposal successfully updated.'));

                }
                else if($request->proposal_type == "project")
                {
                    $validator = \Validator::make(
                        $request->all(), [
                                        'customer_id' => 'required',
                                        'issue_date' => 'required',
                                        'project' => 'required',
                                        'tax_project' => 'required',
                                        'items' => 'required',

                                    ]
                    );
                    if($validator->fails())
                    {
                        $messages = $validator->getMessageBag();

                        return redirect()->back()->with('error', $messages->first());
                    }

                    if(module_is_active('Account'))
                    {
                        $customer = \Modules\Account\Entities\Customer::where('user_id', '=', $request->customer_id)->first();
                        $proposal->customer_id    = !empty($customer) ?  $customer->id : null;
                    }
                    if($request->proposal_type != $proposal->proposal_module)
                    {
                        ProposalProduct::where('proposal_id', '=', $proposal->id)->delete();
                    }

                    $status = Proposal::$statues;
                    $proposal->proposal_id        = $proposal->proposal_id;
                    $proposal->customer_id        = $request->customer_id;
                    $proposal->issue_date         = $request->issue_date;
                    $proposal->category_id        = $request->project;
                    $proposal->proposal_module    = 'taskly';
                    $proposal->save();

                    $products = $request->items;

                    if(module_is_active('CustomField'))
                    {
                        \Modules\CustomField\Entities\CustomField::saveData($proposal, $request->customField);
                    }
                    $project_tax = implode(',',$request->tax_project);
                    for($i = 0; $i < count($products); $i++)
                    {
                        $proposalProduct = ProposalProduct::find($products[$i]['id']);
                        if($proposalProduct == null)
                        {
                            $proposalProduct             = new ProposalProduct();
                            $proposalProduct->proposal_id = $proposal->id;
                        }
                        $proposalProduct->product_id  = $products[$i]['item'];
                        $proposalProduct->quantity    = 1;
                        $proposalProduct->tax         = $project_tax;
                        $proposalProduct->discount    = isset($products[$i]['discount']) ? $products[$i]['discount'] : 0;
                        $proposalProduct->price       = $products[$i]['price'];
                        $proposalProduct->description = $products[$i]['description'];
                        $proposalProduct->save();
                    }
                     // first parameter request second parameter proposal
                     event(new UpdateProposal($request, $proposal));
                }
                return redirect()->route('proposal.index')->with('success', __('Proposal successfully updated.'));
            } else {
                return redirect()->back()->with('error', __('Permission denied.'));
            }
        }
        else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }

    /**
     * Remove the specified resource from storage.
     * @param int $id
     * @return Renderable
     */
    public function destroy(Proposal $proposal)
    {
        if (Auth::user()->can('proposal delete'))
        {
            if($proposal->workspace == getActiveWorkSpace())
            {
                ProposalProduct::where('proposal_id', '=', $proposal->id)->delete();
                if(module_is_active('CustomField')){
                    $customFields = \Modules\CustomField\Entities\CustomField::where('module','Base')->where('sub_module','Proposal')->get();
                    foreach($customFields as $customField)
                    {
                        $value = \Modules\CustomField\Entities\CustomFieldValue::where('record_id', '=', $proposal->id)->where('field_id',$customField->id)->first();
                        if(!empty($value)){
                            $value->delete();
                        }
                    }
                }
                // first parameter proposal
                event(new DestroyProposal($proposal));
                $proposal->delete();

                return redirect()->route('proposal.index')->with('success', __('Proposal successfully deleted.'));
            }
            else
            {
                return redirect()->back()->with('error', __('Permission denied.'));
            }
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    function proposalNumber()
    {
        $latest = company_setting('proposal_starting_number');
        if($latest == null)
        {
            return 1;
        }
        else
        {
            return $latest;
        }
    }
    public function customer(Request $request)
    {
        if(module_is_active('Account'))
        {
            $customer = \Modules\Account\Entities\Customer::where('user_id', '=', $request->id)->first();
            if(empty($customer))
            {
                $user = User::where('id',$request->id)->where('workspace_id',getActiveWorkSpace())->where('created_by',creatorId())->first();
                $customer['name'] = !empty($user->name) ? $user->name : '';
                $customer['email'] = !empty($user->email) ? $user->email : '';
            }
        }
        else
        {
            $user = User::where('id',$request->id)->where('workspace_id',getActiveWorkSpace())->where('created_by',creatorId())->first();
            $customer['name'] = !empty($user->name) ? $user->name : '';
            $customer['email'] = !empty($user->email) ? $user->email : '';
        }
        return view('proposal.customer_detail', compact('customer'));
    }
    public function product(Request $request)
    {
        $data['product']     = $product = \Modules\ProductService\Entities\ProductService::find($request->product_id);
        $data['unit']        = !empty($product) ? ((!empty($product->unit())) ? $product->unit()->name : '') : '';
        $data['taxRate']     = $taxRate = !empty($product) ? (!empty($product->tax_id) ? $product->taxRate($product->tax_id) : 0 ): 0;
        $data['taxes']       =  !empty($product) ? ( !empty($product->tax_id) ? $product->tax($product->tax_id) : 0) : 0;
        $salePrice           = !empty($product) ?  $product->sale_price : 0;
        $quantity            = 1;
        $taxPrice            = !empty($product) ? (($taxRate / 100) * ($salePrice * $quantity)) : 0;
        $data['totalAmount'] = !empty($product) ?  ($salePrice * $quantity) : 0;

        return json_encode($data);
    }
    public function convert($proposal_id)
    {
        if(Auth::user()->can('proposal convert invoice'))
        {
            $proposal                     = Proposal::where('id', $proposal_id)->first();
            $proposal->is_convert         = 1;
            $convertInvoice                      = new Invoice();

            if(module_is_active('Account'))
            {
                $customer = \Modules\Account\Entities\Customer::where('user_id',$proposal['customer_id'])->first();
                $convertInvoice->customer_id    = !empty($customer) ?  $customer->id : null;
            }
            $convertInvoice->invoice_id          = $this->invoiceNumber();
            $convertInvoice->user_id             = $proposal->customer_id;
            $convertInvoice->issue_date          = date('Y-m-d');
            $convertInvoice->due_date            = date('Y-m-d');
            $convertInvoice->send_date           = null;
            $convertInvoice->category_id         = $proposal['category_id'];
            $convertInvoice->status              = 0;
            $convertInvoice->invoice_module      = $proposal['proposal_module'];
            $convertInvoice->workspace           = $proposal['workspace'];
            $convertInvoice->created_by          = $proposal['created_by'];
            $convertInvoice->save();
            Invoice::starting_number( $convertInvoice->invoice_id + 1, 'invoice');
            $proposal->converted_invoice_id = $convertInvoice->id;
            $proposal->save();


            if($convertInvoice)
            {
                $proposalProduct = ProposalProduct::where('proposal_id', $proposal_id)->get();
                foreach($proposalProduct as $product)
                {
                    $duplicateProduct             = new InvoiceProduct();
                    $duplicateProduct->invoice_id = $convertInvoice->id;
                    $duplicateProduct->product_id = $product->product_id;
                    $duplicateProduct->quantity   = $product->quantity;
                    $duplicateProduct->tax        = $product->tax;
                    $duplicateProduct->discount   = $product->discount;
                    $duplicateProduct->price      = $product->price;

                    $duplicateProduct->save();

                    //inventory management (Quantity)
                    if($proposal['proposal_module'] == 'account'){
                        Invoice::total_quantity('minus',$duplicateProduct->quantity,$duplicateProduct->product_id);
                    }

                    //Product Stock Report
                    if(module_is_active('Account'))
                    {
                        $type='invoice';
                        $type_id = $convertInvoice->id;
                        \Modules\Account\Entities\StockReport::where('type','=','invoice')->where('type_id' ,'=', $convertInvoice->id)->delete();
                        $description= $duplicateProduct->quantity.''.__(' quantity sold in').' ' . Proposal::proposalNumberFormat($proposal->proposal_id).' '.__('Proposal convert to invoice').' '. Invoice::invoiceNumberFormat($convertInvoice->invoice_id);
                        \Modules\Account\Entities\AccountUtility::addProductStock( $duplicateProduct->product_id,$duplicateProduct->quantity,$type,$description,$type_id);
                    }
                }
            }
            event(new ConvertToInvoice($convertInvoice));

            return redirect()->back()->with('success', __('Proposal to invoice convert successfully.'));
        }
        else
        {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function duplicate($proposal_id)
    {
        if (Auth::user()->can('proposal duplicate'))
        {
            $proposal                               = Proposal::where('id', $proposal_id)->first();
            $duplicateProposal                      = new Proposal();
            $duplicateProposal->proposal_id         = $this->proposalNumber();
            $duplicateProposal->customer_id         = $proposal['customer_id'];
            $duplicateProposal->issue_date          = date('Y-m-d');
            $duplicateProposal->send_date           = null;
            $duplicateProposal->category_id         = $proposal['category_id'];
            $duplicateProposal->status              = 0;
            $duplicateProposal->proposal_module     = $proposal['proposal_module'];;
            $duplicateProposal->created_by          = $proposal['created_by'];
            $duplicateProposal->workspace           = $proposal['workspace'];
            $duplicateProposal->save();
            Invoice::starting_number($duplicateProposal->proposal_id + 1, 'proposal');

            if ($duplicateProposal)
            {
                $proposalProduct = ProposalProduct::where('proposal_id', $proposal_id)->get();
                foreach ($proposalProduct as $product)
                {
                    $duplicateProduct                   = new ProposalProduct();
                    $duplicateProduct->proposal_id      = $duplicateProposal->id;
                    $duplicateProduct->product_type     = $product->product_type;
                    $duplicateProduct->product_id       = $product->product_id;
                    $duplicateProduct->quantity         = $product->quantity;
                    $duplicateProduct->tax              = $product->tax;
                    $duplicateProduct->discount         = $product->discount;
                    $duplicateProduct->price            = $product->price;
                    $duplicateProduct->save();
                }
            }
            event(new DuplicateProposal($duplicateProposal));
            return redirect()->back()->with('success', __('Proposal duplicate successfully.'));
        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function items(Request $request)
    {
        $items = ProposalProduct::where('proposal_id', $request->proposal_id)->where('product_id', $request->product_id)->first();

        return json_encode($items);
    }
    public function payproposal($proposal_id)
    {
        if(!empty($proposal_id))
        {
            try {
                $id = \Illuminate\Support\Facades\Crypt::decrypt($proposal_id);
            } catch (\Throwable $th) {
                return redirect('login');
            }

            $proposal = Proposal::where('id',$id)->first();
            if(!is_null($proposal))
            {
                $items         = [];
                $totalTaxPrice = 0;
                $totalQuantity = 0;
                $totalRate     = 0;
                $totalDiscount = 0;
                $taxesData     = [];

                foreach($proposal->items as $item)
                {
                    $totalQuantity += $item->quantity;
                    $totalRate     += $item->price;
                    $totalDiscount += $item->discount;
                    $taxes         = Proposal::tax($item->tax);
                    $itemTaxes = [];
                    foreach($taxes as $tax)
                    {

                        if(!empty($tax))
                        {
                            $taxPrice            = Proposal::taxRate($tax->rate, $item->price, $item->quantity,$item->discount);
                            $totalTaxPrice       += $taxPrice;
                            $itemTax['tax_name'] = $tax->tax_name;
                            $itemTax['tax']      = $tax->rate . '%';
                            $itemTax['price']    = currency_format_with_sym($taxPrice,$proposal->created_by);
                            $itemTaxes[]         = $itemTax;

                            if(array_key_exists($tax->name, $taxesData))
                            {
                                $taxesData[$itemTax['tax_name']] = $taxesData[$tax->tax_name] + $taxPrice;
                            }
                            else
                            {
                                $taxesData[$tax->tax_name] = $taxPrice;
                            }

                        }
                        else
                        {
                            $taxPrice            = Proposal::taxRate(0, $item->price, $item->quantity,$item->discount);
                            $totalTaxPrice       += $taxPrice;
                            $itemTax['tax_name'] = 'No Tax';
                            $itemTax['tax']      = '';
                            $itemTax['price']    = currency_format_with_sym($taxPrice,$proposal->created_by);
                            $itemTaxes[]         = $itemTax;

                            if(array_key_exists('No Tax', $taxesData))
                            {
                                $taxesData[$tax->tax_name] = $taxesData['No Tax'] + $taxPrice;
                            }
                            else
                            {
                                $taxesData['No Tax'] = $taxPrice;
                            }

                        }
                    }

                    $item->itemTax = $itemTaxes;
                    $items[]       = $item;
                }
                $proposal->items         = $items;
                $proposal->totalTaxPrice = $totalTaxPrice;
                $proposal->totalQuantity = $totalQuantity;
                $proposal->totalRate     = $totalRate;
                $proposal->totalDiscount = $totalDiscount;
                $proposal->taxesData     = $taxesData;
                $ownerId = $proposal->created_by;

                $users = User::where('id',$proposal->created_by)->first();

                if(!is_null($users))
                {
                    \App::setLocale($users->lang);
                }
                else
                {
                    \App::setLocale('en');
                }

                $proposal    = Proposal::where('id', $id)->first();
                $customer = $proposal->customer;
                $item   = $proposal->items;

                $company_payment_setting =[];

                if(module_is_active('Account'))
                {
                    $customer = \Modules\Account\Entities\Customer::where('user_id',$proposal->customer_id)->first();
                }
                else
                {
                    $customer = $proposal->customer;
                }
                if(module_is_active('CustomField')){
                    $proposal->customField = \Modules\CustomField\Entities\CustomField::getData($proposal, 'Base','Proposal');
                    $customFields             = \Modules\CustomField\Entities\CustomField::where('workspace_id', '=', $proposal->workspace)->where('module', '=', 'Base')->where('sub_module','Proposal')->get();
                }else{
                    $customFields = null;
                }

                $settings['proposal_shipping_display'] = company_setting('proposal_shipping_display',$proposal->created_by,$proposal->workspace);
                $company_id = $proposal->created_by;
                $workspace_id = $proposal->workspace;
                return view('proposal.proposalpay',compact('proposal','item','customer','users','company_payment_setting','settings','customFields','company_id','workspace_id'));
            }
            else
            {
                return abort('404', 'The Link You Followed Has Expired');
            }
        }else{
            return abort('404', 'The Link You Followed Has Expired');
        }
    }

    public function statusChange(Request $request, $id)
    {
        $status           = $request->status;
        $proposal         = Proposal::find($id);
        $proposal->status = $status;
        $proposal->save();

         // first parameter request second  proposal
        event(new StatusChangeProposal($request,$proposal));

        return redirect()->back()->with('success', __('Proposal status changed successfully.'));
    }
    public function resent($id)
    {
        if (Auth::user()->can('proposal send'))
        {
            $proposal = Proposal::where('id', $id)->first();

            $customer           = User::where('id', $proposal->customer_id)->first();
            $proposal->name     = !empty($customer) ? $customer->name : '';
            $proposal->proposal = Proposal::proposalNumberFormat($proposal->proposal_id);

            $proposalId    = Crypt::encrypt($proposal->id);
            $proposal->url = route('proposal.pdf', $proposalId);

            // first parameter proposal
            event(new ResentProposal($proposal));
            //Email notification
            if((!empty(company_setting('Proposal Status Updated')) && company_setting('Proposal Status Updated')  == true) )
            {
                $uArr = [
                    'proposal_name' => $proposal->name,
                    'proposal_number' => $proposal->proposal,
                    'proposal_url' => $proposal->url,
                ];

                try
                {
                    $resp = EmailTemplate::sendEmailTemplate('Proposal Send', [$customer->id => $customer->email],$uArr);
                }
                catch(\Exception $e)
                {
                    $resp['error'] = $e->getMessage();
                }
                return redirect()->back()->with('success', __('Proposal successfully sent.') . ((isset($resp['error'])) ? '<br> <span class="text-danger">' . $resp['error'] . '</span>' : ''));
            }
            return redirect()->back()->with('success', __('Proposal sent email notification is off.'));
        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function sent($id)
    {

        if (\Auth::user()->can('proposal send'))
        {
            $proposal            = Proposal::where('id', $id)->first();
            $proposal->send_date = date('Y-m-d');
            $proposal->status    = 1;
            $proposal->save();
            if(module_is_active('Account'))
            {
                $customer         = \Modules\Account\Entities\Customer::where('user_id', $proposal->customer_id)->first();
                if(empty($customer))
                {
                    $customer         = User::where('id', $proposal->customer_id)->first();
                }
            }
            else
            {
                $customer         = User::where('id', $proposal->customer_id)->first();

            }
            $proposal->name     = !empty($customer) ? $customer->name : '';

            $proposal->proposal = Proposal::proposalNumberFormat($proposal->proposal_id);

            $proposalId    = Crypt::encrypt($proposal->id);
            $proposal->url = route('proposal.pdf', $proposalId);

            // first parameter proposal
            event(new SentProposal($proposal));

            //Email notification
            if(!empty(company_setting('Proposal Status Updated')) && company_setting('Proposal Status Updated')  == true)
            {
                $uArr = [
                    'proposal_name' => $proposal->name,
                    'proposal_number' => $proposal->proposal,
                    'proposal_url' => $proposal->url,
                ];
                try
                {
                    $resp = EmailTemplate::sendEmailTemplate('Proposal Send', [$customer->id => $customer->email],$uArr);
                }
                catch(\Exception $e)
                {
                    $resp['error'] = $e->getMessage();
                }
                return redirect()->back()->with('success', __('Proposal successfully sent.') . ((isset($resp['error'])) ? '<br> <span class="text-danger">' . $resp['error'] . '</span>' : ''));
            }
            return redirect()->back()->with('success', __('Proposal sent email notification is off.'));
        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    public function proposal($proposal_id)
    {
        $proposalId = Crypt::decrypt($proposal_id);
        $proposal   = Proposal::where('id', $proposalId)->first();
        if(module_is_active('Account'))
        {
            $customer         = \Modules\Account\Entities\Customer::where('user_id', $proposal->customer_id)->first();
        }
        else
        {
            $customer         = User::where('id', $proposal->customer_id)->first();
        }

        $items         = [];
        $totalTaxPrice = 0;
        $totalQuantity = 0;
        $totalRate     = 0;
        $totalDiscount = 0;
        $taxesData     = [];
        foreach ($proposal->items as $product) {
            $item              = new \stdClass();
            if($proposal->proposal_module == "taskly")
            {
                $item->name        = !empty($product->product())?$product->product()->title:'';
            }
            elseif($proposal->proposal_module == "account")
            {
                $item->name        = !empty($product->product()) ? $product->product()->name : '';
                $item->product_type   = !empty($product->product_type) ? $product->product_type : '';
            }
            $item->quantity    = $product->quantity;
            $item->tax         = $product->tax;
            $item->discount    = $product->discount;
            $item->price       = $product->price;
            $item->description = $product->description;

            $totalQuantity += $item->quantity;
            $totalRate     += $item->price;
            $totalDiscount += $item->discount;

            if(module_is_active('ProductService'))
            {
                $taxes = \Modules\ProductService\Entities\Tax::tax($product->tax);

                $itemTaxes = [];
                if(!empty($item->tax))
                {
                    $tax_price = 0;
                    foreach($taxes as $tax)
                    {
                        $taxPrice      = Invoice::taxRate($tax->rate, $item->price, $item->quantity,$item->discount);
                        $tax_price  += $taxPrice;
                        $totalTaxPrice += $taxPrice;

                        $itemTax['name']  = $tax->name;
                        $itemTax['rate']  = $tax->rate . '%';
                        $itemTax['price'] = currency_format_with_sym($taxPrice,$proposal->created_by);
                        $itemTaxes[]      = $itemTax;


                        if(array_key_exists($tax->name, $taxesData))
                        {
                            $taxesData[$tax->name] = $taxesData[$tax->name] + $taxPrice;
                        }
                        else
                        {
                            $taxesData[$tax->name] = $taxPrice;
                        }
                    }
                    $item->itemTax = $itemTaxes;
                    $item->tax_price = $tax_price;

                }
                else
                {
                    $item->itemTax = [];
                }

                $items[] = $item;
            }
        }
        $proposal->itemData      = $items;
        $proposal->totalTaxPrice = $totalTaxPrice;
        $proposal->totalQuantity = $totalQuantity;
        $proposal->totalRate     = $totalRate;
        $proposal->totalDiscount = $totalDiscount;
        $proposal->taxesData     = $taxesData;

        if(module_is_active('CustomField')){
            $proposal->customField = \Modules\CustomField\Entities\CustomField::getData($proposal, 'Base','Proposal');
            $customFields             = \Modules\CustomField\Entities\CustomField::where('workspace_id', '=', $proposal->workspace)->where('module', '=', 'Base')->where('sub_module','Proposal')->get();
        }else{
            $customFields = null;
        }


        //Set your logo
        $company_logo = get_file(sidebar_logo());
        $proposal_logo = company_setting('proposal_logo',$proposal->created_by);
         if(isset($proposal_logo) && !empty($proposal_logo))
        {
            $img  = get_file($proposal_logo);
        }
        else{
            $img  = $company_logo;
        }
        if ($proposal) {
            $color      = '#'.(!empty(company_setting('proposal_color',$proposal->created_by,$proposal->workspace)) ? company_setting('proposal_color',$proposal->created_by,$proposal->workspace) : 'ffffff');
            $font_color = User::getFontColor($color);
            $proposal_template  = (!empty(company_setting('proposal_template',$proposal->created_by,$proposal->workspace)) ? company_setting('proposal_template',$proposal->created_by,$proposal->workspace) : 'template1');
            $settings['site_rtl'] = company_setting('site_rtl',$proposal->created_by,$proposal->workspace);
            $settings['company_name'] = company_setting('company_name',$proposal->created_by,$proposal->workspace);
            $settings['company_email'] = company_setting('company_email',$proposal->created_by,$proposal->workspace);
            $settings['company_telephone'] = company_setting('company_telephone',$proposal->created_by,$proposal->workspace);
            $settings['company_address'] = company_setting('company_address',$proposal->created_by,$proposal->workspace);
            $settings['company_city'] = company_setting('company_city',$proposal->created_by,$proposal->workspace);
            $settings['company_state'] = company_setting('company_state',$proposal->created_by,$proposal->workspace);
            $settings['company_zipcode'] = company_setting('company_zipcode',$proposal->created_by,$proposal->workspace);
            $settings['company_country'] = company_setting('company_country',$proposal->created_by,$proposal->workspace);
            $settings['registration_number'] = company_setting('registration_number',$proposal->created_by,$proposal->workspace);
            $settings['tax_type'] = company_setting('tax_type',$proposal->created_by,$proposal->workspace);
            $settings['vat_number'] = company_setting('vat_number',$proposal->created_by,$proposal->workspace);
            $settings['proposal_footer_title'] = company_setting('proposal_footer_title',$proposal->created_by,$proposal->workspace);
            $settings['proposal_footer_notes'] = company_setting('proposal_footer_notes',$proposal->created_by,$proposal->workspace);
            $settings['proposal_shipping_display'] = company_setting('proposal_shipping_display',$proposal->created_by,$proposal->workspace);
            $settings['proposal_template'] = company_setting('proposal_template',$proposal->created_by,$proposal->workspace);
            $settings['proposal_color'] = company_setting('proposal_color',$proposal->created_by,$proposal->workspace);
            return view('proposal.templates.' .$proposal_template, compact('proposal', 'color', 'settings', 'customer', 'img', 'font_color','customFields'));
        } else {
            return redirect()->back()->with('error', __('Permission denied.'));
        }
    }
    function invoiceNumber()
    {
        $latest = company_setting('invoice_starting_number');
        if($latest == null)
        {
            return 1;
        }
        else
        {
            return $latest;
        }
    }
    public function saveTemplateSettings(Request $request)
    {
        $user = Auth::user();
        if($request->hasFile('proposal_logo'))
        {
            $proposal_logo         = $user->id.'_proposal_logo'.time().'.png';

            $uplaod = upload_file($request,'proposal_logo',$proposal_logo,'proposal_logo');
            if($uplaod['flag'] == 1)
            {
                $url = $uplaod['url'];
                $old_proposal_logo = company_setting('proposal_logo');
                if(!empty($old_proposal_logo) && check_file($old_proposal_logo))
                {
                    delete_file($old_proposal_logo);
                }
            }
            else
            {
                return redirect()->back()->with('error',$uplaod['msg']);
            }
        }
        $userContext = new Context(['user_id' => Auth::user()->id,'workspace_id'=>getActiveWorkSpace()]);
        \Settings::context($userContext)->set('proposal_template', $request->proposal_template);
        \Settings::context($userContext)->set('proposal_color', !empty($request->proposal_color) ? $request->proposal_color : 'ffffff');
        \Settings::context($userContext)->set('proposal_prefix', !empty($request->proposal_prefix) ? $request->proposal_prefix : '#PROP0');
        \Settings::context($userContext)->set('proposal_starting_number', !empty($request->proposal_starting_number) ? $request->proposal_starting_number : '1');
        \Settings::context($userContext)->set('proposal_footer_title', !empty($request->proposal_footer_title) ? $request->proposal_footer_title : '');
        \Settings::context($userContext)->set('proposal_footer_notes', !empty($request->proposal_footer_notes) ? $request->proposal_footer_notes : '');
        \Settings::context($userContext)->set('proposal_shipping_display', !empty($request->proposal_shipping_display) ? $request->proposal_shipping_display : 'off');
        if($request->hasFile('proposal_logo'))
        {
            \Settings::context($userContext)->set('proposal_logo', $url);
        }

        return redirect()->back()->with('success', __('Proposal Print setting save sucessfully.'));
    }
    public function previewInvoice($template, $color)
    {
        $proposal = new Proposal();

        $customer                   = new \stdClass();
        $customer->email            = '<Email>';
        $customer->shipping_name    = '<Customer Name>';
        $customer->shipping_country = '<Country>';
        $customer->shipping_state   = '<State>';
        $customer->shipping_city    = '<City>';
        $customer->shipping_phone   = '<Customer Phone Number>';
        $customer->shipping_zip     = '<Zip>';
        $customer->shipping_address = '<Address>';
        $customer->billing_name     = '<Customer Name>';
        $customer->billing_country  = '<Country>';
        $customer->billing_state    = '<State>';
        $customer->billing_city     = '<City>';
        $customer->billing_phone    = '<Customer Phone Number>';
        $customer->billing_zip      = '<Zip>';
        $customer->billing_address  = '<Address>';

        $totalTaxPrice = 0;
        $taxesData     = [];

        $items = [];
        for($i = 1; $i <= 3; $i++)
        {
            $item           = new \stdClass();
            $item->name     = 'Item ' . $i;
            $item->quantity = 1;
            $item->tax      = 5;
            $item->discount = 50;
            $item->price    = 100;
            $item->description    = 'In publishing and graphic design, Lorem ipsum is a placeholder';

            $taxes = [
                'Tax 1',
                'Tax 2',
            ];

            $itemTaxes = [];
            foreach($taxes as $k => $tax)
            {
                $taxPrice         = 10;
                $totalTaxPrice    += $taxPrice;
                $itemTax['name']  = 'Tax ' . $k;
                $itemTax['rate']  = '10 %';
                $itemTax['price'] = '$10';
                $itemTaxes[]      = $itemTax;
                if(array_key_exists('Tax ' . $k, $taxesData))
                {
                    $taxesData['Tax ' . $k] = $taxesData['Tax 1'] + $taxPrice;
                }
                else
                {
                    $taxesData['Tax ' . $k] = $taxPrice;
                }
            }
            $item->itemTax = $itemTaxes;
            $item->tax_price = 10;
            $items[]       = $item;
        }

        $proposal->proposal_id = 1;
        $proposal->issue_date  = date('Y-m-d H:i:s');
        $proposal->due_date    = date('Y-m-d H:i:s');
        $proposal->itemData    = $items;

        $proposal->totalTaxPrice = 60;
        $proposal->totalQuantity = 3;
        $proposal->totalRate     = 300;
        $proposal->totalDiscount = 10;
        $proposal->taxesData     = $taxesData;
        $proposal->customField   = [];
        $customFields            = [];

        $preview    = 1;
        $color      = '#' . $color;
        $font_color = User::getFontColor($color);

        $company_logo = get_file(sidebar_logo());

        $proposal_logo =  company_setting('proposal_logo');

        if(!empty($proposal_logo))
        {
            $img = get_file($proposal_logo);
        }
        else{
            $img          =  $company_logo;
        }
        $settings['site_rtl'] = company_setting('site_rtl');
        $settings['company_name'] = company_setting('company_name');
        $settings['company_email'] = company_setting('company_email');
        $settings['company_telephone'] = company_setting('company_telephone');
        $settings['company_address'] = company_setting('company_address');
        $settings['company_city'] = company_setting('company_city');
        $settings['company_state'] = company_setting('company_state');
        $settings['company_zipcode'] = company_setting('company_zipcode');
        $settings['company_country'] = company_setting('company_country');
        $settings['registration_number'] = company_setting('registration_number');
        $settings['tax_type'] = company_setting('tax_type');
        $settings['vat_number'] = company_setting('vat_number');
        $settings['proposal_footer_title'] = company_setting('proposal_footer_title');
        $settings['proposal_footer_notes'] = company_setting('proposal_footer_notes');
        $settings['proposal_shipping_display'] = company_setting('proposal_shipping_display');
        $settings['proposal_template'] = company_setting('proposal_template');
        $settings['proposal_color'] = company_setting('proposal_color');

        return view('proposal.templates.' . $template, compact('proposal', 'preview', 'color', 'img', 'settings', 'customer', 'font_color', 'customFields'));
    }
    public function ProposalSectionGet(Request $request)
    {
        $type = $request->type;
        $acction = $request->acction;
        $proposal = [];
        if($acction == 'edit')
        {
            $proposal = Proposal::find($request->proposal_id);
        }

        if($request->type == "product" && module_is_active('Account'))
        {
            $product_services = \Modules\ProductService\Entities\ProductService::where('workspace_id', getActiveWorkSpace())->get()->pluck('name', 'id');
            $product_services_count =$product_services->count();
            $product_type = ProductService::$product_type;
            $returnHTML = view('proposal.section',compact('product_services','product_type','type' ,'acction','proposal','product_services_count'))->render();
                $response = [
                    'is_success' => true,
                    'message' => '',
                    'html' => $returnHTML,
                ];
            return response()->json($response);
        }
        elseif($request->type == "project" && module_is_active('Taskly'))
        {
            $projects = \Modules\Taskly\Entities\Project::where('workspace', getActiveWorkSpace())->projectonly();
            if($request->project_id != 0)
            {
                $projects = $projects->where('id',$request->project_id);
            }
            $projects = $projects->first();
            $tasks=[];
            if(!empty($projects)){

                $tasks = \Modules\Taskly\Entities\Task::where('project_id', $projects->id)->get()->pluck('title', 'id');
                if($acction != 'edit')
                {
                    $tasks->prepend('--', '');
                }
            }
            $returnHTML = view('proposal.section',compact('tasks','type' ,'acction','proposal'))->render();
                $response = [
                    'is_success' => true,
                    'message' => '',
                    'html' => $returnHTML,
                ];
            return response()->json($response);
        }
        else
        {
            return [];
        }
    }
    public function TaxDetailGet(Request $request)
    {
        $taxs_data = [];
        if(module_is_active('ProductService'))
        {
            $taxs_data = \Modules\ProductService\Entities\Tax::whereIn('id',$request->Taxid)->where('workspace_id', getActiveWorkSpace())->get();
        }
        return $taxs_data;
    }
    public function getTax(Request $request){

        if(module_is_active('ProductService'))
        {
            $taxs_data = \Modules\ProductService\Entities\Tax::whereIn('id',$request->tax_id)->where('workspace_id', getActiveWorkSpace())->get();
            return json_encode($taxs_data);
        }else{
            $taxs_data = [];
            return json_encode($taxs_data);
        }

    }
    public function productDestroy(Request $request)
    {
        if(Auth::user()->can('proposal product delete'))
        {
            ProposalProduct::where('id', '=', $request->id)->delete();

            return response()->json(['success' => __('Proposal product successfully deleted')]);
        }
        else
        {
            return response()->json(['error' => __('Permission denied.')]);
        }
    }
    public function proposalAttechment(Request $request,$id)
    {
        $proposal = Proposal::find($id);
        $file_name = time() . "_" . $request->file->getClientOriginalName();

        $upload = upload_file($request,'file',$file_name,'proposal_attachment',[]);

        $fileSizeInBytes = \File::size($upload['url']);
        $fileSizeInKB = round($fileSizeInBytes / 1024, 2);

        if ($fileSizeInKB < 1024) {
            $fileSizeFormatted = $fileSizeInKB . " KB";
        } else {
            $fileSizeInMB = round($fileSizeInKB / 1024, 2);
            $fileSizeFormatted = $fileSizeInMB . " MB";
        }

        if($upload['flag'] == 1){
            $file                 = ProposalAttechment::create(
                [
                    'proposal_id' => $proposal->id,
                    'file_name'  => $file_name,
                    'file_path' => $upload['url'],
                    'file_size' => $fileSizeFormatted,
                ]
            );
            $return               = [];
            $return['is_success'] = true;


            return response()->json($return);
        }else{

            return response()->json(
                [
                    'is_success' => false,
                    'error' => $upload['msg'],
                ], 401
            );
        }
    }

    public function proposalAttechmentDestroy($id)
    {
        $file = ProposalAttechment::find($id);

        if (!empty($file->file_path)) {
            delete_file($file->file_path);
        }
        $file->delete();
        return redirect()->back()->with('success', __('File successfully deleted.'));
    }
}