Affichage articles dans K-Psul

- Ajout de la liste des articles dans K-Psul
- Synchro des stocks de cette liste avec les autres instances de K-Psul

- Utilisation des attributs "data-..." pour stocker les id des articles,
  groupes d'opérations et opérations dans K-Psul
- Correction de la vue kpsul_cancel_operations sur le calcul des
  nouvelles balances de caisses
- Même vue : multiples requêtes dans la récupération des nouveaux
  montants de groupes d'opérations remplacées par 1 seule requête pour
  le websocket
- Même vue : ajout des données de nouvelles balances de caisses pour le
  websocket
This commit is contained in:
Aurélien Delobelle 2016-08-14 23:37:05 +02:00
parent 7c2a18bb5d
commit 55fd10f9d4
3 changed files with 71 additions and 49 deletions

View file

@ -277,39 +277,31 @@ $(document).ready(function() {
});
// -----
// Articles data management
// Articles data
// -----
var articles_data = {}
var articles_container = $('#articles_data tbody');
var articles_new_html = '<tr><td class="article_name"></td><td class="article_category_name"></td><td class="article_price"></td><td class="article_stock"></td></tr>';
var article_default_html = '<tr><td class="name"></td><td class="category__name"></td><td class="price"></td><td class="stock"></td></tr>';
function addArticle(article) {
var article_new = $(articles_new_html);
article_new.filter('tr').attr('id', 'article-' + article['id'])
var article_html = $(article_default_html);
article_html.attr('data-article', article['id'])
for (var elem in article) {
article_new.filter('.article_'+elem).text(article[elem])
article_html.find('.'+elem).text(article[elem])
}
articles_container.append(article_new);
articles_container.append(article_html);
}
function storeArticlesData(data) {
if (data['articles']['new']) {
for (var article in data['articles']['new']) {
addArticle(article);
}
}
}
function retrieveArticlesData() {
function getArticlesData() {
$.ajax({
dataType: "json",
url : "",
url : "{% url 'kfet.kpsul.articles_data' %}",
method : "GET",
data : { 'articles' : articles_data },
})
.done(function(data) {
storeArticlesData(data);
for (var i=0; i<data['articles'].length; i++) {
addArticle(data['articles'][i]);
}
});
}
@ -335,8 +327,7 @@ $(document).ready(function() {
// Préparation ajout groupe d'opés à l'historique
var opegroup_html = $(history_operationgroup_html);
opegroup_html
.attr('id', 'opegroup-'+opegroup['id']);
opegroup_html.attr('data-opegroup', opegroup['id']);
opegroup_html.find('.general').html(
opegroup['at']
+' '+opegroup['on_acc__trigramme']
@ -351,7 +342,7 @@ $(document).ready(function() {
ope_html.addClass('canceled')
}
ope_html
.attr('id', 'ope-'+ope['id'])
.attr('data-ope', ope['id'])
.text(getTextOpe(ope));
opegroup_html.append(ope_html);
}
@ -366,19 +357,19 @@ $(document).ready(function() {
method : "GET",
})
.done(function(data) {
for (var opegroup_id in data['opegroups']) {
addOpeGroup(data['opegroups'][opegroup_id]);
for (var opegroup_id in data) {
addOpeGroup(data[opegroup_id]);
}
});
}
function cancelOpeGroup(opegroup) {
var opegroup_html = history_container.find('#opegroup-'+opegroup['id']);
var opegroup_html = history_container.find('[data-opegroup='+opegroup['id']+']');
opegroup_html.find('.amount').text(opegroup['amount']);
}
function cancelOpe(ope) {
var ope_html = history_container.find('#ope-'+ope['id']);
var ope_html = history_container.find('[data-ope='+ope['id']+']');
ope_html.addClass('canceled');
}
@ -392,6 +383,7 @@ $(document).ready(function() {
data['opegroups'] = data['opegroups'] || [];
data['opes'] = data['opes'] || [];
data['checkouts'] = data['checkouts'] || [];
data['articles'] = data['articles'] || [];
for (var i=0; i<data['opegroups'].length; i++) {
if (data['opegroups'][i]['add']) {
@ -411,6 +403,11 @@ $(document).ready(function() {
displayCheckoutData();
}
}
for (var i=0; i<data['articles'].length; i++) {
article = data['articles'][i];
articles_container.find('[data-article='+article['id']+'] .stock')
.text(article['stock']);
}
}
// -----
@ -419,6 +416,7 @@ $(document).ready(function() {
resetAccountData();
resetCheckoutData();
getHistory();
getArticlesData();
});
</script>

View file

@ -105,4 +105,6 @@ urlpatterns = [
name = 'kfet.kpsul.cancel_operations'),
url('^k-psul/history$', views.kpsul_history,
name = 'kfet.kpsul.history'),
url('^k-psul/articles_data', views.kpsul_articles_data,
name = 'kfet.kpsul.articles_data')
]

View file

@ -453,22 +453,6 @@ def kpsul_checkout_data(request):
raise http404
return JsonResponse(data)
@permission_required('kfet.is_team')
def kpsul_articles_data(request):
articles_old = request.GET.get('articles', [])
data = { 'articles' : {'new': [], 'deleted': [], 'updated': []} }
articles = (Article.objects
.annotate(category_name=F('category__name'))
.values('id', 'name', 'price', 'stock', 'category_name')
.select_related('category')
.filter(is_sold=True)
)
for article in articles:
if article['id'] not in articles_old['id']:
pass
return JsonResponse(data)
def get_missing_perms(required_perms, user):
missing_perms_codenames = [ (perm.split('.'))[1]
for perm in required_perms if not user.has_perm(perm)]
@ -628,12 +612,21 @@ def kpsul_perform_operations(request):
'canceled_by__trigramme': None, 'canceled_at': None,
}
websocket_data['opegroups'][0]['opes'].append(ope_data)
# Need refresh from db cause we used update on queryset
operationgroup.checkout.refresh_from_db()
websocket_data['checkouts'] = [{
'id': operationgroup.checkout.pk,
'balance': operationgroup.checkout.balance,
}]
print(operationgroup.checkout.balance)
websocket_data['articles'] = []
# Need refresh from db cause we used update on querysets
articles_pk = [ article.pk for article in to_articles_stocks]
articles = Article.objects.values('id', 'stock').filter(pk__in=articles_pk)
for article in articles:
websocket_data['articles'].append({
'id': article['id'],
'stock': article['stock']
})
consumers.KPsul.group_send('kfet.kpsul', websocket_data)
return JsonResponse(data)
@ -691,7 +684,7 @@ def kpsul_cancel_operations(request):
if ope.group.on_acc.is_cash:
to_checkouts_balances[ope.group.on_acc] -= - ope.amount
else:
to_checkouts_balances[ope.group.on_acc] -= ope.amount
to_checkouts_balances[ope.group.checkout] -= ope.amount
# Pour les stocks d'articles
if ope.article and ope.article_nb:
to_articles_stocks[ope.article] += ope.article_nb
@ -739,12 +732,16 @@ def kpsul_cancel_operations(request):
stock = F('stock') + to_articles_stocks[article])
# Websocket data
websocket_data = { 'opegroups': [], 'opes': [] }
for opegroup in to_groups_amounts:
websocket_data = { 'opegroups': [], 'opes': [], 'checkouts': [], 'articles': [] }
# Need refresh from db cause we used update on querysets
opegroups_pk = [ opegroup.pk for opegroup in to_groups_amounts ]
opegroups = (OperationGroup.objects
.values('id','amount').filter(pk__in=opegroups_pk))
for opegroup in opegroups:
websocket_data['opegroups'].append({
'cancellation': True,
'id': opegroup.pk,
'amount': OperationGroup.objects.get(pk=opegroup.pk).amount,
'id': opegroup['id'],
'amount': opegroup['amount'],
})
for ope in opes:
websocket_data['opes'].append({
@ -753,6 +750,21 @@ def kpsul_cancel_operations(request):
'canceled_by__trigramme': canceled_by.trigramme,
'canceled_at': canceled_at,
})
# Need refresh from db cause we used update on querysets
checkouts_pk = [ checkout.pk for checkout in to_checkouts_balances]
checkouts = (Checkout.objects
.values('id', 'balance').filter(pk__in=checkouts_pk))
for checkout in checkouts:
websocket_data['checkouts'].append({
'id': checkout['id'],
'balance': checkout['balance']})
# Need refresh from db cause we used update on querysets
articles_pk = [ article.pk for articles in to_articles_stocks]
articles = Article.objects.values('id', 'stock').filter(pk__in=articles_pk)
for article in articles:
websocket_data['articles'].append({
'id': article['id'],
'stock': article['stock']})
consumers.KPsul.group_send('kfet.kpsul', websocket_data)
data['canceled'] = opes
@ -779,4 +791,14 @@ def kpsul_history(request):
.filter(group__in=opegroups.keys()))
for ope in opes:
opegroups[ope['group_id']]['opes'].append(ope)
return JsonResponse({ 'opegroups': opegroups })
return JsonResponse(opegroups)
@permission_required('kfet.is_team')
def kpsul_articles_data(request):
articles = (
Article.objects
.values('id', 'name', 'price', 'stock', 'category_id', 'category__name')
.filter(is_sold=True))
print(vars(articles))
print(type(articles))
return JsonResponse({ 'articles': list(articles) })