WIP: Aureplop/kpsul js refactor #501
1 changed files with 65 additions and 53 deletions
118
kfet/views.py
118
kfet/views.py
|
@ -1095,6 +1095,7 @@ def kpsul_perform_operations(request):
|
||||||
consumers.KPsul.group_send('kfet.kpsul', websocket_data)
|
consumers.KPsul.group_send('kfet.kpsul', websocket_data)
|
||||||
return JsonResponse(data)
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
||||||
@teamkfet_required
|
@teamkfet_required
|
||||||
def kpsul_cancel_operations(request):
|
def kpsul_cancel_operations(request):
|
||||||
# Pour la réponse
|
# Pour la réponse
|
||||||
|
@ -1117,8 +1118,8 @@ def kpsul_cancel_operations(request):
|
||||||
Operation.objects
|
Operation.objects
|
||||||
.select_related('group', 'group__on_acc', 'group__on_acc__negative')
|
.select_related('group', 'group__on_acc', 'group__on_acc__negative')
|
||||||
.filter(pk__in=opes_post))
|
.filter(pk__in=opes_post))
|
||||||
opes_pk = [ ope.pk for ope in opes_all ]
|
opes_pk = [ope.pk for ope in opes_all]
|
||||||
opes_notexisting = [ ope for ope in opes_post if ope not in opes_pk ]
|
opes_notexisting = [ope for ope in opes_post if ope not in opes_pk]
|
||||||
|
|
||||||
transfers_all = (
|
transfers_all = (
|
||||||
Transfer.objects
|
Transfer.objects
|
||||||
|
@ -1127,7 +1128,7 @@ def kpsul_cancel_operations(request):
|
||||||
.filter(pk__in=transfers_post))
|
.filter(pk__in=transfers_post))
|
||||||
transfers_pk = [transfer.pk for transfer in transfers_all]
|
transfers_pk = [transfer.pk for transfer in transfers_all]
|
||||||
transfers_notexisting = [transfer for transfer in transfers_post
|
transfers_notexisting = [transfer for transfer in transfers_post
|
||||||
if transfer not in transfers_pk]
|
if transfer not in transfers_pk]
|
||||||
|
|
||||||
if transfers_notexisting or opes_notexisting:
|
if transfers_notexisting or opes_notexisting:
|
||||||
if transfers_notexisting:
|
if transfers_notexisting:
|
||||||
|
@ -1140,12 +1141,16 @@ def kpsul_cancel_operations(request):
|
||||||
opes = [] # Pas déjà annulée
|
opes = [] # Pas déjà annulée
|
||||||
transfers = []
|
transfers = []
|
||||||
required_perms = set()
|
required_perms = set()
|
||||||
stop_all = False
|
stop_all = False
|
||||||
cancel_duration = Settings.CANCEL_DURATION()
|
cancel_duration = Settings.CANCEL_DURATION()
|
||||||
to_accounts_balances = defaultdict(lambda:0) # Modifs à faire sur les balances des comptes
|
# Modifs à faire sur les balances des comptes
|
||||||
to_groups_amounts = defaultdict(lambda:0) # ------ sur les montants des groupes d'opé
|
to_accounts_balances = defaultdict(lambda: 0)
|
||||||
to_checkouts_balances = defaultdict(lambda:0) # ------ sur les balances de caisses
|
# ------ sur les montants des groupes d'opé
|
||||||
to_articles_stocks = defaultdict(lambda:0) # ------ sur les stocks d'articles
|
to_groups_amounts = defaultdict(lambda: 0)
|
||||||
|
# ------ sur les balances de caisses
|
||||||
|
to_checkouts_balances = defaultdict(lambda: 0)
|
||||||
|
# ------ sur les stocks d'articles
|
||||||
|
to_articles_stocks = defaultdict(lambda: 0)
|
||||||
for ope in opes_all:
|
for ope in opes_all:
|
||||||
if ope.canceled_at:
|
if ope.canceled_at:
|
||||||
# Opération déjà annulée, va pour un warning en Response
|
# Opération déjà annulée, va pour un warning en Response
|
||||||
|
@ -1176,10 +1181,11 @@ def kpsul_cancel_operations(request):
|
||||||
# par `.save()`, amount_error est recalculé automatiquement,
|
# par `.save()`, amount_error est recalculé automatiquement,
|
||||||
# ce qui n'est pas le cas en faisant un update sur queryset
|
# ce qui n'est pas le cas en faisant un update sur queryset
|
||||||
# TODO ? : Maj les balance_old de relevés pour modifier l'erreur
|
# TODO ? : Maj les balance_old de relevés pour modifier l'erreur
|
||||||
last_statement = (CheckoutStatement.objects
|
last_statement = \
|
||||||
.filter(checkout=ope.group.checkout)
|
(CheckoutStatement.objects
|
||||||
.order_by('at')
|
.filter(checkout=ope.group.checkout)
|
||||||
.last())
|
.order_by('at')
|
||||||
|
.last())
|
||||||
if not last_statement or last_statement.at < ope.group.at:
|
if not last_statement or last_statement.at < ope.group.at:
|
||||||
if ope.type == Operation.PURCHASE:
|
if ope.type == Operation.PURCHASE:
|
||||||
if ope.group.on_acc.is_cash:
|
if ope.group.on_acc.is_cash:
|
||||||
|
@ -1321,13 +1327,14 @@ def kpsul_cancel_operations(request):
|
||||||
data['warnings']['already_canceled'] = already_canceled
|
data['warnings']['already_canceled'] = already_canceled
|
||||||
return JsonResponse(data)
|
return JsonResponse(data)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def history_json(request):
|
def history_json(request):
|
||||||
# Récupération des paramètres
|
# Récupération des paramètres
|
||||||
from_date = request.POST.get('from', None)
|
from_date = request.POST.get('from', None)
|
||||||
to_date = request.POST.get('to', None)
|
to_date = request.POST.get('to', None)
|
||||||
checkouts = request.POST.getlist('checkouts[]', None)
|
checkouts = request.POST.getlist('checkouts[]', None)
|
||||||
accounts = request.POST.getlist('accounts[]', None)
|
accounts = request.POST.getlist('accounts[]', None)
|
||||||
transfers_only = request.POST.get('transfersonly', None)
|
transfers_only = request.POST.get('transfersonly', None)
|
||||||
|
|
||||||
# Construction de la requête (sur les opérations) pour le prefetch
|
# Construction de la requête (sur les opérations) pour le prefetch
|
||||||
|
@ -1335,7 +1342,7 @@ def history_json(request):
|
||||||
'canceled_by__trigramme', 'addcost_for__trigramme',
|
'canceled_by__trigramme', 'addcost_for__trigramme',
|
||||||
'article__name')
|
'article__name')
|
||||||
ope_prefetch = Prefetch('opes',
|
ope_prefetch = Prefetch('opes',
|
||||||
queryset = ope_queryset_prefetch)
|
queryset=ope_queryset_prefetch)
|
||||||
|
|
||||||
transfer_queryset_prefetch = Transfer.objects.select_related(
|
transfer_queryset_prefetch = Transfer.objects.select_related(
|
||||||
'from_acc__trigramme', 'to_acc__trigramme',
|
'from_acc__trigramme', 'to_acc__trigramme',
|
||||||
|
@ -1356,19 +1363,21 @@ def history_json(request):
|
||||||
queryset=transfer_queryset_prefetch,
|
queryset=transfer_queryset_prefetch,
|
||||||
to_attr='filtered_transfers')
|
to_attr='filtered_transfers')
|
||||||
|
|
||||||
|
|
||||||
# Construction de la requête principale
|
# Construction de la requête principale
|
||||||
opegroups = (OperationGroup.objects
|
opegroups = (
|
||||||
.prefetch_related(ope_prefetch)
|
OperationGroup.objects
|
||||||
.select_related('on_acc__trigramme', 'valid_by__trigramme')
|
.prefetch_related(ope_prefetch)
|
||||||
.order_by('at')
|
.select_related('on_acc__trigramme',
|
||||||
|
'valid_by__trigramme')
|
||||||
|
.order_by('at')
|
||||||
)
|
)
|
||||||
|
|
||||||
transfergroups = (
|
transfergroups = (
|
||||||
TransferGroup.objects
|
TransferGroup.objects
|
||||||
.prefetch_related(transfer_prefetch)
|
.prefetch_related(transfer_prefetch)
|
||||||
.select_related('valid_by__trigramme')
|
.select_related('valid_by__trigramme')
|
||||||
.order_by('at'))
|
.order_by('at')
|
||||||
|
)
|
||||||
|
|
||||||
# Application des filtres
|
# Application des filtres
|
||||||
if from_date:
|
if from_date:
|
||||||
|
@ -1388,18 +1397,17 @@ def history_json(request):
|
||||||
if not request.user.has_perm('kfet.is_team'):
|
if not request.user.has_perm('kfet.is_team'):
|
||||||
opegroups = opegroups.filter(on_acc=request.user.profile.account_kfet)
|
opegroups = opegroups.filter(on_acc=request.user.profile.account_kfet)
|
||||||
|
|
||||||
|
|
||||||
# Construction de la réponse
|
# Construction de la réponse
|
||||||
opegroups_list = []
|
opegroups_list = []
|
||||||
for opegroup in opegroups:
|
for opegroup in opegroups:
|
||||||
opegroup_dict = {
|
opegroup_dict = {
|
||||||
'type' : 'opegroup',
|
'type': 'opegroup',
|
||||||
'id' : opegroup.id,
|
'id': opegroup.id,
|
||||||
'amount' : opegroup.amount,
|
'amount': opegroup.amount,
|
||||||
'at' : opegroup.at,
|
'at': opegroup.at,
|
||||||
'is_cof' : opegroup.is_cof,
|
'is_cof': opegroup.is_cof,
|
||||||
'comment' : opegroup.comment,
|
'comment': opegroup.comment,
|
||||||
'opes' : [],
|
'opes': [],
|
||||||
'on_acc__trigramme':
|
'on_acc__trigramme':
|
||||||
opegroup.on_acc and opegroup.on_acc.trigramme or None,
|
opegroup.on_acc and opegroup.on_acc.trigramme or None,
|
||||||
}
|
}
|
||||||
|
@ -1408,13 +1416,13 @@ def history_json(request):
|
||||||
opegroup.valid_by and opegroup.valid_by.trigramme or None)
|
opegroup.valid_by and opegroup.valid_by.trigramme or None)
|
||||||
for ope in opegroup.opes.all():
|
for ope in opegroup.opes.all():
|
||||||
ope_dict = {
|
ope_dict = {
|
||||||
'id' : ope.id,
|
'id': ope.id,
|
||||||
'type' : ope.type,
|
'type': ope.type,
|
||||||
'amount' : ope.amount,
|
'amount': ope.amount,
|
||||||
'article_nb' : ope.article_nb,
|
'article_nb': ope.article_nb,
|
||||||
'is_checkout' : ope.is_checkout,
|
'is_checkout': ope.is_checkout,
|
||||||
'addcost_amount': ope.addcost_amount,
|
'addcost_amount': ope.addcost_amount,
|
||||||
'canceled_at' : ope.canceled_at,
|
'canceled_at': ope.canceled_at,
|
||||||
'article__name':
|
'article__name':
|
||||||
ope.article and ope.article.name or None,
|
ope.article and ope.article.name or None,
|
||||||
'addcost_for__trigramme':
|
'addcost_for__trigramme':
|
||||||
|
@ -1437,9 +1445,9 @@ def history_json(request):
|
||||||
}
|
}
|
||||||
if request.user.has_perm('kfet.is_team'):
|
if request.user.has_perm('kfet.is_team'):
|
||||||
transfergroup_dict['valid_by__trigramme'] = (
|
transfergroup_dict['valid_by__trigramme'] = (
|
||||||
transfergroup.valid_by
|
transfergroup.valid_by and
|
||||||
and transfergroup.valid_by.trigramme
|
transfergroup.valid_by.trigramme or
|
||||||
or None)
|
None)
|
||||||
|
|
||||||
for transfer in transfergroup.filtered_transfers:
|
for transfer in transfergroup.filtered_transfers:
|
||||||
transfer_dict = {
|
transfer_dict = {
|
||||||
|
@ -1451,9 +1459,9 @@ def history_json(request):
|
||||||
}
|
}
|
||||||
if request.user.has_perm('kfet.is_team'):
|
if request.user.has_perm('kfet.is_team'):
|
||||||
transfer_dict['canceled_by__trigramme'] = (
|
transfer_dict['canceled_by__trigramme'] = (
|
||||||
transfer.canceled_by
|
transfer.canceled_by and
|
||||||
and transfer.canceled_by.trigramme
|
transfer.canceled_by.trigramme or
|
||||||
or None)
|
None)
|
||||||
transfergroup_dict['opes'].append(transfer_dict)
|
transfergroup_dict['opes'].append(transfer_dict)
|
||||||
opegroups_list.append(transfergroup_dict)
|
opegroups_list.append(transfergroup_dict)
|
||||||
|
|
||||||
|
@ -1527,20 +1535,24 @@ def transfers_create(request):
|
||||||
return render(request, 'kfet/transfers_create.html',
|
return render(request, 'kfet/transfers_create.html',
|
||||||
{ 'transfer_formset': transfer_formset })
|
{ 'transfer_formset': transfer_formset })
|
||||||
|
|
||||||
|
|
||||||
@teamkfet_required
|
@teamkfet_required
|
||||||
def perform_transfers(request):
|
def perform_transfers(request):
|
||||||
data = { 'errors': {}, 'transfers': [], 'transfergroup': 0 }
|
data = {'errors': {}, 'transfers': [], 'transfergroup': 0}
|
||||||
|
|
||||||
# Checking transfer_formset
|
# Checking transfer_formset
|
||||||
transfer_formset = TransferFormSet(request.POST)
|
transfer_formset = TransferFormSet(request.POST)
|
||||||
if not transfer_formset.is_valid():
|
if not transfer_formset.is_valid():
|
||||||
return JsonResponse({ 'errors': list(transfer_formset.errors)}, status=400)
|
return JsonResponse({'errors': list(transfer_formset.errors)},
|
||||||
|
status=400)
|
||||||
|
|
||||||
transfers = transfer_formset.save(commit = False)
|
transfers = transfer_formset.save(commit=False)
|
||||||
|
|
||||||
# Initializing vars
|
# Initializing vars
|
||||||
required_perms = set(['kfet.add_transfer']) # Required perms to perform all transfers
|
# Required perms to perform all transfers
|
||||||
to_accounts_balances = defaultdict(lambda:0) # For balances of accounts
|
required_perms = set(['kfet.add_transfer'])
|
||||||
|
# For balances of accounts
|
||||||
|
to_accounts_balances = defaultdict(lambda: 0)
|
||||||
|
|
||||||
for transfer in transfers:
|
for transfer in transfers:
|
||||||
to_accounts_balances[transfer.from_acc] -= transfer.amount
|
to_accounts_balances[transfer.from_acc] -= transfer.amount
|
||||||
|
@ -1552,7 +1564,7 @@ def perform_transfers(request):
|
||||||
# Checking if ok on all accounts
|
# Checking if ok on all accounts
|
||||||
for account in to_accounts_balances:
|
for account in to_accounts_balances:
|
||||||
(perms, stop) = account.perms_to_perform_operation(
|
(perms, stop) = account.perms_to_perform_operation(
|
||||||
amount = to_accounts_balances[account])
|
amount=to_accounts_balances[account])
|
||||||
required_perms |= perms
|
required_perms |= perms
|
||||||
stop_all = stop_all or stop
|
stop_all = stop_all or stop
|
||||||
if stop:
|
if stop:
|
||||||
|
@ -1578,7 +1590,7 @@ def perform_transfers(request):
|
||||||
# Updating balances accounts
|
# Updating balances accounts
|
||||||
for account in to_accounts_balances:
|
for account in to_accounts_balances:
|
||||||
Account.objects.filter(pk=account.pk).update(
|
Account.objects.filter(pk=account.pk).update(
|
||||||
balance = F('balance') + to_accounts_balances[account])
|
balance=F('balance') + to_accounts_balances[account])
|
||||||
account.refresh_from_db()
|
account.refresh_from_db()
|
||||||
if account.balance < 0:
|
if account.balance < 0:
|
||||||
if hasattr(account, 'negative'):
|
if hasattr(account, 'negative'):
|
||||||
|
@ -1587,10 +1599,10 @@ def perform_transfers(request):
|
||||||
account.negative.save()
|
account.negative.save()
|
||||||
else:
|
else:
|
||||||
negative = AccountNegative(
|
negative = AccountNegative(
|
||||||
account = account, start = timezone.now())
|
account=account, start=timezone.now())
|
||||||
negative.save()
|
negative.save()
|
||||||
elif (hasattr(account, 'negative')
|
elif (hasattr(account, 'negative') and
|
||||||
and not account.negative.balance_offset):
|
not account.negative.balance_offset):
|
||||||
account.negative.delete()
|
account.negative.delete()
|
||||||
|
|
||||||
# Saving transfer group
|
# Saving transfer group
|
||||||
|
@ -1611,8 +1623,8 @@ def perform_transfers(request):
|
||||||
'id': transfergroup.pk,
|
'id': transfergroup.pk,
|
||||||
'at': transfergroup.at,
|
'at': transfergroup.at,
|
||||||
'comment': transfergroup.comment,
|
'comment': transfergroup.comment,
|
||||||
'valid_by__trigramme': ( transfergroup.valid_by and
|
'valid_by__trigramme': (transfergroup.valid_by and
|
||||||
transfergroup.valid_by.trigramme or None),
|
transfergroup.valid_by.trigramme or None),
|
||||||
'opes': [],
|
'opes': [],
|
||||||
}]
|
}]
|
||||||
for transfer in transfers:
|
for transfer in transfers:
|
||||||
|
|
Loading…
Add table
Reference in a new issue