order button implementation to send message
This commit is contained in:
parent
206e46aa6a
commit
c8c224cfb8
3 changed files with 115 additions and 4 deletions
|
@ -8,6 +8,7 @@ class PriceCalculator {
|
||||||
this.pricingData = null;
|
this.pricingData = null;
|
||||||
this.storagePrice = 0.15; // CHF per GB per month
|
this.storagePrice = 0.15; // CHF per GB per month
|
||||||
this.currentOffering = null;
|
this.currentOffering = null;
|
||||||
|
this.selectedConfiguration = null;
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +30,9 @@ class PriceCalculator {
|
||||||
if (this.currentOffering) {
|
if (this.currentOffering) {
|
||||||
this.loadPricingData();
|
this.loadPricingData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setup order button click handler
|
||||||
|
this.setupOrderButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize DOM element references
|
// Initialize DOM element references
|
||||||
|
@ -59,6 +63,77 @@ class PriceCalculator {
|
||||||
this.storagePriceEl = document.getElementById('storagePrice');
|
this.storagePriceEl = document.getElementById('storagePrice');
|
||||||
this.storageAmount = document.getElementById('storageAmount');
|
this.storageAmount = document.getElementById('storageAmount');
|
||||||
this.totalPrice = document.getElementById('totalPrice');
|
this.totalPrice = document.getElementById('totalPrice');
|
||||||
|
|
||||||
|
// Order button
|
||||||
|
this.orderButton = document.querySelector('a[href="#order-form"]');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup order button click handler
|
||||||
|
setupOrderButton() {
|
||||||
|
if (this.orderButton) {
|
||||||
|
this.orderButton.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
this.handleOrderClick();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle order button click
|
||||||
|
handleOrderClick() {
|
||||||
|
if (this.selectedConfiguration) {
|
||||||
|
// Pre-fill the contact form with configuration details
|
||||||
|
this.prefillContactForm();
|
||||||
|
|
||||||
|
// Scroll to the contact form
|
||||||
|
const contactForm = document.getElementById('order-form');
|
||||||
|
if (contactForm) {
|
||||||
|
contactForm.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre-fill contact form with selected configuration
|
||||||
|
prefillContactForm() {
|
||||||
|
if (!this.selectedConfiguration) return;
|
||||||
|
|
||||||
|
const config = this.selectedConfiguration;
|
||||||
|
|
||||||
|
// Create configuration summary message
|
||||||
|
const configMessage = this.generateConfigurationMessage(config);
|
||||||
|
|
||||||
|
// Find and fill the message textarea in the contact form
|
||||||
|
const messageField = document.querySelector('#order-form textarea[name="message"]');
|
||||||
|
if (messageField) {
|
||||||
|
messageField.value = configMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store configuration details in hidden field
|
||||||
|
const detailsField = document.querySelector('#order-form input[name="details"]');
|
||||||
|
if (detailsField) {
|
||||||
|
detailsField.value = JSON.stringify({
|
||||||
|
plan: config.planName,
|
||||||
|
vcpus: config.vcpus,
|
||||||
|
memory: config.memory,
|
||||||
|
storage: config.storage,
|
||||||
|
serviceLevel: config.serviceLevel,
|
||||||
|
totalPrice: config.totalPrice
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate human-readable configuration message
|
||||||
|
generateConfigurationMessage(config) {
|
||||||
|
return `I would like to order the following configuration:
|
||||||
|
|
||||||
|
Plan: ${config.planName} (${config.planGroup})
|
||||||
|
vCPUs: ${config.vcpus}
|
||||||
|
Memory: ${config.memory} GB
|
||||||
|
Storage: ${config.storage} GB
|
||||||
|
Service Level: ${config.serviceLevel}
|
||||||
|
|
||||||
|
Total Monthly Price: CHF ${config.totalPrice}
|
||||||
|
|
||||||
|
Please contact me with next steps for ordering this configuration.`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load pricing data from API endpoint
|
// Load pricing data from API endpoint
|
||||||
|
@ -374,6 +449,17 @@ class PriceCalculator {
|
||||||
if (this.storagePriceEl) this.storagePriceEl.textContent = storagePriceValue.toFixed(2);
|
if (this.storagePriceEl) this.storagePriceEl.textContent = storagePriceValue.toFixed(2);
|
||||||
if (this.storageAmount) this.storageAmount.textContent = storage;
|
if (this.storageAmount) this.storageAmount.textContent = storage;
|
||||||
if (this.totalPrice) this.totalPrice.textContent = totalPriceValue.toFixed(2);
|
if (this.totalPrice) this.totalPrice.textContent = totalPriceValue.toFixed(2);
|
||||||
|
|
||||||
|
// Store current configuration for order button
|
||||||
|
this.selectedConfiguration = {
|
||||||
|
planName: plan.compute_plan,
|
||||||
|
planGroup: plan.groupName,
|
||||||
|
vcpus: plan.vcpus,
|
||||||
|
memory: plan.ram,
|
||||||
|
storage: storage,
|
||||||
|
serviceLevel: serviceLevel,
|
||||||
|
totalPrice: totalPriceValue.toFixed(2)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show no matching plan found
|
// Show no matching plan found
|
||||||
|
|
|
@ -73,14 +73,29 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="id_message" class="form-label">Your Message (Optional)</label>
|
<label for="id_message" class="form-label">
|
||||||
|
{% if source == "Configuration Order" %}
|
||||||
|
Configuration Details & Additional Message
|
||||||
|
{% else %}
|
||||||
|
Your Message (Optional)
|
||||||
|
{% endif %}
|
||||||
|
</label>
|
||||||
{{ form.message|addclass:"form-control" }}
|
{{ form.message|addclass:"form-control" }}
|
||||||
{% if form.message.errors %}
|
{% if form.message.errors %}
|
||||||
<div class="invalid-feedback d-block">{{ form.message.errors }}</div>
|
<div class="invalid-feedback d-block">{{ form.message.errors }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if source == "Configuration Order" %}
|
||||||
|
<small class="form-text text-muted">Your selected configuration will be automatically filled here when you click "Order This Configuration".</small>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="btn btn-primary">Send Message</button>
|
<button type="submit" class="btn btn-primary">
|
||||||
|
{% if source == "Configuration Order" %}
|
||||||
|
Submit Order Request
|
||||||
|
{% else %}
|
||||||
|
Send Message
|
||||||
|
{% endif %}
|
||||||
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -306,10 +306,20 @@
|
||||||
|
|
||||||
<!-- Order Button -->
|
<!-- Order Button -->
|
||||||
<div class="text-center mt-4">
|
<div class="text-center mt-4">
|
||||||
<a href="#interest" class="btn btn-primary btn-lg px-5 py-3 fw-semibold">
|
<a href="#order-form" class="btn btn-primary btn-lg px-5 py-3 fw-semibold">
|
||||||
<i class="bi bi-cart me-2"></i>Order This Configuration
|
<i class="bi bi-cart me-2"></i>Order This Configuration
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Order Form Section -->
|
||||||
|
<div id="order-form" class="pt-40" style="scroll-margin-top: 30px;">
|
||||||
|
<h4 class="fs-22 fw-semibold lh-1 mb-12">Order Your Configuration</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
{% embedded_contact_form source="Configuration Order" service=offering.service offering_id=offering.id %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% elif offering.plans.all %}
|
{% elif offering.plans.all %}
|
||||||
<!-- Traditional Plans -->
|
<!-- Traditional Plans -->
|
||||||
<h3 class="fs-24 fw-semibold lh-1 mb-12">Available Plans</h3>
|
<h3 class="fs-24 fw-semibold lh-1 mb-12">Available Plans</h3>
|
||||||
|
@ -356,7 +366,7 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if offering.plans.exists %}
|
{% if offering.plans.exists and not pricing_data_by_group_and_service_level %}
|
||||||
<div id="form" class="pt-40">
|
<div id="form" class="pt-40">
|
||||||
<h4 class="fs-22 fw-semibold lh-1 mb-12">I'm interested in a plan</h4>
|
<h4 class="fs-22 fw-semibold lh-1 mb-12">I'm interested in a plan</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue