mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-21 21:53:30 +00:00
Big refactor: remove Subscriber class
This commit is contained in:
parent
0d4b697079
commit
28431ec9be
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user