first push message

This commit is contained in:
2026-07-01 14:41:49 +07:00
parent 6667dec2bf
commit 58b5f46cc4
2951 changed files with 316619 additions and 0 deletions
@@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Step: domain-name.com/trial -> "Choose your Apps" (Step 1: card grid +
live sidebar showing count/selection/Continue) -> "Your Information"
(Step 2: registration form) - mirrors the odoo.com/trial reference flow -->
<template id="trial_signup_template" name="Trial Signup">
<t t-call="website.layout">
<div class="container-fluid py-5" id="trial_wizard">
<!-- ================= STEP 1: Choose your Apps ================= -->
<div id="trial_step_apps">
<div class="text-center mb-5">
<h1 class="display-4">Choose your <span class="text-success" style="border-bottom:3px solid #2ECC71;">Apps</span></h1>
<p class="lead">Free instant access. No credit card required.</p>
</div>
<div class="row">
<div class="col-lg-9" style="padding-left:20%;">
<t t-foreach="app_groups" t-as="group">
<h4 class="mb-3 mt-4" t-out="group[0]"/>
<div class="row g-3 mb-5">
<t t-foreach="group[1]" t-as="app">
<div class="col-md-4 pt-2">
<label class="app-card d-flex align-items-center p-3 border rounded shadow-sm w-100 position-relative"
t-att-for="'app_%s' % app.id"
t-att-data-app-id="app.id"
t-att-data-app-name="app.name">
<input type="checkbox" class="app-card-checkbox d-none"
t-att-value="app.id" t-att-id="'app_%s' % app.id"/>
<span class="app-card-check d-none"></span>
<img t-if="app.icon" t-att-src="'/web/image/saas.app/%s/icon' % app.id"
class="app-card-icon me-3" alt=""/>
<img t-elif="app.icon_url" t-att-src="app.icon_url"
class="app-card-icon me-3" alt=""/>
<span class="fw-bold" t-out="app.name"/>
</label>
</div>
</t>
</div>
</t>
</div>
<!-- Live sidebar - hidden until the user selects at least 1 app -->
<div class="col-lg-3">
<div class="sticky-top d-none" id="trial_sidebar" style="top: 20px;">
<div class="border rounded shadow-sm p-4 mb-3">
<h5><span id="selected_count">0</span> Apps selected</h5>
<ul id="selected_apps_list" class="list-unstyled mt-3 mb-0"></ul>
</div>
<div class="border rounded p-3 mb-3 text-center" style="background:#e6f9ec; color:#1e7e42;">
<strong>Free, with unlimited users, forever.</strong>
</div>
<button type="button" id="btn_continue" class="btn btn-primary btn-lg w-100">
Continue
</button>
</div>
</div>
</div>
</div>
<!-- ================= STEP 2: Your Information ================= -->
<div id="trial_step_form" class="d-none">
<div class="row mb-4">
<div class="col-6">
<strong><span id="selected_count_2">0</span> apps selected</strong>
</div>
<div class="col-6 text-end">
<button type="button" id="btn_change_selection" class="btn btn-light">Change apps selection</button>
</div>
</div>
<form action="/trial/submit" method="post" id="trial_form" class="mx-auto" style="max-width:700px;">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<input type="hidden" name="app_ids_json" id="app_ids_json"/>
<div class="mb-3">
<label>First and Last Name</label>
<input type="text" class="form-control" name="name" required="1"/>
</div>
<div class="mb-3">
<label>Company Name</label>
<input type="text" class="form-control" name="company_name"/>
</div>
<div class="row g-3 mb-3">
<div class="col-md-6">
<label>Email</label>
<input type="email" class="form-control" name="email" required="1"/>
</div>
<div class="col-md-6">
<label>Phone Number</label>
<input type="text" class="form-control" name="phone"/>
</div>
</div>
<div class="row g-3 mb-3">
<div class="col-md-6">
<label>Country</label>
<select class="form-select" name="country_id">
<option value="">-</option>
<t t-foreach="countries" t-as="country">
<option t-att-value="country.id" t-out="country.name"/>
</t>
</select>
</div>
<div class="col-md-6">
<label>Language</label>
<select class="form-select" name="lang">
<t t-foreach="languages" t-as="lang_item">
<option t-att-value="lang_item[0]" t-out="lang_item[1]"/>
</t>
</select>
</div>
</div>
<div class="row g-3 mb-4">
<div class="col-md-6">
<label>Company size</label>
<select class="form-select" name="company_size">
<option value="1-5">1 - 5 employees</option>
<option value="6-20">6 - 20 employees</option>
<option value="21-50">21 - 50 employees</option>
<option value="51-200">51 - 200 employees</option>
<option value="200+">200+ employees</option>
</select>
</div>
<div class="col-md-6">
<label>Primary Interest</label>
<select class="form-select" name="primary_interest">
<option value="my_company">Use it in my company</option>
<option value="client">Use it for a client</option>
<option value="explore">Just exploring</option>
</select>
</div>
</div>
<p class="text-center text-muted small">
By clicking on <strong>Start Now</strong>, you accept our
Subscription Agreement and Privacy Policy.
</p>
<div class="text-center">
<button type="submit" class="btn btn-primary btn-lg px-5">Start Now</button>
</div>
</form>
</div>
</div>
</t>
</template>
<!-- Step: Create Account & Verify Email -->
<template id="trial_check_email_template" name="Check Your Email">
<t t-call="website.layout">
<div class="container py-5 text-center">
<h2>Check your inbox 📩</h2>
<p>We sent a verification link to <strong t-out="email"/>.</p>
<p>Click the link in that email to activate your 15-day free trial.</p>
</div>
</t>
</template>
<!-- Step: 15-Day Free Trial Activated -->
<template id="trial_activated_template" name="Trial Activated">
<t t-call="website.layout">
<div class="container py-5 text-center">
<h2>🎉 Your 15-day free trial is now active!</h2>
<p>Trial ends on <t t-out="trial.trial_end_date"/>.</p>
<form action="/trial/continue" method="post">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<input type="hidden" name="id" t-att-value="trial.id"/>
<button type="submit" class="btn btn-primary btn-lg">Continue</button>
</form>
</div>
</t>
</template>
<!-- Step: System Generates DB / Provisioning in progress -->
<template id="trial_provisioning_template" name="Provisioning">
<t t-call="website.layout">
<div class="container py-5 text-center">
<h2>Setting up your instance...</h2>
<p>This usually takes 30-60 seconds.</p>
<div class="spinner-border text-primary" role="status"/>
<p class="mt-4">
Your instance URL will be:
<strong t-out="database.subdomain"/>
</p>
<p t-if="database.state == 'ready'">
✅ Ready! Admin credentials have been sent to your email.
</p>
</div>
</t>
</template>
<template id="trial_error_template" name="Trial Error">
<t t-call="website.layout">
<div class="container py-5 text-center">
<h2>Something went wrong</h2>
<p t-out="message"/>
</div>
</t>
</template>
</odoo>