-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implementation of the cancellation process in Tapir (#495)
* Correct some mistakes and included some new translations (Kersten) * Implementation of the cancellation process in Tapir. * Little margin and padding improvements for better prints of shifts (regarding safe area) * Fixes of the cancellation-process-implementation * Revert "Little margin and padding improvements for better prints of shifts (regarding safe area)" This reverts commit 18dd282. * Removed comments and added new line at the end of files * More fixes and new migration * migrations files * old migrations files removed * some final improvements part 1 * removed space between 388-389 in coop/models.py * removed space between 208-209 in models.py * now the shareowner.py
- Loading branch information
1 parent
7e7db40
commit 8d6ee38
Showing
17 changed files
with
692 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
from django.contrib import admin | ||
|
||
from tapir.coop.models import ShareOwnership, DraftUser | ||
from tapir.coop.models import ShareOwnership, DraftUser, ResignedMembership | ||
|
||
admin.site.register(ShareOwnership) | ||
admin.site.register(DraftUser) | ||
admin.site.register(ResignedMembership) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
.../0042_resignedmembership_resignmembershipcreatelogentry_resignmembershipupdatelogentry.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# Generated by Django 3.2.23 on 2024-06-01 16:34 | ||
|
||
from django.conf import settings | ||
import django.contrib.postgres.fields.hstore | ||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
import django.utils.timezone | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
('log', '0006_alter_emaillogentry_email_content'), | ||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
('coop', '0041_auto_20231221_1403'), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='ResignMembershipCreateLogEntry', | ||
fields=[ | ||
('logentry_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='log.logentry')), | ||
('values', django.contrib.postgres.fields.hstore.HStoreField()), | ||
], | ||
options={ | ||
'abstract': False, | ||
}, | ||
bases=('log.logentry',), | ||
), | ||
migrations.CreateModel( | ||
name='ResignMembershipUpdateLogEntry', | ||
fields=[ | ||
('logentry_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='log.logentry')), | ||
('old_values', django.contrib.postgres.fields.hstore.HStoreField()), | ||
('new_values', django.contrib.postgres.fields.hstore.HStoreField()), | ||
], | ||
options={ | ||
'abstract': False, | ||
}, | ||
bases=('log.logentry',), | ||
), | ||
migrations.CreateModel( | ||
name='ResignedMembership', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('cancellation_date', models.DateField(blank=True, default=django.utils.timezone.now)), | ||
('pay_out_day', models.DateField(null=True)), | ||
('cancellation_reason', models.CharField(max_length=1000)), | ||
('coop_buys_shares_back', models.BooleanField()), | ||
('willing_to_gift_shares_to_coop', models.BooleanField()), | ||
('paid_out', models.BooleanField(default=False)), | ||
('share_owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='coop.shareowner', verbose_name='Shareowner')), | ||
('transfering_shares_to', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='TapirUser')), | ||
], | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
import datetime | ||
|
||
from tapir.accounts.models import TapirUser | ||
from tapir.coop.models import ResignedMembership, ShareOwnership | ||
from tapir.shifts.models import ShiftAttendanceTemplate, ShiftAttendance | ||
|
||
from tapir.utils.shortcuts import get_timezone_aware_datetime | ||
|
||
class ResignMemberService: | ||
@staticmethod | ||
def update_shifts_and_shares(member: ResignedMembership): | ||
tapir_user: TapirUser = getattr(member.share_owner, "user", None) | ||
if not tapir_user: | ||
print("Couldn't find an existing Tapir user.") | ||
return | ||
|
||
new_end_date = member.cancellation_date | ||
new_end_date = new_end_date.replace(month=12) | ||
new_end_date = new_end_date.replace(day=31) | ||
new_end_date = new_end_date.replace(year=new_end_date.year + 3) | ||
ShareOwnership.objects.filter(share_owner=member.share_owner).update(end_date=new_end_date) | ||
|
||
for attendance_template in ShiftAttendanceTemplate.objects.filter( | ||
user=tapir_user | ||
): | ||
start_date = get_timezone_aware_datetime( | ||
member.cancellation_date, datetime.time() | ||
) | ||
attendance_template.cancel_attendances(start_date) | ||
attendance_template.delete() | ||
|
||
attendances = ShiftAttendance.objects.filter( | ||
user=tapir_user, | ||
slot__shift__start_time__gte=start_date, | ||
state=ShiftAttendance.State.PENDING, | ||
) | ||
|
||
for attendance in attendances: | ||
attendance.state = ShiftAttendance.State.CANCELLED | ||
attendance.save() | ||
|
||
def delete_end_dates(member: ResignedMembership): | ||
ShareOwnership.objects.filter(share_owner=member.share_owner).update(end_date=None) |
4 changes: 4 additions & 0 deletions
4
tapir/coop/templates/coop/log/create_resignmember_log_entry.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{% load i18n %} | ||
{% blocktranslate with member=entry.values.share_owner cancellation_reason=entry.values.cancellation_reason %} | ||
Member resigned for reason: {{ cancellation_reason }} | ||
{% endblocktranslate %} |
7 changes: 7 additions & 0 deletions
7
tapir/coop/templates/coop/log/update_resignmember_log_entry.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{% load i18n %} | ||
{% translate "Updated resigned membership:" %} | ||
<br /> | ||
{% for change in changes %} | ||
<strong>{{ change.0 }}</strong>: {{ change.1 }} → {{ change.2 }} | ||
<br /> | ||
{% endfor %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
{% extends "core/base.html" %} | ||
{% load render_table from django_tables2 %} | ||
{% load django_bootstrap5 %} | ||
{% load i18n %} | ||
{% load static %} | ||
{% load querystring from django_tables2 %} | ||
{% load export_url from django_tables2 %} | ||
{% load core %} | ||
{% load coop %} | ||
{% load utils %} | ||
{% block title %} | ||
{% translate "List of resigned members" %} | ||
{% endblock title %} | ||
{% block head %} | ||
{{ block.super }} | ||
<link rel="stylesheet" href="{% static 'coop/css/coop.css' %}"> | ||
{% endblock head %} | ||
{% block content %} | ||
<div class="card mb-2"> | ||
<div class="card-header d-flex justify-content-between align-items-center"> | ||
<h5>{% translate "List of resigned members" %} ({{ total_of_resigned_members }}) </h5> | ||
<div> | ||
<div class="btn-group"> | ||
<button type="button" | ||
class="{% tapir_button_link %} btn dropdown-toggle" | ||
data-bs-toggle="dropdown">{% translate "Export" %}</button> | ||
<div class="dropdown-menu dropdown-menu-right"> | ||
{% for format in view.export_formats %} | ||
<a class="dropdown-item" href="{% export_url format %}"> | ||
download <code>.{{ format }}</code> | ||
</a> | ||
{% endfor %} | ||
</div> | ||
</div> | ||
<a class="{% tapir_button_link_to_action %}" | ||
href="{% url 'coop:resign_new_membership' %}"> | ||
<span class="material-icons">add_circle_outline</span> | ||
{% translate "Resign new member" %} | ||
</a> | ||
</div> | ||
</div> | ||
<br> | ||
<form method="get"> | ||
<div class="px-3 mt-1"> | ||
<div class="member-filter-form-filters">{% bootstrap_form filter.form %}</div> | ||
<div class="member-filter-form-buttons"> | ||
<button class="filter-button {% tapir_button_link %}"> | ||
<span class="material-icons">filter_alt</span>{% translate 'Filter' %} | ||
</button> | ||
<a class="{% tapir_button_link %}" | ||
href="{% url 'coop:resigned_members_list' %}"> | ||
<span class="material-icons">clear</span> | ||
{% translate "Clear all filters" %} | ||
</a> | ||
</div> | ||
</div> | ||
</form> | ||
<li class="list-group-item">{% render_table table %}</li> | ||
</div> | ||
{% endblock content %} |
Oops, something went wrong.