<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">var __ = function (label) {
	return Pck.labels[label]||label;
};

var Pck = {
	labels: PckLabels,
	
	init: function () {
		var me = this;
		
		$.ajaxSetup({
			cache: false,
			loader: true,
			beforeSend: function () {
				if( this.loader ) {
					Pck.loader.show();
				}
			},
			complete: function() {
				if( this.loader ) {
					Pck.loader.hide();
				}
				if( this.afterComplete ) {
					this.afterComplete();
				}
			}
		});
		
		window.onpopstate = function (event) {
			if( event.state ) {
				Pck.loadPage(event.state.path);
			}
		};
		
		$("#kt_aside_menu").on('click', '.menu-link', function (e) {
			let menuItem = $(this).closest('.menu-item');
			if( menuItem.hasClass('menu-item-submenu') || menuItem.hasClass('menu-item-parent') ) {
				return;
			}
			
			e.preventDefault();
			
			Pck.selectNav(menuItem);
			Pck.loadPage($(this).attr('href'), $(this).text()+' - '+__('appTitle'));
		});
		
		let params = new URLSearchParams(window.location.search);
		if( params.get('reset_key') ) {
			setTimeout(() =&gt; {
				$('#inputEmail').val(params.get('email'))
			}, 100);
		} else {
			if( location.pathname != "/login.php") {
				Pck.initPage();
			}
		}
	},
	
	loadPage: function (href, title) {
		if( href.indexOf('javascript:')&gt;=0 || href.indexOf('#')&gt;=0 ) {
			return;
		}
		
		if( window.event &amp;&amp; window.event.ctrlKey ) {
			window.open(href, '_blank');
			return;
		}
		
		title = title||__('appTitle');
		history.pushState({path: href, title: title}, title, href);
		
		$.ajax({
			url: href,
			dataType: 'html',
			success: function(htmlContent) {
				$("#kt_content").html(htmlContent);
			}
		});
	},
	selectNav: function (key, subTitle) {
		$('#kt_aside_menu').find('.menu-item-active').removeClass('menu-item-active');
		var title = (typeof key == 'object' ? key : $('.menu-item.kt-'+key+'-menu-item')).addClass('menu-item-active').text();
		$('title').text(title+(subTitle ? ' - '+ subTitle : '') +' - '+__('appTitle'));
	},
	login: function (cls='user') {
		$.ajax({
			url: 'action.php?cls='+cls+'&amp;fn=login',
			method: 'POST',
			data: {
				username: $('#inputUsername').val(),
				password: $('#inputPassword').val(),
			},
			success: function (resp) {
				if( resp.success ) {
					window.location.href = './';
				} else {
					if( resp.code == -8 ) {
						Pck.error(resp.msg);
					} else if( resp.code == -1 ) {
						Pck.error(__('You subscription has been end, please renew!'));
					} else if( resp.code == -2 ) {
						Pck.error(__('You account has been deactivated, contact your administrator!'));
					} else {
						if( $.type(resp) ) {
							Pck.error(resp);
						} else {
							Pck.error(__('Sorry, invalid username or password, please try again.', "Ok, got it!"));
						}
					}
				}
			}
		});
	},
	forgetPass: function () {
		$.ajax({
			url: 'action.php?cls=email&amp;fn=forgetPass',
			method: 'POST',
			data: {
				email: $('#inputEmail').val()
			},
			success: function (resp) {
				if( resp.success ) {
					Pck.success(__("We sent and mail to your email, please check it"));
					$('#form-signin').show();
					$('#form-forget-password').hide();
				} else {
					Pck.error(__('Sorry, invalid email address, please try again.'));
				}
			}
		});
	},
	resetPass: function () {
		if( $('#inputNewPassword').val() != $('#inputConfirmPassword').val() ) {
			Pck.error('Sorry, New Password and Confirm are not match', "Ok, got it!");
			return;
		}
		
		$.ajax({
			url: 'action.php?cls=email&amp;fn=resetPass',
			method: 'POST',
			data: {
				reset_key: $('#reset_key').val(),
				email: $('#inputEmail').val(),
				pass: $('#inputNewPassword').val(),
			},
			success: function (resp) {
				if( resp.success ) {
					Pck.success("Your password has been reseted successfully");
					setTimeout(() =&gt; {
						window.onpopstate = undefined;
						window.location.href = './login.php';
					}, 2000);
				} else {
					Pck.error('Sorry, invalid email address, please try again.', "Ok, got it!");
				}
			}
		});
	},
	logout: function () {
		$.ajax({
			url: 'action.php?fn=logout',
			complete: function () {
				window.onpopstate = undefined;
				window.location.href = './login.php';
			}
		});
	},
	showPassword: function (el) {
		let input = $(el).closest('div.input-group').find('input');
		let isPass = input.attr('type')=='password';
		
		input.attr('type', isPass ? 'text' : 'password');
		
		$(el).removeClass(isPass ? 'fa-eye' : 'fa-eye-slash')
			.addClass(isPass ? 'fa-eye-slash' : 'fa-eye');
	},
	
	loader: {
		show: function () {
			$('.kt_mask_con').show();
		},
		hide: function () {
			$('.kt_mask_con').hide();
		}
	},
	
	success: function (text, btnText, msgOpt) {
		this.msg(text, btnText||__('Ok'), 'success', msgOpt);
	},
	successSave: function () {
		this.success('dataSaved');
	},
	error: function (text, btnText, msgOpt) {
		this.msg(text, btnText||__('Ok, got it!'), 'error', msgOpt);
	},
	errorSave: function () {
		this.error('errorSave')
	},
	warning: function (text, btnText, msgOpt) {
		this.msg(text, btnText||__('Ok, got it!'), 'warning', msgOpt);
	},
	msg: function (text, btnText, icon, msgOpt) {
		swal.fire($.extend({
			text: __(text),
			icon: icon,
			buttonsStyling: false,
			confirmButtonText: __(btnText||'ok'),
			customClass: {
				confirmButton: 'btn font-weight-bold btn-light-primary',
				cancelButton: 'btn btn-light-danger'
			},
		}, msgOpt));
	},
	
	initPage: function (obj, pageType) {
		$('[data-req]').closest('div').find('label').each(function () {
			if( $(this).html().indexOf('*')==-1 ) {
				$(this).html('&lt;span class="text-danger"&gt;'+$(this).html()+' *&lt;/span&gt;')
			}
		});
		
		$('[data-switch=true]').bootstrapSwitch();
		$('.selectpicker').selectpicker();
		$('.select2').select2({
			allowClear: true,
			placeholder: __("Select an option")
		});
		
		Pck.datepicker();
		
		let params = new URLSearchParams(window.location.search);
		if( params.get('_page') ) {
			let page = params.get('_page');
			let menuLink = $("#kt_aside_menu").find('a.menu-link[href="./?_page='+page+'"]');
			if( !menuLink.length ) {
				page = page.replace('form', 'list');
				menuLink = $("#kt_aside_menu").find('a.menu-link[href="./?_page='+page+'"]');
			}
			let selectedMenuItem = menuLink.closest('.menu-item');
			Pck.selectNav(selectedMenuItem);
		}
	},
	validateForm: function (form) {
		let hasWarning = false;
		$('input, select, textarea', form).each(function () {
			if( $(this).attr('data-req') &amp;&amp; !$(this).val() ) {
				Pck.warning($(this).attr('data-req') || __($(this).attr('name')+' is required'));
				hasWarning = true;
				return false;
			}
		});
		
		$('input[type=number]', form).each(function () {
			if( $(this).val() &amp;&amp; $(this).val()&lt;0 ) {
				Pck.warning(__("You can't enter a number in negative '"+$(this).attr('name')+"'"));
				hasWarning = true;
				return false;
			}
		});
		
		return !hasWarning;
	},
	datepicker: function (parent='') {
		$('input[type=date]:not(.input-daterange)', parent||'body').attr('type', 'text').datepicker({
    		weekStart: 1,
			format: "yyyy-mm-dd",
			todayHighlight: true,
			orientation: "bottom auto",
			todayBtn: "linked",
		});
		
		let lastMonth1 = moment().subtract(1, 'month').startOf('month');
		let lastMonth2 = moment().subtract(1, 'month').endOf('month');
		let noDate = moment('1900-01-01');
		
		$('.input-daterange-con', parent||'body').closest('div').daterangepicker({
			buttonClasses: ' btn',
			applyClass: 'btn-primary',
			cancelClass: 'btn-secondary',
			startDate: lastMonth1,
			endDate: lastMonth2,
			ranges: {
				'None': [noDate, noDate],
				'Today': [moment(), moment()],
				'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
				'Last 7 Days': [moment().subtract(6, 'days'), moment()],
				'Last 30 Days': [moment().subtract(29, 'days'), moment()],
				'This Month': [moment().startOf('month'), moment().endOf('month')],
				'Last Month': [lastMonth1, lastMonth2]
			}
		}, function(start, end, label) {
			start = start.isSame(noDate) ? null : start;
			end = end.isSame(noDate) ? null : end;
			$('.input-daterange-con .form-control', parent||'body')
				.val(start&amp;&amp;end ? start.format('YYYY-MM-DD') + ' &lt;=&gt; ' + end.format('YYYY-MM-DD') : '')
				.trigger('change');
		});
	},
	
	getFormData: function (parentEl) {
		var data = {};
		$('input, select, textarea', parentEl).each(function () {
			if( $(this).attr('name') ) {
				data[$(this).attr('name')] = $(this).val();
			}
		});
		return data;
	},
	getDatatableRow: function (datatable, id) {
		var row = null, indx = 0;
		while(true) {
			let item = datatable.row(indx++).data();
			if( !item ) {
				break
			}
			
			if( item.id == id ) {
				row = item;
				break;
			}
		}
		
		return row||{};
	},
	strMatcher: function(strs) {
	    return function findMatches(q, cb) {
	        let matches = [], 
	        	substrRegex = new RegExp(q, 'i');
        	
	        $.each(strs, function(i, str) {
	            if (substrRegex.test(str)) {
	                matches.push(str);
	            }
	        });
	
	        cb(matches);
	    };
	},
	deleteRecord: function (el, cls, msgFn) {
		let row, record_id, uuid;
		if( $.type(el) === 'string' ) {
			record_id = el;
			uuid = [];
			$.each(el.split(','), function (i, rid) {
				row = Pck.getDatatableRow(Pck[cls].datatable, parseInt(rid));
				uuid.push(row.uuid);
			});
			uuid = uuid.join(',');
		} else {
			record_id = parseInt($(el).data('id'));
			row = Pck.getDatatableRow(Pck[cls].datatable, record_id);
			uuid = row.uuid;
		}
		
		let delCallback = function(fn) {
			$.ajax({
				url: 'action.php?cls='+cls+'&amp;fn='+fn,
				method:"GET",
				data: {
					id: record_id,
					uuid: uuid
				},
				success:function(resp) {
					if( resp.success ) {
						Pck[cls].datatable.ajax.reload();
						Pck.successSave();
					} else {
						if( resp.code == -99 ) {
							Pck.error(__("You can't delete, data in used"));
						} else {
							Pck.errorSave();
						}
					}
				}
			});
		};
		
		let buttons = {};
		if( PckUser.is_super_admin==1 ) {
			buttons.remove = {
	            label: '&lt;i class="fa fa-trash"&gt;&lt;/i&gt; '+__('Force Remove'),
	            className: 'btn-danger mr-auto',
	            callback: function () {
					delCallback('remove');
				}
	        };
		}
	        
	    buttons.close = {
            label: '&lt;i class="fa fa-times"&gt;&lt;/i&gt; '+__('Cancel')
        };
	    buttons.delete = {
            label: '&lt;i class="fa fa-check"&gt;&lt;/i&gt; '+__('Delete'),
            className: 'btn-primary',
            callback: function () {
				delCallback('delete');
			}
        };
	    
		bootbox.dialog({
			title: __('Delete Record'),
			message: msgFn(row), 
			centerVertical: true,
			buttons: buttons
		});
	}
}

Pck.DataTable = {
	init: function (obj, columns, addActions=true, extraDatatablOpts={}) {
		$('#kt_dt_'+obj.clsKey).on('preXhr.dt', function (e, settings, data) {
			let filters = Pck.getFormData('.kt-filter-con');
			let hasFilter = false;
			$.each(filters, function (key, val) {
				val = $.isArray(val) ? val.join(',') : val
				if( val ) {
					data[key] = val;
					hasFilter = true;
				}
			});
			
			$('.kt-filter-icon', '#kt_'+obj.clsKey+'_list')
				.addClass(hasFilter?'text-danger':'text-primary')
				.removeClass(hasFilter?'text-primary':'text-danger');
			
			$('.kt-datatable-filter').each(function () {
				let val = $(this).val();
				val = $.isArray(val) ? val.join(',') : val;
				
				if( val ) {
					data[$(this).attr('name')] = val;
				}
			});
			
			Pck[obj.clsKey].datatableParams = data;
		}).on('init.dt', function () {
			$('.kt-filter-icon', '#kt_'+obj.clsKey+'_list').on('click', function () {
				$('.kt-filter-con', '#kt_'+obj.clsKey+'_list').toggle();
			}).trigger('click')
		});
		
		let extraParams = obj.extraParam ? obj.extraParam() : '';
		
		if( addActions ) {
			columns.push({
				data: null, 
				className: "dt-center editor-edit",
				responsivePriority: -1,
				orderable: false,
				width: 120,
				render: function (data, type, row) {
					icons = (row.docs &amp;&amp; row.docs.length ? `&lt;span class="far fa-images kt-image-`+obj.clsKey+` kt-pointer text-primary mr-5" data-id="`+row.id+`" data-toggle="tooltip" title="`+__("View documents")+`"&gt;&lt;/span&gt;` : '')+
							`&lt;span class="far fa-edit kt-edit-`+obj.clsKey+` kt-pointer text-warning" data-id="`+row.id+`" data-toggle="tooltip" title="`+__("Edit this record")+`"&gt;&lt;/span&gt;
							&lt;span class="fas fa-trash kt-delete-`+obj.clsKey+` kt-pointer text-danger mx-5" data-id="`+row.id+`" data-toggle="tooltip" title="`+__("Delete this record")+`"&gt;&lt;/span&gt;`;
					if( typeof addActions === "function" ) {
						return addActions(icons, data, type, row);
					}
					return icons;
				}
			});
		}
		
		obj.datatable = $('#kt_dt_'+obj.clsKey).DataTable($.extend({
			responsive: true,
			searchDelay: 500,
			processing: true,
			serverSide: true,
			ajax: {
				url: 'action.php?cls='+obj.clsKey+'&amp;fn=list'+(Pck.all_data ? '&amp;all_data=1' : '')+extraParams,
				type: 'GET',
			},
			dom: "&lt;'row'&lt;'col-sm-12 col-md-6'l&gt;&lt;'col-sm-12 col-md-6'f&gt;&gt;" +
			        "&lt;'row'&lt;'col-sm-12'tr&gt;&gt;" +
			        "&lt;'row'&lt;'col-sm-12 col-md-5'i&gt;&lt;'col-sm-12 col-md-7'p&gt;&gt;"+
			        "&lt;'clear'&gt;&lt;'row'&lt;'col-sm-12'B&gt;&gt;",
			select: {style: 'multi'},
			buttons: [{
				extend: 'copy',
				text: '&lt;span class="fas fa-copy"&gt;&lt;/span&gt; '+__('Copy to clipboard')
			}, {
				extend: 'excel',
				className: 'btn-success',
				text: '&lt;span class="fas fa-file-excel"&gt;&lt;/span&gt; '+__('Export to excel')
			}, {
				extend: 'pdf',
				className: 'btn-info',
				text: '&lt;span class="fas fa-file-pdf"&gt;&lt;/span&gt; '+__('Export to PDF')
			}, {
				extend: 'print',
				className: 'btn-primary',
				text: '&lt;span class="fas fa-print"&gt;&lt;/span&gt; '+__('Print')
			}, {
	            extend: 'selected',
	            text: '&lt;span class="fas fa-trash"&gt;&lt;/span&gt; '+__('Delete Selected'),
	            className: 'btn-danger',
	            action: function (e, dt, button, config) {
	            	let ids = [];
	            	dt.rows({selected: true}).data().each(function (row) {
						ids.push(row.id);
					});
					
	            	Pck.deleteRecord(ids.join(','), obj.clsKey, function () {
						return __("Do you want to delete these records");
					});
	            }
	        }],
			columns: columns,
			order: [[0, 'desc']],
		}, extraDatatablOpts||{}));
		
		$('#kt_'+obj.clsKey+'_list').on('click', '.kt-invoice-'+obj.clsKey, function() {
			window.open('receipt.php?'+$.param({
				invoice_type: obj.clsKey,
				id: parseInt($(this).data('id'))
			}), '_blank', 'width=900, height=700;');
		});
		
		$('#kt_'+obj.clsKey+'_list').on('click', '.kt-delete-'+obj.clsKey, function() {
			Pck.deleteRecord(this, obj.clsKey, function (row) {
				return __("Do you want to delete this record - "+row.client_name);
			});
		});
		
		$('#kt_'+obj.clsKey+'_list').on('click', '.kt-edit-'+obj.clsKey, function() {
			let record_id = parseInt($(this).data('id'));
			let row = Pck.getDatatableRow(obj.datatable, record_id);
			Pck.loadPage('?_page='+obj.clsKey+'/form&amp;id='+row.id+extraParams, __('Edit')+' - '+__('appTitle'));
		});
		
		$('.kt-addnew-'+obj.clsKey+'-btn').on('click', function () {
			Pck.loadPage('?_page='+obj.clsKey+'/form&amp;id=0'+extraParams, __('Add new')+' - '+__('appTitle'));
		});
		
		$('.kt-reload-'+obj.clsKey+'-btn').on('click', function () {
			obj.datatable.ajax.reload();
		});
		$('input, select, textarea', '#kt_'+obj.clsKey+'_list .kt-filter-con').on('change', function () {
			obj.datatable.ajax.reload();
		});
		
		$('.kt-export-'+obj.clsKey+'-btn').on('click', function () {
			window.open('action.php?cls='+obj.clsKey+'&amp;fn=export&amp;'+$.param(Pck[obj.clsKey].datatableParams));
		});
		
		Pck.UploadDoc.viewDocs(obj.clsKey);
	}
};

Pck.UploadDoc = {
	files: [],
	init: function (id, docs) {
		let me = this;
		me.files = [];
		
		let getFilePath = function (file) {
			if( file &amp;&amp; file.xhr &amp;&amp; file.xhr.responseText ) {
				let json = JSON.parse(file.xhr.responseText);
				if( json &amp;&amp; json.success ) {
					return json.path;
				}
			}
			return null;
		};
		
		$('.dropzone').off('click').on('click', '.dz-preview', function (e) {
			let img = '';
			if( $(this).find('img').length ) {
				img = getFilePath(me.files[parseInt($(this).data('indx'))]) || $(this).find('img').attr('src');
			} else {
				img = ($(this).find('.dz-image')[0].style.backgroundImage||'').replace('url("', '').replace('")', '');
			}
			
			if( $(e.target).hasClass('dz-remove') ) {
				Pck.UploadDoc.removeFile(id, this, img);
				return;
			}
			
			bootbox.dialog({
				message: '&lt;img src="'+img+'" style="max-width:100%;" /&gt;',
				centerVertical: true,
				size: 'extra-large',
				backdrop: true,
				onShow: function(e) {
					$(e.target).find('div.bootbox-body').attr('align', 'center')
				}
			});
		});
		
		let dropZoneId = '#'+id+'_images';
		Pck[id].Dropzone = new Dropzone(dropZoneId, {
            url: "action.php?cls="+id+"&amp;fn=upload&amp;fldr="+$('input[name=fldr_path]').val(),
            paramName: "file", // The name that will be used to transfer the file
            maxFiles: 10,
            maxFilesize: 10, // MB
            addRemoveLinks: true,
            acceptedFiles: "image/*,video/*",
            accept: function(file, done) {
                done();
            },
            init: function() {
				this.on("addedfile", file =&gt; {
					$(file.previewElement).data('indx', me.files.length)
					me.files.push(file);
				});
			},
			
        });
        
        let oldRemoveFileFn = Pck[id].Dropzone.removeFile.bind(Pck[id].Dropzone);
        Pck[id].Dropzone.removeFile = function (file) {
			Pck.UploadDoc.removeFile(id, file.previewElement, getFilePath(file), function () {
				oldRemoveFileFn(file);
			});
		};
        
		$.each(docs, function (i, doc) {
			$(Pck[id].Dropzone.element).append(`
				&lt;div class="dz-preview dz-image-preview" align="center"&gt;
					&lt;div class="dz-image kt-dz-image kt-pointer" style="background-image:url(`+doc+`)"&gt;&lt;/div&gt;
					&lt;a class="dz-remove" href="javascript:void(0);" data-dz-remove=""&gt;Remove file&lt;/a&gt;
				&lt;/div&gt;
			`);
		});
	},
	removeFile: function (cls, el, docPath, callback) {
		bootbox.confirm({
			title: __('Remove File'),
		    message: __('Are you sure you want to delete this file'),
		    centerVertical: true,
			callback: function(result) {
				if( result ) {
					$.ajax({
						url: 'action.php?cls='+cls+'&amp;fn=removeDoc&amp;'+$.param({
							docName: docPath.split('/').pop(),
							fldrPath: $('input[name=fldr_path]').val()
						}),
						method:"DELETE",
						success:function(resp) {
							if( resp.success ) {
								if( callback ) {
									callback();
								}
								
								$(el).closest('.dz-preview').remove();
								
								Pck.successSave();
							} else {
								Pck.errorSave();
							}
						}
					});
				}
			}
		});
	},
	viewDocs: function (cls) {
		$('#kt_'+cls+'_list').on('click', '.kt-image-'+cls, function() {
			let record_id = parseInt($(this).data('id'));
			let row = Pck.getDatatableRow(Pck[cls].datatable, record_id);
			
			let items = [], slides = [];
			$.each(row.docs, function (i, doc) {
				items.push(`
					&lt;div class="carousel-item `+(i?'':'active')+`" style="max-width: 100%; max-height: `+(window.innerHeight-100)+`px" align="center"&gt;
						&lt;img src="`+doc+`" class="d-block" alt="`+doc.split('/').pop()+`" style="max-width:100%; max-height:100%;"/&gt;
					&lt;/div&gt;
				`);
				slides.push('&lt;li data-target="#docs_carousel" data-slide-to="'+i+'" class="'+(i?'':'active')+'"&gt;&lt;/li&gt;');
			});
			
			bootbox.dialog({
				message: `
					&lt;div id="docs_carousel" class="carousel slide" data-interval="false" style=""&gt;
						&lt;ol class="carousel-indicators"&gt;`+slides.join('')+`&lt;/ol&gt;
						&lt;div class="carousel-inner"&gt;
							`+items.join('')+`
						&lt;/div&gt;
						&lt;button class="carousel-control-prev" type="button" data-target="#docs_carousel" data-slide="prev"&gt;
							&lt;span class="carousel-control-prev-icon" aria-hidden="true"&gt;&lt;/span&gt;
							&lt;span class="sr-only"&gt;`+__('Previous')+`&lt;/span&gt;
						&lt;/button&gt;
						&lt;button class="carousel-control-next" type="button" data-target="#docs_carousel" data-slide="next"&gt;
							&lt;span class="carousel-control-next-icon" aria-hidden="true"&gt;&lt;/span&gt;
							&lt;span class="sr-only"&gt;`+__('Next')+`&lt;/span&gt;
						&lt;/button&gt;
					&lt;/div&gt;
				`,
				centerVertical: true,
				size: 'extra-large',
				backdrop: true,
				onShow: function(e) {
					$('#docs_carousel').carousel()
				}
			});
		});
	}
};

$(function () {
	setTimeout(() =&gt; {
		Pck.init();
	}, 10);
})</pre></body></html>