diff --git a/app/Http/Controllers/CustomOrderController.php b/app/Http/Controllers/CustomOrderController.php index 3c01ef8..5b052a0 100644 --- a/app/Http/Controllers/CustomOrderController.php +++ b/app/Http/Controllers/CustomOrderController.php @@ -164,36 +164,58 @@ class CustomOrderController extends Controller */ public function depositPayment(Request $request) { + Log::info('Deposit payment initiated', [ + 'request_data' => $request->all(), + 'user_id' => auth()->id(), + ]); $validated = $request->validate([ 'custom_order_id' => 'required|exists:custom_orders,id', ]); + Log::info('Deposit payment validation passed', $validated); $customOrder = CustomOrder::findOrFail($validated['custom_order_id']); // Check authorization if ($customOrder->user_id !== auth()->id()) { + Log::warning('Unauthorized deposit payment attempt', [ + 'custom_order_id' => $customOrder->id, + 'user_id' => auth()->id(), + ]); abort(403); } // Check if already paid if ($customOrder->deposit_status === 'paid') { + Log::info('Deposit already paid for custom order', [ + 'custom_order_id' => $customOrder->id, + ]); return redirect()->route('custom-orders.show', $customOrder) ->with('info', 'Deposit already paid for this order.'); } // Initiate Yoco payment for deposit + Log::info('Initiating Yoco payment for custom order deposit', [ + 'custom_order_id' => $customOrder->id, + 'deposit_amount' => $customOrder->deposit_amount, + ]); $yocoResponse = $this->initiateYocoPayment( amount: (int)($customOrder->deposit_amount * 100), // Convert to cents - orderId: $customOrder->uuid, + customOrder: $customOrder, orderType: 'custom_deposit', - description: "Deposit for Custom {$customOrder->type} Order #{$customOrder->order_number}" + description: "Deposit for Order #{$customOrder->order_number}" ); if (!$yocoResponse) { + Log::error('Failed to initiate Yoco payment for custom order deposit', [ + 'custom_order_id' => $customOrder->id, + ]); return redirect()->route('custom-orders.show', $customOrder) ->with('error', 'Failed to initiate payment. Please try again.'); } - + Log::info('Yoco payment initiated successfully for custom order deposit', [ + 'custom_order_id' => $customOrder->id, + 'checkout_url' => $yocoResponse['checkout_url'], + ]); return redirect($yocoResponse['checkout_url']); } @@ -207,11 +229,11 @@ class CustomOrderController extends Controller abort(403); } - // Update order status - $customOrder->update([ - 'deposit_status' => 'paid', - 'status' => 'submitted', - ]); + // // Update order status + // $customOrder->update([ + // 'deposit_status' => 'paid', + // 'status' => 'submitted', + // ]); return view('custom-orders.deposit-success', [ 'customOrder' => $customOrder, @@ -250,67 +272,143 @@ class CustomOrderController extends Controller /** * Initiate Yoco payment */ - private function initiateYocoPayment($amount, $orderId, $orderType, $description) + private function initiateYocoPayment($amount, $customOrder, $orderType, $description) { - $yocoSecret = config('services.yoco.secret_key'); + + Log::info('Initiating Yoco payment', [ + 'order_id' => $customOrder->uuid, + 'order_type' => $orderType, + 'amount' => $amount, + 'description' => $description, + ]); - if (!$yocoSecret) { + if (!$customOrder) { + Log::error('Custom order not found for Yoco payment', [ + 'order_id' => $customOrder->uuid ?? 'unknown', + ]); + return null; + } + Log::info('Custom order found for Yoco payment', [ + 'order_id' => $customOrder->uuid, + 'custom_order_data' => $customOrder->toArray(), + ]); + // Get configuration + $secretKey = config('services.yoco.secret_key'); + $mode = config('services.yoco.mode'); + + Log::info('Yoco configuration', [ + 'mode' => $mode, + 'secret_key_set' => !empty($secretKey) && $secretKey !== 'sk_test_your_key_here', + ]); + + // Check if API key is configured + if (empty($secretKey) || $secretKey === 'sk_test_your_key_here') { Log::error('Yoco secret key not configured'); return null; } - - $payload = [ + + $baseUrl = $mode === 'live' + ? 'https://payments.yoco.com/api/checkouts' + : 'https://payments.yoco.com/api/checkouts'; + + $checkoutData = [ 'amount' => $amount, 'currency' => 'ZAR', - 'successUrl' => route('yoco-custom-deposit-success', ['customOrder' => $orderId]), - 'failureUrl' => route('custom-orders.show', ['customOrder' => $orderId]), - 'cancelUrl' => route('custom-orders.show', ['customOrder' => $orderId]), + 'successUrl' => route('yoco-custom-deposit-success', ['customOrder' => $customOrder->uuid]), + 'cancelUrl' => route('custom-orders.show', ['customOrder' => $customOrder->uuid]), + 'failureUrl' => route('custom-orders.show', ['customOrder' => $customOrder->uuid]), 'metadata' => [ - 'order_uuid' => $orderId, + 'order_uuid' => $customOrder->uuid, 'order_type' => $orderType, - ], - 'description' => $description, + 'site' => 'additional_design', + 'description' => $description + ] ]; + Log::info('Yoco checkout data prepared', [ + 'order_id' => $customOrder->uuid, + 'checkout_data' => $checkoutData, + ]); + + // Make API request to Yoco + try { - Log::info('Initiating Yoco payment', [ - 'amount' => $amount, - 'orderId' => $orderId, - 'description' => $description - ]); - $response = Http::withHeaders([ - 'Authorization' => 'Bearer ' . $yocoSecret, + 'Authorization' => 'Bearer ' . $secretKey, 'Content-Type' => 'application/json', - ])->post('https://payments.yoco.com/api/checkouts', $payload); - - Log::info('Yoco API response', [ - 'status' => $response->status(), - 'body' => $response->body() - ]); - + ])->post($baseUrl, $checkoutData); + if ($response->successful()) { - $data = $response->json(); - Log::info('Yoco payment success', [ - 'checkout_url' => $data['redirectUrl'] ?? 'N/A', - 'checkout_id' => $data['id'] ?? 'N/A' + $checkout = $response->json(); + + $checkoutId = $checkout['id'] ?? null; + $redirectUrl = $checkout['redirectUrl'] ?? null; + + Log::info('Yoco checkout created for custom order', [ + 'order_uuid' => $customOrder->uuid, + 'checkout_id' => $checkoutId, + 'redirect_url' => $redirectUrl, ]); + + if (!$checkoutId || !$redirectUrl) { + Log::error('Invalid Yoco checkout response: missing id or redirectUrl', [ + 'order_uuid' => $customOrder->uuid, + 'response' => $checkout, + ]); + throw new \Exception('Invalid Yoco checkout response: missing id or redirectUrl'); + } + + // Persist checkout info to database + try { + $customOrder->update([ + 'yoco_checkout_id' => $checkoutId, + 'yoco_redirect_url' => $redirectUrl, + 'yoco_checkout_response' => json_encode($checkout), + ]); + + // Reload the model to verify update + $customOrder->refresh(); + + if ($customOrder->yoco_checkout_id) { + Log::info('Yoco checkout info saved successfully for custom order', [ + 'order_uuid' => $customOrder->uuid, + 'yoco_checkout_id' => $customOrder->yoco_checkout_id, + ]); + } else { + Log::warning('Yoco checkout ID not saved after update for custom order', [ + 'order_uuid' => $customOrder->uuid, + 'order_data' => $customOrder->toArray(), + ]); + } + } catch (\Exception $dbException) { + Log::error('Database error while saving Yoco checkout info for custom order', [ + 'order_uuid' => $customOrder->uuid, + 'error_message' => $dbException->getMessage(), + 'error_code' => $dbException->getCode(), + 'checkout_id' => $checkoutId, + 'redirect_url' => $redirectUrl, + ]); + throw $dbException; + } + return [ - 'checkout_url' => $data['redirectUrl'], - 'checkout_id' => $data['id'], + 'checkout_url' => $redirectUrl, + 'checkout_id' => $checkoutId, ]; } else { - Log::error('Yoco payment API error', [ + Log::error('Yoco API Error for custom order', [ + 'order_uuid' => $customOrder->uuid, 'status' => $response->status(), 'body' => $response->body() ]); + return null; } } catch (\Exception $e) { - Log::error('Yoco payment exception: ' . $e->getMessage(), [ - 'trace' => $e->getTraceAsString() + Log::error('Yoco Payment Exception for custom order', [ + 'order_uuid' => $customOrder->uuid, + 'message' => $e->getMessage() ]); + return null; } - - return null; } } diff --git a/app/Http/Controllers/OrderController.php b/app/Http/Controllers/OrderController.php index 2f8cd66..1a033e2 100644 --- a/app/Http/Controllers/OrderController.php +++ b/app/Http/Controllers/OrderController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\CustomOrder; use App\Models\Order; use App\Models\OrderItem; use App\Models\Product; @@ -267,6 +268,7 @@ class OrderController extends Controller 'metadata' => [ 'order_uuid' => $order->uuid, 'order_number' => $order->order_number, + 'order_type' => 'standard', 'site' => 'additional_design', ], ]; @@ -477,6 +479,7 @@ class OrderController extends Controller $metadata = $payload['metadata'] ?? []; $orderUuid = $metadata['order_uuid'] ?? null; + $orderType = $metadata['order_type'] ?? null; $site = $metadata['site'] ?? null; $paymentId = $payload['id'] ?? null; $status = $payload['status'] ?? null; @@ -484,6 +487,7 @@ class OrderController extends Controller \Log::info('Yoco Webhook: Payload extracted', [ 'type' => $type, 'site' => $site, + 'order_type' => $orderType, 'order_uuid' => $orderUuid, 'payment_id' => $paymentId, 'status' => $status, @@ -506,49 +510,107 @@ class OrderController extends Controller return response()->json(['error' => 'Invalid payload'], 400); } - // 7. Update Payment State - $order = Order::where('uuid', $orderUuid)->first(); + // 7. Update Payment State where orderType is 'standard' + if ($orderType === 'standard') { - if (!$order) { - \Log::warning('Yoco Webhook: Order not found', ['order_uuid' => $orderUuid]); - return response()->json(['error' => 'Order not found'], 404); - } - - if ($status === 'succeeded') { - \Log::info('Yoco Webhook: Processing successful payment', [ - 'order_uuid' => $orderUuid, - 'payment_id' => $paymentId, - ]); + $order = Order::where('uuid', $orderUuid)->first(); - if ($order->payment_status !== 'paid') { - $order->update([ - 'payment_status' => 'paid', - 'status' => 'processing', - 'yoco_checkout_response' => json_encode($payload), + if (!$order) { + \Log::warning('Yoco Webhook: Order not found', ['order_uuid' => $orderUuid]); + return response()->json(['error' => 'Order not found'], 404); + } + + if ($status === 'succeeded') { + \Log::info('Yoco Webhook: Processing successful payment', [ + 'order_uuid' => $orderUuid, + 'payment_id' => $paymentId, ]); - // Reduce stock - foreach ($order->items as $item) { - $product = $item->product; - $product->stock -= $item->quantity; - $product->save(); + if ($order->payment_status !== 'paid') { + $order->update([ + 'payment_status' => 'paid', + 'status' => 'processing', + 'yoco_checkout_response' => json_encode($payload), + ]); + + // Reduce stock + foreach ($order->items as $item) { + $product = $item->product; + $product->stock -= $item->quantity; + $product->save(); + } + + \Log::info('Yoco Webhook: Order updated for successful payment', [ + 'order_uuid' => $orderUuid, + 'order_id' => $order->id, + ]); } - - \Log::info('Yoco Webhook: Order updated for successful payment', [ + } elseif ($status === 'failed' || $status === 'cancelled') { + \Log::info('Yoco Webhook: Processing failed/cancelled payment', [ 'order_uuid' => $orderUuid, - 'order_id' => $order->id, + 'payment_id' => $paymentId, + 'status' => $status, + ]); + + $order->update([ + 'payment_status' => 'failed', ]); } - } elseif ($status === 'failed' || $status === 'cancelled') { - \Log::info('Yoco Webhook: Processing failed/cancelled payment', [ - 'order_uuid' => $orderUuid, - 'payment_id' => $paymentId, - 'status' => $status, - ]); + } elseif ($orderType === 'custom_deposit' || $orderType === 'custom_balance') { - $order->update([ - 'payment_status' => 'failed', - ]); + $order = CustomOrder::where('uuid', $orderUuid)->first(); + + if (!$order) { + \Log::warning('Yoco Webhook: Order not found', ['order_uuid' => $orderUuid]); + return response()->json(['error' => 'Order not found'], 404); + } + + if ($status === 'succeeded') { + \Log::info('Yoco Webhook: Processing successful payment', [ + 'order_uuid' => $orderUuid, + 'payment_id' => $paymentId, + 'order_type' => $orderType, + ]); + + if ($orderType === 'custom_deposit' && $order->deposit_status !== 'paid') { + $order->update([ + 'deposit_status' => 'paid', + 'status' => 'submitted', + 'yoco_checkout_response' => json_encode($payload), + ]); + + \Log::info('Yoco Webhook: Order updated for successful deposit payment', [ + 'order_uuid' => $orderUuid, + 'order_id' => $order->id, + 'order_type' => $orderType, + ]); + + } elseif ($orderType === 'custom_balance' && $order->balance_status !== 'paid') { + $order->update([ + 'balance_status' => 'paid', + 'status' => 'in production', + 'yoco_checkout_response' => json_encode($payload), + ]); + + \Log::info('Yoco Webhook: Order updated for successful balance payment', [ + 'order_uuid' => $orderUuid, + 'order_id' => $order->id, + 'order_type' => $orderType, + ]); + } + } elseif ($status === 'failed' || $status === 'cancelled') { + \Log::info('Yoco Webhook: Processing failed/cancelled payment', [ + 'order_uuid' => $orderUuid, + 'payment_id' => $paymentId, + 'status' => $status, + ]); + + if ($orderType === 'custom_deposit') { + $order->update(['deposit_status' => 'failed']); + } elseif ($orderType === 'custom_balance') { + $order->update(['balance_status' => 'failed']); + } + } } \Log::info('Yoco Webhook: Processed successfully', [ diff --git a/app/Models/CustomOrder.php b/app/Models/CustomOrder.php index c70372c..74b8138 100644 --- a/app/Models/CustomOrder.php +++ b/app/Models/CustomOrder.php @@ -23,6 +23,9 @@ class CustomOrder extends Model 'balance_amount', 'deposit_status', 'balance_status', + 'yoco_checkout_id', + 'yoco_redirect_url', + 'yoco_checkout_response', 'customer_brief', 'admin_notes', 'submitted_at', diff --git a/public/css/styles.css b/public/css/styles.css index 4b20791..49d8ae3 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -163,7 +163,8 @@ a:hover { header { background-color: var(--bg-primary); - padding: var(--spacing-md) 0; + /* backdrop-filter: blur(10px); */ + padding: var(--spacing-xs) 0; border-bottom: 1px solid var(--border-color); position: sticky; top: 0; @@ -306,6 +307,35 @@ nav a:hover { /* ===== CARDS ===== */ .card { + background-color: white; + padding: var(--spacing-lg); + border-radius: 20px; + border: 1px solid var(--border-color); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + margin-bottom: var(--spacing-lg); + transition: var(--transition); +} + +.card:hover { + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); +} + +.card--pink { + background-color: var(--accent-light); + padding: var(--spacing-lg); + border-radius: 20px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + margin-bottom: var(--spacing-lg); + /* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); */ + transition: var(--transition); +} + +.card--pink:hover { + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); +} + +/* Product cards (with image on top) */ +.product-card { background-color: white; overflow: hidden; transition: var(--transition); @@ -313,7 +343,7 @@ nav a:hover { border-radius: 20px; } -.card:hover { +.product-card:hover { box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); } diff --git a/resources/views/account/orders.blade.php b/resources/views/account/orders.blade.php index ea856d9..d3c66b8 100644 --- a/resources/views/account/orders.blade.php +++ b/resources/views/account/orders.blade.php @@ -50,10 +50,8 @@ } .table-container { - background: white; - border-radius: 8px; + border-radius: 20px; overflow: hidden; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } table { @@ -114,10 +112,7 @@ } .empty-state { - background-color: var(--bg-secondary); - border-radius: 8px; - padding: var(--spacing-xl); - text-align: center; + border-radius: 20px; } .empty-state p { @@ -184,7 +179,7 @@

Standard Orders

@if ($standardOrders->count() > 0) -
+
@@ -215,7 +210,7 @@
@else -
+

You haven't placed any standard orders yet.

Browse Products
@@ -230,7 +225,7 @@
@if ($customOrders->count() > 0) -
+
@@ -267,7 +262,7 @@
@else -
+

You haven't created any custom orders yet.

Create Custom Order
diff --git a/resources/views/account/profile.blade.php b/resources/views/account/profile.blade.php index e6cd022..e49434a 100644 --- a/resources/views/account/profile.blade.php +++ b/resources/views/account/profile.blade.php @@ -28,10 +28,7 @@ } .card { - background: white; - padding: var(--spacing-lg); - border-radius: 8px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-radius: 20px; } .card h2 { @@ -129,9 +126,7 @@ } .help-box { - background-color: var(--accent-light); - padding: var(--spacing-lg); - border-radius: 8px; + border-radius: 20px; } .help-box h3 { @@ -257,7 +252,7 @@
-
+

Need Help?

Contact us for assistance with your account or orders.

support@example.com diff --git a/resources/views/cart.blade.php b/resources/views/cart.blade.php index e75c215..b39d7eb 100644 --- a/resources/views/cart.blade.php +++ b/resources/views/cart.blade.php @@ -18,11 +18,7 @@ margin-bottom: 3rem; } - .cart-items { - background: white; - padding: 2rem; - border-radius: 8px; - } + .empty-cart { text-align: center; @@ -111,9 +107,6 @@ } .summary { - background: white; - padding: 2rem; - border-radius: 8px; height: fit-content; } @@ -221,7 +214,7 @@ @if(count($items) > 0)
-
+
@foreach($items as $item)
@if($item['product']->images->count() > 0) @@ -277,7 +270,7 @@
-
+

Order Summary

diff --git a/resources/views/checkout.blade.php b/resources/views/checkout.blade.php index b05e0c3..6358781 100644 --- a/resources/views/checkout.blade.php +++ b/resources/views/checkout.blade.php @@ -20,9 +20,7 @@ .checkout-form, .order-summary { - background: white; - padding: 2rem; - border-radius: 8px; + border-radius: 20px; } .checkout-form h2, @@ -193,7 +191,7 @@
-
+ @csrf

Delivery Information

@@ -231,7 +229,7 @@
-
+

Order Summary

@foreach($items as $item) diff --git a/resources/views/components/footer.blade.php b/resources/views/components/footer.blade.php index a95e50e..1fe5d90 100644 --- a/resources/views/components/footer.blade.php +++ b/resources/views/components/footer.blade.php @@ -3,9 +3,9 @@ diff --git a/resources/views/components/product-card.blade.php b/resources/views/components/product-card.blade.php index 7debe16..85924d9 100644 --- a/resources/views/components/product-card.blade.php +++ b/resources/views/components/product-card.blade.php @@ -1,5 +1,5 @@ -
+
@if($product->images->count() > 0) {{ $product->name }} @else diff --git a/resources/views/custom-orders/create.blade.php b/resources/views/custom-orders/create.blade.php index 742c8da..e70fc9a 100644 --- a/resources/views/custom-orders/create.blade.php +++ b/resources/views/custom-orders/create.blade.php @@ -21,10 +21,6 @@ } .form-card { - background: white; - padding: var(--spacing-lg); - border-radius: 20px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); margin-bottom: var(--spacing-lg); max-width: 700px; } @@ -196,10 +192,6 @@ } .info-box { - background-color: var(--accent-light); - border: 1px solid var(--border-color); - padding: var(--spacing-lg); - border-radius: 20px; margin-bottom: var(--spacing-lg); } @@ -234,12 +226,7 @@ top: 120px; } .cost-summary-content { - background: white; - padding: var(--spacing-lg); - border-radius: 20px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - margin-bottom: var(--spacing-md); - + margin-bottom: var(--spacing-md); } .cost-summary-content h3 { @@ -350,7 +337,7 @@ @endif -
+

How It Works

  • Submit your custom order with design specifications and reference images
  • @@ -362,7 +349,7 @@
    -
    + @csrf @@ -492,7 +479,7 @@
    -
    +

    Cost Summary

    @@ -520,7 +507,7 @@
    -
    +

    Estimated Total:

    R0.00
    incl. VAT diff --git a/resources/views/custom-orders/deposit-success.blade.php b/resources/views/custom-orders/deposit-success.blade.php index 93a7b62..ca5b066 100644 --- a/resources/views/custom-orders/deposit-success.blade.php +++ b/resources/views/custom-orders/deposit-success.blade.php @@ -5,47 +5,43 @@ @section('styles') @endsection @section('content') -
    +
    -

    Payment Successful!

    -

    - Your deposit payment has been received and processed successfully. -

    +

    Deposit Payment Successful!

    +

    Your deposit payment has been received and processed successfully.

    -
    @endsection diff --git a/resources/views/custom-orders/index.blade.php b/resources/views/custom-orders/index.blade.php index d9ed71e..4bbc1da 100644 --- a/resources/views/custom-orders/index.blade.php +++ b/resources/views/custom-orders/index.blade.php @@ -65,14 +65,10 @@ } .order-card { - background: white; - border-radius: 8px; overflow: hidden; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - transition: var(--transition); } - .order-card:hover { + .order-card.card:hover { box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); } @@ -260,7 +256,7 @@ @else
    @foreach ($customOrders as $order) -
    +
    Order #{{ $order->order_number }}
    diff --git a/resources/views/custom-orders/show.blade.php b/resources/views/custom-orders/show.blade.php index 005f84c..dce7e7f 100644 --- a/resources/views/custom-orders/show.blade.php +++ b/resources/views/custom-orders/show.blade.php @@ -37,24 +37,11 @@ } /* Timeline-specific styles */ - .card { - padding: var(--spacing-lg); - margin-bottom: var(--spacing-lg); - } - - .card:hover { - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - } - .timeline-container { - background: white; - padding: var(--spacing-lg); - border-radius: 20px; margin-bottom: var(--spacing-lg); - transition: var(--transition); } - .timeline-container:hover { + .timeline-container.card:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } @@ -185,7 +172,7 @@ @endif -
    +

    Order Progress

    @php @@ -366,7 +353,7 @@

    Payment Status

    -
    +
    Deposit (20%) {{ ucfirst($customOrder->deposit_status) }} @@ -374,7 +361,7 @@

    R{{ number_format($customOrder->deposit_amount, 2) }}

    -
    +
    Balance (80%) {{ ucfirst($customOrder->balance_status) }} @@ -395,7 +382,7 @@
    -
    +

    Payment Terms

    • The 20% deposit is non-refundable
    • diff --git a/resources/views/fabrics.blade.php b/resources/views/fabrics.blade.php index 1f68f30..82e20b3 100644 --- a/resources/views/fabrics.blade.php +++ b/resources/views/fabrics.blade.php @@ -21,7 +21,7 @@
      -
      +
      Upholstery Fabrics
      Upholstery Fabrics
      @@ -33,7 +33,7 @@
      -
      +
      Curtain Fabrics
      Curtain & Drape Fabrics
      @@ -45,7 +45,7 @@
      -
      +
      Decorative Textiles
      Decorative Textiles
      @@ -67,7 +67,7 @@
      -
      +
      Botanical Garden
      Botanical Garden
      @@ -80,7 +80,7 @@
      -
      +
      Geometric Modern
      Geometric Modern
      @@ -93,7 +93,7 @@
      -
      +
      Vintage Elegance
      Vintage Elegance
      @@ -106,7 +106,7 @@
      -
      +
      Tropical Vibrancy
      Tropical Vibrancy
      @@ -119,7 +119,7 @@
      -
      +
      Minimalist Serenity
      Minimalist Serenity
      @@ -132,7 +132,7 @@
      -
      +
      Luxe Textured
      Luxe Textured
      @@ -175,7 +175,7 @@

      Fabric Specifications & Care

      -
      +

      Standard Widths

      diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index fa8a499..31e18b6 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -163,7 +163,7 @@
      @forelse($categories as $category) -
      +
      {{ $category->name }}
      @@ -235,7 +235,7 @@

      Our work spans luxury hotels, high-end residences, and commercial spaces. See how we transform environments with our custom wallpaper and fabric solutions.

      -
      +
      Luxury Resort Redesign
      @@ -244,7 +244,7 @@
      -
      +
      Modern Executive Office
      @@ -253,7 +253,7 @@
      -
      +
      Residential Penthouse
      @@ -276,7 +276,7 @@
      -
      +

      Sustainability Commitment

      • Low-VOC Inks: Non-toxic printing processes safe for your home and the environment.
      • diff --git a/resources/views/murals.blade.php b/resources/views/murals.blade.php index 6916ac7..ac45a93 100644 --- a/resources/views/murals.blade.php +++ b/resources/views/murals.blade.php @@ -229,15 +229,15 @@

        About Our Murals

        -
        +

        Custom Dimensions

        Order murals in any size. Simply provide your width and height measurements, and we'll print to exact specifications.

        -
        +

        Non-Repeating Design

        Unlike wallpapers, murals are single cohesive images perfect for accent walls. One stunning focal point for your space.

        -
        +

        Premium Quality

        High-resolution printing with vibrant colors and excellent durability. Professional installation guides included.

        diff --git a/resources/views/order-history.blade.php b/resources/views/order-history.blade.php index 8fd7874..54b0dee 100644 --- a/resources/views/order-history.blade.php +++ b/resources/views/order-history.blade.php @@ -12,9 +12,6 @@ } .empty-state { - background: white; - padding: 3rem; - border-radius: 8px; text-align: center; } @@ -31,9 +28,7 @@ } .order-card { - background: white; padding: 1.5rem; - border-radius: 8px; border-left: 4px solid var(--primary-color); } @@ -164,7 +159,7 @@ @if($orders->count() > 0)
        @foreach($orders as $order) -
        +
        @@ -210,7 +205,7 @@ @endforeach
        @else -
        +

        No orders found. Start shopping today!

        Browse Products
        diff --git a/resources/views/order-success.blade.php b/resources/views/order-success.blade.php index ebde282..599de70 100644 --- a/resources/views/order-success.blade.php +++ b/resources/views/order-success.blade.php @@ -5,9 +5,6 @@ @section('styles') @endsection @@ -138,8 +147,8 @@

        Thank you for your purchase. Your order has been successfully received.

        -
        -
        +
        +
        Order Number: {{ $order->order_number }}
        @@ -162,9 +171,11 @@
        +
        - -
        + +
        +

        Order Items

        @foreach($order->items as $item)
        @@ -172,23 +183,23 @@
        {{ $item->product->name }}
        @php - $stock = $item->printStock; - $stockText = $stock ? "{$stock->name}" : "Standard"; - $stockCost = 0; - - if ($stock) { - $stockCost = $item->type === 'wallpaper' ? $stock->cost_per_meter : $stock->cost_per_m2; - } + $stock = $item->printStock; + $stockText = $stock ? "{$stock->name}" : "Standard"; + $stockCost = 0; + + if ($stock) { + $stockCost = $item->type === 'wallpaper' ? $stock->cost_per_meter : $stock->cost_per_m2; + } @endphp - + @if($item->type === 'wallpaper') - Length: {{ $item->length }}m | Finish: {{ $stockText }}
        - Stock Cost: R{{ number_format($stockCost, 2) }}/m + Length: {{ $item->length }}m | Finish: {{ $stockText }}
        + Stock Cost: R{{ number_format($stockCost, 2) }}/m @elseif($item->type === 'mural') - Dimensions: {{ $item->width }}m × {{ $item->height }}m ({{ number_format($item->width * $item->height, 2) }}m²) | Finish: {{ $stockText }}
        - Stock Cost: R{{ number_format($stockCost, 2) }}/m² + Dimensions: {{ $item->width }}m × {{ $item->height }}m ({{ number_format($item->width * $item->height, 2) }}m²) | Finish: {{ $stockText }}
        + Stock Cost: R{{ number_format($stockCost, 2) }}/m² @else - Price: R{{ number_format($stockCost, 2) }} per unit + Price: R{{ number_format($stockCost, 2) }} per unit @endif
        @@ -207,22 +218,25 @@
        @endforeach -
        - Order Total: - R{{ number_format($order->total, 2) }} -
        - -
        - 🔔 What's Next?
        - A confirmation email has been sent to {{ $order->customer_email }}. You'll receive updates about your order status and shipping information shortly. -
        - - -
        - Continue Shopping - Back to Home +
        + Order Total: + R{{ number_format($order->total, 2) }}
        +
        +

        What Happens Next?

        + A confirmation email has been sent to {{ $order->customer_email }}. You'll receive updates about your order status and shipping information shortly. +
        +
        + + + + + +
        -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/product-detail.blade.php b/resources/views/product-detail.blade.php index 737361f..70f1bed 100644 --- a/resources/views/product-detail.blade.php +++ b/resources/views/product-detail.blade.php @@ -457,11 +457,11 @@
        - +
        - +
        @endif @@ -477,6 +477,9 @@ View Cart
        +
        + +
        - - - -
        -
        -
        -
        -

        All Wallpapers

        -

        Showing all designs

        -
        -
        - -
        -
        - -
        - - - - - - - -
        -
        -
        -
        - addLoop($__currentLoopData); foreach($__currentLoopData as $product): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?> - make('components.product-card', ['product' => $product], array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> - popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?> -

        No products available

        - -
        -
        -
        - - -
        -
        -

        Need Help Choosing?

        -

        - Schedule a free consultation with our design experts. We'll help you find the perfect wallpaper for your space. -

        - -
        -
        -stopSection(); ?> - -startSection('scripts'); ?> - -stopSection(); ?> - -make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/storage/framework/views/3a2cb9666b458ecc4f2fa2c2fec9d575.php b/storage/framework/views/3a2cb9666b458ecc4f2fa2c2fec9d575.php deleted file mode 100644 index 80d972e..0000000 --- a/storage/framework/views/3a2cb9666b458ecc4f2fa2c2fec9d575.php +++ /dev/null @@ -1,292 +0,0 @@ - - -startSection('title', 'My Account - Additional Design'); ?> - -startSection('styles'); ?> - -stopSection(); ?> - -startSection('content'); ?> -
        -
        -

        My Account

        -

        Manage your profile and view your orders

        -
        - - -
        - - -
        - - - - -
        -
        - - -
        -
        -
        -stopSection(); ?> - -make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/storage/framework/views/4497534d143181b9fee095928655445e.php b/storage/framework/views/4497534d143181b9fee095928655445e.php index 0c313fa..da7b33e 100644 --- a/storage/framework/views/4497534d143181b9fee095928655445e.php +++ b/storage/framework/views/4497534d143181b9fee095928655445e.php @@ -163,7 +163,7 @@
        addLoop($__currentLoopData); foreach($__currentLoopData as $category): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?> -
        +
        name); ?>
        @@ -235,7 +235,7 @@

        Our work spans luxury hotels, high-end residences, and commercial spaces. See how we transform environments with our custom wallpaper and fabric solutions.

        -
        +
        Luxury Resort Redesign
        @@ -244,7 +244,7 @@
        -
        +
        Modern Executive Office
        @@ -253,7 +253,7 @@
        -
        +
        Residential Penthouse
        @@ -276,7 +276,7 @@
        -
        +

        Sustainability Commitment

        • Low-VOC Inks: Non-toxic printing processes safe for your home and the environment.
        • diff --git a/storage/framework/views/54c3d5356cdbbbf74cb08435146375fb.php b/storage/framework/views/54c3d5356cdbbbf74cb08435146375fb.php deleted file mode 100644 index b3edd15..0000000 --- a/storage/framework/views/54c3d5356cdbbbf74cb08435146375fb.php +++ /dev/null @@ -1,7 +0,0 @@ - - -startSection('title', __('Page Expired')); ?> -startSection('code', '419'); ?> -startSection('message', __('Page Expired')); ?> - -make('errors::minimal', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/storage/framework/views/58cd42abd6d7deaa5d6a18b0afc483d5.php b/storage/framework/views/58cd42abd6d7deaa5d6a18b0afc483d5.php new file mode 100644 index 0000000..6afd43c --- /dev/null +++ b/storage/framework/views/58cd42abd6d7deaa5d6a18b0afc483d5.php @@ -0,0 +1,146 @@ + + +startSection('title', 'Deposit Payment Successful'); ?> + +startSection('styles'); ?> + +stopSection(); ?> + +startSection('content'); ?> +
          +
          +
          +

          Deposit Payment Successful!

          +

          Your deposit payment has been received and processed successfully.

          + + +
          +
          +
          + Order Number: + order_number); ?> +
          +
          + Order Type: + type)); ?> +
          +
          + Deposit Amount Paid: + Rdeposit_amount, 2)); ?> +
          +
          + Remaining Balance: + Rbalance_amount, 2)); ?> +
          +
          + Total Project Cost: + Rtotal_cost, 2)); ?> +
          +
          +
          + + +
          +
          +

          What Happens Next?

          +
            +
          • Your design requirements have been received and confirmed
          • +
          • Our design team will review your specifications and reference images
          • +
          • You'll receive proof designs for your approval within 3-5 business days
          • +
          • Once you approve the proofs, we'll prepare for printing
          • +
          • The remaining balance (80%) will be due before printing begins
          • +
          +
          +
          +
          + + + +
          +stopSection(); ?> + +make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/storage/framework/views/6867b742e394e8b9b24132c9e986866f.php b/storage/framework/views/6867b742e394e8b9b24132c9e986866f.php index 26b6a52..14a0c0b 100644 --- a/storage/framework/views/6867b742e394e8b9b24132c9e986866f.php +++ b/storage/framework/views/6867b742e394e8b9b24132c9e986866f.php @@ -229,15 +229,15 @@

          About Our Murals

          -
          +

          Custom Dimensions

          Order murals in any size. Simply provide your width and height measurements, and we'll print to exact specifications.

          -
          +

          Non-Repeating Design

          Unlike wallpapers, murals are single cohesive images perfect for accent walls. One stunning focal point for your space.

          -
          +

          Premium Quality

          High-resolution printing with vibrant colors and excellent durability. Professional installation guides included.

          diff --git a/storage/framework/views/68d9018dcef4a20a369db8971b25d5cf.php b/storage/framework/views/68d9018dcef4a20a369db8971b25d5cf.php index c7f852d..2774254 100644 --- a/storage/framework/views/68d9018dcef4a20a369db8971b25d5cf.php +++ b/storage/framework/views/68d9018dcef4a20a369db8971b25d5cf.php @@ -1,5 +1,5 @@ -
          + +
          + +