mirror of
https://github.com/thecyberlearn/quantum-ai-v3.git
synced 2026-08-18 14:12:57 +00:00
🎨 Toast standardization and dynamic pricing - safe approach
TOAST IMPROVEMENTS: - Standardize success messages: "✅ [Action] completed successfully\!" - Standardize clipboard messages: "📋 Copied to clipboard\!" - Standardize error messages with ❌ emoji prefix - Remove download and reset toast notifications (feedback is file/visual) DYNAMIC PRICING: - Replace hardcoded prices with {{ agent.price }} template variables - Update JavaScript balance checks to use dynamic pricing - Fix button text and error messages to show correct pricing PRESERVED: - All existing displayResults function logic (no changes to result display) - All existing function names and calling patterns - All agent-specific utilities (DataAnalyzerUtils, SocialAdsUtils, etc.) - Result display functionality remains intact 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
10e3bb8ca9
commit
fa38fbd978
@ -13,7 +13,7 @@
|
|||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// Set data for JavaScript access
|
// Set data for JavaScript access
|
||||||
document.body.setAttribute('data-user-authenticated', '{{ user.is_authenticated|yesno:"true,false" }}');
|
document.body.setAttribute('data-user-authenticated', '{{ user.is_authenticated|yesno:"true,false" }}');
|
||||||
document.body.setAttribute('data-agent-price', '5.00');
|
document.body.setAttribute('data-agent-price', '{{ agent.price }}');
|
||||||
|
|
||||||
// Initialize form submission
|
// Initialize form submission
|
||||||
const form = document.getElementById('agentForm');
|
const form = document.getElementById('agentForm');
|
||||||
@ -277,7 +277,7 @@ function copyResults() {
|
|||||||
if (content) {
|
if (content) {
|
||||||
const text = content.textContent || '';
|
const text = content.textContent || '';
|
||||||
navigator.clipboard.writeText(text).then(() => {
|
navigator.clipboard.writeText(text).then(() => {
|
||||||
DataAnalyzerUtils.showToast('📋 Analysis results copied to clipboard!', 'success');
|
DataAnalyzerUtils.showToast('📋 Copied to clipboard!', 'success');
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
DataAnalyzerUtils.showToast('❌ Failed to copy to clipboard', 'error');
|
DataAnalyzerUtils.showToast('❌ Failed to copy to clipboard', 'error');
|
||||||
});
|
});
|
||||||
@ -296,7 +296,7 @@ function downloadResults() {
|
|||||||
a.download = 'data-analysis-results.txt';
|
a.download = 'data-analysis-results.txt';
|
||||||
a.click();
|
a.click();
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
DataAnalyzerUtils.showToast('💾 Analysis results downloaded!', 'success');
|
// No toast for download - file download is confirmation enough
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ function resetForm() {
|
|||||||
if (input) input.checked = true;
|
if (input) input.checked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
DataAnalyzerUtils.showToast('🔄 Form reset - ready for new analysis', 'success');
|
// No toast for reset - visual feedback is enough
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quick Agent Access Functions
|
// Quick Agent Access Functions
|
||||||
@ -402,7 +402,7 @@ function handleFormSubmission(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const walletBalance = parseFloat(document.getElementById('walletBalance')?.textContent) || 0;
|
const walletBalance = parseFloat(document.getElementById('walletBalance')?.textContent) || 0;
|
||||||
if (walletBalance < 5.00) {
|
if (walletBalance < {{ agent.price }}) {
|
||||||
DataAnalyzerUtils.showToast('Insufficient wallet balance', 'error');
|
DataAnalyzerUtils.showToast('Insufficient wallet balance', 'error');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href = "{% url 'wallet:wallet' %}";
|
window.location.href = "{% url 'wallet:wallet' %}";
|
||||||
@ -547,13 +547,13 @@ document.addEventListener('keydown', function(e) {
|
|||||||
<!-- Submit Button -->
|
<!-- Submit Button -->
|
||||||
<div style="margin-top: var(--spacing-lg);">
|
<div style="margin-top: var(--spacing-lg);">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.wallet_balance >= 5.00 %}
|
{% if user.wallet_balance >= agent.price %}
|
||||||
<button type="submit" class="btn btn-primary btn-full" id="analyzeBtn">
|
<button type="submit" class="btn btn-primary btn-full" id="analyzeBtn">
|
||||||
🚀 Analyze Data (5.00 AED)
|
🚀 Analyze Data ({{ agent.price }} AED)
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
||||||
Insufficient balance! You need 5.00 AED.
|
Insufficient balance! You need {{ agent.price }} AED.
|
||||||
</div>
|
</div>
|
||||||
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
||||||
💰 Top Up Wallet
|
💰 Top Up Wallet
|
||||||
|
|||||||
@ -777,7 +777,7 @@ const EmailWriterModule = (function() {
|
|||||||
const currentBalance = walletBalanceElement ?
|
const currentBalance = walletBalanceElement ?
|
||||||
parseFloat(walletBalanceElement.textContent) : 0;
|
parseFloat(walletBalanceElement.textContent) : 0;
|
||||||
|
|
||||||
if (currentBalance < 3.00) {
|
if (currentBalance < {{ agent.price }}) {
|
||||||
this.showToast('Insufficient wallet balance. Please top up your wallet.', 'error');
|
this.showToast('Insufficient wallet balance. Please top up your wallet.', 'error');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -907,13 +907,13 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
<!-- Action Button -->
|
<!-- Action Button -->
|
||||||
<div style="margin-top: var(--spacing-lg);">
|
<div style="margin-top: var(--spacing-lg);">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.wallet_balance >= 3.00 %}
|
{% if user.wallet_balance >= agent.price %}
|
||||||
<button type="submit" class="btn btn-primary btn-full" id="processButton">
|
<button type="submit" class="btn btn-primary btn-full" id="processButton">
|
||||||
📧 Generate Email (3.00 AED)
|
📧 Generate Email ({{ agent.price }} AED)
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
||||||
Insufficient balance! You need 3.00 AED.
|
Insufficient balance! You need {{ agent.price }} AED.
|
||||||
</div>
|
</div>
|
||||||
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
||||||
💰 Top Up Wallet
|
💰 Top Up Wallet
|
||||||
@ -1026,14 +1026,25 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
function copyResults() {
|
function copyResults() {
|
||||||
const emailContent = document.getElementById('resultsContent');
|
const emailContent = document.getElementById('resultsContent');
|
||||||
const text = emailContent ? (emailContent.innerText || emailContent.textContent || '') : '';
|
const text = emailContent ? (emailContent.innerText || emailContent.textContent || '') : '';
|
||||||
AgentUtils.copyToClipboard(text, 'Email copied to clipboard!');
|
navigator.clipboard.writeText(text).then(() => {
|
||||||
|
AgentUtils.showToast('📋 Copied to clipboard!', 'success');
|
||||||
|
}).catch(() => {
|
||||||
|
AgentUtils.showToast('❌ Failed to copy to clipboard', 'error');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Download email as text file
|
// Download email as text file
|
||||||
function downloadResults() {
|
function downloadResults() {
|
||||||
const emailContent = document.getElementById('resultsContent');
|
const emailContent = document.getElementById('resultsContent');
|
||||||
const text = emailContent ? (emailContent.innerText || emailContent.textContent || '') : '';
|
const text = emailContent ? (emailContent.innerText || emailContent.textContent || '') : '';
|
||||||
AgentUtils.downloadAsFile(text, `email-${Date.now()}.txt`, 'Email downloaded!');
|
const blob = new Blob([text], { type: 'text/plain' });
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
const a = document.createElement('a');
|
||||||
|
a.href = url;
|
||||||
|
a.download = `email-${Date.now()}.txt`;
|
||||||
|
a.click();
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
// No toast for download - file download is confirmation enough
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset form
|
// Reset form
|
||||||
@ -1054,9 +1065,9 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
const processButton = document.getElementById('processButton');
|
const processButton = document.getElementById('processButton');
|
||||||
processButton.disabled = false;
|
processButton.disabled = false;
|
||||||
processButton.classList.remove('btn-loading');
|
processButton.classList.remove('btn-loading');
|
||||||
processButton.innerHTML = '📧 Generate Email (3.00 AED)';
|
processButton.innerHTML = '📧 Generate Email ({{ agent.price }} AED)';
|
||||||
|
|
||||||
AgentUtils.showToast('Form reset! Ready for another email.', 'success');
|
// No toast for reset - visual feedback is enough
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display email results
|
// Display email results
|
||||||
@ -1104,8 +1115,7 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
resultsContainer.scrollIntoView({ behavior: 'smooth' });
|
resultsContainer.scrollIntoView({ behavior: 'smooth' });
|
||||||
|
|
||||||
// Show success message
|
// Show success message
|
||||||
const successMessage = result.success ? '✅ Email created and payment processed!' : '✅ Email generated!';
|
AgentUtils.showToast('✅ Email completed successfully!', 'success');
|
||||||
AgentUtils.showToast(successMessage, 'success');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Poll for results
|
// Poll for results
|
||||||
@ -1138,7 +1148,7 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
const processButton = document.getElementById('processButton');
|
const processButton = document.getElementById('processButton');
|
||||||
processButton.disabled = false;
|
processButton.disabled = false;
|
||||||
processButton.classList.remove('btn-loading');
|
processButton.classList.remove('btn-loading');
|
||||||
processButton.innerHTML = '📧 Generate Email (3.00 AED)';
|
processButton.innerHTML = '📧 Generate Email ({{ agent.price }} AED)';
|
||||||
|
|
||||||
// Display results only once
|
// Display results only once
|
||||||
if (!EmailWriterModule.getResultsDisplayed()) {
|
if (!EmailWriterModule.getResultsDisplayed()) {
|
||||||
@ -1153,7 +1163,7 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
const processButton = document.getElementById('processButton');
|
const processButton = document.getElementById('processButton');
|
||||||
processButton.disabled = false;
|
processButton.disabled = false;
|
||||||
processButton.classList.remove('btn-loading');
|
processButton.classList.remove('btn-loading');
|
||||||
processButton.innerHTML = '📧 Generate Email (3.00 AED)';
|
processButton.innerHTML = '📧 Generate Email ({{ agent.price }} AED)';
|
||||||
|
|
||||||
AgentUtils.showToast('❌ Processing timeout - please try again', 'error');
|
AgentUtils.showToast('❌ Processing timeout - please try again', 'error');
|
||||||
}
|
}
|
||||||
@ -1167,7 +1177,7 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
const processButton = document.getElementById('processButton');
|
const processButton = document.getElementById('processButton');
|
||||||
processButton.disabled = false;
|
processButton.disabled = false;
|
||||||
processButton.classList.remove('btn-loading');
|
processButton.classList.remove('btn-loading');
|
||||||
processButton.innerHTML = '📧 Generate Email (3.00 AED)';
|
processButton.innerHTML = '📧 Generate Email ({{ agent.price }} AED)';
|
||||||
|
|
||||||
AgentUtils.showToast('❌ Network error during processing - please try again', 'error');
|
AgentUtils.showToast('❌ Network error during processing - please try again', 'error');
|
||||||
});
|
});
|
||||||
@ -1258,7 +1268,7 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
document.getElementById('processingStatus').style.display = 'none';
|
document.getElementById('processingStatus').style.display = 'none';
|
||||||
processButton.disabled = false;
|
processButton.disabled = false;
|
||||||
processButton.classList.remove('btn-loading');
|
processButton.classList.remove('btn-loading');
|
||||||
processButton.innerHTML = '📧 Generate Email (3.00 AED)';
|
processButton.innerHTML = '📧 Generate Email ({{ agent.price }} AED)';
|
||||||
|
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
AgentUtils.showToast(`❌ ${result.error}`, 'error');
|
AgentUtils.showToast(`❌ ${result.error}`, 'error');
|
||||||
@ -1273,7 +1283,7 @@ const AgentUtils = EmailWriterModule.EmailWriterUtils;
|
|||||||
document.getElementById('processingStatus').style.display = 'none';
|
document.getElementById('processingStatus').style.display = 'none';
|
||||||
processButton.disabled = false;
|
processButton.disabled = false;
|
||||||
processButton.classList.remove('btn-loading');
|
processButton.classList.remove('btn-loading');
|
||||||
processButton.innerHTML = '📧 Generate Email (3.00 AED)';
|
processButton.innerHTML = '📧 Generate Email ({{ agent.price }} AED)';
|
||||||
AgentUtils.showToast('❌ Network error - please try again', 'error');
|
AgentUtils.showToast('❌ Network error - please try again', 'error');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -98,9 +98,9 @@
|
|||||||
// Copy to Clipboard Utility
|
// Copy to Clipboard Utility
|
||||||
function copyToClipboard(text, successMessage = 'Copied to clipboard!') {
|
function copyToClipboard(text, successMessage = 'Copied to clipboard!') {
|
||||||
navigator.clipboard.writeText(text).then(() => {
|
navigator.clipboard.writeText(text).then(() => {
|
||||||
showToast(`📋 ${successMessage}`, 'success');
|
showToast('📋 Copied to clipboard!', 'success');
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
showToast('Failed to copy to clipboard', 'error');
|
showToast('❌ Failed to copy to clipboard', 'error');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@
|
|||||||
a.download = filename || `content-${Date.now()}.txt`;
|
a.download = filename || `content-${Date.now()}.txt`;
|
||||||
a.click();
|
a.click();
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
showToast(`💾 ${successMessage}`, 'success');
|
// No toast for download - file download is confirmation enough
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close panel on Escape key
|
// Close panel on Escape key
|
||||||
@ -129,7 +129,7 @@
|
|||||||
const content = document.getElementById('reportContent');
|
const content = document.getElementById('reportContent');
|
||||||
if (content) {
|
if (content) {
|
||||||
const text = content.textContent || content.innerText || '';
|
const text = content.textContent || content.innerText || '';
|
||||||
copyToClipboard(text, '5 Whys report copied to clipboard!');
|
copyToClipboard(text);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -137,7 +137,7 @@
|
|||||||
const content = document.getElementById('reportContent');
|
const content = document.getElementById('reportContent');
|
||||||
if (content) {
|
if (content) {
|
||||||
const text = content.textContent || content.innerText || '';
|
const text = content.textContent || content.innerText || '';
|
||||||
downloadAsFile(text, `5-whys-report-${Date.now()}.txt`, '5 Whys report downloaded!');
|
downloadAsFile(text, `5-whys-report-${Date.now()}.txt`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -697,7 +697,7 @@
|
|||||||
updateWalletBalance(data.wallet_balance);
|
updateWalletBalance(data.wallet_balance);
|
||||||
}
|
}
|
||||||
|
|
||||||
showToast('✅ Report generated and payment processed!', 'success');
|
showToast('✅ 5 Whys analysis completed successfully!', 'success');
|
||||||
} else {
|
} else {
|
||||||
showToast(data.error || 'Failed to generate report', 'error');
|
showToast(data.error || 'Failed to generate report', 'error');
|
||||||
}
|
}
|
||||||
@ -756,12 +756,23 @@
|
|||||||
|
|
||||||
function copyReport() {
|
function copyReport() {
|
||||||
const reportText = generateTextForExport('reportContent');
|
const reportText = generateTextForExport('reportContent');
|
||||||
copyToClipboard(reportText, '📋 Report copied to clipboard!');
|
navigator.clipboard.writeText(reportText).then(() => {
|
||||||
|
showToast('📋 Copied to clipboard!', 'success');
|
||||||
|
}).catch(() => {
|
||||||
|
showToast('❌ Failed to copy to clipboard', 'error');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadReport() {
|
function downloadReport() {
|
||||||
const reportText = generateTextForExport('reportContent');
|
const reportText = generateTextForExport('reportContent');
|
||||||
downloadAsFile(reportText, `five-whys-analysis-${Date.now()}.txt`, '💾 Report downloaded!');
|
const blob = new Blob([reportText], { type: 'text/plain' });
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
const a = document.createElement('a');
|
||||||
|
a.href = url;
|
||||||
|
a.download = `five-whys-analysis-${Date.now()}.txt`;
|
||||||
|
a.click();
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
// No toast for download - file download is confirmation enough
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateTextForExport(elementId) {
|
function generateTextForExport(elementId) {
|
||||||
|
|||||||
@ -574,7 +574,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const currentBalance = parseFloat(document.getElementById('walletBalance').textContent) || 0;
|
const currentBalance = parseFloat(document.getElementById('walletBalance').textContent) || 0;
|
||||||
const requiredBalance = window.AGENT_PRICE || 3.00;
|
const requiredBalance = window.AGENT_PRICE || {{ agent.price }};
|
||||||
if (currentBalance < requiredBalance) {
|
if (currentBalance < requiredBalance) {
|
||||||
showToast(`Insufficient balance! You need ${requiredBalance} AED.`, 'error');
|
showToast(`Insufficient balance! You need ${requiredBalance} AED.`, 'error');
|
||||||
setTimeout(() => window.location.href = document.body.getAttribute('data-wallet-url'), 2000);
|
setTimeout(() => window.location.href = document.body.getAttribute('data-wallet-url'), 2000);
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// Set data for JavaScript access
|
// Set data for JavaScript access
|
||||||
document.body.setAttribute('data-user-authenticated', '{{ user.is_authenticated|yesno:"true,false" }}');
|
document.body.setAttribute('data-user-authenticated', '{{ user.is_authenticated|yesno:"true,false" }}');
|
||||||
document.body.setAttribute('data-agent-price', '4.00');
|
document.body.setAttribute('data-agent-price', '{{ agent.price }}');
|
||||||
|
|
||||||
// Initialize form submission
|
// Initialize form submission
|
||||||
const form = document.getElementById('agentForm');
|
const form = document.getElementById('agentForm');
|
||||||
@ -109,7 +109,7 @@ const SocialAdsUtils = {
|
|||||||
const submitBtn = document.getElementById('generateBtn');
|
const submitBtn = document.getElementById('generateBtn');
|
||||||
if (submitBtn) {
|
if (submitBtn) {
|
||||||
submitBtn.disabled = false;
|
submitBtn.disabled = false;
|
||||||
submitBtn.textContent = '📢 Generate Social Ads (4.00 AED)';
|
submitBtn.textContent = '📢 Generate Social Ads ({{ agent.price }} AED)';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ const SocialAdsUtils = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Show success notification only for final result
|
// Show success notification only for final result
|
||||||
this.showToast('✅ Social ads created successfully!', 'success');
|
this.showToast('✅ Social ads completed successfully!', 'success');
|
||||||
} else if (result.error) {
|
} else if (result.error) {
|
||||||
this.hideProcessing();
|
this.hideProcessing();
|
||||||
this.showToast(`❌ Error: ${result.error}`, 'error');
|
this.showToast(`❌ Error: ${result.error}`, 'error');
|
||||||
@ -353,7 +353,7 @@ function copyResults() {
|
|||||||
navigator.clipboard.writeText(text).then(() => {
|
navigator.clipboard.writeText(text).then(() => {
|
||||||
SocialAdsUtils.showToast('📋 Copied to clipboard!', 'success');
|
SocialAdsUtils.showToast('📋 Copied to clipboard!', 'success');
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
SocialAdsUtils.showToast('❌ Copy failed', 'error');
|
SocialAdsUtils.showToast('❌ Failed to copy to clipboard', 'error');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -464,7 +464,7 @@ function handleFormSubmission(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const walletBalance = parseFloat(document.getElementById('walletBalance')?.textContent) || 0;
|
const walletBalance = parseFloat(document.getElementById('walletBalance')?.textContent) || 0;
|
||||||
if (walletBalance < 4.00) {
|
if (walletBalance < {{ agent.price }}) {
|
||||||
SocialAdsUtils.showToast('Insufficient wallet balance', 'error');
|
SocialAdsUtils.showToast('Insufficient wallet balance', 'error');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href = "{% url 'wallet:wallet' %}";
|
window.location.href = "{% url 'wallet:wallet' %}";
|
||||||
@ -629,13 +629,13 @@ document.addEventListener('keydown', function(e) {
|
|||||||
<!-- Submit Button -->
|
<!-- Submit Button -->
|
||||||
<div style="margin-top: var(--spacing-lg);">
|
<div style="margin-top: var(--spacing-lg);">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.wallet_balance >= 4.00 %}
|
{% if user.wallet_balance >= agent.price %}
|
||||||
<button type="submit" class="btn btn-primary btn-full" id="generateBtn">
|
<button type="submit" class="btn btn-primary btn-full" id="generateBtn">
|
||||||
📢 Generate Social Ads (4.00 AED)
|
📢 Generate Social Ads ({{ agent.price }} AED)
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
||||||
Insufficient balance! You need 4.00 AED.
|
Insufficient balance! You need {{ agent.price }} AED.
|
||||||
</div>
|
</div>
|
||||||
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
||||||
💰 Top Up Wallet
|
💰 Top Up Wallet
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// Set data for JavaScript access
|
// Set data for JavaScript access
|
||||||
document.body.setAttribute('data-user-authenticated', '{{ user.is_authenticated|yesno:"true,false" }}');
|
document.body.setAttribute('data-user-authenticated', '{{ user.is_authenticated|yesno:"true,false" }}');
|
||||||
document.body.setAttribute('data-agent-price', '2.00');
|
document.body.setAttribute('data-agent-price', '{{ agent.price }}');
|
||||||
|
|
||||||
// Initialize form submission
|
// Initialize form submission
|
||||||
const form = document.getElementById('weatherForm');
|
const form = document.getElementById('weatherForm');
|
||||||
@ -107,7 +107,7 @@ const WeatherUtils = {
|
|||||||
this.updateWalletBalance(result.wallet_balance);
|
this.updateWalletBalance(result.wallet_balance);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.showToast('✅ Weather report generated successfully!', 'success');
|
this.showToast('✅ Weather report completed successfully!', 'success');
|
||||||
} else if (result.error) {
|
} else if (result.error) {
|
||||||
if (processingStatus) processingStatus.style.display = 'none';
|
if (processingStatus) processingStatus.style.display = 'none';
|
||||||
this.showToast(`❌ Error: ${result.error}`, 'error');
|
this.showToast(`❌ Error: ${result.error}`, 'error');
|
||||||
@ -172,7 +172,7 @@ function copyResults() {
|
|||||||
if (content) {
|
if (content) {
|
||||||
const text = content.innerText || content.textContent || '';
|
const text = content.innerText || content.textContent || '';
|
||||||
navigator.clipboard.writeText(text).then(() => {
|
navigator.clipboard.writeText(text).then(() => {
|
||||||
WeatherUtils.showToast('📋 Weather report copied to clipboard!', 'success');
|
WeatherUtils.showToast('📋 Copied to clipboard!', 'success');
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
WeatherUtils.showToast('❌ Failed to copy to clipboard', 'error');
|
WeatherUtils.showToast('❌ Failed to copy to clipboard', 'error');
|
||||||
});
|
});
|
||||||
@ -191,7 +191,7 @@ function downloadResults() {
|
|||||||
a.download = 'weather-report.txt';
|
a.download = 'weather-report.txt';
|
||||||
a.click();
|
a.click();
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
WeatherUtils.showToast('💾 Weather report downloaded!', 'success');
|
// No toast for download - file download is confirmation enough
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ function resetForm() {
|
|||||||
if (input) input.checked = true;
|
if (input) input.checked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
WeatherUtils.showToast('🔄 Form reset - ready for new request', 'success');
|
// No toast for reset - visual feedback is enough
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quick Agent Access Functions
|
// Quick Agent Access Functions
|
||||||
@ -288,7 +288,7 @@ function handleFormSubmission(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const walletBalance = parseFloat(document.getElementById('walletBalance')?.textContent) || 0;
|
const walletBalance = parseFloat(document.getElementById('walletBalance')?.textContent) || 0;
|
||||||
if (walletBalance < 2.00) {
|
if (walletBalance < {{ agent.price }}) {
|
||||||
WeatherUtils.showToast('Insufficient wallet balance', 'error');
|
WeatherUtils.showToast('Insufficient wallet balance', 'error');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href = "{% url 'wallet:wallet' %}";
|
window.location.href = "{% url 'wallet:wallet' %}";
|
||||||
@ -388,13 +388,13 @@ function handleFormSubmission(e) {
|
|||||||
<!-- Submit Button -->
|
<!-- Submit Button -->
|
||||||
<div style="margin-top: var(--spacing-lg);">
|
<div style="margin-top: var(--spacing-lg);">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.wallet_balance >= 2.00 %}
|
{% if user.wallet_balance >= agent.price %}
|
||||||
<button type="submit" class="btn btn-primary btn-full" id="processButton">
|
<button type="submit" class="btn btn-primary btn-full" id="processButton">
|
||||||
🌤️ Get Weather Report (2.00 AED)
|
🌤️ Get Weather Report ({{ agent.price }} AED)
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
<div style="background: #fef2f2; color: #dc2626; padding: var(--spacing-md); border-radius: var(--radius-md); margin-bottom: var(--spacing-md); font-size: 14px; font-weight: 500; text-align: center;">
|
||||||
Insufficient balance! You need 2.00 AED.
|
Insufficient balance! You need {{ agent.price }} AED.
|
||||||
</div>
|
</div>
|
||||||
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary btn-full" style="text-decoration: none;">
|
||||||
💰 Top Up Wallet
|
💰 Top Up Wallet
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user