diff --git a/kfet/static/kfet/css/kpsul.css b/kfet/static/kfet/css/kpsul.css index 6ae9ebc4..1616ce3e 100644 --- a/kfet/static/kfet/css/kpsul.css +++ b/kfet/static/kfet/css/kpsul.css @@ -98,6 +98,10 @@ input[type=number]::-webkit-outer-spin-button { font-weight:bold; } +#account_data #account-is_cof { + font-weight:bold; +} + #account-name { font-weight:bold; } diff --git a/kfet/static/kfet/js/account.js b/kfet/static/kfet/js/account.js new file mode 100644 index 00000000..4022f094 --- /dev/null +++ b/kfet/static/kfet/js/account.js @@ -0,0 +1,131 @@ +var Account = Backbone.Model.extend({ + + defaults: { + 'id': 0, + 'name': '', + 'email': '', + 'is_cof': '', + 'promo': '', + 'balance': '', + 'is_frozen': false, + 'departement': '', + 'nickname': '', + }, + + url: function () { + return django_urls["kfet.account.read.json"](this.get("trigramme")) + }, + + reset: function () { + // On ne veut pas trigger un `change` deux fois + this.clear({ silent: true }).set(this.defaults) + }, + + parse: function (resp, options) { + if (_.has(resp, 'balance')) { + return _.extend(resp, { 'balance': parseFloat(resp.balance) }); + } else { + return resp; + } + }, + + view: function () { + view_class = this.get("trigramme") == 'LIQ' ? LIQView : AccountView; + return new view_class({ model: this }) + }, + + render: function () { + this.view().render(); + } +}) + +var AccountView = Backbone.View.extend({ + + el: '#account', + input: '#id_trigramme', + buttons: '.buttons', + + props: _.keys(Account.prototype.defaults), + + get: function (property) { + /* If the function this.get_ is defined, + we call it ; else we call this.model.. */ + getter_name = 'get_' + property; + if (_.functions(this).includes(getter_name)) + return this[getter_name]() + else + return this.model.get(property) + }, + + get_is_cof: function () { + return this.model.get("is_cof") ? 'COF' : 'Non-COF'; + }, + + get_balance: function () { + return amountToUKF(this.model.get("balance"), this.model.get("is_COF"), true) + }, + + attr_data_balance: function () { + if (this.model.id == 0) { + return ''; + } else if (this.model.get("balance") < 0) { + return 'neg'; + } else if (this.model.get("balance") <= 5) { + return 'low'; + } else { + return 'ok'; + } + }, + + get_buttons: function () { + var buttons = ''; + if (this.model.id != 0) { + var url = django_urls["kfet.account.read"](this.model.get("trigramme")) + buttons += ``; + } else { + var trigramme = this.$(this.input).val().toUpperCase(); + if (isValidTrigramme(trigramme)) { + trigramme = encodeURIComponent(trigramme); + var url_base = django_urls["kfet.account.create"](); + var url = `${url_base}?trigramme=${trigramme}`; + buttons += ``; + } else { + buttons += ''; + } + } + + return buttons + }, + + render: function () { + for (let prop of this.props) { + var selector = "#account-" + prop; + this.$(selector).text(this.get(prop)); + } + + this.$el.attr("data-balance", this.attr_data_balance()); + this.$(this.buttons).html(this.get_buttons()); + }, + + reset: function () { + for (let prop of this.props) { + console.log(prop) + var selector = "#account-" + prop; + this.$(selector).text(''); + } + + this.$el.attr("data-balance", ''); + this.$(this.buttons).html(this.get_buttons()); + }, +}) + +var LIQView = AccountView.extend({ + get_balance: function () { + return ""; + }, + + attr_data_balance: function () { + return 'ok'; + } +}) + diff --git a/kfet/templates/kfet/kpsul.html b/kfet/templates/kfet/kpsul.html index ff24fcb4..2912ad4b 100644 --- a/kfet/templates/kfet/kpsul.html +++ b/kfet/templates/kfet/kpsul.html @@ -6,6 +6,10 @@ + + + + {% endblock %} {% block title %}K-Psul{% endblock %} @@ -210,6 +214,7 @@ $(document).ready(function() { // ----- // Initializing + var account = new Account() var account_container = $('#account'); var triInput = $('#id_trigramme'); var account_data = {}; @@ -226,56 +231,6 @@ $(document).ready(function() { 'nickname' : '', }; - // Display data - function displayAccountData() { - var balance = account_data['trigramme'] != 'LIQ' ? account_data['balance'] : ''; - if (balance != '') - balance = amountToUKF(account_data['balance'], account_data['is_cof'], true); - var is_cof = account_data['trigramme'] ? account_data['is_cof'] : ''; - if (is_cof !== '') - is_cof = is_cof ? 'COF' : 'Non-COF'; - for (var elem in account_data) { - if (elem == 'balance') { - $('#account-balance').text(balance); - } else if (elem == 'is_cof') { - $('#account-is_cof').html(is_cof); - } else { - $('#account-'+elem).text(account_data[elem]); - } - } - if (account_data['is_frozen']) { - $('#account').attr('data-balance', 'frozen'); - } else if (account_data['balance'] >= 5 || account_data['trigramme'] == 'LIQ') { - $('#account').attr('data-balance', 'ok'); - } else if (account_data['balance'] == '') { - $('#account').attr('data-balance', ''); - } else if (account_data['balance'] >= 0) { - $('#account').attr('data-balance', 'low'); - } else { - $('#account').attr('data-balance', 'neg'); - } - - var buttons = ''; - if (account_data['id'] != 0) { - var url_base = '{% url 'kfet.account.read' 'LIQ' %}'; - url_base = url_base.substr(0, url_base.length - 3); - trigramme = encodeURIComponent(account_data['trigramme']) ; - buttons += ''; - } - if (account_data['id'] == 0) { - var trigramme = triInput.val().toUpperCase(); - if (isValidTrigramme(trigramme)) { - var url_base = '{% url 'kfet.account.create' %}' - trigramme = encodeURIComponent(trigramme); - buttons += ''; - } else { - var url_base = '{% url 'kfet.account' %}' - buttons += ''; - } - } - account_container.find('.buttons').html(buttons); - } - // Search for an account function searchAccount() { var content = '
' ; @@ -326,7 +281,8 @@ $(document).ready(function() { function resetAccountData() { account_data = account_data_default; $('#id_on_acc').val(0); - displayAccountData(); + account.reset(); + account.view().reset() } function resetAccount() { @@ -335,28 +291,26 @@ $(document).ready(function() { } // Store data - function storeAccountData(data) { - account_data = $.extend({}, account_data_default, data); - account_data['balance'] = parseFloat(account_data['balance']); - $('#id_on_acc').val(account_data['id']); - displayAccountData(); + function storeAccountData() { + account_data = account.toJSON(); + $('#id_on_acc').val(account.id); + account.render(); } // Retrieve via ajax function retrieveAccountData(tri) { - $.ajax({ - dataType: "json", - url : "{% url 'kfet.account.read.json' %}", - method : "POST", - data : { trigramme: tri }, + account.set({'trigramme': tri}); + account.fetch({ + 'success': function() { + storeAccountData(); + articleSelect.focus(); + updateBasketAmount(); + updateBasketRel(); + }, + 'error': function() { + resetAccountData(); + }, }) - .done(function(data) { - storeAccountData(data); - articleSelect.focus(); - updateBasketAmount(); - updateBasketRel(); - }) - .fail(function() { resetAccountData() }); } // Event listener