migrate to gtea from bistbucket

This commit is contained in:
2026-03-15 17:08:23 +07:00
commit 129ca2260c
3716 changed files with 566316 additions and 0 deletions

View File

@@ -0,0 +1,253 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Invoice #{{ $invoice->invoice_no }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
background-color: #f4f6f8;
margin: 0;
padding: 0;
color: #333333;
}
.wrapper {
width: 100%;
padding: 30px 0;
}
.container {
max-width: 700px;
margin: 0 auto;
background-color: #ffffff;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);
}
.header {
background-color: #1E3A8A;
color: #ffffff;
padding: 30px;
text-align: center;
}
.header h1 {
margin: 0;
font-size: 26px;
font-weight: 700;
letter-spacing: 1px;
}
.header p {
margin: 6px 0 0;
font-size: 15px;
color: #d1d5db;
}
.content {
padding: 30px;
}
.content h2 {
font-size: 20px;
margin: 0 0 10px;
}
.content p {
font-size: 15px;
line-height: 1.6;
margin: 10px 0;
}
.invoice-table {
width: 100%;
border-collapse: collapse;
margin: 25px 0;
}
.invoice-table th,
.invoice-table td {
border: 1px solid #e5e7eb;
padding: 12px 14px;
text-align: left;
font-size: 14px;
}
.invoice-table th {
background-color: #f9fafb;
font-weight: 600;
width: 40%;
}
.invoice-table td {
width: 60%;
}
.total-row td {
font-size: 16px;
font-weight: bold;
color: #1E3A8A;
}
.notice {
background-color: #f9fafb;
border-left: 4px solid #1E3A8A;
padding: 15px;
margin-top: 20px;
font-size: 14px;
color: #555555;
}
.button-wrapper {
text-align: center;
margin: 30px 0 10px;
}
.pay-button {
background-color: #1E3A8A;
color: #ffffff;
padding: 14px 30px;
font-size: 15px;
font-weight: 600;
text-decoration: none;
border-radius: 6px;
display: inline-block;
}
.pay-button:hover {
background-color: #162d6b;
}
.footer {
padding: 25px;
text-align: center;
font-size: 13px;
color: #9ca3af;
}
.footer a {
color: #1E3A8A;
text-decoration: none;
font-weight: 500;
}
@media only screen and (max-width: 600px) {
.content {
padding: 20px;
}
.header h1 {
font-size: 22px;
}
.invoice-table th,
.invoice-table td {
padding: 10px;
}
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container">
{{-- Header --}}
<div class="header">
<h1>
{{ \Carbon\Carbon::parse($invoice->month . '-01')->format('F Y') }} Invoice
</h1>
<p>MolyEcom SaaS Billing</p>
</div>
{{-- Content --}}
<div class="content">
<h2>Hello {{ $shop->name }},</h2>
<p>
This invoice has been generated automatically for your
<strong>{{ $invoice->package_name }}</strong> subscription.
</p>
<table class="invoice-table">
<tr>
<th>Invoice Number</th>
<td>{{ $invoice->invoice_no }}</td>
</tr>
<tr>
<th>Subscription Package</th>
<td>{{ $invoice->package_name }}</td>
</tr>
<tr>
<th>Billing Period</th>
<td>
{{ \Carbon\Carbon::parse($invoice->start_date)->format('d M Y') }}
{{ \Carbon\Carbon::parse($invoice->end_date)->format('d M Y') }}
</td>
</tr>
<tr>
<th>Subscription Expiry</th>
<td>
{{ \Carbon\Carbon::parse($invoice->end_date)->format('d M Y') }}
</td>
</tr>
@if (!empty($domainInfo['domain']))
<tr>
<th>Domain</th>
<td>{{ $domainInfo['domain'] }}</td>
</tr>
<tr>
<th>Domain Expiry</th>
<td>
{{ \Carbon\Carbon::parse($domainInfo['domain_expiry'])->format('d M Y') }}
</td>
</tr>
@endif
<tr class="total-row">
<th>Total Amount</th>
<td> {{ number_format($invoice->amount, 2) }}</td>
</tr>
<tr>
<th>Payment Status</th>
<td>{{ $invoice->status }}</td>
</tr>
</table>
<div class="notice">
<strong>Important:</strong>
Please complete your payment before the subscription expiry date to avoid service interruption.
</div>
@if (!empty($paymentUrl))
<div class="button-wrapper">
<a href="{{ $paymentUrl }}" class="pay-button">
Pay / Upgrade Subscription
</a>
</div>
@endif
<p>
If you have any questions regarding this invoice, feel free to contact our support team.
</p>
</div>
{{-- Footer --}}
<div class="footer">
&copy; {{ date('Y') }} <strong>CodeMoly</strong>. All rights reserved.<br>
MolyEcom SaaS Application |
<a href="{{ config('app.frontend_url') }}">Visit Dashboard</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to {{ config('app.name') }}</title>
</head>
<body style="margin:0; padding:0; font-family:Arial, sans-serif; background-color:#f4f4f4;">
<table width="100%" cellpadding="0" cellspacing="0" bgcolor="#f4f4f4">
<tr>
<td align="center">
<table width="600" cellpadding="0" cellspacing="0" bgcolor="#ffffff"
style="margin:40px 0; border-radius:8px; overflow:hidden; box-shadow:0 0 10px rgba(0,0,0,0.1);">
<!-- Header -->
<tr>
<td style="background-color:#FF5722; padding:20px; text-align:center; color:#ffffff;">
<h1 style="margin:0; font-size:28px;">🎉 Welcome to {{ config('app.name') }}!</h1>
</td>
</tr>
<!-- Greeting -->
<tr>
<td style="padding:30px;">
<p style="font-size:16px; color:#333;">Hi <strong>{{ $restaurantName }}</strong>,</p>
<p style="font-size:16px; color:#333;">
Your restaurant has been successfully onboarded to
<strong>{{ config('app.name') }}</strong>.<br>
Below are your login details and trial package information:
</p>
</td>
</tr>
<!-- Account Details -->
<tr>
<td style="padding:0 30px 20px;">
<h2
style="font-size:18px; color:#FF5722; border-bottom:2px solid #FF5722; padding-bottom:5px;">
🆔 Account Details
</h2>
<ul style="list-style:none; padding:0; margin:10px 0; color:#333;">
<li><strong>Restaurant ID:</strong> {{ $restaurantId }}</li>
<li><strong>Email:</strong> {{ $email }}</li>
<li><strong>Password:</strong> {{ $password }}</li>
</ul>
<p style="font-size:14px; color:#FF5722;">
⚠️ Please change your password after first login.
</p>
</td>
</tr>
<!-- Trial Package -->
<tr>
<td style="padding:0 30px 20px;">
<h2
style="font-size:18px; color:#FF5722; border-bottom:2px solid #FF5722; padding-bottom:5px;">
📦 Trial Package Details
</h2>
<ul style="list-style:none; padding:0; margin:10px 0; color:#333;">
<li><strong>Package Name:</strong> {{ $packageName }}</li>
<li><strong>Trial Duration:</strong> {{ $trialDays }} days</li>
<li><strong>Valid Until:</strong> {{ $trialEndDate }}</li>
</ul>
</td>
</tr>
<!-- Dashboard CTA -->
<tr>
<td style="padding:30px; text-align:center;">
<a href="{{ $loginUrl }}"
style="display:inline-block; padding:15px 30px; background-color:#FF5722;
color:#ffffff; text-decoration:none; font-size:16px; border-radius:5px;">
Login to Dashboard
</a>
</td>
</tr>
<!-- NameServer Info -->
<tr>
<td style="padding:20px 30px;">
<h2
style="font-size:18px; color:#FF5722; border-bottom:2px solid #FF5722; padding-bottom:5px;">
🌐 DNS / NameServer Configuration
</h2>
<p style="font-size:15px; color:#333; margin:10px 0;">
Please update your domains NameServers to point your subdomain automatically:
</p>
<ul style="list-style:none; padding:0; margin:0; color:#333;">
<li><strong>NS1:</strong> ns1.vercel-dns.com</li>
<li><strong>NS2:</strong> ns2.vercel-dns.com</li>
</ul>
<p style="font-size:13px; color:#555; margin-top:10px;">
After updating NameServers, propagation may take up to 30 minutes.
</p>
</td>
</tr>
<!-- Footer -->
<tr>
<td
style="padding:20px 30px; font-size:14px; color:#777; text-align:center; background-color:#f4f4f4;">
For any support, contact us:<br>
<a href="mailto:support@yourdomain.com" style="color:#FF5722; text-decoration:none;">
support@yourdomain.com
</a>
<br><br>
The {{ config('app.name') }} Team
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@@ -0,0 +1,383 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Invoice - Order #{{ $order->order_number }}</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
/* Reset */
html,
body {
margin: 0;
padding: 0;
font-family: Arial, Helvetica, sans-serif;
color: #333
}
a {
color: inherit;
text-decoration: none
}
.container {
max-width: 900px;
margin: 24px auto;
padding: 20px;
border: 1px solid #e6e6e6;
border-radius: 8px;
background: #fff
}
header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
margin-bottom: 18px
}
.brand {
display: flex;
align-items: center;
gap: 12px
}
.brand img {
height: 60px;
width: auto;
border-radius: 6px;
object-fit: contain
}
.brand h2 {
margin: 0;
font-size: 20px;
color: #111
}
.meta {
text-align: right;
font-size: 13px;
color: #666
}
.meta .title {
font-weight: 600;
color: #222
}
.section {
display: flex;
gap: 20px;
margin-bottom: 18px;
flex-wrap: wrap
}
.card {
flex: 1;
min-width: 220px;
padding: 14px;
border: 1px dashed #eee;
border-radius: 6px;
background: #fafafa
}
.card h4 {
margin: 0 0 8px 0;
font-size: 14px
}
.small {
font-size: 13px;
color: #555
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 12px
}
th,
td {
padding: 10px 8px;
text-align: left;
border-bottom: 1px solid #f0f0f0;
font-size: 14px
}
th {
background: #fafafa;
font-weight: 600;
color: #333
}
td.right {
text-align: right
}
.muted {
color: #777;
font-size: 13px
}
.totals {
margin-top: 12px;
max-width: 360px;
margin-left: auto
}
.totals table {
border: none
}
.totals td {
border: none;
padding: 8px 6px
}
.grand {
font-weight: 700;
font-size: 18px
}
.status {
display: inline-block;
padding: 6px 10px;
border-radius: 20px;
font-size: 13px
}
.status.paid {
background: #e6ffef;
color: #046a2f;
border: 1px solid #c9f5d4
}
.status.unpaid {
background: #fff4e6;
color: #a65d00;
border: 1px solid #ffe7c7
}
.notes {
margin-top: 18px;
padding: 12px;
border-left: 4px solid #eee;
background: #fafafa;
border-radius: 4px;
color: #555
}
footer {
margin-top: 24px;
padding-top: 12px;
border-top: 1px solid #f0f0f0;
color: #777;
font-size: 13px;
text-align: center
}
.print-btn {
display: inline-block;
padding: 10px 14px;
border-radius: 6px;
background: #0b5ed7;
color: #fff;
font-weight: 600;
border: none;
cursor: pointer
}
/* Responsive */
@media (max-width:600px) {
header {
flex-direction: column;
align-items: flex-start
}
.meta {
text-align: left
}
.totals {
width: 100%;
margin: 12px 0 0 0
}
}
/* Print */
@media print {
body {
background: #fff
}
.container {
border: none;
box-shadow: none;
margin: 0;
padding: 0
}
.print-btn {
display: none
}
}
</style>
</head>
<body>
<div class="container">
<header>
<div class="brand">
@if (!empty($order->restaurant->logo))
<img src="{{ $order->restaurant->logo }}" alt="{{ $order->restaurant->name }}">
@endif
<div>
<h2>{{ $order->restaurant->name ?? 'Restaurant Name' }}</h2>
<div class="muted" style="margin-top:4px">{{ $order->restaurant->address ?? '' }}</div>
<div class="muted" style="margin-top:2px">Phone: {{ $order->restaurant->phone ?? 'N/A' }}</div>
</div>
</div>
<div class="meta">
<div class="title">Invoice</div>
<div style="margin-top:6px">Order #: <strong>{{ $order->order_number }}</strong></div>
<div style="margin-top:4px">Date:
<strong>{{ \Carbon\Carbon::parse($order->created_at)->format('d M, Y H:i') }}</strong>
</div>
<div style="margin-top:4px">
Status:
@if ($order->payment_status || ($order->payment_status === true || $order->payment_status == 1))
<span class="status paid">Paid</span>
@else
<span class="status unpaid">Unpaid</span>
@endif
</div>
</div>
</header>
<div class="section">
<div class="card">
<h4>Bill To</h4>
<div class="small"><strong>{{ $order->customer->name ?? 'Customer' }}</strong></div>
<div class="muted" style="margin-top:6px">
{{ $order->customer->email ?? '' }}<br>
{{ $order->customer->phone ?? '' }}<br>
{{ $order->shipping_address ?? '' }}
</div>
</div>
<div class="card">
<h4>Order Details</h4>
<div class="small"><strong>Type:</strong>
{{ ucfirst(str_replace('_', ' ', $order->order_type ?? 'N/A')) }}</div>
<div class="small" style="margin-top:6px"><strong>Waiter:</strong> {{ $order->waiter?->name ?? '-' }}
</div>
<div class="small" style="margin-top:6px"><strong>Table:</strong> {{ $order->table?->name ?? '-' }}
</div>
<div class="small" style="margin-top:6px"><strong>Payment:</strong>
{{ $order->payment_method?->name ?? ($order->payment_method_id ? 'Method' : 'N/A') }}</div>
</div>
</div>
<section>
<table>
<thead>
<tr>
<th style="width:48%">Item</th>
<th style="width:12%">Qty</th>
<th style="width:15%">Price</th>
<th style="width:25%" class="right">Total</th>
</tr>
</thead>
<tbody>
@foreach ($order->items as $item)
<tr>
<td>
<div style="font-weight:600">{{ $item->foodItem?->name ?? 'Item' }}</div>
@if (!empty($item->foodVariant))
<div class="muted" style="margin-top:4px;font-size:13px">Variant:
{{ $item->foodVariant->name }}</div>
@endif
@if (!empty($item->addons))
@php
$addons = is_string($item->addons)
? json_decode($item->addons, true)
: $item->addons;
@endphp
@if (!empty($addons) && is_array($addons))
<div class="muted" style="margin-top:6px;font-size:13px">
Addons:
@foreach ($addons as $a)
<span
style="display:inline-block;margin-right:6px">{{ $a['name'] ?? $a }}</span>
@endforeach
</div>
@endif
@endif
</td>
<td>{{ $item->quantity }}</td>
<td>{{ number_format($item->price, 2) }}</td>
<td class="right">{{ number_format($item->total, 2) }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="totals">
<table>
<tr>
<td class="muted">Subtotal</td>
<td class="right">{{ number_format($order->subtotal ?? 0, 2) }}</td>
</tr>
<tr>
<td class="muted">Discount</td>
<td class="right">- {{ number_format($order->discount ?? 0, 2) }}</td>
</tr>
<tr>
<td class="muted">Tax</td>
<td class="right">{{ number_format($order->tax ?? 0, 2) }}</td>
</tr>
@if (!empty($order->delivery_fee))
<tr>
<td class="muted">Delivery Fee</td>
<td class="right">{{ number_format($order->delivery_fee, 2) }}</td>
</tr>
@endif
<tr class="grand">
<td style="padding-top:8px">Grand Total</td>
<td class="right grand">
{{ number_format($order->grand_total ?? $order->subtotal - ($order->discount ?? 0) + ($order->tax ?? 0), 2) }}
</td>
</tr>
</table>
</div>
@if (!empty($order->note))
<div class="notes">
<strong>Note:</strong>
<div style="margin-top:6px">{{ $order->note }}</div>
</div>
@endif
<div
style="margin-top:18px;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap">
<div class="muted" style="font-size:13px">This is a computer generated invoice and does not require a
signature.</div>
<div style="text-align:right">
<button class="print-btn" onclick="window.print()">Print Invoice</button>
</div>
</div>
</section>
<footer>
{{ $order->restaurant->name ?? 'Restaurant Name' }} {{ $order->restaurant->website ?? '' }}
{{ $order->restaurant->email ?? '' }}
</footer>
</div>
</body>
</html>

View File

@@ -0,0 +1,96 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>New Support Ticket Created</title>
</head>
<body style="margin:0; padding:0; font-family:Arial, sans-serif; background-color:#f4f4f4;">
<table width="100%" cellpadding="0" cellspacing="0" bgcolor="#f4f4f4">
<tr>
<td align="center">
<table width="600" cellpadding="0" cellspacing="0" bgcolor="#ffffff"
style="margin:40px 0; border-radius:8px; overflow:hidden; box-shadow:0 0 10px rgba(0,0,0,0.1);">
<!-- Header -->
<tr>
<td style="background-color:#FF5722; padding:20px; text-align:center; color:#ffffff;">
<h1 style="margin:0; font-size:24px;">🛠 New Support Ticket Created</h1>
</td>
</tr>
<!-- Greeting -->
<tr>
<td style="padding:30px;">
<p style="font-size:16px; color:#333333;">
Hi <strong>{{ $ticket->name ?? 'User' }}</strong>,
</p>
<p style="font-size:16px; color:#333333;">
Your support ticket has been successfully created. Here are the details:
</p>
</td>
</tr>
<!-- Ticket Details -->
<tr>
<td style="padding:0 30px 30px 30px;">
<h2
style="font-size:18px; color:#FF5722; border-bottom:2px solid #FF5722; padding-bottom:5px;">
📌 Ticket Details</h2>
<table width="100%" cellpadding="5" cellspacing="0"
style="font-size:14px; color:#333333; border-collapse:collapse;">
<tr>
<td style="width:150px; font-weight:bold;">Title:</td>
<td>{{ $ticket->title }}</td>
</tr>
<tr>
<td style="width:150px; font-weight:bold;">Description:</td>
<td>{{ $ticket->description }}</td>
</tr>
<tr>
<td style="width:150px; font-weight:bold;">Category:</td>
<td>{{ $ticket->category->name ?? 'N/A' }}</td>
</tr>
<tr>
<td style="width:150px; font-weight:bold;">Purchase Code:</td>
<td>{{ $ticket->purchase_code ?? 'N/A' }}</td>
</tr>
<tr>
<td style="width:150px; font-weight:bold;">Related URL:</td>
<td>{{ $ticket->related_url ?? 'N/A' }}</td>
</tr>
<tr>
<td style="width:150px; font-weight:bold;">Support Plan:</td>
<td>{{ $ticket->support_plan ?? 'N/A' }}</td>
</tr>
</table>
</td>
</tr>
<!-- CTA Button -->
<tr>
<td style="padding:20px 30px; text-align:center;">
<a href="{{ url('/support-tickets/' . $ticket->id) }}"
style="display:inline-block; padding:15px 30px; background-color:#FF5722; color:#ffffff; text-decoration:none; font-size:16px; border-radius:5px;">
View Ticket
</a>
</td>
</tr>
<!-- Footer -->
<tr>
<td
style="padding:20px 30px; font-size:14px; color:#777777; text-align:center; background-color:#f4f4f4;">
Thanks,<br>
<strong>{{ config('app.name') }} Team</strong>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>