Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Michael Fayez's avatar

changing currency according to location

I need help please, would like to change the currency based on location so, if the user in Saudi Arabia he will see Riyal and if he in Egypt he will see Egyptian Pound here is my code 1- In controller

<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Topbar;
use App\Models\Intro;
use App\Models\Footer;
use App\Models\Header;
use App\Models\Blog;
use App\Models\Form;
use Location;

class FormController extends Controller
{
    public function index()
    {
        
        $topbars           = Topbar::latest()->get();
        $headers           = Header::latest()->get();
        $Footers           = Footer::latest()->get();
        $Blogs             = Blog::latest()->limit(3)->get();
        $forms             = Form::latest()->get();
        $ip                = request()->ip();
        $data              = Location::get($ip); 

        return view ('frontend.form', compact( 'topbars', 'headers',  'Footers', 'Blogs', 'forms', 'ip', 'data'));
    }
}

2- in Livewire

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\Form;
class Formwizard extends Component
{
    public $currentStep = 1;
    public $name, $consultaName, $major, $specific, $subject, $studyType, $timetype, $status, $data;
    public $consultantTitle, $start_time, $riyalTitle, $riyalPrice,$dollarTitle, $dollarPrice,$leTitle, $lePrice;
    public $successMessage = '';

    public function render()
    {
        return view('livewire.formwizard');
    }
    public function firstStepSubmit()
    {
        $validatedData = $this->validate([
            'name'         => 'required',
            'consultaName' => 'required',
            'major'        => 'required',
            'specific'     => 'required',
            'subject'      => 'required',
        ]);

        $this->currentStep = 2;
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    public function secondStepSubmit()
    {
        $validatedData = $this->validate([
            'studyType'          => 'required',
            'timetype'           => 'required',
            'consultantTitle'    => 'required',
            'start_time'         => 'required',
            'riyal.title'        => ['nullable', 'integer'],
            'riyal.price'        => ['nullable', 'integer'],
            'dollar.title'       => ['nullable', 'integer'],
            'dollar.price'       => ['nullable', 'integer'],
            'le.title'           => ['nullable', 'integer'],
            'le.price'           => ['nullable', 'integer'],
        ]);

        $this->currentStep = 3;
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    public function submitForm()
    {
        Form::create([
        'name'                 => $this->name,
        'consulta.name'        => $this->consultaName,
        'major.name'           => $this->major,
        'specific.name'        => $this->specific,
        'subject.name'         => $this->subject,
        'study_type.type'      => $this->studyType,
        'timetype.type'        => $this->timetype,
        'consultant.title'     => $this->consultantTitle,
        //'start_time.title'     => $this->start_time,
        'start_time.start_time'=> $this->start_time,
        'riyal.title'          => $this->riyalTitle,
        'riyal.price'          => $this->riyalPrice,
        'dollar.title'         => $this->dollarTitle,
        'dollar.price'         => $this->dollarPrice,
        'le.title'             => $this->leTitle,
        'le.price'             => $this->lePrice,
        ]);

        $this->successMessage = 'Request Created Successfully.';

        $this->clearForm();

        $this->currentStep = 1;
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    public function back($step)
    {
        $this->currentStep = $step;
    }

    /**
     * Write code on Method
     *
     * @return response()
     */
    public function clearForm()
    {
        $this->name            = '';
        $this->consultaName    = '';
        $this->major           = '';
        $this->specific        = '';
        $this->subject         = '';
        $this->studyType       = '';
        $this->timetype        = '';
        $this->consultantTitle = '';
        $this->start_time      = '';
        $this->start_time      = '';
        $this->riyalTitle      = '';
        $this->riyalPrice      = '';
        $this->dollarTitle     = '';
        $this->dollarPrice     = '';
        $this->leTitle         = '';
        $this->lePrice         = '';
    }
}

3- in livewire view

<!--Page Title-->
   <div class="flex items-center min-h-screen bg-gray-50">
      <div
        class="flex-1 h-full max-w-4xl mx-auto bg-white rounded-lg shadow-xl"
      >
        <div class="flex flex-col md:flex-row">
          <div class="h-32 md:h-auto md:w-1/2">
            <img
              class="object-cover w-full h-full"
              src="https://cdn.pixabay.com/photo/2021/01/15/17/01/green-5919790__340.jpg"
              alt="img"
            />
          </div>
          <div class="flex items-center justify-center p-6 sm:p-12 md:w-1/2">
            <div class="w-full">
              <h3 class="mb-4 text-xl font-bold text-blue-600">Sign up</h3>

              <div class="w-full bg-gray-200 rounded-full">
                <div
                  class="
                    w-40
                    p-1
                    text-xs
                    font-medium
                    leading-none
                    text-center text-blue-100
                    bg-blue-600
                    rounded-full
                  "
                >
                  Step1
                </div>
              </div>

              <div class="mt-4 mb-4">
                <label class="block text-sm">  Name </label>
                <input
                  type="text"
                  class="
                    w-full
                    px-4
                    py-2
                    text-sm
                    border
                    rounded-md
                    focus:border-blue-400
                    focus:outline-none
                    focus:ring-1
                    focus:ring-blue-600
                  "
                  placeholder="First Name"
                />
              </div>
              <div class="mb-4">
                <label class="block mb-2 text-sm">  Email </label>
                <input
                  type="text"
                  class="
                    w-full
                    px-4
                    py-2
                    text-sm
                    border
                    rounded-md
                    focus:border-blue-400
                    focus:outline-none
                    focus:ring-1
                    focus:ring-blue-600
                  "
                  placeholder="Last Name"
                />
              </div>
              <div class="mb-4">
                <label class="block mb-2 text-sm"> Phone Number </label>
                <input
                  class="
                    w-full
                    px-4
                    py-2
                    text-sm
                    border
                    rounded-md
                    focus:border-blue-400
                    focus:outline-none
                    focus:ring-1
                    focus:ring-blue-600
                  "
                  placeholder="Phone Number"
                  type="number"
                />
              </div>
              <div class="flex justify-end">
                <button
                  class="
                    px-6
                    py-2
                    mt-4
                    text-sm
                    font-medium
                    leading-5
                    text-center text-white
                    transition-colors
                    duration-150
                    bg-blue-600
                    border border-transparent
                    rounded-lg
                    hover:bg-blue-700
                    focus:outline-none
                  "
                  href="#"
                >
                  Next
                </button>
              </div>
              
              <div class="mt-4 text-center">
                <p class="text-sm">
                  Already have account
                  <a href="#" class="text-blue-600 hover:underline">
                    Sign in.</a
                  >
                </p>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!--End Page Title-->
    <!--Start Formwizard Livewire-->
<div>
   
@if(!empty($successMessage))
<div class="alert alert-success">
   {{ $successMessage }}
</div>
@endif
  
<div class="stepwizard">
    <div class="stepwizard-row setup-panel">
        <div class="stepwizard-step">
            <a href="#step-1" type="button" class="btn btn-circle {{ $currentStep != 1 ? 'btn-default' : 'btn-primary' }}">1</a>
            <p>Step 1</p>
        </div>
        <div class="stepwizard-step">
            <a href="#step-2" type="button" class="btn btn-circle {{ $currentStep != 2 ? 'btn-default' : 'btn-primary' }}">2</a>
            <p>Step 2</p>
        </div>
        <div class="stepwizard-step">
            <a href="#step-3" type="button" class="btn btn-circle {{ $currentStep != 3 ? 'btn-default' : 'btn-primary' }}" disabled="disabled">3</a>
            <p>Step 3</p>
        </div>
    </div>
</div>
  
    <div class="row setup-content {{ $currentStep != 1 ? 'displayNone' : '' }}" id="step-1">
        <div class="col-xs-12">
            <div class="col-md-12">
                <h3> Step 1</h3>
  
                <div class="form-group">
                    <label for="title"> Name:</label>
                    <input type="text" wire:model="name" class="form-control" id="name">
                    @error('name') <span class="error">{{ $message }}</span> @enderror
                </div>
                <div class="form-group">
                    <label for="description">Choose consultat Name</label>
                    <input type="text" wire:model="consultaName" class="form-control" id="consultaName"/>
                    @error('consultaName') <span class="error">{{ $message }}</span> @enderror
                </div>
  
                <div class="form-group">
                    <label for="description">Choose major</label>
                    <textarea type="text" wire:model="major" class="form-control" id="major">{{{ $major ?? '' }}}</textarea>
                    @error('major') <span class="error">{{ $message }}</span> @enderror
                </div>

                <div class="form-group">
                    <label for="description">Choose specific</label>
                    <textarea type="text" wire:model="specific" class="form-control" id="specific">{{{ $specific ?? '' }}}</textarea>
                    @error('specific') <span class="error">{{ $message }}</span> @enderror
                </div>

                <div class="form-group">
                    <label for="description">Choose subject</label>
                    <textarea type="text" wire:model="subject" class="form-control" id="subject">{{{ $subject ?? '' }}}</textarea>
                    @error('subject') <span class="error">{{ $message }}</span> @enderror
                </div>
  
                <button class="btn btn-primary nextBtn btn-lg pull-right" wire:click="firstStepSubmit" type="button" >Next</button>
            </div>
        </div>
    </div>
    <div class="row setup-content {{ $currentStep != 2 ? 'displayNone' : '' }}" id="step-2">
        <div class="col-xs-12">
            <div class="col-md-12">
                <h3> Step 2</h3>
  
                <div class="form-group">
                    <label for="description">Choose Study Type</label><br/>
                    <label class="radio-inline"><input type="radio" wire:model="status" value="1" {{{ $status == '1' ? "checked" : "" }}}> Online </label>
                    <label class="radio-inline"><input type="radio" wire:model="status" value="0" {{{ $status == '0' ? "checked" : "" }}}> Offline</label>
                    @error('status') <span class="error">{{ $message }}</span> @enderror
                </div>

                <div class="form-group">
                    <label for="description">Choose Time Type</label><br/>
                    <label class="radio-inline"><input type="radio" wire:model="status" value="1" {{{ $status == '1' ? "checked" : "" }}}> AM </label>
                    <label class="radio-inline"><input type="radio" wire:model="status" value="0" {{{ $status == '0' ? "checked" : "" }}}> PM</label>
                    @error('status') <span class="error">{{ $message }}</span> @enderror
                </div>
  
                <div class="form-group">
                    <label for="description"> Choose Consultant Title</label>
                    <input type="text" wire:model="consultantTitle" class="form-control" id="consultantTitle"/>
                    @error('consultantTitle') <span class="error">{{ $message }}</span> @enderror
                </div>
                <div class="form-group">
                    <label for="description"> Choose Start time</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>

                 <div class="form-group" invisible >
                    <label for="description"> {{ $data->ip ?? '' }}</label>
                    <input type="text" wire:model="location" class="form-control" id="location"/>
                    @error('location') <span class="error">{{ $message }}</span> @enderror
                </div>
                <div class="form-group" invisible >
                    <label for="description"> {{ $data->countryName ?? '' }}</label>
                    <input type="text" wire:model="location" class="form-control" id="location"/>
                    @error('location') <span class="error">{{ $message }}</span> @enderror
                </div>

                {{-- check for KSA  unfortunattly didn't work  --}}

                @if ($data->countryName  == 'Saudi Arabia' ?? '')
                <div class="form-group">
                    <label for="description"> Riyal</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>
                <div class="form-group">
                    <label for="description"> Price</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>

                {{-- check for UAE --}}

                @elseif ($data->countryName  == 'United Arab Emirates')
                 <div class="form-group">
                    <label for="description"> Dollar</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>
                <div class="form-group">
                    <label for="description"> Price</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>

                {{-- check for Egypt --}}

                @else ($data->countryName  == 'Egypt')
                 <div class="form-group">
                    <label for="description"> LE</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>
                <div class="form-group">
                    <label for="description"> Price</label>
                    <input type="text" wire:model="start_time" class="form-control" id="start_time"/>
                    @error('start_time') <span class="error">{{ $message }}</span> @enderror
                </div>
                @endif
  
                <button class="btn btn-primary nextBtn btn-lg pull-right" type="button" wire:click="secondStepSubmit">Next</button>
                <button class="btn btn-danger nextBtn btn-lg pull-right" type="button" wire:click="back(1)">Back</button>
            </div>
        </div>
    </div>
    <div class="row setup-content {{ $currentStep != 3 ? 'displayNone' : '' }}" id="step-3">
        <div class="col-xs-12">
            <div class="col-md-12">
                <h3> Step 3</h3>
  
               //payment
  
                <button class="btn btn-success btn-lg pull-right" wire:click="submitForm" type="button">Finish!</button>
                <button class="btn btn-danger nextBtn btn-lg pull-right" type="button" wire:click="back(2)">Back</button>
            </div>
        </div>
    </div>
</div>

0 likes
0 replies

Please or to participate in this conversation.