- Gửi email theo template cho 1 khách, tab lịch sử email, nhắc gia hạn dịch vụ hàng loạt - Mail lưu from/bcc/sent_by; mẫu MARKETING và mẫu cũ trong TemplateSeeder - Gói hosting: giới hạn, trạng thái, lấy plan Plesk qua CLI gateway - Backfill payment_method và ngày đơn hàng còn thiếu - Bổ sung field CPU/RAM/Disk/Băng thông cho loại sản phẩm vps và cloud Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
164 lines
9.8 KiB
PHP
164 lines
9.8 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders\EmailTemplates;
|
|
|
|
use App\Support\EmailTemplateShell as T;
|
|
|
|
final class BillingTemplates
|
|
{
|
|
/**
|
|
* @return array<int, array{scenario: string, name: string, subject: string, body: string, types?: array<string, string>}>
|
|
*/
|
|
public static function all(): array
|
|
{
|
|
return [
|
|
[
|
|
'scenario' => 'invoice_notification',
|
|
'name' => 'Thông báo hoá đơn / gia hạn cước',
|
|
'subject' => '{{title}} #{{invoice_number}} - {{company_name}}',
|
|
'body' => T::title('{{title}}')
|
|
. T::greeting('{{customer_name}}')
|
|
. T::paragraph('{{body_message}}')
|
|
. T::infoTable([
|
|
'Số hoá đơn' => '{{invoice_number}}',
|
|
'Ngày lập' => '{{created_date}}',
|
|
'Hạn thanh toán' => '{{due_date}}',
|
|
'Tổng tiền' => '{{total}} VNĐ',
|
|
'Trạng thái' => '{{status_label}}',
|
|
], '{{outstanding_row}}')
|
|
. T::paragraph('{{intro_note}}')
|
|
. '{{pay_button}}{{attachments_block}}{{note_block}}'
|
|
. T::supportLine(),
|
|
],
|
|
[
|
|
'scenario' => 'invoice_payment_reminder',
|
|
'name' => 'Nhắc thanh toán hoá đơn',
|
|
'subject' => 'Nhắc thanh toán hoá đơn {{invoice_number}}',
|
|
'body' => T::title('Nhắc thanh toán hoá đơn')
|
|
. T::greeting('{{client_name}}')
|
|
. T::paragraph('{{status_line}} Vui lòng thanh toán để dịch vụ không bị gián đoạn.')
|
|
. T::infoTable([
|
|
'Số hoá đơn' => '{{invoice_number}}',
|
|
'Hạn thanh toán' => '{{due_date}}',
|
|
'Tổng tiền' => '{{total}} VNĐ',
|
|
], '{{paid_row}}' . T::row('Còn phải thanh toán', '<span style="color: #dc2626;">{{outstanding}} VNĐ</span>'))
|
|
. T::button('{{login_url}}', 'THANH TOÁN NGAY')
|
|
. T::paragraph('Nếu Quý khách đã thanh toán, vui lòng bỏ qua email này.')
|
|
. T::supportLine(),
|
|
],
|
|
[
|
|
'scenario' => 'customer_deposit_success',
|
|
'name' => 'Nạp tiền thành công',
|
|
'subject' => 'Thông báo nạp tiền thành công - {{amount_formatted}} VNĐ',
|
|
'body' => T::title('Nạp tiền thành công')
|
|
. T::greeting('{{customer_name}}')
|
|
. T::paragraph('Tài khoản của Quý khách đã được nạp tiền thành công. Chi tiết giao dịch:')
|
|
. T::infoTable([
|
|
'Mã giao dịch' => '{{transaction_code}}',
|
|
'Số tiền nạp' => '<span style="color: #16a34a;">{{amount_formatted}} VNĐ</span>',
|
|
'Tiền khuyến mãi' => '{{credit_formatted}} VNĐ',
|
|
'Thời gian' => '{{deposit_date}}',
|
|
'Số dư hiện tại' => '{{current_total_formatted}} VNĐ',
|
|
'Số dư khuyến mãi' => '{{current_credit_formatted}} VNĐ',
|
|
])
|
|
. T::button('{{login_url}}', 'XEM TÀI KHOẢN')
|
|
. T::supportLine(),
|
|
],
|
|
[
|
|
'scenario' => 'manual_deposit_status',
|
|
'name' => 'Trạng thái nạp tiền thủ công',
|
|
'subject' => '{{company_name}} - Trạng thái nạp tiền',
|
|
'types' => ['status_label' => 'string'],
|
|
'body' => T::title('Cập nhật yêu cầu nạp tiền')
|
|
. T::greeting('{{customer_name}}')
|
|
. T::paragraph('{{status_message}}')
|
|
. T::infoTable([
|
|
'Trạng thái' => '<span style="display: inline-block; border-radius: 20px; padding: 2px 12px; background-color: {{status_bg}}; color: {{status_color}};">{{status_label}}</span>',
|
|
'Mã giao dịch' => '{{transaction_code}}',
|
|
'Số tiền' => '{{amount_formatted}} VNĐ',
|
|
'Thời gian gửi' => '{{deposit_date}}',
|
|
], '{{processed_date_row}}')
|
|
. T::button('{{portal_url}}', 'XEM YÊU CẦU NẠP TIỀN')
|
|
. T::supportLine(),
|
|
],
|
|
[
|
|
'scenario' => 'order_created',
|
|
'name' => 'Xác nhận đơn hàng',
|
|
'subject' => 'Xác nhận đơn hàng #{{order_num}}',
|
|
'body' => T::title('Xác nhận đơn hàng')
|
|
. T::greeting('{{client_name}}')
|
|
. T::paragraph('Cảm ơn Quý khách đã đặt hàng tại <strong>{{company_name}}</strong>! Đơn hàng đã được tiếp nhận thành công.')
|
|
. T::infoTable([
|
|
'Mã đơn hàng' => '{{order_num}}',
|
|
'Mã hoá đơn' => '{{invoice_num}}',
|
|
'Tổng tiền' => '{{order_total}} VNĐ',
|
|
])
|
|
. T::paragraph('Chúng tôi sẽ xử lý đơn hàng trong thời gian sớm nhất và thông báo cho Quý khách khi dịch vụ được kích hoạt.')
|
|
. T::supportLine()
|
|
. T::autoNotice(),
|
|
],
|
|
[
|
|
'scenario' => 'domain_order_received',
|
|
'name' => 'Đơn đăng ký tên miền đã ghi nhận',
|
|
'subject' => 'Đơn đăng ký tên miền {{domain_name}} đã được ghi nhận',
|
|
'body' => T::title('Đã ghi nhận đơn đăng ký tên miền')
|
|
. T::greeting('{{customer_name}}')
|
|
. T::paragraph('Cảm ơn Quý khách đã đặt mua tên miền tại <strong>{{company_name}}</strong>. Đơn hàng đang chờ đội ngũ kỹ thuật kiểm tra và đăng ký.')
|
|
. T::infoTable([
|
|
'Tên miền' => '{{domain_name}}',
|
|
'Mã đơn hàng' => '{{order_num}}',
|
|
'Tổng tiền' => '{{order_total}}',
|
|
'Thời gian' => '{{created_at}}',
|
|
])
|
|
. T::note('Việc đặt mua chưa đồng nghĩa tên miền đã được đăng ký thành công. Nếu tên miền không còn khả dụng, số tiền đã thanh toán sẽ được hoàn lại vào tài khoản.')
|
|
. T::button('{{order_url}}', 'XEM ĐƠN HÀNG')
|
|
. T::supportLine(),
|
|
],
|
|
[
|
|
'scenario' => 'domain_order_approved',
|
|
'name' => 'Bàn giao tên miền',
|
|
'subject' => 'Bàn giao tên miền {{domain_name}} - {{company_name}}',
|
|
'body' => T::title('Bàn giao tên miền')
|
|
. T::greeting('{{client_name}}')
|
|
. T::paragraph('Công ty Cổ phần Giải pháp Công nghệ Thế Giới Số xin chân thành cảm ơn Quý khách đã tin tưởng lựa chọn dịch vụ đăng ký và quản lý tên miền của chúng tôi.')
|
|
. T::heading('🌐 Thông tin tên miền')
|
|
. T::infoTable([
|
|
'Tên miền' => '{{domain_name}}',
|
|
'Mã đơn hàng' => '{{order_num}}',
|
|
'Ngày đăng ký' => '{{registered_at}}',
|
|
'Ngày hết hạn' => '{{expires_at}}',
|
|
'NS1' => '{{name_server_1}}',
|
|
'NS2' => '{{name_server_2}}',
|
|
])
|
|
. T::heading('🔐 Thông tin tài khoản quản lý')
|
|
. T::infoTable([
|
|
'Trang đăng nhập' => '<a href="{{login_url}}" target="_blank" rel="noopener">{{login_url}}</a>',
|
|
'Tên đăng nhập' => '{{customer_email}}',
|
|
'Mật khẩu' => 'Mật khẩu tài khoản portal của Quý khách',
|
|
])
|
|
. T::note('Quý khách vui lòng bảo mật thông tin tài khoản. Nếu quên mật khẩu, sử dụng chức năng "Quên mật khẩu" tại trang đăng nhập.')
|
|
. '{{kyc_block}}'
|
|
. T::heading('📞 Hỗ trợ kỹ thuật 24/7')
|
|
. T::supportLine()
|
|
. T::paragraph('Một lần nữa, Thế Giới Số xin chân thành cảm ơn sự tin tưởng và đồng hành của Quý khách.'),
|
|
],
|
|
[
|
|
'scenario' => 'domain_order_rejected',
|
|
'name' => 'Tên miền bị từ chối',
|
|
'subject' => 'Tên miền {{domain_name}} đã bị từ chối đăng ký',
|
|
'body' => T::title('Tên miền bị từ chối đăng ký')
|
|
. T::greeting('{{client_name}}')
|
|
. T::paragraph('Rất tiếc, đơn đăng ký tên miền của Quý khách đã bị <strong style="color: #dc2626;">từ chối</strong>.')
|
|
. T::infoTable([
|
|
'Tên miền' => '{{domain_name}}',
|
|
'Mã đơn hàng' => '{{order_num}}',
|
|
'Lý do' => '{{reason}}',
|
|
])
|
|
. T::paragraph('Số tiền đã thanh toán sẽ được hoàn lại vào tài khoản của Quý khách.')
|
|
. T::supportLine()
|
|
. T::autoNotice(),
|
|
],
|
|
];
|
|
}
|
|
}
|