//This file contains all common functionality for the application
$(document).ready( function(){
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
if(settings.url.indexOf('http') === -1){
settings.url = base_path + settings.url;
}
}
});
update_font_size();
if( $('#status_span').length ){
var status = $('#status_span').attr('data-status');
if( status === '1'){
toastr.success($('#status_span').attr('data-msg'));
} else if ( status === '0'){
toastr.error($('#status_span').attr('data-msg'));
}
}
//Default setting for select2
$.fn.select2.defaults.set("minimumResultsForSearch", 6);
if($('html').attr('dir') == 'rtl'){
$.fn.select2.defaults.set("dir", "rtl");
}
$.fn.datepicker.defaults.todayHighlight = true;
//Toastr setting
toastr.options.preventDuplicates = true;
//Play notification sound on success, error and warning
toastr.options.onShown = function() {
if($(this).hasClass('toast-success')){
var audio = $("#success-audio")[0];
if(audio !== undefined){
audio.play();
}
} else if($(this).hasClass('toast-error')){
var audio = $("#error-audio")[0];
if(audio !== undefined){
audio.play();
}
} else if($(this).hasClass('toast-warning')){
var audio = $("#warning-audio")[0];
if(audio !== undefined){
audio.play();
}
}
}
//Default setting for jQuey validator
jQuery.validator.setDefaults({
errorPlacement: function(error, element) {
if( element.hasClass('select2') && element.parent().hasClass('input-group')){
error.insertAfter(element.parent());
} else if(element.hasClass('select2')){
error.insertAfter( element.next('span.select2-container') );
} else if(element.parent().hasClass('input-group')){
error.insertAfter(element.parent());
} else if(element.parent().hasClass('multi-input')){
error.insertAfter(element.closest('.multi-input'));
} else {
error.insertAfter(element);
}
},
invalidHandler: function() {
toastr.error(LANG.some_error_in_input_field);
}
});
jQuery.validator.addMethod("max-value", function(value, element, param) {
return this.optional(element) || !(param < __number_uf(value));
}, function(params, element) {
return $(element).data('msg-max-value');
});
jQuery.validator.addMethod("abs_digit", function(value, element) {
return this.optional(element) || Number.isInteger(Math.abs(__number_uf(value)));
});
//Set global currency to be used in the application
__currency_symbol = $('input#__symbol').val();
__currency_thousand_separator = $('input#__thousand').val();
__currency_decimal_separator = $('input#__decimal').val();
__currency_symbol_placement = $('input#__symbol_placement').val();
if($('input#__precision').length > 0){
__currency_precision = $('input#__precision').val();
} else {
__currency_precision = 3;
}
//Set page level currency to be used for some pages. (Purchase page)
if($('input#p_symbol').length > 0){
__p_currency_symbol = $('input#p_symbol').val();
__p_currency_thousand_separator = $('input#p_thousand').val();
__p_currency_decimal_separator = $('input#p_decimal').val();
}
__currency_convert_recursively($(document), $('input#p_symbol').length);
//Datables
jQuery.extend( $.fn.dataTable.defaults, {
dom:'<"row margin-bottom-12"<"col-sm-12"<"pull-left"l><"pull-right margin-left-10"B><"pull-right"fr>>>tip',
buttons: [
{
extend: 'collection',
text: ' ' + LANG.action ,
className: 'btn-info',
init: function(api, node, config) {
$(node).removeClass('btn-default')
},
buttons: [
{
extend: 'copy',
text: ' ' + LANG.copy,
className:'bg-info',
exportOptions: {
columns: ':visible'
},
footer: true
},
{
extend: 'csv',
text: ' '+ LANG.export_to_csv,
className:'bg-info',
exportOptions: {
columns: ':visible'
},
footer: true
},
{
extend: 'excel',
text: ' '+ LANG.export_to_excel,
className:'bg-info',
exportOptions: {
columns: ':visible'
},
footer: true
},
{
extend: 'pdf',
text: ' ' + LANG.export_to_pdf,
className:'bg-info',
exportOptions: {
columns: ':visible'
},
footer: true
},
{
extend: 'print',
text: ' '+ LANG.print,
className:'bg-info',
exportOptions: {
columns: ':not(.notForPrint)',
stripHtml: true,
},
footer: true
},
{
extend: 'colvis',
text: ' '+ LANG.col_vis,
className:'bg-info',
},
]
}
],
aLengthMenu: [
[25, 50, 100, 200, -1],
[25, 50, 100, 200, LANG.all]
],
iDisplayLength: 25,
language: {
"search": LANG.search + ":",
"lengthMenu": LANG.show + " _MENU_ "+LANG.entries,
"emptyTable": LANG.table_emptyTable,
"info": LANG.table_info,
"infoEmpty": LANG.table_infoEmpty,
"loadingRecords": LANG.table_loadingRecords,
"processing": LANG.table_processing,
"zeroRecords":LANG.table_zeroRecords,
"paginate": {
"first": LANG.first,
"last":LANG.last,
"next": LANG.next,
"previous": LANG.previous,
},
}
} );
if($('input#iraqi_selling_price_adjustment').length > 0){
iraqi_selling_price_adjustment = true;
} else {
iraqi_selling_price_adjustment = false;
}
//Input number
$(document).on('click', '.input-number .quantity-up, .input-number .quantity-down', function(){
var input = $(this).closest('.input-number').find('input');
var qty = __read_number(input);
var step = 1;
if(input.data('step')){
step = input.data('step');
}
var min = parseFloat(input.data('min'));
var max = parseFloat(input.data('max'));
if($(this).hasClass('quantity-up')){
//if max reached return false
if(typeof max != 'undefined' && qty + step > max){
return false;
}
__write_number(input, qty + step,false,0);
input.change();
} else if($(this).hasClass('quantity-down')){
//if max reached return false
if(typeof min != 'undefined' && qty - step < min){
return false;
}
__write_number(input, qty - step,false,0);
input.change();
}
});
$("div.pos-tab-menu>div.list-group>a").click(function(e) {
e.preventDefault();
$(this).siblings('a.active').removeClass("active");
$(this).addClass("active");
var index = $(this).index();
$("div.pos-tab>div.pos-tab-content").removeClass("active");
$("div.pos-tab>div.pos-tab-content").eq(index).addClass("active");
});
});
//Default settings for daterangePicker
var ranges = {};
ranges[LANG.today] = [moment(), moment()];
ranges[LANG.yesterday] = [moment().subtract(1, 'days'), moment().subtract(1, 'days')];
ranges[LANG.last_7_days] = [moment().subtract(6, 'days'), moment()];
ranges[LANG.last_30_days] = [moment().subtract(29, 'days'), moment()];
ranges[LANG.this_month] = [moment().startOf('month'), moment().endOf('month')];
ranges[LANG.last_month] = [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')];
ranges[LANG.this_financial_year] = [financial_year.start, financial_year.end];
var dateRangeSettings = {
ranges: ranges,
startDate: moment().year(2017).month(0).date(1),
endDate: moment(),
locale: {
cancelLabel: LANG.clear,
applyLabel: LANG.apply,
customRangeLabel: LANG.custom_range,
format: moment_date_format,
toLabel: "~",
}
};
//Check for number string in input field, if data-decimal is 0 then don't allow decimal symbol
$(document).on('keypress', 'input.input_number', function(event){
var is_decimal = $(this).data('decimal');
if(is_decimal == 0){
if(__currency_decimal_separator == '.'){
var regex = new RegExp(/^[0-9,-]+$/);
} else {
var regex = new RegExp(/^[0-9.-]+$/);
}
} else {
var regex = new RegExp(/^[0-9.,-]+$/);
}
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
event.preventDefault();
return false;
}
});
//Select all input values on click
$(document).on('click', 'input, textarea', function(event){
$(this).select();
});
$(document).on('click', '.toggle-font-size', function(event){
localStorage.setItem("upos_font_size", $(this).data('size'));
update_font_size();
});
$(document).on('click', '.sidebar-toggle', function(){
var sidebar_collapse = localStorage.getItem("upos_sidebar_collapse");
if($('body').hasClass('sidebar-collapse')){
localStorage.setItem("upos_sidebar_collapse", 'false');
} else {
localStorage.setItem("upos_sidebar_collapse", 'true');
}
});
//Ask for confirmation for links
$(document).on('click', 'a.link_confirmation', function(e){
e.preventDefault();
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
window.location.href = $(this).attr('href');
}
});
});
//Change max quantity rule if lot number changes
$('table#stock_adjustment_product_table tbody').on('change', 'select.lot_number', function(){
var qty_element = $(this).closest('tr').find('input.product_quantity');
if($(this).val()){
var lot_qty = $('option:selected', $(this)).data('qty_available');
var max_err_msg = $('option:selected', $(this)).data('msg-max');
qty_element.attr( "data-rule-max-value", lot_qty);
qty_element.attr( "data-msg-max-value",max_err_msg );
qty_element.rules( "add", {
'max-value': lot_qty,
messages: {
'max-value': max_err_msg,
}
});
} else {
var default_qty = qty_element.data('qty_available');
var default_err_msg = qty_element.data('msg_max_default');
qty_element.attr( "data-rule-max-value", default_qty);
qty_element.attr( "data-msg-max-value", default_err_msg );
qty_element.rules( "add", {
'max-value': default_qty,
messages: {
'max-value': default_err_msg,
}
});
}
qty_element.trigger('change');
});