HEX
Server: Apache
System: Linux p3plzcpnl506847.prod.phx3.secureserver.net 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: slfopp7cb1df (5698090)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //proc/self/cwd/pm/plugins/Warehouse/assets/js/packing_lists/add_edit_packing_list_js.php
<script>

	var lastAddedItemKey = null;
	(function($) {
		"use strict";  
		$(document).ready(function () {
			setDatePicker("#date_c, #date_add");
			setDatePicker(".datePickerInput");
			$('input[name="date_manufacture"]').val('');
			$('input[name="expiry_date"]').val('');

			$(".select2").select2();

		});

		/*required clientid,packing_list_name,delivery_note_id*/
		init_ajax_search('items','#item_select.ajax-search',undefined,"<?php echo get_uri("warehouse/wh_commodity_code_search/rate") ?>");
		wh_calculate_total();

	})(jQuery);


	(function($) {
		"use strict";

		/*Add item to preview from the dropdown for invoices estimates*/
		$("body").on('change', 'select[name="item_select"]', function () {
			var itemid = $('select[name="item_select"]').val();

			if (itemid != '') {
				wh_add_item_to_preview(itemid);
			}
		});

		$("body").on('change', 'select.taxes', function () {
			wh_calculate_total();
		});

		$("body").on('change', 'input[name="additional_discount"]', function () {

			var additional_discount = $('input[name="additional_discount"]').val();
			var main_additional_discount = $('input[name="main_additional_discount"]').val();
			if(parseFloat(additional_discount) <= parseFloat(main_additional_discount)){
				wh_calculate_total();
			}else{
				appAlert.warning("<?php echo _l('The_maximum_allowed_additional_discount_is') ?>"+': '+parseFloat(main_additional_discount));
				$('input[name="additional_discount"]').val(parseFloat(main_additional_discount));
			}
		});

		$("body").on('click', '.add_packing_list', function () {
			submit_form(false);
		});

		$('.add_packing_list_send').on('click', function() {
			submit_form(true);
		});

		$("body").on('change', 'input[name="shipping_fee"]', function () {
			wh_calculate_total();
		});

	})(jQuery);


	function wh_add_item_to_preview(id) {
		"use strict";

		requestGetJSON("<?php  echo get_uri('warehouse/get_item_by_id/') ?>" + id +'/'+true).done(function (response) {
			wh_clear_item_preview_values();

			$('.main input[name="commodity_code"]').val(response.itemid);
			$('.main textarea[name="commodity_name"]').val(response.code_description);
			$('.main input[name="unit_price"]').val(response.rate);
			$('.main input[name="unit_name"]').val(response.unit_name);
			$('.main input[name="unit_id"]').val(response.unit_id);
			$('.main input[name="quantity"]').val(1);
			$('.selectpicker').selectpicker('refresh');

			var taxSelectedArray = [];
			if (response.taxname && response.taxrate) {
				taxSelectedArray.push(response.taxname + '|' + response.taxrate);
			}
			if (response.taxname_2 && response.taxrate_2) {
				taxSelectedArray.push(response.taxname_2 + '|' + response.taxrate_2);
			}

			$('.main select.taxes').val(taxSelectedArray).change();
			$('.main input[name="unit"]').val(response.unit_name);


			$(document).trigger({
				type: "item-added-to-preview",
				item: response,
				item_type: 'item',
			});
		});
	}

	function wh_add_item_to_table(data, itemid) {
		"use strict";

		data = typeof (data) == 'undefined' || data == 'undefined' ? wh_get_item_preview_values() : data;

		if ( data.quantity == "" || data.commodity_code == "" ) {
			if(parseFloat(data.quantity) < 0){
			//check_available_quantity
			appAlert.warning("<?php echo _l('please_choose_quantity_more_than_0') ?>");
		}
		return;
	}
	var table_row = '';
	var item_key = lastAddedItemKey ? lastAddedItemKey += 1 : $("body").find('.invoice-items-table tbody .item').length + 1;
	lastAddedItemKey = item_key;
	$("body").append('<div class="dt-loader"></div>');
	wh_get_item_row_template('newitems[' + item_key + ']',data.commodity_name, data.quantity, data.unit_name,data.unit_price, data.taxname, data.commodity_code, data.unit_id, data.tax_rate, data.discount, itemid).done(function(output){
		table_row += output;

		$('.invoice-item table.invoice-items-table.items tbody').append(table_row);

		setTimeout(function () {
			wh_calculate_total();
		}, 15);

		wh_reorder_items('.invoice-item');
		wh_clear_item_preview_values('.invoice-item');
		$('body').find('#items-warning').remove();
		$("body").find('.dt-loader').remove();
		$('#item_select').val('').change();

		return true;
	});
	return false;
}

function wh_get_item_preview_values() {
	"use strict";

	var response = {};
	response.commodity_name = $('.invoice-item .main textarea[name="commodity_name"]').val();
	response.quantity = $('.invoice-item .main input[name="quantity"]').val();
	response.unit_name = $('.invoice-item .main input[name="unit_name"]').val();
	response.unit_price = $('.invoice-item .main input[name="unit_price"]').val();
	response.taxname = $('.main select.taxes').val();
	response.commodity_code = $('.invoice-item .main input[name="commodity_code"]').val();
	response.unit_id = $('.invoice-item .main input[name="unit_id"]').val();
	response.tax_rate = $('.invoice-item .main input[name="tax_rate"]').val();
	response.discount = $('.invoice-item .main input[name="discount"]').val();

	return response;
}

function wh_clear_item_preview_values(parent) {
	"use strict";

	var taxSelectedArray = [];
	$('.main select.taxes').val(taxSelectedArray).change();
	$('.main input').val('');
	$('.main textarea').val('');
}

function wh_get_item_row_template(name, commodity_name, quantity, unit_name, unit_price, taxname, commodity_code, unit_id, tax_rate, discount, item_key)  {
	"use strict";

	jQuery.ajaxSetup({
		async: false
	});

	var d = $.post("<?php echo get_uri("warehouse/get_packing_list_row_template") ?>", {
		name: name,
		commodity_name : commodity_name,
		quantity : quantity,
		unit_name : unit_name,
		unit_price : unit_price,
		taxname : taxname,
		commodity_code : commodity_code,
		unit_id : unit_id,
		tax_rate : tax_rate,
		discount : discount,
		item_key : item_key
	});
	jQuery.ajaxSetup({
		async: true
	});
	return d;
}

function wh_delete_item(row, itemid,parent) {
	"use strict";

	var shipping_fee = $('input[name="shipping_fee"]').val();
	var max_shipping_fee = $('input[name="shipping_fee"]').attr('max');
	if(parseFloat(shipping_fee) == parseFloat(max_shipping_fee)){
		var new_shipping_fee = parseFloat(max_shipping_fee)/2;
		$('input[name="shipping_fee"]').val(new_shipping_fee);
	}

	$(row).parents('tr').remove();
	wh_calculate_total();

	if (itemid && $('input[name="isedit"]').length > 0) {
		$(parent+' #removed-items').append(hidden_input('removed_items[]', itemid));
	}
}

function wh_reorder_items(parent) {
	"use strict";

	var rows = $(parent + ' .table.has-calculations tbody tr.item');
	var i = 1;
	$.each(rows, function () {
		$(this).find('input.order').val(i);
		i++;
	});
}

function wh_calculate_total(){
	"use strict";
	if ($('body').hasClass('no-calculate-total')) {
		return false;
	}

	if (AppHelper.settings.noOfDecimals == "0") {
		var decimal_places  = 0; //round it and the add static 2 decimals
	} else {
		var decimal_places  = 2;
	}

	var calculated_tax,
	taxrate,
	item_taxes,
	row,
	_amount,
	_tax_name,
	taxes = {},
	taxes_rows = [],
	subtotal = 0,
	total = 0,
	total_money = 0,
	total_tax_money = 0,
	quantity = 1,
	total_discount_calculated = 0,
	item_discount_percent = 0,
	item_discount = 0,
	item_total_payment,
	rows = $('.table.has-calculations tbody tr.item'),
	subtotal_area = $('#subtotal'),
	discount_area = $('#discount_area'),
	adjustment = $('input[name="adjustment"]').val(),
	discount_percent = 'before_tax',
	discount_fixed = $('input[name="discount_total"]').val(),
	discount_total_type = $('.discount-total-type.selected'),
	discount_type = $('select[name="discount_type"]').val(),
	additional_discount = $('input[name="additional_discount"]').val(),
	main_additional_discount = $('input[name="main_additional_discount"]').val(),
	shipping_fee = $('input[name="shipping_fee"]').val(),
	main_shipping_fee = $('input[name="main_shipping_fee"]').val();


	$('.wh-tax-area').remove();

	$.each(rows, function () {

		var item_tax = 0,
		item_amount  = 0;

		quantity = $(this).find('[data-quantity]').val();
		if (quantity === '') {
			quantity = 1;
			$(this).find('[data-quantity]').val(1);
		}
		item_discount_percent = $(this).find('td.discount input').val();

		if (isNaN(item_discount_percent) || item_discount_percent == '') {
			item_discount_percent = 0;
		}

		_amount =  parseFloat($(this).find('td.rate input').val() * quantity).toFixed(decimal_places)
		item_amount = _amount;
		_amount = parseFloat(_amount);

		$(this).find('td.amount').html(toCurrency(_amount));

		subtotal += _amount;
		row = $(this);
		item_taxes = $(this).find('select.taxes').val();

		if (item_taxes) {
			$.each(item_taxes, function (i, taxname) {
				taxrate = row.find('select.taxes [value="' + taxname + '"]').data('taxrate');
				calculated_tax = (_amount / 100 * taxrate);
				item_tax += calculated_tax;
				if (!taxes.hasOwnProperty(taxname)) {
					if (taxrate != 0) {
						_tax_name = taxname.split('|');
						var tax_row = '<tr class="wh-tax-area"><td>' + _tax_name[0] + '(' + taxrate + '%)</td><td id="tax_id_' + slugify(taxname) + '"></td></tr>';
						$(subtotal_area).after(tax_row);
						taxes[taxname] = calculated_tax;
					}
				} else {
										// Increment total from this tax
										taxes[taxname] = taxes[taxname] += calculated_tax;
									}
								});
		}
			//Discount of item
			item_discount = (parseFloat(item_amount) + parseFloat(item_tax) ) * parseFloat(item_discount_percent) / 100;
			item_total_payment = parseFloat(item_amount) + parseFloat(item_tax) - parseFloat(item_discount);

			// Append value to item
			total_discount_calculated += item_discount;
			$(this).find('td.discount_money input').val(item_discount);
			$(this).find('td.total_after_discount input').val(item_total_payment);

			$(this).find('td.label_discount_money').html(toCurrency(item_discount));
			$(this).find('td.label_total_after_discount').html(toCurrency(item_total_payment));

		});

	// Discount by percent
	if ((discount_percent !== '' && discount_percent != 0) && discount_type == 'before_tax' && discount_total_type.hasClass('discount-type-percent')) {
		total_discount_calculated = (subtotal * discount_percent) / 100;
	} else if ((discount_fixed !== '' && discount_fixed != 0) && discount_type == 'before_tax' && discount_total_type.hasClass('discount-type-fixed')) {
		total_discount_calculated = discount_fixed;
	}

	$.each(taxes, function (taxname, total_tax) {
		if ((discount_percent !== '' && discount_percent != 0) && discount_type == 'before_tax' && discount_total_type.hasClass('discount-type-percent')) {
			total_tax_calculated = (total_tax * discount_percent) / 100;
			total_tax = (total_tax - total_tax_calculated);
		} else if ((discount_fixed !== '' && discount_fixed != 0) && discount_type == 'before_tax' && discount_total_type.hasClass('discount-type-fixed')) {
			var t = (discount_fixed / subtotal) * 100;
			total_tax = (total_tax - (total_tax * t) / 100);
		}

		total += total_tax;
		total_tax_money += total_tax;
		total_tax = toCurrency(total_tax);
		$('#tax_id_' + slugify(taxname)).html(total_tax);
	});


	total = (total + subtotal);
	total_money = total;
	// Discount by percent
	if ((discount_percent !== '' && discount_percent != 0) && discount_type == 'after_tax' && discount_total_type.hasClass('discount-type-percent')) {
		total_discount_calculated = (total * discount_percent) / 100;
	} else if ((discount_fixed !== '' && discount_fixed != 0) && discount_type == 'after_tax' && discount_total_type.hasClass('discount-type-fixed')) {
		total_discount_calculated = discount_fixed;
	}

	if (!isNaN(parseFloat(additional_discount))) {
		total = total - total_discount_calculated - parseFloat(additional_discount);
	} else {
		total = total - total_discount_calculated;
	}

	adjustment = parseFloat(adjustment);

	// Check if adjustment not empty
	if (!isNaN(adjustment)) {
		total = total + adjustment;
	}

	if (!isNaN(shipping_fee) && shipping_fee != '') {
		total = total + parseFloat(shipping_fee);
	}

	if (!isNaN(parseFloat(total_discount_calculated)) && !isNaN(parseFloat(additional_discount))) {
		var discount_html = '-' + toCurrency(parseFloat(total_discount_calculated)+ parseFloat(additional_discount));
	}else if(!isNaN(parseFloat(total_discount_calculated))){
		var discount_html = '-' + toCurrency(parseFloat(total_discount_calculated));
	}else if(!isNaN(parseFloat(additional_discount))){
		var discount_html = '-' + toCurrency(parseFloat(additional_discount));
	}

	$('input[name="discount_total"]').val(parseFloat(total_discount_calculated).toFixed(decimal_places));

	// Append, format to html and display
	$('.wh-total_discount').html(discount_html + hidden_input('discount_total', parseFloat(total_discount_calculated).toFixed(decimal_places))  );
	$('.adjustment').html(toCurrency(adjustment));

	$('.wh-additional_discount').html('<input type="number" class="form-control" name="additional_discount" min="0.0" step="any" max="'+main_additional_discount+'" value="' + additional_discount + '">');
	$('.wh-shipping_fee').html('<input type="number" class="form-control" name="shipping_fee" min="0.0" step="any" max="'+main_shipping_fee+'" value="' + shipping_fee + '">');
	
	$('.wh-subtotal').html(toCurrency(subtotal) + hidden_input('subtotal', parseFloat(subtotal).toFixed(decimal_places)) + hidden_input('total_amount', parseFloat(total_money).toFixed(decimal_places)));
	$('.wh-total').html(toCurrency(total) + hidden_input('total_after_discount', parseFloat(total).toFixed(decimal_places)));

	$(document).trigger('wh-packing-list-total-calculated');

}

function get_available_quantity(commodity_code_name, from_stock_name, available_quantity_name){
	"use strict"; 

	var data = {};
	data.commodity_id = $('input[name="'+commodity_code_name+'"]').val();
	data.warehouse_id = $('select[name="'+from_stock_name+'"]').val();
	if(data.commodity_id != '' && data.warehouse_id != ''){

		$.post("<?php echo get_uri("warehouse/get_quantity_inventory") ?>", data).done(function(response){
			response = JSON.parse(response);
			$('input[name="'+available_quantity_name+'"]').val(response.value);
		});
	}else{
		$('input[name="'+available_quantity_name+'"]').val(0);
	}

	setTimeout(function () {
		wh_calculate_total();
	}, 15);

}

function submit_form(save_and_send_request) {
	"use strict";

	wh_calculate_total();

	var $itemsTable = $('.invoice-items-table');
	var $previewItem = $itemsTable.find('.main');
	var check_warehouse_status = true,
	check_quantity_status = true;

	if ( $itemsTable.length && $itemsTable.find('.item').length === 0) {
		appAlert.warning("<?php echo _l('wh_enter_at_least_one_product') ?>");
		return false;
	}

	$('input[name="save_and_send_request"]').val(save_and_send_request);

	var rows = $('.table.has-calculations tbody tr.item');
	$.each(rows, function () {
		var quantity_value = $(this).find('td.quantities input').val();
		if(parseFloat(quantity_value) == 0){
			check_quantity_status = false;
		}
		
	})

	if( check_quantity_status == true ){
		// Add disabled to submit buttons
		$(this).find('.add_goods_receipt_send').prop('disabled', true);
		$(this).find('.add_goods_receipt').prop('disabled', true);
		$('#add_edit_packing_list').submit();
	}else{
		appAlert.warning("<?php echo _l('please_choose_quantity_export') ?>");

	}

	return true;
}

function invoice_change(){
	"use strict";

	var invoice_id = $('select[name="invoice_id"]').val();

	$.post("<?php echo get_uri("warehouse/copy_invoices/") ?>"+invoice_id).done(function(response){
		response = JSON.parse(response);

		$('input[name="additional_discount"]').val((response.goods_delivery.additional_discount));
		$('.invoice-item table.invoice-items-table.items tbody').html('');
		$('.invoice-item table.invoice-items-table.items tbody').append(response.result);

		setTimeout(function () {
			wh_calculate_total();
		}, 15);

		init_selectpicker();
		init_datepicker();
		wh_reorder_items('.invoice-item');
		wh_clear_item_preview_values('.invoice-item');
		$('body').find('#items-warning').remove();
		$("body").find('.dt-loader').remove();
		$('#item_select').selectpicker('val', '');

		$('select[name="staff_id"]').val((response.goods_delivery.addedfrom)).change();
		$('textarea[name="description"]').val((response.goods_delivery.description)).change();
		$('input[name="address"]').val((response.goods_delivery.address));
		$('select[name="customer_code"]').val((response.goods_delivery.customer_code)).change();
		$('input[name="invoice_no"]').val(response.invoice_no);
	});

}


$('select[name="delivery_note_id"]').on('change', function() {
	"use strict";

	var delivery_note_id = $('select[name="delivery_note_id"]').val();

	$.post("<?php echo get_uri("warehouse/packing_list_copy_delivery_note/") ?>"+delivery_note_id).done(function(response){
		response = JSON.parse(response);

		$('input[name="additional_discount"]').val((response.additional_discount));
		$('input[name="main_additional_discount"]').val((response.additional_discount));
		$('.invoice-item table.invoice-items-table.items tbody').html('');
		$('.invoice-item table.invoice-items-table.items tbody').append(response.result);
		$('select[name="clientid"]').val(response.customer_id).change();
		$('input[name="shipping_fee"]').val((response.shipping_fee));
		$('input[name="main_shipping_fee"]').val((response.shipping_fee));

		setTimeout(function () {
			wh_calculate_total();
		}, 15);

		wh_reorder_items('.invoice-item');
		wh_clear_item_preview_values('.invoice-item');
		$('body').find('#items-warning').remove();
		$("body").find('.dt-loader').remove();
		$('#item_select').val('').change();

		$('.refresh_tax2 .select2').select2('destroy');
		$('.refresh_tax2 .select2').select2();


	});
});

$("body").on('change', '#clientid', function () {
	var val = $('select[name="clientid"]').val();

	requestGetJSON("<?php  echo get_uri('warehouse/wh_client_change_data/') ?>" + val).done(function (response) {
		$('.bill_to_data').html(response.billing_shipping);
	});

});

$('input[name="width"]').on('change', function () {
	"use strict";
	calculate_volume();
})
$('input[name="height"]').on('change', function () {
	"use strict";
	calculate_volume();
})
$('input[name="lenght"]').on('change', function () {
	"use strict";
	calculate_volume();
})

function calculate_volume(){
	"use strict";

	var volume = 0;
	var width = $('input[name="width"]').val(),
	height = $('input[name="height"]').val(),
	lenght = $('input[name="lenght"]').val();

	volume = parseFloat(width) * parseFloat(height) * parseFloat(lenght);
	$('input[name="volume"]').val(volume);
}

</script>