the promoseven group crm

This commit is contained in:
ghassan committed 2026-01-28 17:19:02 +03:00
commit 12e3a44046
88 files changed
+12923

No files matched your search

+139
View File
@@ -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
+249
View File
@@ -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
+37
View File
@@ -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