| Server IP : 14.225.204.176 / Your IP : 216.73.216.6 Web Server : nginx/1.24.0 System : Linux nodejs-ybgk 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64 User : root ( 0) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/php/thanhphuong/resources/views/warranty/ |
Upload File : |
@extends('layout.main')
@section('content')
<section class="forms">
<div class="container-fluid">
@if (\Session::has('success'))
<div class="alert alert-success alert-dismissible text-center">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ session()->get('success') }}
</div>
@endif
@if (\Session::has('error'))
<div class="alert alert-error alert-dismissible text-center">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ session()->get('error') }}
</div>
@endif
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<form method="POST" action="{{route('warranties.store')}}" id="warranty-form">
@csrf
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
<div class="card-header d-flex align-items-center">
<h4>{{trans('file.Export Product')}}</h4>
</div>
<p class="italic"><small>{{trans('file.The field labels marked with * are required input fields')}}.</small></p>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Inventory Delivery Voucher')}} </label>
<input type="text" name="inventory_delivery_voucher" class="form-control"/>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.name')}} </label>
<input type="text" name="name" class="form-control" />
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Export Date')}} </label>
<input type="text" name="purchase_date" id="purchase_date" class="form-control" />
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Warranty Store')}} </label>
<select name="warehouse_id" class="selectpicker form-control" data-live-search="true" >
<option value="-1">{{trans('file.All Warranty Store')}}</option>
@foreach($lims_warehouse_list as $warehouse)
<option value="{{$warehouse->id}}">{{$warehouse->name}}</option>
@endforeach
</select>
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Inventory type')}} *</label>
<select required id="method" name="method" class="selectpicker form-control" data-live-search="true" data-live-search-style="begins" title="{{trans('file.Select inventory type')}}...">
<option selected value="warranty">{{trans('file.Warranty')}}</option>
<option value="repair">{{trans('file.Repair')}}</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card-header d-flex align-items-center">
<h4>{{trans('file.Customer Details')}}</h4>
</div>
<p class="italic"><small>{{trans('file.The field labels marked with * are required input fields')}}.</small></p>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Phone Number')}} </label>
<input type="search" name="customer_phone_number" class="form-control customer-phone-number" autocomplete="new-password" />
<input type="hidden" name="customer_id" class="customer-id" />
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.customer')}} </label>
<input type="text" name="customer_name" class="form-control customer-name" />
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Email')}} </label>
<input type="email" name="customer_email" class="form-control customer-email" />
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Address')}}</label>
<input type="text" name="customer_address" class="form-control customer-address" />
<span class="validation-msg"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>{{trans('file.Note')}}</label>
<textarea name="note" class="form-control" rows="1"></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-md-12">
<label>{{trans('file.Select Product')}}</label>
<div class="search-box input-group">
<button class="btn btn-secondary"><i class="fa fa-barcode"></i></button>
<input type="text" name="product_code_name" id="lims_productCodeSearch" placeholder="Please type product code and select..." class="form-control" />
</div>
</div>
</div>
<div class="row mt-5">
<div class="col-md-12">
<h5>{{trans('file.Product Export Table')}}</h5>
<div class="table-responsive mt-3">
<table id="myTableRepair" class="table table-hover order-list order-list-repair d-none">
<thead>
<tr>
<th>{{trans('file.Item Name')}}</th>
<th>{{trans('file.Item Code')}}</th>
<th>{{trans('file.Unit')}}</th>
<th>{{trans('file.Quantity')}}</th>
<th>{{trans('file.Serial Number')}}</th>
<th>{{trans('file.Batch Number')}}/{{trans('file.Lot Number')}}</th>
<th>{{trans('file.RMA Number')}}</th>
<th>{{trans('file.TR Number')}}</th>
<th>{{trans('file.Invoice Number')}}</th>
<th>{{trans('file.Invoice Date')}}</th>
<th>{{trans('file.TKHQ Number')}}</th>
<th>{{trans('file.Temporary Date')}}</th>
<th>{{trans('file.Import Date')}}</th>
<th>{{trans('file.Transport Cost')}}</th>
<th>{{trans('file.Unit name')}}</th>
<th>{{trans('file.Repair company')}}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot class="tfoot active">
<th colspan="3">{{trans('file.Total')}}</th>
<th id="total-qty-repair">0</th>
<th colspan="9"></th>
<th id="total-transport-cost-repair">0</th>
<th colspan="2"></th>
<th><i class="dripicons-trash"></i></th>
</tfoot>
</table>
<table id="myTableWarranty" class="table table-hover order-list order-list-warranty">
<thead>
<tr>
<th>{{trans('file.Item Name')}}</th>
<th>{{trans('file.Item Code')}}</th>
<th>{{trans('file.Unit')}}</th>
<th>{{trans('file.Quantity')}}</th>
<th>{{trans('file.Serial Number')}}</th>
<th>{{trans('file.Batch Number')}}/{{trans('file.Lot Number')}}</th>
<th>{{trans('file.RMA Number')}}</th>
<th>{{trans('file.TR Number')}}</th>
<th>{{trans('file.Invoice Number')}}</th>
<th>{{trans('file.Invoice Date')}}</th>
<th>{{trans('file.TKHQ Number')}}</th>
<th>{{trans('file.Temporary Date')}}</th>
<th>{{trans('file.Import Date')}}</th>
<th>{{trans('file.Transport Cost')}}</th>
<th>{{trans('file.Unit name')}}</th>
<th>{{trans('file.Warranty company')}}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot class="tfoot active">
<th colspan="3">{{trans('file.Total')}}</th>
<th id="total-qty-warranty">0</th>
<th colspan="9"></th>
<th id="total-transport-cost-warranty">0</th>
<th colspan="2"></th>
<th><i class="dripicons-trash"></i></th>
</tfoot>
</table>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-md-3">
<div class="form-group">
<label>
{{trans('file.Total Allocation Costs')}}
</label>
<input type="number" name="total_allocation_cost" class="form-control" min="0" value="0" step="any" />
</div>
</div>
</div>
<div class="row">
<div class="col-md-2">
<div class="form-group">
<input type="hidden" name="type" value="export" />
</div>
</div>
</div>
<div class="row">
<div class="col-md-2">
<div class="form-group">
<input type="hidden" name="total_qty" />
<input type="hidden" name="total_transport_cost" />
<input type="hidden" name="item" />
</div>
</div>
</div>
<div class="row">
<div class="col-md-9"> </div>
<div class="col-md-3 bg-light text-right">
<button class="btn btn-danger btn-block" id="submit-btn" type="submit">{{trans('file.submit')}}</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<script type="text/javascript">
// Active sidebar menu
$("ul#inventory").siblings('a').attr('aria-expanded','true');
$("ul#inventory").addClass("show");
$("ul#warranty").siblings('a').attr('aria-expanded', 'true');
$("ul#warranty").addClass("show");
$("ul#warranty #warranty-list-menu").addClass("active");
$('select[name="method"]').on('change', function() {
var method = $(this).val();
if(method == "warranty"){
$("#myTableWarranty").removeClass("d-none");
$("#myTableRepair").addClass("d-none");
// xóa thẻ tr khỏi tbody
$('table.order-list-repair tbody tr').empty();
calculateTotal();
}
if(method == "repair"){
$("#myTableRepair").removeClass("d-none");
$("#myTableWarranty").addClass("d-none");
// xóa thẻ tr khỏi tbody
$('table.order-list-warranty tbody tr').empty();
calculateTotal();
}
});
// button delete all row
$('.dripicons-trash').on("click", function (e) {
var method = $("#method").val()
if(method == "warranty"){
// xóa thẻ tr khỏi tbody
$('table.order-list-warranty tbody tr').empty();
calculateTotal();
}
if(method == "repair"){
// xóa thẻ tr khỏi tbody
$('table.order-list-repair tbody tr').empty();
calculateTotal();
}
});
// Validator
$('#submit-btn').on("click", function (e) {
$("#warranty-form").valid();
var method = $("#method").val()
if(method == "warranty"){
var rownumber = $('table.order-list-warranty tr').length;
if (rownumber <= 2) {
alert("Please insert product to order table!")
e.preventDefault();
}
}
if(method == "repair"){
var rownumber = $('table.order-list-repair tr').length;
if (rownumber <= 2) {
alert("Please insert product to order table!")
e.preventDefault();
}
}
});
jQuery.validator.setDefaults({
errorPlacement: function (error, element) {
$(element).closest('div.form-group').find('.validation-msg').html(error.html());
},
highlight: function (element) {
$(element).closest('div.form-group').removeClass('has-success').addClass('has-error');
},
unhighlight: function (element, errorClass, validClass) {
$(element).closest('div.form-group').removeClass('has-error').addClass('has-success');
$(element).closest('div.form-group').find('.validation-msg').html('');
}
});
// Init
$('.selectpicker').selectpicker({
style: 'btn-link',
});
$('#purchase_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
$('#myTableRepair').on("click", ".remove-product", function (e) {
e.preventDefault();
$(this).closest("tr").remove();
});
var lims_product_code = [
@foreach($lims_product_list_without_variant as $product)
<?php
$productArray[] = htmlspecialchars($product->code . ' (' . $product->name . ')');
?>
@endforeach
@foreach($lims_product_list_with_variant as $product)
<?php
$productArray[] = htmlspecialchars($product->item_code . ' (' . $product->name . ')');
?>
@endforeach
<?php
echo '"' . implode('","', $productArray) . '"';
?>
];
$('#lims_productCodeSearch').autocomplete({
source: function (request, response) {
var matcher = new RegExp(".?" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(lims_product_code, function (item) {
return matcher.test(item);
}));
},
response: function (event, ui) {
if (ui.content.length == 1) {
var data = ui.content[0].value;
$(this).autocomplete("close");
productSearch(data);
}
},
select: function (event, ui) {
var data = ui.item.value;
productSearch(data);
}
});
$('.customer-phone-number').autocomplete({
source: function (request, response) {
$.ajax({
url: '{{route('customer.search')}}',
type: 'GET',
dataType: "json",
data: {
phone: request.term,
},
success: function (data) {
response(data.customers);
}
});
},
select: function (event, ui) {
// Update data for customer
var customer = ui.item;
$('.customer-id').val(customer.id);
$('.customer-phone-number').val(customer.phone_number).data('default', customer.phone_number);
$('.customer-name').val(customer.name).prop('disabled', true);
$('.customer-email').val(customer.email).prop('disabled', true);
$('.customer-address').val(customer.address).prop('disabled', true);
return false;
}
}).autocomplete("instance")._renderItem = function (ul, item) {
return $("<li>")
.append("<div>" + item.phone_number + "</div>")
.appendTo(ul);
};
$(document).on('input', '.customer-phone-number', function (e) {
var originPhoneNumber = $(this).data('default');
if($(this).val() != originPhoneNumber && originPhoneNumber != '') {
$('.customer-id').val('');
$('.customer-name').val('').prop('disabled', false);
$('.customer-email').val('').prop('disabled', false);
$('.customer-address').val('').prop('disabled', false);
}
});
function productSearch(data) {
$.ajax({
type: 'GET',
url: '{{route('warranties.search')}}',
data: {
data: data
},
success: function (data) {
// Clear data
$("input[name='product_code_name']").val('');
var temp_unit_name = (data[6]).split(',');
var temp_unit_id = (data[10]).split(',');
var method = $("#method").val()
if(method == "warranty"){
var newRow = $("<tr>");
var cols = '';
cols += '<td>' + data[0] + '</td>'
cols += '<td>' + data[1] + '</td>'
cols += '<td>' + temp_unit_name[0] + '</td>'
cols += '<td><input type="number" class="form-control qty" name="qty[]" value="1" min="1" required step="any" /></td>'
cols += '<td><input type="text" class="form-control no-border" name="serial_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="batch_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="RMA_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="tr_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="invoice_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border invoice_date" name="invoice_date[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="TKHQ_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border temporary_date" name="temporary_date[]"/></td>'
cols += '<td><input type="text" class="form-control no-border import_date" name="import_date[]"/></td>'
cols += '<td><input type="number" class="form-control transport_cost" name="transport_cost[]" value="0" min="0" required step="any" /></td>'
cols += '<td><input type="text" class="form-control no-border" name="unit_name[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="warranty_company[]"/></td>'
cols += '<td><button type="button" class="ibtnDel btn btn-md btn-danger">{{trans("file.delete")}}</button></td>';
cols += '<input type="hidden" name="product_name[]" value="' + data[0] + '"/>'
cols += '<input type="hidden" class="product-code" name="product_code[]" value="' + data[1] + '"/>'
cols += '<input type="hidden" name="product_id[]" value="' + data[9] + '"/>'
cols += '<input type="hidden" name="unit_id[]" value="' + temp_unit_id[0] + '"/>'
cols += '<input type="hidden" class="form-control fee_repair" name="fee_repair[]" value="0" />'
cols += '<input type="hidden" class="form-control fee_exchange" name="fee_exchange[]" value="0" />'
cols += '<input type="hidden" class="form-control no-border" name="old_serial_number[]"/>'
cols += '<input type="hidden" class="form-control no-border" name="old_batch_number[]"/>'
cols += '<input type="hidden" class="form-control no-border" name="repair_company[]"/>'
newRow.append(cols);
$("table.order-list-warranty tbody").append(newRow);
$('.import_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
$('.invoice_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
$('.temporary_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
rowindex = newRow.index();
calculateTotal();
} else {
var newRow = $("<tr>");
var cols = '';
cols += '<td>' + data[0] + '</td>'
cols += '<td>' + data[1] + '</td>'
cols += '<td>' + temp_unit_name[0] + '</td>'
cols += '<td><input type="number" class="form-control qty" name="qty[]" value="1" min="1" required step="any" /></td>'
cols += '<td><input type="text" class="form-control no-border" name="serial_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="batch_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="RMA_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="tr_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="invoice_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border invoice_date" name="invoice_date[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="TKHQ_number[]"/></td>'
cols += '<td><input type="text" class="form-control no-border temporary_date" name="temporary_date[]"/></td>'
cols += '<td><input type="text" class="form-control no-border import_date" name="import_date[]"/></td>'
cols += '<td><input type="number" class="form-control transport_cost" name="transport_cost[]" value="0" min="0" required step="any" /></td>'
cols += '<td><input type="text" class="form-control no-border" name="unit_name[]"/></td>'
cols += '<td><input type="text" class="form-control no-border" name="repair_company[]"/></td>'
cols += '<td><span class="btn remove-product" href="#"><i class="dripicons-trash"></i></span></td>'
cols += '<input type="hidden" name="product_name[]" value="' + data[0] + '"/>'
cols += '<input type="hidden" class="product-code" name="product_code[]" value="' + data[1] + '"/>'
cols += '<input type="hidden" name="product_id[]" value="' + data[9] + '"/>'
cols += '<input type="hidden" name="unit_id[]" value="' + temp_unit_id[0] + '"/>'
cols += '<input type="hidden" class="form-control fee_repair" name="fee_repair[]" />'
cols += '<input type="hidden" class="form-control fee_exchange" name="fee_exchange[]" />'
cols += '<input type="hidden" class="form-control no-border" name="old_batch_number[]"/>'
cols += '<input type="hidden" class="form-control no-border" name="old_serial_number[]"/>'
cols += '<input type="hidden" class="form-control no-border" name="warranty_company[]"/>'
newRow.append(cols);
$("table.order-list-repair tbody").append(newRow);
$('.import_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
$('.invoice_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
$('.temporary_date').datepicker({
format: "{{$date_format->js_format}}",
autoclose: true,
todayHighlight: true
});
rowindex = newRow.index();
calculateTotal();
}
}
});
}
// sửa chữa
// change quantity
$("#myTableRepair").on('input', '.qty', function() {
rowindex = $(this).closest('tr').index();
calculateTotal();
});
// Change transport cost
$("#myTableRepair").on('input', '.transport_cost', function () {
rowindex = $(this).closest('tr').index();
var currentRow = $('table.order-list tbody tr:nth-child(' + (rowindex + 1) + ')');
var transport_cost = parseInt(currentRow.find('.transport_cost').val());
var warranty_qty = parseInt(currentRow.find('.qty').val());
if (parseFloat($(this).val()) < 0) {
currentRow.find('.transport_cost').val(0);
alert("Transport cost can't be less than 0");
}
calculateTotal();
});
// xóa 1 row
$("table.order-list-repair tbody").on("click", ".ibtnDel", function(event) {
rowindex = $(this).closest('tr').index();
$(this).closest("tr").remove();
calculateTotal();
});
// bảo hành
// change quantity
$("#myTableWarranty").on('input', '.qty', function() {
rowindex = $(this).closest('tr').index();
calculateTotal();
});
// Change transport cost
$("#myTableWarranty").on('input', '.transport_cost', function () {
rowindex = $(this).closest('tr').index();
var currentRow = $('table.order-list tbody tr:nth-child(' + (rowindex + 1) + ')');
var transport_cost = parseInt(currentRow.find('.transport_cost').val());
var warranty_qty = parseInt(currentRow.find('.qty').val());
if (parseFloat($(this).val()) < 0) {
currentRow.find('.transport_cost').val(0);
alert("Transport cost can't be less than 0");
}
calculateTotal();
});
// xóa 1 row
$("table.order-list-warranty tbody").on("click", ".ibtnDel", function(event) {
rowindex = $(this).closest('tr').index();
$(this).closest("tr").remove();
calculateTotal();
});
function calculateTotal() {
var method = $("#method").val()
if(method == "repair"){
var total_qty = 0;
$(".qty").each(function() {
if ($(this).val() == '') {
total_qty += 0;
} else {
total_qty += parseFloat($(this).val());
}
});
$("#total-qty-repair").text(total_qty);
$('input[name="total_qty"]').val(total_qty);
$('input[name="item"]').val($('table.order-list-repair tbody tr:last').index() + 1);
var total_transport_cost = 0;
$(".transport_cost").each(function() {
if ($(this).val() == '') {
total_transport_cost += 0;
} else {
total_transport_cost += parseFloat($(this).val());
}
});
$("#total-transport-cost-repair").text(total_transport_cost.toFixed(0).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1."));
$('input[name="total_transport_cost"]').val(total_transport_cost);
$('input[name="total_allocation_cost"]').val(total_transport_cost);
}
if(method == "warranty"){
var total_qty = 0;
$(".qty").each(function() {
if ($(this).val() == '') {
total_qty += 0;
} else {
total_qty += parseFloat($(this).val());
}
});
$("#total-qty-warranty").text(total_qty);
$('input[name="total_qty"]').val(total_qty);
$('input[name="item"]').val($('table.order-list-warranty tbody tr:last').index() + 1);
var total_transport_cost = 0;
$(".transport_cost").each(function() {
if ($(this).val() == '') {
total_transport_cost += 0;
} else {
total_transport_cost += parseFloat($(this).val());
}
});
$("#total-transport-cost-warranty").text(total_transport_cost.toFixed(0).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1."));
$('input[name="total_transport_cost"]').val(total_transport_cost);
$('input[name="total_allocation_cost"]').val(total_transport_cost);
}
}
$('input[name="total_allocation_cost"]').on("change", function() {
var total_allocation_cost = parseFloat($(this).val());
if(total_allocation_cost >= 0){
var method = $("#method").val()
if(method == "repair"){
let total_qty_repair = parseFloat($("#total-qty-repair").text())
$(".qty").each(function (index) {
let total_qty = parseFloat($(this).val());
let calc_sub = (total_qty / total_qty_repair) * total_allocation_cost
$('.transport_cost').eq(index).val(calc_sub.toFixed(0));
});
calculateTotal()
}
if(method == "warranty"){
let total_qty_warranty = parseFloat($("#total-qty-warranty").text())
$(".qty").each(function (index) {
let total_qty = parseFloat($(this).val());
let calc_sub = (total_qty / total_qty_warranty) * total_allocation_cost
$('.transport_cost').eq(index).val(calc_sub.toFixed(0));
});
calculateTotal()
}
} else {
$('input[name="total_allocation_cost"]').val(0)
alert("Total allocation costs can't be less than 0");
}
});
</script>
@endsection