Prepare ERP source for Gitea deployment
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
{% extends "ui/templates/base/layout.html" %}
|
||||
{% block content %}
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div>
|
||||
<h1 class="text-2xl font-semibold text-slate-900">Marketplace Leads</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Public/service leads that can be assigned to Audit Firms and converted into clients.</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<a href="/marketplace/leads" class="rounded-xl border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 shadow-sm">View Leads</a>
|
||||
{% if can_create %}<a href="/marketplace/leads/new" class="rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-soft">New Lead</a>{% endif %}
|
||||
<a href="/marketplace/public-lead" class="rounded-xl border border-brand-200 bg-white px-4 py-2 text-sm font-semibold text-brand-700 shadow-sm">Public Lead Form</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid gap-4 md:grid-cols-4">
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft"><div class="text-sm text-slate-500">Visible Leads</div><div class="mt-2 text-3xl font-semibold">{{ total }}</div></div>
|
||||
<a href="/marketplace/leads?status=NEW" class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft"><div class="text-sm text-slate-500">New</div><div class="mt-2 text-3xl font-semibold">{{ leads|selectattr('status','equalto','NEW')|list|length }}</div></a>
|
||||
<a href="/marketplace/leads?status=ASSIGNED" class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft"><div class="text-sm text-slate-500">Assigned</div><div class="mt-2 text-3xl font-semibold">{{ leads|selectattr('status','equalto','ASSIGNED')|list|length }}</div></a>
|
||||
<a href="/marketplace/leads?status=CONVERTED" class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft"><div class="text-sm text-slate-500">Converted</div><div class="mt-2 text-3xl font-semibold">{{ leads|selectattr('status','equalto','CONVERTED')|list|length }}</div></a>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft">
|
||||
<h2 class="font-semibold">Recent Leads</h2>
|
||||
<div class="mt-4 overflow-x-auto">
|
||||
<table class="min-w-full text-sm">
|
||||
<thead><tr class="border-b text-left text-slate-500"><th class="py-2">Lead</th><th>Service</th><th>Status</th><th>Contact</th><th></th></tr></thead>
|
||||
<tbody>
|
||||
{% for row in leads %}
|
||||
<tr class="border-b last:border-0"><td class="py-2 font-medium">{{ row.lead_no }}<div class="text-xs text-slate-500">{{ row.lead_name }}</div></td><td>{{ row.service_requested }}</td><td>{{ row.status }}</td><td>{{ row.mobile or row.email or '-' }}</td><td><a href="/marketplace/leads/{{ row.id }}" class="text-brand-700">Open</a></td></tr>
|
||||
{% else %}<tr><td colspan="5" class="py-6 text-center text-slate-500">No leads found.</td></tr>{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,61 @@
|
||||
{% extends "ui/templates/base/layout.html" %}
|
||||
{% block content %}
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div><h1 class="text-2xl font-semibold">{{ lead.lead_no }} - {{ lead.lead_name }}</h1><p class="text-sm text-slate-500">{{ lead.service_requested }} • {{ lead.status }}</p></div>
|
||||
<a href="/marketplace/leads" class="rounded-xl border px-4 py-2 text-sm">Back</a>
|
||||
</div>
|
||||
<div class="grid gap-5 lg:grid-cols-3">
|
||||
<div class="lg:col-span-2 rounded-2xl border border-slate-200 bg-white p-5 shadow-soft">
|
||||
<h2 class="font-semibold">Lead Details</h2>
|
||||
<dl class="mt-4 grid gap-3 text-sm md:grid-cols-2">
|
||||
<div><dt class="text-slate-500">Business</dt><dd class="font-medium">{{ lead.business_name or '-' }}</dd></div>
|
||||
<div><dt class="text-slate-500">Contact</dt><dd>{{ lead.mobile or '-' }} / {{ lead.email or '-' }}</dd></div>
|
||||
<div><dt class="text-slate-500">Location</dt><dd>{{ lead.city or '-' }}, {{ lead.state or '-' }}</dd></div>
|
||||
<div><dt class="text-slate-500">Category</dt><dd>{{ lead.service_category or '-' }}</dd></div>
|
||||
<div><dt class="text-slate-500">Priority</dt><dd>{{ lead.priority }}</dd></div>
|
||||
<div><dt class="text-slate-500">Estimated Value</dt><dd>{{ lead.estimated_value }}</dd></div>
|
||||
<div><dt class="text-slate-500">Assigned Audit Firm ID</dt><dd>{{ lead.assigned_tenant_id or '-' }}</dd></div>
|
||||
<div><dt class="text-slate-500">Assigned Partner User ID</dt><dd>{{ lead.assigned_partner_user_id or '-' }}</dd></div>
|
||||
<div class="md:col-span-2"><dt class="text-slate-500">Message</dt><dd class="whitespace-pre-line">{{ lead.message or '-' }}</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="space-y-5">
|
||||
{% if can_update %}
|
||||
<form method="post" action="/marketplace/leads/{{ lead.id }}/status" class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<h2 class="font-semibold">Update Status</h2>
|
||||
<select name="status" class="mt-3 w-full rounded-xl border px-3 py-2 text-sm">{% for s in lead_statuses %}<option value="{{ s }}" {% if lead.status==s %}selected{% endif %}>{{ s }}</option>{% endfor %}</select>
|
||||
<button class="mt-3 w-full rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white">Update</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% if can_assign %}
|
||||
<form method="post" action="/marketplace/leads/{{ lead.id }}/assign" class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<h2 class="font-semibold">Assign Lead</h2>
|
||||
<label class="mt-3 block text-sm">Audit Firm<select name="tenant_id" required class="mt-1 w-full rounded-xl border px-3 py-2"><option value="">Select</option>{% for t in audit_firms %}<option value="{{ t.id }}" {% if lead.assigned_tenant_id==t.id %}selected{% endif %}>{{ t.name }}</option>{% endfor %}</select></label>
|
||||
<label class="mt-3 block text-sm">Branch<select name="branch_id" class="mt-1 w-full rounded-xl border px-3 py-2"><option value="0">Optional</option>{% for b in branches %}<option value="{{ b.id }}" {% if lead.assigned_branch_id==b.id %}selected{% endif %}>{{ b.name }}</option>{% endfor %}</select></label>
|
||||
<label class="mt-3 block text-sm">Partner/User<select name="partner_user_id" class="mt-1 w-full rounded-xl border px-3 py-2"><option value="0">Optional</option>{% for p in partners %}<option value="{{ p.id }}" {% if lead.assigned_partner_user_id==p.id %}selected{% endif %}>{{ p.full_name or p.email }}</option>{% endfor %}</select></label>
|
||||
<label class="mt-3 block text-sm">Notes<textarea name="notes" rows="2" class="mt-1 w-full rounded-xl border px-3 py-2"></textarea></label>
|
||||
<button class="mt-3 w-full rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white">Assign</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% if can_convert and not lead.converted_client_id and lead.assigned_tenant_id %}
|
||||
<form method="post" action="/marketplace/leads/{{ lead.id }}/convert-client" class="rounded-2xl border border-slate-200 bg-white p-5 shadow-soft">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<h2 class="font-semibold">Convert to Client</h2>
|
||||
<input type="hidden" name="tenant_id" value="{{ lead.assigned_tenant_id or '' }}">
|
||||
<label class="mt-3 block text-sm">Branch ID<input name="branch_id" value="{{ lead.assigned_branch_id or '' }}" required class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="mt-3 block text-sm">Partner User ID<input name="partner_user_id" value="{{ lead.assigned_partner_user_id or '' }}" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="mt-3 block text-sm">Client Code<input name="client_code" value="LEAD-{{ '%05d'|format(lead.id) }}" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<button class="mt-3 w-full rounded-xl border border-brand-200 bg-white px-4 py-2 text-sm font-semibold text-brand-700">Create Client</button>
|
||||
</form>
|
||||
{% elif can_convert and not lead.converted_client_id and not lead.assigned_tenant_id %}
|
||||
<div class="rounded-2xl border border-amber-200 bg-amber-50 p-5 text-sm text-amber-800">Assign this lead to an Audit Firm before converting it to a client.</div>
|
||||
{% elif lead.converted_client_id %}
|
||||
<div class="rounded-2xl border border-emerald-200 bg-emerald-50 p-5 text-sm text-emerald-800">Converted to Client ID {{ lead.converted_client_id }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,22 @@
|
||||
{% extends "ui/templates/base/layout.html" %}
|
||||
{% block content %}
|
||||
<div class="mx-auto max-w-3xl rounded-2xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<h1 class="text-xl font-semibold">New Marketplace Lead</h1>
|
||||
<form method="post" class="mt-5 grid gap-4 md:grid-cols-2">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<label class="text-sm">Contact Name<input name="lead_name" required class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Business Name<input name="business_name" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Email<input name="email" type="email" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Mobile<input name="mobile" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">City<input name="city" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">State<input name="state" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Category<select name="service_category" class="mt-1 w-full rounded-xl border px-3 py-2"><option value="">Select</option>{% for c in service_categories %}<option value="{{ c }}">{{ c }}</option>{% endfor %}</select></label>
|
||||
<label class="text-sm">Service Requested<input name="service_requested" required placeholder="GST registration, ITR filing, Tax audit..." class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Source<select name="source" class="mt-1 w-full rounded-xl border px-3 py-2">{% for s in lead_sources %}<option value="{{ s }}">{{ s }}</option>{% endfor %}</select></label>
|
||||
<label class="text-sm">Priority<select name="priority" class="mt-1 w-full rounded-xl border px-3 py-2">{% for p in lead_priorities %}<option value="{{ p }}" {% if p=='NORMAL' %}selected{% endif %}>{{ p }}</option>{% endfor %}</select></label>
|
||||
<label class="text-sm">Estimated Value<input name="estimated_value" value="0" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm md:col-span-2">Message<textarea name="message" rows="4" class="mt-1 w-full rounded-xl border px-3 py-2"></textarea></label>
|
||||
<div class="md:col-span-2 flex gap-2"><button class="rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white">Save Lead</button><a href="/marketplace/leads" class="rounded-xl border px-4 py-2 text-sm">Cancel</a></div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,24 @@
|
||||
{% extends "ui/templates/base/layout.html" %}
|
||||
{% block content %}
|
||||
<div class="space-y-5">
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div><h1 class="text-2xl font-semibold">Marketplace Leads</h1><p class="text-sm text-slate-500">Manage public leads and lead assignments.</p></div>
|
||||
{% if can_create %}<a href="/marketplace/leads/new" class="rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-soft">New Lead</a>{% endif %}
|
||||
</div>
|
||||
<form method="get" class="flex flex-wrap gap-2 rounded-2xl border border-slate-200 bg-white p-4 shadow-soft">
|
||||
<input name="q" value="{{ q }}" placeholder="Search lead, contact, service" class="min-w-64 rounded-xl border border-slate-300 px-3 py-2 text-sm">
|
||||
<select name="status" class="rounded-xl border border-slate-300 px-3 py-2 text-sm"><option value="">All Status</option>{% for s in lead_statuses %}<option value="{{ s }}" {% if selected_status == s %}selected{% endif %}>{{ s }}</option>{% endfor %}</select>
|
||||
<button class="rounded-xl border border-slate-300 px-4 py-2 text-sm font-medium">Filter</button>
|
||||
</form>
|
||||
<div class="overflow-x-auto rounded-2xl border border-slate-200 bg-white shadow-soft">
|
||||
<table class="min-w-full text-sm">
|
||||
<thead><tr class="border-b bg-slate-50 text-left text-slate-600"><th class="px-4 py-3">Lead No</th><th>Lead</th><th>Service</th><th>Status</th><th>Priority</th><th>Assigned Audit Firm ID</th><th></th></tr></thead>
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
<tr class="border-b last:border-0"><td class="px-4 py-3 font-medium">{{ row.lead_no }}</td><td>{{ row.lead_name }}<div class="text-xs text-slate-500">{{ row.business_name or '' }}</div></td><td>{{ row.service_requested }}</td><td>{{ row.status }}</td><td>{{ row.priority }}</td><td>{{ row.assigned_tenant_id or '-' }}</td><td><a href="/marketplace/leads/{{ row.id }}" class="text-brand-700">Open</a></td></tr>
|
||||
{% else %}<tr><td colspan="7" class="px-4 py-8 text-center text-slate-500">No leads found.</td></tr>{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,20 @@
|
||||
{% extends "modules/marketplace/templates/marketplace/public_base.html" %}
|
||||
{% block public_content %}
|
||||
<section class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between">
|
||||
<div><h1 class="text-3xl font-bold">Audit Firms</h1><p class="mt-2 text-slate-600">Active audit firms available in the marketplace.</p></div>
|
||||
<a href="/request-service" class="rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white">Request Service</a>
|
||||
</div>
|
||||
<div class="mt-8 grid gap-5 md:grid-cols-2 lg:grid-cols-3">
|
||||
{% for firm in public_audit_firms %}
|
||||
<article class="rounded-3xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<div class="text-lg font-bold">{{ firm.name }}</div>
|
||||
<div class="mt-1 text-sm text-slate-500">{{ firm.firm_type|replace('_',' ')|title if firm.firm_type else 'Audit Firm' }}</div>
|
||||
<div class="mt-4 rounded-2xl bg-slate-50 p-3 text-xs text-slate-500">Service enquiry can be routed by the marketplace team.</div>
|
||||
</article>
|
||||
{% else %}
|
||||
<div class="col-span-full rounded-3xl border border-dashed border-slate-300 bg-white p-8 text-center text-slate-500">No public audit firm listing is available yet.</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,68 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
{% set brand = get_current_firm_branding(request, none) %}
|
||||
<title>{{ title or 'Marketplace' }} | {{ brand.firm_name or 'FilingABC' }}</title>
|
||||
{% if brand.favicon_url %}<link rel="icon" href="{{ brand.favicon_url }}" />{% endif %}
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<link rel="stylesheet" href="/static/css/theme_tokens.css?v=7t4-marketplace" />
|
||||
<style>
|
||||
:root {
|
||||
--af-color-brand-500: {{ brand.primary_color or '#2563eb' }};
|
||||
--af-color-brand-600: {{ brand.primary_color or '#1d4ed8' }};
|
||||
--af-color-brand-700: {{ brand.accent_color or '#1e40af' }};
|
||||
--af-color-brand-800: {{ brand.accent_color or '#1e3a8a' }};
|
||||
--af-color-brand-900: {{ brand.accent_color or '#172554' }};
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
<header class="sticky top-0 z-30 border-b border-slate-200 bg-white/90 backdrop-blur">
|
||||
<div class="mx-auto flex max-w-7xl items-center justify-between px-4 py-4 sm:px-6 lg:px-8">
|
||||
<a href="/" class="flex items-center gap-3">
|
||||
{% if brand.logo_url %}
|
||||
<img src="{{ brand.logo_url }}" alt="{{ brand.firm_name }}" class="h-10 w-10 rounded-2xl object-contain" />
|
||||
{% else %}
|
||||
<div class="flex h-10 w-10 items-center justify-center rounded-2xl bg-brand-600 text-sm font-bold text-white">FA</div>
|
||||
{% endif %}
|
||||
<div>
|
||||
<div class="text-sm font-bold tracking-wide text-slate-900">{{ brand.firm_name or 'FilingABC' }}</div>
|
||||
<div class="text-xs text-slate-500">Marketplace + SaaS</div>
|
||||
</div>
|
||||
</a>
|
||||
<nav class="hidden items-center gap-5 text-sm font-medium text-slate-600 md:flex">
|
||||
<a href="/audit-firms" class="hover:text-brand-700">Audit Firms</a>
|
||||
<a href="/consultants" class="hover:text-brand-700">Consultants</a>
|
||||
<a href="/request-service" class="hover:text-brand-700">Request Service</a>
|
||||
</nav>
|
||||
<div class="flex items-center gap-2">
|
||||
<a href="/login" class="rounded-xl border border-slate-200 px-4 py-2 text-sm font-semibold text-slate-700 hover:bg-slate-50">Login</a>
|
||||
<a href="/request-service" class="hidden rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-soft hover:bg-brand-700 sm:inline-flex">Get Help</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
{% block public_content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<footer class="border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto grid max-w-7xl gap-6 px-4 py-8 text-sm text-slate-500 sm:px-6 md:grid-cols-3 lg:px-8">
|
||||
<div>
|
||||
<div class="font-semibold text-slate-800">{{ brand.firm_name or 'FilingABC' }}</div>
|
||||
<p class="mt-2">A marketplace layer for audit firms, consultants and clients.</p>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-slate-800">Quick Links</div>
|
||||
<div class="mt-2 space-y-1"><a href="/audit-firms" class="block hover:text-brand-700">Audit Firms</a><a href="/consultants" class="block hover:text-brand-700">Consultants</a><a href="/request-service" class="block hover:text-brand-700">Request a Service</a></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-slate-800">Contact</div>
|
||||
<div class="mt-2 space-y-1">{% if brand.contact_email %}<div>{{ brand.contact_email }}</div>{% endif %}{% if brand.contact_mobile %}<div>{{ brand.contact_mobile }}</div>{% endif %}<div>{{ brand.domain_name or request.url.hostname }}</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,20 @@
|
||||
{% extends "modules/marketplace/templates/marketplace/public_base.html" %}
|
||||
{% block public_content %}
|
||||
<section class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between">
|
||||
<div><h1 class="text-3xl font-bold">Consultants</h1><p class="mt-2 text-slate-600">Bookkeeping, filing, advisory and referral partners.</p></div>
|
||||
<a href="/request-service" class="rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white">Request Service</a>
|
||||
</div>
|
||||
<div class="mt-8 grid gap-5 md:grid-cols-2 lg:grid-cols-3">
|
||||
{% for consultant in public_consultants %}
|
||||
<article class="rounded-3xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<div class="text-lg font-bold">{{ consultant.firm_name or consultant.contact_person }}</div>
|
||||
<div class="mt-1 text-sm text-slate-500">{{ consultant.specialisation or consultant.consultant_type|replace('_',' ')|title }}</div>
|
||||
{% if consultant.mobile or consultant.email %}<div class="mt-4 space-y-1 text-xs text-slate-500">{% if consultant.mobile %}<div>{{ consultant.mobile }}</div>{% endif %}{% if consultant.email %}<div>{{ consultant.email }}</div>{% endif %}</div>{% endif %}
|
||||
</article>
|
||||
{% else %}
|
||||
<div class="col-span-full rounded-3xl border border-dashed border-slate-300 bg-white p-8 text-center text-slate-500">No public consultant listing is available yet.</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,20 @@
|
||||
{% extends "ui/templates/base/layout.html" %}
|
||||
{% block content %}
|
||||
<div class="mx-auto max-w-3xl rounded-2xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<h1 class="text-2xl font-semibold">Request Professional Service</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Submit your requirement. The platform team will review and assign it to a suitable Audit Firm.</p>
|
||||
<form method="post" class="mt-5 grid gap-4 md:grid-cols-2">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<label class="text-sm">Your Name<input name="lead_name" required class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Business Name<input name="business_name" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Email<input name="email" type="email" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Mobile<input name="mobile" required class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">City<input name="city" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">State<input name="state" class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm">Category<select name="service_category" class="mt-1 w-full rounded-xl border px-3 py-2"><option value="">Select</option>{% for c in service_categories %}<option value="{{ c }}">{{ c }}</option>{% endfor %}</select></label>
|
||||
<label class="text-sm">Service Required<input name="service_requested" required class="mt-1 w-full rounded-xl border px-3 py-2"></label>
|
||||
<label class="text-sm md:col-span-2">Message<textarea name="message" rows="4" class="mt-1 w-full rounded-xl border px-3 py-2"></textarea></label>
|
||||
<div class="md:col-span-2"><button class="rounded-xl bg-brand-600 px-4 py-2 text-sm font-semibold text-white">Submit Request</button></div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,61 @@
|
||||
{% extends "modules/marketplace/templates/marketplace/public_base.html" %}
|
||||
{% block public_content %}
|
||||
<section class="bg-gradient-to-br from-slate-950 via-slate-900 to-brand-900 text-white">
|
||||
<div class="mx-auto grid max-w-7xl gap-10 px-4 py-16 sm:px-6 lg:grid-cols-[1.15fr_0.85fr] lg:px-8 lg:py-24">
|
||||
<div>
|
||||
<div class="inline-flex rounded-full border border-white/15 bg-white/10 px-4 py-1 text-xs font-semibold uppercase tracking-[0.24em] text-brand-100">FilingABC Marketplace</div>
|
||||
<h1 class="mt-6 max-w-3xl text-4xl font-bold tracking-tight sm:text-5xl">Find audit, GST, income tax, ROC and accounting support from trusted professionals.</h1>
|
||||
<p class="mt-5 max-w-2xl text-base leading-8 text-slate-200">Clients can request services, consultants can generate leads, and the platform team can route work to the right audit firm or partner.</p>
|
||||
<div class="mt-8 flex flex-wrap gap-3">
|
||||
<a href="/request-service" class="rounded-2xl bg-white px-5 py-3 text-sm font-bold text-slate-900 shadow-soft">Request Professional Service</a>
|
||||
<a href="/audit-firms" class="rounded-2xl border border-white/20 px-5 py-3 text-sm font-bold text-white hover:bg-white/10">Browse Audit Firms</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rounded-3xl border border-white/10 bg-white/10 p-6 shadow-2xl backdrop-blur">
|
||||
<div class="grid gap-4 sm:grid-cols-3 lg:grid-cols-1">
|
||||
<div class="rounded-2xl bg-white/10 p-5"><div class="text-3xl font-bold">{{ marketplace_counts.audit_firms }}</div><div class="mt-1 text-sm text-slate-200">Audit firms</div></div>
|
||||
<div class="rounded-2xl bg-white/10 p-5"><div class="text-3xl font-bold">{{ marketplace_counts.consultants }}</div><div class="mt-1 text-sm text-slate-200">Consultants</div></div>
|
||||
<div class="rounded-2xl bg-white/10 p-5"><div class="text-3xl font-bold">{{ marketplace_counts.service_requests }}</div><div class="mt-1 text-sm text-slate-200">Service requests</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8">
|
||||
<div class="grid gap-6 md:grid-cols-3">
|
||||
{% for item in [
|
||||
('GST & Tax Compliance', 'GSTR filing, notices, reconciliation, tax return support and advisory.'),
|
||||
('Audit & Assurance', 'Statutory audit, internal audit, tax audit and engagement tracking.'),
|
||||
('ROC & Business Services', 'Company filings, registrations, payroll, accounting and compliance calendars.')
|
||||
] %}
|
||||
<div class="rounded-3xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<h2 class="text-lg font-bold text-slate-900">{{ item[0] }}</h2>
|
||||
<p class="mt-3 text-sm leading-6 text-slate-600">{{ item[1] }}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mx-auto grid max-w-7xl gap-8 px-4 pb-16 sm:px-6 lg:grid-cols-2 lg:px-8">
|
||||
<div class="rounded-3xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<div class="flex items-center justify-between"><h2 class="text-xl font-bold">Featured Audit Firms</h2><a href="/audit-firms" class="text-sm font-semibold text-brand-700">View all</a></div>
|
||||
<div class="mt-5 space-y-3">
|
||||
{% for firm in public_audit_firms %}
|
||||
<div class="rounded-2xl border border-slate-100 bg-slate-50 p-4"><div class="font-semibold">{{ firm.name }}</div><div class="text-xs text-slate-500">{{ firm.firm_type|replace('_',' ')|title if firm.firm_type else 'Audit Firm' }}</div></div>
|
||||
{% else %}
|
||||
<div class="rounded-2xl border border-dashed border-slate-300 p-4 text-sm text-slate-500">Audit firm listings will appear here after activation.</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="rounded-3xl border border-slate-200 bg-white p-6 shadow-soft">
|
||||
<div class="flex items-center justify-between"><h2 class="text-xl font-bold">Consultant Network</h2><a href="/consultants" class="text-sm font-semibold text-brand-700">View all</a></div>
|
||||
<div class="mt-5 space-y-3">
|
||||
{% for consultant in public_consultants %}
|
||||
<div class="rounded-2xl border border-slate-100 bg-slate-50 p-4"><div class="font-semibold">{{ consultant.firm_name or consultant.contact_person }}</div><div class="text-xs text-slate-500">{{ consultant.specialisation or consultant.consultant_type|replace('_',' ')|title }}</div></div>
|
||||
{% else %}
|
||||
<div class="rounded-2xl border border-dashed border-slate-300 p-4 text-sm text-slate-500">Consultant listings will appear here after activation.</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,22 @@
|
||||
{% extends "modules/marketplace/templates/marketplace/public_base.html" %}
|
||||
{% block public_content %}
|
||||
<section class="mx-auto max-w-4xl px-4 py-12 sm:px-6 lg:px-8">
|
||||
<div class="rounded-3xl border border-slate-200 bg-white p-6 shadow-soft sm:p-8">
|
||||
<h1 class="text-3xl font-bold">Request Professional Service</h1>
|
||||
<p class="mt-2 text-sm text-slate-600">Submit your requirement. The marketplace team will review and route it to the right audit firm or consultant.</p>
|
||||
<form method="post" class="mt-6 grid gap-4 md:grid-cols-2">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<label class="text-sm font-medium">Your Name<input name="lead_name" required class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium">Business Name<input name="business_name" class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium">Email<input name="email" type="email" class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium">Mobile<input name="mobile" required class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium">City<input name="city" class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium">State<input name="state" class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium">Category<select name="service_category" class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"><option value="">Select</option>{% for c in service_categories %}<option value="{{ c }}">{{ c }}</option>{% endfor %}</select></label>
|
||||
<label class="text-sm font-medium">Service Required<input name="service_requested" required placeholder="GST notice reply, ITR filing, audit..." class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></label>
|
||||
<label class="text-sm font-medium md:col-span-2">Message<textarea name="message" rows="4" class="mt-1 w-full rounded-xl border border-slate-300 px-3 py-2"></textarea></label>
|
||||
<div class="md:col-span-2"><button class="rounded-xl bg-brand-600 px-5 py-3 text-sm font-bold text-white shadow-soft">Submit Request</button></div>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% extends "modules/marketplace/templates/marketplace/public_base.html" %}
|
||||
{% block public_content %}
|
||||
<section class="mx-auto max-w-2xl px-4 py-16 sm:px-6 lg:px-8">
|
||||
<div class="rounded-3xl border border-emerald-200 bg-white p-8 text-center shadow-soft">
|
||||
<div class="mx-auto flex h-14 w-14 items-center justify-center rounded-full bg-emerald-100 text-2xl text-emerald-700">✓</div>
|
||||
<h1 class="mt-5 text-3xl font-bold">Thank you</h1>
|
||||
<p class="mt-3 text-slate-600">Your service request has been received by the marketplace team.</p>
|
||||
<p class="mt-4 rounded-2xl bg-slate-50 px-4 py-3 text-sm text-slate-600">Reference: <span class="font-bold text-slate-900">{{ lead.lead_no }}</span></p>
|
||||
<div class="mt-6"><a href="/" class="rounded-xl bg-brand-600 px-5 py-3 text-sm font-bold text-white">Back to Home</a></div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,8 @@
|
||||
{% extends "ui/templates/base/layout.html" %}
|
||||
{% block content %}
|
||||
<div class="mx-auto max-w-xl rounded-2xl border border-slate-200 bg-white p-8 text-center shadow-soft">
|
||||
<h1 class="text-2xl font-semibold">Thank you</h1>
|
||||
<p class="mt-3 text-slate-600">Your service request has been received.</p>
|
||||
<p class="mt-2 text-sm text-slate-500">Reference: <span class="font-semibold text-slate-800">{{ lead.lead_no }}</span></p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user