HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/LabSettingController.php
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\LabBasicInfoRequest;
use App\Http\Requests\LabContactInfoRequest;
use App\Http\Requests\LabLicenseInfoRequest;
use App\Http\Requests\LabPaymentInfoRequest;
use Illuminate\Support\Facades\Validator;
use App\LabSettingsBasicinfo;
use App\LabSettingsContactinfo;
use App\LabSettingsLicenseinfo;
use App\LabSettingsPaymentinfo;
use Auth;
use App\Lab;
use Carbon\Carbon;
use Config;
use DB;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\QueryException;
use App\Library\S3Library;
use Throwable;

class LabSettingController extends Controller
{
    public function updateBasicInfo(LabBasicInfoRequest $request, S3Library $S3Library)
    {
        try {
            /** @var \App\User $user */
            $lab = Lab::where('user_id', auth()->user()->id)->first();
            
            if (!$lab) {
                return response()->json([
                    'code' => 404,
                    'message' => __('digimed_validation.error_response.lab_not_found_msg'),
                ], 404);
            }
    
            $validatedData = $request->validated();
            $logoPath = null;
            $favIconPath = null;
    
            if ($request->hasFile('logo')) {
                $file = $request->file('logo');
                $uploadPath = 'digimed/images/lab-settings-logo/' . $lab->id . '/';
                $uploadedImage = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|gif|svg', true, $file, $uploadPath);
                
                if ($uploadedImage['code'] == 500) {
                    return response()->json([
                        'code' => 500,
                        'message' => __('digimed_validation.image_upload_error', ['error' => $uploadedImage['msg']]),
                    ], 500);
                }
                
                if ($uploadedImage['code'] == 200) {
                    $logoPath = $uploadedImage['data'];
                }
            }
    
            if ($request->hasFile('fav_icon')) {
                $file = $request->file('fav_icon');
                $uploadPath = 'digimed/images/lab-settings-favicon/' . $lab->id . '/';
                $uploadedFav = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|gif|svg', true, $file, $uploadPath);
                
                if ($uploadedFav['code'] == 500) {
                    return response()->json([
                        'code' => 500,
                        'message' => __('digimed_validation.image_upload_error', ['error' => $uploadedFav['msg']]),
                    ], 500);
                }
                if ($uploadedFav['code'] == 200) {
                    $favIconPath = $uploadedFav['data'];
                }
            }
    
            $basicInfo = LabSettingsBasicinfo::firstOrNew(['lab_id' => $lab->id]);
            $basicInfo->app_name = $request->app_name;
            $basicInfo->logo = $logoPath ?? $basicInfo->logo;
            $basicInfo->fav_icon = $favIconPath ?? $basicInfo->fav_icon;
            $basicInfo->save();
    
            return self::sentResponse(200, [], __('digimed_validation.success_response.lab_basicinfo_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    //contact info

    public function updateContactInfo(LabContactInfoRequest $request, S3Library $S3Library)
    {
        try {
            /** @var \App\User $user */
           
            $lab = Lab::where('user_id', auth()->user()->id)->first();
            $contactInfo = LabSettingsContactinfo::firstOrNew(['lab_id' => $lab->id]);
          
            $contactInfo->lab_id = $lab->id;
            $contactInfo->email = $request->email;
            $contactInfo->phone_number = $request->phone_number;
            if (isset($request->address2)) {
                $contactInfo->address2 = $request->address2;
            }
            $contactInfo->address1 = $request->address1;
            $contactInfo->city = $request->city;
            $contactInfo->state = $request->state;
            $contactInfo->zipcode = $request->zipcode;
            $contactInfo->save();

            return self::sentResponse(200, [], __('digimed_validation.success_response.lab_contactinfo_success'));
        }catch(Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }


    //license info

    public function updateLicenseInfo(LabLicenseInfoRequest $request, S3Library $S3Library)
    {
        try {
            /** @var \App\User $user */
           
            $lab = Lab::where('user_id', auth()->user()->id)->first();
            $licenseInfo = LabSettingsLicenseinfo::firstOrNew(['lab_id' => $lab->id]);
          
            $licenseInfo->lab_id = $lab->id;
            $licenseInfo->license_no = $request->license_no;
            $licenseInfo->expiration_date = $request->expiration_date;
           
            $licenseInfo->save();

            return self::sentResponse(200, [], __('digimed_validation.success_response.lab_licenseinfo_success'));
        }catch(Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    //payment info

    public function updatePaymentInfo(LabPaymentInfoRequest $request, S3Library $S3Library)
    {
        try {
            /** @var \App\User $user */
           
            $lab = Lab::where('user_id', auth()->user()->id)->first();
            $paymentInfo = LabSettingsPaymentinfo::firstOrNew(['lab_id' => $lab->id]);
          
            $paymentInfo->lab_id = $lab->id;
            $paymentInfo->account_holder_name = $request->account_holder_name;
            $paymentInfo->bank_name = $request->bank_name;
            $paymentInfo->account_number = $request->account_number;
            $paymentInfo->ifsc_Code = $request->ifsc_Code;
            if (isset($request->currency)) {
                $paymentInfo->currency = $request->currency;
            }
            $paymentInfo->tax_charge = $request->tax_charge;
            if (isset($request->time_zone)) {
                $paymentInfo->time_zone = $request->time_zone;
            }
            $paymentInfo->save();

            return self::sentResponse(200, [], __('digimed_validation.success_response.lab_paymentinfo_success'));
        }catch(Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    //Fetch by type 1-basic,2-contact, 3-license, 4-payment
    public function fetchInfo(Request $request)
    {
        try {
            $rules = [               
                'type' => 'required|in:1,2,3,4',   
            ];
            $messages = [
                'type.required' => __('digimed_validation.form_validation_error.type_required'),
                'type.in'       => __('digimed_validation.form_validation_error.type_max'),
            ];
            $validator = Validator::make($request->all(), $rules, $messages);

            if ($validator->fails()) {
                return self::sentResponse(422, [], $validator->errors()->first()); 
            } 

            $type = $request->type;
            $lab = Lab::where('user_id', auth()->user()->id)->first();
            if (!$lab) {
                return response()->json([
                    'code' => '404',
                    'message' => __('digimed_validation.form_validation_error.lab_not_found'),
                ], 404);
            }

            // Define the mapping of types to models
            $typeMappings = [
                1 => LabSettingsBasicinfo::class,
                2 => LabSettingsContactinfo::class,
                3 => LabSettingsLicenseinfo::class,
                4 => LabSettingsPaymentinfo::class,
            ];

            // Dynamically resolve the model
            $modelClass = $typeMappings[$type];
            $data = $modelClass::where('lab_id', $lab->id)->first();

            if (!$data) {
                return response()->json([
                    'code' => '200',
                    'data' => [],
                    'message' => __('digimed_validation.error_response.fill_lab_setting_info'),
                ], 200);
            }

            if ($type == 1) {
                $data->logo_url = $data->logo_url;
                $data->fav_icon_url = $data->fav_icon_url;
            }
           
            return self::sentResponse(200, $data->toArray(), __('digimed_validation.success_response.data_fetch_success'));

        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }

}