mirror of https://gitlab.crans.org/bde/nk20
🐛 Don't break the note
This commit is contained in:
parent
963ba05d01
commit
872456df20
|
@ -237,9 +237,9 @@ class TransactionPolymorphicSerializer(PolymorphicSerializer):
|
||||||
field.set(value)
|
field.set(value)
|
||||||
else:
|
else:
|
||||||
setattr(instance, attr, value)
|
setattr(instance, attr, value)
|
||||||
instance.validate(True)
|
instance.validate()
|
||||||
else:
|
else:
|
||||||
serializer.Meta.model(**attrs).validate(True)
|
serializer.Meta.model(**attrs).validate()
|
||||||
attrs[self.resource_type_field_name] = resource_type
|
attrs[self.resource_type_field_name] = resource_type
|
||||||
return super().validate(attrs)
|
return super().validate(attrs)
|
||||||
|
|
||||||
|
|
|
@ -164,7 +164,7 @@ class Transaction(PolymorphicModel):
|
||||||
models.Index(fields=['destination']),
|
models.Index(fields=['destination']),
|
||||||
]
|
]
|
||||||
|
|
||||||
def validate(self, reset=False):
|
def validate(self):
|
||||||
previous_source_balance = self.source.balance
|
previous_source_balance = self.source.balance
|
||||||
previous_dest_balance = self.destination.balance
|
previous_dest_balance = self.destination.balance
|
||||||
|
|
||||||
|
@ -188,23 +188,19 @@ class Transaction(PolymorphicModel):
|
||||||
source_balance = self.source.balance
|
source_balance = self.source.balance
|
||||||
dest_balance = self.destination.balance
|
dest_balance = self.destination.balance
|
||||||
|
|
||||||
if reset:
|
|
||||||
self.source.balance = previous_source_balance
|
|
||||||
self.destination.balance = previous_dest_balance
|
|
||||||
|
|
||||||
if source_balance > 2147483647 or source_balance < -2147483648\
|
if source_balance > 2147483647 or source_balance < -2147483648\
|
||||||
or dest_balance > 2147483647 or dest_balance < -2147483648:
|
or dest_balance > 2147483647 or dest_balance < -2147483648:
|
||||||
raise ValidationError(_("The note balances must be between - 21 474 836.47 € and 21 474 836.47 €."))
|
raise ValidationError(_("The note balances must be between - 21 474 836.47 € and 21 474 836.47 €."))
|
||||||
|
|
||||||
|
return source_balance - previous_source_balance, dest_balance - previous_dest_balance
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
When saving, also transfer money between two notes
|
When saving, also transfer money between two notes
|
||||||
"""
|
"""
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
self.source.refresh_from_db()
|
diff_source, diff_dest = self.validate()
|
||||||
self.destination.refresh_from_db()
|
|
||||||
self.validate(False)
|
|
||||||
|
|
||||||
if not self.source.is_active or not self.destination.is_active:
|
if not self.source.is_active or not self.destination.is_active:
|
||||||
if 'force_insert' not in kwargs or not kwargs['force_insert']:
|
if 'force_insert' not in kwargs or not kwargs['force_insert']:
|
||||||
|
@ -229,9 +225,13 @@ class Transaction(PolymorphicModel):
|
||||||
self.log("Saved")
|
self.log("Saved")
|
||||||
|
|
||||||
# Save notes
|
# Save notes
|
||||||
|
self.source.refresh_from_db()
|
||||||
|
self.source.balance += diff_source
|
||||||
self.source._force_save = True
|
self.source._force_save = True
|
||||||
self.source.save()
|
self.source.save()
|
||||||
self.log("Source saved")
|
self.log("Source saved")
|
||||||
|
self.destination.refresh_from_db()
|
||||||
|
self.destination.balance += diff_dest
|
||||||
self.destination._force_save = True
|
self.destination._force_save = True
|
||||||
self.destination.save()
|
self.destination.save()
|
||||||
self.log("Destination saved")
|
self.log("Destination saved")
|
||||||
|
|
|
@ -218,7 +218,7 @@ function consume(source, source_alias, dest, quantity, amount, reason, type, cat
|
||||||
addMsg("Attention, La transaction depuis la note " + source_alias + " a été réalisée avec " +
|
addMsg("Attention, La transaction depuis la note " + source_alias + " a été réalisée avec " +
|
||||||
"succès, mais la note émettrice " + source_alias + " est en négatif.",
|
"succès, mais la note émettrice " + source_alias + " est en négatif.",
|
||||||
"warning", 30000);
|
"warning", 30000);
|
||||||
if (source.note.membership && source.note.membership.date_end < new Date().toISOString())
|
if (source.membership && source.membership.date_end < new Date().toISOString())
|
||||||
addMsg("Attention : la note émettrice " + source.name + " n'est plus adhérente.",
|
addMsg("Attention : la note émettrice " + source.name + " n'est plus adhérente.",
|
||||||
"danger", 30000);
|
"danger", 30000);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue