mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 07:49:57 +01:00 
			
		
		
		
	🐛 Don't break the note
This commit is contained in:
		| @@ -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); | ||||||
|             } |             } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user