the promoseven group crm
This commit is contained in:
commit
12e3a44046
88 files changed
+12923
No files matched your search
@@ -0,0 +1,139 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container-fluid p-4">
|
||||
<!-- Header -->
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<div>
|
||||
<h2 class="mb-0">Quick Guest Registration</h2>
|
||||
<small class="text-muted">Register new guests in seconds</small>
|
||||
</div>
|
||||
<a href="{{ route('guests.search') }}" class="btn btn-outline-secondary">
|
||||
<i class="fas fa-arrow-left"></i> Back to Search
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card border-0 shadow-sm">
|
||||
<div class="card-body p-4">
|
||||
<form id="guestForm">
|
||||
@csrf
|
||||
|
||||
<!-- Basic Information -->
|
||||
<h5 class="mb-3">
|
||||
<i class="fas fa-user"></i> Guest Information
|
||||
</h5>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6">
|
||||
<label for="name" class="form-label">Full Name <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control" id="name" name="name" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="phone" class="form-label">Phone Number <span class="text-danger">*</span></label>
|
||||
<input type="tel" class="form-control" id="phone" name="phone" placeholder="+971 50 123 4567" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6">
|
||||
<label for="email" class="form-label">Email (Optional)</label>
|
||||
<input type="email" class="form-control" id="email" name="email">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="nationality" class="form-label">Nationality</label>
|
||||
<select class="form-select" id="nationality" name="nationality">
|
||||
<option value="">Select nationality</option>
|
||||
<option value="UAE">United Arab Emirates</option>
|
||||
<option value="Saudi Arabia">Saudi Arabia</option>
|
||||
<option value="UK">United Kingdom</option>
|
||||
<option value="USA">United States</option>
|
||||
<option value="Germany">Germany</option>
|
||||
<option value="France">France</option>
|
||||
<option value="Other">Other</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Visit Information -->
|
||||
<h5 class="mb-3 mt-4">
|
||||
<i class="fas fa-calendar-check"></i> Current Visit
|
||||
</h5>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6">
|
||||
<label for="venue" class="form-label">Venue <span class="text-danger">*</span></label>
|
||||
<select class="form-select" id="venue" name="venue" required>
|
||||
<option value="">Select venue</option>
|
||||
<option value="seven">Seven Hotel</option>
|
||||
<option value="city_center">City Center Hotel</option>
|
||||
<option value="coral_bay">Coral Bay Resort</option>
|
||||
<option value="la_taverna">La Taverna</option>
|
||||
<option value="rayes">Rayes</option>
|
||||
<option value="taiga_sky">Taiga Sky</option>
|
||||
<option value="trabouche">Trabouche</option>
|
||||
<option value="coral_bay_beach">Coral Bay Beach</option>
|
||||
<option value="coral_bay_pool">Coral Bay Pool</option>
|
||||
<option value="jetskis">Jetskis</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="visit_type" class="form-label">Visit Type</label>
|
||||
<select class="form-select" id="visit_type" name="visit_type">
|
||||
<option value="stay">Hotel Stay</option>
|
||||
<option value="dining">Dining</option>
|
||||
<option value="bar">Bar/Lounge</option>
|
||||
<option value="beach">Beach Access</option>
|
||||
<option value="pool">Pool Access</option>
|
||||
<option value="watersports">Water Sports</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<div class="d-grid">
|
||||
<button type="submit" class="btn btn-primary btn-lg" id="submitBtn">
|
||||
<i class="fas fa-user-plus"></i> Register Guest & Generate Loyalty Card
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@section('scripts')
|
||||
<script>
|
||||
document.getElementById('guestForm').addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const formData = new FormData(this);
|
||||
const data = Object.fromEntries(formData);
|
||||
|
||||
// Show loading state
|
||||
const submitBtn = document.getElementById('submitBtn');
|
||||
const originalText = submitBtn.innerHTML;
|
||||
submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Registering...';
|
||||
submitBtn.disabled = true;
|
||||
|
||||
// Simulate API call
|
||||
setTimeout(() => {
|
||||
// Generate loyalty ID
|
||||
const loyaltyId = 'HG-' + Math.floor(100000 + Math.random() * 900000);
|
||||
|
||||
// Reset form and show success
|
||||
submitBtn.innerHTML = originalText;
|
||||
submitBtn.disabled = false;
|
||||
|
||||
showToast('Guest registered successfully! Loyalty ID: ' + loyaltyId, 'success');
|
||||
|
||||
// Redirect to search after a delay
|
||||
setTimeout(() => {
|
||||
window.location.href = '{{ route("guests.search") }}';
|
||||
}, 2000);
|
||||
}, 1500);
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
@@ -0,0 +1,249 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h2><i class="fas fa-user"></i> Guest Profile</h2>
|
||||
<div>
|
||||
<button class="btn btn-success me-2" onclick="issueVoucher()">
|
||||
<i class="fas fa-ticket-alt"></i> Issue Voucher
|
||||
</button>
|
||||
<button class="btn btn-primary" onclick="checkInGuest()">
|
||||
<i class="fas fa-sign-in-alt"></i> Check In
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- Left Panel - Basic Info -->
|
||||
<div class="col-md-4">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5>Basic Information</h5>
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
<div id="qrCode" class="mb-3"></div>
|
||||
<h4 id="guestName">John Doe</h4>
|
||||
<p class="text-muted" id="guestPhone">+961 3 123456</p>
|
||||
<div class="mb-3">
|
||||
<span class="badge bg-secondary" id="loyaltyTier">Silver</span>
|
||||
<small class="text-muted d-block">Loyalty Points: <span id="loyaltyPoints">150</span></small>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Loyalty ID:</strong> <span id="loyaltyId">LOY-001</span>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Nationality:</strong> <span id="nationality">Lebanese</span>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Language:</strong> <span id="language">English</span>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<strong>Birthday:</strong> <span id="birthday">1990-01-01</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Quick Actions -->
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5>Quick Actions</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<button class="btn btn-outline-primary btn-sm w-100 mb-2" onclick="addNote()">
|
||||
<i class="fas fa-sticky-note"></i> Add Note
|
||||
</button>
|
||||
<button class="btn btn-outline-success btn-sm w-100 mb-2" onclick="awardPoints()">
|
||||
<i class="fas fa-star"></i> Award Points
|
||||
</button>
|
||||
<button class="btn btn-outline-info btn-sm w-100 mb-2" onclick="viewHistory()">
|
||||
<i class="fas fa-history"></i> Full History
|
||||
</button>
|
||||
<button class="btn btn-outline-warning btn-sm w-100" onclick="editProfile()">
|
||||
<i class="fas fa-edit"></i> Edit Profile
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Center Panel - Timeline -->
|
||||
<div class="col-md-5">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5>Visit Timeline</h5>
|
||||
</div>
|
||||
<div class="card-body" style="max-height: 600px; overflow-y: auto;">
|
||||
<div class="timeline" id="visitTimeline">
|
||||
<!-- Timeline items will be loaded here -->
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-marker bg-primary"></div>
|
||||
<div class="timeline-content">
|
||||
<h6>Checked into Seven Hotel</h6>
|
||||
<small class="text-muted">Today, 2:30 PM - Room 301</small>
|
||||
<p>Spend: $150</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-marker bg-success"></div>
|
||||
<div class="timeline-content">
|
||||
<h6>Dined at La Taverna</h6>
|
||||
<small class="text-muted">Yesterday, 8:00 PM</small>
|
||||
<p>Spend: $75 - Italian Cuisine</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-marker bg-info"></div>
|
||||
<div class="timeline-content">
|
||||
<h6>Beach Visit - Coral Bay</h6>
|
||||
<small class="text-muted">3 days ago, 10:00 AM</small>
|
||||
<p>Spend: $25 - Day Pass</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right Panel - Tags & Suggestions -->
|
||||
<div class="col-md-3">
|
||||
<!-- Tags -->
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5>Tags</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="guestTags">
|
||||
<span class="badge bg-primary me-1 mb-1">beach_lover</span>
|
||||
<span class="badge bg-success me-1 mb-1">family</span>
|
||||
<span class="badge bg-warning me-1 mb-1">jetski_fan</span>
|
||||
</div>
|
||||
<button class="btn btn-outline-secondary btn-sm w-100 mt-2" onclick="addTag()">
|
||||
<i class="fas fa-plus"></i> Add Tag
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Cross-sell Suggestions -->
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5>Cross-sell Suggestions</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="suggestion-item mb-3 p-2 border rounded">
|
||||
<h6>Coral Bay Beach Package</h6>
|
||||
<p class="small text-muted">Based on hotel stays, suggest beach access</p>
|
||||
<button class="btn btn-sm btn-outline-primary">Recommend</button>
|
||||
</div>
|
||||
<div class="suggestion-item mb-3 p-2 border rounded">
|
||||
<h6>Taiga Sky Nightclub</h6>
|
||||
<p class="small text-muted">Restaurant visitor, suggest nightlife</p>
|
||||
<button class="btn btn-sm btn-outline-primary">Recommend</button>
|
||||
</div>
|
||||
<div class="suggestion-item p-2 border rounded">
|
||||
<h6>La Taverna Dinner</h6>
|
||||
<p class="small text-muted">Hotel guest, suggest dining experience</p>
|
||||
<button class="btn btn-sm btn-outline-primary">Recommend</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Notes -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5>Recent Notes</h5>
|
||||
</div>
|
||||
<div class="card-body" style="max-height: 200px; overflow-y: auto;">
|
||||
<div class="note-item mb-2">
|
||||
<small class="text-muted">Today - Reception</small>
|
||||
<p class="mb-0">Guest requested late checkout for tomorrow.</p>
|
||||
</div>
|
||||
<div class="note-item mb-2">
|
||||
<small class="text-muted">Yesterday - Restaurant</small>
|
||||
<p class="mb-0">Celebrating anniversary, very satisfied with service.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.timeline-marker {
|
||||
position: absolute;
|
||||
left: -35px;
|
||||
top: 5px;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.timeline::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: -31px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 2px;
|
||||
background: #e9ecef;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background: #f8f9fa;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.suggestion-item {
|
||||
background: #f8f9fa;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Generate QR Code
|
||||
const qrCodeContainer = document.getElementById('qrCode');
|
||||
const qrCode = new QRCode(qrCodeContainer, {
|
||||
text: 'LOY-001',
|
||||
width: 128,
|
||||
height: 128
|
||||
});
|
||||
});
|
||||
|
||||
function checkInGuest() {
|
||||
// Implement check-in functionality
|
||||
alert('Check-in functionality to be implemented');
|
||||
}
|
||||
|
||||
function issueVoucher() {
|
||||
// Implement voucher issuance
|
||||
alert('Voucher issuance to be implemented');
|
||||
}
|
||||
|
||||
function addNote() {
|
||||
// Implement add note functionality
|
||||
alert('Add note functionality to be implemented');
|
||||
}
|
||||
|
||||
function awardPoints() {
|
||||
// Implement award points functionality
|
||||
alert('Award points functionality to be implemented');
|
||||
}
|
||||
|
||||
function addTag() {
|
||||
// Implement add tag functionality
|
||||
alert('Add tag functionality to be implemented');
|
||||
}
|
||||
</script>
|
||||
@endsection
|
||||
@@ -0,0 +1,37 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
@include('partials.sidebar')
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<h1>Guest Search</h1>
|
||||
|
||||
<div class="mb-4">
|
||||
<input type="text" id="search-input" class="form-control form-control-lg" placeholder="Search by name, phone, or email...">
|
||||
</div>
|
||||
|
||||
<div id="search-results">
|
||||
<!-- Results will be populated by JS -->
|
||||
</div>
|
||||
|
||||
<!-- Guest 360 Modal -->
|
||||
<div class="modal fade" id="guestModal" tabindex="-1">
|
||||
<div class="modal-dialog modal-xl">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Guest Profile</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
<div class="modal-body" id="guest-profile">
|
||||
<!-- Profile content will be loaded here -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
Reference in new issue
Block a user