diff --git a/api/urls.py b/api/urls.py index ed87f4f..0f62dd1 100644 --- a/api/urls.py +++ b/api/urls.py @@ -29,7 +29,7 @@ router.register(r'device-token', views.DeviceTokenViewSet) router.register(r'data-access', DataAccessViewSet) router.register(r'unregistered-teams', views.UnregisteredTeamViewSet) router.register(r'unregistered-players', views.UnregisteredPlayerViewSet) -### bizdev +### biz router.register(r'crm-prospects', views.CRMProspectViewSet) router.register(r'crm-entities', views.CRMEntityViewSet) router.register(r'crm-activities', views.CRMActivityViewSet) diff --git a/api/views.py b/api/views.py index 467c2aa..fd95ed6 100644 --- a/api/views.py +++ b/api/views.py @@ -15,8 +15,8 @@ from django.shortcuts import get_object_or_404 from .serializers import ClubSerializer, CourtSerializer, DateIntervalSerializer, DrawLogSerializer, TournamentSerializer, UserSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, PurchaseSerializer, ShortUserSerializer, FailedApiCallSerializer, LogSerializer, DeviceTokenSerializer, CustomUserSerializer, UnregisteredTeamSerializer, UnregisteredPlayerSerializer, ImageSerializer from tournaments.models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Court, DateInterval, Purchase, FailedApiCall, Log, DeviceToken, DrawLog, UnregisteredTeam, UnregisteredPlayer, Image -from bizdev.serializers import CRMActivitySerializer, CRMProspectSerializer, CRMEntitySerializer -from bizdev.models import Activity, Prospect, Entity +from biz.serializers import CRMActivitySerializer, CRMProspectSerializer, CRMEntitySerializer +from biz.models import Activity, Prospect, Entity from rest_framework import viewsets from rest_framework.response import Response @@ -858,7 +858,7 @@ def get_fft_federal_clubs(request): "club_markers": [] }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) -### bizdev +### biz class CRMActivityViewSet(SoftDeleteViewSet): queryset = Activity.objects.all() serializer_class = CRMActivitySerializer diff --git a/bizdev/__init__.py b/biz/__init__.py similarity index 100% rename from bizdev/__init__.py rename to biz/__init__.py diff --git a/bizdev/admin.py b/biz/admin.py similarity index 96% rename from bizdev/admin.py rename to biz/admin.py index 093698f..9acdc81 100644 --- a/bizdev/admin.py +++ b/biz/admin.py @@ -91,7 +91,7 @@ def create_activity_for_prospect(modeladmin, request, queryset): prospect = queryset.first() # Build the URL with pre-populated fields - url = reverse('admin:bizdev_activity_add') + url = reverse('admin:biz_activity_add') url += f'?prospect={prospect.id}' return redirect(url) create_activity_for_prospect.short_description = "Create activity" @@ -108,7 +108,7 @@ class ProspectAdmin(SyncedObjectAdmin): list_filter = (ProspectStatusFilter, ProspectDeclineReasonFilter, 'creation_date', StaffUserFilter, 'source', ProspectProfileFilter) search_fields = ('first_name', 'last_name', 'email', 'entities__name') date_hierarchy = 'creation_date' - change_list_template = "admin/bizdev/prospect/change_list.html" + change_list_template = "admin/biz/prospect/change_list.html" ordering = ['-last_update'] filter_horizontal = ['entities'] actions = ['send_email', create_activity_for_prospect, contacted_by_sms, mark_as_should_test, mark_as_testing, mark_as_customer, declined_too_expensive, declined_use_something_else] @@ -119,7 +119,7 @@ class ProspectAdmin(SyncedObjectAdmin): if activities: activity_links = [] for activity in activities: - url = f"/kingdom/bizdev/activity/{activity.id}/change/" + url = f"/kingdom/biz/activity/{activity.id}/change/" activity_links.append(f'{activity.html_desc()}') return format_html('
'.join(activity_links)) return "No events" @@ -139,8 +139,8 @@ class ProspectAdmin(SyncedObjectAdmin): Prospect.objects.all().delete() Activity.objects.all().delete() - messages.success(request, 'cleanup bizdev objects') - return redirect('admin:bizdev_prospect_changelist') + messages.success(request, 'cleanup biz objects') + return redirect('admin:biz_prospect_changelist') def import_app_users(self, request): users = CustomUser.objects.filter(origin=UserOrigin.APP) @@ -177,7 +177,7 @@ class ProspectAdmin(SyncedObjectAdmin): created_count += 1 messages.success(request, f'Imported {created_count} app users into prospects') - return redirect('admin:bizdev_prospect_changelist') + return redirect('admin:biz_prospect_changelist') def import_file(self, request): """ @@ -190,7 +190,7 @@ class ProspectAdmin(SyncedObjectAdmin): try: result = self.import_csv(form.cleaned_data['file'], form.cleaned_data['source']) messages.success(request, f'File imported successfully: {result}') - return redirect('admin:bizdev_prospect_changelist') + return redirect('admin:biz_prospect_changelist') except Exception as e: messages.error(request, f'Error importing file: {str(e)}') else: @@ -205,7 +205,7 @@ class ProspectAdmin(SyncedObjectAdmin): 'opts': self.model._meta, 'has_change_permission': self.has_change_permission(request), } - return render(request, 'admin/bizdev/prospect/import_file.html', context) + return render(request, 'admin/biz/prospect/import_file.html', context) def import_csv(self, file, source): """ @@ -350,7 +350,7 @@ class ProspectAdmin(SyncedObjectAdmin): else: form = EmailTemplateSelectionForm() - return render(request, 'admin/bizdev/select_email_template.html', { + return render(request, 'admin/biz/select_email_template.html', { 'prospects': queryset, 'form': form, 'title': 'Send Email to Prospects' diff --git a/bizdev/admin_urls.py b/biz/admin_urls.py similarity index 91% rename from bizdev/admin_urls.py rename to biz/admin_urls.py index 76b42c7..17f608b 100644 --- a/bizdev/admin_urls.py +++ b/biz/admin_urls.py @@ -63,8 +63,8 @@ def template(user, index): return f'Bonjour {user.first_name}, \n\nJe te remercie d\'avoir téléchargé Padel Club. J\'ai pu voir que tu avais créé quelques tournois mais sans aller plus loin, est-ce que tu pourrais me dire ce qui t\'as freiné ?\n\nLaurent Morvillier' urlpatterns = [ - path('email_users/', email_users_view, name='bizdev_email_users'), - path('email_users_count/', email_users_count, name='bizdev_email_count'), - path('email_users_with_tournaments_count/', email_users_with_tournaments_count, name='bizdev_email_with_tournaments_count'), + path('email_users/', email_users_view, name='biz_email_users'), + path('email_users_count/', email_users_count, name='biz_email_count'), + path('email_users_with_tournaments_count/', email_users_with_tournaments_count, name='biz_email_with_tournaments_count'), path('email_users_with_tournaments/', email_users_with_tournaments, name='email_users_with_tournaments'), ] diff --git a/bizdev/apps.py b/biz/apps.py similarity index 64% rename from bizdev/apps.py rename to biz/apps.py index deacc18..4962b1e 100644 --- a/bizdev/apps.py +++ b/biz/apps.py @@ -1,5 +1,5 @@ from django.apps import AppConfig -class bizdevConfig(AppConfig): +class BizConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'bizdev' + name = 'biz' diff --git a/bizdev/filters.py b/biz/filters.py similarity index 100% rename from bizdev/filters.py rename to biz/filters.py diff --git a/bizdev/forms.py b/biz/forms.py similarity index 100% rename from bizdev/forms.py rename to biz/forms.py diff --git a/bizdev/migrations/0001_initial.py b/biz/migrations/0001_initial.py similarity index 79% rename from bizdev/migrations/0001_initial.py rename to biz/migrations/0001_initial.py index abdc3d9..da4fa80 100644 --- a/bizdev/migrations/0001_initial.py +++ b/biz/migrations/0001_initial.py @@ -1,7 +1,8 @@ -# Generated by Django 5.1 on 2025-07-09 15:18 +# Generated by Django 5.1 on 2025-07-20 10:20 import django.db.models.deletion import django.utils.timezone +import uuid from django.conf import settings from django.db import migrations, models @@ -18,12 +19,13 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Activity', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('creation_date', models.DateTimeField(default=django.utils.timezone.now, editable=False)), ('last_update', models.DateTimeField(default=django.utils.timezone.now)), ('data_access_ids', models.JSONField(default=list)), - ('status', models.CharField(blank=True, choices=[('NONE', 'None'), ('CONTACTED', 'Contacted'), ('RESPONDED', 'Responded'), ('SHOULD_TEST', 'Should test'), ('TESTING', 'Testing'), ('CUSTOMER', 'Customer'), ('LOST', 'Lost customer'), ('DECLINED_TOO_EXPENSIVE', 'Too expensive'), ('DECLINED_USE_SOMETHING_ELSE', 'Use something else'), ('DECLINED_OTHER', 'Declined other reason'), ('DECLINED_UNRELATED', 'Declined without significance')], default='NONE', max_length=50, null=True)), - ('type', models.CharField(blank=True, choices=[('MAIL', 'Mailing List'), ('SMS', 'SMS Campaign'), ('CALL', 'Call'), ('PRESS', 'Press Release')], max_length=20, null=True)), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('status', models.CharField(blank=True, choices=[('NONE', 'None'), ('INBOUND', 'Inbound'), ('CONTACTED', 'Contacted'), ('RESPONDED', 'Responded'), ('SHOULD_TEST', 'Should test'), ('TESTING', 'Testing'), ('CUSTOMER', 'Customer'), ('LOST', 'Lost customer'), ('DECLINED', 'Declined'), ('DECLINED_UNRELATED', 'Declined without significance')], max_length=50, null=True)), + ('declination_reason', models.CharField(blank=True, choices=[('TOO_EXPENSIVE', 'Too expensive'), ('USE_OTHER_PRODUCT', 'Use other product'), ('USE_ANDROID', 'Use Android'), ('UNKNOWN', 'Unknown')], max_length=50, null=True)), + ('type', models.CharField(blank=True, choices=[('MAIL', 'Mail'), ('SMS', 'SMS'), ('CALL', 'Call'), ('PRESS', 'Press Release'), ('WORD_OF_MOUTH', 'Word of mouth')], max_length=20, null=True)), ('description', models.TextField(blank=True, null=True)), ('attachment_text', models.TextField(blank=True, null=True)), ('last_updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), @@ -32,20 +34,19 @@ class Migration(migrations.Migration): options={ 'verbose_name_plural': 'Activities', 'ordering': ['-creation_date'], - 'permissions': [('manage_events', 'Can manage events'), ('view_events', 'Can view events')], }, ), migrations.CreateModel( name='EmailTemplate', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('creation_date', models.DateTimeField(default=django.utils.timezone.now, editable=False)), ('last_update', models.DateTimeField(default=django.utils.timezone.now)), ('data_access_ids', models.JSONField(default=list)), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('name', models.CharField(max_length=100)), ('subject', models.CharField(max_length=200)), ('body', models.TextField(blank=True, null=True)), - ('activities', models.ManyToManyField(blank=True, related_name='email_templates', to='bizdev.activity')), + ('activities', models.ManyToManyField(blank=True, related_name='email_templates', to='biz.activity')), ('last_updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('related_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ], @@ -56,10 +57,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Entity', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('creation_date', models.DateTimeField(default=django.utils.timezone.now, editable=False)), ('last_update', models.DateTimeField(default=django.utils.timezone.now)), ('data_access_ids', models.JSONField(default=list)), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('name', models.CharField(blank=True, max_length=200, null=True)), ('address', models.CharField(blank=True, max_length=200, null=True)), ('zip_code', models.CharField(blank=True, max_length=20, null=True)), @@ -75,28 +76,28 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Prospect', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('creation_date', models.DateTimeField(default=django.utils.timezone.now, editable=False)), ('last_update', models.DateTimeField(default=django.utils.timezone.now)), ('data_access_ids', models.JSONField(default=list)), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('first_name', models.CharField(blank=True, max_length=200, null=True)), ('last_name', models.CharField(blank=True, max_length=200, null=True)), ('email', models.EmailField(max_length=254, unique=True)), ('phone', models.CharField(blank=True, max_length=25, null=True)), ('name_unsure', models.BooleanField(default=False)), ('source', models.CharField(blank=True, max_length=100, null=True)), - ('entities', models.ManyToManyField(blank=True, related_name='prospects', to='bizdev.entity')), + ('entities', models.ManyToManyField(blank=True, related_name='prospects', to='biz.entity')), ('last_updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('official_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), ('related_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ], options={ - 'permissions': [('manage_prospects', 'Can manage prospects'), ('view_prospects', 'Can view prospects')], + 'abstract': False, }, ), migrations.AddField( model_name='activity', name='prospects', - field=models.ManyToManyField(related_name='activities', to='bizdev.prospect'), + field=models.ManyToManyField(related_name='activities', to='biz.prospect'), ), ] diff --git a/bizdev/migrations/__init__.py b/biz/migrations/__init__.py similarity index 100% rename from bizdev/migrations/__init__.py rename to biz/migrations/__init__.py diff --git a/bizdev/mixins.py b/biz/mixins.py similarity index 51% rename from bizdev/mixins.py rename to biz/mixins.py index dac9358..3c3f98a 100644 --- a/bizdev/mixins.py +++ b/biz/mixins.py @@ -1,6 +1,6 @@ from django.contrib.auth.mixins import UserPassesTestMixin, LoginRequiredMixin from django.core.exceptions import PermissionDenied -class bizdevAccessMixin(LoginRequiredMixin, UserPassesTestMixin): +class bizAccessMixin(LoginRequiredMixin, UserPassesTestMixin): def test_func(self): - return self.request.user.groups.filter(name='bizdev Manager').exists() + return self.request.user.groups.filter(name='biz Manager').exists() diff --git a/bizdev/models.py b/biz/models.py similarity index 100% rename from bizdev/models.py rename to biz/models.py diff --git a/bizdev/serializers.py b/biz/serializers.py similarity index 100% rename from bizdev/serializers.py rename to biz/serializers.py diff --git a/bizdev/services.py b/biz/services.py similarity index 100% rename from bizdev/services.py rename to biz/services.py diff --git a/bizdev/templates/admin/bizdev/email_users.html b/biz/templates/admin/biz/email_users.html similarity index 100% rename from bizdev/templates/admin/bizdev/email_users.html rename to biz/templates/admin/biz/email_users.html diff --git a/bizdev/templates/admin/bizdev/prospect/change_list.html b/biz/templates/admin/biz/prospect/change_list.html similarity index 100% rename from bizdev/templates/admin/bizdev/prospect/change_list.html rename to biz/templates/admin/biz/prospect/change_list.html diff --git a/bizdev/templates/admin/bizdev/prospect/import_file.html b/biz/templates/admin/biz/prospect/import_file.html similarity index 100% rename from bizdev/templates/admin/bizdev/prospect/import_file.html rename to biz/templates/admin/biz/prospect/import_file.html diff --git a/bizdev/templates/admin/bizdev/select_email_template.html b/biz/templates/admin/biz/select_email_template.html similarity index 100% rename from bizdev/templates/admin/bizdev/select_email_template.html rename to biz/templates/admin/biz/select_email_template.html diff --git a/bizdev/templates/bizdev/add_prospect.html b/biz/templates/biz/add_prospect.html similarity index 98% rename from bizdev/templates/bizdev/add_prospect.html rename to biz/templates/biz/add_prospect.html index a74e4d9..1cf24cd 100644 --- a/bizdev/templates/bizdev/add_prospect.html +++ b/biz/templates/biz/add_prospect.html @@ -1,4 +1,4 @@ -{% extends "bizdev/base.html" %} +{% extends "biz/base.html" %} {% block content %}
diff --git a/bizdev/templates/bizdev/base.html b/biz/templates/biz/base.html similarity index 100% rename from bizdev/templates/bizdev/base.html rename to biz/templates/biz/base.html diff --git a/bizdev/templates/bizdev/csv_import.html b/biz/templates/biz/csv_import.html similarity index 96% rename from bizdev/templates/bizdev/csv_import.html rename to biz/templates/biz/csv_import.html index 44c3ab1..4658e8a 100644 --- a/bizdev/templates/bizdev/csv_import.html +++ b/biz/templates/biz/csv_import.html @@ -1,4 +1,4 @@ -{% extends "bizdev/base.html" %} +{% extends "biz/base.html" %} {% block content %}
diff --git a/bizdev/templates/bizdev/event_form.html b/biz/templates/biz/event_form.html similarity index 85% rename from bizdev/templates/bizdev/event_form.html rename to biz/templates/biz/event_form.html index 74f2a10..cc13117 100644 --- a/bizdev/templates/bizdev/event_form.html +++ b/biz/templates/biz/event_form.html @@ -1,4 +1,4 @@ -{% extends "bizdev/base.html" %} {% block content %} +{% extends "biz/base.html" %} {% block content %}
@@ -14,7 +14,7 @@ Save Event Cancel diff --git a/bizdev/templates/bizdev/event_row.html b/biz/templates/biz/event_row.html similarity index 71% rename from bizdev/templates/bizdev/event_row.html rename to biz/templates/biz/event_row.html index a37fc7b..f8cb072 100644 --- a/bizdev/templates/bizdev/event_row.html +++ b/biz/templates/biz/event_row.html @@ -7,9 +7,9 @@
{{ event.date|date:"d/m/Y H:i" }} - Edit + Edit
diff --git a/bizdev/templates/bizdev/events.html b/biz/templates/biz/events.html similarity index 66% rename from bizdev/templates/bizdev/events.html rename to biz/templates/biz/events.html index feda717..fa3ec13 100644 --- a/bizdev/templates/bizdev/events.html +++ b/biz/templates/biz/events.html @@ -1,23 +1,23 @@ -{% extends "bizdev/base.html" %} -{% load bizdev_tags %} +{% extends "biz/base.html" %} +{% load biz_tags %} {% block content %} -{% if request.user|is_bizdev_manager %} +{% if request.user|is_biz_manager %} @@ -31,7 +31,7 @@
{% for event in completed_events %} - {% include "bizdev/event_row.html" with event=event %} + {% include "biz/event_row.html" with event=event %} {% empty %}
No completed events.
{% endfor %} @@ -47,7 +47,7 @@
{% for event in planned_events %} - {% include "bizdev/event_row.html" with event=event %} + {% include "biz/event_row.html" with event=event %} {% empty %}
No planned events.
{% endfor %} diff --git a/bizdev/templates/bizdev/prospect_form.html b/biz/templates/biz/prospect_form.html similarity index 93% rename from bizdev/templates/bizdev/prospect_form.html rename to biz/templates/biz/prospect_form.html index c22dcd0..8eef24b 100644 --- a/bizdev/templates/bizdev/prospect_form.html +++ b/biz/templates/biz/prospect_form.html @@ -1,4 +1,4 @@ -{% extends "bizdev/base.html" %} +{% extends "biz/base.html" %} {% block head_title %}{{ first_title }}{% endblock %} {% block first_title %}{{ first_title }}{% endblock %} diff --git a/bizdev/templates/bizdev/prospect_list.html b/biz/templates/biz/prospect_list.html similarity index 81% rename from bizdev/templates/bizdev/prospect_list.html rename to biz/templates/biz/prospect_list.html index 7ccf716..316b42a 100644 --- a/bizdev/templates/bizdev/prospect_list.html +++ b/biz/templates/biz/prospect_list.html @@ -1,4 +1,4 @@ -{% extends "bizdev/base.html" %} +{% extends "biz/base.html" %} {% load static %} @@ -18,15 +18,15 @@ {% endfor %}
- Clear + Clear
{{ filter.qs|length }} résultats @@ -60,11 +60,11 @@ {% endfor %} - + - + @@ -77,5 +77,5 @@ {% endblock %} {% block extra_js %} - + {% endblock %} diff --git a/bizdev/templates/bizdev/send_bulk_email.html b/biz/templates/biz/send_bulk_email.html similarity index 91% rename from bizdev/templates/bizdev/send_bulk_email.html rename to biz/templates/biz/send_bulk_email.html index f1b9200..a43c0b2 100644 --- a/bizdev/templates/bizdev/send_bulk_email.html +++ b/biz/templates/biz/send_bulk_email.html @@ -1,4 +1,4 @@ -{% extends "bizdev/base.html" %} +{% extends "biz/base.html" %} {% block content %}
@@ -41,7 +41,7 @@
- Cancel + Cancel
{% endblock %} diff --git a/bizdev/templatetags/__init__.py b/biz/templatetags/__init__.py similarity index 100% rename from bizdev/templatetags/__init__.py rename to biz/templatetags/__init__.py diff --git a/biz/templatetags/crm_tags.py b/biz/templatetags/crm_tags.py new file mode 100644 index 0000000..1943df4 --- /dev/null +++ b/biz/templatetags/crm_tags.py @@ -0,0 +1,7 @@ +from django import template + +register = template.Library() + +@register.filter(name='is_biz_manager') +def is_biz_manager(user): + return user.groups.filter(name='biz Manager').exists() diff --git a/bizdev/tests.py b/biz/tests.py similarity index 100% rename from bizdev/tests.py rename to biz/tests.py diff --git a/bizdev/urls.py b/biz/urls.py similarity index 97% rename from bizdev/urls.py rename to biz/urls.py index beceab4..a31fed1 100644 --- a/bizdev/urls.py +++ b/biz/urls.py @@ -1,7 +1,7 @@ from django.urls import path from . import views -app_name = 'bizdev' +app_name = 'biz' urlpatterns = [ path('', views.EventListView.as_view(), name='planned_events'),path('', views.EventListView.as_view(), name='events'), diff --git a/bizdev/views.py b/biz/views.py similarity index 84% rename from bizdev/views.py rename to biz/views.py index c170a71..44ca11c 100644 --- a/bizdev/views.py +++ b/biz/views.py @@ -19,13 +19,13 @@ from .models import Event, Prospect, ActivityType from .filters import ProspectFilter from .forms import CSVImportForm -from .mixins import bizdevAccessMixin +from .mixins import bizAccessMixin import csv from io import TextIOWrapper from datetime import datetime -# @permission_required('bizdev.view_bizdev', raise_exception=True) +# @permission_required('biz.view_biz', raise_exception=True) # def prospect_form(request, pk=None): # # Get the prospect instance if pk is provided (edit mode) # prospect = get_object_or_404(Prospect, pk=pk) if pk else None @@ -42,7 +42,7 @@ from datetime import datetime # action = 'updated' if pk else 'added' # messages.success(request, # f'Prospect {prospect.entity_name} has been {action} successfully!') -# return redirect('bizdev:events') +# return redirect('biz:events') # else: # form = ProspectForm(instance=prospect) @@ -52,9 +52,9 @@ from datetime import datetime # 'first_title': prospect.entity_name if prospect else 'Add Prospect', # 'second_title': prospect.full_name() if prospect else None # } -# return render(request, 'bizdev/prospect_form.html', context) +# return render(request, 'biz/prospect_form.html', context) -# # @permission_required('bizdev.view_bizdev', raise_exception=True) +# # @permission_required('biz.view_biz', raise_exception=True) # # def add_prospect(request): # # if request.method == 'POST': # # entity_name = request.POST.get('entity_name') @@ -82,17 +82,17 @@ from datetime import datetime # # modified_by=request.user # # ) # # messages.success(request, f'Prospect {name} has been added successfully!') -# # return redirect('bizdev:events') # or wherever you want to redirect after success +# # return redirect('biz:events') # or wherever you want to redirect after success # # except Exception as e: # # messages.error(request, f'Error adding prospect: {str(e)}') -# # return render(request, 'bizdev/add_prospect.html') +# # return render(request, 'biz/add_prospect.html') -# class EventCreateView(bizdevAccessMixin, CreateView): +# class EventCreateView(bizAccessMixin, CreateView): # model = Event # form_class = EventForm -# template_name = 'bizdev/event_form.html' -# success_url = reverse_lazy('bizdev:planned_events') +# template_name = 'biz/event_form.html' +# success_url = reverse_lazy('biz:planned_events') # def get_initial(self): # initial = super().get_initial() @@ -106,11 +106,11 @@ from datetime import datetime # form.instance.modified_by = self.request.user # return super().form_valid(form) -# class EditEventView(bizdevAccessMixin, UpdateView): +# class EditEventView(bizAccessMixin, UpdateView): # model = Event # form_class = EventForm -# template_name = 'bizdev/event_form.html' -# success_url = reverse_lazy('bizdev:planned_events') +# template_name = 'biz/event_form.html' +# success_url = reverse_lazy('biz:planned_events') # def form_valid(self, form): # form.instance.modified_by = self.request.user @@ -118,7 +118,7 @@ from datetime import datetime # messages.success(self.request, 'Event updated successfully!') # return response -# class StartEventView(bizdevAccessMixin, BaseUpdateView): +# class StartEventView(bizAccessMixin, BaseUpdateView): # model = Event # http_method_names = ['post', 'get'] @@ -132,23 +132,23 @@ from datetime import datetime # if event.type == 'MAIL': # return HttpResponseRedirect( -# reverse_lazy('bizdev:setup_email_campaign', kwargs={'event_id': event.id}) +# reverse_lazy('biz:setup_email_campaign', kwargs={'event_id': event.id}) # ) # elif event.type == 'SMS': # return HttpResponseRedirect( -# reverse_lazy('bizdev:setup_sms_campaign', kwargs={'event_id': event.id}) +# reverse_lazy('biz:setup_sms_campaign', kwargs={'event_id': event.id}) # ) # elif event.type == 'PRESS': # return HttpResponseRedirect( -# reverse_lazy('bizdev:setup_press_release', kwargs={'event_id': event.id}) +# reverse_lazy('biz:setup_press_release', kwargs={'event_id': event.id}) # ) # messages.success(request, 'Event started successfully!') -# return HttpResponseRedirect(reverse_lazy('bizdev:planned_events')) +# return HttpResponseRedirect(reverse_lazy('biz:planned_events')) -# class EventListView(bizdevAccessMixin, ListView): +# class EventListView(bizAccessMixin, ListView): # model = Event -# template_name = 'bizdev/events.html' +# template_name = 'biz/events.html' # context_object_name = 'events' # We won't use this since we're providing custom context # def get_context_data(self, **kwargs): @@ -161,9 +161,9 @@ from datetime import datetime # ).order_by('-date') # return context -# class ProspectListView(bizdevAccessMixin, ListView): +# class ProspectListView(bizAccessMixin, ListView): # model = Prospect -# template_name = 'bizdev/prospect_list.html' +# template_name = 'biz/prospect_list.html' # context_object_name = 'prospects' # filterset_class = ProspectFilter @@ -178,8 +178,8 @@ from datetime import datetime # ) # return context -# class CSVImportView(bizdevAccessMixin, FormView): -# template_name = 'bizdev/csv_import.html' +# class CSVImportView(bizAccessMixin, FormView): +# template_name = 'biz/csv_import.html' # form_class = CSVImportForm # success_url = reverse_lazy('prospect-list') @@ -247,10 +247,10 @@ from datetime import datetime # return super().form_valid(form) -# class SendBulkEmailView(bizdevAccessMixin, FormView): -# template_name = 'bizdev/send_bulk_email.html' +# class SendBulkEmailView(bizAccessMixin, FormView): +# template_name = 'biz/send_bulk_email.html' # form_class = BulkEmailForm -# success_url = reverse_lazy('bizdev:prospect-list') +# success_url = reverse_lazy('biz:prospect-list') # def form_valid(self, form): # prospects = form.cleaned_data['prospects'] diff --git a/bizdev/_instructions/base.md b/bizdev/_instructions/base.md deleted file mode 100644 index d6d8c2b..0000000 --- a/bizdev/_instructions/base.md +++ /dev/null @@ -1 +0,0 @@ -This is a django customer relationship managemement app. diff --git a/bizdev/migrations/0002_activity_declination_reason_alter_activity_status.py b/bizdev/migrations/0002_activity_declination_reason_alter_activity_status.py deleted file mode 100644 index 9508faf..0000000 --- a/bizdev/migrations/0002_activity_declination_reason_alter_activity_status.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.1 on 2025-07-10 13:20 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('bizdev', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='activity', - name='declination_reason', - field=models.CharField(blank=True, choices=[('TOO_EXPENSIVE', 'Too expensive'), ('USE_OTHER_PRODUCT', 'Use other product'), ('USE_ANDROID', 'Use Android'), ('UNKNOWN', 'Unknown')], max_length=50, null=True), - ), - migrations.AlterField( - model_name='activity', - name='status', - field=models.CharField(blank=True, choices=[('CONTACTED', 'Contacted'), ('RESPONDED', 'Responded'), ('SHOULD_TEST', 'Should test'), ('TESTING', 'Testing'), ('CUSTOMER', 'Customer'), ('LOST', 'Lost customer'), ('DECLINED', 'Declined'), ('DECLINED_UNRELATED', 'Declined without significance')], max_length=50, null=True), - ), - ] diff --git a/bizdev/migrations/0003_alter_activity_options_alter_prospect_options_and_more.py b/bizdev/migrations/0003_alter_activity_options_alter_prospect_options_and_more.py deleted file mode 100644 index 207a70a..0000000 --- a/bizdev/migrations/0003_alter_activity_options_alter_prospect_options_and_more.py +++ /dev/null @@ -1,52 +0,0 @@ -# Generated by Django 5.1 on 2025-07-20 10:08 - -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('bizdev', '0002_activity_declination_reason_alter_activity_status'), - ] - - operations = [ - migrations.AlterModelOptions( - name='activity', - options={'ordering': ['-creation_date'], 'verbose_name_plural': 'Activities'}, - ), - migrations.AlterModelOptions( - name='prospect', - options={}, - ), - migrations.AlterField( - model_name='activity', - name='id', - field=models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='activity', - name='status', - field=models.CharField(blank=True, choices=[('NONE', 'None'), ('INBOUND', 'Inbound'), ('CONTACTED', 'Contacted'), ('RESPONDED', 'Responded'), ('SHOULD_TEST', 'Should test'), ('TESTING', 'Testing'), ('CUSTOMER', 'Customer'), ('LOST', 'Lost customer'), ('DECLINED', 'Declined'), ('DECLINED_UNRELATED', 'Declined without significance')], max_length=50, null=True), - ), - migrations.AlterField( - model_name='activity', - name='type', - field=models.CharField(blank=True, choices=[('MAIL', 'Mail'), ('SMS', 'SMS'), ('CALL', 'Call'), ('PRESS', 'Press Release'), ('WORD_OF_MOUTH', 'Word of mouth')], max_length=20, null=True), - ), - migrations.AlterField( - model_name='emailtemplate', - name='id', - field=models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='entity', - name='id', - field=models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='prospect', - name='id', - field=models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), - ), - ] diff --git a/bizdev/migrations/0004_alter_emailtemplate_id.py b/bizdev/migrations/0004_alter_emailtemplate_id.py deleted file mode 100644 index e560e2c..0000000 --- a/bizdev/migrations/0004_alter_emailtemplate_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1 on 2025-07-20 10:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('bizdev', '0003_alter_activity_options_alter_prospect_options_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='emailtemplate', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/bizdev/static/crm/js/prospects.js b/bizdev/static/crm/js/prospects.js deleted file mode 100644 index ca4a579..0000000 --- a/bizdev/static/crm/js/prospects.js +++ /dev/null @@ -1,6 +0,0 @@ -document.getElementById("select-all").addEventListener("change", function () { - const checkboxes = document.getElementsByName("selected_prospects"); - for (let checkbox of checkboxes) { - checkbox.checked = this.checked; - } -}); diff --git a/bizdev/templatetags/crm_tags.py b/bizdev/templatetags/crm_tags.py deleted file mode 100644 index 4b0ee8e..0000000 --- a/bizdev/templatetags/crm_tags.py +++ /dev/null @@ -1,7 +0,0 @@ -from django import template - -register = template.Library() - -@register.filter(name='is_bizdev_manager') -def is_bizdev_manager(user): - return user.groups.filter(name='bizdev Manager').exists() diff --git a/padelclub_backend/settings.py b/padelclub_backend/settings.py index 9209ee4..28ad40d 100644 --- a/padelclub_backend/settings.py +++ b/padelclub_backend/settings.py @@ -36,7 +36,7 @@ INSTALLED_APPS = [ 'sync', 'tournaments', 'shop', - 'bizdev', + 'biz', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/padelclub_backend/settings_app.py b/padelclub_backend/settings_app.py index 64388f1..a38dcff 100644 --- a/padelclub_backend/settings_app.py +++ b/padelclub_backend/settings_app.py @@ -39,7 +39,7 @@ QR_CODE_CACHE_ALIAS = 'qr-code' SYNC_APPS = { 'sync': {}, 'tournaments': { 'exclude': ['Log', 'FailedApiCall', 'DeviceToken', 'Image'] }, - 'bizdev': {}, + 'biz': {}, } SYNC_MODEL_CHILDREN_SHARING = { diff --git a/padelclub_backend/urls.py b/padelclub_backend/urls.py index 9e7a4b4..9d70652 100644 --- a/padelclub_backend/urls.py +++ b/padelclub_backend/urls.py @@ -34,7 +34,7 @@ urlpatterns = [ path('kingdom/debug/player-license-lookup/', get_player_license_info, name='player_license_lookup'), path('kingdom/debug/bulk-license-lookup/', bulk_license_lookup, name='bulk_license_lookup'), path('kingdom/debug/explore-api-endpoints/', explore_fft_api_endpoints, name='explore_api_endpoints'), - # path('kingdom/bizdev/', include('bizdev.admin_urls')), + # path('kingdom/biz/', include('biz.admin_urls')), path('kingdom/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), path('dj-auth/', include('django.contrib.auth.urls')), diff --git a/tournaments/templates/admin/tournaments/dashboard.html b/tournaments/templates/admin/tournaments/dashboard.html index c0e1cb9..0325dc7 100644 --- a/tournaments/templates/admin/tournaments/dashboard.html +++ b/tournaments/templates/admin/tournaments/dashboard.html @@ -24,7 +24,7 @@ style="display: block; padding: 12px 15px; background: #17a2b8; color: white; text-decoration: none; border-radius: 8px; text-align: center; font-weight: 500;"> Purchases - Prospects