MMCT TEAM
Server IP : 103.191.208.50  /  Your IP : 216.73.216.53
Web Server : LiteSpeed
System : Linux orion.herosite.pro 4.18.0-553.53.1.lve.el8.x86_64 #1 SMP Wed May 28 17:01:02 UTC 2025 x86_64
User : celkcksm ( 1031)
PHP Version : 7.4.33
Disable Function : show_source, system, shell_exec, passthru, popen, exec
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /home/celkcksm/hrms.ncriptech.com/app/Repositories/Settings/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/celkcksm/hrms.ncriptech.com/app/Repositories/Settings/AppSettingsRepository.php
<?php

namespace App\Repositories\Settings;

use App\Models\User;
use App\Enums\AttendanceMethod;
use App\Models\UserShiftAssign;
use Illuminate\Support\Facades\DB;
use App\Models\UserDocumentRequest;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Support\Facades\Auth;
use App\Models\coreApp\Setting\IpSetup;
use Illuminate\Support\Facades\Storage;
use App\Models\Hrm\AppSetting\AppScreen;
use App\Repositories\DashboardRepository;
use App\Services\Hrm\EmployeeBreakService;
use App\Helpers\CoreApp\Traits\FileHandler;
use App\Repositories\DutyScheduleRepository;
use App\Models\coreApp\Setting\CompanyConfig;
use App\Http\Resources\Hrm\AppScreenCollection;
use App\Repositories\Hrm\Notice\NoticeRepository;
use App\Repositories\Settings\ApiSetupRepository;
use App\Helpers\CoreApp\Traits\ApiReturnFormatTrait;
use App\Models\coreApp\Relationship\RelationshipTrait;
use App\Repositories\Hrm\Content\AllContentRepository;
use App\Repositories\Settings\CompanyConfigRepository;
use Modules\MultiShift\Repositories\MultiShiftRepository;
use App\Repositories\Settings\ProfileUpdateSettingRepository;

class AppSettingsRepository
{
    use RelationshipTrait, ApiReturnFormatTrait, FileHandler;

    protected $companyConfig;
    protected $appScreen;
    protected $dashboardRepository;
    protected $dutyScheduleRepository;
    protected $allContents;
    protected $config_repo;
    protected $thirdPartyApiRepository;
    protected $notice_repository;
    protected $profileUpdateSettingRepository;
    protected $documentRequest;

    public function __construct(
        CompanyConfig           $companyConfig,
        AppScreen               $appScreen,
        DashboardRepository     $dashboardRepository,
        CompanyConfigRepository $companyConfigRepo,
        DutyScheduleRepository  $dutyScheduleRepository,
        AllContentRepository    $allContents,
        ApiSetupRepository      $thirdPartyApiRepository,
        NoticeRepository        $notice_repository,
        ProfileUpdateSettingRepository $profileUpdateSettingRepository,
        UserDocumentRequest     $documentRequest,
    )
    {
        $this->companyConfig = $companyConfig;
        $this->appScreen = $appScreen;
        $this->dashboardRepository = $dashboardRepository;
        $this->config_repo = $companyConfigRepo;
        $this->dutyScheduleRepository = $dutyScheduleRepository;
        $this->allContents = $allContents;
        $this->thirdPartyApiRepository = $thirdPartyApiRepository;
        $this->notice_repository = $notice_repository;
        $this->profileUpdateSettingRepository = $profileUpdateSettingRepository;
        $this->documentRequest = $documentRequest;
    }

    public function companyBaseSettings()
    {
        date_default_timezone_set(auth()->user()->country->time_zone??'Asia/Dhaka');

        //get con=
        $data = [];

        $data['is_admin'] = auth()->user()->is_admin ? true : false;
        $data['is_hr'] = auth()->user()->is_hr ? true : false;
        $data['is_manager'] = auth()->user()->myTeam()->count() > 0 ? true : false;
        $data['is_face_registered'] = auth()->user()->face_data ? true : false;
        $data['multi_checkin'] = isset($this->companySetup()['multi_checkin']) ? $this->companySetup()['multi_checkin']== 1 ? true:false: false;
        $data['location_bind'] = isset($this->companySetup()['location_check']) ? $this->companySetup()['location_check']== 1 ? true:false: false;
        $data['is_ip_enabled'] = $this->isIpRestricted();
        $data['departments']=$this->profileUpdateSettingRepository->getAllDepartment()->getData()->data->departments;
        $data['designations']=$this->profileUpdateSettingRepository->getAllDesignation()->getData()->data->designations;
        $data['employee_types']=config('hrm.employee_type');
        $data['permissions'] = auth()->user()->permissions;
        
        $data['time_wish'] = $this->timeWish();
        $data['time_zone'] = auth()->user()->country->time_zone??'Asia/Dhaka';
        $data['currency_symbol'] = $this->companySetup()['currency_symbol'] ?? '$';
        $data['currency_code'] = $this->companySetup()['currency_code'] ?? 'USD';
        $data['attendance_method'] = $this->companySetup()['attendance_method'] ?? AttendanceMethod::NORMAL;
        $data['duty_schedule'] = $this->dutyScheduleRepository->getUserToDaySchedule();
        $data['location_services'] = [
            'google'=> $this->thirdPartyApiRepository->getConfig('google') ? $this->thirdPartyApiRepository->getConfig('google')->status_id == 1 ? true : false:false,
            'barikoi'=> $this->thirdPartyApiRepository->getConfig('barikoi')?$this->thirdPartyApiRepository->getConfig('barikoi')->status_id == 1 ? true : false:false,
        ];
        $data['google_api_key'] = $this->thirdPartyApiRepository->getConfig('google')->key??null;
        $data['barikoi_api'] = $this->thirdPartyApiRepository->location_api();
        $data['break_status'] = resolve(EmployeeBreakService::class)->isBreakRunning();
        $data['live_tracking'] = ['app_sync_time' => $this->appSyncTime(), 'live_data_store_time' => $this->liveDataStoreTime()];
        $data['location_service'] = $this->locationService();

        //$data['app_theme'] = DB::table('settings')->where('name', 'default_theme')->value('value');
        $appTheme = DB::table('settings')->where('name', 'default_theme')->value('value');
        if($appTheme === 'app_theme_1'){
            $app_text = 'earth';
        } elseif($appTheme === 'app_theme_2'){
            $app_text = 'mars';
        } elseif($appTheme === 'app_theme_3'){
            $app_text = 'neptune';
        }
        $data['app_theme'] = $app_text;
        
        $data['is_team_lead']=auth()->user()->myTeam()->count() > 0 ? true : false;
        $data['notification_channels'] = auth()->user()->notification_channels();

        $data['multi_shift'] = $this->getMultipleShift() ?? [];

        $filePath = base_path('modules_statuses.json');

        if (file_exists($filePath)) {
            $json_content = file_get_contents($filePath);
            $modules = json_decode($json_content, true);
        } else {
            $modules = [];
        }

        $data['modules'] = $modules;

        $attendance_method_permission = auth()->user()->attendance_method;

        if (!$attendance_method_permission) {
            $data['attendance_methods'] = [];
        }
        if (isset($attendance_method_permission['normal_attendance']) && $attendance_method_permission['normal_attendance'] === 1) {
            $data['attendance_methods'] = [
                [
                    'title' => 'Normal Attendance', 
                    'short_description' => "“Normal attendance” simply means regular and expected presence.", 
                    'slug' => 'normal_attendance',
                    'image' => global_asset('images/attendance/normal-attendance.png')
                ]
            ];
        }
        if (isModuleActive('FaceAttendance') && isset($attendance_method_permission['face_attendance']) && $attendance_method_permission['face_attendance'] === 1) {
            $data['attendance_methods'][] = [
                'title' => 'Face Attendance', 
                'short_description' => "“Face attendance” tracked through facial recognition.", 
                'slug' => 'face_attendance',
                'image' => global_asset('images/attendance/face-attendance.png')
            ];
        }

        if (isModuleActive('QrBasedAttendance') && isset($attendance_method_permission['qr_based_attendance']) && $attendance_method_permission['qr_based_attendance'] === 1) {
            $data['attendance_methods'][] = [
                'title' => 'QR Attendance', 
                'short_description' => "“QR attendance” involves using QR codes for tracking presence.", 
                'slug' => 'qr_attendance',
                'image' => global_asset('images/attendance/qr-attendance.png')
            ];
        }

        if (isModuleActive('SelfieBasedAttendance') && isset($attendance_method_permission['selfie_based_attendance']) && $attendance_method_permission['selfie_based_attendance'] === 1) {
            $data['attendance_methods'][] = [
                'title' => 'Selfie Attendance', 
                'short_description' => "“Selfie attendance” individuals confirm their presence by taking a selfie.", 
                'slug' => 'selfie_attendance',
                'image' => global_asset('images/attendance/selfie-attendance.png')
            ];
        }

        // OfflineBasedAttendance
        if (isModuleActive('OfflineBasedAttendance') && isset($attendance_method_permission['offline_based_attendance']) && $attendance_method_permission['offline_based_attendance'] === 1) {
            $data['attendance_methods'][] = [
                'title' => 'Offline Attendance', 
                'short_description' => "Offline attendance individuals confirm their presence by giving attendance offline.", 
                'slug' => 'offline_attendance',
                'image' => global_asset('images/attendance/qr-attendance.png')
            ];
        }

        return $this->responseWithSuccess('Base settings information', $data, 200);
    }


    public function getMultipleShift()
    {
        $user_shift_list = [];
        
        foreach (auth()->user()->shifts as $key => $item) {
            $user_shift_list[] = [
                'shift_id' => $item->shift_id,
                'name' => $item->shift->name,
            ];
        }
        if(!@$user_shift_list){
            $user_shift_list[] = [
                'shift_id' => auth()->user()->shift_id,
                'name' => auth()->user()->shift->name,
            ];
        }
        return $user_shift_list;
    }

    public function isIpRestricted(): bool
    {
        $companyId = $this->companyInformation()->id;
        $isIpEnabled = CompanyConfig::where([
            'company_id' => $this->companyInformation()->id,
            'key' => 'ip_check',
            'value' => 1
        ])->first();
        if ($isIpEnabled) {
            return true;
        } else {
            return false;
        }
    }

    public function homeScreenData()
    {
        $report_permission="false";
        if (hasPermission('report') || hasPermission('report_menu')) {
            $report_permission="true";
        }
        $menus = $this->appScreen->query()->where('status_id', 1)->orderBy('position', 'ASC')
            ->select('name','slug','position','icon')
            ->when($report_permission=="false", function ($query) {
                return $query->where('slug', '!=', 'report');
            })
            ->get();
        foreach ($menus as $menu) {
            $image_type = pathinfo($menu->icon,PATHINFO_EXTENSION);
            $menu->image_type = $image_type;
            $menu->icon = my_asset($menu->icon);
        }
        $this_month_notice=$this->notice_repository->currentMonthNotice();

        $collection = [
            'data' => $menus,
            'total_notice' => $this_month_notice
        ];

        // $data = new AppScreenCollection($menus);
        return $this->responseWithSuccess('App home screen menus', $collection, 200);
    }

//    public function newTeamMate()
//    {
//        $menus = $this->appScreen->query()
//            ->where(['company_id' => $this->companyInformation()->id, 'department_id' => auth()->user()->department_id, 'status_id' => 1])
//            ->orderBy('position', 'ASC')
//            ->select('id', 'company_id', 'department_id', 'status_id')
//            ->get();
//
////        return $this->responseWithSuccess('App home screen menus', $data, 200);
//    }

    public function appScreenSetup()
    {
        $data = $this->appScreen->get();

        return $data;
    }

    public function appScreenSetupUpdate($request)
    {


        $data = \App\Models\Hrm\AppSetting\AppScreen::find($request->id);
        if ($request->status == 'true') {
            $data->status_id = 1;
        } else {
            $data->status_id = 4;
        }
        $data->save();

        return true;
    }

    public function timeWish()
    {
        // set default time zone
        date_default_timezone_set(auth()->user()->country->time_zone??'Asia/Dhaka');

        $current_hour = date('H');
        $time_wish = [];

        if ($current_hour >= 6 && $current_hour < 12) {     // 6 - 11
            $time_wish['wish'] = _trans('response.Good Morning');
            $time_wish['sub_title'] = _trans('response.Have a good day with full of productivity and good vibes!');
            $time_wish['image'] = global_asset($this->dashboardRepository->getStatisticsImage('good-morning'));
        } elseif ($current_hour >= 12 && $current_hour < 14) {  //12-2 PM
            $time_wish['wish'] = _trans('response.Good Day');
            $time_wish['sub_title'] = _trans('response.Best wishes for your day!');
            $time_wish['image'] = global_asset($this->dashboardRepository->getStatisticsImage('good-day'));
        } elseif ($current_hour >= 12 && $current_hour < 16) {  //2-4 PM
            $time_wish['wish'] = _trans('response.Good Afternoon');
            $time_wish['sub_title'] = _trans('response.You almost done for today');
            $time_wish['image'] = global_asset($this->dashboardRepository->getStatisticsImage('good-evening'));
        } elseif ($current_hour >= 16 && $current_hour < 19) {  //4-6 PM
            $time_wish['wish'] = _trans('response.Good Evening');
            $time_wish['sub_title'] = _trans('response.Thank you for your hard work today');
            $time_wish['image'] = global_asset($this->dashboardRepository->getStatisticsImage('good-evening'));
        } elseif ($current_hour >= 19) {  //7 pm
            $time_wish['wish'] = _trans('response.Good Night');
            $time_wish['sub_title'] = _trans('response.Have a good night');
            $time_wish['image'] = global_asset($this->dashboardRepository->getStatisticsImage('good-night'));
        } elseif ($current_hour < 6) {  //6 AM
            $time_wish['wish'] = _trans('response.Good Night');
            $time_wish['sub_title'] = _trans('response.Have a good night');
            $time_wish['image'] = global_asset($this->dashboardRepository->getStatisticsImage('good-night'));
        }
        return $time_wish;

    }

    public function companySetup()
    {
        $configs = $this->config_repo->getConfigs();
        $config_array = [];
        foreach ($configs as $key => $config) {
            $config_array[$config->key] = $config->value;
        }
        $data = $config_array;
        return $data;
    }

    public function getIpAddress()
    {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ip_address = $_SERVER['HTTP_CLIENT_IP'];
        } //whether ip is from proxy
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } //whether ip is from remote address
        else {
            $ip_address = $_SERVER['REMOTE_ADDR'];
        }
        return $ip_address;
    }


    public function allContents($slug)
    {
        $data['contents'] = $this->allContents->getContent($slug);
        return $this->responseWithSuccess('All Contents', $data, 200);
    }


    public function appSyncTime()
    {
        $companyId = $this->companyInformation()->id;
        $data = CompanyConfig::where([
            'company_id' => $this->companyInformation()->id,
            'key' => 'app_sync_time',
        ])->first();

        if ($data) {
            return $data->value;
        } else {
            return '1';
        }
    }

    public function liveDataStoreTime()
    {
        $companyId = $this->companyInformation()->id;
        $data = CompanyConfig::where([
            'company_id' => $this->companyInformation()->id,
            'key' => 'live_data_store_time',
        ])->first();

        if ($data) {
            return $data->value;
        } else {
            return '2';
        }
    }


    public function locationService()
    {
        $companyId = $this->companyInformation()->id;
        $data = CompanyConfig::where([
            'company_id' => $this->companyInformation()->id,
            'key' => 'location_service',
            'value' => 1
        ])->first();

        if ($data) {
            return true;
        } else {
            return false;
        }
    }


    public function getScreenSetup()
    {
        try {
            $data = $this->appScreen->query()->where('status_id', 1)->pluck('slug');
            return $data;
        } catch (\Throwable $th) {
        }
    }

    public function updateTitle($data){
        try {
            $appSetting = $this->appScreen->findOrFail($data->id);
            $appSetting->name = $data->title;
            $appSetting->save();

            Toastr::success(_trans('response.Operation successful'), 'Success');
            return redirect()->back();
        } catch (\Throwable $th) {
            Toastr::error(_trans('response.Something went wrong!'), 'Error');
            return redirect()->back();
        }
    }

    public function updateIcon($data){
        try {
            $appSetting = $this->appScreen->findOrFail($data->id);
            // Delete Old Icon
            if(Storage::exists($appSetting->icon)){
                Storage::delete($appSetting->icon);
            }

            // Upload New Icon
            $file = $data->file('icon');
            $final_path = $this->uploadImage($file, 'uploads/appSettings/icon')->img_path;

            // Set Icon
            $appSetting->icon = $final_path;

            $appSetting->save();

            Toastr::success(_trans('response.Operation successful'), 'Success');
            return redirect()->back();
        } catch (\Throwable $th) {
            Toastr::error(_trans('response.Something went wrong!'), 'Error');
            return redirect()->back();
        }
    }

    public function getDocumentRequest(){
        $query = $this->documentRequest->where(['company_id' => auth()->user()->company_id, 'user_id' => auth()->user()->id]);
        $query = $query->latest()->get();
        $data['lists'] = $query;
        return $this->responseWithSuccess('All Document Request', $data, 200);
    }

    public function submitDocumentRequest($request){
        try {
            $new = new $this->documentRequest;
            $new->user_id = auth()->user()->id;
            $new->branch_id = auth()->user()->branch_id;
            $new->company_id = auth()->user()->company_id;
            $new->request_type = $request->request_type;
            $new->request_description = $request->request_description;
            $new->approved = 0;
            $new->status_id = 2;
            $new->request_date = $request->request_date;
            $new->save();

            Toastr::success(_trans('response.New Document Request Created Successfully'), 'Success');
            return redirect()->back();
        } catch (\Throwable $th) {
            Toastr::error(_trans('response.Something went wrong!'), 'Error');
            return redirect()->back();
        }
    }
    
}

MMCT - 2023