From c5c799b7d6e8905e85c2250bc9f4a0baf188cee6 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 24 Jan 2026 07:47:20 +0000 Subject: [PATCH] enableing disabling online payment --- core/__pycache__/admin.cpython-311.pyc | Bin 10398 -> 10415 bytes core/__pycache__/models.cpython-311.pyc | Bin 31870 -> 31999 bytes core/__pycache__/views.cpython-311.pyc | Bin 40099 -> 40755 bytes core/admin.py | 2 +- .../0021_appsetting_thawani_enabled.py | 18 ++++++ ...appsetting_thawani_enabled.cpython-311.pyc | Bin 0 -> 897 bytes core/models.py | 1 + core/templates/core/place_bid.html | 54 ++++++++++++------ core/templates/core/post_shipment.html | 40 ++++++++++--- core/templates/core/subscription_expired.html | 9 ++- core/views.py | 10 +++- 11 files changed, 107 insertions(+), 27 deletions(-) create mode 100644 core/migrations/0021_appsetting_thawani_enabled.py create mode 100644 core/migrations/__pycache__/0021_appsetting_thawani_enabled.cpython-311.pyc diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index c4cf650d59359192b707a7c510b9760554718907..93e60857a2a397b6bc0ecfdd456a2fb3d1957db3 100644 GIT binary patch delta 165 zcmbOixIU0~IWI340}zx}lw^u+YE^Eug z9(h4I>H1`-mUzY1pt|# BGk5?1 delta 148 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 diff --git a/core/admin.py b/core/admin.py index 656f462..61d387a 100644 --- a/core/admin.py +++ b/core/admin.py @@ -112,7 +112,7 @@ 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 Status'), {'fields': ('subscription_enabled',)}), + (_('Subscription Status'), {'fields': ('subscription_enabled', 'thawani_enabled')}), (_('Shipper Subscription Fees'), {'fields': ('shipper_monthly_fee', 'shipper_annual_fee')}), (_('Truck Owner Subscription Fees'), {'fields': ('truck_owner_monthly_fee', 'truck_owner_annual_fee')}), ) diff --git a/core/migrations/0021_appsetting_thawani_enabled.py b/core/migrations/0021_appsetting_thawani_enabled.py new file mode 100644 index 0000000..75592b2 --- /dev/null +++ b/core/migrations/0021_appsetting_thawani_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.7 on 2026-01-24 07:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0020_transaction_payment_status_transaction_session_id'), + ] + + operations = [ + migrations.AddField( + model_name='appsetting', + name='thawani_enabled', + field=models.BooleanField(default=True, verbose_name='Enable Thawani Payment'), + ), + ] diff --git a/core/migrations/__pycache__/0021_appsetting_thawani_enabled.cpython-311.pyc b/core/migrations/__pycache__/0021_appsetting_thawani_enabled.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91a4da24ed9ff883013b7a36d99800d92bfd1be0 GIT binary patch literal 897 zcmZuwJ#W)M7{0R|$F@>IEkr?OsDL7})PaGiLMjp<@lheDKv+npOYUvz;4geOZJ9DK zFm~%dC?NV{3d#`O%Eaa>ojP&nB&|xhvtK{&$Gz{P=j5+5GY*m~-O7Vs7@^|AC+!u!ij=zM)M$v zxiF)ILC8DPlj>_toY6Z8b`c;SGvsRwcd@T)2#ns8lpM`e#O&24XAm=3ZQtC}Bmw!3 z*M9vhA=$@bmZW40`}vfMBxZDy48*-w>u!tW8I3vZD3&Cp+Y!V$;W^Cw+8OwH+Hb{_Q3Ujy8giR%erAZhe(|;q KIQmbvn)?^sf%6>z literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 1ca61f8..3384816 100644 --- a/core/models.py +++ b/core/models.py @@ -261,6 +261,7 @@ 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) + thawani_enabled = models.BooleanField(_("Enable Thawani Payment"), default=True) # Shipper Fees shipper_monthly_fee = models.DecimalField(_('Shipper Monthly Fee'), max_digits=10, decimal_places=2, default=0.00) diff --git a/core/templates/core/place_bid.html b/core/templates/core/place_bid.html index bb96997..738f3e6 100644 --- a/core/templates/core/place_bid.html +++ b/core/templates/core/place_bid.html @@ -46,35 +46,52 @@ {% trans "Owner" %}: {{ truck.owner.username }} | {% trans "Plate" %}: {{ truck.plate_no }} -
- - {{ form.required_truck_type_link }} - {{ form.required_truck_type_link.errors }} -
+ {% if form.errors %} +
+
{% trans "Please correct the following errors:" %}
+
    + {% for field in form %} + {% for error in field.errors %} +
  • {{ field.label }}: {{ error }}
  • + {% endfor %} + {% endfor %} + {% for error in form.non_field_errors %} +
  • {{ error }}
  • + {% endfor %} +
+
+ {% endif %} +
{% csrf_token %}
{% trans "Shipment Details" %}
+
+ + {{ form.required_truck_type_link }} + {% if form.required_truck_type_link.errors %}
{{ form.required_truck_type_link.errors.0 }}
{% endif %} +
+
{{ form.description }} - {{ form.description.errors }} + {% if form.description.errors %}
{{ form.description.errors.0 }}
{% endif %}
{{ form.weight }} - {{ form.weight.errors }} + {% if form.weight.errors %}
{{ form.weight.errors.0 }}
{% endif %}
{{ form.delivery_date }} - {{ form.delivery_date.errors }} + {% if form.delivery_date.errors %}
{{ form.delivery_date.errors.0 }}
{% endif %}
@@ -85,22 +102,22 @@
{{ form.origin_country }} - {{ form.origin_country.errors }} + {% if form.origin_country.errors %}
{{ form.origin_country.errors.0 }}
{% endif %}
{{ form.origin_city }} - {{ form.origin_city.errors }} + {% if form.origin_city.errors %}
{{ form.origin_city.errors.0 }}
{% endif %}
{{ form.destination_country }} - {{ form.destination_country.errors }} + {% if form.destination_country.errors %}
{{ form.destination_country.errors.0 }}
{% endif %}
{{ form.destination_city }} - {{ form.destination_city.errors }} + {% if form.destination_city.errors %}
{{ form.destination_city.errors.0 }}
{% endif %}
@@ -114,13 +131,13 @@ $ {{ form.amount }} - {{ form.amount.errors }} + {% if form.amount.errors %}
{{ form.amount.errors.0 }}
{% endif %}
{{ form.comments }} - {{ form.comments.errors }} + {% if form.comments.errors %}
{{ form.comments.errors.0 }}
{% endif %}
@@ -170,11 +187,16 @@ document.addEventListener('DOMContentLoaded', function() { if (originCountry && originCity) { originCountry.addEventListener('change', () => updateCities(originCountry, originCity)); - updateCities(originCountry, originCity); + // Only run on load if there's no pre-existing selection (to avoid clearing initial filtered values) + if (!originCity.value || originCity.value === "") { + updateCities(originCountry, originCity); + } } if (destCountry && destCity) { destCountry.addEventListener('change', () => updateCities(destCountry, destCity)); - updateCities(destCountry, destCity); + if (!destCity.value || destCity.value === "") { + updateCities(destCountry, destCity); + } } }); diff --git a/core/templates/core/post_shipment.html b/core/templates/core/post_shipment.html index a0b0848..b3138b7 100644 --- a/core/templates/core/post_shipment.html +++ b/core/templates/core/post_shipment.html @@ -30,30 +30,46 @@

{% trans "Post a New Shipment" %}

{% trans "Enter shipment details to receive bids or send as an offer." %}

- + {% if form.errors %} +
+
{% trans "Please correct the following errors:" %}
+
    + {% for field in form %} + {% for error in field.errors %} +
  • {{ field.label }}: {{ error }}
  • + {% endfor %} + {% endfor %} + {% for error in form.non_field_errors %} +
  • {{ error }}
  • + {% endfor %} +
+
+ {% endif %} + + {% csrf_token %}
{{ form.description }} - {% if form.description.errors %}
{{ form.description.errors }}
{% endif %} + {% if form.description.errors %}
{{ form.description.errors.0 }}
{% endif %}
{{ form.weight }} - {% if form.weight.errors %}
{{ form.weight.errors }}
{% endif %} + {% if form.weight.errors %}
{{ form.weight.errors.0 }}
{% endif %}
{{ form.required_truck_type_link }} - {% if form.required_truck_type_link.errors %}
{{ form.required_truck_type_link.errors }}
{% endif %} + {% if form.required_truck_type_link.errors %}
{{ form.required_truck_type_link.errors.0 }}
{% endif %}
{{ form.delivery_date }} - {% if form.delivery_date.errors %}
{{ form.delivery_date.errors }}
{% endif %} + {% if form.delivery_date.errors %}
{{ form.delivery_date.errors.0 }}
{% endif %}
@@ -66,18 +82,22 @@
{{ form.origin_country }} + {% if form.origin_country.errors %}
{{ form.origin_country.errors.0 }}
{% endif %} {{ form.origin_city }} + {% if form.origin_city.errors %}
{{ form.origin_city.errors.0 }}
{% endif %}
{{ form.destination_country }} + {% if form.destination_country.errors %}
{{ form.destination_country.errors.0 }}
{% endif %} {{ form.destination_city }} + {% if form.destination_city.errors %}
{{ form.destination_city.errors.0 }}
{% endif %}
@@ -128,13 +148,17 @@ document.addEventListener('DOMContentLoaded', function() { if (originCountry && originCity) { originCountry.addEventListener('change', () => updateCities(originCountry, originCity)); - updateCities(originCountry, originCity); + if (!originCity.value || originCity.value === "") { + updateCities(originCountry, originCity); + } } if (destCountry && destCity) { destCountry.addEventListener('change', () => updateCities(destCountry, destCity)); - updateCities(destCountry, destCity); + if (!destCity.value || destCity.value === "") { + updateCities(destCountry, destCity); + } } }); -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/core/templates/core/subscription_expired.html b/core/templates/core/subscription_expired.html index 4ae3541..634574c 100644 --- a/core/templates/core/subscription_expired.html +++ b/core/templates/core/subscription_expired.html @@ -42,9 +42,16 @@
+ {% if app_settings.thawani_enabled %} + {% else %} +
+ + {% trans "Online payment is currently disabled. Please contact support for renewal." %} +
+ {% endif %}
@@ -95,4 +102,4 @@ } }); -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/core/views.py b/core/views.py index c33254e..788ccd6 100644 --- a/core/views.py +++ b/core/views.py @@ -22,6 +22,9 @@ from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse from django.contrib.sites.shortcuts import get_current_site import json +import logging + +logger = logging.getLogger(__name__) def home(request): """Render the landing screen for MASAR CARGO.""" @@ -36,7 +39,7 @@ def home(request): def register(request): app_settings = AppSetting.objects.first() - subscription_enabled = app_settings.subscription_enabled if app_settings else False + subscription_enabled = (app_settings.subscription_enabled and app_settings.thawani_enabled) if app_settings else False # Simplified fees dictionary for JS # Ensuring keys are exactly as they appear in Profile.ROLE_CHOICES @@ -325,6 +328,7 @@ def post_shipment(request): messages.success(request, _("Shipment posted successfully! It is now open for bids or you can browse trucks to send it as an offer.")) return redirect('dashboard') else: + logger.error(f"Post Shipment Form Errors: {form.errors}") messages.error(request, _("Please correct the errors in the form.")) else: form = ShipmentForm() @@ -382,6 +386,7 @@ def place_bid(request, truck_id): messages.success(request, _("Offer sent successfully!")) return redirect('dashboard') else: + logger.error(f"Place Bid Form Errors: {form.errors}") messages.error(request, _("Error sending offer. Please check the form.")) else: form = ShipperOfferForm() @@ -498,6 +503,9 @@ def renew_subscription(request): def thawani_checkout(request, plan): profile = request.user.profile app_settings = AppSetting.objects.first() + if app_settings and not app_settings.thawani_enabled: + messages.error(request, _("Online payment is currently disabled. Please contact support.")) + return redirect("dashboard") amount = 0 if profile.role == 'SHIPPER':