diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index af5adc3..91bf804 100644 Binary files a/core/__pycache__/admin.cpython-311.pyc and b/core/__pycache__/admin.cpython-311.pyc differ diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc index 4624d9c..4aade19 100644 Binary files a/core/__pycache__/forms.cpython-311.pyc and b/core/__pycache__/forms.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9f1466b..8fa5624 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 8907a4f..a11916d 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/admin.py b/core/admin.py index 2c70ecf..ba958ef 100644 --- a/core/admin.py +++ b/core/admin.py @@ -95,7 +95,9 @@ class AppSettingAdmin(admin.ModelAdmin): (None, {'fields': ('app_name', 'logo', 'slogan')}), (_('Contact Information'), {'fields': ('contact_phone', 'contact_email', 'contact_address')}), (_('Legal'), {'fields': ('registration_number', 'tax_number', 'terms_of_service', 'privacy_policy')}), - (_('Subscription'), {'fields': ('subscription_enabled', 'monthly_fee', 'annual_fee')}), + (_('Subscription Status'), {'fields': ('subscription_enabled',)}), + (_('Shipper Subscription Fees'), {'fields': ('shipper_monthly_fee', 'shipper_annual_fee')}), + (_('Truck Owner Subscription Fees'), {'fields': ('truck_owner_monthly_fee', 'truck_owner_annual_fee')}), ) def has_add_permission(self, request): diff --git a/core/forms.py b/core/forms.py index 7ee09ed..8fec155 100644 --- a/core/forms.py +++ b/core/forms.py @@ -33,9 +33,10 @@ class UserRegistrationForm(UserCreationForm): app_settings = AppSetting.objects.first() if app_settings and app_settings.subscription_enabled: + # We will update these labels via JS based on selected role to show the correct fee self.fields['subscription_plan'].choices = [ - ('MONTHLY', _('Monthly (%(fee)s)') % {'fee': app_settings.monthly_fee}), - ('ANNUAL', _('Annual (%(fee)s)') % {'fee': app_settings.annual_fee}), + ('MONTHLY', _('Monthly Plan')), + ('ANNUAL', _('Annual Plan')), ] self.fields['subscription_plan'].required = True else: diff --git a/core/migrations/0018_remove_appsetting_annual_fee_and_more.py b/core/migrations/0018_remove_appsetting_annual_fee_and_more.py new file mode 100644 index 0000000..26a687d --- /dev/null +++ b/core/migrations/0018_remove_appsetting_annual_fee_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 5.2.7 on 2026-01-24 03:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0017_appsetting_annual_fee_appsetting_monthly_fee_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='appsetting', + name='annual_fee', + ), + migrations.RemoveField( + model_name='appsetting', + name='monthly_fee', + ), + migrations.AddField( + model_name='appsetting', + name='shipper_annual_fee', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Shipper Annual Fee'), + ), + migrations.AddField( + model_name='appsetting', + name='shipper_monthly_fee', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Shipper Monthly Fee'), + ), + migrations.AddField( + model_name='appsetting', + name='truck_owner_annual_fee', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Truck Owner Annual Fee'), + ), + migrations.AddField( + model_name='appsetting', + name='truck_owner_monthly_fee', + field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Truck Owner Monthly Fee'), + ), + ] diff --git a/core/migrations/__pycache__/0018_remove_appsetting_annual_fee_and_more.cpython-311.pyc b/core/migrations/__pycache__/0018_remove_appsetting_annual_fee_and_more.cpython-311.pyc new file mode 100644 index 0000000..c07b71a Binary files /dev/null and b/core/migrations/__pycache__/0018_remove_appsetting_annual_fee_and_more.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index 1c6482e..062934d 100644 --- a/core/models.py +++ b/core/models.py @@ -249,8 +249,14 @@ class AppSetting(models.Model): terms_of_service = models.TextField(_('Terms of Service'), blank=True) privacy_policy = models.TextField(_('Privacy Policy'), blank=True) subscription_enabled = models.BooleanField(_('Enable Subscription Fee'), default=False) - monthly_fee = models.DecimalField(_('Monthly Fee'), max_digits=10, decimal_places=2, default=0.00) - annual_fee = models.DecimalField(_('Annual Fee'), max_digits=10, decimal_places=2, default=0.00) + + # Shipper Fees + shipper_monthly_fee = models.DecimalField(_('Shipper Monthly Fee'), max_digits=10, decimal_places=2, default=0.00) + shipper_annual_fee = models.DecimalField(_('Shipper Annual Fee'), max_digits=10, decimal_places=2, default=0.00) + + # Truck Owner Fees + truck_owner_monthly_fee = models.DecimalField(_('Truck Owner Monthly Fee'), max_digits=10, decimal_places=2, default=0.00) + truck_owner_annual_fee = models.DecimalField(_('Truck Owner Annual Fee'), max_digits=10, decimal_places=2, default=0.00) class Meta: verbose_name = _('App Setting') diff --git a/core/templates/registration/register.html b/core/templates/registration/register.html index 74fcb1e..849e04f 100644 --- a/core/templates/registration/register.html +++ b/core/templates/registration/register.html @@ -15,7 +15,7 @@

{% trans "Create your account" %}

-
+ {% csrf_token %} {% if form.non_field_errors %} @@ -101,4 +101,38 @@
+ +{% if subscription_enabled %} + +{% endif %} + {% endblock %} \ No newline at end of file diff --git a/core/views.py b/core/views.py index d0ab69f..2ac4392 100644 --- a/core/views.py +++ b/core/views.py @@ -10,6 +10,7 @@ from django.db.models import Q from django.contrib.auth.models import User from .whatsapp import send_whatsapp_message from django.contrib.auth.forms import AuthenticationForm +import json def home(request): """Render the landing screen for MASAR CARGO.""" @@ -25,6 +26,19 @@ def home(request): def register(request): app_settings = AppSetting.objects.first() subscription_enabled = app_settings.subscription_enabled if app_settings else False + + # Fees for JS + fees = { + 'SHIPPER': { + 'MONTHLY': str(app_settings.shipper_monthly_fee) if app_settings else "0.00", + 'ANNUAL': str(app_settings.shipper_annual_fee) if app_settings else "0.00", + }, + 'TRUCK_OWNER': { + 'MONTHLY': str(app_settings.truck_owner_monthly_fee) if app_settings else "0.00", + 'ANNUAL': str(app_settings.truck_owner_annual_fee) if app_settings else "0.00", + } + } + if request.method == 'POST': form = UserRegistrationForm(request.POST) if form.is_valid(): @@ -53,7 +67,12 @@ def register(request): messages.error(request, _("Please correct the errors below.")) else: form = UserRegistrationForm() - return render(request, 'registration/register.html', {'form': form, 'subscription_enabled': subscription_enabled}) + + return render(request, 'registration/register.html', { + 'form': form, + 'subscription_enabled': subscription_enabled, + 'fees_json': json.dumps(fees) + }) def verify_otp_registration(request): registration_data = request.session.get('registration_data') @@ -407,4 +426,4 @@ def terms_of_service(request): 'content': app_settings.terms_of_service if app_settings else _("Terms of service are coming soon.") } } - return render(request, 'core/article_detail.html', context) + return render(request, 'core/article_detail.html', context) \ No newline at end of file