gruene-seele/public/js/iq-promotion-cart.js
2022-04-14 13:21:17 +02:00

137 lines
No EOL
4.6 KiB
JavaScript

var IqPromotionCart = {
table: "#datatables-promotion-list",
btn_add: '.add-product-promotion',
btn_remove: '.remove-product-promotion',
input_event: '.input-event-promotion-onchange',
check_event: '.check-event-promotion-onchange',
url: null,
action: null,
cart_holder: '#holder_html_view_cart',
init: function () {
var _self = this;
_self.url = $(_self.table).data('url');
_self.action = $(_self.table).data('action');
_self.initElements();
return _self;
},
initElements: function (){
var _self = this;
$(_self.table).find(_self.btn_add).on('click', function(){
_self.add_product($(this))
});
$(_self.table).find(_self.btn_remove).on('click', function(){
_self.remove_product($(this))
});
$(_self.table).find(_self.input_event).off('change').on('change', function(){
_self.update_input_table($(this));
});
$(_self.table).find(_self.check_event).off('change').on('change', function(){
_self.update_input_table($(this));
});
_self.update_poduct_price();
},
add_product: function (_obj){
var _self = this;
var input = $(_self.table).find('input#product_qty_'+_obj.data('product-id'));
var qty = parseInt(input.val()) + 1;
qty = _self.checkNumber(qty);
input.val(qty);
_self.update_cart();
},
remove_product: function (_obj){
var _self = this;
var input = $(_self.table).find('input#product_qty_'+_obj.data('product-id'));
var qty = parseInt(input.val()) - 1;
if(qty < 0){
qty = 0;
}
input.val(qty);
_self.update_cart();
},
update_input_table: function (_obj){
var _self = this;
var qty = parseInt(_obj.val());
qty = _self.checkNumber(qty);
_obj.val(qty);
_self.update_cart();
},
checkNumber : function(number){
if(number < 0 || isNaN(number)){
return 0;
}
if(number >= 100){
return 100;
}
return number;
},
update_cart: function (){
var _self = this;
var data = {};
var tempData = [];
$(_self.table).find(_self.input_event).each(function(){
//push, is checked
if($(_self.table).find('#product_check_'+$(this).data('product-id')).is(':checked')){
tempData.push({product_id: $(this).data('product-id'), qty: $(this).val()});
}
});
data.action = $(_self.table).data('action');
data.user_promotion_id = $(_self.table).data('user_promotion_id');
data.products = tempData;
_self.performRequest(data)
.done(_self.refreshItemsAndView);
_self.update_poduct_price();
},
update_poduct_price: function(){
//console.log("s");
var _self = this;
$('.calculate_product_qty_price_total').each(function(){
var admin_product_id = $(this).data('admin_product_id');
var price = $(this).data('price');
var total = 0;
if($('#product_check_' + admin_product_id).is(':checked')){
var qty = _self.checkNumber($(_self.table).find('#product_qty_' + admin_product_id).val());;
var total = price*qty;
}
$(this).html(total.toFixed(2).replace('.', ','))
});
},
refreshItemsAndView: function (data){
var _self = IqPromotionCart;
//console.log(data.html_cart);
$(_self.cart_holder).html(data.html_cart);
},
performRequest : function(data) {
var _self = this;
var url = _self.url,
contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
// console.log(data);
// console.log(url);
return $.ajax({
url: url,
data: data,
type: "POST",
dataType: "json",
cache: false,
contentType: contentType,
encode: true,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
.done(function (data) {
// console.log('performRequest');
//console.log(data);
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
console.log(jqXHR.responseText);
console.log(textStatus);
console.log(errorThrown);
console.log("Sorry, there was a problem!");
});
}
};