File "AdminDashboardController.php"

Full Path: /home/isoftco/public_html/hrm/app/Http/Controllers/Admin/AdminDashboardController.php
File size: 8.14 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Admin;

//Admin Dashboard controller

use App\Classes\Reply;
use App\Http\Controllers\AdminBaseController;
use App\Models\Admin;
use App\Models\Attendance;
use App\Models\Award;
use App\Models\Department;
use App\Models\EmailTemplate;
use App\Models\Employee;
use App\Models\Expense;
use App\Models\Holiday;
use App\Models\Leavetype;
use Carbon\Carbon;
use Faker\Provider\DateTime;
use Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Str;
use Lang;

class AdminDashboardController extends AdminBaseController
{

    public function __construct()
    {
        parent::__construct();
        $this->dashboardActive = 'active';
        $this->pageTitle = trans("pages.dashboard.title");
    }

    // Dashboard view page   controller
    public function index()
    {
        if(\admin()->type =='superadmin'){
            return Redirect::route('superadmin.dashboard.index');
        }
        //Expense Calculation
        $expense = DB::select(DB::raw("SELECT sum(price) as sum, m.months,u.status,employees.company_id
    FROM `expenses` u JOIN employees on employees.id=u.employee_id
AND employees.company_id = '{$this->company_id}'
RIGHT JOIN (
          SELECT 1 AS `months`
          UNION SELECT 2 AS `months`
          UNION SELECT 3 AS `months`
          UNION SELECT 4 AS `months`
          UNION SELECT 5 AS `months`
          UNION SELECT 6 AS `months`
          UNION SELECT 7 AS `months`
          UNION SELECT 8 AS `months`
          UNION SELECT 9 AS `months`
          UNION SELECT 10 AS `months`
          UNION SELECT 11 AS `months`
          UNION SELECT 12 AS `months`
         ) AS m
ON m.months = MONTH(u.purchase_date)
WHERE u.status = 'approved' OR u.status is null
GROUP BY m.months
ORDER BY m.months;"));

        foreach ($expense as $ex) {
            $expensevalue[$ex->months] = isset($ex->sum) ? $ex->sum : "''";
        }
        ksort($expensevalue);

        $this->expense = implode(',', $expensevalue);

        $this->employee_count = Employee::manager()
            ->count();

        $this->awards_count = Award::count();

        $this->department_count = Department::company($this->company_id)
            ->manager(admin()->id)
            ->count();

        $this->current_month_birthdays = Employee::currentMonthBirthday($this->company_id);

        $this->getSetupProgress();

        $this->awards = Award::with('employee')->orderBy('awards.id', 'desc')->get();
//        print_r($this->awards);die;
        $this->awards_color = ['0' => 'success', '1' => 'danger', '2' => 'warning', '3' => 'info'];

        return View::make('admin/dashboard/dashboard', $this->data);
    }


    public function ajax_load_calender()
    {

        $attendance = Attendance::company($this->company_id)->select('*', 'attendance.status as a_status')
            ->where('date', '>=', request()->get('start'))->where('date', '<', request()->get('end'))
            ->where(function ($query) {
                $query->where('application_status', '=', 'approved')
                    ->orwhere('application_status', '=', null)
                    ->orwhere('attendance.status', '=', 'present');
            })->get();


        $at = [];
        $final = [];
        foreach ($attendance as $attend) {
            $date = $attend->date->format("Y-m-d");
            $at[$date]['status'][] = $attend->a_status;
            $at[$date]['employee'][] = $attend->employee->full_name;
        }
        $i = 0;
        foreach ($at as $index => $att) {

            if (in_array('absent', $att['status'])) {
                foreach ($att['employee'] as $index_emp => $employee) {
                    if ($att['status'][$index_emp] == 'absent') {
                        $final[$i]['id'] = $i;
                        $final[$i]['type'] = 'attendance';
                        $final[$i]['date'] = $index;
                        $final[$i]['title'] = $employee;
                        $i++;
                    }
                }
            } else {
                $final[$i]['id'] = $i;
                $final[$i]['type'] = 'attendance';
                $final[$i]['date'] = $index;
                $final[$i]['title'] = 'all present';
                $i++;
            }
        }
        $holidays = Holiday::select('holidays.id', 'holidays.occassion as title', 'holidays.date')
            ->where('date', '>=', request()->get('start'))->where('date', '<', request()->get('end'))->get()
            ->toArray();

        $month = strtotime(request()->get('start'));
        $start_month = date('m', $month);
        $month_end = strtotime(request()->get('end'));
        $end_month = date('m', $month_end);
        if ($start_month == 12) {
            $employees = Employee::select('employees.id', 'employees.full_name as title', 'employees.date_of_birth as date', DB::raw('\'birthday\' as type'))
                ->where(DB::raw('month(date_of_birth)'), '<=', $start_month)
                ->where(DB::raw('month(date_of_birth)'), '<', $end_month)->get()->toArray();
        } elseif ($start_month == 11) {
            $employees = Employee::select('employees.id', 'employees.full_name as title', 'employees.date_of_birth as date', DB::raw('\'birthday\' as type'))
                ->where(DB::raw('month(date_of_birth)'), '>=', $start_month)
                ->where(DB::raw('month(date_of_birth)'), '>', $end_month)->get()->toArray();
        } else {
            $employees = Employee::select('employees.id', 'employees.full_name as title', 'employees.date_of_birth as date', DB::raw('\'birthday\' as type'))
                ->where(DB::raw('month(date_of_birth)'), '>=', $start_month)
                ->where(DB::raw('month(date_of_birth)'), '<', $end_month)->get()->toArray();
        }
        if ($employees) {
            foreach ($employees as $key => $emp_bday) {
                $temp_date = strtotime($emp_bday['date']);
                $formate_1 = date('m-d', $temp_date);
                $y = Carbon::now();
                $year = $y->year;
                $new_date = $year . '-' . $formate_1;
                $employees[$key]['date'] = $new_date;
            }
        }

        $calender = array_merge($final, $holidays, $employees);
        return json_encode($calender);
    }

    /*    Screen lock controller.When screen lock button from menu is cliked this controller is called.
    *     lock variable is set to 1 when screen is locked.SET to 0  if you dont want screen variable
    */
    public function screenlock()
    {
        $cookie = \Cookie::forever('lock', '1');

        return \Response::view("admin/screen_lock", $this->data)->withCookie($cookie);
    }

    public function resend_verify_email()
    {
        $input = Admin::where('email', admin()->email)->first();
        if ($input) {
            $code = Str::random(60);
            $input->email_token = $code;
            $input->save();

            Session::flash('success', trans("messages.passwordReset"));
            //---- RESET EMAIL SENDING-----

            $emailInfo = ['from_email' => $this->setting->email,
                'from_name' => $this->setting->name,
                'to' => $input['email'],
                'active_company' => admin()->company];
            $fieldValues = ['NAME' => $input->name, 'VERIFY_LINK' => \HTML::link('admin/verify_email/' . $code)];

            EmailTemplate::prepareAndSendEmail('NEW_ADMIN_EMAIL_VERIFICATION', $emailInfo, $fieldValues);
        } else {
            Session::flash('error', trans("messages.emailNotFound"));
        }

        return Redirect::route('admin.dashboard.index');
    }

    public function support()
    {
        $this->pageTitle = trans("core.support");
        return view("admin.support", $this->data);
    }

    public function screenlockModal()
    {
        $cookie = \Cookie::forever('lock', '1');
        \Session::put('back_url_'.admin()->type, \Request::server('HTTP_REFERER'));
        return \Response::json([
            'status' => 'success',
            'back' => \Session::get('back_url')
        ])->withCookie($cookie);
    }
}