ultimatepos/Modules/Manufacturing/Resources/views/layouts/partials/common_script.blade.php

397 lines
14 KiB
PHP

<script type="text/javascript">
$(document).ready( function () {
if (typeof MfgDate !== 'undefined' && $('#production_list_filter_date_range').length) {
MfgDate.initDateRangePicker('#production_list_filter_date_range', function () {
if (typeof productions_table !== 'undefined') {
productions_table.ajax.reload();
}
});
}
//Purchase table
productions_table = $('#productions_table').DataTable({
processing: true,
serverSide: true,
aaSorting: [[0, 'desc']],
ajax: {
url: '{{action([\Modules\Manufacturing\Http\Controllers\ProductionController::class, 'index'])}}',
"data": function ( d ) {
if($('#production_list_filter_date_range').val() && typeof MfgDate !== 'undefined') {
d.start_date = MfgDate.rangeStart('#production_list_filter_date_range');
d.end_date = MfgDate.rangeEnd('#production_list_filter_date_range');
}
d.location_id = $('#productstion_list_filter_location_id').val();
if($('#production_list_is_final').is(':checked')) {
d.is_final = 1;
}
d = __datatable_ajax_callback(d);
},
},
columnDefs: [
{
targets: [6],
orderable: false,
searchable: false,
},
],
columns: [
{ data: 'transaction_date', name: 'transaction_date' },
{ data: 'ref_no', name: 'ref_no' },
{ data: 'location_name', name: 'bl.name' },
{ data: 'product_name', name: 'product_name' },
{ data: 'quantity', searchable: false },
{ data: 'final_total', name: 'final_total' },
{ data: 'action', name: 'action' },
],
fnDrawCallback: function(oSettings) {
__currency_convert_recursively($('#productions_table'));
}
});
$(document).on('change', '#production_list_filter_date_range, #productstion_list_filter_location_id', function() {
productions_table.ajax.reload();
});
$('#production_list_is_final').on('ifChanged', function(event){
productions_table.ajax.reload();
});
if ($('textarea#instructions').length > 0) {
tinymce.init({
selector: 'textarea#instructions',
});
}
if ($('#search_product').length) {
initialize_search($('#search_product'));
}
if ($('.search_product').length) {
$('.search_product').each( function(){
initialize_search($(this));
});
}
recipe_table = $('#recipe_table').DataTable({
processing: true,
serverSide: true,
ajax: '{{action([\Modules\Manufacturing\Http\Controllers\RecipeController::class, 'index'])}}',
columnDefs: [
{
targets: [0, 5, 6, 7],
orderable: false,
searchable: false,
},
],
"order": [[ 1, "desc" ]],
columns: [
{ data: 'row_select' },
{ data: 'recipe_name', name: 'recipe_name' },
{ data: 'category', name: 'c.name' },
{ data: 'sub_category', name: 'sc.name' },
{ data: 'total_quantity', name: 'total_quantity' },
{ data: 'recipe_total' },
{ data: 'unit_cost' },
{ data: 'action', name: 'action' },
],
fnDrawCallback: function(oSettings) {
__currency_convert_recursively($('#recipe_table'));
},
});
});
$(document).on('shown.bs.modal', '#recipe_modal', function(){
initSelect2($(this).find('#variation_id'), $('#recipe_modal'));
$(this).find('#copy_recipe_id').select2();
});
$(document).on('shown.bs.modal', '.view_modal', function(){
__currency_convert_recursively($('.view_modal'));
});
$(document).on('change', '.quantity, .row_sub_unit_id, #total_quantity, #extra_cost, #sub_unit_id, #production_cost_type', function(){
calculateRecipeTotal();
});
function addIngredientRow(variation_id, search_element) {
var row_index = parseInt($('#row_index').val());
var ingredient_group = search_element.closest('.box').find('.ingredient_group');
var row_ig_index = ingredient_group.length ? ingredient_group.data('ig_index') : '';
var sort_order = ++(search_element.closest('.box').find('.ingredient-row-sortable').children().length);
$.ajax({
url: "/manufacturing/get-ingredient-row/" + variation_id + '?row_index=' + row_index + '&row_ig_index=' + row_ig_index + '&sort_order=' + sort_order,
dataType: 'html',
success: function(result) {
search_element.closest('.box').find('table.ingredients_table tbody').append(result);
calculateRecipeTotal();
row_index++;
$('#row_index').val(row_index);
},
});
}
function calculateRecipeTotal() {
var total = 0;
$('.ingredients_table tbody tr').each( function() {
var line_unit_price = $(this).find('.ingredient_price').val();
var quantity = __read_number($(this).find('.quantity'));
var multiplier = 1;
if ($(this).find('.row_sub_unit_id').length) {
multiplier = parseFloat(
$(this).find('.row_sub_unit_id')
.find(':selected')
.data('multiplier')
);
}
var line_total = line_unit_price * quantity * multiplier;
$(this).find('span.ingredient_price').text(__currency_trans_from_en(line_total, true));
total += line_total;
});
$('span#ingredients_cost_text').text(__currency_trans_from_en(total, true));
$('#ingredients_cost').val(total);
var production_cost = __read_number($('#extra_cost'));
var production_cost_type = $('#production_cost_type').val();
if (production_cost_type == 'percentage') {
production_cost = __calculate_amount('percentage', production_cost, total);
} else if(production_cost_type == 'per_unit') {
var total_quantity = __read_number($('#total_quantity'));
production_cost = total_quantity * production_cost;
}
$('span#total_production_cost').text(__currency_trans_from_en(production_cost, true));
total += production_cost;
__write_number($('#total'), total);
}
function initSelect2(element, dropdownParent = $('body')) {
element.select2({
ajax: {
url: '/products/list',
dataType: 'json',
delay: 250,
data: function(params) {
return {
term: params.term, // search term
};
},
processResults: function(data) {
return {
results: $.map(data, function (value, key) {
var name = value.type == 'variable' ? value.name + ' - ' + value.variation : value.name;
name += ' (' + value.sub_sku + ')';
return {
id: value.variation_id,
text: name
}
})
};
},
},
minimumInputLength: 1,
escapeMarkup: function(markup) {
return markup;
},
dropdownParent: dropdownParent
});
}
$(document).on('click', 'button.remove_ingredient', function() {
element = $(this).closest('tbody.ingredient-row-sortable');
$(this).closest('tr').remove();
//set the order of ingredient
$(element).children().each(function(index) {
$(this).find('input.sort_order').val(++index)
});
calculateRecipeTotal();
});
$(document).on('submit', '#recipe_form', function (e) {
var ingredients_length = $('.ingredients_table tbody .quantity').length;
if (ingredients_length < 1) {
toastr.error('@lang("manufacturing::lang.please_add_ingredients")');
e.preventDefault();
return false;
}
});
$(document).on('click', 'button#add_ingredient_group', function() {
var ig_index = parseInt($('#ig_index').val());
$.ajax({
url: "/manufacturing/ingredient-group-form" + '?ig_index=' + ig_index,
dataType: 'html',
success: function(result) {
var el = $(result);
$('#box_group').append(el);
initialize_search(el.find('.search_product'));
el.find('.ingredient_group').focus();
ig_index++;
$('#ig_index').val(ig_index);
},
});
});
function initialize_search(element) {
element.autocomplete({
source: function(request, response) {
$.getJSON(
'/products/list',
{
term: request.term,
product_types: ['single', 'variable']
},
response
);
},
minLength: 2,
response: function(event, ui) {
if (ui.content.length == 0) {
toastr.error(LANG.no_products_found);
$('input#search_product').select();
}
},
select: function(event, ui) {
addIngredientRow(ui.item.variation_id, $(this));
},
}).autocomplete('instance')._renderItem = function(ul, item) {
var string = '<li>' + item.name;
if (item.type == 'variable') {
string += '-' + item.variation;
}
string +=
' (' +
item.sub_sku +
')' +
'</li>';
return $(string).appendTo(ul);
}
}
$(document).on('click', 'button.remove_ingredient_group', function() {
$(this).closest('.box').remove();
calculateRecipeTotal();
});
$(document).on('click', '#mass_update_product_price', function(e){
e.preventDefault();
var selected_rows = [];
var unit_prices = [];
var i = 0;
$('.row-select:checked').each(function () {
var recipe_id = $(this).val();
selected_rows[i++] = recipe_id;
unit_prices[recipe_id] = $(this).closest('tr').find('span.unit_cost').data('unit_cost');
});
if(selected_rows.length > 0){
swal({
title: LANG.sure,
icon: "warning",
buttons: true,
dangerMode: true,
}).then((willDelete) => {
if (willDelete) {
var data = {
recipe_ids: selected_rows,
unit_prices: unit_prices
}
$.ajax({
method: "post",
url: "/manufacturing/update-product-prices",
dataType: 'json',
data: data,
success: function(result) {
if (result.success == true) {
toastr.success(result.msg);
recipe_table.ajax.reload();
} else {
toastr.error(result.msg);
}
},
});
}
});
} else{
swal('@lang("lang_v1.no_row_selected")');
}
});
$(document).on('click', 'button.delete_recipe', function() {
swal({
title: LANG.sure,
icon: 'warning',
buttons: true,
dangerMode: true,
}).then(willDelete => {
if (willDelete) {
var href = $(this).data('href');
var data = $(this).serialize();
$.ajax({
method: 'DELETE',
url: href,
dataType: 'json',
data: data,
success: function(result) {
if (result.success == true) {
toastr.success(result.msg);
recipe_table.ajax.reload();
} else {
toastr.error(result.msg);
}
},
});
}
});
});
$(document).on('click', '.delete-production', function(e) {
e.preventDefault();
swal({
title: LANG.sure,
icon: 'warning',
buttons: true,
dangerMode: true,
}).then(willDelete => {
if (willDelete) {
var href = $(this).data('href');
var data = $(this).serialize();
$.ajax({
method: 'DELETE',
url: href,
dataType: 'json',
data: data,
success: function(result) {
if (result.success == true) {
toastr.success(result.msg);
productions_table.ajax.reload();
} else {
toastr.error(result.msg);
}
},
});
}
});
});
$(document).on('change', '#choose_product_form #variation_id', function() {
var variation_id = $(this).val();
if (variation_id) {
$.ajax({
method: 'get',
url: "/manufacturing/is-recipe-exist/" + variation_id,
dataType: 'json',
success: function(result) {
if (result == 1) {
$('#choose_product_form #recipe_selection').addClass('hide');
} else {
$('#choose_product_form #recipe_selection').removeClass('hide');
}
},
});
} else {
$('#choose_product_form #recipe_selection').removeClass('hide');
}
})
</script>