File: /var/www/vhost/disk-apps/comfama.sports-crowd.com/app/Http/Controllers/CommentController.php
<?php
namespace App\Http\Controllers;
use App\Comment;
use App\Sucursal;
use Datatables;
use DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use DateTime;
use \Excel;
class CommentController extends Controller
{
    public function index()
    {
        // $rol = Auth::user()->rol->id;
        // if ($rol == 1 || $rol == 6) {
            $comments = Comment::orderBy('created_at', 'ASC')->get();
            $offices = Sucursal::all();
            return view('comments.comments')->with('comments', $comments)->with('offices', $offices);
        // } else {
        //     return redirect()->back();
        // }
    }
    public function createAdminComment(Request $request)
    {
        $id = $request['id'];
        $comment = Comment::find($id);
        $logObject = $comment;
        $comment->observations_admin = $request["comment"];
        $comment->sucursal_id = $request["sucursal"];
        $comment->update(); //Guarda el nuevo objeto
        $this->registerLog(Auth::user()->id, 'Respondió un comentario', json_encode($logObject), "Update", 7);
        return array('r' => true, 'm' => trans('messages.screen_comments_tag12')); //Se asigna a una respuesta en array
    }
    public function getComment(Request $request)
    {
        $id = $request['id'];
        $comment = Comment::where('id', $id)->with('deliveryMan')->with('client')->with('admin')->with('order')->get();
        //return($comment);
        return array('r' => true, 'd' => $comment); //Se asigna a una respuesta en array
    }
    public function delete(Request $request)
    {
        $id = $request['id'];
        $comment = Comment::find($id);
        $logObject = $comment;
        $comment->delete();
        $this->registerLog(Auth::user()->id, 'Eliminó un comentario', json_encode($logObject), "Delete", 16);
        return array('r' => true, 'd' => $id, 'm' => trans('messages.screen_comments_tag11'));
    }
    public function tableFilter()
    {
        $obj = $obj = DB::table('comments')
            ->join('orders', 'orders.id', '=', 'comments.order_id')
            ->join('users', 'users.id', '=', 'comments.client_id')
            ->select('comments.id', 'comments.qualification_client', 'comments.observations_client as observation',
                'orders.code', 'orders.creation_date', 'users.first_name', 'users.last_name', 'users.document')->whereNull('comments.deleted_at');
        return Datatables::of($obj)
            ->addColumn('actions', function ($obj) {
                return '<i class="fa fa-eye iconMini" onClick="clickInfoComment(' . $obj->id . ')" name="btnEditar" data-id="' . $obj->id . '"  title="Información"></i>
            <i class="fa  fa-send iconMini" onClick="clickSendComment(' . $obj->id . ')" data-id="' . $obj->id . '" title="Enviar respuesta"></i>
            <i class="fa fa-trash iconMini" onClick="clickDeleteComment(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>';
            })
            ->editColumn('name', function ($obj) {
                return '<p>' . $obj->first_name . ' ' . $obj->last_name . '</p>';
            })
            ->editColumn('rate', function ($obj) {
                if ($obj->qualification_client == 1) {
                    return '<div class="rating-stars text-center">
            <ul id="stars">
                <li class="star selected" title="' . trans('messages.screen_comments_stars_tag1') . '" data-value="1" id="li1">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="' . trans('messages.screen_comments_stars_tag2') . '" data-value="2" id="li2">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="' . trans('messages.screen_comments_stars_tag3') . '" data-value="3" id="li3">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="' . trans('messages.screen_comments_stars_tag4') . '" data-value="4" id="li4">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="' . trans('messages.screen_comments_stars_tag5') . '" data-value="5" id="li5">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
            </ul>
        </div>';
                } else if ($obj->qualification_client == 2) {
                    return '<div class="rating-stars text-center">
            <ul id="stars">
                <li class="star selected" title="Malo" data-value="1" id="li1">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star  selected" title="Regular" data-value="2" id="li2">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="Bueno" data-value="3" id="li3">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="Muy Bueno" data-value="4" id="li4">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="Excelente" data-value="5" id="li5">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
            </ul>
        </div>';
                } else if ($obj->qualification_client == 3) {
                    return '<div class="rating-stars text-center">
            <ul id="stars">
                <li class="star selected" title="Malo" data-value="1" id="li1">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star selected" title="Regular" data-value="2" id="li2">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star  selected" title="Bueno" data-value="3" id="li3">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="Muy Bueno" data-value="4" id="li4">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="Excelente" data-value="5" id="li5">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
            </ul>
        </div>';
                } else if ($obj->qualification_client == 4) {
                    return '<div class="rating-stars text-center">
            <ul id="stars">
                <li class="star selected" title="Malo" data-value="1" id="li1">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star selected" title="Regular" data-value="2" id="li2">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star selected" title="Bueno" data-value="3" id="li3">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star  selected" title="Muy Bueno" data-value="4" id="li4">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star" title="Excelente" data-value="5" id="li5">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
            </ul>
        </div>';
                } else if ($obj->qualification_client == 5) {
                    return '<div class="rating-stars text-center">
            <ul id="stars">
                <li class="star selected" title="Malo" data-value="1" id="li1">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star selected" title="Regular" data-value="2" id="li2">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star selected" title="Bueno" data-value="3" id="li3">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star selected" title="Muy Bueno" data-value="4" id="li4">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
                <li class="star  selected" title="Excelente" data-value="5" id="li5">
                    <i class="fa fa-star fa-fw starsSmall"></i>
                </li>
            </ul>
        </div>';
                } else {
                    return '<div class="rating-stars text-center">
                <ul id="stars">
                    <li class="star " title="Malo" data-value="1" id="li1">
                        <i class="fa fa-star fa-fw starsSmall"></i>
                    </li>
                    <li class="star " title="Regular" data-value="2" id="li2">
                        <i class="fa fa-star fa-fw starsSmall"></i>
                    </li>
                    <li class="star " title="Bueno" data-value="3" id="li3">
                        <i class="fa fa-star fa-fw starsSmall"></i>
                    </li>
                    <li class="star " title="Muy Bueno" data-value="4" id="li4">
                        <i class="fa fa-star fa-fw starsSmall"></i>
                    </li>
                    <li class="star  " title="Excelente" data-value="5" id="li5">
                        <i class="fa fa-star fa-fw starsSmall"></i>
                    </li>
                </ul>
            </div>';
                }
            })
            ->rawColumns(['name', 'rate', 'actions'])
            ->make(true);
    }
    public function report()
    {
        $from = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 30, date("Y")));
        $to = new DateTime();
        return Excel::create(trans('messages.screen_comments_tag13'), function ($excel) use ($from, $to) {
            $excel->sheet('Hoja 1', function ($sheet) use ($from, $to) {
                $comments = Comment::whereBetween('created_at', [$from . " 00:00:00", $to])->with('admin')->with('client')->with('deliveryMan')->with('order')->get();
                $sheet->row(1, array(
                    'Pedido', 'Fecha', 'Cliente', 'Comentario cliente', 'Calificación cliente', 'Mensajero', 'Comentario mensajero', 'Calificación mensajero', 'Administrador',
                    'Comentario administrador', 'Calificación administrador',
                ));
                $count = 2;
                foreach ($comments as $comment) {
                    //ADMIN
                    if ($comment->admin) {
                        $nameAdmin = $comment->admin->first_name . ' ' . $comment->admin->last_name;
                        $commentAdmin = $comment->observations_admin;
                        $qualificationAdmin = $comment->qualification_admin;
                    } else {
                        $nameAdmin = 'NA';
                        $commentAdmin = 'NA';
                        $qualificationAdmin = 'NA';
                    }
                    //DELIVERY MAN
                    if ($comment->deliveryMan) {
                        $nameDelivery = $comment->deliveryMan->first_name . ' ' . $comment->deliveryMan->last_name;
                        $commentDelivery = $comment->observation_delivery_man;
                        $qualificationDelivery = $comment->qualification_delivery_man;
                    } else {
                        $nameDelivery = 'NA';
                        $commentDelivery = 'NA';
                        $qualificationDelivery = 'NA';
                    }
                    //CLIENT
                    if ($comment->client) {
                        $nameClient = $comment->client->first_name . ' ' . $comment->client->last_name;
                        $commentClient = $comment->observations_client;
                        $qualificationClient = $comment->qualification_client;
                    } else {
                        $nameClient = 'NA';
                        $commentClient = 'NA';
                        $qualificationClient = 'NA';
                    }
                    $sheet->row($count, array(
                        $comment->order->code, $comment->order->creation_date,$nameClient,$commentClient,$qualificationClient,$nameDelivery,$commentDelivery,$qualificationDelivery,
                        $nameAdmin,$commentAdmin,$qualificationAdmin
                    ));
                    $count++;
                }
            });
        })->export('xls');
    }
}