Add Metatroncube corporate website theme
This commit is contained in:
parent
27778a7901
commit
29bf042efb
2
addons/mcs_corporate_website/__init__.py
Normal file
2
addons/mcs_corporate_website/__init__.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
from . import controllers
|
||||||
|
from . import models
|
||||||
33
addons/mcs_corporate_website/__manifest__.py
Normal file
33
addons/mcs_corporate_website/__manifest__.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "Metatroncube Corporate Website",
|
||||||
|
"version": "17.0.1.0.0",
|
||||||
|
"category": "Website/Theme",
|
||||||
|
"summary": "Corporate website pages and customer support intake for Metatroncube",
|
||||||
|
"author": "Metatroncube Software Solutions",
|
||||||
|
"license": "LGPL-3",
|
||||||
|
"depends": [
|
||||||
|
"crm",
|
||||||
|
"portal",
|
||||||
|
"project",
|
||||||
|
"website",
|
||||||
|
"website_crm",
|
||||||
|
"website_form_project",
|
||||||
|
"website_hr_recruitment",
|
||||||
|
"mcs_appointment_booking",
|
||||||
|
],
|
||||||
|
"data": [
|
||||||
|
"security/security.xml",
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
"data/sequence_data.xml",
|
||||||
|
"views/support_ticket_views.xml",
|
||||||
|
"views/website_templates.xml",
|
||||||
|
"views/website_menus.xml",
|
||||||
|
],
|
||||||
|
"assets": {
|
||||||
|
"web.assets_frontend": [
|
||||||
|
"mcs_corporate_website/static/src/scss/corporate_website.scss",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"installable": True,
|
||||||
|
"application": False,
|
||||||
|
}
|
||||||
1
addons/mcs_corporate_website/controllers/__init__.py
Normal file
1
addons/mcs_corporate_website/controllers/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from . import main
|
||||||
132
addons/mcs_corporate_website/controllers/main.py
Normal file
132
addons/mcs_corporate_website/controllers/main.py
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
from odoo import fields, http
|
||||||
|
from odoo.http import request
|
||||||
|
|
||||||
|
|
||||||
|
class McsCorporateWebsite(http.Controller):
|
||||||
|
def _render(self, template, values=None):
|
||||||
|
values = values or {}
|
||||||
|
values.update(
|
||||||
|
{
|
||||||
|
"mcs_services": self._services(),
|
||||||
|
"mcs_contact": self._contact(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return request.render(template, values)
|
||||||
|
|
||||||
|
def _contact(self):
|
||||||
|
return {
|
||||||
|
"phone": "+1-647-679-7651",
|
||||||
|
"email": "info@metatroncubesolutions.com",
|
||||||
|
"location": "Waterloo, Ontario Canada",
|
||||||
|
}
|
||||||
|
|
||||||
|
def _services(self):
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"key": "website",
|
||||||
|
"name": "Website Development",
|
||||||
|
"summary": "Fast, responsive, SEO-ready websites built around conversion and maintainability.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/service/img-1.webp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "mobile",
|
||||||
|
"name": "Mobile Application Development",
|
||||||
|
"summary": "Reliable mobile and web applications for operational workflows and customer products.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/service/img-2.webp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "design",
|
||||||
|
"name": "Graphic Designing",
|
||||||
|
"summary": "Brand systems, visual campaigns, and assets that make digital experiences consistent.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/service/img-3.webp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ux",
|
||||||
|
"name": "UI / UX Designing",
|
||||||
|
"summary": "Product flows, prototypes, and interfaces designed for clarity and repeated use.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/service/img-4.webp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "seo",
|
||||||
|
"name": "SEO & Content Writing",
|
||||||
|
"summary": "Technical SEO, search content, and positioning that improves qualified discovery.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/service/img-5.webp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "marketing",
|
||||||
|
"name": "Digital Marketing",
|
||||||
|
"summary": "Campaign strategy, performance tracking, and content programs for measurable growth.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/service/img-6.webp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "erp",
|
||||||
|
"name": "ERP Development & Implementation",
|
||||||
|
"summary": "Custom ERP and Odoo implementation across finance, sales, HR, inventory, and delivery.",
|
||||||
|
"image": "https://metatroncubesolutions.com/assets/images/services/erp/card-img.webp",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
@http.route(["/", "/home"], type="http", auth="public", website=True)
|
||||||
|
def home(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_home")
|
||||||
|
|
||||||
|
@http.route(["/services"], type="http", auth="public", website=True)
|
||||||
|
def services(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_services")
|
||||||
|
|
||||||
|
@http.route(["/about"], type="http", auth="public", website=True)
|
||||||
|
def about(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_about")
|
||||||
|
|
||||||
|
@http.route(["/portfolio"], type="http", auth="public", website=True)
|
||||||
|
def portfolio(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_portfolio")
|
||||||
|
|
||||||
|
@http.route(["/support"], type="http", auth="public", website=True)
|
||||||
|
def support(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_support")
|
||||||
|
|
||||||
|
@http.route(["/contact"], type="http", auth="public", website=True)
|
||||||
|
def contact(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_contact")
|
||||||
|
|
||||||
|
@http.route(["/privacy"], type="http", auth="public", website=True)
|
||||||
|
def privacy(self, **kwargs):
|
||||||
|
return self._render("mcs_corporate_website.page_privacy")
|
||||||
|
|
||||||
|
@http.route(["/support/submit"], type="http", auth="public", website=True, methods=["POST"])
|
||||||
|
def submit_support(self, **post):
|
||||||
|
ticket = request.env["mcs.support.ticket"].sudo().create(
|
||||||
|
{
|
||||||
|
"subject": (post.get("subject") or "").strip(),
|
||||||
|
"customer_name": (post.get("customer_name") or "").strip(),
|
||||||
|
"customer_email": (post.get("customer_email") or "").strip(),
|
||||||
|
"customer_phone": (post.get("customer_phone") or "").strip(),
|
||||||
|
"service_area": post.get("service_area") or "general",
|
||||||
|
"priority": post.get("priority") or "0",
|
||||||
|
"description": (post.get("description") or "").strip(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return request.redirect("/support/thanks/%s" % ticket.access_token)
|
||||||
|
|
||||||
|
@http.route(["/support/thanks/<string:token>"], type="http", auth="public", website=True)
|
||||||
|
def support_thanks(self, token, **kwargs):
|
||||||
|
ticket = request.env["mcs.support.ticket"].sudo().search([("access_token", "=", token)], limit=1)
|
||||||
|
if not ticket:
|
||||||
|
return request.not_found()
|
||||||
|
return self._render("mcs_corporate_website.page_support_thanks", {"ticket": ticket})
|
||||||
|
|
||||||
|
@http.route(["/contact/submit"], type="http", auth="public", website=True, methods=["POST"])
|
||||||
|
def submit_contact(self, **post):
|
||||||
|
request.env["crm.lead"].sudo().create(
|
||||||
|
{
|
||||||
|
"name": (post.get("subject") or "Website enquiry").strip(),
|
||||||
|
"contact_name": (post.get("customer_name") or "").strip(),
|
||||||
|
"email_from": (post.get("customer_email") or "").strip(),
|
||||||
|
"phone": (post.get("customer_phone") or "").strip(),
|
||||||
|
"description": (post.get("message") or "").strip(),
|
||||||
|
"type": "lead",
|
||||||
|
"date_open": fields.Datetime.now(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return self._render("mcs_corporate_website.page_contact_thanks")
|
||||||
9
addons/mcs_corporate_website/data/sequence_data.xml
Normal file
9
addons/mcs_corporate_website/data/sequence_data.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="seq_mcs_support_ticket" model="ir.sequence">
|
||||||
|
<field name="name">MCS Support Ticket</field>
|
||||||
|
<field name="code">mcs.support.ticket</field>
|
||||||
|
<field name="prefix">MCS-SUP-</field>
|
||||||
|
<field name="padding">5</field>
|
||||||
|
<field name="company_id" eval="False"/>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
1
addons/mcs_corporate_website/models/__init__.py
Normal file
1
addons/mcs_corporate_website/models/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from . import support_ticket
|
||||||
97
addons/mcs_corporate_website/models/support_ticket.py
Normal file
97
addons/mcs_corporate_website/models/support_ticket.py
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class McsSupportTicket(models.Model):
|
||||||
|
_name = "mcs.support.ticket"
|
||||||
|
_description = "Metatroncube Support Ticket"
|
||||||
|
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||||
|
_order = "priority desc, create_date desc"
|
||||||
|
|
||||||
|
name = fields.Char(default="New", readonly=True, copy=False, tracking=True)
|
||||||
|
subject = fields.Char(required=True, tracking=True)
|
||||||
|
customer_name = fields.Char(required=True)
|
||||||
|
customer_email = fields.Char(required=True)
|
||||||
|
customer_phone = fields.Char()
|
||||||
|
partner_id = fields.Many2one("res.partner", string="Customer", tracking=True)
|
||||||
|
company_id = fields.Many2one(
|
||||||
|
"res.company",
|
||||||
|
default=lambda self: self.env.company,
|
||||||
|
required=True,
|
||||||
|
tracking=True,
|
||||||
|
)
|
||||||
|
service_area = fields.Selection(
|
||||||
|
[
|
||||||
|
("website", "Website Development"),
|
||||||
|
("mobile", "Mobile Application"),
|
||||||
|
("erp", "ERP / Odoo"),
|
||||||
|
("seo", "SEO / Content"),
|
||||||
|
("marketing", "Digital Marketing"),
|
||||||
|
("design", "Design / Branding"),
|
||||||
|
("general", "General Support"),
|
||||||
|
],
|
||||||
|
default="general",
|
||||||
|
required=True,
|
||||||
|
tracking=True,
|
||||||
|
)
|
||||||
|
priority = fields.Selection(
|
||||||
|
[
|
||||||
|
("0", "Normal"),
|
||||||
|
("1", "High"),
|
||||||
|
("2", "Urgent"),
|
||||||
|
],
|
||||||
|
default="0",
|
||||||
|
tracking=True,
|
||||||
|
)
|
||||||
|
state = fields.Selection(
|
||||||
|
[
|
||||||
|
("new", "New"),
|
||||||
|
("in_progress", "In Progress"),
|
||||||
|
("waiting", "Waiting on Customer"),
|
||||||
|
("resolved", "Resolved"),
|
||||||
|
("closed", "Closed"),
|
||||||
|
],
|
||||||
|
default="new",
|
||||||
|
required=True,
|
||||||
|
tracking=True,
|
||||||
|
)
|
||||||
|
description = fields.Text(required=True)
|
||||||
|
access_token = fields.Char(default=lambda self: uuid4().hex, readonly=True, copy=False)
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
for vals in vals_list:
|
||||||
|
if vals.get("name", "New") == "New":
|
||||||
|
vals["name"] = self.env["ir.sequence"].next_by_code("mcs.support.ticket") or "New"
|
||||||
|
if not vals.get("partner_id") and vals.get("customer_email"):
|
||||||
|
vals["partner_id"] = self._find_or_create_partner(vals)
|
||||||
|
return super().create(vals_list)
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _find_or_create_partner(self, vals):
|
||||||
|
email = (vals.get("customer_email") or "").strip()
|
||||||
|
partner = self.env["res.partner"].sudo().search([("email", "=", email)], limit=1)
|
||||||
|
if partner:
|
||||||
|
return partner.id
|
||||||
|
partner = self.env["res.partner"].sudo().create(
|
||||||
|
{
|
||||||
|
"name": vals.get("customer_name") or email,
|
||||||
|
"email": email,
|
||||||
|
"phone": vals.get("customer_phone"),
|
||||||
|
"company_id": vals.get("company_id") or self.env.company.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return partner.id
|
||||||
|
|
||||||
|
def action_start(self):
|
||||||
|
self.write({"state": "in_progress"})
|
||||||
|
|
||||||
|
def action_waiting(self):
|
||||||
|
self.write({"state": "waiting"})
|
||||||
|
|
||||||
|
def action_resolve(self):
|
||||||
|
self.write({"state": "resolved"})
|
||||||
|
|
||||||
|
def action_close(self):
|
||||||
|
self.write({"state": "closed"})
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_mcs_support_ticket_user,mcs.support.ticket.user,model_mcs_support_ticket,mcs_corporate_website.group_mcs_website_support_user,1,1,1,0
|
||||||
|
access_mcs_support_ticket_manager,mcs.support.ticket.manager,model_mcs_support_ticket,mcs_corporate_website.group_mcs_website_support_manager,1,1,1,1
|
||||||
|
12
addons/mcs_corporate_website/security/security.xml
Normal file
12
addons/mcs_corporate_website/security/security.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="group_mcs_website_support_user" model="res.groups">
|
||||||
|
<field name="name">Website Support User</field>
|
||||||
|
<field name="category_id" ref="base.module_category_website"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="group_mcs_website_support_manager" model="res.groups">
|
||||||
|
<field name="name">Website Support Manager</field>
|
||||||
|
<field name="category_id" ref="base.module_category_website"/>
|
||||||
|
<field name="implied_ids" eval="[(4, ref('group_mcs_website_support_user'))]"/>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
@ -0,0 +1,305 @@
|
|||||||
|
.mcs-site {
|
||||||
|
--mcs-ink: #101828;
|
||||||
|
--mcs-muted: #5b6474;
|
||||||
|
--mcs-line: #d8dee8;
|
||||||
|
--mcs-blue: #155eef;
|
||||||
|
--mcs-blue-dark: #0f2f6f;
|
||||||
|
--mcs-surface: #f5f8fc;
|
||||||
|
|
||||||
|
color: var(--mcs-ink);
|
||||||
|
background: #ffffff;
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1180px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
letter-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: clamp(2.4rem, 4rem, 4rem);
|
||||||
|
line-height: 1.02;
|
||||||
|
font-weight: 750;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2rem;
|
||||||
|
line-height: 1.18;
|
||||||
|
font-weight: 720;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.15rem;
|
||||||
|
line-height: 1.3;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: var(--mcs-muted);
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
border-radius: 6px;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 0.75rem 1.05rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-hero {
|
||||||
|
position: relative;
|
||||||
|
min-height: 680px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #ffffff;
|
||||||
|
background: #07111f;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background: linear-gradient(90deg, rgba(7, 17, 31, 0.94), rgba(7, 17, 31, 0.72), rgba(7, 17, 31, 0.18));
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-hero__media {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
object-position: center right;
|
||||||
|
opacity: 0.86;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-hero__content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
max-width: 720px;
|
||||||
|
padding: 96px 0;
|
||||||
|
|
||||||
|
.mcs-lead {
|
||||||
|
max-width: 650px;
|
||||||
|
margin: 24px 0 0;
|
||||||
|
color: rgba(255, 255, 255, 0.82);
|
||||||
|
font-size: 1.18rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-eyebrow {
|
||||||
|
margin: 0 0 12px;
|
||||||
|
color: var(--mcs-blue);
|
||||||
|
font-size: 0.78rem;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-actions {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 12px;
|
||||||
|
margin-top: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-band {
|
||||||
|
padding: 76px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-band--quiet {
|
||||||
|
background: var(--mcs-surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-section-head {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: end;
|
||||||
|
gap: 24px;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
max-width: 760px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-service-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
gap: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-service-grid--wide {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-service-card,
|
||||||
|
.mcs-portfolio-grid article,
|
||||||
|
.mcs-form,
|
||||||
|
.mcs-help-panel,
|
||||||
|
.mcs-metrics div {
|
||||||
|
border: 1px solid var(--mcs-line);
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-service-card {
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
aspect-ratio: 16 / 9;
|
||||||
|
object-fit: cover;
|
||||||
|
background: var(--mcs-surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
padding: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: inline-flex;
|
||||||
|
margin-top: 12px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-split {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) minmax(320px, 0.9fr);
|
||||||
|
gap: 42px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-metrics {
|
||||||
|
display: grid;
|
||||||
|
gap: 12px;
|
||||||
|
|
||||||
|
div {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
display: block;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
display: block;
|
||||||
|
color: var(--mcs-muted);
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-rounded-image {
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 8px;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-cta {
|
||||||
|
background: #101828;
|
||||||
|
color: #ffffff;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
max-width: 760px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-page-head {
|
||||||
|
padding: 96px 0 56px;
|
||||||
|
background: #101828;
|
||||||
|
color: #ffffff;
|
||||||
|
|
||||||
|
p:not(.mcs-eyebrow) {
|
||||||
|
max-width: 760px;
|
||||||
|
color: rgba(255, 255, 255, 0.78);
|
||||||
|
font-size: 1.12rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-portfolio-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
gap: 18px;
|
||||||
|
|
||||||
|
article {
|
||||||
|
padding: 26px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-form-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) 360px;
|
||||||
|
gap: 24px;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-form,
|
||||||
|
.mcs-help-panel {
|
||||||
|
padding: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-form {
|
||||||
|
label {
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--mcs-ink);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control,
|
||||||
|
.form-select {
|
||||||
|
border-radius: 6px;
|
||||||
|
border-color: var(--mcs-line);
|
||||||
|
min-height: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.form-control {
|
||||||
|
min-height: 160px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-help-panel {
|
||||||
|
position: sticky;
|
||||||
|
top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 991.98px) {
|
||||||
|
.mcs-site h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-hero {
|
||||||
|
min-height: 620px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-service-grid,
|
||||||
|
.mcs-service-grid--wide,
|
||||||
|
.mcs-split,
|
||||||
|
.mcs-portfolio-grid,
|
||||||
|
.mcs-form-layout {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-section-head {
|
||||||
|
align-items: start;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mcs-help-panel {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
88
addons/mcs_corporate_website/views/support_ticket_views.xml
Normal file
88
addons/mcs_corporate_website/views/support_ticket_views.xml
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="view_mcs_support_ticket_tree" model="ir.ui.view">
|
||||||
|
<field name="name">mcs.support.ticket.tree</field>
|
||||||
|
<field name="model">mcs.support.ticket</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="subject"/>
|
||||||
|
<field name="customer_name"/>
|
||||||
|
<field name="customer_email"/>
|
||||||
|
<field name="service_area"/>
|
||||||
|
<field name="priority"/>
|
||||||
|
<field name="state"/>
|
||||||
|
<field name="create_date"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_mcs_support_ticket_form" model="ir.ui.view">
|
||||||
|
<field name="name">mcs.support.ticket.form</field>
|
||||||
|
<field name="model">mcs.support.ticket</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<header>
|
||||||
|
<button name="action_start" string="Start" type="object" class="btn-primary" invisible="state != 'new'"/>
|
||||||
|
<button name="action_waiting" string="Waiting on Customer" type="object" invisible="state not in ('new', 'in_progress')"/>
|
||||||
|
<button name="action_resolve" string="Resolve" type="object" invisible="state not in ('new', 'in_progress', 'waiting')"/>
|
||||||
|
<button name="action_close" string="Close" type="object" invisible="state not in ('resolved', 'waiting')"/>
|
||||||
|
<field name="state" widget="statusbar" statusbar_visible="new,in_progress,waiting,resolved,closed"/>
|
||||||
|
</header>
|
||||||
|
<sheet>
|
||||||
|
<div class="oe_title">
|
||||||
|
<h1><field name="name"/></h1>
|
||||||
|
<h2><field name="subject" placeholder="Support subject"/></h2>
|
||||||
|
</div>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="customer_name"/>
|
||||||
|
<field name="customer_email"/>
|
||||||
|
<field name="customer_phone"/>
|
||||||
|
<field name="partner_id"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="service_area"/>
|
||||||
|
<field name="priority"/>
|
||||||
|
<field name="company_id" groups="base.group_multi_company"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
<notebook>
|
||||||
|
<page string="Request">
|
||||||
|
<field name="description" nolabel="1"/>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
|
</sheet>
|
||||||
|
<chatter/>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_mcs_support_ticket_search" model="ir.ui.view">
|
||||||
|
<field name="name">mcs.support.ticket.search</field>
|
||||||
|
<field name="model">mcs.support.ticket</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="subject"/>
|
||||||
|
<field name="customer_name"/>
|
||||||
|
<field name="customer_email"/>
|
||||||
|
<filter string="Open" name="open" domain="[('state', 'not in', ['resolved', 'closed'])]"/>
|
||||||
|
<filter string="Urgent" name="urgent" domain="[('priority', '=', '2')]"/>
|
||||||
|
<group expand="0" string="Group By">
|
||||||
|
<filter string="State" name="group_state" context="{'group_by': 'state'}"/>
|
||||||
|
<filter string="Service Area" name="group_service_area" context="{'group_by': 'service_area'}"/>
|
||||||
|
</group>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_mcs_support_ticket" model="ir.actions.act_window">
|
||||||
|
<field name="name">Support Tickets</field>
|
||||||
|
<field name="res_model">mcs.support.ticket</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="context">{'search_default_open': 1}</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_mcs_website_root" name="Website Operations" sequence="55" groups="mcs_corporate_website.group_mcs_website_support_user"/>
|
||||||
|
<menuitem id="menu_mcs_support_ticket" name="Support Tickets" parent="menu_mcs_website_root" action="action_mcs_support_ticket" sequence="10"/>
|
||||||
|
</odoo>
|
||||||
44
addons/mcs_corporate_website/views/website_menus.xml
Normal file
44
addons/mcs_corporate_website/views/website_menus.xml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="menu_home" model="website.menu">
|
||||||
|
<field name="name">Home</field>
|
||||||
|
<field name="url">/</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">5</field>
|
||||||
|
</record>
|
||||||
|
<record id="menu_services" model="website.menu">
|
||||||
|
<field name="name">Services</field>
|
||||||
|
<field name="url">/services</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">10</field>
|
||||||
|
</record>
|
||||||
|
<record id="menu_portfolio" model="website.menu">
|
||||||
|
<field name="name">Portfolio</field>
|
||||||
|
<field name="url">/portfolio</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">20</field>
|
||||||
|
</record>
|
||||||
|
<record id="menu_about" model="website.menu">
|
||||||
|
<field name="name">About</field>
|
||||||
|
<field name="url">/about</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">30</field>
|
||||||
|
</record>
|
||||||
|
<record id="menu_careers" model="website.menu">
|
||||||
|
<field name="name">Careers</field>
|
||||||
|
<field name="url">/jobs</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">40</field>
|
||||||
|
</record>
|
||||||
|
<record id="menu_support" model="website.menu">
|
||||||
|
<field name="name">Support</field>
|
||||||
|
<field name="url">/support</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">50</field>
|
||||||
|
</record>
|
||||||
|
<record id="menu_contact" model="website.menu">
|
||||||
|
<field name="name">Contact</field>
|
||||||
|
<field name="url">/contact</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
<field name="sequence" type="int">60</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
293
addons/mcs_corporate_website/views/website_templates.xml
Normal file
293
addons/mcs_corporate_website/views/website_templates.xml
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
<odoo>
|
||||||
|
<template id="layout_shell" name="MCS Corporate Shell">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div id="wrap" class="mcs-site">
|
||||||
|
<t t-out="0"/>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_home" name="Metatroncube Home">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-hero">
|
||||||
|
<div class="mcs-hero__media">
|
||||||
|
<img src="https://metatroncubesolutions.com/assets/images/home/banner/web/centre.webp" alt="Metatroncube digital delivery workspace"/>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-hero__content">
|
||||||
|
<p class="mcs-eyebrow">Corporate technology partner</p>
|
||||||
|
<h1>Metatroncube Software Solutions</h1>
|
||||||
|
<p class="mcs-lead">We design, build, and operate websites, business applications, ERP workflows, and digital growth systems for companies that need practical execution.</p>
|
||||||
|
<div class="mcs-actions">
|
||||||
|
<a class="btn btn-primary" href="/contact">Start a Project</a>
|
||||||
|
<a class="btn btn-outline-light" href="/support">Create Support Ticket</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mcs-band">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-section-head">
|
||||||
|
<p class="mcs-eyebrow">Capabilities</p>
|
||||||
|
<h2>Digital delivery from brand to business systems</h2>
|
||||||
|
</div>
|
||||||
|
<div class="mcs-service-grid">
|
||||||
|
<t t-foreach="mcs_services" t-as="service">
|
||||||
|
<article class="mcs-service-card">
|
||||||
|
<img t-att-src="service['image']" t-att-alt="service['name']"/>
|
||||||
|
<div>
|
||||||
|
<h3 t-esc="service['name']"/>
|
||||||
|
<p t-esc="service['summary']"/>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mcs-band mcs-band--quiet">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-split">
|
||||||
|
<div>
|
||||||
|
<p class="mcs-eyebrow">Operating model</p>
|
||||||
|
<h2>Strategy, delivery, and support under one workflow</h2>
|
||||||
|
<p>Customers can use the workplace site to reach the team, book appointments, and raise structured support tickets. Internally, requests are captured in Odoo so ownership and follow-up stay visible.</p>
|
||||||
|
</div>
|
||||||
|
<div class="mcs-metrics">
|
||||||
|
<div><strong>Web</strong><span>Corporate and ecommerce websites</span></div>
|
||||||
|
<div><strong>ERP</strong><span>Odoo and operational systems</span></div>
|
||||||
|
<div><strong>Growth</strong><span>SEO, content, design, campaigns</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="mcs-band mcs-cta">
|
||||||
|
<div class="container">
|
||||||
|
<h2>Need delivery help or active project support?</h2>
|
||||||
|
<div class="mcs-actions">
|
||||||
|
<a class="btn btn-primary" href="/appointments">Book Consultation</a>
|
||||||
|
<a class="btn btn-secondary" href="/support">Open Support Ticket</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_services" name="Metatroncube Services">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Services</p>
|
||||||
|
<h1>Corporate digital services for launch, operations, and growth</h1>
|
||||||
|
<p>Metatroncube supports the full delivery path: discovery, design, engineering, automation, deployment, and ongoing support.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="mcs-band">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-service-grid mcs-service-grid--wide">
|
||||||
|
<t t-foreach="mcs_services" t-as="service">
|
||||||
|
<article class="mcs-service-card">
|
||||||
|
<img t-att-src="service['image']" t-att-alt="service['name']"/>
|
||||||
|
<div>
|
||||||
|
<h2 t-esc="service['name']"/>
|
||||||
|
<p t-esc="service['summary']"/>
|
||||||
|
<a t-att-href="'/contact?service=%s' % service['key']">Discuss this service</a>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_about" name="About Metatroncube">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">About</p>
|
||||||
|
<h1>Built for companies that need dependable software execution</h1>
|
||||||
|
<p>Metatroncube Software Solutions works across Canada and India, combining product design, implementation discipline, and business operations experience.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="mcs-band">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-split">
|
||||||
|
<img class="mcs-rounded-image" src="https://metatroncubesolutions.com/assets/images/about/about.webp" alt="Metatroncube team and service overview"/>
|
||||||
|
<div>
|
||||||
|
<h2>What we focus on</h2>
|
||||||
|
<p>We help clients move from scattered tools and incomplete digital presence into clear, maintainable systems. The work spans websites, ERP, CRM, design, SEO, and customer engagement.</p>
|
||||||
|
<p>Our workplace brings project communication, customer support, scheduling, invoicing, and operational review into one Odoo-backed platform.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_portfolio" name="Metatroncube Portfolio">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Portfolio</p>
|
||||||
|
<h1>Delivery categories we support</h1>
|
||||||
|
<p>A practical portfolio structure for prospects and customers to understand how Metatroncube can support their business.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="mcs-band">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-portfolio-grid">
|
||||||
|
<article><h2>Business Websites</h2><p>Corporate, service, ecommerce, and conversion-oriented sites with maintainable content structures.</p></article>
|
||||||
|
<article><h2>ERP Implementations</h2><p>Odoo workflows for sales, invoicing, project delivery, HR, inventory, and reporting.</p></article>
|
||||||
|
<article><h2>Product Interfaces</h2><p>Dashboards, customer portals, mobile workflows, and operational tools designed for daily use.</p></article>
|
||||||
|
<article><h2>Growth Systems</h2><p>SEO, content, campaign landing pages, analytics, and lead conversion workflows.</p></article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_support" name="Metatroncube Support">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Customer support</p>
|
||||||
|
<h1>Create a support ticket</h1>
|
||||||
|
<p>Use this form for active project issues, website updates, ERP requests, access problems, or delivery follow-up.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="mcs-band">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-form-layout">
|
||||||
|
<form action="/support/submit" method="post" class="mcs-form">
|
||||||
|
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-12 col-md-6">
|
||||||
|
<label class="form-label">Name</label>
|
||||||
|
<input class="form-control" name="customer_name" required="required"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-6">
|
||||||
|
<label class="form-label">Email</label>
|
||||||
|
<input class="form-control" type="email" name="customer_email" required="required"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-6">
|
||||||
|
<label class="form-label">Phone</label>
|
||||||
|
<input class="form-control" name="customer_phone"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-6">
|
||||||
|
<label class="form-label">Service Area</label>
|
||||||
|
<select class="form-select" name="service_area">
|
||||||
|
<option value="general">General Support</option>
|
||||||
|
<option value="website">Website Development</option>
|
||||||
|
<option value="mobile">Mobile Application</option>
|
||||||
|
<option value="erp">ERP / Odoo</option>
|
||||||
|
<option value="seo">SEO / Content</option>
|
||||||
|
<option value="marketing">Digital Marketing</option>
|
||||||
|
<option value="design">Design / Branding</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-8">
|
||||||
|
<label class="form-label">Subject</label>
|
||||||
|
<input class="form-control" name="subject" required="required"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-4">
|
||||||
|
<label class="form-label">Priority</label>
|
||||||
|
<select class="form-select" name="priority">
|
||||||
|
<option value="0">Normal</option>
|
||||||
|
<option value="1">High</option>
|
||||||
|
<option value="2">Urgent</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<label class="form-label">Request Details</label>
|
||||||
|
<textarea class="form-control" name="description" rows="6" required="required"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary mt-4" type="submit">Submit Ticket</button>
|
||||||
|
</form>
|
||||||
|
<aside class="mcs-help-panel">
|
||||||
|
<h2>Before submitting</h2>
|
||||||
|
<p>Share the affected website, module, page, invoice, or project name. Include screenshots or links in the details field when useful.</p>
|
||||||
|
<a class="btn btn-secondary" href="/appointments">Book a call</a>
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_support_thanks" name="Support Ticket Created">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Ticket received</p>
|
||||||
|
<h1>Your support ticket has been created</h1>
|
||||||
|
<p>Reference: <strong t-esc="ticket.name"/></p>
|
||||||
|
<a class="btn btn-primary" href="/support">Create Another Ticket</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_contact" name="Contact Metatroncube">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Contact</p>
|
||||||
|
<h1>Talk to Metatroncube</h1>
|
||||||
|
<p>Send a project enquiry, ask for a proposal, or request a consultation.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="mcs-band">
|
||||||
|
<div class="container">
|
||||||
|
<div class="mcs-form-layout">
|
||||||
|
<form action="/contact/submit" method="post" class="mcs-form">
|
||||||
|
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-12 col-md-6"><label class="form-label">Name</label><input class="form-control" name="customer_name" required="required"/></div>
|
||||||
|
<div class="col-12 col-md-6"><label class="form-label">Email</label><input class="form-control" type="email" name="customer_email" required="required"/></div>
|
||||||
|
<div class="col-12 col-md-6"><label class="form-label">Phone</label><input class="form-control" name="customer_phone"/></div>
|
||||||
|
<div class="col-12 col-md-6"><label class="form-label">Subject</label><input class="form-control" name="subject" required="required"/></div>
|
||||||
|
<div class="col-12"><label class="form-label">Message</label><textarea class="form-control" name="message" rows="6" required="required"/></div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary mt-4" type="submit">Send Enquiry</button>
|
||||||
|
</form>
|
||||||
|
<aside class="mcs-help-panel">
|
||||||
|
<h2>Contact details</h2>
|
||||||
|
<p><strong>Email:</strong> <span t-esc="mcs_contact['email']"/></p>
|
||||||
|
<p><strong>Phone:</strong> <span t-esc="mcs_contact['phone']"/></p>
|
||||||
|
<p><strong>Location:</strong> <span t-esc="mcs_contact['location']"/></p>
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_contact_thanks" name="Contact Enquiry Received">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Enquiry received</p>
|
||||||
|
<h1>Thank you for contacting Metatroncube</h1>
|
||||||
|
<p>The team will review your enquiry and follow up through the contact details provided.</p>
|
||||||
|
<a class="btn btn-primary" href="/">Back Home</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template id="page_privacy" name="Metatroncube Privacy">
|
||||||
|
<t t-call="mcs_corporate_website.layout_shell">
|
||||||
|
<section class="mcs-page-head">
|
||||||
|
<div class="container">
|
||||||
|
<p class="mcs-eyebrow">Privacy</p>
|
||||||
|
<h1>Privacy and customer information</h1>
|
||||||
|
<p>Information submitted through this website is used to respond to enquiries, manage support requests, schedule appointments, and operate customer delivery workflows in Odoo.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
</odoo>
|
||||||
Loading…
x
Reference in New Issue
Block a user