forked from DGNum/gestioCOF
Ajout des majorations (type concert)
- Ajout des paramètres (modèle Settings) "ADDCOST_AMOUNT" et "ADDCOST_FOR" indiquant respectivement le montant et le compte sur lequel compter la majoration. Définir l'un de ces paramètres à NULL indique qu'il n'y a pas de majoration en cours - Prise en compte de ces 2 paramètres lors de la validation et l'enregistrement d'opérations d'achat (Operation.PURCHASE) dans K-Psul - Modification du champ "addcost_amount" de Operation. S'il n'y a pas de majoration, celui-ci est NULL. - Correction sur l'enregistrement de "valid_by" dans K-Psul. Celui-ci était systématiquement rempli par l'utilisateur connecté ce qui n'était pas le comportement souhaité. Il est maintenant rempli seulement si une permission autre que kfet.is_team était nécessaire pour valider la commande. - Suppression d'une exception non utilisée dans le modèle Settings
This commit is contained in:
parent
03aa26e34f
commit
11452d7633
4 changed files with 87 additions and 12 deletions
20
kfet/migrations/0016_settings_value_account.py
Normal file
20
kfet/migrations/0016_settings_value_account.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('kfet', '0015_auto_20160807_2324'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='settings',
|
||||||
|
name='value_account',
|
||||||
|
field=models.ForeignKey(to='kfet.Account', on_delete=django.db.models.deletion.PROTECT, default=None, null=True, blank=True),
|
||||||
|
),
|
||||||
|
]
|
19
kfet/migrations/0017_auto_20160808_0234.py
Normal file
19
kfet/migrations/0017_auto_20160808_0234.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('kfet', '0016_settings_value_account'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='operation',
|
||||||
|
name='addcost_amount',
|
||||||
|
field=models.DecimalField(blank=True, null=True, decimal_places=2, default=None, max_digits=6),
|
||||||
|
),
|
||||||
|
]
|
|
@ -415,7 +415,7 @@ class Operation(models.Model):
|
||||||
blank = True, null = True, default = None)
|
blank = True, null = True, default = None)
|
||||||
addcost_amount = models.DecimalField(
|
addcost_amount = models.DecimalField(
|
||||||
max_digits = 6, decimal_places = 2,
|
max_digits = 6, decimal_places = 2,
|
||||||
default = 0)
|
blank = True, null = True, default = None)
|
||||||
|
|
||||||
class GlobalPermissions(models.Model):
|
class GlobalPermissions(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -434,6 +434,9 @@ class Settings(models.Model):
|
||||||
value_decimal = models.DecimalField(
|
value_decimal = models.DecimalField(
|
||||||
max_digits = 6, decimal_places = 2,
|
max_digits = 6, decimal_places = 2,
|
||||||
blank = True, null = True, default = None)
|
blank = True, null = True, default = None)
|
||||||
|
value_account = models.ForeignKey(
|
||||||
|
Account, on_delete = models.PROTECT,
|
||||||
|
blank = True, null = True, default = None)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setting_inst(name):
|
def setting_inst(name):
|
||||||
|
@ -446,6 +449,16 @@ class Settings(models.Model):
|
||||||
except Settings.DoesNotExist:
|
except Settings.DoesNotExist:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
class SettingsError(Exception):
|
@staticmethod
|
||||||
def __init__(self, msg):
|
def ADDCOST_AMOUNT():
|
||||||
self.msg = msg
|
try:
|
||||||
|
return Settings.setting_inst("ADDCOST_AMOUNT").value_decimal
|
||||||
|
except Settings.DoesNotExist:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def ADDCOST_FOR():
|
||||||
|
try:
|
||||||
|
return Settings.setting_inst("ADDCOST_FOR").value_account
|
||||||
|
except Settings.DoesNotExist:
|
||||||
|
return None;
|
||||||
|
|
|
@ -409,19 +409,37 @@ def kpsul_perform_operations(request):
|
||||||
|
|
||||||
# Retrieving COF grant
|
# Retrieving COF grant
|
||||||
cof_grant = Settings.SUBVENTION_COF()
|
cof_grant = Settings.SUBVENTION_COF()
|
||||||
cof_grant_divisor = 1 + cof_grant / 100
|
# Retrieving addcosts data
|
||||||
|
addcost_amount = Settings.ADDCOST_AMOUNT()
|
||||||
|
addcost_for = Settings.ADDCOST_FOR()
|
||||||
|
|
||||||
# Initializing required perms
|
# Initializing vars
|
||||||
required_perms = []
|
required_perms = []
|
||||||
|
cof_grant_divisor = 1 + cof_grant / 100
|
||||||
|
is_addcost = (addcost_for and addcost_amount
|
||||||
|
and addcost_for != operationgroup.on_acc)
|
||||||
|
|
||||||
# 1. Calculating amount of each PURCHASE operations
|
# 1. Calculating amount of each PURCHASE operations
|
||||||
# 2. and total amount for operation group
|
# 1.1 Standard price for n articles
|
||||||
# 3. Updating (no commit) stock of article for PURCHASE operations
|
# 1.2 Adding addcost if there is one
|
||||||
|
# 1.3 Taking into account cof status
|
||||||
|
# 2. Updating (no commit) stock of article for PURCHASE operations
|
||||||
|
# 3. Calculating amount of operation group
|
||||||
# 4. Adding required permissions to perform each operation
|
# 4. Adding required permissions to perform each operation
|
||||||
|
# 5. Updating (no commit) new addcost_for's balance if there is one
|
||||||
|
# and adding addcost_for in operation instance
|
||||||
for operation in operations:
|
for operation in operations:
|
||||||
if operation.type == Operation.PURCHASE:
|
if operation.type == Operation.PURCHASE:
|
||||||
# 1
|
# 1.1
|
||||||
operation.amount = - operation.article.price * operation.article_nb
|
operation.amount = - operation.article.price * operation.article_nb
|
||||||
|
if is_addcost:
|
||||||
|
# 2
|
||||||
|
operation.addcost_amount = addcost_amount * operation.article_nb
|
||||||
|
operation.amount -= operation.addcost_amount
|
||||||
|
# 5
|
||||||
|
addcost_for.balance += operation.addcost_amount
|
||||||
|
operation.addcost_for = addcost_for
|
||||||
|
# 1.3
|
||||||
if operationgroup.on_acc.is_cof:
|
if operationgroup.on_acc.is_cof:
|
||||||
operation.amount = operation.amount / cof_grant_divisor
|
operation.amount = operation.amount / cof_grant_divisor
|
||||||
# 2
|
# 2
|
||||||
|
@ -450,6 +468,7 @@ def kpsul_perform_operations(request):
|
||||||
return JsonResponse(data, status=400)
|
return JsonResponse(data, status=400)
|
||||||
|
|
||||||
# If 1 perm is required, saving who perform the operations
|
# If 1 perm is required, saving who perform the operations
|
||||||
|
if len(required_perms) > 0:
|
||||||
operationgroup.valid_by = request.user.profile.account_kfet
|
operationgroup.valid_by = request.user.profile.account_kfet
|
||||||
|
|
||||||
# Filling cof status for statistics
|
# Filling cof status for statistics
|
||||||
|
@ -458,7 +477,7 @@ def kpsul_perform_operations(request):
|
||||||
# Updating (no commit) account's balance
|
# Updating (no commit) account's balance
|
||||||
operationgroup.on_acc.balance += operationgroup.amount
|
operationgroup.on_acc.balance += operationgroup.amount
|
||||||
|
|
||||||
# Apply all saves in a transaction to ensure database integrity
|
# Saving in a transaction to ensure database integrity
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
# Saving operation group
|
# Saving operation group
|
||||||
|
@ -468,6 +487,10 @@ def kpsul_perform_operations(request):
|
||||||
# Saving account with new balance
|
# Saving account with new balance
|
||||||
operationgroup.on_acc.save()
|
operationgroup.on_acc.save()
|
||||||
|
|
||||||
|
# Saving addcost_for with new balance if there is one
|
||||||
|
if is_addcost:
|
||||||
|
addcost_for.save()
|
||||||
|
|
||||||
# Filling operationgroup id for each operations and saving
|
# Filling operationgroup id for each operations and saving
|
||||||
# Saving articles with new stock
|
# Saving articles with new stock
|
||||||
for operation in operations:
|
for operation in operations:
|
||||||
|
|
Loading…
Reference in a new issue