New new
							parent
							
								
									d3560e1efc
								
							
						
					
					
						commit
						c47911d5c2
					
				
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					# Generated by Django 5.0.4 on 2024-04-23 11:44
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.db import migrations, models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migration(migrations.Migration):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dependencies = [
 | 
				
			||||||
 | 
					        ('billing', '0038_alter_invoice_pdf'),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    operations = [
 | 
				
			||||||
 | 
					        migrations.AddField(
 | 
				
			||||||
 | 
					            model_name='recurringcycle',
 | 
				
			||||||
 | 
					            name='cycle_price',
 | 
				
			||||||
 | 
					            field=models.FloatField(null=True),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								| 
		 After Width: | Height: | Size: 48 KiB  | 
@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					document.addEventListener('DOMContentLoaded', function () {
 | 
				
			||||||
 | 
					    // Osicloud 1 Subscription
 | 
				
			||||||
 | 
					    const firstOsicloudPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const firstOsicloudSubscriptionOptions = document.querySelectorAll('.firstOsicloudSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    firstOsicloudSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.firstOsicloudPrice');
 | 
				
			||||||
 | 
					            const price = firstOsicloudPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Osicloud 2 Subscription
 | 
				
			||||||
 | 
					    const secondOsicloudPrices = {
 | 
				
			||||||
 | 
					        1: 169,
 | 
				
			||||||
 | 
					        3: 400,
 | 
				
			||||||
 | 
					        6: 700,
 | 
				
			||||||
 | 
					        12: 1300,
 | 
				
			||||||
 | 
					        24: 2400,
 | 
				
			||||||
 | 
					        36: 3600,
 | 
				
			||||||
 | 
					        60: 6000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const secondOsicloudSubscriptionOptions = document.querySelectorAll('.secondOsicloudSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    secondOsicloudSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.secondOsicloudPrice');
 | 
				
			||||||
 | 
					            const price = secondOsicloudPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Osicloud 3 Subscription
 | 
				
			||||||
 | 
					    const thirdOsicloudPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const thirdOsicloudSubscriptionOptions = document.querySelectorAll('.thirdOsicloudSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    thirdOsicloudSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.thirdOsicloudPrice');
 | 
				
			||||||
 | 
					            const price = thirdOsicloudPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Osicloud 4 Subscription
 | 
				
			||||||
 | 
					    const fourthOsicloudPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const fourthOsicloudSubscriptionOptions = document.querySelectorAll('.fourthOsicloudSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fourthOsicloudSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.fourthOsicloudPrice');
 | 
				
			||||||
 | 
					            const price = fourthOsicloudPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					document.addEventListener('DOMContentLoaded', function () {
 | 
				
			||||||
 | 
					    // Dedicated 1 Subscription
 | 
				
			||||||
 | 
					    const firstDedicatedPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const firstDedicatedSubscriptionOptions = document.querySelectorAll('.firstDedicatedSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    firstDedicatedSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.firstDedicatedPrice');
 | 
				
			||||||
 | 
					            const price = firstDedicatedPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Dedicated 2 Subscription
 | 
				
			||||||
 | 
					    const secondDedicatedPrices = {
 | 
				
			||||||
 | 
					        1: 169,
 | 
				
			||||||
 | 
					        3: 400,
 | 
				
			||||||
 | 
					        6: 700,
 | 
				
			||||||
 | 
					        12: 1300,
 | 
				
			||||||
 | 
					        24: 2400,
 | 
				
			||||||
 | 
					        36: 3600,
 | 
				
			||||||
 | 
					        60: 6000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const secondDedicatedSubscriptionOptions = document.querySelectorAll('.secondDedicatedSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    secondDedicatedSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.secondDedicatedPrice');
 | 
				
			||||||
 | 
					            const price = secondDedicatedPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Dedicated 3 Subscription
 | 
				
			||||||
 | 
					    const thirdDedicatedPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const thirdDedicatedSubscriptionOptions = document.querySelectorAll('.thirdDedicatedSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    thirdDedicatedSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.thirdDedicatedPrice');
 | 
				
			||||||
 | 
					            const price = thirdDedicatedPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Dedicated 4 Subscription
 | 
				
			||||||
 | 
					    const fourthDedicatedPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const fourthDedicatedSubscriptionOptions = document.querySelectorAll('.fourthDedicatedSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fourthDedicatedSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.fourthDedicatedPrice');
 | 
				
			||||||
 | 
					            const price = fourthDedicatedPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					document.addEventListener('DOMContentLoaded', function () {
 | 
				
			||||||
 | 
					    // Standard Subscription
 | 
				
			||||||
 | 
					    const standardPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const standardSubscriptionOptions = document.querySelectorAll('.standardSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    standardSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.standardPrice');
 | 
				
			||||||
 | 
					            const price = standardPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Premium Subscription
 | 
				
			||||||
 | 
					    const premiumPrices = {
 | 
				
			||||||
 | 
					        1: 169,
 | 
				
			||||||
 | 
					        3: 400,
 | 
				
			||||||
 | 
					        6: 700,
 | 
				
			||||||
 | 
					        12: 1300,
 | 
				
			||||||
 | 
					        24: 2400,
 | 
				
			||||||
 | 
					        36: 3600,
 | 
				
			||||||
 | 
					        60: 6000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const premiumSubscriptionOptions = document.querySelectorAll('.premiumSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    premiumSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.premiumPrice');
 | 
				
			||||||
 | 
					            const price = premiumPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					document.addEventListener('DOMContentLoaded', function () {
 | 
				
			||||||
 | 
					    // Shared Basic Subscription
 | 
				
			||||||
 | 
					    const sharedBasicPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const sharedBasicSubscriptionOptions = document.querySelectorAll('.sharedBasicSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sharedBasicSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.sharedBasicPrice');
 | 
				
			||||||
 | 
					            const price = sharedBasicPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Shared Plus Subscription
 | 
				
			||||||
 | 
					    const sharedPlusPrices = {
 | 
				
			||||||
 | 
					        1: 169,
 | 
				
			||||||
 | 
					        3: 400,
 | 
				
			||||||
 | 
					        6: 700,
 | 
				
			||||||
 | 
					        12: 1300,
 | 
				
			||||||
 | 
					        24: 2400,
 | 
				
			||||||
 | 
					        36: 3600,
 | 
				
			||||||
 | 
					        60: 6000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const sharedPlusSubscriptionOptions = document.querySelectorAll('.sharedPlusSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sharedPlusSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.sharedPlusPrice');
 | 
				
			||||||
 | 
					            const price = sharedPlusPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Shared Basic Subscription
 | 
				
			||||||
 | 
					    const sharedPowerPrices = {
 | 
				
			||||||
 | 
					        1: 89,
 | 
				
			||||||
 | 
					        3: 200,
 | 
				
			||||||
 | 
					        6: 350,
 | 
				
			||||||
 | 
					        12: 650,
 | 
				
			||||||
 | 
					        24: 1200,
 | 
				
			||||||
 | 
					        36: 1800,
 | 
				
			||||||
 | 
					        60: 3000
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const sharedPowerSubscriptionOptions = document.querySelectorAll('.sharedPowerSubscriptionOptions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sharedPowerSubscriptionOptions.forEach(function (options) {
 | 
				
			||||||
 | 
					        options.addEventListener('change', function () {
 | 
				
			||||||
 | 
					            const selectedValue = parseInt(this.value);
 | 
				
			||||||
 | 
					            const priceElement = this.closest('.feature').querySelector('.sharedPowerPrice');
 | 
				
			||||||
 | 
					            const price = sharedPowerPrices[selectedValue];
 | 
				
			||||||
 | 
					            priceElement.textContent = `$${price}`;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue