Skip to content

Commit 97252fd

Browse files
authored
Merge pull request #55 from moshthepitt/decimal-days
Use models.DecimalField second
2 parents cecfe4f + f00aad2 commit 97252fd

File tree

3 files changed

+83
-2
lines changed

3 files changed

+83
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Generated by Django 3.1.2 on 2022-01-31 13:40
2+
3+
from decimal import Decimal
4+
import django.core.validators
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('small_small_hr', '0010_auto_20200626_1313'),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name='annualleave',
17+
name='allowed_days',
18+
field=models.DecimalField(blank=True, decimal_places=1, default=21, help_text='Number of leave days allowed in a year.', max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.1'))], verbose_name='Allowed Leave days'),
19+
),
20+
migrations.AlterField(
21+
model_name='annualleave',
22+
name='carried_over_days',
23+
field=models.DecimalField(blank=True, decimal_places=1, default=0, help_text='Number of leave days carried over into this year.', max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.1'))], verbose_name='Carried Over Leave days'),
24+
),
25+
migrations.AlterField(
26+
model_name='annualleave',
27+
name='year',
28+
field=models.PositiveIntegerField(choices=[(2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024), (2025, 2025), (2026, 2026), (2027, 2027), (2028, 2028), (2029, 2029), (2030, 2030), (2031, 2031)], db_index=True, default=2017, verbose_name='Year'),
29+
),
30+
]

small_small_hr/models.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django.conf import settings
77
from django.contrib.postgres.fields import JSONField
88
from django.db import models
9+
from django.core.validators import MinValueValidator
910
from django.db.models import Q
1011
from django.utils import timezone
1112
from django.utils.functional import cached_property
@@ -421,16 +422,22 @@ class AnnualLeave(TimeStampedModel, models.Model):
421422
leave_type = models.CharField(
422423
_("Type"), max_length=1, choices=Leave.TYPE_CHOICES, db_index=True
423424
)
424-
allowed_days = models.PositiveIntegerField(
425+
allowed_days = models.DecimalField(
425426
_("Allowed Leave days"),
426427
default=21,
427428
blank=True,
429+
decimal_places=1,
430+
max_digits=12,
431+
validators=[MinValueValidator(Decimal('0.1'))],
428432
help_text=_("Number of leave days allowed in a year."),
429433
)
430-
carried_over_days = models.PositiveIntegerField(
434+
carried_over_days = models.DecimalField(
431435
_("Carried Over Leave days"),
432436
default=0,
433437
blank=True,
438+
decimal_places=1,
439+
max_digits=12,
440+
validators=[MinValueValidator(Decimal('0.1'))],
434441
help_text=_("Number of leave days carried over into this year."),
435442
)
436443

tests/test_forms.py

+44
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,50 @@ def test_annual_leave_form(self):
9696
self.assertEqual(5, annual_leave.carried_over_days)
9797
self.assertEqual(Leave.REGULAR, annual_leave.leave_type)
9898

99+
def test_annual_leave_form_decimals(self):
100+
"""Test AnnualLeaveForm with decimal days."""
101+
user = mommy.make("auth.User", first_name="Bob", last_name="Ndoe")
102+
staffprofile = mommy.make("small_small_hr.StaffProfile", user=user)
103+
104+
request = self.factory.get("/")
105+
request.session = {}
106+
request.user = AnonymousUser()
107+
108+
data = {
109+
"staff": staffprofile.id,
110+
"year": 2018,
111+
"leave_type": Leave.REGULAR,
112+
"allowed_days": 16.5,
113+
"carried_over_days": 8.5,
114+
}
115+
116+
form = AnnualLeaveForm(data=data)
117+
self.assertTrue(form.is_valid())
118+
annual_leave = form.save()
119+
self.assertEqual(staffprofile, annual_leave.staff)
120+
self.assertEqual(2018, annual_leave.year)
121+
self.assertEqual(16.5, annual_leave.allowed_days)
122+
self.assertEqual(8.5, annual_leave.carried_over_days)
123+
self.assertEqual(Leave.REGULAR, annual_leave.leave_type)
124+
125+
data2 = {
126+
"staff": staffprofile.id,
127+
"year": 2017,
128+
"leave_type": Leave.REGULAR,
129+
"allowed_days": 21,
130+
"carried_over_days": 5,
131+
}
132+
133+
form = AnnualLeaveForm(data=data2, instance=annual_leave)
134+
self.assertTrue(form.is_valid())
135+
form.save()
136+
annual_leave.refresh_from_db()
137+
self.assertEqual(staffprofile, annual_leave.staff)
138+
self.assertEqual(2017, annual_leave.year)
139+
self.assertEqual(21, annual_leave.allowed_days)
140+
self.assertEqual(5, annual_leave.carried_over_days)
141+
self.assertEqual(Leave.REGULAR, annual_leave.leave_type)
142+
99143
def test_role_form(self):
100144
"""Test RoleForm."""
101145
request = self.factory.get("/")

0 commit comments

Comments
 (0)