Skip to content
Snippets Groups Projects

voucher model modified

Merged Piotr Gawron requested to merge 211-voucher-data into master
22 files
+ 446
58
Compare changes
  • Side-by-side
  • Inline
Files
22
@@ -8,7 +8,7 @@ from django.utils import timezone
from web.algorithm import VerhoeffAlgorithm
from web.forms.forms import DATEPICKER_DATE_ATTRS
from web.models import VoucherType, VoucherTypePrice, Voucher, Worker
from web.models.constants import VOUCHER_STATUS_NEW, VOUCHER_STATUS_USED
from web.models.constants import VOUCHER_STATUS_USED, VOUCHER_STATUS_EXPIRED
from web.models.worker_study_role import WORKER_VOUCHER_PARTNER
logger = logging.getLogger(__name__)
@@ -52,35 +52,29 @@ class VoucherForm(ModelForm):
self.fields['issue_date'].required = False
self.fields['expiry_date'].widget.attrs['readonly'] = True
self.fields['expiry_date'].required = False
self.fields['use_date'].widget.attrs['readonly'] = True
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['voucher_type'].widget.attrs['readonly'] = True
self.fields['usage_partner'].queryset = Worker.get_workers_by_worker_type(WORKER_VOUCHER_PARTNER).filter(
voucher_types = instance.voucher_type)
self.fields['hours'].widget.attrs['readonly'] = True
self.fields['usage_partner'].widget.attrs['readonly'] = True
if instance.status != VOUCHER_STATUS_NEW:
if instance.status in [VOUCHER_STATUS_USED, VOUCHER_STATUS_EXPIRED]:
self.fields['status'].widget.attrs['readonly'] = True
self.fields['feedback'].widget.attrs['readonly'] = True
self.fields['usage_partner'].widget.attrs['readonly'] = True
def clean(self):
if self.cleaned_data["status"] == VOUCHER_STATUS_USED and not self.cleaned_data["usage_partner"]:
self.add_error('usage_partner', "Partner must be defined for used voucher")
if self.cleaned_data["status"] != VOUCHER_STATUS_USED and self.cleaned_data["usage_partner"]:
self.add_error('status', "Status must be used for voucher with defined partner")
def save(self, commit=True):
instance = super(VoucherForm, self).save(commit=False)
if not instance.id:
instance.issue_date = timezone.now()
instance.expiry_date = instance.issue_date + datetime.timedelta(days=92)
max_id = str(0).zfill(5)
max_id = str(1).zfill(5)
if Voucher.objects.all().count() > 0:
max_id = str(Voucher.objects.latest('id').id).zfill(5)
instance.number = max_id + VerhoeffAlgorithm.calculate_verhoeff_check_sum(max_id)
if instance.status == VOUCHER_STATUS_USED and not instance.use_date:
instance.use_date = timezone.now()
max_id = str(Voucher.objects.latest('id').id + 1).zfill(5)
# number in format {ND_NUMBER}-{DATE}-{VOUCHER_TYPE_CODE}-{VOUCHER_TYPE}-{SEQ_NUMBER}{CHECKSUM}
instance.number = instance.study_subject.nd_number + "-" + \
datetime.datetime.now().strftime("%Y%m%d") + "-" + \
instance.voucher_type.code + "-" + \
instance.usage_partner.voucher_partner_code + "-" + \
max_id + VerhoeffAlgorithm.calculate_verhoeff_check_sum(max_id)
if commit:
instance.save()
Loading