mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-10-31 17:13:08 +00:00 
			
		
		
		
	Big refactor: remove Subscriber class
This commit is contained in:
		| @@ -8,7 +8,6 @@ from django.core.urlresolvers import reverse | |||||||
| from django.utils import timezone | from django.utils import timezone | ||||||
|  |  | ||||||
| from core.models import User, MetaGroup, Group, SithFile | from core.models import User, MetaGroup, Group, SithFile | ||||||
| from subscription.models import Subscriber |  | ||||||
|  |  | ||||||
| # Create your models here. | # Create your models here. | ||||||
|  |  | ||||||
| @@ -120,7 +119,7 @@ class Club(models.Model): | |||||||
|         """ |         """ | ||||||
|         Method to see if that object can be seen by the given user |         Method to see if that object can be seen by the given user | ||||||
|         """ |         """ | ||||||
|         sub = Subscriber.objects.filter(pk=user.pk).first() |         sub = User.objects.filter(pk=user.pk).first() | ||||||
|         if sub is None: |         if sub is None: | ||||||
|             return False |             return False | ||||||
|         return sub.is_subscribed() |         return sub.is_subscribed() | ||||||
| @@ -151,7 +150,7 @@ class Membership(models.Model): | |||||||
|     description = models.CharField(_('description'), max_length=128, null=False, blank=True) |     description = models.CharField(_('description'), max_length=128, null=False, blank=True) | ||||||
|  |  | ||||||
|     def clean(self): |     def clean(self): | ||||||
|         sub = Subscriber.objects.filter(pk=self.user.pk).first() |         sub = User.objects.filter(pk=self.user.pk).first() | ||||||
|         if sub is None or not sub.is_subscribed(): |         if sub is None or not sub.is_subscribed(): | ||||||
|             raise ValidationError(_('User must be subscriber to take part to a club')) |             raise ValidationError(_('User must be subscriber to take part to a club')) | ||||||
|         if Membership.objects.filter(user=self.user).filter(club=self.club).filter(end_date=None).exists(): |         if Membership.objects.filter(user=self.user).filter(club=self.club).filter(end_date=None).exists(): | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ from django.contrib.sites.models import Site | |||||||
| from core.models import Group, User, Page, PageRev, SithFile | from core.models import Group, User, Page, PageRev, SithFile | ||||||
| from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, Company | from accounting.models import GeneralJournal, BankAccount, ClubAccount, Operation, AccountingType, Company | ||||||
| from club.models import Club, Membership | from club.models import Club, Membership | ||||||
| from subscription.models import Subscription, Subscriber | from subscription.models import Subscription | ||||||
| from counter.models import Customer, ProductType, Product, Counter | from counter.models import Customer, ProductType, Product, Counter | ||||||
|  |  | ||||||
| class Command(BaseCommand): | class Command(BaseCommand): | ||||||
| @@ -201,7 +201,7 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site. | |||||||
|  |  | ||||||
|             # Subscription |             # Subscription | ||||||
|             ## Root |             ## Root | ||||||
|             s = Subscription(member=Subscriber.objects.filter(pk=root.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], |             s = Subscription(member=User.objects.filter(pk=root.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], | ||||||
|                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) |                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) | ||||||
|             s.subscription_start = s.compute_start() |             s.subscription_start = s.compute_start() | ||||||
|             s.subscription_end = s.compute_end( |             s.subscription_end = s.compute_end( | ||||||
| @@ -209,7 +209,7 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site. | |||||||
|                     start=s.subscription_start) |                     start=s.subscription_start) | ||||||
|             s.save() |             s.save() | ||||||
|             ## Skia |             ## Skia | ||||||
|             s = Subscription(member=Subscriber.objects.filter(pk=skia.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], |             s = Subscription(member=User.objects.filter(pk=skia.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], | ||||||
|                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) |                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) | ||||||
|             s.subscription_start = s.compute_start() |             s.subscription_start = s.compute_start() | ||||||
|             s.subscription_end = s.compute_end( |             s.subscription_end = s.compute_end( | ||||||
| @@ -217,7 +217,7 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site. | |||||||
|                     start=s.subscription_start) |                     start=s.subscription_start) | ||||||
|             s.save() |             s.save() | ||||||
|             ## Comptable |             ## Comptable | ||||||
|             s = Subscription(member=Subscriber.objects.filter(pk=comptable.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], |             s = Subscription(member=User.objects.filter(pk=comptable.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], | ||||||
|                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) |                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) | ||||||
|             s.subscription_start = s.compute_start() |             s.subscription_start = s.compute_start() | ||||||
|             s.subscription_end = s.compute_end( |             s.subscription_end = s.compute_end( | ||||||
| @@ -225,15 +225,15 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site. | |||||||
|                     start=s.subscription_start) |                     start=s.subscription_start) | ||||||
|             s.save() |             s.save() | ||||||
|             ## Richard |             ## Richard | ||||||
|             s = Subscription(member=Subscriber.objects.filter(pk=r.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], |             s = Subscription(member=User.objects.filter(pk=r.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], | ||||||
|                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) |                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) | ||||||
|             s.subscription_start = s.compute_start() |             s.subscription_start = s.compute_start() | ||||||
|             s.subscription_end = s.compute_end( |             s.subscription_end = s.compute_end( | ||||||
|                     duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'], |                     duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'], | ||||||
|                     start=s.subscription_start) |                     start=s.subscription_start) | ||||||
|             s.save() |             s.save() | ||||||
|             ## Subscriber |             ## User | ||||||
|             s = Subscription(member=Subscriber.objects.filter(pk=subscriber.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], |             s = Subscription(member=User.objects.filter(pk=subscriber.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], | ||||||
|                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) |                     payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) | ||||||
|             s.subscription_start = s.compute_start() |             s.subscription_start = s.compute_start() | ||||||
|             s.subscription_end = s.compute_end( |             s.subscription_end = s.compute_end( | ||||||
|   | |||||||
| @@ -195,6 +195,10 @@ class User(AbstractBaseUser): | |||||||
|     def to_dict(self): |     def to_dict(self): | ||||||
|         return self.__dict__ |         return self.__dict__ | ||||||
|  |  | ||||||
|  |     def is_subscribed(self): | ||||||
|  |         s = self.subscriptions.last() | ||||||
|  |         return s.is_valid_now() if s is not None else False | ||||||
|  |  | ||||||
|     def is_in_group(self, group_name): |     def is_in_group(self, group_name): | ||||||
|         """If the user is in the group passed in argument (as string or by id)""" |         """If the user is in the group passed in argument (as string or by id)""" | ||||||
|         group_id = 0 |         group_id = 0 | ||||||
| @@ -208,15 +212,7 @@ class User(AbstractBaseUser): | |||||||
|         if group_id == settings.SITH_GROUP_PUBLIC_ID: |         if group_id == settings.SITH_GROUP_PUBLIC_ID: | ||||||
|             return True |             return True | ||||||
|         if group_name == settings.SITH_MAIN_MEMBERS_GROUP: # We check the subscription if asked |         if group_name == settings.SITH_MAIN_MEMBERS_GROUP: # We check the subscription if asked | ||||||
|             if 'subscription' in settings.INSTALLED_APPS: |             return self.is_subscribed() | ||||||
|                 from subscription.models import Subscriber |  | ||||||
|                 s = Subscriber.objects.filter(pk=self.pk).first() |  | ||||||
|                 if s is not None and s.is_subscribed(): |  | ||||||
|                     return True |  | ||||||
|                 else: |  | ||||||
|                     return False |  | ||||||
|             else: |  | ||||||
|                 return False |  | ||||||
|         if group_name[-len(settings.SITH_BOARD_SUFFIX):] == settings.SITH_BOARD_SUFFIX: |         if group_name[-len(settings.SITH_BOARD_SUFFIX):] == settings.SITH_BOARD_SUFFIX: | ||||||
|             from club.models import Club |             from club.models import Club | ||||||
|             name = group_name[:-len(settings.SITH_BOARD_SUFFIX)] |             name = group_name[:-len(settings.SITH_BOARD_SUFFIX)] | ||||||
|   | |||||||
| @@ -35,15 +35,15 @@ | |||||||
| {%- endmacro %} | {%- endmacro %} | ||||||
|  |  | ||||||
| {% macro user_subscription(user) %} | {% macro user_subscription(user) %} | ||||||
|         {% trans subscription_end=get_subscriber(user).subscriptions.last().subscription_end %}Subscribed until {{ subscription_end }}{% endtrans %}<br/> |         {% trans subscription_end=user.subscriptions.last().subscription_end %}Subscribed until {{ subscription_end }}{% endtrans %}<br/> | ||||||
|         {% trans %}Account number: {% endtrans %}{{ user.customer.account_id }}<br/> |         {% trans %}Account number: {% endtrans %}{{ user.customer.account_id }}<br/> | ||||||
| {%- endmacro %} | {%- endmacro %} | ||||||
|  |  | ||||||
| {% macro show_slots(user) %} | {% macro show_slots(user) %} | ||||||
|     {% if get_subscriber(user).slots.filter(start_date__gte=timezone.now()).exists() %} |     {% if user.slots.filter(start_date__gte=timezone.now()).exists() %} | ||||||
|         <h5>{% trans %}Slot{% endtrans %}</h5> |         <h5>{% trans %}Slot{% endtrans %}</h5> | ||||||
|         <ul> |         <ul> | ||||||
|         {% for i in get_subscriber(user).slots.filter(start_date__gte=timezone.now().replace(tzinfo=None)).all() %} |         {% for i in user.slots.filter(start_date__gte=timezone.now().replace(tzinfo=None)).all() %} | ||||||
|             <li>{{ i.get_type_display() }} - {{i.machine.launderette }}, {{ i.start_date|date("l j") }} : {{ i.start_date|time(DATETIME_FORMAT) }}</li> |             <li>{{ i.get_type_display() }} - {{i.machine.launderette }}, {{ i.start_date|date("l j") }} : {{ i.start_date|time(DATETIME_FORMAT) }}</li> | ||||||
|         {% endfor %} |         {% endfor %} | ||||||
|         </ul> |         </ul> | ||||||
| @@ -51,10 +51,10 @@ | |||||||
| {% endmacro %} | {% endmacro %} | ||||||
|  |  | ||||||
| {% macro show_tokens(user) %} | {% macro show_tokens(user) %} | ||||||
|     {% if get_subscriber(user).tokens.exists() %} |     {% if user.tokens.exists() %} | ||||||
|         <h5>{% trans %}Tokens{% endtrans %}</h5> |         <h5>{% trans %}Tokens{% endtrans %}</h5> | ||||||
|         <ul> |         <ul> | ||||||
|         {% for i in get_subscriber(user).tokens.all() %} |         {% for i in user.tokens.all() %} | ||||||
|             <li>{{ i }}</li> |             <li>{{ i }}</li> | ||||||
|         {% endfor %} |         {% endfor %} | ||||||
|         </ul> |         </ul> | ||||||
| @@ -65,4 +65,4 @@ | |||||||
|     {% if user == profile or user.is_root or user.is_board_member %} |     {% if user == profile or user.is_root or user.is_board_member %} | ||||||
|     <a href="{{ url("core:user_godfathers_delete", user_id=profile.id, godfather_id=godfather.id, is_father=is_father) }}">{% trans %}Delete{% endtrans %}</a> |     <a href="{{ url("core:user_godfathers_delete", user_id=profile.id, godfather_id=godfather.id, is_father=is_father) }}">{% trans %}Delete{% endtrans %}</a> | ||||||
|     {% endif %} |     {% endif %} | ||||||
| {% endmacro %} | {% endmacro %} | ||||||
|   | |||||||
| @@ -54,7 +54,7 @@ | |||||||
| {% if user.memberships.filter(end_date=None).exists() or user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user == profile %} | {% if user.memberships.filter(end_date=None).exists() or user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user == profile %} | ||||||
| {# if the user is member of a club, he can view the subscription state #} | {# if the user is member of a club, he can view the subscription state #} | ||||||
| <p> | <p> | ||||||
| {% if get_subscriber(profile).is_subscribed() %} | {% if profile.is_subscribed() %} | ||||||
|     {% if user == profile or user.is_root or user.is_board_member %} |     {% if user == profile or user.is_root or user.is_board_member %} | ||||||
|         {{ user_subscription(profile) }} |         {{ user_subscription(profile) }} | ||||||
|     {% endif %} |     {% endif %} | ||||||
|   | |||||||
| @@ -139,7 +139,7 @@ class Migration(migrations.Migration): | |||||||
|         migrations.AddField( |         migrations.AddField( | ||||||
|             model_name='counter', |             model_name='counter', | ||||||
|             name='sellers', |             name='sellers', | ||||||
|             field=models.ManyToManyField(related_name='counters', to='subscription.Subscriber', blank=True, verbose_name='sellers'), |             field=models.ManyToManyField(related_name='counters', to='core.User', blank=True, verbose_name='sellers'), | ||||||
|         ), |         ), | ||||||
|         migrations.AddField( |         migrations.AddField( | ||||||
|             model_name='counter', |             model_name='counter', | ||||||
|   | |||||||
| @@ -16,8 +16,7 @@ import datetime | |||||||
| from club.models import Club | from club.models import Club | ||||||
| from accounting.models import CurrencyField | from accounting.models import CurrencyField | ||||||
| from core.models import Group, User, Notification | from core.models import Group, User, Notification | ||||||
| from subscription.models import Subscriber, Subscription | from subscription.models import Subscription | ||||||
| from subscription.views import get_subscriber |  | ||||||
|  |  | ||||||
| class Customer(models.Model): | class Customer(models.Model): | ||||||
|     """ |     """ | ||||||
| @@ -134,7 +133,7 @@ class Counter(models.Model): | |||||||
|     type = models.CharField(_('counter type'), |     type = models.CharField(_('counter type'), | ||||||
|             max_length=255, |             max_length=255, | ||||||
|             choices=[('BAR',_('Bar')), ('OFFICE',_('Office')), ('EBOUTIC',_('Eboutic'))]) |             choices=[('BAR',_('Bar')), ('OFFICE',_('Office')), ('EBOUTIC',_('Eboutic'))]) | ||||||
|     sellers = models.ManyToManyField(Subscriber, verbose_name=_('sellers'), related_name='counters', blank=True) |     sellers = models.ManyToManyField(User, verbose_name=_('sellers'), related_name='counters', blank=True) | ||||||
|     edit_groups = models.ManyToManyField(Group, related_name="editable_counters", blank=True) |     edit_groups = models.ManyToManyField(Group, related_name="editable_counters", blank=True) | ||||||
|     view_groups = models.ManyToManyField(Group, related_name="viewable_counters", blank=True) |     view_groups = models.ManyToManyField(Group, related_name="viewable_counters", blank=True) | ||||||
|     token = models.CharField(_('token'), max_length=30, null=True, blank=True) |     token = models.CharField(_('token'), max_length=30, null=True, blank=True) | ||||||
| @@ -164,7 +163,7 @@ class Counter(models.Model): | |||||||
|     def can_be_viewed_by(self, user): |     def can_be_viewed_by(self, user): | ||||||
|         if self.type == "BAR" or self.type == "EBOUTIC": |         if self.type == "BAR" or self.type == "EBOUTIC": | ||||||
|             return True |             return True | ||||||
|         sub = get_subscriber(request.user) |         sub = request.user | ||||||
|         return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or sub in self.sellers |         return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or sub in self.sellers | ||||||
|  |  | ||||||
|     def gen_token(self): |     def gen_token(self): | ||||||
| @@ -349,7 +348,7 @@ class Selling(models.Model): | |||||||
|             self.customer.save() |             self.customer.save() | ||||||
|             self.is_validated = True |             self.is_validated = True | ||||||
|         if self.product and self.product.id == settings.SITH_PRODUCT_SUBSCRIPTION_ONE_SEMESTER: |         if self.product and self.product.id == settings.SITH_PRODUCT_SUBSCRIPTION_ONE_SEMESTER: | ||||||
|             s = Subscriber.objects.filter(id=self.customer.user.id).first() |             s = User.objects.filter(id=self.customer.user.id).first() | ||||||
|             sub = Subscription( |             sub = Subscription( | ||||||
|                     member=s, |                     member=s, | ||||||
|                     subscription_type='un-semestre', |                     subscription_type='un-semestre', | ||||||
| @@ -364,7 +363,7 @@ class Selling(models.Model): | |||||||
|                     start=sub.subscription_start) |                     start=sub.subscription_start) | ||||||
|             sub.save() |             sub.save() | ||||||
|         elif self.product and self.product.id == settings.SITH_PRODUCT_SUBSCRIPTION_TWO_SEMESTERS: |         elif self.product and self.product.id == settings.SITH_PRODUCT_SUBSCRIPTION_TWO_SEMESTERS: | ||||||
|             s = Subscriber.objects.filter(id=self.customer.user.id).first() |             s = User.objects.filter(id=self.customer.user.id).first() | ||||||
|             sub = Subscription( |             sub = Subscription( | ||||||
|                     member=s, |                     member=s, | ||||||
|                     subscription_type='deux-semestres', |                     subscription_type='deux-semestres', | ||||||
|   | |||||||
| @@ -22,8 +22,7 @@ from ajax_select import make_ajax_form, make_ajax_field | |||||||
| from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin | from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin | ||||||
| from core.views.forms import SelectUser, LoginForm, SelectDate, SelectDateTime | from core.views.forms import SelectUser, LoginForm, SelectDate, SelectDateTime | ||||||
| from core.models import User | from core.models import User | ||||||
| from subscription.models import Subscriber, Subscription | from subscription.models import Subscription | ||||||
| from subscription.views import get_subscriber |  | ||||||
| from counter.models import Counter, Customer, Product, Selling, Refilling, ProductType, CashRegisterSummary, CashRegisterSummaryItem, Eticket | from counter.models import Counter, Customer, Product, Selling, Refilling, ProductType, CashRegisterSummary, CashRegisterSummaryItem, Eticket | ||||||
| from accounting.models import CurrencyField | from accounting.models import CurrencyField | ||||||
|  |  | ||||||
| @@ -49,7 +48,7 @@ class GetUserForm(forms.Form): | |||||||
|             cus = Customer.objects.filter(account_id__iexact=cleaned_data['code']).first() |             cus = Customer.objects.filter(account_id__iexact=cleaned_data['code']).first() | ||||||
|         elif cleaned_data['id'] is not None: |         elif cleaned_data['id'] is not None: | ||||||
|             cus = Customer.objects.filter(user=cleaned_data['id']).first() |             cus = Customer.objects.filter(user=cleaned_data['id']).first() | ||||||
|         sub = get_subscriber(cus.user) if cus is not None else None |         sub = cus.user if cus is not None else None | ||||||
|         if (cus is None or sub is None or not sub.subscriptions.last() or |         if (cus is None or sub is None or not sub.subscriptions.last() or | ||||||
|             (date.today() - sub.subscriptions.last().subscription_end) > timedelta(days=90)): |             (date.today() - sub.subscriptions.last().subscription_end) > timedelta(days=90)): | ||||||
|             raise forms.ValidationError(_("User not found")) |             raise forms.ValidationError(_("User not found")) | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ from django.conf import settings | |||||||
| from accounting.models import CurrencyField | from accounting.models import CurrencyField | ||||||
| from counter.models import Counter, Product, Customer, Selling, Refilling | from counter.models import Counter, Product, Customer, Selling, Refilling | ||||||
| from core.models import User | from core.models import User | ||||||
| from subscription.models import Subscription, Subscriber | from subscription.models import Subscription | ||||||
|  |  | ||||||
| class Basket(models.Model): | class Basket(models.Model): | ||||||
|     """ |     """ | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ class Migration(migrations.Migration): | |||||||
|                 ('type', models.CharField(choices=[('WASHING', 'Washing'), ('DRYING', 'Drying')], max_length=10, verbose_name='type')), |                 ('type', models.CharField(choices=[('WASHING', 'Washing'), ('DRYING', 'Drying')], max_length=10, verbose_name='type')), | ||||||
|                 ('borrow_date', models.DateTimeField(null=True, verbose_name='borrow date', blank=True)), |                 ('borrow_date', models.DateTimeField(null=True, verbose_name='borrow date', blank=True)), | ||||||
|                 ('launderette', models.ForeignKey(verbose_name='launderette', to='launderette.Launderette', related_name='tokens')), |                 ('launderette', models.ForeignKey(verbose_name='launderette', to='launderette.Launderette', related_name='tokens')), | ||||||
|                 ('user', models.ForeignKey(null=True, related_name='tokens', verbose_name='user', to='subscription.Subscriber', blank=True)), |                 ('user', models.ForeignKey(null=True, related_name='tokens', verbose_name='user', to='core.User', blank=True)), | ||||||
|             ], |             ], | ||||||
|             options={ |             options={ | ||||||
|                 'verbose_name': 'Token', |                 'verbose_name': 'Token', | ||||||
| @@ -72,7 +72,7 @@ class Migration(migrations.Migration): | |||||||
|         migrations.AddField( |         migrations.AddField( | ||||||
|             model_name='slot', |             model_name='slot', | ||||||
|             name='user', |             name='user', | ||||||
|             field=models.ForeignKey(verbose_name='user', to='subscription.Subscriber', related_name='slots'), |             field=models.ForeignKey(verbose_name='user', to='core.User', related_name='slots'), | ||||||
|         ), |         ), | ||||||
|         migrations.AlterUniqueTogether( |         migrations.AlterUniqueTogether( | ||||||
|             name='token', |             name='token', | ||||||
|   | |||||||
| @@ -5,8 +5,6 @@ from django.core.urlresolvers import reverse | |||||||
|  |  | ||||||
| from counter.models import Counter, Product | from counter.models import Counter, Product | ||||||
| from core.models import User | from core.models import User | ||||||
| from subscription.models import Subscriber |  | ||||||
| from subscription.views import get_subscriber |  | ||||||
| from club.models import Club | from club.models import Club | ||||||
|  |  | ||||||
| # Create your models here. | # Create your models here. | ||||||
| @@ -86,7 +84,7 @@ class Token(models.Model): | |||||||
|     launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette')) |     launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette')) | ||||||
|     type = models.CharField(_('type'), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES) |     type = models.CharField(_('type'), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES) | ||||||
|     borrow_date = models.DateTimeField(_('borrow date'), null=True, blank=True) |     borrow_date = models.DateTimeField(_('borrow date'), null=True, blank=True) | ||||||
|     user = models.ForeignKey(Subscriber, related_name='tokens', verbose_name=_('user'), null=True, blank=True) |     user = models.ForeignKey(User, related_name='tokens', verbose_name=_('user'), null=True, blank=True) | ||||||
|  |  | ||||||
|     class Meta: |     class Meta: | ||||||
|         verbose_name = _('Token') |         verbose_name = _('Token') | ||||||
| @@ -123,7 +121,7 @@ class Slot(models.Model): | |||||||
|     type = models.CharField(_('type'), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES) |     type = models.CharField(_('type'), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES) | ||||||
|     machine = models.ForeignKey(Machine, related_name='slots', verbose_name=_('machine')) |     machine = models.ForeignKey(Machine, related_name='slots', verbose_name=_('machine')) | ||||||
|     token = models.ForeignKey(Token, related_name='slots', verbose_name=_('token'), blank=True, null=True) |     token = models.ForeignKey(Token, related_name='slots', verbose_name=_('token'), blank=True, null=True) | ||||||
|     user = models.ForeignKey(Subscriber, related_name='slots', verbose_name=_('user')) |     user = models.ForeignKey(User, related_name='slots', verbose_name=_('user')) | ||||||
|  |  | ||||||
|     class Meta: |     class Meta: | ||||||
|         verbose_name = _('Slot') |         verbose_name = _('Slot') | ||||||
|   | |||||||
| @@ -20,8 +20,6 @@ from core.models import Page | |||||||
| from club.models import Club | from club.models import Club | ||||||
| from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin | from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin | ||||||
| from launderette.models import Launderette, Token, Machine, Slot | from launderette.models import Launderette, Token, Machine, Slot | ||||||
| from subscription.views import get_subscriber |  | ||||||
| from subscription.models import Subscriber |  | ||||||
| from counter.models import Counter, Customer, Selling | from counter.models import Counter, Customer, Selling | ||||||
| from counter.views import GetUserForm | from counter.views import GetUserForm | ||||||
|  |  | ||||||
| @@ -61,7 +59,7 @@ class LaunderetteBookView(CanViewMixin, DetailView): | |||||||
|             if 'slot_type' in request.POST.keys(): |             if 'slot_type' in request.POST.keys(): | ||||||
|                 self.slot_type = request.POST['slot_type'] |                 self.slot_type = request.POST['slot_type'] | ||||||
|             if 'slot' in request.POST.keys() and request.user.is_authenticated(): |             if 'slot' in request.POST.keys() and request.user.is_authenticated(): | ||||||
|                 self.subscriber = get_subscriber(request.user) |                 self.subscriber = request.user | ||||||
|                 if self.subscriber.is_subscribed(): |                 if self.subscriber.is_subscribed(): | ||||||
|                     self.date = dateparse.parse_datetime(request.POST['slot']).replace(tzinfo=pytz.UTC) |                     self.date = dateparse.parse_datetime(request.POST['slot']).replace(tzinfo=pytz.UTC) | ||||||
|                     if self.slot_type == "WASHING": |                     if self.slot_type == "WASHING": | ||||||
| @@ -224,7 +222,7 @@ class LaunderetteAdminView(CanEditPropMixin, BaseFormView, DetailView): | |||||||
| class GetLaunderetteUserForm(GetUserForm): | class GetLaunderetteUserForm(GetUserForm): | ||||||
|     def clean(self): |     def clean(self): | ||||||
|         cleaned_data = super(GetLaunderetteUserForm, self).clean() |         cleaned_data = super(GetLaunderetteUserForm, self).clean() | ||||||
|         sub = get_subscriber(cleaned_data['user']) |         sub = cleaned_data['user'] | ||||||
|         if sub.slots.all().count() <= 0: |         if sub.slots.all().count() <= 0: | ||||||
|             raise forms.ValidationError(_("User has booked no slot")) |             raise forms.ValidationError(_("User has booked no slot")) | ||||||
|         return cleaned_data |         return cleaned_data | ||||||
| @@ -272,10 +270,10 @@ class LaunderetteMainClickView(CanEditMixin, BaseFormView, DetailView): | |||||||
| class ClickTokenForm(forms.BaseForm): | class ClickTokenForm(forms.BaseForm): | ||||||
|     def clean(self): |     def clean(self): | ||||||
|         with transaction.atomic(): |         with transaction.atomic(): | ||||||
|             operator = Subscriber.objects.filter(id=self.operator_id).first() |             operator = User.objects.filter(id=self.operator_id).first() | ||||||
|             customer = Customer.objects.filter(user__id=self.subscriber_id).first() |             customer = Customer.objects.filter(user__id=self.subscriber_id).first() | ||||||
|             counter = Counter.objects.filter(id=self.counter_id).first() |             counter = Counter.objects.filter(id=self.counter_id).first() | ||||||
|             subscriber = get_subscriber(customer.user) |             subscriber = customer.user | ||||||
|             self.last_basket = { |             self.last_basket = { | ||||||
|                     'last_basket': [], |                     'last_basket': [], | ||||||
|                     'last_customer': customer.user.get_display_name(), |                     'last_customer': customer.user.get_display_name(), | ||||||
| @@ -334,7 +332,7 @@ class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView): | |||||||
|     def get(self, request, *args, **kwargs): |     def get(self, request, *args, **kwargs): | ||||||
|         """Simple get view""" |         """Simple get view""" | ||||||
|         self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first() |         self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first() | ||||||
|         self.subscriber = get_subscriber(self.customer.user) |         self.subscriber = self.customer.user | ||||||
|         self.operator = request.user |         self.operator = request.user | ||||||
|         return super(LaunderetteClickView, self).get(request, *args, **kwargs) |         return super(LaunderetteClickView, self).get(request, *args, **kwargs) | ||||||
|  |  | ||||||
| @@ -342,7 +340,7 @@ class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView): | |||||||
|         """ Handle the many possibilities of the post request """ |         """ Handle the many possibilities of the post request """ | ||||||
|         self.object = self.get_object() |         self.object = self.get_object() | ||||||
|         self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first() |         self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first() | ||||||
|         self.subscriber = get_subscriber(self.customer.user) |         self.subscriber = self.customer.user | ||||||
|         self.operator = request.user |         self.operator = request.user | ||||||
|         return super(LaunderetteClickView, self).post(request, *args, **kwargs) |         return super(LaunderetteClickView, self).post(request, *args, **kwargs) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ from django.core.files import File | |||||||
| from core.models import User, SithFile | from core.models import User, SithFile | ||||||
| from club.models import Club, Membership | from club.models import Club, Membership | ||||||
| from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType, Permanency, Eticket | from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType, Permanency, Eticket | ||||||
| from subscription.models import Subscription, Subscriber | from subscription.models import Subscription | ||||||
| from eboutic.models import Invoice, InvoiceItem | from eboutic.models import Invoice, InvoiceItem | ||||||
| from accounting.models import BankAccount, ClubAccount, GeneralJournal, Operation, AccountingType, Company, SimplifiedAccountingType, Label | from accounting.models import BankAccount, ClubAccount, GeneralJournal, Operation, AccountingType, Company, SimplifiedAccountingType, Label | ||||||
| from sas.models import Album, Picture, PeoplePictureRelation | from sas.models import Album, Picture, PeoplePictureRelation | ||||||
| @@ -298,7 +298,7 @@ def migrate_subscriptions(): | |||||||
|     print("Customers deleted") |     print("Customers deleted") | ||||||
|     for r in cur: |     for r in cur: | ||||||
|         try: |         try: | ||||||
|             user = Subscriber.objects.filter(id=r['id_utilisateur']).first() |             user = User.objects.filter(id=r['id_utilisateur']).first() | ||||||
|             if user: |             if user: | ||||||
|                 new = Subscription( |                 new = Subscription( | ||||||
|                         id=r['id_cotisation'], |                         id=r['id_cotisation'], | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ from django.core.exceptions import PermissionDenied | |||||||
| from ajax_select.fields import AutoCompleteSelectField | from ajax_select.fields import AutoCompleteSelectField | ||||||
|  |  | ||||||
| from core.models import User | from core.models import User | ||||||
| from subscription.models import Subscriber |  | ||||||
| from counter.models import Customer | from counter.models import Customer | ||||||
|  |  | ||||||
| def merge_users(u1, u2): | def merge_users(u1, u2): | ||||||
| @@ -40,8 +39,8 @@ def merge_users(u1, u2): | |||||||
|                 f.auto_now = False |                 f.auto_now = False | ||||||
|         u1.invoices.add(i) |         u1.invoices.add(i) | ||||||
|     u1.save() |     u1.save() | ||||||
|     s1 = Subscriber.objects.filter(id=u1.id).first() |     s1 = User.objects.filter(id=u1.id).first() | ||||||
|     s2 = Subscriber.objects.filter(id=u2.id).first() |     s2 = User.objects.filter(id=u2.id).first() | ||||||
|     for s in s2.subscriptions.all(): |     for s in s2.subscriptions.all(): | ||||||
|         s1.subscriptions.add(s) |         s1.subscriptions.add(s) | ||||||
|     s1.save() |     s1.save() | ||||||
|   | |||||||
| @@ -111,7 +111,6 @@ TEMPLATES = [ | |||||||
|                 "can_edit_prop": "core.views.can_edit_prop", |                 "can_edit_prop": "core.views.can_edit_prop", | ||||||
|                 "can_edit": "core.views.can_edit", |                 "can_edit": "core.views.can_edit", | ||||||
|                 "can_view": "core.views.can_view", |                 "can_view": "core.views.can_view", | ||||||
|                 "get_subscriber": "subscription.views.get_subscriber", |  | ||||||
|                 "settings": "sith.settings", |                 "settings": "sith.settings", | ||||||
|                 "Launderette": "launderette.models.Launderette", |                 "Launderette": "launderette.models.Launderette", | ||||||
|                 "Counter": "counter.models.Counter", |                 "Counter": "counter.models.Counter", | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| from django.contrib import admin | from django.contrib import admin | ||||||
|  |  | ||||||
| from subscription.models import Subscriber, Subscription | from subscription.models import Subscription | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| admin.site.register(Subscriber) |  | ||||||
| admin.site.register(Subscription) | admin.site.register(Subscription) | ||||||
|   | |||||||
| @@ -26,21 +26,9 @@ class Migration(migrations.Migration): | |||||||
|                 'ordering': ['subscription_start'], |                 'ordering': ['subscription_start'], | ||||||
|             }, |             }, | ||||||
|         ), |         ), | ||||||
|         migrations.CreateModel( |  | ||||||
|             name='Subscriber', |  | ||||||
|             fields=[ |  | ||||||
|             ], |  | ||||||
|             options={ |  | ||||||
|                 'proxy': True, |  | ||||||
|             }, |  | ||||||
|             bases=('core.user',), |  | ||||||
|             managers=[ |  | ||||||
|                 ('objects', django.contrib.auth.models.UserManager()), |  | ||||||
|             ], |  | ||||||
|         ), |  | ||||||
|         migrations.AddField( |         migrations.AddField( | ||||||
|             model_name='subscription', |             model_name='subscription', | ||||||
|             name='member', |             name='member', | ||||||
|             field=models.ForeignKey(to='subscription.Subscriber', related_name='subscriptions'), |             field=models.ForeignKey(to='core.User', related_name='subscriptions'), | ||||||
|         ), |         ), | ||||||
|     ] |     ] | ||||||
|   | |||||||
| @@ -19,36 +19,8 @@ def validate_payment(value): | |||||||
|     if value not in settings.SITH_SUBSCRIPTION_PAYMENT_METHOD: |     if value not in settings.SITH_SUBSCRIPTION_PAYMENT_METHOD: | ||||||
|         raise ValidationError(_('Bad payment method')) |         raise ValidationError(_('Bad payment method')) | ||||||
|  |  | ||||||
| class Subscriber(User): |  | ||||||
|     class Meta: |  | ||||||
|         proxy = True |  | ||||||
|  |  | ||||||
|     def is_subscribed(self): |  | ||||||
|         s = self.subscriptions.last() |  | ||||||
|         return s.is_valid_now() if s is not None else False |  | ||||||
|  |  | ||||||
|     def save(self): |  | ||||||
|         create = False |  | ||||||
|         if not self.id: |  | ||||||
|             create = True |  | ||||||
|         super(Subscriber, self).save() |  | ||||||
|         if create and settings.IS_OLD_MYSQL_PRESENT: |  | ||||||
|             try: # Create user on the old site: TODO remove me! |  | ||||||
|                 import MySQLdb |  | ||||||
|                 db = MySQLdb.connect(**settings.OLD_MYSQL_INFOS) |  | ||||||
|                 c = db.cursor() |  | ||||||
|                 c.execute("""INSERT INTO utilisateurs (id_utilisateur, nom_utl, prenom_utl, email_utl, hash_utl, ae_utl) VALUES |  | ||||||
|                 (%s, %s, %s, %s, %s, %s)""", (self.id, self.last_name, self.first_name, self.email, "valid", "1")) |  | ||||||
|                 db.commit() |  | ||||||
|             except Exception as e: |  | ||||||
|                 with open(settings.BASE_DIR+"/user_fail.log", "a") as f: |  | ||||||
|                     print("FAIL to add user %s (%s %s - %s) to old site" % (self.id, self.first_name.encode('utf-8'), |  | ||||||
|                         self.last_name.encode('utf-8'), self.email), file=f) |  | ||||||
|                     print("Reason: %s" % (repr(e)), file=f) |  | ||||||
|                 db.rollback() |  | ||||||
|  |  | ||||||
| class Subscription(models.Model): | class Subscription(models.Model): | ||||||
|     member = models.ForeignKey(Subscriber, related_name='subscriptions') |     member = models.ForeignKey(User, related_name='subscriptions') | ||||||
|     subscription_type = models.CharField(_('subscription type'), |     subscription_type = models.CharField(_('subscription type'), | ||||||
|                                          max_length=255, |                                          max_length=255, | ||||||
|                                          choices=((k, v['name']) for k,v in sorted(settings.SITH_SUBSCRIPTIONS.items()))) |                                          choices=((k, v['name']) for k,v in sorted(settings.SITH_SUBSCRIPTIONS.items()))) | ||||||
|   | |||||||
| @@ -11,14 +11,10 @@ from django.conf import settings | |||||||
| from ajax_select.fields import AutoCompleteSelectField | from ajax_select.fields import AutoCompleteSelectField | ||||||
| import random | import random | ||||||
|  |  | ||||||
| from subscription.models import Subscriber, Subscription | from subscription.models import Subscription | ||||||
| from core.views import CanEditMixin, CanEditPropMixin, CanViewMixin | from core.views import CanEditMixin, CanEditPropMixin, CanViewMixin | ||||||
| from core.models import User | from core.models import User | ||||||
|  |  | ||||||
| def get_subscriber(user): |  | ||||||
|     s = Subscriber.objects.filter(pk=user.pk).first() |  | ||||||
|     return s |  | ||||||
|  |  | ||||||
| class SubscriptionForm(forms.ModelForm): | class SubscriptionForm(forms.ModelForm): | ||||||
|     class Meta: |     class Meta: | ||||||
|         model = Subscription |         model = Subscription | ||||||
| @@ -38,7 +34,7 @@ class SubscriptionForm(forms.ModelForm): | |||||||
|     def clean_member(self): |     def clean_member(self): | ||||||
|         subscriber = self.cleaned_data.get("member") |         subscriber = self.cleaned_data.get("member") | ||||||
|         if subscriber: |         if subscriber: | ||||||
|             subscriber = Subscriber.objects.filter(id=subscriber.id).first() |             subscriber = User.objects.filter(id=subscriber.id).first() | ||||||
|         return subscriber |         return subscriber | ||||||
|  |  | ||||||
|     def clean(self): |     def clean(self): | ||||||
| @@ -50,10 +46,10 @@ class SubscriptionForm(forms.ModelForm): | |||||||
|             self.errors.pop("member", None) |             self.errors.pop("member", None) | ||||||
|             if self.errors: |             if self.errors: | ||||||
|                 return cleaned_data |                 return cleaned_data | ||||||
|             if Subscriber.objects.filter(email=cleaned_data.get("email")).first() is not None: |             if User.objects.filter(email=cleaned_data.get("email")).first() is not None: | ||||||
|                 self.add_error("email", ValidationError(_("A user with that email address already exists"))) |                 self.add_error("email", ValidationError(_("A user with that email address already exists"))) | ||||||
|             else: |             else: | ||||||
|                 u = Subscriber(last_name = self.cleaned_data.get("last_name"), |                 u = User(last_name = self.cleaned_data.get("last_name"), | ||||||
|                         first_name = self.cleaned_data.get("first_name"), |                         first_name = self.cleaned_data.get("first_name"), | ||||||
|                         email = self.cleaned_data.get("email")) |                         email = self.cleaned_data.get("email")) | ||||||
|                 u.generate_username() |                 u.generate_username() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user