relocating

This commit is contained in:
twotalesanimation
2025-12-30 20:59:58 +02:00
parent a898c35a39
commit e8e9b1f03c
117 changed files with 2104 additions and 8554 deletions
Binary file not shown.
@@ -14,6 +14,7 @@
<a href="/wallpapers">Wallpapers</a>
<a href="/fabrics">Fabrics</a>
<a href="/#portfolio">Portfolio</a>
<a href="{{ route('track-order-form') }}">Track Order</a>
<a href="#">About Us</a>
<a href="#">Terms & Conditions</a>
<a href="#">Privacy Policy</a>
@@ -11,6 +11,7 @@
<a href="/#projects">Projects</a>
<!-- <a href="/#shop">Decor Shop</a> -->
<a href="/#contact">Contact</a>
<a href="{{ route('track-order-form') }}">Track Order</a>
</nav>
<div style="display: flex; align-items: center; gap: 1.5rem;">
<!-- Authentication Links -->
+29
View File
@@ -0,0 +1,29 @@
<x-mail::message>
# Invoice #{{ $invoiceNumber }}
Dear {{ $order->customer_first_name }} {{ $order->customer_last_name }},
Thank you for your order! Your invoice is attached to this email.
**Order Summary:**
- Order Number: {{ $order->order_number }}
- Order Date: {{ $order->created_at->format('d M Y') }}
- Total Amount: R {{ number_format($order->total, 2) }}
- Status: {{ ucfirst($order->status) }}
**Delivery Address:**
{{ $order->delivery_address_line1 }}
@if($order->delivery_address_line2)
{{ $order->delivery_address_line2 }}
@endif
{{ $order->delivery_city }}, {{ $order->delivery_province }} {{ $order->delivery_postal_code }}
If you have any questions about your order, please don't hesitate to contact us.
<x-mail::button :url="config('app.url')">
Visit Our Website
</x-mail::button>
Thanks,<br>
{{ config('app.name') }} Team
</x-mail::message>
@@ -0,0 +1,373 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Invoice #{{ $order->order_number }}</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Montserrat', sans-serif;
color: #333;
line-height: 1.6;
background: white;
}
.invoice-container {
max-width: 800px;
margin: 0 auto;
padding: 40px;
background: white;
}
.invoice-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 20px;
border-bottom: 1px solid #1a1a1a;
padding-bottom: 20px;
}
.company-info h1 {
font-family: 'AbrilFatface';
font-size: 36px;
color: #1a1a1a;
margin-bottom: 10px;
font-weight: normal;
}
.company-details {
font-size: 10px;
color: #666;
line-height: 1.5;
}
.invoice-details {
text-align: right;
/* line-height: 1.5; */
}
.invoice-details h2 {
font-size: 28px;
color: #1a1a1a;
font-weight: normal;
/* margin-bottom: 20px; */
font-family: 'AbrilFatface', Georgia, serif;
}
.detail-row {
display: flex;
justify-content: flex-end;
/* margin-bottom: 8px; */
font-size: 10px;
}
.detail-row strong {
margin-right: 20px;
color: #666;
width: 120px;
}
.detail-row span {
color: #1a1a1a;
width: 150px;
}
.section-title {
font-size: 20px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
color: #666;
margin-top: 20px;
/* margin-bottom: 20px; */
/* border-bottom: 1px solid #e0e0e0; */
padding-bottom: 12px;
}
.customer-info {
display: flex;
/* gap: 80px; */
/* margin-bottom: 40px; */
font-size: 12px;
}
.customer-info div {
flex: 1;
}
.customer-info h3 {
font-size: 16px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
color: #666;
/* margin-bottom: 8px; */
}
.customer-info p {
color: #1a1a1a;
/* margin-bottom: 4px; */
line-height: 1.5;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 40px;
}
thead {
background-color: #f5f5f5;
}
th {
font-size: 12px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
color: #666;
padding: 12px 16px;
text-align: left;
/* border: 1px solid #e0e0e0; */
}
td {
padding: 10px 10px;
/* border: 1px solid #e0e0e0; */
font-size: 13px;
color: #1a1a1a;
}
tr:nth-child(even) {
background-color: #fafafa;
}
.item-name {
font-weight: 500;
}
.item-label {
font-size: 11px;
color: #999;
text-transform: uppercase;
letter-spacing: 0.5px;
/* margin-top: 2px; */
}
.qty {
text-align: center;
}
.price {
text-align: right;
}
.totals-section {
margin-bottom: 40px;
}
.totals-box {
margin-left: auto;
width: 350px;
}
.total-row {
display: flex;
padding: 12px 16px;
font-size: 13px;
}
.total-row strong {
color: #1a1a1a;
}
.total-row span {
color: #666;
text-align: right;
flex: 1;
}
.total-row.subtotal strong {
font-weight: 500;
}
.total-row.shipping strong {
font-weight: 500;
}
.total-row.grand-total {
/* background-color: #f5f5f5; */
/* border: 1px solid #e0e0e0; */
font-size: 15px;
font-weight: 700;
padding: 12px 16px;
}
.total-row.grand-total strong {
color: #1a1a1a;
font-family: 'AbrilFatface', Georgia, serif;
font-weight: normal;
}
.total-row.grand-total span {
color: #1a1a1a;
font-size: 16px;
}
.footer-section {
margin-top: 60px;
padding-top: 30px;
border-top: 1px solid #e0e0e0;
font-size: 12px;
color: #999;
text-align: center;
}
.thank-you {
color: #666;
margin-bottom: 20px;
}
.page-break {
page-break-after: always;
}
* {
font-family: AbrilFatface !important;
}
</style>
</head>
<body>
<div class="invoice-container">
<!-- Header -->
<div class="invoice-header">
<div class="company-info">
<h1>INVOICE</h1>
<div class="company-details">
<h2>ADDITIONAL DESIGN</h2>
<p>registered trading name of</p>
<p>TWO TALES & CO. (PTY) LTD</p>
<p>REG: 2014/260746/07</p>
<p>VAT: NA</p>
<p>info@additional.co.za</p>
<p>additional.co.za</p>
</div>
</div>
<div class="invoice-details">
<h3>#{{ $order->order_number }}</h3>
<div class="detail-row">
<strong>Date:</strong>
<span>{{ $order->created_at->format('d M Y') }}</span>
</div>
<div class="detail-row">
<strong>Invoice Date:</strong>
<span>{{ now()->format('d M Y') }}</span>
</div>
<div class="detail-row">
<strong>Order Status:</strong>
<span style="text-transform: capitalize;">{{ $order->status }}</span>
</div>
</div>
</div>
<!-- Customer Info -->
<div class="customer-info">
<div>
<h3>Bill To</h3>
<p>{{ $order->customer_name }}</p>
<p>{{ $order->customer_email }}</p>
<p>{{ $order->customer_phone }}</p>
</div>
<div>
<h3>Ship To</h3>
<p>{{ $order->shipping_address }}</p>
</div>
</div>
<!-- Items Table -->
<div class="section-title">Order Items</div>
<table>
<thead>
<tr>
<th>Description</th>
<th class="qty">Quantity</th>
<th class="price">Unit Price</th>
<th class="price">Total</th>
</tr>
</thead>
<tbody>
@foreach($order->items as $item)
<tr>
<td>
<div class="item-name">{{ $item->product->name }}</div>
@if($item->type === 'wallpaper' && $item->length)
<div class="item-label">{{ $item->length }}m length</div>
@elseif($item->type === 'mural' && $item->width && $item->height)
<div class="item-label">{{ $item->width }}m × {{ $item->height }}m ({{ $item->width * $item->height }})</div>
@endif
@if($item->is_sample)
<div class="item-label">Sample</div>
@endif
@if($item->specification)
<div class="item-label">Specification: {{ $item->specification }}</div>
@endif
</td>
<td class="qty">{{ $item->quantity }}</td>
<td class="price">R {{ number_format($item->price, 2) }}</td>
<td class="price">R {{ number_format($item->quantity * $item->price, 2) }}</td>
</tr>
@endforeach
</tbody>
</table>
<!-- Totals -->
<div class="totals-section" style="text-align: right;">
<div class="totals-box">
<div class="total-row subtotal">
<strong>Subtotal</strong>
<span>R {{ number_format($order->items->sum(fn($item) => $item->quantity * $item->price), 2) }}</span>
</div>
@if($order->shipping_fee)
<div class="total-row shipping">
<strong>Shipping</strong>
<span>R {{ number_format($order->shipping_fee, 2) }}</span>
</div>
@endif
<div class="total-row grand-total">
<strong>Total</strong>
<span>R {{ number_format($order->total, 2) }}</span>
</div>
</div>
</div>
<div style="text-align: center;">
<strong>PAID VIA YOCO</strong>
</div>
<!-- Footer -->
<div class="footer-section">
<div class="thank-you">
<p>ADDITIONAL DESIGN is a registered trading name of TWO TALES & CO. (PTY) LTD</p>
</div>
<!-- <p>This is an automatically generated invoice. No signature is required.</p> -->
<!-- <p style="margin-top: 10px; color: #ccc;">Generated on {{ now()->format('d M Y H:i') }}</p> -->
</div>
</div>
</body>
</html>
+4 -1
View File
@@ -240,7 +240,10 @@
</div>
<div class="card--pink">
<h2 class="next-steps-title" style="text-align: center;">What Happens Next?</h2>
A confirmation email has been sent to <strong>{{ $order->customer_email }}</strong>. You'll receive updates about your order status and shipping information shortly.
<p>A confirmation email has been sent to <strong>{{ $order->customer_email }}</strong>. You'll receive updates about your order status and shipping information shortly.</p>
<p style="margin-bottom: 0; text-align: center; margin-top: 1rem; font-size: 0.9rem;">
💡 You can also <a href="{{ route('track-order-form') }}" style="color: inherit; font-weight: 600; text-decoration: underline;">track your order anytime</a> using your order number and email address.
</p>
</div>
</div>
+19
View File
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<style>
@font-face {
font-family: Abril;
src: url("file:///{{ storage_path('fonts/AbrilFatface-Regular.ttf') }}");
}
body {
font-family: Abril;
font-size: 48px;
}
</style>
</head>
<body>
THIS SHOULD LOOK VERY STYLISH
</body>
</html>
@@ -0,0 +1,295 @@
@extends('layouts.app')
@section('title', 'Order Details - ' . $order->order_number)
@section('styles')
<style>
.success-container {
text-align: center;
margin: 3rem 0;
}
.success-icon {
font-size: 4rem;
margin-bottom: 1.5rem;
}
h1 {
font-family: 'Abril Fatface', cursive;
font-size: 2.5rem;
color: var(--primary-color);
margin-bottom: 1rem;
}
.subtitle {
color: #666;
font-size: 1.1rem;
margin-bottom: 2rem;
}
.order-details {
margin: 2rem 0;
text-align: left;
}
.detail-row {
display: flex;
justify-content: space-between;
padding: 1rem 0;
border-bottom: 1px solid #eee;
}
.detail-row:last-child {
border-bottom: none;
}
.detail-label {
font-weight: 600;
color: var(--primary-color);
}
.detail-value {
color: #666;
}
.order-items {
margin: 2rem 0;
text-align: left;
}
.order-items-inner {
padding: 2rem;
border-radius: 20px;
margin: 2rem 0;
text-align: left;
}
.order-items h2 {
font-family: 'Abril Fatface', cursive;
font-size: 1.3rem;
color: var(--primary-color);
margin-bottom: 1.5rem;
}
.item-row {
display: flex;
justify-content: space-between;
padding: 1rem 0;
border-bottom: 1px solid #e0e0e0;
}
.item-row:last-child {
border-bottom: none;
}
.item-info {
flex: 1;
}
.item-name {
font-weight: 600;
color: var(--primary-color);
}
.item-qty {
font-size: 0.9rem;
color: #666;
margin-top: 0.25rem;
}
.item-price {
font-weight: 600;
color: var(--primary-color);
}
.total-row {
display: flex;
justify-content: space-between;
padding-top: 1.5rem;
margin-top: 1rem;
border-top: 2px solid var(--primary-color);
font-weight: 600;
font-size: 1.2rem;
color: var(--primary-color);
}
.summary-row {
display: flex;
justify-content: space-between;
padding: 1rem 0;
border-bottom: 1px solid #eee;
}
.summary-row.total {
border-bottom: none;
font-weight: 600;
font-size: 1.1rem;
padding-top: 1.5rem;
margin-top: 1rem;
border-top: 2px solid var(--primary-color);
}
.actions {
margin-top: 2rem;
text-align: center;
}
.next-steps-title {
font-family: 'Abril Fatface', cursive;
font-size: 1.3rem;
color: var(--primary-color);
margin-bottom: 1.5rem;
text-align: left;
}
.back-link {
display: block;
text-align: center;
margin-top: 1.5rem;
color: var(--primary-color);
text-decoration: none;
font-weight: 500;
}
.back-link:hover {
text-decoration: underline;
}
</style>
@endsection
@section('content')
<main class="container">
<div class="success-container">
<div class="success-icon">📦</div>
<h1>Order Details</h1>
<p class="subtitle">Order #{{ $order->order_number }}</p>
<!-- Order Details -->
<div class="order-details card">
<div>
<div class="detail-row">
<span class="detail-label">Order Date:</span>
<span class="detail-value">{{ $order->created_at->format('M d, Y') }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Status:</span>
<span class="detail-value" style="text-transform: capitalize;">{{ $order->status }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Customer Name:</span>
<span class="detail-value">{{ $order->customer_name }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Email:</span>
<span class="detail-value">{{ $order->customer_email }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Phone:</span>
<span class="detail-value">{{ $order->customer_phone }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Shipping Address:</span>
<span class="detail-value">{{ $order->shipping_address }}</span>
</div>
<div class="detail-row">
<span class="detail-label">Payment Status:</span>
<span class="detail-value" style="text-transform: capitalize;">{{ $order->payment_status }}</span>
</div>
</div>
</div>
<!-- Order Items -->
<div class="order-items card">
<div >
<h2>Order Items</h2>
@foreach($order->items as $item)
<div class="item-row">
<div class="item-info">
<div class="item-name">{{ $item->product->name }}{{ $item->is_sample ? ' - Sample' : '' }}</div>
<div class="item-qty">
@php
$stock = $item->printStock;
$stockText = $stock ? "{$stock->name}" : "Standard";
$stockCost = 0;
if (!$item->is_sample && $stock) {
$stockCost = $item->type === 'wallpaper' ? $stock->cost_per_meter : $stock->cost_per_m2;
}
@endphp
@if($item->is_sample)
Sample - Fixed Price: R{{ number_format(\App\Services\ShippingService::getSampleCost(), 2) }}
@elseif($item->type === 'wallpaper')
Length: {{ $item->length }}m | Finish: {{ $stockText }}<br>
<small>Stock Cost: R{{ number_format($stockCost, 2) }}/m</small>
@elseif($item->type === 'mural')
Dimensions: {{ $item->width }}m × {{ $item->height }}m ({{ number_format($item->width * $item->height, 2) }}) | Finish: {{ $stockText }}<br>
<small>Stock Cost: R{{ number_format($stockCost, 2) }}/</small>
@else
<small>Price: R{{ number_format($stockCost, 2) }} per unit</small>
@endif
</div>
</div>
<div class="item-price">
R{{ number_format(
$item->is_sample
? \App\Services\ShippingService::getSampleCost() * $item->quantity
: $item->quantity * (
$item->type === 'wallpaper'
? $stockCost * $item->length
: ($item->type === 'mural'
? $stockCost * $item->width * $item->height
: $stockCost
)
),
2
) }}
</div>
</div>
@endforeach
</div>
<div class="summary-row">
<span>Subtotal:</span>
<span>R{{ number_format($order->total, 2) }}</span>
</div>
@if($order->shipping_fee)
<div class="summary-row">
<span>Shipping:</span>
<span>R{{ number_format($order->shipping_fee, 2) }}</span>
</div>
@endif
<div class="summary-row total">
<span>Order Total:</span>
<span>R{{ number_format($order->total + ($order->shipping_fee ?? 0), 2) }}</span>
</div>
</div>
<!-- Additional Info -->
@if($order->notes)
<div class="card">
<h3 style="color: var(--primary-color); margin-bottom: 1rem;">Order Notes</h3>
<p>{{ $order->notes }}</p>
</div>
@endif
<div class="card card--pink">
<h2 class="next-steps-title" style="text-align: center;">Order Status</h2>
<p style="margin: 0; text-align: center;">
@if($order->payment_status === 'pending')
Your payment is pending. Please complete the payment to process your order.
@elseif($order->status === 'pending')
Your order has been received and is being prepared. You'll receive an email update shortly with shipping information.
@else
Your order is {{ strtolower($order->status) }}. Thank you for your purchase!
@endif
</p>
</div>
</div>
<!-- Actions -->
<div class="actions">
<a href="{{ route('track-order-form') }}" class="btn btn--secondary">Track Another Order</a>
<a href="{{ route('home') }}" class="btn">Back to Home</a>
</div>
</main>
@endsection
+162
View File
@@ -0,0 +1,162 @@
@extends('layouts.app')
@section('title', 'Track Your Order')
@section('styles')
<style>
.track-order-container {
max-width: 500px;
margin: 4rem auto;
text-align: center;
}
h1 {
color: var(--accent-dark);
margin-bottom: 1rem;
}
.subtitle {
color: #666;
font-size: 1rem;
margin-bottom: 2rem;
line-height: 1.6;
}
.track-form {
margin-bottom: 1.5rem;
}
.form-group {
margin-bottom: 1.5rem;
text-align: left;
}
.form-group label {
display: block;
font-weight: 600;
margin-bottom: 0.5rem;
color: var(--primary-color);
font-size: 0.95rem;
}
.form-group input {
width: 100%;
padding: 0.75rem;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
font-family: inherit;
transition: all 0.3s ease;
}
.form-group input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(45, 80, 71, 0.1);
}
.form-group input::placeholder {
color: #999;
}
.error-message {
color: #d32f2f;
font-size: 0.9rem;
margin-top: 0.5rem;
}
.info-box {
font-size: 0.9rem;
color: var(--text-secondary);
}
.back-link {
display: block;
text-align: center;
margin-top: 1.5rem;
color: var(--primary-color);
text-decoration: none;
font-weight: 500;
}
.back-link:hover {
text-decoration: underline;
}
.alert {
padding: 1rem;
border-radius: 20px;
margin-bottom: 1.5rem;
border: 1px solid;
}
.alert-error {
background-color: #ffebee;
border-color: #f8d7da;
color: #c62828;
}
</style>
@endsection
@section('content')
<main class="container">
<div class="track-order-container">
<h1>Track Your Order</h1>
<p class="subtitle">
Enter your order number and email address to view the status and details of your order.
</p>
@if ($errors->any())
<div class="alert alert-error">
@foreach ($errors->all() as $error)
<div>{{ $error }}</div>
@endforeach
</div>
@endif
<form action="{{ route('track-order-search') }}" method="POST">
@csrf
<div class="card">
<div class="form-group">
<label for="order_number">Order Number</label>
<input
type="text"
id="order_number"
name="order_number"
placeholder="e.g., ORD-20251230-5F3A2C1B"
value="{{ old('order_number') }}"
required
>
@error('order_number')
<div class="error-message">{{ $message }}</div>
@enderror
</div>
<div class="form-group">
<label for="email">Email Address</label>
<input
type="email"
id="email"
name="email"
placeholder="your@email.com"
value="{{ old('email') }}"
required
>
@error('email')
<div class="error-message">{{ $message }}</div>
@enderror
</div>
<input type="submit" class="btn" value="Find Your Order" style="width: 100%; cursor: pointer;">
<div class="info-box card--pink" style="margin-top: 1.5rem; margin-bottom: 0;">
💡 Your order number can be found in the confirmation email sent to you after purchase. The email address must match the one used when placing the order.
</div>
</div>
</form>
<a href="{{ route('home') }}" class="back-link"> Back to Home</a>
</div>
</main>
@endsection