feat: implement AdminController for CMS management and AppServiceProvider for application bootstrapping
This commit is contained in:
@@ -1,288 +0,0 @@
|
||||
<div id="joint-by-line-no-datagrid"></div>
|
||||
<script>
|
||||
$(function(){
|
||||
var editableColumns = [
|
||||
/*
|
||||
'vt_request_date',
|
||||
'test_laboratory_vt',
|
||||
'pwht_date',
|
||||
'test_laboratory_pwht',
|
||||
'ht_request_date',
|
||||
'test_laboratory_ht',
|
||||
'rt_request_date',
|
||||
'test_laboratory_rt',
|
||||
'ut_test_date',
|
||||
'ut_request_date',
|
||||
'test_laboratory_ut',
|
||||
'ut_type',
|
||||
'pt_test_date',
|
||||
'test_laboratory_pt',
|
||||
'mt_test_date',
|
||||
'mt_request_date',
|
||||
'test_laboratory_mt',
|
||||
'pmi_test_date',
|
||||
'test_laboratory_pmi',
|
||||
'spool_release_date',
|
||||
*/
|
||||
];
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=manage-ndt.joint-by-line-no<?php echo $query ?>',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGrid2 = $("#joint-by-line-no-datagrid").dxDataGrid({
|
||||
dataSource: '?ajax=manage-ndt.joint-by-line-no<?php echo $query ?>',
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
@include("components.table.datagrid.partials.js-excel")
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: false },
|
||||
toolbar: {
|
||||
items: [
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
icon: 'filter',
|
||||
text: '{{e2("Clear Filter")}}',
|
||||
onClick: function(e) {
|
||||
dataGrid2.clearFilter();
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
columns : [
|
||||
// General Information
|
||||
{
|
||||
caption: "General Information",
|
||||
headerCellTemplate: function(container) {
|
||||
container.parent().addClass("table-success text-center");
|
||||
container.html("General Information");
|
||||
},
|
||||
columns: [
|
||||
{ dataField: "id" },
|
||||
{ dataField: "line_number" },
|
||||
{ dataField: "iso_number" },
|
||||
{ dataField: "spool_number" },
|
||||
{ dataField: "test_package_no" },
|
||||
{ dataField: "joint_no" }
|
||||
]
|
||||
},
|
||||
// Joint Details
|
||||
{
|
||||
caption: "Joint Details",
|
||||
headerCellTemplate: function(container) {
|
||||
container.parent().addClass("table-warning text-center");
|
||||
container.html("Joint Details");
|
||||
},
|
||||
columns: [
|
||||
{ dataField: "type_of_joint" },
|
||||
{ dataField: "type_of_welds" },
|
||||
{
|
||||
dataField: "welding_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "welder_1" },
|
||||
{ dataField: "welder_2" },
|
||||
{ dataField: "member_no_1" },
|
||||
{ dataField: "material_no_1" },
|
||||
{ dataField: "outside_diameter_1" },
|
||||
{ dataField: "wall_thickness_1" },
|
||||
{ dataField: "member_no_2" },
|
||||
{ dataField: "material_no_2" },
|
||||
{ dataField: "outside_diameter_2" },
|
||||
{ dataField: "wall_thickness_2" }
|
||||
]
|
||||
},
|
||||
// Inspection Dates and Results
|
||||
{
|
||||
caption: "Inspection Dates and Results",
|
||||
headerCellTemplate: function(container) {
|
||||
container.parent().addClass("table-info text-center");
|
||||
container.html("Inspection Dates and Results");
|
||||
},
|
||||
columns: [
|
||||
{ dataField: "date_of_vt" },
|
||||
{ dataField: "vt_result" },
|
||||
{ dataField: "rt_scope" },
|
||||
{
|
||||
dataField: "rt_test_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "rt_result" },
|
||||
{ dataField: "ut_scope" },
|
||||
{
|
||||
dataField: "ut_test_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "ut_result" },
|
||||
{ dataField: "mt_scope" },
|
||||
{
|
||||
dataField: "mt_test_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "pt_scope" },
|
||||
{
|
||||
dataField: "pt_test_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "pmi_scope" },
|
||||
{
|
||||
dataField: "pmi_test_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "pmi_result" }
|
||||
]
|
||||
},
|
||||
// Post-Weld Heat Treatment and Ferrite
|
||||
{
|
||||
caption: "Post-Weld Heat Treatment and Ferrite",
|
||||
headerCellTemplate: function(container) {
|
||||
container.parent().addClass("table-danger text-center")
|
||||
container.html("Post-Weld Heat Treatment and Ferrite");
|
||||
},
|
||||
columns: [
|
||||
{ dataField: "pwht" },
|
||||
{
|
||||
dataField: "pwht_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "ferrite_scope" },
|
||||
{
|
||||
dataField: "ferrite_test_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{ dataField: "ferrite_result" }
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
onEditorPreparing(e) {
|
||||
|
||||
if(e.parentType == "dataRow") {
|
||||
if(editableColumns.includes(e.dataField)) {
|
||||
e.editorOptions.readOnly = false;
|
||||
} else {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
/*
|
||||
if(e.dataType == "date" ) {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.displayFormat = 'dd/MM/yyyy';
|
||||
e.dataType = 'date';
|
||||
e.editorOptions.format = 'dd/MM/yyyy';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
onContentReady: function(e) {
|
||||
// DataGrid yükleme tamamlandığında çalışacak kod
|
||||
<?php
|
||||
foreach($dateColumns AS $dateColumn) {
|
||||
|
||||
?>
|
||||
// e.component.columnOption("{{$dateColumn}}", "dataType", "date");
|
||||
<?php } ?>
|
||||
}
|
||||
}).dxDataGrid("instance");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
@@ -1,723 +0,0 @@
|
||||
<div id="line-weld-date-datagrid"></div>
|
||||
<script>
|
||||
$(function(){
|
||||
var editableColumns = [
|
||||
'vt_request_date',
|
||||
'test_laboratory_vt',
|
||||
'pwht_request_date',
|
||||
'test_laboratory_pwht',
|
||||
'ht_request_date',
|
||||
'test_laboratory_ht',
|
||||
'rt_request_date',
|
||||
'test_laboratory_rt',
|
||||
'ut_request_date',
|
||||
'test_laboratory_ut',
|
||||
'ut_type',
|
||||
'pt_test_date',
|
||||
'pt_request_date',
|
||||
'test_laboratory_pt',
|
||||
'mt_request_date',
|
||||
'test_laboratory_mt',
|
||||
'pmi_request_date',
|
||||
'test_laboratory_pmi',
|
||||
'spool_release_date',
|
||||
'ferrite_request_no',
|
||||
'test_laboratory_ferrite',
|
||||
'ferrite_request_date',
|
||||
];
|
||||
|
||||
function isEmpty(value){
|
||||
// console.log(value.trim().length);
|
||||
// console.log("result");
|
||||
// console.log(isEmpty(value));
|
||||
console.log(value);
|
||||
return (value == null || value.trim().length === 0);
|
||||
}
|
||||
|
||||
var testTypes = {!! json_encode_tr(array_keys(log_test_types())) !!}
|
||||
console.log(testTypes);
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=manage-ndt.line-weld-date<?php echo $query ?>',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}?module={{$id}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
console.log(e);
|
||||
var result = e.trim();
|
||||
var text = result; // Varsayılan olarak result'u text'e ata
|
||||
var type = "success";
|
||||
|
||||
if (result == "-1") {
|
||||
<?php $hour = setting('weld_log_edit_time_limit', false, 4); ?>
|
||||
text = "{{e2('The data has not been updated, because you cannot update this data anymore because :hour hour has passed. Please contact your administrator.', ['hour' => $hour])}}";
|
||||
type = "warning";
|
||||
Swal.fire('', text, type); // SweetAlert ile sonucu göster
|
||||
} else if (result == "0") {
|
||||
text = "Update could not be made, please contact your administrator.";
|
||||
type = "error";
|
||||
Swal.fire('', text, type); // SweetAlert ile sonucu göster
|
||||
} else if (isNaN(result)) { // Eğer result bir string ise
|
||||
/*
|
||||
text = result;
|
||||
type = "info";
|
||||
Swal.fire('', text, type); // SweetAlert ile sonucu göster
|
||||
*/
|
||||
}
|
||||
|
||||
// ID'yi başarı olarak göster ama Swal çalışmasın
|
||||
$("#ajax" + key)
|
||||
.removeClass("alert-info")
|
||||
.addClass("alert-success")
|
||||
.html("ID:#" + key + " success <br>" + result);
|
||||
|
||||
return deferred.resolve();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGrid = $("#line-weld-date-datagrid").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
|
||||
@include("components.table.datagrid.partials.js-excel")
|
||||
@include("components.table.datagrid.partials.js-right-menu")
|
||||
|
||||
columns: [
|
||||
{
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-success");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("General Info");
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
dataField: "line_number",
|
||||
caption: "{{e2('Line Number')}}",
|
||||
width: 250,
|
||||
fixed: true
|
||||
},
|
||||
{
|
||||
dataField: "iso_number",
|
||||
caption: "{{e2('Drawing')}}",
|
||||
width: 250,
|
||||
fixed: true
|
||||
},
|
||||
'joint_no',
|
||||
'type_of_joint',
|
||||
'type_of_welds',
|
||||
{
|
||||
dataField: "welding_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
'spool_number',
|
||||
'welder_1',
|
||||
'welder_2',
|
||||
'outside_diameter_1',
|
||||
'wall_thickness_1',
|
||||
'outside_diameter_2',
|
||||
'wall_thickness_2',
|
||||
'spool_status',
|
||||
'spool_zone',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-info");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("Test Laboratories");
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
dataField: 'test_laboratory_vt',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-info");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_vt");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "vt_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-info");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("vt_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy",
|
||||
},
|
||||
|
||||
|
||||
|
||||
{
|
||||
dataField: 'test_laboratory_rt',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-success");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_rt");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "rt_request_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-success");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("rt_request_date");
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
dataField: 'test_laboratory_ut',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_ut");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "ut_request_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("ut_request_date");
|
||||
},
|
||||
},
|
||||
{
|
||||
dataField: 'ut_type',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("ut_type");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: 'test_laboratory_pt',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-warning");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_pt");
|
||||
},
|
||||
},
|
||||
{
|
||||
dataField: "pt_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-warning");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("pt_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
|
||||
{
|
||||
dataField: 'test_laboratory_mt',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_mt");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "mt_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("mt_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
|
||||
{
|
||||
dataField: 'test_laboratory_pwht',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-success");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_pwht");
|
||||
},
|
||||
},
|
||||
{
|
||||
dataField: "pwht_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-success");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("pwht_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
|
||||
{
|
||||
dataField: 'test_laboratory_ht',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-info");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_ht");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "ht_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-info");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("ht_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{
|
||||
dataField: 'test_laboratory_pmi',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_pmi");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "pmi_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("pmi_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{
|
||||
dataField: 'test_laboratory_ferrite',
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-warning");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("test_laboratory_ferrite");
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "ferrite_request_date",
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-warning");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("ferrite_request_date");
|
||||
},
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
headerCellTemplate: function(element) {
|
||||
element.parent().addClass("table-danger");
|
||||
element.parent().addClass("text-center");
|
||||
element.html("Release Info");
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
dataField: "spool_release_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: false },
|
||||
toolbar: {
|
||||
items: [
|
||||
@include("components.table.datagrid.partials.js-toolbar")
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
allowUpdating: true,
|
||||
startEditAction: 'dblClick',
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
|
||||
onRowValidating: function(e) {
|
||||
<?php if(setting('ndt_date_validation_active') != 'Active') { ?>
|
||||
return;
|
||||
<?php } ?>
|
||||
|
||||
var data = $.extend({}, e.oldData, e.newData);
|
||||
|
||||
var parseDate = function(d) {
|
||||
if(!d) return null;
|
||||
if(d instanceof Date) return d;
|
||||
if(typeof d === 'string' && d.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
|
||||
var p = d.split('/');
|
||||
return new Date(p[2], p[1]-1, p[0]);
|
||||
}
|
||||
return new Date(d);
|
||||
};
|
||||
|
||||
var weldDate = parseDate(data.welding_date);
|
||||
|
||||
var getStageDate = function(fields) {
|
||||
var maxDate = null;
|
||||
fields.forEach(function(f) {
|
||||
if(data[f]) {
|
||||
var d = parseDate(data[f]);
|
||||
if(!maxDate || d > maxDate) maxDate = d;
|
||||
}
|
||||
});
|
||||
return maxDate;
|
||||
};
|
||||
|
||||
var dates = {
|
||||
vt: getStageDate(['vt_request_date', 'vt_test_date']),
|
||||
pmi: getStageDate(['pmi_request_date', 'pmi_test_date']),
|
||||
pt_mt: getStageDate(['pt_request_date', 'pt_test_date', 'mt_request_date', 'mt_test_date']),
|
||||
ut_rt: getStageDate(['ut_request_date', 'ut_test_date', 'rt_request_date', 'rt_test_date']),
|
||||
pwht: getStageDate(['pwht_request_date', 'pwht_test_date']),
|
||||
ht: getStageDate(['ht_request_date', 'ht_test_date'])
|
||||
};
|
||||
|
||||
var check = function(current, min, msg) {
|
||||
if(current && min && current < min) {
|
||||
e.isValid = false;
|
||||
e.errorText = msg;
|
||||
Swal.fire('', msg, 'error');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
if(!check(dates.vt, weldDate, "VT date cannot be before Welding date")) return;
|
||||
if(!check(dates.pmi, dates.vt || weldDate, "PMI date cannot be before VT/Welding date")) return;
|
||||
if(!check(dates.pt_mt, dates.pmi || dates.vt || weldDate, "PT/MT date cannot be before PMI/VT/Welding date")) return;
|
||||
if(!check(dates.ut_rt, dates.pt_mt || dates.pmi || dates.vt || weldDate, "UT/RT date cannot be before Previous NDT steps")) return;
|
||||
if(!check(dates.pwht, dates.ut_rt || dates.pt_mt || dates.pmi || dates.vt || weldDate, "PWHT date cannot be before NDT steps")) return;
|
||||
if(!check(dates.ht, dates.pwht || dates.ut_rt || dates.pt_mt || dates.pmi || dates.vt || weldDate, "HT date cannot be before PWHT/NDT steps")) return;
|
||||
},
|
||||
onEditorPreparing(e) {
|
||||
|
||||
if(e.parentType == "dataRow") {
|
||||
|
||||
// NDT Order Date Logic
|
||||
var row = e.row.data;
|
||||
|
||||
var parseDate = function(d) {
|
||||
if(!d) return null;
|
||||
if(d instanceof Date) return d;
|
||||
if(typeof d === 'string' && d.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
|
||||
var p = d.split('/');
|
||||
return new Date(p[2], p[1]-1, p[0]);
|
||||
}
|
||||
return new Date(d);
|
||||
};
|
||||
|
||||
var weldDate = parseDate(row.welding_date);
|
||||
|
||||
var getStageDate = function(fields) {
|
||||
var maxDate = null;
|
||||
fields.forEach(function(f) {
|
||||
if(row[f]) {
|
||||
var d = parseDate(row[f]);
|
||||
if(!maxDate || d > maxDate) maxDate = d;
|
||||
}
|
||||
});
|
||||
return maxDate;
|
||||
};
|
||||
|
||||
var dates = {
|
||||
vt: getStageDate(['vt_request_date', 'vt_test_date']),
|
||||
pmi: getStageDate(['pmi_request_date', 'pmi_test_date']),
|
||||
pt_mt: getStageDate(['pt_request_date', 'pt_test_date', 'mt_request_date', 'mt_test_date']),
|
||||
ut_rt: getStageDate(['ut_request_date', 'ut_test_date', 'rt_request_date', 'rt_test_date']),
|
||||
pwht: getStageDate(['pwht_request_date', 'pwht_test_date'])
|
||||
};
|
||||
|
||||
var minDate = null;
|
||||
|
||||
// weld_date <<< VT
|
||||
if (['vt_request_date', 'vt_test_date'].includes(e.dataField)) {
|
||||
minDate = weldDate;
|
||||
}
|
||||
// VT < PMI
|
||||
else if (['pmi_request_date', 'pmi_test_date'].includes(e.dataField)) {
|
||||
minDate = dates.vt || weldDate;
|
||||
}
|
||||
// PMI < PT, MT
|
||||
else if (['pt_request_date', 'pt_test_date', 'mt_request_date', 'mt_test_date'].includes(e.dataField)) {
|
||||
minDate = dates.pmi || dates.vt || weldDate;
|
||||
}
|
||||
// PT, MT < UT, RT
|
||||
else if (['ut_request_date', 'ut_test_date', 'rt_request_date', 'rt_test_date'].includes(e.dataField)) {
|
||||
minDate = dates.pt_mt || dates.pmi || dates.vt || weldDate;
|
||||
}
|
||||
// UT, RT < PWHT
|
||||
else if (['pwht_request_date', 'pwht_test_date'].includes(e.dataField)) {
|
||||
minDate = dates.ut_rt || dates.pt_mt || dates.pmi || dates.vt || weldDate;
|
||||
}
|
||||
// PWHT < HT
|
||||
else if (['ht_request_date', 'ht_test_date'].includes(e.dataField)) {
|
||||
minDate = dates.pwht || dates.ut_rt || dates.pt_mt || dates.pmi || dates.vt || weldDate;
|
||||
}
|
||||
|
||||
if (minDate) {
|
||||
if(e.editorOptions) {
|
||||
e.editorOptions.min = minDate;
|
||||
}
|
||||
e.validationRules = e.validationRules || [];
|
||||
e.validationRules = e.validationRules.filter(function(r) { return r.type !== 'range'; });
|
||||
e.validationRules.push({
|
||||
type: "range",
|
||||
min: minDate,
|
||||
message: "Date must be after " + minDate.toLocaleDateString()
|
||||
});
|
||||
}
|
||||
|
||||
console.log(e.row.data);
|
||||
if(e.dataType == "date" ) {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.displayFormat = 'dd/MM/yyyy';
|
||||
e.dataType = 'date';
|
||||
e.editorOptions.format = 'dd/MM/yyyy';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
}
|
||||
|
||||
if(e.dataField.indexOf('laboratory') != -1 || e.dataField == "test_laboratory_pwht") {
|
||||
e.editorName = 'dxSelectBox';
|
||||
e.editorOptions.dataSource = <?php echo json_encode_tr(
|
||||
db("subcontractors")
|
||||
->where("job_description", "NDT")
|
||||
->get()
|
||||
->pluck("company_name_en")
|
||||
->toArray()
|
||||
) ?>;
|
||||
|
||||
}
|
||||
|
||||
if(editableColumns.includes(e.dataField)) {
|
||||
e.editorOptions.readOnly = false;
|
||||
} else {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
|
||||
|
||||
if(e.dataField == "test_laboratory_vt") {
|
||||
if(!isEmpty(e.row.data.vt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_rt") {
|
||||
if(!isEmpty(e.row.data.rt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_ut") {
|
||||
if(!isEmpty(e.row.data.ut_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_pt") {
|
||||
if(!isEmpty(e.row.data.pt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_mt") {
|
||||
if(!isEmpty(e.row.data.mt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_ferrite") {
|
||||
if(!isEmpty(e.row.data.ferrite_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_pwht") {
|
||||
if(!isEmpty(e.row.data.pwht_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_ht") {
|
||||
if(!isEmpty(e.row.data.ht_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "test_laboratory_pmi") {
|
||||
if(!isEmpty(e.row.data.pmi_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "vt_request_date") {
|
||||
if(!isEmpty(e.row.data.vt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "rt_request_date") {
|
||||
if(!isEmpty(e.row.data.rt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "ut_request_date") {
|
||||
if(!isEmpty(e.row.data.ut_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "pt_request_date") {
|
||||
if(!isEmpty(e.row.data.pt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "mt_request_date") {
|
||||
if(!isEmpty(e.row.data.mt_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "ferrite_request_date") {
|
||||
if(!isEmpty(e.row.data.ferrite_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "pwht_request_date") {
|
||||
if(!isEmpty(e.row.data.pwht_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "ht_request_date") {
|
||||
if(!isEmpty(e.row.data.ht_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "pmi_request_date") {
|
||||
if(!isEmpty(e.row.data.pmi_result)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(isEmpty(e.row.data.welding_date)) { // eğer welding date ataması yapılmamışsa
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
onContentReady: function(e) {
|
||||
// DataGrid yükleme tamamlandığında çalışacak kod
|
||||
console.log(e);
|
||||
<?php
|
||||
foreach($dateColumns AS $dateColumn) {
|
||||
|
||||
?>
|
||||
// e.component.columnOption("{{$dateColumn}}", "dataType", "date");
|
||||
<?php } ?>
|
||||
}
|
||||
}).dxDataGrid("instance");
|
||||
|
||||
@include("components.table.datagrid.partials.js-shortcuts")
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
@@ -1,249 +0,0 @@
|
||||
<div id="joint-by-line-no-datagrid"></div>
|
||||
<script>
|
||||
$(function(){
|
||||
var editableColumns = [
|
||||
|
||||
'welding_date',
|
||||
'welder_1',
|
||||
'welder_2',
|
||||
'fit_up_date',
|
||||
'mechanic_supervisor',
|
||||
'mechanic_supervisor_control_date',
|
||||
'welding_supervisor',
|
||||
'welding_supervisor_control_date',
|
||||
'element_code_1',
|
||||
'pose_no_1',
|
||||
'member_no_1',
|
||||
'material_no_1',
|
||||
'nps_1',
|
||||
'thickness_by_asme_1',
|
||||
'outside_diameter_1',
|
||||
'wall_thickness_1',
|
||||
'certificate_number_of_1',
|
||||
'heat_number_1',
|
||||
'element_code_2',
|
||||
'member_no_2',
|
||||
'material_no_2',
|
||||
'nps_2',
|
||||
'outside_diameter_2',
|
||||
'wall_thickness_2',
|
||||
'certificate_number_of_2',
|
||||
'heat_number_2',
|
||||
|
||||
];
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=manage-welding.joint-by-line-no<?php echo $query ?>',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGrid2 = $("#joint-by-line-no-datagrid").dxDataGrid({
|
||||
dataSource: '?ajax=manage-welding.joint-by-line-no<?php echo $query ?>',
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
@include("components.table.datagrid.partials.js-excel")
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: false },
|
||||
toolbar: {
|
||||
items: [
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
icon: 'filter',
|
||||
text: '{{e2("Clear Filter")}}',
|
||||
onClick: function(e) {
|
||||
dataGrid2.clearFilter();
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
columns : [
|
||||
'iso_number',
|
||||
'spool_number',
|
||||
'joint_no',
|
||||
'type_of_joint',
|
||||
'type_of_welds',
|
||||
{
|
||||
dataField: "welding_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
'welder_1',
|
||||
'welder_2',
|
||||
{
|
||||
dataField: "fit_up_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
'mechanic_supervisor',
|
||||
{
|
||||
dataField: "mechanic_supervisor_control_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
'welding_supervisor',
|
||||
{
|
||||
dataField: "welding_supervisor_control_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
'element_code_1',
|
||||
'pose_no_1',
|
||||
'member_no_1',
|
||||
'material_no_1',
|
||||
'nps_1',
|
||||
'thickness_by_asme_1',
|
||||
'outside_diameter_1',
|
||||
'wall_thickness_1',
|
||||
'certificate_number_of_1',
|
||||
'heat_number_1',
|
||||
'element_code_2',
|
||||
'member_no_2',
|
||||
'material_no_2',
|
||||
'nps_2',
|
||||
'outside_diameter_2',
|
||||
'wall_thickness_2',
|
||||
'certificate_number_of_2',
|
||||
'heat_number_2',
|
||||
|
||||
|
||||
],
|
||||
editing: {
|
||||
allowUpdating: true,
|
||||
startEditAction: 'dblClick',
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch',
|
||||
|
||||
|
||||
},
|
||||
onEditorPreparing(e) {
|
||||
|
||||
if(e.parentType == "dataRow") {
|
||||
if(editableColumns.includes(e.dataField)) {
|
||||
e.editorOptions.readOnly = false;
|
||||
} else {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
|
||||
if(e.dataField == "welder_1" || e.dataField == "welder_2") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.searchEnabled = true;
|
||||
e.editorOptions.acceptCustomValue = false;
|
||||
e.editorOptions.dataSource = '{{autocomplete_type("real_welder_1")}}?row=' + JSON.stringify(e.row.data);
|
||||
e.editorOptions.onValueChanged = function(selectData) {
|
||||
e.setValue(Stellar.get_welder_id(selectData.value));
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataType == "date" ) {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.displayFormat = 'dd/MM/yyyy';
|
||||
e.dataType = 'date';
|
||||
e.editorOptions.format = 'dd/MM/yyyy';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
e.editorOptions.readOnly = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
onContentReady: function(e) {
|
||||
// DataGrid yükleme tamamlandığında çalışacak kod
|
||||
<?php
|
||||
foreach($dateColumns AS $dateColumn) {
|
||||
|
||||
?>
|
||||
// e.component.columnOption("{{$dateColumn}}", "dataType", "date");
|
||||
<?php } ?>
|
||||
}
|
||||
}).dxDataGrid("instance");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
@@ -1,183 +0,0 @@
|
||||
<div id="line-weld-date-datagrid"></div>
|
||||
<script>
|
||||
$(function(){
|
||||
var editableColumns = [
|
||||
|
||||
];
|
||||
|
||||
function isEmpty(value){
|
||||
// console.log(value.trim().length);
|
||||
// console.log("result");
|
||||
// console.log(isEmpty(value));
|
||||
console.log(value);
|
||||
return (value == null || value.trim().length === 0);
|
||||
}
|
||||
|
||||
var testTypes = {!! json_encode_tr(array_keys(log_test_types())) !!}
|
||||
console.log(testTypes);
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=manage-welding.line-weld-date<?php echo $query ?>',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGrid = $("#line-weld-date-datagrid").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
|
||||
@include("components.table.datagrid.partials.js-excel")
|
||||
@include("components.table.datagrid.partials.js-right-menu")
|
||||
|
||||
columns : [
|
||||
'wps_no',
|
||||
'welding_materials_1',
|
||||
'welding_materials_1_lot_no',
|
||||
'welding_materials_1_certificate_no',
|
||||
'welding_materials_2',
|
||||
'welding_materials_2_lot_no',
|
||||
'welding_materials_2_certificate_no',
|
||||
'welding_materials_3',
|
||||
'welding_materials_3_lot_no',
|
||||
'welding_materials_3_certificate_no',
|
||||
'test_package_no',
|
||||
'remarks',
|
||||
{
|
||||
dataField: "ndt_release_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
'spool_status',
|
||||
'spool_zone',
|
||||
|
||||
|
||||
],
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: false },
|
||||
toolbar: {
|
||||
items: [
|
||||
@include("components.table.datagrid.partials.js-toolbar")
|
||||
]
|
||||
},
|
||||
|
||||
onEditorPreparing(e) {
|
||||
|
||||
|
||||
if(e.parentType == "dataRow") {
|
||||
if(e.dataType == "date" ) {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.displayFormat = 'dd/MM/yyyy';
|
||||
e.dataType = 'date';
|
||||
e.editorOptions.format = 'dd/MM/yyyy';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
}
|
||||
|
||||
if(editableColumns.includes(e.dataField)) {
|
||||
e.editorOptions.readOnly = false;
|
||||
} else {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
},
|
||||
onContentReady: function(e) {
|
||||
// DataGrid yükleme tamamlandığında çalışacak kod
|
||||
console.log(e);
|
||||
<?php
|
||||
foreach($dateColumns AS $dateColumn) {
|
||||
|
||||
?>
|
||||
// e.component.columnOption("{{$dateColumn}}", "dataType", "date");
|
||||
<?php } ?>
|
||||
}
|
||||
}).dxDataGrid("instance");
|
||||
|
||||
@include("components.table.datagrid.partials.js-shortcuts")
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
@@ -1,166 +0,0 @@
|
||||
<?php
|
||||
$materialPlaningDetails = db("material_planing_details")
|
||||
->select("element_code")
|
||||
->selectRaw("SUM(quantity) qty")
|
||||
->groupBy("element_code")
|
||||
//->whereIn("recevied_status",['Delayed', 'Received'])
|
||||
->get()->pluck("qty", "element_code")->toArray();
|
||||
|
||||
$mtos = db("m_t_o_s")
|
||||
->select(
|
||||
"project",
|
||||
"line",
|
||||
"component_code_id",
|
||||
"description_en",
|
||||
"material",
|
||||
)
|
||||
->selectRaw("SUM(quantity) qty")
|
||||
->orderBy("qty", "DESC")
|
||||
->whereNotNull("quantity")
|
||||
->groupBy("line", "component_code_id")->paginate(setting('row_count'));
|
||||
?>
|
||||
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = [
|
||||
<?php foreach($mtos AS $mto) {
|
||||
$plQty = 0;
|
||||
$progress = false;
|
||||
$color = "white";
|
||||
if(isset($materialPlaningDetails[$mto->component_code_id])) {
|
||||
$plQty = $materialPlaningDetails[$mto->component_code_id];
|
||||
$materialPlaningDetails[$mto->component_code_id] -= $mto->qty;
|
||||
$percent = round(100*$plQty / $mto->qty,0);
|
||||
$progress = true;
|
||||
|
||||
if($percent > 350) {
|
||||
$color = "success";
|
||||
} else if($percent > 250) {
|
||||
$color = "warning";
|
||||
} else {
|
||||
$color = "danger";
|
||||
}
|
||||
}
|
||||
?>
|
||||
{
|
||||
project: "{{$mto->project}}",
|
||||
line: "{{$mto->line}}",
|
||||
component_code_id: "{{$mto->component_code_id}}",
|
||||
description_en: "{{$mto->description_en}}",
|
||||
material: "{{$mto->material}}",
|
||||
qty: {{$mto->qty}},
|
||||
pl_qty: {{$plQty}},
|
||||
percent: "{{$progress ? $percent : '-'}}",
|
||||
status_color: "{{$color}}"
|
||||
},
|
||||
<?php } ?>
|
||||
];
|
||||
|
||||
$("#dataGridMaterial").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: true },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
fileName: "CurrentMaterialStatus"
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
dataField: "project",
|
||||
caption: "{{e2('Project')}}",
|
||||
allowFiltering: true,
|
||||
allowSorting: true
|
||||
},
|
||||
{
|
||||
dataField: "line",
|
||||
caption: "{{e2('Iso Number')}}",
|
||||
allowFiltering: true
|
||||
},
|
||||
{
|
||||
dataField: "component_code_id",
|
||||
caption: "{{e2('Element Code')}}",
|
||||
allowFiltering: true
|
||||
},
|
||||
{
|
||||
dataField: "description_en",
|
||||
caption: "{{e2('Member')}}",
|
||||
allowFiltering: true
|
||||
},
|
||||
{
|
||||
dataField: "material",
|
||||
caption: "{{e2('Material')}}",
|
||||
allowFiltering: true
|
||||
},
|
||||
{
|
||||
dataField: "qty",
|
||||
caption: "{{e2('Quantity')}}",
|
||||
dataType: "number",
|
||||
allowFiltering: true
|
||||
},
|
||||
{
|
||||
dataField: "pl_qty",
|
||||
caption: "{{e2('P.L. Quantity')}}",
|
||||
dataType: "number",
|
||||
allowFiltering: true
|
||||
},
|
||||
{
|
||||
dataField: "percent",
|
||||
caption: "{{e2('Completable')}}",
|
||||
cellTemplate: function(container, options) {
|
||||
if(options.data.status_color !== "white") {
|
||||
$("<div>")
|
||||
.addClass("badge badge-" + options.data.status_color)
|
||||
.text("%" + options.value)
|
||||
.appendTo(container);
|
||||
} else {
|
||||
$("<div>")
|
||||
.text(options.value)
|
||||
.appendTo(container);
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
paging: {
|
||||
pageSize: 20
|
||||
},
|
||||
summary: {
|
||||
totalItems: [{
|
||||
column: "project",
|
||||
summaryType: "count",
|
||||
displayFormat: "Total: {0}"
|
||||
}]
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div id="dataGridMaterial"></div>
|
||||
|
||||
|
||||
<style>
|
||||
.badge-success {
|
||||
background-color: #28a745;
|
||||
color: white;
|
||||
}
|
||||
.badge-warning {
|
||||
background-color: #ffc107;
|
||||
color: black;
|
||||
}
|
||||
.badge-danger {
|
||||
background-color: #dc3545;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
$title = "Packing List Detail";
|
||||
$tableWidth="200%";
|
||||
$tableName = "material_planing_details";
|
||||
$listDatas = db($tableName);
|
||||
|
||||
if(getisset("detail")) {
|
||||
$detail = db("material_planings")->where("id", get("detail"))->first();
|
||||
$listDatas = $listDatas->where("pl_number", $detail->pl_number);
|
||||
}
|
||||
$listDatas = $listDatas->paginate(setting('row_count'));
|
||||
?>
|
||||
<div class="row">
|
||||
@include("components.blocks.module-block")
|
||||
</div>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
$title = "Material Planing";
|
||||
$tableWidth="100%";
|
||||
$tableName = "material_planings";
|
||||
|
||||
$relationDatas = [
|
||||
'recevied_status' => [
|
||||
'values' => [
|
||||
'Canceled',
|
||||
'Delayed',
|
||||
'Received',
|
||||
],
|
||||
'type' => 'manuel-select'
|
||||
]
|
||||
];
|
||||
?>
|
||||
<div class="row">
|
||||
@include("components.blocks.module-block")
|
||||
</div>
|
||||
@@ -1,55 +0,0 @@
|
||||
<tr>
|
||||
<td>{{$naksCertificate->id}}</td>
|
||||
<td><input type="text" name="certificate_no" value="{{$naksCertificate->certificate_no}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td >
|
||||
<select style="width:100px" name="short_name" data-id="{{$naksCertificate->id}}" table="naks_certificates" class="form-control edit">
|
||||
<option value="">{{e2("Select")}}</option>
|
||||
<?php foreach($naksCenters AS $naksCenter) {
|
||||
?>
|
||||
<option value="{{$naksCenter->center_no}}" {{$naksCenter->center_no==$naksCertificate->short_name ? "selected" : ""}}>#{{$naksCenter->id}} {{$naksCenter->center_no}} - {{$naksCenter->center_name}}</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="date" name="valid_from" value="{{$naksCertificate->valid_from}}" required class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="date" name="valid_to" value="{{$naksCertificate->valid_to}}" required class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="welding_method" value="{{$naksCertificate->welding_method}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="mat_group_1" value="{{$naksCertificate->mat_group_1}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="mat_group_2" value="{{$naksCertificate->mat_group_2}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="consumable" value="{{$naksCertificate->consumable}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="technology_category" value="{{$naksCertificate->technology_category}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="type" value="{{$naksCertificate->type}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="min" value="{{$naksCertificate->min}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="max" value="{{$naksCertificate->max}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="min2" value="{{$naksCertificate->min2}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="max2" value="{{$naksCertificate->max2}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="min_thick" value="{{$naksCertificate->min_thick}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="max_thick" value="{{$naksCertificate->max_thick}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="min_thick2" value="{{$naksCertificate->min_thick2}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="max_thick2" value="{{$naksCertificate->max_thick2}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td><input type="text" name="join_type" value="{{$naksCertificate->join_type}}" class="form-control edit" table="naks_certificates" data-id="{{$naksCertificate->id}}"></td>
|
||||
<td>
|
||||
<select name="pwth" data-id="{{$naksCertificate->id}}" class="form-control edit" table="naks_certificates">
|
||||
<option value="YES" {{$naksCertificate->pwth=='YES' ? "selected" : ""}}>{{e2("YES")}}</option>
|
||||
<option value="NO" {{$naksCertificate->pwth=='NO' ? "selected" : ""}}>{{e2("NO")}}</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><input type="text" name="connection_type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="join_view" class="form-control" id=""></td>
|
||||
<td><input type="text" name="angle_type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="position" class="form-control" id=""></td>
|
||||
<td>
|
||||
<select name="pre_heating" data-id="{{$naksCertificate->id}}" class="form-control edit" table="naks_certificates">
|
||||
<option value="YES" {{$naksCertificate->pre_heating=='YES' ? "selected" : ""}}>{{e2("YES")}}</option>
|
||||
<option value="NO" {{$naksCertificate->pre_heating=='NO' ? "selected" : ""}}>{{e2("NO")}}</option>
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="text" name="shielding_gas" class="form-control" id=""></td>
|
||||
<td><input type="text" name="electrode_coating" class="form-control" id=""></td>
|
||||
<td><input type="text" name="welding_equipment" class="form-control" id=""></td>
|
||||
<td><input type="text" name="performed_works_type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="remarks" class="form-control" id=""></td>
|
||||
<td>
|
||||
<a href="?delete={{$naksCertificate->id}}" {{delete_teyit()}} class="btn btn-danger btn-sm"><i class="fa fa-remove"></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1,59 +0,0 @@
|
||||
|
||||
<tr class="table-warning">
|
||||
<td><form action="?add-certificate" method="post">
|
||||
@csrf
|
||||
#</td>
|
||||
<td><input type="text" name="certificate_no" class="form-control" id=""></td>
|
||||
<td>
|
||||
<select name="short_name" id="" class=" form-control">
|
||||
<option value="">{{e2("Select")}}</option>
|
||||
<?php foreach($naksCenters AS $naksCenter) {
|
||||
?>
|
||||
<option value="{{$naksCenter->center_no}}" >{{$naksCenter->center_no}} - {{$naksCenter->center_name}}</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="date" name="valid_from" required class="form-control" id=""></td>
|
||||
<td><input type="date" name="valid_to" required class="form-control" id=""></td>
|
||||
<td><input type="text" name="welding_method" class="form-control" id=""></td>
|
||||
<td><input type="text" name="mat_group_1" class="form-control" id=""></td>
|
||||
<td><input type="text" name="mat_group_2" class="form-control" id=""></td>
|
||||
<td><input type="text" name="consumable" class="form-control" id=""></td>
|
||||
<td><input type="text" name="technology_category" class="form-control" id=""></td>
|
||||
<td><input type="text" name="type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="min" class="form-control" id=""></td>
|
||||
<td><input type="text" name="max" class="form-control" id=""></td>
|
||||
<td><input type="text" name="min2" class="form-control" id=""></td>
|
||||
<td><input type="text" name="max2" class="form-control" id=""></td>
|
||||
<td><input type="text" name="min_thick" class="form-control" id=""></td>
|
||||
<td><input type="text" name="max_thick" class="form-control" id=""></td>
|
||||
<td><input type="text" name="min_thick2" class="form-control" id=""></td>
|
||||
<td><input type="text" name="max_thick2" class="form-control" id=""></td>
|
||||
<td><input type="text" name="join_type" class="form-control" id=""></td>
|
||||
<td>
|
||||
<select name="pwth" id="" class="form-control">
|
||||
<option value="YES" selected>{{e2("YES")}}</option>
|
||||
<option value="NO">{{e2("NO")}}</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><input type="text" name="connection_type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="join_view" class="form-control" id=""></td>
|
||||
<td><input type="text" name="angle_type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="position" class="form-control" id=""></td>
|
||||
<td>
|
||||
<select name="pre_heating" id="" class="form-control">
|
||||
<option value="YES" selected>{{e2("YES")}}</option>
|
||||
<option value="NO">{{e2("NO")}}</option>
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="text" name="shielding_gas" class="form-control" id=""></td>
|
||||
<td><input type="text" name="electrode_coating" class="form-control" id=""></td>
|
||||
<td><input type="text" name="welding_equipment" class="form-control" id=""></td>
|
||||
<td><input type="text" name="performed_works_type" class="form-control" id=""></td>
|
||||
<td><input type="text" name="remarks" class="form-control" id=""></td>
|
||||
<td>
|
||||
<button class="btn btn-default btn-sm"><i class="fa fa-plus"></i></button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1,34 +0,0 @@
|
||||
<tr class="table-dark">
|
||||
<td data-resizable-column-id="sn">{{e2("SN")}}</td>
|
||||
<td data-resizable-column-id="certificate-no">{{e2("CERTIFICATE No")}}</td>
|
||||
<td data-resizable-column-id="stort_name">{{e2("Short Name")}}</td>
|
||||
<td data-resizable-column-id="valid_from">{{e2("Valid from")}}</td>
|
||||
<td data-resizable-column-id="valid_to">{{e2("Valid to")}}</td>
|
||||
<td data-resizable-column-id="welding_meth">{{e2("Welding Method")}}</td>
|
||||
<td data-resizable-column-id="mg1">{{e2("MAT. GROUP 1")}}</td>
|
||||
<td data-resizable-column-id="mg2">{{e2("MAT. GROUP 2")}}</td>
|
||||
<td data-resizable-column-id="wc">{{e2("Welding consumables")}}</td>
|
||||
<td data-resizable-column-id="category">{{e2("CATEGORY")}}</td>
|
||||
<td data-resizable-column-id="type">{{e2("TYPE")}}</td>
|
||||
<td data-resizable-column-id="min">{{e2("MIN")}}</td>
|
||||
<td data-resizable-column-id="max">{{e2("MAX")}}</td>
|
||||
<td data-resizable-column-id="min2">{{e2("MIN2")}}</td>
|
||||
<td data-resizable-column-id="max2">{{e2("MAX2")}}</td>
|
||||
<td data-resizable-column-id="mt">{{e2("MIN THICK")}}</td>
|
||||
<td data-resizable-column-id="mmt">{{e2("MAX THICK")}}</td>
|
||||
<td data-resizable-column-id="mt2">{{e2("MIN THICK 2")}}</td>
|
||||
<td data-resizable-column-id="mm2">{{e2("MAX THICK 2")}}</td>
|
||||
<td data-resizable-column-id="jt">{{e2("JOINT TYPE")}}</td>
|
||||
<td data-resizable-column-id="pwht">{{e2("PWHT")}}</td>
|
||||
<td data-resizable-column-id="ct">{{e2("CONNECTION TYPE")}}</td>
|
||||
<td data-resizable-column-id="jw">{{e2("JOINT VIEW")}}</td>
|
||||
<td data-resizable-column-id="at">{{e2("ANGLE TYPE")}}</td>
|
||||
<td data-resizable-column-id="position">{{e2("POSITION")}}</td>
|
||||
<td data-resizable-column-id="ph">{{e2("PRE HEATING")}}</td>
|
||||
<td data-resizable-column-id="sg">{{e2("Shielding gas")}}</td>
|
||||
<td data-resizable-column-id="toec">{{e2("Type of electrode coating")}}</td>
|
||||
<td data-resizable-column-id="towe">{{e2("Type of welding equipment")}}</td>
|
||||
<td data-resizable-column-id="pwt">{{e2("Performed works type")}}</td>
|
||||
<td data-resizable-column-id="remarks">{{e2("Remarks")}}</td>
|
||||
<td data-resizable-column-id="opt">{{e2("Opt")}}</td>
|
||||
</tr>
|
||||
@@ -1,20 +0,0 @@
|
||||
<div id="pdf-container">
|
||||
<canvas id="pdf-canvas" style="position: absolute; top: 0; left: 0; z-index: 1; display: block;"></canvas>
|
||||
<canvas id="fabric-canvas" style="position: absolute; top: 0; left: 0; z-index: 2; display: block;"></canvas>
|
||||
<div id="pdf-placeholder" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: #6c757d; background: #f8f9fa; z-index: 0;">
|
||||
<div style="text-align: center;">
|
||||
<i class="fas fa-file-pdf" style="font-size: 4rem; margin-bottom: 1rem; opacity: 0.3;"></i>
|
||||
<p style="font-size: 1.1rem;">Select a PDF file to start editing</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="pdf-loading-overlay" style="display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; align-items: center; justify-content: center; background: rgba(255, 255, 255, 0.9); z-index: 100; flex-direction: column;">
|
||||
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
<div class="mt-3 text-center">
|
||||
<h5 class="mb-1">Loading PDF...</h5>
|
||||
<p class="text-muted mb-0" id="pdf-loading-progress">0%</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,81 +0,0 @@
|
||||
<aside class="pdf-editor-sidebar">
|
||||
<button id="sidebar-toggle-btn" title="Toggle Sidebar">
|
||||
<i class="fas fa-chevron-right"></i>
|
||||
</button>
|
||||
<div>
|
||||
<div class="sidebar-section">
|
||||
<span class="section-title">Drawing Selection</span>
|
||||
<label for="drawing-type-select" class="form-label small mb-0">Select Drawing Type</label>
|
||||
<select id="drawing-type-select" class="form-control select2">
|
||||
<option value="">Select Drawing Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<label for="drawing-select" class="form-label small mb-0">Select Drawing</label>
|
||||
<select id="drawing-select" class="form-control select2" disabled>
|
||||
<option value="">Select Drawing</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<label for="pdfSelect" class="form-label small mb-0">Select PDF File</label>
|
||||
<select id="pdfSelect" class="form-control select2" disabled>
|
||||
<option value="">Select PDF File</option>
|
||||
</select>
|
||||
<span class="info-badge" id="pdf-file-hint">Latest revisions are highlighted in green.</span>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<label for="edit-type-select" class="form-label small mb-0">Edit Type</label>
|
||||
<select id="edit-type-select" class="form-control select2">
|
||||
<option value="joints">Adding Joints</option>
|
||||
<option value="joints_welder">Adding Joints & Welder</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="sidebar-section" id="welder-assignment-section" style="display: none;">
|
||||
<span class="section-title">Existing Weldmap Data</span>
|
||||
<div class="mb-3">
|
||||
<label for="assignment-spool-select" class="form-label small mb-0">Spool No</label>
|
||||
<select id="assignment-spool-select" class="form-control select2" disabled>
|
||||
<option value="">Select Spool</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="assignment-joint-select" class="form-label small mb-0">Joint No</label>
|
||||
<select id="assignment-joint-select" class="form-control select2" disabled>
|
||||
<option value="">Select Joint</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="assignment-welder-container">
|
||||
<label for="assignment-welder-select" class="form-label small mb-0">Welder ID</label>
|
||||
<select id="assignment-welder-select" class="form-control select2" disabled>
|
||||
<option value="">Select Welder</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="d-grid">
|
||||
<button type="button" class="btn btn-sm btn-outline-primary" id="assignment-add-btn" disabled>
|
||||
Add Shape
|
||||
</button>
|
||||
</div>
|
||||
<span class="assignment-helper" id="assignment-helper-text"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-divider"></div>
|
||||
<div class="sidebar-section action-buttons">
|
||||
<!-- Action buttons moved to toolbar -->
|
||||
</div>
|
||||
<div class="sidebar-divider"></div>
|
||||
<div class="sidebar-section" id="layers-section">
|
||||
<span class="section-title">Layers</span>
|
||||
<div id="layers-panel" style="max-height: 250px; overflow-y: auto; font-size: 0.8rem; border: 1px solid #e9ecef; border-radius: 4px; background: #f8f9fa;">
|
||||
<div id="layers-empty" class="text-muted p-2 text-center">No layers.</div>
|
||||
<ul id="layers-list" class="list-unstyled mb-0"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar-divider"></div>
|
||||
<div class="sidebar-section" id="action-history-section">
|
||||
<span class="section-title">Action History</span>
|
||||
<div id="action-history-panel" style="max-height: 200px; overflow-y: auto; font-size: 0.8rem;">
|
||||
<div id="action-history-empty" class="text-muted">No actions yet.</div>
|
||||
<ul id="action-history-list" class="list-unstyled mb-0"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
@@ -1,350 +0,0 @@
|
||||
<style>
|
||||
.fa-clock-o:before, .fa-star-o:before, .fa-trash-o:before, .fa-file-o:before {
|
||||
font-family: "Font Awesome 6 Free" !important;
|
||||
font-weight: 400 !important;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.form-label.small {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.form-label {
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.form-select-sm {
|
||||
font-size: 0.875rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
height: calc(1.5em + 0.5rem + 2px);
|
||||
}
|
||||
.btn-sm {
|
||||
padding: 0.25rem 0.5rem;
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
#pdf-container {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
border: 2px solid rgb(233, 236, 239);
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
background: rgb(248, 249, 250);
|
||||
box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 4px;
|
||||
top: 67px;
|
||||
z-index: 1029;
|
||||
left: 0px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
#pdf-container canvas {
|
||||
max-width: 100%;
|
||||
}
|
||||
.btn.active {
|
||||
box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
|
||||
}
|
||||
|
||||
TRUNÇGİL TEKNOLOJİ SANAYİ VE TİCARET LİMİTED ŞİRKETİ
|
||||
VN: 8591492435 / VD: ŞAHİNBEY
|
||||
Adres: ÇAMTEPE MAH. MAHMUT TEVFİK ATAY BUL. GAZİANTEP TEKNOPARK NO: 4A İÇ KAPI NO: 1 ŞAHİNBEY / GAZİANTEP
|
||||
info@truncgil.com.tr
|
||||
Ticaret Sicil no: 76146
|
||||
.text-muted {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.pdf-editor-wrapper {
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
min-height: 78vh;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.pdf-editor-sidebar {
|
||||
width: 300px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
border-left: 1px solid #e9ecef;
|
||||
padding: 1.25rem;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 67px;
|
||||
height: calc(100vh - 67px);
|
||||
background: #fff;
|
||||
z-index: 1030;
|
||||
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
box-shadow: -2px 0 8px rgba(0,0,0,0.05);
|
||||
overflow-y: auto;
|
||||
}
|
||||
.pdf-editor-sidebar.collapsed {
|
||||
transform: translateX(100%);
|
||||
box-shadow: none;
|
||||
}
|
||||
#sidebar-toggle-btn {
|
||||
position: absolute;
|
||||
left: -40px;
|
||||
top: 20px;
|
||||
width: 40px;
|
||||
height: 48px;
|
||||
background: #fff;
|
||||
border: 1px solid #e9ecef;
|
||||
border-right: none;
|
||||
border-radius: 8px 0 0 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
box-shadow: -4px 2px 8px rgba(0,0,0,0.05);
|
||||
color: #6c757d;
|
||||
font-size: 1.1rem;
|
||||
transition: all 0.2s ease;
|
||||
z-index: 1031;
|
||||
}
|
||||
#sidebar-toggle-btn:hover {
|
||||
color: #0d6efd;
|
||||
width: 44px;
|
||||
left: -44px;
|
||||
}
|
||||
.pdf-editor-sidebar .sidebar-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.pdf-editor-sidebar .sidebar-inline {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
align-items: center;
|
||||
}
|
||||
.pdf-editor-sidebar .sidebar-inline .form-select-sm,
|
||||
.pdf-editor-sidebar .sidebar-inline .form-control {
|
||||
flex: 1;
|
||||
}
|
||||
.pdf-editor-sidebar .section-title {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
color: #6c757d;
|
||||
}
|
||||
.pdf-editor-sidebar .sidebar-divider {
|
||||
height: 1px;
|
||||
background: #e9ecef;
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
.pdf-editor-main {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
min-width: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
.pdf-editor-toolbar-container {
|
||||
position: fixed;
|
||||
bottom: 30px;
|
||||
top: auto;
|
||||
z-index: 2000;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
background: transparent;
|
||||
border-bottom: none;
|
||||
backdrop-filter: none;
|
||||
pointer-events: none;
|
||||
}
|
||||
.pdf-editor-toolbar {
|
||||
pointer-events: auto;
|
||||
width: min(940px, 100%);
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75rem;
|
||||
align-items: stretch;
|
||||
border-radius: 12px;
|
||||
padding: 0.75rem 1rem;
|
||||
background: #ffffff;
|
||||
box-shadow: 0 5px 20px rgba(0,0,0,0.2);
|
||||
border: 1px solid rgba(0, 0, 0, 0.02);
|
||||
}
|
||||
.pdf-editor-toolbar .toolbar-groups {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75rem;
|
||||
width: 100%;
|
||||
}
|
||||
.pdf-editor-toolbar .toolbar-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.35rem;
|
||||
flex-wrap: nowrap;
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.toolbar-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.35rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.toolbar-section.toolbar-buttons {
|
||||
flex: 1 1 auto;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
.toolbar-section.toolbar-zoom {
|
||||
flex: 0 0 auto;
|
||||
gap: 0.35rem;
|
||||
margin-left: auto;
|
||||
margin-right: 0.75rem;
|
||||
}
|
||||
.toolbar-section.toolbar-pages {
|
||||
flex: 0 0 auto;
|
||||
gap: 0.35rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
.toolbar-section.toolbar-pages .btn,
|
||||
.toolbar-section.toolbar-pages .form-control {
|
||||
margin: 0;
|
||||
}
|
||||
.toolbar-button {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 1px solid #ced4da;
|
||||
background: #ffffff;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
padding: 0;
|
||||
}
|
||||
.toolbar-button.active,
|
||||
.toolbar-button:hover {
|
||||
border-color: #0d6efd;
|
||||
color: #0d6efd;
|
||||
box-shadow: 0 2px 8px rgba(13, 110, 253, 0.15);
|
||||
}
|
||||
.toolbar-button.disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.toolbar-button i {
|
||||
font-size: 1rem;
|
||||
}
|
||||
.color-picker-wrapper {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
padding: 0.15rem 0.5rem;
|
||||
border: 1px solid #ced4da;
|
||||
border-radius: 999px;
|
||||
background: #ffffff;
|
||||
height: 34px;
|
||||
}
|
||||
.color-picker-wrapper input[type="color"] {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border: none;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
}
|
||||
.toolbar-section.toolbar-zoom .btn,
|
||||
.toolbar-section.toolbar-zoom span,
|
||||
.toolbar-section.toolbar-pages .btn,
|
||||
.toolbar-section.toolbar-pages span,
|
||||
.toolbar-section.toolbar-pages .form-control {
|
||||
height: 32px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
}
|
||||
#zoom-level {
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
min-width: 45px;
|
||||
text-align: center;
|
||||
padding: 0 0.3rem;
|
||||
}
|
||||
#sheet-info {
|
||||
min-width: 80px;
|
||||
height: 32px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 0.4rem;
|
||||
}
|
||||
.pdf-pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0.15rem 0.55rem;
|
||||
border-radius: 999px;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.03em;
|
||||
margin-left: 0.35rem;
|
||||
}
|
||||
.pdf-pill.latest {
|
||||
background: rgba(25, 135, 84, 0.12);
|
||||
color: #198754;
|
||||
}
|
||||
.pdf-pill.archived {
|
||||
background: rgba(108, 117, 125, 0.12);
|
||||
color: #6c757d;
|
||||
}
|
||||
.pdf-pill.missing {
|
||||
background: rgba(220, 53, 69, 0.12);
|
||||
color: #dc3545;
|
||||
}
|
||||
.assignment-helper {
|
||||
font-size: 0.8rem;
|
||||
color: #6c757d;
|
||||
}
|
||||
.pdf-editor-sidebar .action-buttons {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.pdf-editor-sidebar .action-buttons .btn {
|
||||
width: 100%;
|
||||
}
|
||||
.pdf-editor-sidebar .empty-state {
|
||||
font-size: 0.8rem;
|
||||
color: #adb5bd;
|
||||
}
|
||||
.pdf-editor-sidebar select:disabled {
|
||||
background: #f8f9fa;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.pdf-editor-sidebar .info-badge {
|
||||
font-size: 0.75rem;
|
||||
color: #6c757d;
|
||||
}
|
||||
.active-version {
|
||||
background-color: #007bff !important;
|
||||
color: white !important;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#welder-assignment-section {
|
||||
background-color: #f1f3f5;
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #e9ecef;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
#welder-assignment-section .select2-container {
|
||||
width: 100% !important;
|
||||
display: block;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
</style>
|
||||
@@ -1,79 +0,0 @@
|
||||
<div class="pdf-editor-toolbar-container">
|
||||
<div class="pdf-editor-toolbar">
|
||||
<div class="toolbar-groups">
|
||||
<div class="toolbar-row">
|
||||
<div class="toolbar-section toolbar-buttons">
|
||||
<button type="button" class="toolbar-button active" id="btn-select" title="Select">
|
||||
<i class="fas fa-mouse-pointer"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-hand" title="Hand Tool (Pan)">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-line" title="Draw Line">
|
||||
<i class="fas fa-minus"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-arrow" title="Draw Arrow">
|
||||
<i class="fas fa-location-arrow"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-circle" title="Circle">
|
||||
<i class="fas fa-circle"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-triangle" title="Triangle">
|
||||
<i class="fas fa-play"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-rect" title="Rectangle">
|
||||
<i class="fas fa-square"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-text" title="Text">
|
||||
<i class="fas fa-font"></i>
|
||||
</button>
|
||||
<div class="color-picker-wrapper" title="Stroke Color">
|
||||
<i class="fas fa-eye-dropper"></i>
|
||||
<input type="color" id="stroke-color-picker" value="#ff0000" />
|
||||
</div>
|
||||
<button type="button" class="toolbar-button" id="btn-undo" title="Undo">
|
||||
<i class="fas fa-undo"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-redo" title="Redo">
|
||||
<i class="fas fa-redo"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-delete-selected" title="Delete Selected">
|
||||
<i class="fas fa-trash"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-clear" title="Clear Current Page - Remove all drawings from current page and save changes">
|
||||
<i class="fas fa-eraser"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-save" title="Save Current Page - Save current page annotations to database">
|
||||
<i class="fas fa-save"></i>
|
||||
</button>
|
||||
<button type="button" class="toolbar-button" id="btn-export" title="Export PDF with Annotations">
|
||||
<i class="fas fa-download"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="toolbar-section toolbar-zoom">
|
||||
<button type="button" class="btn btn-sm btn-outline-primary" id="btn-zoom-out" title="Zoom Out">
|
||||
<i class="fas fa-search-minus"></i>
|
||||
</button>
|
||||
<span id="zoom-level">100%</span>
|
||||
<button type="button" class="btn btn-sm btn-outline-primary" id="btn-zoom-in" title="Zoom In">
|
||||
<i class="fas fa-search-plus"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary" id="btn-zoom-reset" title="Reset Zoom">
|
||||
<i class="fas fa-undo"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="toolbar-section toolbar-pages">
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary" id="btn-prev-page" disabled>
|
||||
<i class="fas fa-chevron-left"></i>
|
||||
</button>
|
||||
<div id="sheet-info" class="form-control form-control-sm text-center">
|
||||
<span id="current-page">1</span> / <span id="total-pages">1</span>
|
||||
</div>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary" id="btn-next-page" disabled>
|
||||
<i class="fas fa-chevron-right"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,608 +0,0 @@
|
||||
<script>
|
||||
|
||||
|
||||
var material_group_test_pieces = <?php echo json_encode_tr($material_group_test_pieces_data) ?>;
|
||||
console.log(material_group_test_pieces);
|
||||
|
||||
function tagBoxFocusOut(e, cellElement, cellInfo) {
|
||||
console.log("tagBoxFocusOut");
|
||||
console.log(e);
|
||||
console.log(cellElement);
|
||||
console.log(cellInfo);
|
||||
var value = cellInfo.value;
|
||||
var rowIndex = cellInfo.rowIndex;
|
||||
var column = cellInfo.column.dataField;
|
||||
console.log(column);
|
||||
var dataGrid = $("#dataGrid").dxDataGrid("instance");
|
||||
if(column == "brend") {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(column == "welding_process") {
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(column == "naks_technology") {
|
||||
console.log("naks_technology");
|
||||
var values = value.split(" + ");
|
||||
var selectMathGroup = [];
|
||||
var selectWorkType = [];
|
||||
var selectWeldingMethods = [];
|
||||
var selectWeldingMethodsDetail = [];
|
||||
var selectBrends = [];
|
||||
var selectTechnologyCategory = [];
|
||||
var regex = /-(\d+)$/;
|
||||
dataGrid.cellValue(rowIndex, "qualitication_pwht", "");
|
||||
$.each(values, function(index, item) {
|
||||
var match = item.match(regex);
|
||||
var result = match ? match[1] : null;
|
||||
$.getJSON("{{row_detail_url("naks_certificates","certificate_no")}}?value=" + result, function(resultJSONItem) {
|
||||
dataGrid.cellValue(rowIndex, "qualitication_pwht", resultJSONItem.pwht);
|
||||
|
||||
/*
|
||||
// console.log("resultJSONItem");
|
||||
// console.log(resultJSONItem);
|
||||
var mathGroup = resultJSONItem.mat_group_1.split("-");
|
||||
var mathGroup2 = resultJSONItem.mat_group_2.split("-");
|
||||
// console.log("mathGroup");
|
||||
// console.log(mathGroup);
|
||||
// console.log(mathGroup2);
|
||||
var weldingConsumables = resultJSONItem.welding_consumable.split(",");
|
||||
var workType = resultJSONItem.work_type;
|
||||
|
||||
if(!selectTechnologyCategory.includes(resultJSONItem.technology_category))
|
||||
selectTechnologyCategory.push(resultJSONItem.technology_category);
|
||||
|
||||
if(!selectMathGroup.includes(mathGroup[1].trim()))
|
||||
selectMathGroup.push(mathGroup[1].trim());
|
||||
|
||||
if(!selectMathGroup.includes(mathGroup2[1].trim()))
|
||||
selectMathGroup.push(mathGroup2[1].trim());
|
||||
|
||||
|
||||
|
||||
|
||||
if(!selectWorkType.includes(workType.trim()))
|
||||
selectWorkType.push(workType.trim());
|
||||
*/
|
||||
|
||||
if(!selectWeldingMethods.includes(resultJSONItem.welding_method.trim())) {
|
||||
selectWeldingMethods.push(resultJSONItem.welding_method.trim());
|
||||
|
||||
$.getJSON("{{autocomplete_url("welding_consumables", "short_name")}}&all&values=" + selectMathGroup.join(","), function(weldingConsumablesJSON) {
|
||||
// console.log("weldingConsumablesJSON");
|
||||
// console.log(weldingConsumablesJSON);
|
||||
|
||||
$.each(weldingConsumablesJSON, function(wCIndex, wCItem) {
|
||||
selectBrends.push(wCItem.brend);
|
||||
localStorage.setItem("selectBrends", JSON.stringify(selectBrends));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$.getJSON("{{autocomplete_url("welding_methods", "ru_short_name")}}&all&values=" + selectWeldingMethods.join(","), function(weldingMethodsJSON) {
|
||||
// console.log("weldingMethodsJSON");
|
||||
// console.log(weldingMethodsJSON);
|
||||
|
||||
$.each(weldingMethodsJSON, function(wMIndex, wMItem) {
|
||||
var wMValue = (wMItem.ru_short_name + "/" + wMItem.en_welding_number).trim();
|
||||
if(!selectWeldingMethodsDetail.includes(wMValue)) {
|
||||
selectWeldingMethodsDetail.push(wMValue);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
localStorage.setItem("selectWeldingMethodsDetail", JSON.stringify(selectWeldingMethodsDetail));
|
||||
if(selectWeldingMethodsDetail.length == 1) {
|
||||
dataGrid.cellValue(rowIndex, "welding_process", selectWeldingMethodsDetail.join(","));
|
||||
dataGrid.cellValue(rowIndex, "qualitication_process", selectWeldingMethodsDetail.join(","));
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
localStorage.setItem("selectWorkType", JSON.stringify(selectWorkType));
|
||||
localStorage.setItem("selectWeldingMethods", JSON.stringify(selectWeldingMethods));
|
||||
localStorage.setItem("selectMathGroup", JSON.stringify(selectMathGroup));
|
||||
localStorage.setItem("selectTechnologyCategory", JSON.stringify(selectTechnologyCategory));
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function setCellValue(data) {
|
||||
|
||||
}
|
||||
|
||||
function asyncAjax(url){
|
||||
return new Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: "GET",
|
||||
dataType: "json",
|
||||
beforeSend: function() {
|
||||
},
|
||||
success: function(data) {
|
||||
resolve(data) // Resolve promise and when success
|
||||
},
|
||||
error: function(err) {
|
||||
reject(err) // Reject the promise and go to catch()
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function editorPreparing(e, dataRow) {
|
||||
var options = e.editorOptions;
|
||||
var rowIndex = e.row.rowIndex;
|
||||
var rowData = e.row.data;
|
||||
var dataGrid = $("#dataGrid").dxDataGrid("instance");
|
||||
var exceptValue = ['undefined', 'null'];
|
||||
var column = e.dataField;
|
||||
var urlRowData = encodeURIComponent(JSON.stringify(rowData));
|
||||
|
||||
console.log("catch e");
|
||||
console.log(e);
|
||||
var certificateNoValues = [];
|
||||
try {
|
||||
var naksTechnology = dataRow.naks_technology.trim().split(" + ");
|
||||
$.each(naksTechnology, function(naksIndex, naksItem) {
|
||||
var regex = /-(\d+)$/;
|
||||
var match = naksItem.match(regex);
|
||||
var result = match ? match[1] : null;
|
||||
certificateNoValues.push(result);
|
||||
|
||||
});
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(e.dataField == "technology_category") {
|
||||
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.dataSource = new DevExpress.data.ODataStore({
|
||||
url: '{{autocomplete_url2("naks_certificates", "technology_category")}}?column=certificate_no&values=' + certificateNoValues,
|
||||
});
|
||||
options.onValueChanged = function(selectData) {
|
||||
e.setValue(selectData.value);
|
||||
rowData.technology_category = selectData.value;
|
||||
$.getJSON("{{autocomplete_type("welding_process")}}?row=" + urlRowData, function(weldingProcessJSON) {
|
||||
console.log("weldingProcessJSON");
|
||||
console.log(weldingProcessJSON);
|
||||
if(weldingProcessJSON.length == 1) {
|
||||
dataGrid.cellValue(rowIndex, "welding_process", weldingProcessJSON.join(","));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
//JSON.parse(localStorage.getItem("selectTechnologyCategory"));
|
||||
}
|
||||
|
||||
|
||||
if(e.dataField == "base_metal_used_for_pqr_coupon") {
|
||||
|
||||
e.editorName = "dxTagBox";
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
opened: true,
|
||||
|
||||
dataSource: new DevExpress.data.ODataStore({
|
||||
url: '{{autocomplete_type("base_metal_used_for_pqr_coupon")}}?row=' + urlRowData,
|
||||
}),
|
||||
|
||||
//JSON.parse(localStorage.getItem("selectBrends")),
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
}
|
||||
if(e.dataField == "brend") {
|
||||
|
||||
e.editorName = "dxTagBox";
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
opened: true,
|
||||
|
||||
dataSource: new DevExpress.data.ODataStore({
|
||||
url: '{{autocomplete_type("pqr_brend")}}?row=' + urlRowData,
|
||||
}),
|
||||
|
||||
//JSON.parse(localStorage.getItem("selectBrends")),
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
localStorage.setItem("selectBrends", valueEvent.value.join(","));
|
||||
|
||||
},
|
||||
onFocusOut(valueEvent) {
|
||||
console.log("onFocusOut");
|
||||
console.log(valueEvent);
|
||||
console.log(e);
|
||||
|
||||
var values = localStorage.getItem("selectBrends").split(",");
|
||||
|
||||
console.log(values);
|
||||
var selectedNumbers = [];
|
||||
var selectedFilterMetals = [];
|
||||
|
||||
|
||||
$.each(values, function(index, item) {
|
||||
console.log(item);
|
||||
$.getJSON("{{row_detail_url("welding_consumables","brend")}}?value=" + item, function(json) {
|
||||
if(json.aws_class != null) {
|
||||
selectedNumbers.push(json.aws_class + "-" + json.aws_specification);
|
||||
|
||||
}
|
||||
if(json.gost_class != null) {
|
||||
selectedFilterMetals.push(json.gost_class + "-" + json.gost_specification);
|
||||
}
|
||||
dataGrid.cellValue(rowIndex, "filter_metals_aws_sfa_no_class", selectedNumbers.join(" + "));
|
||||
dataGrid.cellValue(rowIndex, "filter_metals_gost", selectedFilterMetals.join(" + "));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(" + ") : [];
|
||||
}
|
||||
|
||||
|
||||
if(e.dataField == "welding_process") {
|
||||
e.editorName = "dxTagBox";
|
||||
console.log("dxTagBox");
|
||||
console.log(e.value);
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
dataSource: '{{autocomplete_type("welding_process")}}?row=' + urlRowData,
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
localStorage.setItem("qualitication_process", valueEvent.value.join(","));
|
||||
dataGrid.cellValue(rowIndex, "qualitication_process", valueEvent.value.join(","));
|
||||
},
|
||||
onFocusOut(focusEvent) {
|
||||
|
||||
var values = localStorage.getItem("selectWeldingProcess").split(",");
|
||||
var selectedNumbers = [];
|
||||
var selectedFilterMetals = [];
|
||||
//dataGrid.cellValue(rowIndex, "qualitication_process", "");
|
||||
var selectedNumbers = [];
|
||||
/*
|
||||
$.each(values, function(index, item) {
|
||||
item = item.split("/")[0];
|
||||
$.getJSON("{{row_detail_url("welding_methods","ru_short_name")}}?value=" + item, function(json) {
|
||||
selectedNumbers.push(json.en_welding_number);
|
||||
dataGrid.cellValue(rowIndex, "qualitication_process", selectedNumbers.join(" + "));
|
||||
});
|
||||
|
||||
});
|
||||
*/
|
||||
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
|
||||
}
|
||||
if(e.dataField == "qualitication_group_of_parent_material") {
|
||||
e.editorName = "dxTagBox";
|
||||
console.log("dxTagBox");
|
||||
console.log(e.value);
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
dataSource: '{{autocomplete_type("qualitication_group_of_parent_material")}}?row=' + urlRowData,
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(e.dataField == "p_no_from") {
|
||||
options.onValueChanged = function(selectData) {
|
||||
e.setValue(selectData.value);
|
||||
console.log("p_no_from");
|
||||
console.log(material_group_test_pieces[selectData.value]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(e.dataField == "base_metal") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.opened = true;
|
||||
e.editorOptions.openOnFieldClick = true;
|
||||
e.editorOptions.dataSource = '{{autocomplete_type("base_metal")}}?row=' + urlRowData;
|
||||
}
|
||||
|
||||
if (e.dataField === "shielding_gas") {
|
||||
e.editorOptions.onValueChanged = function(args) {
|
||||
// Seçilen değeri al
|
||||
const selectedValue = args.value;
|
||||
e.setValue(args.value);
|
||||
|
||||
// Satırı güncelle
|
||||
const dataGrid = e.component;
|
||||
const rowIndex = e.row.rowIndex;
|
||||
|
||||
dataGrid.cellValue(rowIndex, "qualitication_backing_gas", selectedValue);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (e.dataField == "type_grade_2") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.searchEnabled = true;
|
||||
e.editorOptions.dataSource = '{{autocomplete_type("type_grade_2")}}?row=' + urlRowData;
|
||||
|
||||
options.onValueChanged = function (selectData) {
|
||||
e.setValue(selectData.value);
|
||||
$.getJSON("{{row_detail_url('materials', 'steel_grade')}}?all&value=" + selectData.value, function (materialJSON) {
|
||||
dataGrid.cellValue(rowIndex, "russian_standart_group_no_2", materialJSON.ru_group);
|
||||
dataGrid.cellValue(rowIndex, "p_no_to", materialJSON.asme_number);
|
||||
|
||||
// p_no_from ve p_no_to birleştirilerek yeni isteğin yapılması
|
||||
let p_no_from = dataGrid.cellValue(rowIndex, "p_no_from");
|
||||
let p_no_to = materialJSON.asme_number;
|
||||
|
||||
if (p_no_from && p_no_to) {
|
||||
let combinedValue = p_no_from + "+" + p_no_to;
|
||||
$.getJSON("{{row_detail_url('material_group_test_pieces', 'incoming_value')}}?value=" + encodeURIComponent(combinedValue), function (responseJSON) {
|
||||
dataGrid.cellValue(rowIndex, "qualitication_group_of_parent_material", responseJSON.provision_value);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
if (e.dataField == "type_grade_1") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.searchEnabled = true;
|
||||
e.editorOptions.dataSource = '{{autocomplete_type("type_grade_1")}}?row=' + urlRowData;
|
||||
|
||||
options.onValueChanged = function (selectData) {
|
||||
e.setValue(selectData.value);
|
||||
$.getJSON("{{row_detail_url('materials', 'steel_grade')}}?all&value=" + selectData.value, function (materialJSON) {
|
||||
dataGrid.cellValue(rowIndex, "russian_standart_group_no", materialJSON.ru_group);
|
||||
dataGrid.cellValue(rowIndex, "p_no_from", materialJSON.asme_number);
|
||||
|
||||
// p_no_from ve p_no_to birleştirilerek yeni isteğin yapılması
|
||||
let p_no_from = materialJSON.asme_number;
|
||||
let p_no_to = dataGrid.cellValue(rowIndex, "p_no_to");
|
||||
|
||||
if (p_no_from && p_no_to) {
|
||||
let combinedValue = p_no_from + "+" + p_no_to;
|
||||
$.getJSON("{{row_detail_url('material_group_test_pieces', 'incoming_value')}}?value=" + encodeURIComponent(combinedValue), function (responseJSON) {
|
||||
dataGrid.cellValue(rowIndex, "qualitication_group_of_parent_material", responseJSON.provision_value);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
if(e.dataField == "pwht_temp_range") {
|
||||
options.onValueChanged = function(selectData) {
|
||||
e.setValue(selectData.value);
|
||||
var pwht = "NO";
|
||||
if(selectData.value !="") {
|
||||
pwht = "YES";
|
||||
}
|
||||
dataGrid.cellValue(rowIndex, "qualitication_pwht", pwht);
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "pqr_no") {
|
||||
e.editorName = 'dxTextBox';
|
||||
e.editorOptions.mask = '{{number_mask("PQR")}}';
|
||||
e.editorOptions.useMaskedValue = true;
|
||||
}
|
||||
|
||||
if(e.dataField.indexOf("date") !== -1) {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
if(e.dataField == "date") {
|
||||
|
||||
e.validationRules[0].type = "async";
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(e.dataField == "approved_date") {
|
||||
e.editorOptions.min = rowData.date;
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "outside_diameter") {
|
||||
options.onValueChanged = function(selectData) {
|
||||
e.setValue(selectData.value);
|
||||
$.getJSON("{{row_detail_url("materials","steel_grade")}}?value=" + dataRow.type_grade_1, function(type_grade_json) {
|
||||
|
||||
var material_type = "Steel";
|
||||
var min;
|
||||
var max;
|
||||
var value = selectData.value;
|
||||
var shortName = type_grade_json.short_name;
|
||||
|
||||
if(['AS', 'SS', 'CS'].includes(shortName)) {
|
||||
material_type = "Steel";
|
||||
if(value<=25) {
|
||||
min = value;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>25 && value<= 150) {
|
||||
min = 25;//value;//0.5 * value;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>150) {
|
||||
min = 0.5 * value;
|
||||
max = "";
|
||||
}
|
||||
}
|
||||
|
||||
if(shortName == "NI") {
|
||||
material_type = "Nickel";
|
||||
|
||||
if(value<=25) {
|
||||
min = value;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>25 && value<= 150) {
|
||||
min = 25;//0.5 * value;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>150) {
|
||||
min = 0.5 * value;
|
||||
max = "";
|
||||
}
|
||||
}
|
||||
|
||||
if(shortName == "AL") {
|
||||
material_type = "Aluminium";
|
||||
|
||||
if(value<=125) {
|
||||
min = value * 0.5;
|
||||
max = value * 2.5;
|
||||
}
|
||||
|
||||
if(value>125) {
|
||||
min = 0.5 * value;
|
||||
max = 2.5 * value;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
dataGrid.cellValue(rowIndex, "qualitication_outside_diameter_min", min);
|
||||
dataGrid.cellValue(rowIndex, "qualitication_outside_diameter_max", max);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(e.dataField == "thickness") {
|
||||
options.onValueChanged = function(selectData) {
|
||||
e.setValue(selectData.value);
|
||||
$.getJSON("{{row_detail_url("materials","steel_grade")}}?value=" + dataRow.type_grade_1, function(type_grade_json) {
|
||||
|
||||
var material_type = "Steel";
|
||||
var min;
|
||||
var max;
|
||||
var value = selectData.value;
|
||||
var shortName = type_grade_json.short_name;
|
||||
|
||||
if(['AS', 'SS', 'CS'].includes(shortName)) {
|
||||
material_type = "Steel";
|
||||
if(value<=3) {
|
||||
min = value;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>3 && value<= 12) {
|
||||
min = 3;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>12) {
|
||||
min = 5;
|
||||
max = "";
|
||||
}
|
||||
}
|
||||
|
||||
if(shortName == "NI") {
|
||||
material_type = "Nickel";
|
||||
|
||||
if(value<=3) {
|
||||
min = value;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>3 && value<= 12) {
|
||||
min = 3;
|
||||
max = value * 2;
|
||||
}
|
||||
|
||||
if(value>12) {
|
||||
min = 5;
|
||||
max = "";
|
||||
}
|
||||
}
|
||||
|
||||
if(shortName == "AL") {
|
||||
material_type = "Aluminium";
|
||||
|
||||
if(value<=6) {
|
||||
min = value * 0.7;
|
||||
max = value * 2.5;
|
||||
}
|
||||
|
||||
if(value>6 && value<= 15) {
|
||||
min = 6;
|
||||
max = 40;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
dataGrid.cellValue(rowIndex, "thickness_min", min);
|
||||
dataGrid.cellValue(rowIndex, "thickness_max", max);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
if(isset($paint)) {
|
||||
$paint_release_number_pattern = setting("paint_release_number_pattern");
|
||||
$checkNo = str_replace("{number}", get_counter($paint_release_number_pattern), $paint_release_number_pattern);
|
||||
if(getisset("checklist-ok")) {
|
||||
|
||||
if(!getesit("iso_number","")) {
|
||||
|
||||
$spoolNumbers = explode(",", get("spool_number"));
|
||||
$isoNumbers = explode(",", get("iso_number"));
|
||||
$count = 0;
|
||||
foreach($isoNumbers AS $isoNumber) {
|
||||
|
||||
$maxAttempts = 5;
|
||||
$attempt = 0;
|
||||
$result = db("weld_logs")
|
||||
->where("iso_number", $isoNumber)
|
||||
->where("spool_number", $spoolNumbers[$count])
|
||||
->whereNotIn("spool_status", ['Completed'])
|
||||
->update([
|
||||
"spool_paint_check" => u()->id,
|
||||
"paint_release_no" => $checkNo,
|
||||
"paint_release_date" => simdi(),
|
||||
"spool_status" => "Completed"
|
||||
]);
|
||||
?>
|
||||
@include("admin.type.spool-release.paint-follow-up-updater")
|
||||
<?php
|
||||
$count++;
|
||||
|
||||
|
||||
|
||||
}
|
||||
bilgi(":result row sign check affected", "success", ['result'=> $count]);
|
||||
?>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
$spool_release_check_number_pattern = setting("spool_release_check_number_pattern");
|
||||
$checkNo = str_replace("{number}", get_counter($spool_release_check_number_pattern), $spool_release_check_number_pattern);
|
||||
if(getisset("checklist-ok")) {
|
||||
if(!getesit("iso_number","")) {
|
||||
$isoNumbers = explode(",", get("iso_number"));
|
||||
$spoolNumbers = explode(",", get("spool_number"));
|
||||
|
||||
$totalUpdates = min(count($isoNumbers), count($spoolNumbers));
|
||||
$totalAffectedRows = 0;
|
||||
|
||||
for ($i = 0; $i < $totalUpdates; $i++) {
|
||||
$currentIso = trim($isoNumbers[$i]);
|
||||
$currentSpool = trim($spoolNumbers[$i]);
|
||||
$result = db("weld_logs")
|
||||
->where("iso_number", $currentIso)
|
||||
->where("spool_number", $currentSpool)
|
||||
->update([
|
||||
"spool_ndt_check" => u()->id,
|
||||
"spool_ndt_check_no" => $checkNo,
|
||||
"spool_ndt_check_date" => simdi(),
|
||||
"spool_status" => "NDT Release"
|
||||
]);
|
||||
|
||||
$totalAffectedRows += $result;
|
||||
}
|
||||
|
||||
bilgi(":result row sign check", "success", ['result'=> $totalAffectedRows]);
|
||||
?>
|
||||
@include("admin.type.spool-release.spool-document-generate")
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@if(getisset("checklist-ok") || getisset("rollback") || postisset("checklist-ok"))
|
||||
spoolStatusChanger(get("iso_number"), get("spool_number"));
|
||||
@endif
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
type: 'buttons',
|
||||
width: 50,
|
||||
buttons: [{
|
||||
hint: 'Rollback',
|
||||
icon: 'undo',
|
||||
|
||||
onClick(e) {
|
||||
Swal.fire({
|
||||
title: `Are you sure to rollback <br> <b>${e.row.data.iso_number} <br> ${e.row.data.spool_number}</b> ?`,
|
||||
text: "This will rollback the spool release. You cannot undo this action!",
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: 'Yes, rollback!',
|
||||
cancelButtonText: 'Cancel'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
// Show loading progress
|
||||
Swal.fire({
|
||||
title: 'Processing Rollback...',
|
||||
html: 'Please wait while we rollback this item.',
|
||||
allowOutsideClick: false,
|
||||
allowEscapeKey: false,
|
||||
didOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
$.get("{{url("admin-ajax/rollback")}}", {
|
||||
rollback: e.row.data.id
|
||||
}, function(d) {
|
||||
Swal.fire(d);
|
||||
|
||||
// Get current row key
|
||||
const rowKey = e.row.key;
|
||||
|
||||
// Refresh the data source but maintain the current state
|
||||
e.component.getDataSource().reload().then(() => {
|
||||
// Optional: Focus and select the row after refresh
|
||||
e.component.selectRows([rowKey], false);
|
||||
});
|
||||
}).fail(function() {
|
||||
Swal.fire({
|
||||
title: 'Error!',
|
||||
text: 'An error occurred during rollback.',
|
||||
icon: 'error'
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
}],
|
||||
},
|
||||
@@ -1,231 +0,0 @@
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=ndt-list',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGridInstance = $("#dataGridNDTList").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: true },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
selection: {
|
||||
mode: 'multiple',
|
||||
showCheckBoxesMode: 'always'
|
||||
},
|
||||
toolbar: {
|
||||
items: [
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
text: 'Refresh',
|
||||
icon: 'refresh',
|
||||
type: 'default',
|
||||
onClick: function() {
|
||||
dataGridInstance.getDataSource().reload();
|
||||
DevExpress.ui.notify('Data refreshed successfully', 'success', 1500);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
text: 'Bulk Rollback',
|
||||
icon: 'undo',
|
||||
type: 'danger',
|
||||
onClick: function() {
|
||||
var selectedRows = dataGridInstance.getSelectedRowsData();
|
||||
var maxBulkRollback = 50;
|
||||
if(selectedRows.length === 0) {
|
||||
Swal.fire({
|
||||
title: 'No Selection',
|
||||
text: 'Please select at least one row to rollback.',
|
||||
icon: 'warning',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if(selectedRows.length > maxBulkRollback) {
|
||||
Swal.fire({
|
||||
title: 'Too Many Selected',
|
||||
html: 'You have selected <b>' + selectedRows.length + '</b> items. Maximum allowed is <b>' + maxBulkRollback + '</b> at a time.<br><br>Please reduce your selection.',
|
||||
icon: 'error',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var selectedIds = selectedRows.map(row => row.id);
|
||||
var selectedDetails = selectedRows.map(row => `${row.iso_number} - ${row.spool_number}`).join('<br>');
|
||||
|
||||
Swal.fire({
|
||||
title: `Rollback ${selectedRows.length} item(s)?`,
|
||||
html: `<div style="max-height: 200px; overflow-y: auto;">${selectedDetails}</div>`,
|
||||
text: "This will rollback the selected spool releases. You cannot undo this action!",
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: 'Yes, rollback all!',
|
||||
cancelButtonText: 'Cancel'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
// Show loading progress
|
||||
Swal.fire({
|
||||
title: 'Processing Rollback...',
|
||||
html: 'Please wait while we rollback the selected items.',
|
||||
allowOutsideClick: false,
|
||||
allowEscapeKey: false,
|
||||
didOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{url('admin-ajax/rollback')}}",
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}',
|
||||
rollback_ids: selectedIds
|
||||
},
|
||||
success: function(response) {
|
||||
Swal.fire({
|
||||
title: 'Success!',
|
||||
html: response,
|
||||
icon: 'success'
|
||||
});
|
||||
dataGridInstance.getDataSource().reload();
|
||||
dataGridInstance.clearSelection();
|
||||
},
|
||||
error: function(error) {
|
||||
Swal.fire({
|
||||
title: 'Error!',
|
||||
text: 'An error occurred during rollback.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
"saveButton",
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: false,
|
||||
<?php } ?>
|
||||
startEditAction: 'click',
|
||||
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
columns: [
|
||||
@include("admin.type.spool-release.js-rollback-button")
|
||||
"iso_number",
|
||||
"spool_number",
|
||||
{
|
||||
dataField: "spool_ndt_check_no",
|
||||
caption: "Spool Release No",
|
||||
cellTemplate: function (container, options) {
|
||||
$('<a>'+options.data.spool_ndt_check_no+'</a>')
|
||||
.attr('href', '?ajax=spool-pdf-check&number=' + options.data.spool_ndt_check_no)
|
||||
.attr('target', '_blank')
|
||||
.appendTo(container);
|
||||
}
|
||||
},
|
||||
"ndt_release_no",
|
||||
{
|
||||
dataField: "ndt_release_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
"painting_cycle",
|
||||
"spool_status",
|
||||
|
||||
|
||||
|
||||
],
|
||||
groupPanel: { visible: true },
|
||||
}).dxDataGrid('instance');
|
||||
});
|
||||
</script>
|
||||
<div id="dataGridNDTList"></div>
|
||||
@@ -1,120 +0,0 @@
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=ndt-paint-list-field',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
$("#dataGridNDTList").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: true },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
toolbar: {
|
||||
items: [
|
||||
"saveButton",
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: false,
|
||||
<?php } ?>
|
||||
startEditAction: 'click',
|
||||
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
columns: [
|
||||
@include("admin.type.spool-release.js-rollback-button")
|
||||
|
||||
"id",
|
||||
"iso_number",
|
||||
"joint_no",
|
||||
"painting_cycle",
|
||||
"paint_release_no",
|
||||
{
|
||||
dataField: "paint_release_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
"tp_status",
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div id="dataGridNDTList"></div>
|
||||
@@ -1,240 +0,0 @@
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=ndt-paint-list',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGridInstance = $("#dataGridNDTList").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: true },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
selection: {
|
||||
mode: 'multiple',
|
||||
showCheckBoxesMode: 'always'
|
||||
},
|
||||
toolbar: {
|
||||
items: [
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
text: 'Refresh',
|
||||
icon: 'refresh',
|
||||
type: 'default',
|
||||
onClick: function() {
|
||||
dataGridInstance.getDataSource().reload();
|
||||
DevExpress.ui.notify('Data refreshed successfully', 'success', 1500);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
text: 'Bulk Rollback',
|
||||
icon: 'undo',
|
||||
type: 'danger',
|
||||
onClick: function() {
|
||||
var selectedRows = dataGridInstance.getSelectedRowsData();
|
||||
var maxBulkRollback = 50;
|
||||
if(selectedRows.length === 0) {
|
||||
Swal.fire({
|
||||
title: 'No Selection',
|
||||
text: 'Please select at least one row to rollback.',
|
||||
icon: 'warning',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if(selectedRows.length > maxBulkRollback) {
|
||||
Swal.fire({
|
||||
title: 'Too Many Selected',
|
||||
html: 'You have selected <b>' + selectedRows.length + '</b> items. Maximum allowed is <b>' + maxBulkRollback + '</b> at a time.<br><br>Please reduce your selection.',
|
||||
icon: 'error',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var selectedIds = selectedRows.map(row => row.id);
|
||||
var selectedDetails = selectedRows.map(row => `${row.iso_number} - ${row.spool_number}`).join('<br>');
|
||||
|
||||
Swal.fire({
|
||||
title: `Rollback ${selectedRows.length} item(s)?`,
|
||||
html: `<div style="max-height: 200px; overflow-y: auto;">${selectedDetails}</div>`,
|
||||
text: "This will rollback the selected spool releases. You cannot undo this action!",
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: 'Yes, rollback all!',
|
||||
cancelButtonText: 'Cancel'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
// Show loading progress
|
||||
Swal.fire({
|
||||
title: 'Processing Rollback...',
|
||||
html: 'Please wait while we rollback the selected items.',
|
||||
allowOutsideClick: false,
|
||||
allowEscapeKey: false,
|
||||
didOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: "{{url('admin-ajax/rollback')}}",
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}',
|
||||
rollback_ids: selectedIds
|
||||
},
|
||||
success: function(response) {
|
||||
Swal.fire({
|
||||
title: 'Success!',
|
||||
html: response,
|
||||
icon: 'success'
|
||||
});
|
||||
dataGridInstance.getDataSource().reload();
|
||||
dataGridInstance.clearSelection();
|
||||
},
|
||||
error: function(error) {
|
||||
Swal.fire({
|
||||
title: 'Error!',
|
||||
text: 'An error occurred during rollback.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
"saveButton",
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: false,
|
||||
<?php } ?>
|
||||
startEditAction: 'click',
|
||||
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
columns: [
|
||||
@include("admin.type.spool-release.js-rollback-button")
|
||||
"id",
|
||||
{
|
||||
caption: "Welds",
|
||||
dataField: "iso_number",
|
||||
dataType: "text",
|
||||
},
|
||||
"spool_number",
|
||||
{
|
||||
caption: "Paint C.",
|
||||
dataField: "painting_cycle",
|
||||
dataType: "text",
|
||||
},
|
||||
{
|
||||
dataField: "paint_release_no",
|
||||
allowEditing: false,
|
||||
caption: "Spool Check No",
|
||||
cellTemplate: function (container, options) {
|
||||
if(options.data.paint_release_no !== null) {
|
||||
$('<a>'+options.data.paint_release_no+'</a>')
|
||||
.attr('href', '{{url("storage/documents/004_QA/0016_Spool_Paint_Release_Checklist")}}/' + options.data.paint_release_no + '.pdf')
|
||||
.attr('target', '_blank')
|
||||
.appendTo(container);
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
dataField: "paint_release_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
"spool_status",
|
||||
]
|
||||
}).dxDataGrid('instance');
|
||||
});
|
||||
</script>
|
||||
<div id="dataGridNDTList"></div>
|
||||
@@ -1,568 +0,0 @@
|
||||
<?php
|
||||
$weldTitle = "Weld Info";
|
||||
|
||||
if(isset($paint))
|
||||
$weldTitle = "Paint Info";
|
||||
?>
|
||||
{{col("col-12", $weldTitle, 0, ['no-options' => true])}}
|
||||
|
||||
<form action="" method="get" class="mb-10">
|
||||
<div class="row">
|
||||
<?php
|
||||
$spoolNumbersParam = get("spool_number");
|
||||
$isoNumbersParam = get("iso_number");
|
||||
|
||||
$spoolNumbers = !empty($spoolNumbersParam) ? explode(",", $spoolNumbersParam) : [];
|
||||
$isoNumbers = !empty($isoNumbersParam) ? explode(",", $isoNumbersParam) : [];
|
||||
|
||||
// Prepare selected items data
|
||||
$selectedItems = [];
|
||||
$hasMultipleItems = false;
|
||||
|
||||
if(count($isoNumbers) > 1 || count($spoolNumbers) > 1) {
|
||||
$hasMultipleItems = true;
|
||||
|
||||
// If both ISO and SPL exist, pair them
|
||||
if(count($isoNumbers) > 1 && count($spoolNumbers) > 1) {
|
||||
$maxCount = max(count($isoNumbers), count($spoolNumbers));
|
||||
for($i = 0; $i < $maxCount; $i++) {
|
||||
$selectedItems[] = [
|
||||
'iso_number' => isset($isoNumbers[$i]) ? trim($isoNumbers[$i]) : '',
|
||||
'spool_number' => isset($spoolNumbers[$i]) ? trim($spoolNumbers[$i]) : ''
|
||||
];
|
||||
}
|
||||
} elseif(count($isoNumbers) > 1) {
|
||||
// Only ISO numbers
|
||||
foreach($isoNumbers as $isoNumber) {
|
||||
$selectedItems[] = [
|
||||
'iso_number' => trim($isoNumber),
|
||||
'spool_number' => ''
|
||||
];
|
||||
}
|
||||
} elseif(count($spoolNumbers) > 1) {
|
||||
// Only SPL numbers
|
||||
foreach($spoolNumbers as $spoolNumber) {
|
||||
$selectedItems[] = [
|
||||
'iso_number' => '',
|
||||
'spool_number' => trim($spoolNumber)
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@if($hasMultipleItems)
|
||||
<div class="col-md-12 mb-3">
|
||||
<h6 class="mb-2">{{e2("Selected Items")}}</h6>
|
||||
<div id="selectedItemsGrid"></div>
|
||||
<script>
|
||||
$(function(){
|
||||
var selectedItemsData = @json($selectedItems);
|
||||
|
||||
var columns = [];
|
||||
|
||||
// Check if we have ISO numbers
|
||||
var hasIsoNumbers = selectedItemsData.some(function(item) {
|
||||
return item.iso_number && item.iso_number !== '';
|
||||
});
|
||||
|
||||
// Check if we have SPL numbers
|
||||
var hasSpoolNumbers = selectedItemsData.some(function(item) {
|
||||
return item.spool_number && item.spool_number !== '';
|
||||
});
|
||||
|
||||
if(hasIsoNumbers) {
|
||||
columns.push({
|
||||
dataField: "iso_number",
|
||||
caption: "{{e2('ISO Number')}}",
|
||||
width: hasSpoolNumbers ? "50%" : "100%"
|
||||
});
|
||||
}
|
||||
|
||||
if(hasSpoolNumbers) {
|
||||
columns.push({
|
||||
dataField: "spool_number",
|
||||
caption: "{{e2('SPL')}}",
|
||||
width: hasIsoNumbers ? "50%" : "100%"
|
||||
});
|
||||
}
|
||||
|
||||
$("#selectedItemsGrid").dxDataGrid({
|
||||
dataSource: selectedItemsData,
|
||||
showBorders: true,
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true
|
||||
},
|
||||
paging: {
|
||||
pageSize: 10,
|
||||
enabled: true
|
||||
},
|
||||
summary: {
|
||||
totalItems: [{
|
||||
name: "Total",
|
||||
summaryType: "count",
|
||||
column: hasIsoNumbers ? "iso_number" : "spool_number",
|
||||
displayFormat: "{{e2('Total')}}: {0}"
|
||||
}]
|
||||
},
|
||||
columns: columns,
|
||||
scrolling: {
|
||||
mode: "standard"
|
||||
},
|
||||
height: 300
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
@else
|
||||
<div class="col-md-{{$field ? 12 : 6}}">
|
||||
{{e2("Iso Number")}}:
|
||||
<input type="text" name="iso_number" value="{{get("iso_number")}}" id="" class="form-control">
|
||||
</div>
|
||||
@if(!$field)
|
||||
<div class="col-md-6">
|
||||
{{e2("SPL")}}:
|
||||
<select name="spool_number" required id="" class="form-control select2">
|
||||
<option value="">{{e2("Select")}}</option>
|
||||
<?php
|
||||
$spoolNumbersForSelect = db("weld_logs")
|
||||
->groupBy("spool_number")
|
||||
->select("spool_number");
|
||||
|
||||
if(!getesit("iso_number", "")) {
|
||||
$spoolNumbersForSelect = $spoolNumbersForSelect->where("iso_number", get("iso_number"));
|
||||
}
|
||||
$spoolNumbersForSelect = $spoolNumbersForSelect->get()
|
||||
->pluck("spool_number")
|
||||
->toArray();
|
||||
|
||||
foreach($spoolNumbersForSelect AS $spoolNumber) {
|
||||
?>
|
||||
<option value="{{$spoolNumber}}" {{getesit("spool_number", $spoolNumber) ? "selected" : ""}}>{{$spoolNumber}}</option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
<div class="col-md-12">
|
||||
<?php
|
||||
|
||||
|
||||
$paintingCycles = db("weld_logs")
|
||||
->groupBy("painting_cycle")
|
||||
->select("painting_cycle")
|
||||
->whereNotNull("painting_cycle")
|
||||
->whereIn("iso_number", $isoNumbers)
|
||||
->get();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@if($paintingCycles)
|
||||
<div class="border rounded p-5 mt-5 mb-5 spool-info-container">
|
||||
|
||||
{{e2("Painting Cycle")}}:
|
||||
<?php
|
||||
foreach($paintingCycles AS $paintingCycle) {
|
||||
?>
|
||||
|
||||
<div class="btn btn-success">{{$paintingCycle->painting_cycle}}</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php if(isset($weldInfos[0])) {
|
||||
?>
|
||||
|
||||
<div class="btn btn-info">NDT: % {{$weldInfos[0]->ndt_percent}}</div>
|
||||
<div class="btn btn-{{$weldInfos[0]->pwht=='YES' ? 'danger' : 'success'}}">PWHT: {{$weldInfos[0]->pwht}}</div>
|
||||
<?php
|
||||
} ?>
|
||||
<?php
|
||||
$spoolStatuses = [];
|
||||
|
||||
$infos = (!empty($weldInfos) && count($weldInfos) > 0) ? $weldInfos : $paintInfos;
|
||||
foreach($infos AS $info) {
|
||||
if($info->type_of_joint == 'S') {
|
||||
$spoolStatuses[] = $info->spool_status;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@if(isset($weldInfos[0]))
|
||||
|
||||
<div class="btn btn-secondary spool-status" title="{{e2("Spool Status")}}">{{getLowestSpoolStatus($spoolStatuses)}}</div>
|
||||
@endif
|
||||
@if(isset($paintInfos[0]))
|
||||
<div class="btn btn-secondary spool-status" title="{{e2("Spool Status")}}">{{getLowestSpoolStatus($spoolStatuses)}}</div>
|
||||
@endif
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
<?php if(!getesit("iso_number","")) {
|
||||
?>
|
||||
<div class="col-md-12 text-center">
|
||||
<?php if(is_stellar()) {
|
||||
$spoolStatus = getLowestSpoolStatus($spoolStatuses);
|
||||
?>
|
||||
<div class="btn-group">
|
||||
@if($showReleaseButton)
|
||||
@if($paintingCycles->count() != 0)
|
||||
@if($spoolStatus == "NDT Release")
|
||||
<button type="button" onclick="handleNdtRelease()" class="btn btn-outline-primary d-none ndt-release-button">{{e2("NDT Release")}}</button>
|
||||
@endif
|
||||
@endif
|
||||
@if($paintingCycles->count() == 0)
|
||||
@if($spoolStatus == "NDT Release")
|
||||
<button type="button" onclick="handleNdtPaintRelease()" class="btn btn-outline-warning d-none ndt-release-button">{{e2("NDT & Paint Release")}}</button>
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@if(getisset("iso_number"))
|
||||
@if(getisset("spool_number"))
|
||||
@if(isset($weldInfos[0]))
|
||||
<a href="?ajax=document-print&table_name=weld_logs&id={{$weldInfos[0]->id}}&document_id=1" target="_blank" class="btn btn-outline-primary d-none release-button"><i class="fa fa-print"></i> {{e2("Print")}}</a>
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Store PHP values in JavaScript variables
|
||||
var currentIsoNumber = "{{get('iso_number', '')}}";
|
||||
var currentSpoolNumber = "{{get('spool_number', '')}}";
|
||||
|
||||
function handleNdtRelease() {
|
||||
Swal.fire({
|
||||
title: '{{e2("NDT Release")}}',
|
||||
text: '{{e2("Are you sure for ndt release spool?")}}',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '{{e2("Yes, release")}}',
|
||||
cancelButtonText: '{{e2("Cancel")}}',
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
performNdtRelease();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function handleNdtPaintRelease() {
|
||||
Swal.fire({
|
||||
title: '{{e2("NDT & Paint Release")}}',
|
||||
text: '{{e2("Are you sure for ndt release spool?")}}',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '{{e2("Yes, release")}}',
|
||||
cancelButtonText: '{{e2("Cancel")}}',
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
performNdtPaintRelease();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function performNdtRelease() {
|
||||
// Get values from form inputs first
|
||||
var isoNumber = $('input[name="iso_number"]').val();
|
||||
var spoolNumber = $('select[name="spool_number"]').val();
|
||||
|
||||
// If form inputs are empty, use PHP values (for multiple selection or direct access)
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
isoNumber = currentIsoNumber;
|
||||
}
|
||||
if (!spoolNumber || spoolNumber.trim() === '') {
|
||||
spoolNumber = currentSpoolNumber;
|
||||
}
|
||||
|
||||
// If still empty, try to get from selected items grid (for multiple selection)
|
||||
var selectedItemsData = [];
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
var selectedItemsGrid = $('#selectedItemsGrid').dxDataGrid('instance');
|
||||
if (selectedItemsGrid) {
|
||||
try {
|
||||
var selectedItems = selectedItemsGrid.option('dataSource');
|
||||
if (selectedItems && selectedItems.length > 0) {
|
||||
selectedItemsData = selectedItems;
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
selectedItems.forEach(function(item) {
|
||||
if (item.iso_number && item.iso_number.trim() !== '') {
|
||||
isoNumbers.push(item.iso_number);
|
||||
}
|
||||
if (item.spool_number && item.spool_number.trim() !== '') {
|
||||
spoolNumbers.push(item.spool_number);
|
||||
}
|
||||
});
|
||||
if (isoNumbers.length > 0) {
|
||||
isoNumber = isoNumbers.join(',');
|
||||
}
|
||||
if (spoolNumbers.length > 0) {
|
||||
spoolNumber = spoolNumbers.join(',');
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
console.warn('Could not get data from selectedItemsGrid:', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Build ISO+SPL pairs
|
||||
var isoSpoolPairs = [];
|
||||
|
||||
// If we have selectedItemsData, use it directly
|
||||
if(selectedItemsData.length > 0) {
|
||||
selectedItemsData.forEach(function(item) {
|
||||
var iso = (item.iso_number || '').trim();
|
||||
var spool = (item.spool_number || '').trim();
|
||||
if(iso && spool) {
|
||||
isoSpoolPairs.push(iso + '|' + spool);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Otherwise, parse from comma-separated values
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
if(isoNumber) {
|
||||
isoNumbers = isoNumber.split(',');
|
||||
}
|
||||
if(spoolNumber) {
|
||||
spoolNumbers = spoolNumber.split(',');
|
||||
}
|
||||
|
||||
var maxCount = Math.max(isoNumbers.length, spoolNumbers.length);
|
||||
for(var i = 0; i < maxCount; i++) {
|
||||
var iso = (isoNumbers[i] || '').trim();
|
||||
var spool = (spoolNumbers[i] || '').trim();
|
||||
if(iso && spool) {
|
||||
isoSpoolPairs.push(iso + '|' + spool);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Validate required parameters
|
||||
if (isoSpoolPairs.length === 0 && (!isoNumber || isoNumber.trim() === '')) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'ISO number is required in POST data',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
Swal.fire({
|
||||
title: 'Processing...',
|
||||
text: 'Please wait while we process your request',
|
||||
allowOutsideClick: false,
|
||||
showConfirmButton: false,
|
||||
willOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
// Prepare POST parameters
|
||||
var params = {
|
||||
'ndt_release': 'ok'
|
||||
};
|
||||
|
||||
// Add ISO+SPL pairs if available, otherwise use old format for backward compatibility
|
||||
if(isoSpoolPairs.length > 0) {
|
||||
params['iso_spool_pairs'] = isoSpoolPairs.join(',');
|
||||
} else {
|
||||
params['iso_number'] = isoNumber;
|
||||
if (spoolNumber && spoolNumber.trim() !== '') {
|
||||
params['spool_number'] = spoolNumber;
|
||||
}
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: '/admin-ajax/checklist-system',
|
||||
type: 'POST',
|
||||
data: params,
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(response) {
|
||||
if (typeof response === 'string') {
|
||||
response = JSON.parse(response);
|
||||
}
|
||||
|
||||
if (response.status === 'success') {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Success!',
|
||||
text: response.message,
|
||||
confirmButtonText: 'OK'
|
||||
}).then(() => {
|
||||
location.reload();
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: response.message || 'An error occurred',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX Error:', error);
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'An error occurred while processing your request',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function performNdtPaintRelease() {
|
||||
// Get values from form inputs first
|
||||
var isoNumber = $('input[name="iso_number"]').val();
|
||||
var spoolNumber = $('select[name="spool_number"]').val();
|
||||
|
||||
// If form inputs are empty, use PHP values (for multiple selection or direct access)
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
isoNumber = currentIsoNumber;
|
||||
}
|
||||
if (!spoolNumber || spoolNumber.trim() === '') {
|
||||
spoolNumber = currentSpoolNumber;
|
||||
}
|
||||
|
||||
// If still empty, try to get from selected items grid (for multiple selection)
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
var selectedItemsGrid = $('#selectedItemsGrid').dxDataGrid('instance');
|
||||
if (selectedItemsGrid) {
|
||||
try {
|
||||
var selectedItems = selectedItemsGrid.option('dataSource');
|
||||
if (selectedItems && selectedItems.length > 0) {
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
selectedItems.forEach(function(item) {
|
||||
if (item.iso_number && item.iso_number.trim() !== '') {
|
||||
isoNumbers.push(item.iso_number);
|
||||
}
|
||||
if (item.spool_number && item.spool_number.trim() !== '') {
|
||||
spoolNumbers.push(item.spool_number);
|
||||
}
|
||||
});
|
||||
if (isoNumbers.length > 0) {
|
||||
isoNumber = isoNumbers.join(',');
|
||||
}
|
||||
if (spoolNumbers.length > 0) {
|
||||
spoolNumber = spoolNumbers.join(',');
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
console.warn('Could not get data from selectedItemsGrid:', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Validate required parameters
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'ISO number is required in POST data',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
Swal.fire({
|
||||
title: 'Processing...',
|
||||
text: 'Please wait while we process your request',
|
||||
allowOutsideClick: false,
|
||||
showConfirmButton: false,
|
||||
willOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
// Prepare POST parameters
|
||||
var params = {
|
||||
'ndt_paint_release': 'ok',
|
||||
'iso_number': isoNumber
|
||||
};
|
||||
|
||||
// Add spool_number if available
|
||||
if (spoolNumber && spoolNumber.trim() !== '') {
|
||||
params['spool_number'] = spoolNumber;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: '/admin-ajax/checklist-system',
|
||||
type: 'POST',
|
||||
data: params,
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(response) {
|
||||
if (typeof response === 'string') {
|
||||
response = JSON.parse(response);
|
||||
}
|
||||
|
||||
if (response.status === 'success') {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Success!',
|
||||
text: response.message,
|
||||
confirmButtonText: 'OK'
|
||||
}).then(() => {
|
||||
location.reload();
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: response.message || 'An error occurred',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX Error:', error);
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'An error occurred while processing your request',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
@if(!getesit("iso_number",""))
|
||||
@if(isset($paint))
|
||||
@include("admin.type.spool-release.paint-info")
|
||||
@else
|
||||
@include("admin.type.spool-release.weld-info")
|
||||
@endif
|
||||
@endif
|
||||
|
||||
{{_col()}}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
@if(isset($paint))
|
||||
@if($field)
|
||||
@include("admin.type.spool-release.ndt-release-paint-list-field")
|
||||
@else
|
||||
@include("admin.type.spool-release.ndt-release-paint-list")
|
||||
@endif
|
||||
@else
|
||||
@include("admin.type.spool-release.ndt-release-list")
|
||||
@endif
|
||||
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
<?php
|
||||
|
||||
$disableNewModal = true;
|
||||
|
||||
if(getisset("type")) {
|
||||
oturum("type_of_joint", get("type"));
|
||||
}
|
||||
|
||||
$field = false;
|
||||
if(oturumesit("type_of_joint", "FIELD")) {
|
||||
$field = true;
|
||||
}
|
||||
if(!isset($paint)) {
|
||||
$field = false;
|
||||
}
|
||||
|
||||
if(count($_POST) > 0) {
|
||||
$_GET = $_POST;
|
||||
}
|
||||
|
||||
$weldInfos = collect([]);
|
||||
$paintInfos = collect([]);
|
||||
$showReleaseButton = false;
|
||||
if(!getesit("iso_number","")) {
|
||||
if(isset($paint)) {
|
||||
$paintInfos = apply_welded_filter(
|
||||
db("weld_logs")->where("spool_status", "Paint")
|
||||
);
|
||||
|
||||
$get = $_GET;
|
||||
|
||||
unset($get['rollback'], $get['page'], $get['_token'], $get['checklist-ok']);
|
||||
|
||||
// Extract iso_number and spool_number for pair matching
|
||||
$isoNumbers = [];
|
||||
$spoolNumbers = [];
|
||||
if(isset($get['iso_number']) && $get['iso_number'] != "") {
|
||||
$isoNumbers = explode(",", $get['iso_number']);
|
||||
}
|
||||
if(isset($get['spool_number']) && $get['spool_number'] != "") {
|
||||
$spoolNumbers = explode(",", $get['spool_number']);
|
||||
}
|
||||
|
||||
// Remove iso_number and spool_number from get array to process separately
|
||||
unset($get['iso_number'], $get['spool_number']);
|
||||
|
||||
// Process other filters first
|
||||
foreach($get AS $col => $value) {
|
||||
if($value != "") {
|
||||
$paintInfos = $paintInfos->where($col, trim($value));
|
||||
}
|
||||
}
|
||||
|
||||
// Apply iso_number + spool_number pair matching
|
||||
if(count($isoNumbers) > 0 && count($spoolNumbers) > 0) {
|
||||
$paintInfos = $paintInfos->where(function($query) use ($isoNumbers, $spoolNumbers) {
|
||||
$maxCount = max(count($isoNumbers), count($spoolNumbers));
|
||||
for($i = 0; $i < $maxCount; $i++) {
|
||||
$iso = isset($isoNumbers[$i]) ? trim($isoNumbers[$i]) : null;
|
||||
$spool = isset($spoolNumbers[$i]) ? trim($spoolNumbers[$i]) : null;
|
||||
|
||||
if($iso && $spool) {
|
||||
$query->orWhere(function($q) use ($iso, $spool) {
|
||||
$q->where('iso_number', $iso)
|
||||
->where('spool_number', $spool);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} elseif(count($isoNumbers) > 0) {
|
||||
$paintInfos = $paintInfos->whereIn('iso_number', $isoNumbers);
|
||||
} elseif(count($spoolNumbers) > 0) {
|
||||
$paintInfos = $paintInfos->whereIn('spool_number', $spoolNumbers);
|
||||
}
|
||||
|
||||
$paintInfos = $paintInfos->get();
|
||||
|
||||
$showReleaseButton = true;
|
||||
if(isset($paintInfos[0])) {
|
||||
if($paintInfos[0]->spool_paint_check != "") {
|
||||
$showReleaseButton = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$weldInfos = apply_welded_filter(db("weld_logs"));
|
||||
|
||||
$get = $_GET;
|
||||
|
||||
unset($get['page'], $get['rollback'], $get['_token'], $get['checklist-ok']);
|
||||
|
||||
// Extract iso_number and spool_number for pair matching
|
||||
$isoNumbers = [];
|
||||
$spoolNumbers = [];
|
||||
if(isset($get['iso_number']) && $get['iso_number'] != "") {
|
||||
$isoNumbers = explode(",", $get['iso_number']);
|
||||
}
|
||||
if(isset($get['spool_number']) && $get['spool_number'] != "") {
|
||||
$spoolNumbers = explode(",", $get['spool_number']);
|
||||
}
|
||||
|
||||
// Remove iso_number and spool_number from get array to process separately
|
||||
unset($get['iso_number'], $get['spool_number']);
|
||||
|
||||
// Process other filters first
|
||||
foreach($get AS $col => $value) {
|
||||
if($value != "") {
|
||||
$weldInfos = $weldInfos->where($col, trim($value));
|
||||
}
|
||||
}
|
||||
|
||||
// Apply iso_number + spool_number pair matching
|
||||
if(count($isoNumbers) > 0 && count($spoolNumbers) > 0) {
|
||||
$weldInfos = $weldInfos->where(function($query) use ($isoNumbers, $spoolNumbers) {
|
||||
$maxCount = max(count($isoNumbers), count($spoolNumbers));
|
||||
for($i = 0; $i < $maxCount; $i++) {
|
||||
$iso = isset($isoNumbers[$i]) ? trim($isoNumbers[$i]) : null;
|
||||
$spool = isset($spoolNumbers[$i]) ? trim($spoolNumbers[$i]) : null;
|
||||
|
||||
if($iso && $spool) {
|
||||
$query->orWhere(function($q) use ($iso, $spool) {
|
||||
$q->where('iso_number', $iso)
|
||||
->where('spool_number', $spool);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} elseif(count($isoNumbers) > 0) {
|
||||
$weldInfos = $weldInfos->whereIn('iso_number', $isoNumbers);
|
||||
} elseif(count($spoolNumbers) > 0) {
|
||||
$weldInfos = $weldInfos->whereIn('spool_number', $spoolNumbers);
|
||||
}
|
||||
|
||||
$weldInfos = $weldInfos->paginate(30);
|
||||
|
||||
$showReleaseButton = true;
|
||||
if(isset($weldInfos[0])) {
|
||||
if($weldInfos[0]->spool_ndt_check != "") {
|
||||
$showReleaseButton = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'field' => $field,
|
||||
'weldInfos' => $weldInfos,
|
||||
'paintInfos' => $paintInfos,
|
||||
'showReleaseButton' => $showReleaseButton,
|
||||
];
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<div>
|
||||
@if(isset($paint))
|
||||
{{col("col-12","")}}
|
||||
<div class="btn-group">
|
||||
<a href="?type=SHOP" class="btn btn{{!oturumesit("type_of_joint", "FIELD") ? "" : "-outline"}}-primary">🏢 SHOP</a>
|
||||
<a href="?type=FIELD" class="btn btn{{oturumesit("type_of_joint", "FIELD") ? "" : "-outline"}}-primary">🏗️ FIELD</a>
|
||||
</div>
|
||||
{{_col()}}
|
||||
@endif
|
||||
<?php if(isset($paint)) {
|
||||
$firstUploadFolder = '004_QA/0016_Spool_Paint_Release_Checklist/';
|
||||
$firstUploadTitle = 'Upload Spool Paint Release Check PDF';
|
||||
} else {
|
||||
$firstUploadFolder = '004_QA/0009_Spool_Release_Check_List/';
|
||||
$firstUploadTitle = 'Upload Spool Release Check PDF';
|
||||
} ?>
|
||||
@include("admin.type.document.upload")
|
||||
{{col("col-md-12","Spool List", 0, ['no-options' => true])}}
|
||||
@if($field)
|
||||
@include("admin.type.spool-release.spool-list-field")
|
||||
@else
|
||||
@include("admin.type.spool-release.spool-list")
|
||||
@endif
|
||||
|
||||
{{_col()}}
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,468 +0,0 @@
|
||||
<?php
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
Log::debug('Paint Follow Up Updater - Started');
|
||||
Log::debug('Input parameters:', ['spool_number' => get("spool_number"), 'iso_number' => $isoNumber ?? null]);
|
||||
|
||||
$spoolNumber = explode(",",get("spool_number"));
|
||||
Log::debug('Parsed spool numbers:', ['spoolNumber' => $spoolNumber]);
|
||||
|
||||
if(isset($count)) {
|
||||
if(isset($spoolNumbers[$count])) {
|
||||
$spoolNumber = $spoolNumbers[$count];
|
||||
Log::debug('Using specific spool number from count:', ['count' => $count, 'spoolNumber' => $spoolNumber]);
|
||||
}
|
||||
}
|
||||
|
||||
$whereData = [
|
||||
'iso_number' => $isoNumber,
|
||||
'spool_number' => $spoolNumber,
|
||||
];
|
||||
|
||||
Log::debug('Where conditions for weld_logs:', $whereData);
|
||||
|
||||
$weldLogData = apply_welded_filter(
|
||||
db("weld_logs")->where($whereData)
|
||||
)->get();
|
||||
Log::debug('Weld log data count:', ['count' => $weldLogData->count()]);
|
||||
|
||||
$fAvgNps = apply_welded_filter(
|
||||
db("weld_logs")->where($whereData)
|
||||
)
|
||||
->where("type_of_joint", "F")
|
||||
->avg("nps_1");
|
||||
$sAvgNps = apply_welded_filter(
|
||||
db("weld_logs")->where($whereData)
|
||||
)
|
||||
->where("type_of_joint", "S")
|
||||
->avg("nps_1");
|
||||
Log::debug('Average NPS values:', ['F_avg_nps' => $fAvgNps, 'S_avg_nps' => $sAvgNps]);
|
||||
|
||||
$mtoTotal = db("m_t_o_s")
|
||||
->where("description_en", "like", "%pipe%")
|
||||
->where("line", $isoNumber)
|
||||
->selectRaw("SUM(quantity * POWER(odmm_1/2000, 2) * PI()) AS total")
|
||||
->first()->total;
|
||||
Log::debug('MTO total calculation:', ['iso_number' => $isoNumber, 'mto_total' => $mtoTotal]);
|
||||
|
||||
$fVolume = round(pi() * pow($fAvgNps, 2) * 200, 2);
|
||||
$sVolume = round($mtoTotal, 2);
|
||||
Log::debug('Volume calculations:', ['fVolume' => $fVolume, 'sVolume' => $sVolume]);
|
||||
|
||||
$temperatures = j(setting("temperatures"));
|
||||
Log::debug('Temperature settings loaded:', ['has_temperatures' => !is_null($temperatures)]);
|
||||
|
||||
if(!is_null($temperatures)) {
|
||||
$todayTempData = $temperatures[date("z")];
|
||||
Log::debug('Today\'s temperature data:', ['day_of_year' => date("z"), 'temp_data' => $todayTempData]);
|
||||
|
||||
$updatedRow = 0;
|
||||
foreach($weldLogData AS $weldLog) {
|
||||
Log::debug('Processing weld log:', [
|
||||
'id' => $weldLog->id,
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_number' => $weldLog->spool_number,
|
||||
'type_of_joint' => $weldLog->type_of_joint
|
||||
]);
|
||||
|
||||
if($weldLog->type_of_joint == "S") {
|
||||
$spoolJoint = $weldLog->spool_number;
|
||||
Log::debug('Processing S-type joint:', ['spool_joint' => $spoolJoint]);
|
||||
} else {
|
||||
$spoolJoint = $weldLog->spool_number;
|
||||
Log::debug('Processing F-type joint:', ['spool_joint' => $spoolJoint]);
|
||||
}
|
||||
|
||||
// 1. Mevcut paint_follow_ups kaydını çek
|
||||
$existingRow = db("paint_follow_ups")
|
||||
->where([
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
"spool_no_joint_no" => $spoolJoint,
|
||||
])
|
||||
->first();
|
||||
|
||||
Log::debug('Existing paint follow up row check:', [
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_no_joint_no' => $spoolJoint,
|
||||
'found' => !is_null($existingRow),
|
||||
'id' => $existingRow->id ?? null
|
||||
]);
|
||||
|
||||
// 2. Mevcut construction_paint_logs kaydını çek
|
||||
$existingConPaintLog = db('construction_paint_logs')
|
||||
->where([
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
])
|
||||
->first();
|
||||
|
||||
Log::debug('Existing construction paint log check:', [
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
'found' => !is_null($existingConPaintLog),
|
||||
'id' => $existingConPaintLog->id ?? null
|
||||
]);
|
||||
|
||||
// 3. Güncellenecek data'yı hazırla (sadece boş alanlar için)
|
||||
$updateData = [];
|
||||
|
||||
// Non-date fields (her zaman güncelle)
|
||||
if($weldLog->type_of_joint == "S") {
|
||||
$updateData['substrate_temprature'] = $todayTempData['temp_material_shop'];
|
||||
$updateData['ambient_temprature'] = $todayTempData['shop_ambient'];
|
||||
$updateData['volume_1'] = $sVolume;
|
||||
$updateData['volume_2'] = $sVolume;
|
||||
$updateData['volume_3'] = $sVolume;
|
||||
$updateData['total_volume'] = $sVolume * 3;
|
||||
} else {
|
||||
$updateData['substrate_temprature'] = $todayTempData['temp_material_field'];
|
||||
$updateData['ambient_temprature'] = $todayTempData['field_ambient'];
|
||||
$updateData['volume_1'] = $fVolume;
|
||||
$updateData['volume_2'] = $fVolume;
|
||||
$updateData['volume_3'] = $fVolume;
|
||||
$updateData['total_volume'] = $fVolume * 3;
|
||||
}
|
||||
|
||||
// Date fields - sadece boş ise ekle
|
||||
if (!$existingRow || empty($existingRow->protocol_date_cleaning)) {
|
||||
$clnCounter = get_counter("CLN", 1);
|
||||
Log::debug('Generated CLN counter:', ['counter' => $clnCounter]);
|
||||
$updateData['protocol_no_cleaning'] = "CLN-" . $clnCounter;
|
||||
$updateData['protocol_date_cleaning'] = simdi();
|
||||
} else {
|
||||
Log::debug('protocol_date_cleaning is not empty, skipping', ['value' => $existingRow->protocol_date_cleaning]);
|
||||
}
|
||||
|
||||
if (!$existingRow || empty($existingRow->primer_coating_protocol_date)) {
|
||||
$l1Counter = get_counter("L1", 1);
|
||||
Log::debug('Generated L1 counter:', ['counter' => $l1Counter]);
|
||||
$updateData['primer_coating_protocol_no'] = "L1-" . $l1Counter;
|
||||
$updateData['primer_coating_protocol_date'] = simdi();
|
||||
} else {
|
||||
Log::debug('primer_coating_protocol_date is not empty, skipping', ['value' => $existingRow->primer_coating_protocol_date]);
|
||||
}
|
||||
|
||||
if (!$existingRow || empty($existingRow->intermediate_coating_protocol_date2)) {
|
||||
$l2Counter = get_counter("L2", 1);
|
||||
Log::debug('Generated L2 counter:', ['counter' => $l2Counter]);
|
||||
$updateData['intermediate_coating_protocol_no_2'] = "L2-" . $l2Counter;
|
||||
$updateData['intermediate_coating_protocol_date2'] = simdi();
|
||||
} else {
|
||||
Log::debug('intermediate_coating_protocol_date2 is not empty, skipping', ['value' => $existingRow->intermediate_coating_protocol_date2]);
|
||||
}
|
||||
|
||||
if (!$existingRow || empty($existingRow->final_coatingprotocol_date_3)) {
|
||||
$l3Counter = get_counter("L3", 1);
|
||||
Log::debug('Generated L3 counter:', ['counter' => $l3Counter]);
|
||||
$updateData['final_coating_protocol_no_3'] = "L3-" . $l3Counter;
|
||||
$updateData['final_coatingprotocol_date_3'] = simdi();
|
||||
} else {
|
||||
Log::debug('final_coatingprotocol_date_3 is not empty, skipping', ['value' => $existingRow->final_coatingprotocol_date_3]);
|
||||
}
|
||||
|
||||
if (!$existingRow || empty($existingRow->primer_coating_start_date)) {
|
||||
$updateData['primer_coating_start_date'] = simdi();
|
||||
}
|
||||
if (!$existingRow || empty($existingRow->primer_coating_finish_date)) {
|
||||
$updateData['primer_coating_finish_date'] = simdi();
|
||||
}
|
||||
if (!$existingRow || empty($existingRow->start_intermediate_date2)) {
|
||||
$updateData['start_intermediate_date2'] = simdi();
|
||||
}
|
||||
if (!$existingRow || empty($existingRow->finish_intermediate_date2)) {
|
||||
$updateData['finish_intermediate_date2'] = simdi();
|
||||
}
|
||||
if (!$existingRow || empty($existingRow->final_coat_start_date3)) {
|
||||
$updateData['final_coat_start_date3'] = simdi();
|
||||
}
|
||||
if (!$existingRow || empty($existingRow->final_coat_finish_date3)) {
|
||||
$updateData['final_coat_finish_date3'] = simdi();
|
||||
}
|
||||
|
||||
// 4. Eğer kayıt YOKSA INSERT yap
|
||||
if (!$existingRow) {
|
||||
// INSERT için temel alanları ekle
|
||||
$insertData = array_merge($updateData, [
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_no_joint_no' => $spoolJoint,
|
||||
'type_of_joint' => $weldLog->type_of_joint,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
|
||||
Log::debug('Inserting new paint_follow_ups record:', [
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_no_joint_no' => $spoolJoint,
|
||||
'field_count' => count($insertData)
|
||||
]);
|
||||
|
||||
$insertResult = db("paint_follow_ups")->insert($insertData);
|
||||
|
||||
if ($insertResult) {
|
||||
$updatedRow++;
|
||||
Log::debug('paint_follow_ups insert successful');
|
||||
|
||||
// Yeni eklenen kaydı çek (construction_paint_logs sync için)
|
||||
$existingRow = db("paint_follow_ups")
|
||||
->where([
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
"spool_no_joint_no" => $spoolJoint,
|
||||
])
|
||||
->first();
|
||||
} else {
|
||||
Log::debug('paint_follow_ups insert failed');
|
||||
}
|
||||
} else {
|
||||
// 3. Kayıt VARSA sadece boş olan alanları güncelle
|
||||
$initialUpdateCount = count($updateData);
|
||||
foreach ($updateData as $key => $value) {
|
||||
if (!empty($existingRow->$key)) {
|
||||
unset($updateData[$key]);
|
||||
Log::debug('Field is not empty, skipping update:', ['key' => $key, 'existing_value' => $existingRow->$key]);
|
||||
} else {
|
||||
Log::debug('Field is empty, will update:', ['key' => $key, 'new_value' => $value]);
|
||||
}
|
||||
}
|
||||
|
||||
Log::debug('Fields to be updated:', [
|
||||
'initial_count' => $initialUpdateCount,
|
||||
'final_count' => count($updateData),
|
||||
'fields_removed' => $initialUpdateCount - count($updateData)
|
||||
]);
|
||||
|
||||
Log::debug('Update data for paint_follow_ups:', $updateData);
|
||||
|
||||
// 4. Eğer güncellenecek alan kaldıysa update et
|
||||
if (!empty($updateData)) {
|
||||
$updateResult = db("paint_follow_ups")
|
||||
->where([
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
"spool_no_joint_no" => $spoolJoint,
|
||||
])
|
||||
->update($updateData);
|
||||
|
||||
$updatedRow += $updateResult;
|
||||
Log::debug('paint_follow_ups update result:', [
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_no_joint_no' => $spoolJoint,
|
||||
'rows_affected' => $updateResult
|
||||
]);
|
||||
} else {
|
||||
Log::debug('No fields to update for paint_follow_ups');
|
||||
}
|
||||
}
|
||||
|
||||
Log::debug('Total updated rows so far:', ['updatedRow' => $updatedRow]);
|
||||
|
||||
// paint_follow_ups güncellemesinden sonra kaydı tekrar çek (güncel data için)
|
||||
$existingRow = db("paint_follow_ups")
|
||||
->where([
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
"spool_no_joint_no" => $spoolJoint,
|
||||
])
|
||||
->first();
|
||||
|
||||
Log::debug('Refreshed paint_follow_ups record for construction sync:', [
|
||||
'found' => !is_null($existingRow),
|
||||
'id' => $existingRow->id ?? null
|
||||
]);
|
||||
|
||||
// paint_follow_ups güncellemesinden sonra construction_paint_logs tablosunu da güncelle
|
||||
// Field mapping: construction_paint_logs => paint_follow_ups (ConstructionPaintLogsTrigger.php'ye uygun)
|
||||
$dateFieldsToSync = [
|
||||
'blasting_date' => 'protocol_date_cleaning',
|
||||
'blasting_finish_date' => 'protocol_date_cleaning',
|
||||
'painting_date_1' => 'primer_coating_start_date',
|
||||
'painting_finish_date_1' => 'primer_coating_finish_date',
|
||||
'rfi_date_1' => 'primer_coating_rfi_date_1',
|
||||
'painting_date_2' => 'start_intermediate_date2',
|
||||
'painting_finish_date_2' => 'finish_intermediate_date2',
|
||||
'rfi_date_2' => 'intermediate_coating_rfi_date_3',
|
||||
'painting_date_3' => 'final_coat_start_date3',
|
||||
'painting_finish_date_3' => 'final_coat_finish_date3',
|
||||
'rfi_date_3' => 'final_coating_rfi_date_3',
|
||||
];
|
||||
|
||||
// Non-date fields mapping
|
||||
$nonDateFieldsToSync = [
|
||||
'rfi_no_1' => 'primer_coating_rfi_no',
|
||||
'thickness_1' => 'primer_measured_thickness_1',
|
||||
'rfi_no_2' => 'intermediate_coating_rfi_no2',
|
||||
'thickness_2' => 'intermediate_measured_thickness_2',
|
||||
'rfi_no_3' => 'final_coating_rfi_no3',
|
||||
'thickness_3' => 'final_coating_measured_thickness_3',
|
||||
];
|
||||
|
||||
Log::debug('Field mappings to sync:', [
|
||||
'date_fields' => count($dateFieldsToSync),
|
||||
'non_date_fields' => count($nonDateFieldsToSync)
|
||||
]);
|
||||
|
||||
// construction_paint_logs için sync data hazırla
|
||||
$conSyncData = [];
|
||||
|
||||
// Tarih alanları - sadece construction_paint_logs'ta BOŞ olanları ekle
|
||||
foreach ($dateFieldsToSync as $conField => $paintField) {
|
||||
// paint_follow_ups'tan veri varsa VE construction_paint_logs'ta boşsa
|
||||
if (isset($existingRow->$paintField) && !empty($existingRow->$paintField)) {
|
||||
// Construction paint logs'ta bu alan boş mu kontrol et
|
||||
if (!$existingConPaintLog || empty($existingConPaintLog->$conField)) {
|
||||
$conSyncData[$conField] = $existingRow->$paintField;
|
||||
Log::debug('Adding date field to sync:', [
|
||||
'con_field' => $conField,
|
||||
'paint_field' => $paintField,
|
||||
'value' => $existingRow->$paintField
|
||||
]);
|
||||
} else {
|
||||
Log::debug('Date field is not empty in construction_paint_logs, skipping:', [
|
||||
'field' => $conField,
|
||||
'existing_value' => $existingConPaintLog->$conField
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Non-date alanları - sadece construction_paint_logs'ta BOŞ olanları ekle
|
||||
foreach ($nonDateFieldsToSync as $conField => $paintField) {
|
||||
if (isset($existingRow->$paintField) && !empty($existingRow->$paintField)) {
|
||||
if (!$existingConPaintLog || empty($existingConPaintLog->$conField)) {
|
||||
$conSyncData[$conField] = $existingRow->$paintField;
|
||||
Log::debug('Adding non-date field to sync:', [
|
||||
'con_field' => $conField,
|
||||
'paint_field' => $paintField,
|
||||
'value' => $existingRow->$paintField
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$existingConPaintLog) {
|
||||
// Kayıt YOKSA INSERT yap
|
||||
if (!empty($conSyncData)) {
|
||||
$conInsertData = array_merge($conSyncData, [
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
|
||||
Log::debug('Inserting new construction_paint_logs record:', [
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
'field_count' => count($conInsertData)
|
||||
]);
|
||||
|
||||
$conInsertResult = db('construction_paint_logs')->insert($conInsertData);
|
||||
|
||||
if ($conInsertResult) {
|
||||
Log::debug('construction_paint_logs insert successful');
|
||||
} else {
|
||||
Log::debug('construction_paint_logs insert failed');
|
||||
}
|
||||
} else {
|
||||
Log::debug('No data to insert for construction_paint_logs');
|
||||
}
|
||||
} else {
|
||||
// Kayıt VARSA update et (zaten boş olanları filtreledik)
|
||||
if (!empty($conSyncData)) {
|
||||
$conUpdateResult = db('construction_paint_logs')
|
||||
->where([
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
])
|
||||
->update($conSyncData);
|
||||
|
||||
Log::debug('construction_paint_logs update result:', [
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
'rows_affected' => $conUpdateResult,
|
||||
'fields_updated' => array_keys($conSyncData)
|
||||
]);
|
||||
} else {
|
||||
Log::debug('No fields to update for construction_paint_logs (all fields are already filled)');
|
||||
}
|
||||
}
|
||||
|
||||
// --- INCOMING CONTROL PAINTS SYNC ---
|
||||
$brands = ['brend_name_1', 'brend_name_2', 'brend_name_3'];
|
||||
Log::debug('Starting incoming control paints sync for brands:', $brands);
|
||||
|
||||
foreach ($brands as $index => $brandField) {
|
||||
if (!empty($existingRow->$brandField)) {
|
||||
Log::debug('Processing brand:', [
|
||||
'index' => $index,
|
||||
'brand_field' => $brandField,
|
||||
'brand_value' => $existingRow->$brandField
|
||||
]);
|
||||
|
||||
$incomingControl = db('incoming_control_paints')
|
||||
->where('brend_name', $existingRow->$brandField)
|
||||
->orderBy('rfi_date', 'desc')
|
||||
->first();
|
||||
|
||||
Log::debug('Incoming control paint lookup:', [
|
||||
'brend_name' => $existingRow->$brandField,
|
||||
'found' => !is_null($incomingControl),
|
||||
'id' => $incomingControl->id ?? null
|
||||
]);
|
||||
|
||||
if ($incomingControl) {
|
||||
$suffix = $index + 1;
|
||||
$updateIncoming = [
|
||||
'incoming_control_akt_no_' . $suffix => $incomingControl->akt_number,
|
||||
'incoming_control_rfi_no_' . $suffix => $incomingControl->rfi_no,
|
||||
'akt_date_' . $suffix => $incomingControl->akt_date,
|
||||
'standartgost_iso_en_' . $suffix => $incomingControl->manufacturing_standard,
|
||||
'certificate_passport_no_' . $suffix => $incomingControl->certificate_no,
|
||||
'certificate_passport_date_' . $suffix => $incomingControl->certificate_date,
|
||||
];
|
||||
|
||||
Log::debug('Incoming control update data:', [
|
||||
'suffix' => $suffix,
|
||||
'update_data' => $updateIncoming
|
||||
]);
|
||||
|
||||
// paint_follow_ups güncelle
|
||||
$pfuUpdateResult = db('paint_follow_ups')
|
||||
->where([
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_no_joint_no' => $spoolJoint,
|
||||
])
|
||||
->update($updateIncoming);
|
||||
|
||||
Log::debug('paint_follow_ups incoming control update:', [
|
||||
'iso_number' => $weldLog->iso_number,
|
||||
'spool_no_joint_no' => $spoolJoint,
|
||||
'rows_affected' => $pfuUpdateResult
|
||||
]);
|
||||
|
||||
// construction_paint_logs güncelle
|
||||
/*
|
||||
$cplUpdateResult = db('construction_paint_logs')
|
||||
->where([
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
])
|
||||
->update($updateIncoming);
|
||||
|
||||
Log::debug('construction_paint_logs incoming control update:', [
|
||||
'iso_drawings' => $weldLog->iso_number,
|
||||
'spool' => $spoolJoint,
|
||||
'rows_affected' => $cplUpdateResult
|
||||
]);
|
||||
*/
|
||||
}
|
||||
} else {
|
||||
Log::debug('Empty brand field, skipping:', ['index' => $index, 'brand_field' => $brandField]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log::debug('Paint Follow Up update completed', ['total_updated_rows' => $updatedRow]);
|
||||
bilgi(":update row affected for Paint Follow Up", "success", ['update' => $updatedRow]);
|
||||
} else {
|
||||
Log::debug('Temperature settings not found, operation aborted');
|
||||
}
|
||||
|
||||
Log::debug('Paint Follow Up Updater - Finished');
|
||||
?>
|
||||
@@ -1,424 +0,0 @@
|
||||
<?php $paintMatrixQuery = db("paint_follow_ups")->get();
|
||||
$paintMatrix = [];
|
||||
|
||||
foreach($paintMatrixQuery AS $pmq) {
|
||||
if($pmq->line!="") {
|
||||
$paintMatrix[$pmq->iso_number] = $pmq;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@if(is_stellar())
|
||||
<div class="text-center">
|
||||
@if(count($paintInfos)>0)
|
||||
<a href="#" onclick="submitChecklistOkForm()" class="btn btn-outline-success">{{e2('Paint Release Checklist OK')}}</a>
|
||||
@endif
|
||||
|
||||
<script>
|
||||
function submitChecklistOkForm() {
|
||||
// Show confirmation dialog first
|
||||
Swal.fire({
|
||||
title: '{{e2("Are you sure?")}}',
|
||||
text: '{{e2("Do you want to mark Paint Release Checklist as OK?")}}',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '{{e2("Yes, confirm")}}',
|
||||
cancelButtonText: '{{e2("Cancel")}}'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
// User confirmed, proceed with the operation
|
||||
|
||||
// Get parameters
|
||||
var postParams = <?php echo json_encode($_GET); ?>;
|
||||
|
||||
// Build ISO+SPL pairs from URL parameters
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
|
||||
if(postParams.iso_number) {
|
||||
isoNumbers = postParams.iso_number.split(',');
|
||||
}
|
||||
if(postParams.spool_number) {
|
||||
spoolNumbers = postParams.spool_number.split(',');
|
||||
}
|
||||
|
||||
// Create ISO+SPL pairs (format: iso_number|spool_number)
|
||||
var isoSpoolPairs = [];
|
||||
var maxCount = Math.max(isoNumbers.length, spoolNumbers.length);
|
||||
|
||||
for(var i = 0; i < maxCount; i++) {
|
||||
var iso = (isoNumbers[i] || '').trim();
|
||||
var spool = (spoolNumbers[i] || '').trim();
|
||||
if(iso && spool) {
|
||||
isoSpoolPairs.push(iso + '|' + spool);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove old separate parameters
|
||||
delete postParams.iso_number;
|
||||
delete postParams.spool_number;
|
||||
|
||||
// Add ISO+SPL pairs
|
||||
if(isoSpoolPairs.length > 0) {
|
||||
postParams.iso_spool_pairs = isoSpoolPairs.join(',');
|
||||
}
|
||||
|
||||
// Add CSRF token
|
||||
postParams._token = "{{csrf_token()}}";
|
||||
postParams['paint'] = 'ok';
|
||||
|
||||
// Show loading indicator
|
||||
Swal.fire({
|
||||
title: '{{e2("Processing...")}}',
|
||||
text: '{{e2("Please wait")}}',
|
||||
allowOutsideClick: false,
|
||||
allowEscapeKey: false,
|
||||
allowEnterKey: false,
|
||||
didOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
// Perform AJAX request
|
||||
$.ajax({
|
||||
url: '/admin-ajax/checklist-system',
|
||||
type: 'POST',
|
||||
data: postParams,
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(response) {
|
||||
// Parse response if it's a string
|
||||
if (typeof response === 'string') {
|
||||
response = JSON.parse(response);
|
||||
}
|
||||
|
||||
if (response.status === 'success') {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: '{{e2("Success")}}',
|
||||
text: response.message || '{{e2("Paint Release Checklist has been marked as OK")}}',
|
||||
confirmButtonText: '{{e2("OK")}}'
|
||||
}).then((result) => {
|
||||
// Reload page to reflect changes
|
||||
if (result.isConfirmed) {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: '{{e2("Error")}}',
|
||||
text: response.message || '{{e2("An error occurred while processing your request")}}',
|
||||
confirmButtonText: '{{e2("OK")}}'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: '{{e2("Error")}}',
|
||||
text: '{{e2("An error occurred while processing your request")}}'
|
||||
});
|
||||
console.error(xhr.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
// If user cancelled, do nothing
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div id="paint-info-datagrid"></div>
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "composite_key",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: '{{ url("admin") }}?ajax=paint-info',
|
||||
dataType: 'json',
|
||||
method: 'POST',
|
||||
data: {
|
||||
iso_number: '{{ get("iso_number") }}',
|
||||
spool_number: '{{ get("spool_number") }}',
|
||||
_token: '{{ csrf_token() }}',
|
||||
},
|
||||
success(result) {
|
||||
// Add composite key to each row
|
||||
if(result && Array.isArray(result)) {
|
||||
result.forEach(function(row) {
|
||||
row.composite_key = row.iso_number + '|' + row.spool_number;
|
||||
});
|
||||
}
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{ e2("Data Loading Error") }}');
|
||||
},
|
||||
// timeout: 20000,
|
||||
});
|
||||
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// Extract iso_number and spool_number from composite key
|
||||
var keyParts = key.split('|');
|
||||
var isoNumber = keyParts[0];
|
||||
var spoolNumber = keyParts[1];
|
||||
|
||||
console.log("Updating: ISO=" + isoNumber + ", Spool=" + spoolNumber, values);
|
||||
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/paint_follow_ups" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key: {
|
||||
iso_number: isoNumber,
|
||||
spool_no_joint_no: spoolNumber
|
||||
}
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
console.log("Update success:", e);
|
||||
deferred.resolve();
|
||||
})
|
||||
.fail(function(e){
|
||||
console.log("Update failed:", e);
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
}
|
||||
});
|
||||
var welderWdi = $("#paint-info-datagrid").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: false,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
toolbar: {
|
||||
items: [
|
||||
"saveButton",
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: true,
|
||||
<?php } ?>
|
||||
startEditAction: 'dblClick',
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
grouping: {
|
||||
contextMenuEnabled: true
|
||||
},
|
||||
groupPanel: {
|
||||
visible: true // or "auto"
|
||||
},
|
||||
columns : [
|
||||
{
|
||||
caption: "Welds",
|
||||
dataField: "iso_number",
|
||||
dataType: "text",
|
||||
groupIndex: 1,
|
||||
allowEditing: false,
|
||||
},
|
||||
{
|
||||
caption: "Spool",
|
||||
dataField: "spool_number",
|
||||
dataType: "text",
|
||||
allowEditing: false,
|
||||
|
||||
},
|
||||
/*
|
||||
{
|
||||
caption: "Joint",
|
||||
dataField: "no_of_the_joint_as_per_as_built_survey",
|
||||
allowEditing: false,
|
||||
dataType: "text",
|
||||
},
|
||||
*/
|
||||
{
|
||||
caption: "Paint C.",
|
||||
dataField: "painting_cycle",
|
||||
allowEditing: false,
|
||||
dataType: "text",
|
||||
groupIndex: 2,
|
||||
},
|
||||
{
|
||||
caption: "P1",
|
||||
dataField: "brend_name_1",
|
||||
allowEditing: false,
|
||||
dataType: "text",
|
||||
},
|
||||
{
|
||||
caption: "THC1",
|
||||
dataField: "primer_measured_thickness_1",
|
||||
|
||||
dataType: "number",
|
||||
},
|
||||
{
|
||||
caption: "P2",
|
||||
dataField: "brend_name_2",
|
||||
allowEditing: false,
|
||||
dataType: "text",
|
||||
},
|
||||
{
|
||||
caption: "THC2",
|
||||
dataField: "intermediate_measured_thickness_2",
|
||||
dataType: "number",
|
||||
},
|
||||
{
|
||||
caption: "P3",
|
||||
dataField: "brend_name_3",
|
||||
allowEditing: false,
|
||||
dataType: "text",
|
||||
},
|
||||
{
|
||||
caption: "THC3",
|
||||
dataField: "final_coating_measured_thickness_3",
|
||||
dataType: "number",
|
||||
},
|
||||
],
|
||||
onEditorPreparing(e) {
|
||||
|
||||
if(e.parentType == "dataRow") {
|
||||
/*
|
||||
if(e.dataField == "real_welder_1" || e.dataField == "real_welder_2") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.searchEnabled = true;
|
||||
e.editorOptions.acceptCustomValue = false;
|
||||
e.editorOptions.dataSource = '{{autocomplete_type("wqt*welder_1")}}?row=' + JSON.stringify(e.row.data);
|
||||
} else {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
|
||||
setTimeout(function() {
|
||||
weldmap.dxDataGrid("instance").columnOption("welding_date", "dataType", "date");
|
||||
}, 2000);
|
||||
*/
|
||||
});
|
||||
</script>
|
||||
<div class="table-responsive d-none">
|
||||
<table class="table table-sm table-bordered table-striped table-hover">
|
||||
<tr>
|
||||
<th class="d-none">{{e2("Welds")}}</th>
|
||||
<th class="d-none">{{e2("Joint")}}</th>
|
||||
<th>{{e2("Paint C.")}}</th>
|
||||
<th>{{e2("P1")}}</th>
|
||||
<th>{{e2("THC1")}}</th>
|
||||
<th>{{e2("P2")}}</th>
|
||||
<th>{{e2("THC2")}}</th>
|
||||
<th>{{e2("P3")}}</th>
|
||||
<th>{{e2("THC3")}}</th>
|
||||
<th>{{e2("Result")}}</th>
|
||||
<th>{{e2("Sign")}}</th>
|
||||
|
||||
</tr>
|
||||
<?php foreach($paintInfos AS $paintInfo) {
|
||||
?>
|
||||
<tr>
|
||||
|
||||
<td class="d-none">
|
||||
@if(count($isoNumbers)>1)
|
||||
<small>{{$paintInfo->iso_number}} / {{$paintInfo->spool_number}}</small>
|
||||
@else
|
||||
{{$paintInfo->no_of_the_joint_as_per_as_built_survey}}
|
||||
@endif
|
||||
</td>
|
||||
<td class="d-none">{{$paintInfo->type_of_joint}}</td>
|
||||
<td>{{$paintInfo->painting_cycle}}</td>
|
||||
<?php if(isset($paintMatrix[$paintInfo->iso_number])) {
|
||||
$matrixData = $paintMatrix[$paintInfo->iso_number];
|
||||
?>
|
||||
<td>{{$matrixData->brend_name_1}}</td>
|
||||
<td><input type="number" name="primer_measured_thickness_1" min="{{$matrixData->thickness_1}}" step="any" data-id="{{$matrixData->id}}" value="{{$matrixData->thickness_1}}" class="form-control edit" table="paint_follow_ups"></td>
|
||||
<td>{{$matrixData->brend_name_2}}</td>
|
||||
<td><input type="number" name="intermediate_measured_thickness_2" min="{{$matrixData->thickness_2}}" step="any" data-id="{{$matrixData->id}}" value="{{$matrixData->thickness_2}}" class="form-control edit" table="paint_follow_ups"></td>
|
||||
<td>{{$matrixData->brend_name_3}}</td>
|
||||
<td><input type="number" name="final_coating_measured_thickness_3" min="{{$matrixData->thickness_3}}" step="any" data-id="{{$matrixData->id}}" value="{{$matrixData->thickness_3}}" class="form-control edit" table="paint_follow_ups"></td>
|
||||
|
||||
<?php } else {
|
||||
?>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<?php
|
||||
} ?>
|
||||
<td>
|
||||
@if($paintInfo->spool_paint_check != "")
|
||||
✒️
|
||||
@endif
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
<?php } ?>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
<?php
|
||||
if(getisset("rollback")) {
|
||||
$data = db("weld_logs")->where("id", get("rollback"))->first();
|
||||
$prevStatus = $data->spool_status;
|
||||
if($data->spool_status == "Completed") {
|
||||
|
||||
if($data->paint_release_no != "") {
|
||||
$nowStatus = "Paint";
|
||||
|
||||
$updateData = [
|
||||
"spool_status" => $nowStatus,
|
||||
"paint_release_date" => null,
|
||||
"paint_release_no" => null,
|
||||
"spool_paint_check" => null,
|
||||
"register_date" => null,
|
||||
"register_paint_no" => null,
|
||||
];
|
||||
} else {
|
||||
$nowStatus = "NDT Release";
|
||||
|
||||
$updateData = [
|
||||
"spool_status" => $nowStatus,
|
||||
"ndt_release_date" => null,
|
||||
"ndt_release_no" => null,
|
||||
"ndt_release_check" => null,
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($data->spool_status == "Paint") {
|
||||
$nowStatus = "NDT Release";
|
||||
|
||||
$updateData = [
|
||||
"spool_status" => $nowStatus,
|
||||
"ndt_release_date" => null,
|
||||
"ndt_release_no" => null,
|
||||
"ndt_release_check" => null,
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
if($data->spool_status == "NDT Release") {
|
||||
$nowStatus = "Spool Release";
|
||||
|
||||
$updateData = [
|
||||
"spool_status" => $nowStatus,
|
||||
"spool_ndt_check" => null,
|
||||
"spool_paint_check" => null,
|
||||
"spool_ndt_check_no" => null,
|
||||
"spool_ndt_check_date" => null,
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
if($data->spool_status == "Spool Release") {
|
||||
if(!rejected_date($data->welding_date))
|
||||
{
|
||||
$nowStatus = "Spool Release";
|
||||
}
|
||||
else
|
||||
{
|
||||
$nowStatus = "On Going";
|
||||
}
|
||||
|
||||
|
||||
$updateData = [
|
||||
"spool_status" => $nowStatus,
|
||||
"spool_ndt_check" => null,
|
||||
"spool_paint_check" => null,
|
||||
"spool_ndt_check_no" => null,
|
||||
"ndt_release_check" => null,
|
||||
"clearance_date" => null,
|
||||
"clearance_no" => null
|
||||
];
|
||||
}
|
||||
if($data->spool_status == "QC") {
|
||||
$nowStatus = "Spool Release";
|
||||
|
||||
$updateData = [
|
||||
"spool_status" => $nowStatus,
|
||||
"spool_ndt_check" => null,
|
||||
"spool_paint_check" => null,
|
||||
"spool_ndt_check_no" => null,
|
||||
"ndt_release_check" => null,
|
||||
"clearance_date" => null,
|
||||
"clearance_no" => null
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
if(isset($updateData)) {
|
||||
// ISO ve SPOOL numaralarını dizilere dönüştür
|
||||
$isoNumbers = explode(",", get("iso_number"));
|
||||
$spoolNumbers = explode(",", get("spool_number"));
|
||||
|
||||
// Dizileri trim edelim ve minimum eleman sayısı kadar döngü yapalım
|
||||
$totalUpdates = min(count($isoNumbers), count($spoolNumbers));
|
||||
$totalAffectedRows = 0;
|
||||
|
||||
// Her bir çift için güncelleme yapalım
|
||||
for ($i = 0; $i < $totalUpdates; $i++) {
|
||||
$currentIso = trim($isoNumbers[$i]);
|
||||
$currentSpool = trim($spoolNumbers[$i]);
|
||||
|
||||
$affectedRows = db("weld_logs")
|
||||
->where("iso_number", $currentIso)
|
||||
->where("spool_number", $currentSpool)
|
||||
->update($updateData);
|
||||
|
||||
$totalAffectedRows += $affectedRows;
|
||||
}
|
||||
|
||||
bilgi("In this isometry, :prevStatus status is reverted to :nowStatus status. (:count rows affected)","success",
|
||||
[
|
||||
'nowStatus' => $nowStatus,
|
||||
'prevStatus' => $prevStatus,
|
||||
'count' => $totalAffectedRows
|
||||
]);
|
||||
} else {
|
||||
bilgi("You cannot revert this data because no changes were made.", "error" );
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
|
||||
$documentInfo = document_template("spool-release-check-list");
|
||||
|
||||
// İso ve spool numaralarını dizilere dönüştür
|
||||
$isoNumbers = explode(",", get("iso_number"));
|
||||
$spoolNumbers = explode(",", get("spool_number"));
|
||||
|
||||
// Dizileri trim edelim ve minimum eleman sayısı kadar döngü yapalım
|
||||
$totalDocuments = min(count($isoNumbers), count($spoolNumbers));
|
||||
|
||||
// Her bir çift için belge oluşturalım
|
||||
for ($i = 0; $i < $totalDocuments; $i++) {
|
||||
$currentIso = trim($isoNumbers[$i]);
|
||||
$currentSpool = trim($spoolNumbers[$i]);
|
||||
|
||||
$data = db("weld_logs")
|
||||
->where("iso_number", $currentIso)
|
||||
->where("spool_number", $currentSpool)
|
||||
->first();
|
||||
|
||||
if (!$data) {
|
||||
continue; // Eğer veri bulunamazsa sonraki çifte geç
|
||||
}
|
||||
|
||||
$users = usersArray();
|
||||
$fileName = $data->spool_ndt_check_no;
|
||||
|
||||
$document = pdf_html_content($documentInfo->html);
|
||||
$document = str_replace("{today}", date("d/m/Y"), $document);
|
||||
|
||||
foreach($data AS $column => $value) {
|
||||
if($column == "spool_ndt_check") {
|
||||
if(isset($users[$value])) {
|
||||
$value = $users[$value]->name;
|
||||
}
|
||||
}
|
||||
$document = str_replace("{" . $column . "}", $value, $document);
|
||||
}
|
||||
|
||||
$path = "004_QA/0009_Spool_Release_Check_List";
|
||||
$path = "$path/$fileName";
|
||||
|
||||
html_create("$path", $document);
|
||||
}
|
||||
?>
|
||||
@@ -1,200 +0,0 @@
|
||||
<?php
|
||||
$stats = apply_welded_filter(db("weld_logs"))->get();
|
||||
$counter = [];
|
||||
foreach($stats AS $stat) {
|
||||
if(!isset($counter[$stat->iso_number . $stat->spool_number][$stat->spool_status]))
|
||||
$counter[$stat->iso_number . $stat->spool_number][$stat->spool_status] = 0;
|
||||
|
||||
$counter[$stat->iso_number . $stat->spool_number][$stat->spool_status]++;
|
||||
}
|
||||
//dump($counter);
|
||||
$spoolStatus = ['Waiting', 'On Going', 'Spool Release', 'NDT Release', 'Paint', 'Completed'];
|
||||
|
||||
|
||||
$allStatsData =
|
||||
json_decode(
|
||||
view("admin-ajax/spool-area-release")
|
||||
->render(),
|
||||
true
|
||||
);
|
||||
|
||||
$stats = $allStatsData['summary'];
|
||||
$eStats = $allStatsData['esummary'];
|
||||
|
||||
|
||||
|
||||
$totalCount = array_sum($stats);
|
||||
|
||||
$labels = implode("','",array_keys($stats));
|
||||
$datas = implode(",",array_values($stats));
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
|
||||
<div id="spoolStatusChart"></div>
|
||||
<script>
|
||||
|
||||
$(() => {
|
||||
|
||||
const testStatusData = <?php echo json_encode(array_map(function($key, $value) {
|
||||
return ['spool_status' => $key, 'val' => $value];
|
||||
}, array_keys($stats), $stats)); ?>;
|
||||
console.log(testStatusData);
|
||||
|
||||
$('#spoolStatusChart').dxPieChart({
|
||||
type: 'doughnut',
|
||||
// palette: 'Soft Pastel',
|
||||
dataSource: testStatusData,
|
||||
// title: '{{e2("Spool List")}}',
|
||||
tooltip: {
|
||||
enabled: true,
|
||||
// format: 'millions',
|
||||
customizeTooltip(arg) {
|
||||
return {
|
||||
text: `${arg.valueText} - ${(arg.percent * 100).toFixed(2)}%`,
|
||||
};
|
||||
},
|
||||
},
|
||||
legend: {
|
||||
horizontalAlignment: 'center',
|
||||
verticalAlignment: 'top',
|
||||
margin: 0,
|
||||
visible: true
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
},
|
||||
series: [{
|
||||
argumentField: 'spool_status',
|
||||
label: {
|
||||
visible: true,
|
||||
connector: {
|
||||
visible: true,
|
||||
},
|
||||
customizeText: function (arg) {
|
||||
|
||||
return arg.percentText;
|
||||
}
|
||||
},
|
||||
}],
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
|
||||
<table class="table table-sm table-bordered table-striped">
|
||||
|
||||
<tr>
|
||||
<th>{{e2("Status")}}</th>
|
||||
<th>{{e2("Count")}}</th>
|
||||
<th>{{e2("%")}}</th>
|
||||
</tr>
|
||||
<?php
|
||||
$completedTotal = 0;
|
||||
$statsData = [];
|
||||
foreach($stats AS $statusName => $count) {
|
||||
$statsData[$statusName] = $count;
|
||||
if($statusName == "Completed") {
|
||||
$completedTotal = $count;
|
||||
}
|
||||
?>
|
||||
|
||||
<?php } ?>
|
||||
<?php foreach($spoolStatus AS $spoolStat) {
|
||||
?>
|
||||
<tr>
|
||||
<td>{{$spoolStat}}</td>
|
||||
<td><?php
|
||||
if(!isset($statsData[$spoolStat]))
|
||||
$statsData[$spoolStat] = 0;
|
||||
|
||||
echo $statsData[$spoolStat];
|
||||
|
||||
try {
|
||||
$avgSpoolStats = round($statsData[$spoolStat] * 100 / $totalCount, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$avgSpoolStats = 0;
|
||||
}
|
||||
?></td>
|
||||
<td>%{{$avgSpoolStats}}</td>
|
||||
</tr>
|
||||
<?php
|
||||
} ?>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td>{{e2("Total Spools")}}</td>
|
||||
<td>{{$totalCount}}</td>
|
||||
<td>%100</td>
|
||||
|
||||
</tr>
|
||||
<?php
|
||||
try {
|
||||
$completedPercent = round($completedTotal * 100 / $totalCount, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$completedPercent = 0;
|
||||
}
|
||||
?>
|
||||
|
||||
</table>
|
||||
|
||||
<table class="table table-sm table-bordered table-striped">
|
||||
<tr>
|
||||
<th>{{e2("E Paint Spool")}}</th>
|
||||
<td><?php
|
||||
$paintSpoolCount = isset($eStats['Paint']) ? $eStats['Paint'] : 0;
|
||||
echo $paintSpoolCount;
|
||||
?></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{e2("E Completed Spool")}}</th>
|
||||
<td><?php
|
||||
$completedSpoolCount = isset($eStats['Completed']) ? $eStats['Completed'] : 0;
|
||||
echo $completedSpoolCount;
|
||||
?></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{e2("Total")}}</th>
|
||||
<td>{{$paintSpoolCount + $completedSpoolCount}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const ctx = document.getElementById('statusStats');
|
||||
|
||||
new Chart(ctx, {
|
||||
type: 'doughnut',
|
||||
data: {
|
||||
labels: ['<?php echo $labels ?>'],
|
||||
datasets: [{
|
||||
label: '# {{e2("Count")}}',
|
||||
data: [<?php echo $datas ?>],
|
||||
borderWidth: 1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
y: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="progress mt-5">
|
||||
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="{{$completedPercent}}" aria-valuemin="0" aria-valuemax="100" style="width: {{$completedPercent}}%">
|
||||
{{$completedPercent}}%
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php
|
||||
try {
|
||||
// Fetch the cached content
|
||||
$cachedContent = Storage::get('cache/spool-list-chart.blade.php',);
|
||||
|
||||
// Display the cached content
|
||||
echo $cachedContent;
|
||||
} catch (\Exception $e) {
|
||||
dump($e);
|
||||
}
|
||||
?>
|
||||
@@ -1,140 +0,0 @@
|
||||
<?php $field = true; ?>
|
||||
@includeCache("admin.type.spool-release.spool-list-chart")
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=spool-list-field',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
$("#dataGridSpoolList").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: true },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
columns : [
|
||||
|
||||
{
|
||||
dataField: "iso_number",
|
||||
allowEditing: false,
|
||||
allowFiltering: true,
|
||||
allowSorting: true,
|
||||
cellTemplate: function (container, options) {
|
||||
console.log(options);
|
||||
var isoNumber = options.data.iso_number;
|
||||
$('<a>' + isoNumber + '</a>')
|
||||
.attr('href', "?iso_number=" + isoNumber)
|
||||
//.attr('target', '_blank')
|
||||
.appendTo(container);
|
||||
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "iso_rev",
|
||||
},
|
||||
{
|
||||
dataField: "tp_status",
|
||||
},
|
||||
{
|
||||
dataField: "date_test",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
|
||||
|
||||
],
|
||||
toolbar: {
|
||||
items: [
|
||||
"saveButton",
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: true,
|
||||
<?php } ?>
|
||||
startEditAction: 'click',
|
||||
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div id="dataGridSpoolList"></div>
|
||||
@@ -1,680 +0,0 @@
|
||||
@include("admin.type.spool-release.spool-list-chart")
|
||||
<hr>
|
||||
<script>
|
||||
$(function(){
|
||||
// LocalStorage key for this grid
|
||||
var storageKey = 'spoolListGridState_{{$id}}';
|
||||
var stateLoaded = false; // Flag to prevent multiple loads
|
||||
|
||||
// Function to save grid state to localStorage
|
||||
function saveGridState(grid) {
|
||||
try {
|
||||
if (!grid || !grid.option) {
|
||||
console.warn('Grid not ready for saving state');
|
||||
return;
|
||||
}
|
||||
|
||||
// Get current filter value (includes filterRow and headerFilter)
|
||||
var filterValue = grid.option('filterValue');
|
||||
|
||||
var state = {
|
||||
filterValue: filterValue,
|
||||
columns: grid.option('columns').map(function(col) {
|
||||
return {
|
||||
dataField: col.dataField,
|
||||
visible: col.visible !== false,
|
||||
width: col.width,
|
||||
sortOrder: col.sortOrder,
|
||||
sortIndex: col.sortIndex
|
||||
};
|
||||
}),
|
||||
selectedRowKeys: grid.getSelectedRowKeys(),
|
||||
columnAutoWidth: grid.option('columnAutoWidth')
|
||||
};
|
||||
|
||||
localStorage.setItem(storageKey, JSON.stringify(state));
|
||||
console.log('Grid state saved to localStorage:', storageKey, state);
|
||||
} catch(e) {
|
||||
console.warn('Failed to save grid state:', e);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to load grid state from localStorage
|
||||
function loadGridState(grid) {
|
||||
if (stateLoaded) {
|
||||
console.log('State already loaded, skipping...');
|
||||
return; // Prevent multiple loads
|
||||
}
|
||||
|
||||
try {
|
||||
var savedState = localStorage.getItem(storageKey);
|
||||
if (!savedState) {
|
||||
console.log('No saved state found in localStorage');
|
||||
// No saved state, mark as loaded so we can start saving
|
||||
stateLoaded = true;
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Loading state from localStorage:', savedState);
|
||||
var state = JSON.parse(savedState);
|
||||
console.log('Parsed state:', state);
|
||||
|
||||
// Restore filter first - wait a bit for grid to be ready
|
||||
if (state.filterValue) {
|
||||
var restoreFilter = function() {
|
||||
try {
|
||||
console.log('Restoring filterValue:', state.filterValue);
|
||||
grid.option('filterValue', state.filterValue);
|
||||
console.log('Filter restored successfully');
|
||||
} catch(e) {
|
||||
console.warn('Failed to restore filterValue:', e);
|
||||
}
|
||||
};
|
||||
|
||||
// Try multiple times to restore filter
|
||||
var filterAttempts = 0;
|
||||
var maxFilterAttempts = 5;
|
||||
var tryRestoreFilter = function() {
|
||||
filterAttempts++;
|
||||
try {
|
||||
if (grid && grid.option) {
|
||||
restoreFilter();
|
||||
} else if (filterAttempts < maxFilterAttempts) {
|
||||
setTimeout(tryRestoreFilter, 200);
|
||||
return;
|
||||
}
|
||||
} catch(e) {
|
||||
if (filterAttempts < maxFilterAttempts) {
|
||||
setTimeout(tryRestoreFilter, 200);
|
||||
return;
|
||||
}
|
||||
console.warn('Failed to restore filter after attempts:', e);
|
||||
}
|
||||
};
|
||||
setTimeout(tryRestoreFilter, 100);
|
||||
}
|
||||
|
||||
// Restore selected rows after a delay to ensure data is loaded
|
||||
if (state.selectedRowKeys && state.selectedRowKeys.length > 0) {
|
||||
console.log('Restoring selected rows:', state.selectedRowKeys);
|
||||
// Try multiple times to ensure data is loaded
|
||||
var attempts = 0;
|
||||
var maxAttempts = 15;
|
||||
var checkAndRestore = function() {
|
||||
attempts++;
|
||||
try {
|
||||
var totalCount = grid.getTotalCount();
|
||||
console.log('Attempt', attempts, '- Total count:', totalCount);
|
||||
if (totalCount > 0 || attempts >= maxAttempts) {
|
||||
// Data is loaded or max attempts reached
|
||||
try {
|
||||
grid.selectRows(state.selectedRowKeys, false);
|
||||
console.log('Selected rows restored successfully');
|
||||
|
||||
// Show "Show Weld Info" button if rows were selected
|
||||
if (state.selectedRowKeys && state.selectedRowKeys.length > 0) {
|
||||
var toolbar = grid.option('toolbar');
|
||||
grid.option('toolbar.items', toolbar.items.map(function(item) {
|
||||
if (item.name === 'showWeldInfoButton') {
|
||||
item.options.visible = true;
|
||||
}
|
||||
return item;
|
||||
}));
|
||||
}
|
||||
|
||||
stateLoaded = true;
|
||||
} catch(e) {
|
||||
if (attempts < maxAttempts) {
|
||||
setTimeout(checkAndRestore, 300);
|
||||
} else {
|
||||
console.warn('Failed to restore selected rows after max attempts:', e);
|
||||
stateLoaded = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Data not loaded yet, try again
|
||||
setTimeout(checkAndRestore, 300);
|
||||
}
|
||||
} catch(e) {
|
||||
if (attempts < maxAttempts) {
|
||||
setTimeout(checkAndRestore, 300);
|
||||
} else {
|
||||
console.warn('Failed to check data load status:', e);
|
||||
stateLoaded = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
setTimeout(checkAndRestore, 500);
|
||||
} else {
|
||||
console.log('No selected rows to restore');
|
||||
stateLoaded = true;
|
||||
}
|
||||
} catch(e) {
|
||||
console.warn('Failed to load grid state:', e);
|
||||
stateLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Function to clear grid state from localStorage
|
||||
function clearGridState() {
|
||||
try {
|
||||
localStorage.removeItem(storageKey);
|
||||
stateLoaded = false; // Reset flag
|
||||
} catch(e) {
|
||||
console.warn('Failed to clear grid state:', e);
|
||||
}
|
||||
}
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {
|
||||
//module: "{{$id}}",
|
||||
// Sunucuya gönderilecek filtreleme ve sıralama parametreleri
|
||||
filter: loadOptions.filter ? JSON.stringify(loadOptions.filter) : null,
|
||||
sort: loadOptions.sort ? JSON.stringify(loadOptions.sort) : null,
|
||||
skip: loadOptions.skip || 0,
|
||||
take: loadOptions.take || 20
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=spool-list',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "?ajax=spool-list-update",
|
||||
method: "POST",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var dataGridSpoolList = $("#dataGridSpoolList").dxDataGrid({
|
||||
dataSource: '{{url("admin-ajax/spool-list")}}?module={{$id}}',
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: true },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: true,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
summary: {
|
||||
totalItems: [{
|
||||
column: "iso_number",
|
||||
summaryType: "count",
|
||||
displayFormat: "{{e2('Total')}}: {0}"
|
||||
}],
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
columns : [
|
||||
/*
|
||||
{
|
||||
dataField: "spool_zone",
|
||||
allowEditing: true,
|
||||
allowFiltering: true,
|
||||
allowSorting: true,
|
||||
|
||||
},
|
||||
*/
|
||||
{
|
||||
dataField: "iso_number",
|
||||
allowEditing: false,
|
||||
allowFiltering: true,
|
||||
allowSorting: true,
|
||||
},
|
||||
{
|
||||
dataField: "spool_number",
|
||||
allowEditing: false,
|
||||
allowFiltering: true,
|
||||
allowSorting: true,
|
||||
},
|
||||
{
|
||||
dataField: "painting_cycle",
|
||||
caption: "{{e2("Paint Cyc")}}"
|
||||
},
|
||||
{
|
||||
dataField: "iso_rev",
|
||||
caption: "{{e2("Iso Rev")}}"
|
||||
},
|
||||
{
|
||||
dataField: "revision_no",
|
||||
caption: "{{e2("Doc Rev")}}"
|
||||
},
|
||||
|
||||
{
|
||||
dataField: "spool_status",
|
||||
allowEditing: false,
|
||||
allowFiltering: true,
|
||||
allowSorting: true,
|
||||
},
|
||||
|
||||
],
|
||||
toolbar: {
|
||||
items: [
|
||||
{
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
icon: 'save',
|
||||
hint: '{{e2("Save Changes")}}',
|
||||
stylingMode: 'contained',
|
||||
type: 'success',
|
||||
visible: false,
|
||||
onClick: function(e) {
|
||||
dataGridSpoolList.saveEditData();
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
icon: 'refresh',
|
||||
hint: '{{e2("Refresh DataGrid")}}',
|
||||
stylingMode: 'outlined',
|
||||
type: 'default',
|
||||
onClick: function(e) {
|
||||
dataGridSpoolList.refresh();
|
||||
DevExpress.ui.notify('{{e2("DataGrid refreshed")}}', 'success', 2000);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
location: 'before',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
icon: 'clear',
|
||||
hint: '{{e2("Clear Filter")}}',
|
||||
stylingMode: 'outlined',
|
||||
type: 'warning',
|
||||
onClick: function(e) {
|
||||
// Clear all filters
|
||||
dataGridSpoolList.clearFilter();
|
||||
// Clear selection
|
||||
dataGridSpoolList.clearSelection();
|
||||
// Clear localStorage
|
||||
clearGridState();
|
||||
|
||||
// Hide and disable "Show Weld Info" button
|
||||
var toolbar = dataGridSpoolList.option('toolbar');
|
||||
dataGridSpoolList.option('toolbar.items', toolbar.items.map(function(item) {
|
||||
if (item.name === 'showWeldInfoButton') {
|
||||
item.options.visible = false;
|
||||
item.options.disabled = true;
|
||||
}
|
||||
return item;
|
||||
}));
|
||||
|
||||
// Show notification
|
||||
DevExpress.ui.notify('{{e2("Filters and selection cleared")}}', 'success', 2000);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
location: 'center',
|
||||
name: 'showWeldInfoButton',
|
||||
widget: 'dxButton',
|
||||
options: {
|
||||
icon: 'info',
|
||||
text: '{{e2("Show Weld Info of Selected Row")}}',
|
||||
stylingMode: 'contained',
|
||||
type: 'danger',
|
||||
visible: false,
|
||||
disabled: true,
|
||||
onClick: function(e) {
|
||||
// Check if button is disabled (should not happen, but extra safety)
|
||||
var toolbar = dataGridSpoolList.option('toolbar');
|
||||
var weldInfoButton = toolbar.items.find(function(item) {
|
||||
return item.name === 'showWeldInfoButton';
|
||||
});
|
||||
|
||||
if (weldInfoButton && weldInfoButton.options.disabled) {
|
||||
Swal.fire({
|
||||
title: '{{e2("Selection Warning")}}',
|
||||
text: '{{e2("Cannot show weld info. Please select rows with the same spool status.")}}',
|
||||
icon: 'warning',
|
||||
confirmButtonText: '{{e2("OK")}}'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var selectedRows = dataGridSpoolList.getSelectedRowsData();
|
||||
|
||||
// Check if there are selected rows
|
||||
if (!selectedRows || selectedRows.length === 0) {
|
||||
Swal.fire({
|
||||
title: '{{e2("No Selection")}}',
|
||||
text: '{{e2("Please select at least one row.")}}',
|
||||
icon: 'warning',
|
||||
confirmButtonText: '{{e2("OK")}}'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Function to clean status from emojis
|
||||
function cleanStatus(status) {
|
||||
if (!status) return '';
|
||||
return status
|
||||
.replace(/⚠️/g, '')
|
||||
.replace(/✒️/g, '')
|
||||
.replace(/[\u{1F300}-\u{1F9FF}]/gu, '')
|
||||
.replace(/[\u{2600}-\u{26FF}]/gu, '')
|
||||
.replace(/[\u{2700}-\u{27BF}]/gu, '')
|
||||
.replace(/[\u{1F600}-\u{1F64F}]/gu, '')
|
||||
.replace(/[\u{1F900}-\u{1F9FF}]/gu, '')
|
||||
.trim();
|
||||
}
|
||||
|
||||
// Check if all selected rows have the same status
|
||||
var firstStatus = cleanStatus(selectedRows[0].spool_status);
|
||||
var hasDifferentStatus = selectedRows.some(function(row) {
|
||||
var rowStatus = cleanStatus(row.spool_status);
|
||||
return rowStatus !== firstStatus;
|
||||
});
|
||||
|
||||
if (hasDifferentStatus) {
|
||||
Swal.fire({
|
||||
title: '{{e2("Selection Warning")}}',
|
||||
text: '{{e2("Cannot show weld info. Only rows with the same spool status can be selected.")}}',
|
||||
icon: 'warning',
|
||||
confirmButtonText: '{{e2("OK")}}'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
selectedRows.forEach(elements => {
|
||||
isoNumbers.push(elements.iso_number);
|
||||
spoolNumbers.push(elements.spool_number);
|
||||
});
|
||||
|
||||
// Show loading message with SweetAlert
|
||||
Swal.fire({
|
||||
title: 'Loading...',
|
||||
text: 'Please wait while fetching weld information',
|
||||
icon: 'info',
|
||||
allowOutsideClick: false,
|
||||
allowEscapeKey: false,
|
||||
showConfirmButton: false,
|
||||
didOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
// Create a hidden form and submit via POST
|
||||
var form = document.createElement('form');
|
||||
form.method = 'POST';
|
||||
form.action = window.location.pathname;
|
||||
|
||||
// Add CSRF token
|
||||
var csrfInput = document.createElement('input');
|
||||
csrfInput.type = 'hidden';
|
||||
csrfInput.name = '_token';
|
||||
csrfInput.value = '{{ csrf_token() }}';
|
||||
form.appendChild(csrfInput);
|
||||
|
||||
// Add iso_number
|
||||
var isoInput = document.createElement('input');
|
||||
isoInput.type = 'hidden';
|
||||
isoInput.name = 'iso_number';
|
||||
isoInput.value = isoNumbers.join(",");
|
||||
form.appendChild(isoInput);
|
||||
|
||||
// Add spool_number
|
||||
var spoolInput = document.createElement('input');
|
||||
spoolInput.type = 'hidden';
|
||||
spoolInput.name = 'spool_number';
|
||||
spoolInput.value = spoolNumbers.join(",");
|
||||
form.appendChild(spoolInput);
|
||||
|
||||
// Append form to body and submit
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: false,
|
||||
<?php } ?>
|
||||
startEditAction: 'click',
|
||||
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
paging: {
|
||||
enabled: false
|
||||
},
|
||||
scrolling: {
|
||||
mode: "infinite"
|
||||
},
|
||||
selection: {
|
||||
mode: "multiple"
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
// Check if Ctrl or Shift is pressed for multiple selection
|
||||
if (e.event && (e.event.ctrlKey || e.event.shiftKey)) {
|
||||
// Multiple selection mode - toggle selection
|
||||
var key = e.key;
|
||||
var isSelected = e.component.isRowSelected(key);
|
||||
if (isSelected) {
|
||||
e.component.deselectRows([key]);
|
||||
} else {
|
||||
e.component.selectRows([key], true);
|
||||
}
|
||||
} else {
|
||||
// Single selection mode - select only this row
|
||||
e.component.selectRows([e.key], false);
|
||||
}
|
||||
},
|
||||
onSelectionChanged: function(e) {
|
||||
// Save state after selection change (only if state is already loaded)
|
||||
if (stateLoaded) {
|
||||
setTimeout(function() {
|
||||
saveGridState(e.component);
|
||||
}, 100);
|
||||
}
|
||||
|
||||
var selectedRows = e.selectedRowsData;
|
||||
|
||||
// Show/hide "Show Weld Info" button based on selection
|
||||
var toolbar = e.component.option('toolbar');
|
||||
var weldInfoButton = toolbar.items.find(function(item) {
|
||||
return item.name === 'showWeldInfoButton';
|
||||
});
|
||||
|
||||
if (selectedRows.length === 0) {
|
||||
// Hide and disable button if no selection
|
||||
if (weldInfoButton) {
|
||||
e.component.option('toolbar.items', toolbar.items.map(function(item) {
|
||||
if (item.name === 'showWeldInfoButton') {
|
||||
item.options.visible = false;
|
||||
item.options.disabled = true;
|
||||
}
|
||||
return item;
|
||||
}));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Function to clean status from emojis
|
||||
function cleanStatus(status) {
|
||||
if (!status) return '';
|
||||
// Remove specific emojis: ⚠️ (warning), ✒️ (writing hand), and other common emojis
|
||||
// Also remove emoji variations and trim whitespace
|
||||
return status
|
||||
.replace(/⚠️/g, '') // Warning emoji
|
||||
.replace(/✒️/g, '') // Writing hand emoji
|
||||
.replace(/[\u{1F300}-\u{1F9FF}]/gu, '') // Miscellaneous Symbols and Pictographs
|
||||
.replace(/[\u{2600}-\u{26FF}]/gu, '') // Miscellaneous Symbols
|
||||
.replace(/[\u{2700}-\u{27BF}]/gu, '') // Dingbats
|
||||
.replace(/[\u{1F600}-\u{1F64F}]/gu, '') // Emoticons
|
||||
.replace(/[\u{1F900}-\u{1F9FF}]/gu, '') // Supplemental Symbols and Pictographs
|
||||
.trim();
|
||||
}
|
||||
|
||||
// Get the first selected row's clean status
|
||||
var firstStatus = cleanStatus(selectedRows[0].spool_status);
|
||||
|
||||
// Check all selected rows have the same status
|
||||
var hasDifferentStatus = selectedRows.some(function(row) {
|
||||
var rowStatus = cleanStatus(row.spool_status);
|
||||
return rowStatus !== firstStatus;
|
||||
});
|
||||
|
||||
if (hasDifferentStatus) {
|
||||
// Find rows with different status
|
||||
var differentStatusRows = selectedRows.filter(function(row) {
|
||||
var rowStatus = cleanStatus(row.spool_status);
|
||||
return rowStatus !== firstStatus;
|
||||
});
|
||||
|
||||
// Deselect rows with different status
|
||||
var keysToDeselect = differentStatusRows.map(function(row) {
|
||||
return row.id;
|
||||
});
|
||||
|
||||
if (keysToDeselect.length > 0) {
|
||||
dataGridSpoolList.deselectRows(keysToDeselect);
|
||||
|
||||
// Disable "Show Weld Info" button when warning occurs
|
||||
if (weldInfoButton) {
|
||||
e.component.option('toolbar.items', toolbar.items.map(function(item) {
|
||||
if (item.name === 'showWeldInfoButton') {
|
||||
item.options.visible = true;
|
||||
item.options.disabled = true;
|
||||
}
|
||||
return item;
|
||||
}));
|
||||
}
|
||||
|
||||
// Show warning message
|
||||
Swal.fire({
|
||||
title: '{{e2("Selection Warning")}}',
|
||||
text: '{{e2("Only rows with the same spool status can be selected. Different status rows were deselected.")}}',
|
||||
icon: 'warning',
|
||||
confirmButtonText: '{{e2("OK")}}',
|
||||
timer: 3000,
|
||||
timerProgressBar: true
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// All selected rows have the same status - enable button
|
||||
if (weldInfoButton) {
|
||||
var shouldShow = selectedRows && selectedRows.length > 0;
|
||||
e.component.option('toolbar.items', toolbar.items.map(function(item) {
|
||||
if (item.name === 'showWeldInfoButton') {
|
||||
item.options.visible = shouldShow;
|
||||
item.options.disabled = false;
|
||||
}
|
||||
return item;
|
||||
}));
|
||||
}
|
||||
}
|
||||
},
|
||||
onInitialized: function(e) {
|
||||
console.log('Grid initialized');
|
||||
},
|
||||
onOptionChanged: function(e) {
|
||||
// Save filter and other state changes to localStorage (always save after initial load)
|
||||
if (stateLoaded) {
|
||||
// Debounce save to avoid too many localStorage writes
|
||||
clearTimeout(window.saveStateTimeout);
|
||||
window.saveStateTimeout = setTimeout(function() {
|
||||
if (e.name === 'filterValue' || e.name === 'filterRow' || e.name === 'columns' || e.name === 'headerFilter') {
|
||||
console.log('Option changed:', e.name);
|
||||
saveGridState(e.component);
|
||||
}
|
||||
}, 300);
|
||||
}
|
||||
},
|
||||
onRowPrepared: function(e) {
|
||||
// Monitor filterRow changes when user types in filter cells
|
||||
if (e.rowType === 'filter' && stateLoaded && e.rowElement) {
|
||||
// Attach input event listeners to filter cells
|
||||
var filterCells = $(e.rowElement).find('input, select, .dx-textbox-input');
|
||||
filterCells.off('change.input-save blur.input-save input.input-save').on('change.input-save blur.input-save input.input-save', function() {
|
||||
clearTimeout(window.saveStateTimeout);
|
||||
window.saveStateTimeout = setTimeout(function() {
|
||||
console.log('Filter row changed, saving state...');
|
||||
saveGridState(e.component);
|
||||
}, 500);
|
||||
});
|
||||
}
|
||||
|
||||
// Monitor headerFilter changes
|
||||
if (e.rowType === 'header' && stateLoaded && e.rowElement) {
|
||||
var headerFilterElements = $(e.rowElement).find('.dx-header-filter, .dx-menu-item, .dx-datagrid-headers .dx-column-indicators');
|
||||
headerFilterElements.off('click.header-save change.header-save').on('click.header-save change.header-save', function() {
|
||||
clearTimeout(window.saveStateTimeout);
|
||||
window.saveStateTimeout = setTimeout(function() {
|
||||
console.log('Header filter changed, saving state...');
|
||||
saveGridState(e.component);
|
||||
}, 300);
|
||||
});
|
||||
}
|
||||
},
|
||||
onContentReady: function(e) {
|
||||
console.log('onContentReady triggered, stateLoaded:', stateLoaded);
|
||||
// Load saved state when content is ready (only once)
|
||||
if (!stateLoaded && e.component) {
|
||||
console.log('Loading state from onContentReady...');
|
||||
// Wait a bit to ensure data is loaded
|
||||
setTimeout(function() {
|
||||
loadGridState(e.component);
|
||||
}, 800);
|
||||
}
|
||||
},
|
||||
height: "60vh",
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
}).dxDataGrid("instance");
|
||||
});
|
||||
</script>
|
||||
<div id="dataGridSpoolList" style="width: 100%; height: 100%;"></div>
|
||||
@@ -1,323 +0,0 @@
|
||||
@if(is_stellar())
|
||||
<div class="text-center">
|
||||
<!--
|
||||
<button href="" class="btn btn-outline-success ndt-release-button d-none" onclick="showChecklistModal()">{{e2("NDT Release Checklist")}}</button>
|
||||
-->
|
||||
<button href="" class="btn btn-outline-success spool-release-button d-none" onclick="showChecklistModal()">{{e2("Spool Release Checklist")}}</button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-bordered table-striped table-hover">
|
||||
<tr>
|
||||
<th>{{e2("JN")}}</th>
|
||||
<th>{{e2("Welds")}}</th>
|
||||
<th>{{e2("Joint")}}</th>
|
||||
<th>{{e2("W1")}}</th>
|
||||
<th>{{e2("W2")}}</th>
|
||||
<th>{{e2("VT")}}</th>
|
||||
<th>{{e2("RT")}}</th>
|
||||
<th>{{e2("UT")}}</th>
|
||||
<th>{{e2("MT")}}</th>
|
||||
<th>{{e2("PT")}}</th>
|
||||
<th>{{e2("PMI")}}</th>
|
||||
<th>{{e2("Sign")}}</th>
|
||||
</tr>
|
||||
<?php
|
||||
$spoolReleaseButton = false;
|
||||
$ndtReleaseButton = false;
|
||||
foreach($weldInfos AS $weldInfo) {
|
||||
if($weldInfo->type_of_joint == "S") {
|
||||
if($weldInfo->welder_1 == "") {
|
||||
$releaseButton = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$nowStatus = $weldInfo->spool_status;
|
||||
$prevStatus = spool_status_prev($weldInfo->spool_status);
|
||||
?>
|
||||
<tr>
|
||||
|
||||
<td>
|
||||
@if(count($isoNumbers)>1)
|
||||
<small>{{$weldInfo->iso_number}}</small>
|
||||
@endif
|
||||
{{$weldInfo->no_of_the_joint_as_per_as_built_survey}}</td>
|
||||
<td>{{$weldInfo->type_of_welds}}</td>
|
||||
<td>{{$weldInfo->type_of_joint}}</td>
|
||||
<td>{{get_welder_id($weldInfo->welder_1)}}</td>
|
||||
<td>{{get_welder_id($weldInfo->welder_2)}}</td>
|
||||
|
||||
<td>
|
||||
|
||||
@if(is_null($weldInfo->vt_result) || $weldInfo->vt_result == "")
|
||||
@if(!rejected_date($weldInfo->vt_request_date))
|
||||
⌛
|
||||
@endif
|
||||
@else
|
||||
{{result_replace($weldInfo->vt_result)}}
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@if(is_null($weldInfo->rt_result) || $weldInfo->rt_result == "")
|
||||
|
||||
@if(!rejected_date($weldInfo->rt_request_date))
|
||||
⌛
|
||||
@endif
|
||||
@else
|
||||
{{result_replace($weldInfo->rt_result)}}
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(is_null($weldInfo->ut_result) || $weldInfo->ut_result == "")
|
||||
@if(!rejected_date($weldInfo->ut_request_date))
|
||||
⌛
|
||||
@endif
|
||||
@else
|
||||
{{result_replace($weldInfo->ut_result)}}
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(is_null($weldInfo->mt_result) || $weldInfo->mt_result == "")
|
||||
@if(!rejected_date($weldInfo->mt_request_date))
|
||||
⌛
|
||||
@endif
|
||||
@else
|
||||
{{result_replace($weldInfo->mt_result)}}
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(is_null($weldInfo->pt_result) || $weldInfo->pt_result == "")
|
||||
@if(!rejected_date($weldInfo->pt_request_date))
|
||||
⌛
|
||||
@endif
|
||||
@else
|
||||
{{result_replace($weldInfo->pt_result)}}
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if(is_null($weldInfo->pmi_result) || $weldInfo->pmi_result == "")
|
||||
@if(!rejected_date($weldInfo->pmi_request_date))
|
||||
⌛
|
||||
@endif
|
||||
@else
|
||||
{{result_replace($weldInfo->pmi_result)}}
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($weldInfo->type_of_joint != "F")
|
||||
@if($weldInfo->spool_status == "Spool Release")
|
||||
<?php
|
||||
if($weldInfo->spool_ndt_check != "") {
|
||||
echo "✒️";
|
||||
$ndtReleaseButton = true;
|
||||
} else {
|
||||
$spoolReleaseButton = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@endif
|
||||
@if($weldInfo->spool_status == "NDT Release")
|
||||
<?php
|
||||
if($weldInfo->spool_ndt_check != "") {
|
||||
echo "✒️";
|
||||
}
|
||||
$ndtReleaseButton = true; ?>
|
||||
@endif
|
||||
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{{$weldInfos->appends($_GET)->links()}}
|
||||
<script>
|
||||
// Store PHP values in JavaScript variables
|
||||
var currentIsoNumber = "{{get('iso_number', '')}}";
|
||||
var currentSpoolNumber = "{{get('spool_number', '')}}";
|
||||
|
||||
$(function(){
|
||||
@if($spoolReleaseButton)
|
||||
$(".spool-release-button").removeClass("d-none");
|
||||
@endif
|
||||
@if($ndtReleaseButton)
|
||||
$(".ndt-release-button").removeClass("d-none");
|
||||
@endif
|
||||
});
|
||||
|
||||
function showChecklistModal() {
|
||||
Swal.fire({
|
||||
title: '{{e2("NDT Release Checklist")}}',
|
||||
text: '{{e2("Are you sure you want to confirm the checklist?")}}',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: '{{e2("NDT Release Checklist Confirm")}}',
|
||||
cancelButtonText: '{{e2("Cancel")}}',
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33'
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
confirmChecklist();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function confirmChecklist() {
|
||||
// Get values from form inputs first
|
||||
var isoNumber = $('input[name="iso_number"]').val();
|
||||
var spoolNumber = $('select[name="spool_number"]').val();
|
||||
|
||||
// If form inputs are empty, use PHP values (for multiple selection or direct access)
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
isoNumber = currentIsoNumber;
|
||||
}
|
||||
if (!spoolNumber || spoolNumber.trim() === '') {
|
||||
spoolNumber = currentSpoolNumber;
|
||||
}
|
||||
|
||||
// If still empty, try to get from selected items grid (for multiple selection)
|
||||
var selectedItemsData = [];
|
||||
if (!isoNumber || isoNumber.trim() === '') {
|
||||
var selectedItemsGrid = $('#selectedItemsGrid').dxDataGrid('instance');
|
||||
if (selectedItemsGrid) {
|
||||
try {
|
||||
var selectedItems = selectedItemsGrid.option('dataSource');
|
||||
if (selectedItems && selectedItems.length > 0) {
|
||||
selectedItemsData = selectedItems;
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
selectedItems.forEach(function(item) {
|
||||
if (item.iso_number && item.iso_number.trim() !== '') {
|
||||
isoNumbers.push(item.iso_number);
|
||||
}
|
||||
if (item.spool_number && item.spool_number.trim() !== '') {
|
||||
spoolNumbers.push(item.spool_number);
|
||||
}
|
||||
});
|
||||
if (isoNumbers.length > 0) {
|
||||
isoNumber = isoNumbers.join(',');
|
||||
}
|
||||
if (spoolNumbers.length > 0) {
|
||||
spoolNumber = spoolNumbers.join(',');
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
console.warn('Could not get data from selectedItemsGrid:', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Build ISO+SPL pairs
|
||||
var isoSpoolPairs = [];
|
||||
var isoNumbers = [];
|
||||
var spoolNumbers = [];
|
||||
|
||||
// If we have selectedItemsData, use it directly
|
||||
if(selectedItemsData.length > 0) {
|
||||
selectedItemsData.forEach(function(item) {
|
||||
var iso = (item.iso_number || '').trim();
|
||||
var spool = (item.spool_number || '').trim();
|
||||
if(iso && spool) {
|
||||
isoSpoolPairs.push(iso + '|' + spool);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Otherwise, parse from comma-separated values
|
||||
if(isoNumber) {
|
||||
isoNumbers = isoNumber.split(',');
|
||||
}
|
||||
if(spoolNumber) {
|
||||
spoolNumbers = spoolNumber.split(',');
|
||||
}
|
||||
|
||||
var maxCount = Math.max(isoNumbers.length, spoolNumbers.length);
|
||||
for(var i = 0; i < maxCount; i++) {
|
||||
var iso = (isoNumbers[i] || '').trim();
|
||||
var spool = (spoolNumbers[i] || '').trim();
|
||||
if(iso && spool) {
|
||||
isoSpoolPairs.push(iso + '|' + spool);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Validate required parameters
|
||||
if (isoSpoolPairs.length === 0) {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'ISO number and SPL number are required in POST data',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Show loading
|
||||
Swal.fire({
|
||||
title: 'Processing...',
|
||||
text: 'Please wait while we process your request',
|
||||
allowOutsideClick: false,
|
||||
showConfirmButton: false,
|
||||
willOpen: () => {
|
||||
Swal.showLoading();
|
||||
}
|
||||
});
|
||||
|
||||
// Prepare POST parameters with ISO+SPL pairs
|
||||
var params = {
|
||||
'checklist-ok': '1',
|
||||
'iso_spool_pairs': isoSpoolPairs.join(',')
|
||||
};
|
||||
|
||||
// Send AJAX request
|
||||
$.ajax({
|
||||
url: '/admin-ajax/checklist-system',
|
||||
type: 'POST',
|
||||
data: params,
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(response) {
|
||||
if (typeof response === 'string') {
|
||||
response = JSON.parse(response);
|
||||
}
|
||||
|
||||
if (response.status === 'success') {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Success!',
|
||||
text: response.message,
|
||||
confirmButtonText: 'OK'
|
||||
}).then(() => {
|
||||
// Reload the page to show updated data
|
||||
location.reload();
|
||||
});
|
||||
} else {
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: response.message || 'An error occurred',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX Error:', error);
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error!',
|
||||
text: 'An error occurred while processing your request',
|
||||
confirmButtonText: 'OK'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -1,234 +0,0 @@
|
||||
<?php
|
||||
$remainWeldingShop = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->whereNotNull("fit_up_date")
|
||||
|
||||
->where("type_of_joint", "S")
|
||||
->whereNull("welding_date")
|
||||
->sum("nps_1");
|
||||
$remainWeldingField = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->whereNotNull("fit_up_date")
|
||||
|
||||
->where("type_of_joint", "F")
|
||||
->whereNull("welding_date")
|
||||
->sum("nps_1");
|
||||
|
||||
$totalNps = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->sum("nps_1");
|
||||
$countNps = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->count("nps_1");
|
||||
$activeWeldersCount = db("naks_welders")->groupBy("welder_id")->select("welder_id")->whereIn("status", ['Shop Active', 'Field Active'])->get()->count();
|
||||
$activeWeldersCountShop = db("naks_welders")->groupBy("welder_id")->select("welder_id")->where("status", "Shop Active")->get()->count();
|
||||
$activeWeldersCountField = db("naks_welders")->groupBy("welder_id")->select("welder_id")->where("status", "Field Active")->get()->count();
|
||||
$totalNpsWithWelding = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->sum("nps_1");
|
||||
|
||||
try {
|
||||
$progress = round(100*$totalNpsWithWelding / $totalNps, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$progress = 0;
|
||||
}
|
||||
|
||||
$uniqueIsometricCount = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->groupBy("iso_number")->get()->count();
|
||||
$documentRevision = db("document_revisions")->groupBy("drawing_no")->get()->count();
|
||||
try {
|
||||
$spooledIsometric = round($uniqueIsometricCount * 100 / $documentRevision, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$spooledIsometric = 0;
|
||||
}
|
||||
|
||||
if($spooledIsometric>100) $spooledIsometric = 100;
|
||||
|
||||
$completedSpool = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("spool_status", "Completed")->get()->count();
|
||||
$allSpool = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->groupBy("iso_number","spool_number")->get()->count();
|
||||
|
||||
try {
|
||||
$spoolStatusPercent = $completedSpool * 100 / $allSpool;
|
||||
} catch (\Throwable $th) {
|
||||
$spoolStatusPercent = 0;
|
||||
}
|
||||
|
||||
$totalWeldedWDI = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->sum("nps_1");
|
||||
|
||||
|
||||
|
||||
?>
|
||||
<div class="block col-12" id="allProjectsWeldSummaryBlock">
|
||||
<div class="block-header block-header-default">
|
||||
<h3 class="block-title"><i class="fa fa-building"></i> WELD SUMMARY - GENERAL</h3>
|
||||
</div>
|
||||
<div class="block-content">
|
||||
<div class="table-responsive">
|
||||
<table border="0" class="table table-bordered table-striped" >
|
||||
<colgroup><col span="11">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
|
||||
<tr height="41" class="header" style="height:30.75pt">
|
||||
<td height="41" colspan="2" class="xl68" >SCOPE-WDI</td>
|
||||
<td colspan="2" class="xl69" width="128" >TOTAL WELDED (JOINT)</td>
|
||||
<td colspan="2" class="xl69" width="128" >TOTAL WELDED (WDI)</td>
|
||||
|
||||
<td colspan="2" class="xl69" width="128" >{{$today->format("d.m.Y")}} - WELDED (JOINT)</td>
|
||||
<td colspan="2" class="xl69" width="128" >{{$today->format("d.m.Y")}} - WELDED (WDI)</td>
|
||||
<td colspan="2" class="xl69" width="128" >DAILY AVARAGE WELDED (WDI)</td>
|
||||
<td colspan="1" class="xl69" width="128" >SPOOLED ISOMETRIC</td>
|
||||
<td colspan="1" class="xl69" width="128" >REMAINING WELD SHOP (WDI)</td>
|
||||
<td colspan="1" class="xl69" width="128" >REMAINING WELD FIELD (WDI)</td>
|
||||
</tr>
|
||||
<tr height="21" style="height:15.75pt">
|
||||
<td height="21" colspan="2" class="xl71" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereIn("type_of_joint", ['S', 'F'])->sum("nps_1")}}</td>
|
||||
<td colspan="2" class="xl72" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->count("welding_date")}}</td>
|
||||
<td colspan="2" class="xl72" >{{$totalWeldedWDI}}</td>
|
||||
|
||||
<td colspan="2" class="xl72" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereDate("welding_date", $today)->whereNotNull("welding_date")->count("nps_1")}}</td>
|
||||
<td colspan="2" class="xl72" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereDate("welding_date", $today)->whereNotNull("welding_date")->sum("nps_1")}}</td>
|
||||
<?php
|
||||
try {
|
||||
$dailyAverageWeldedWdi = db("weld_logs")
|
||||
->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->whereDate("welding_date", $today)
|
||||
->sum("nps_1")/$activeWeldersCount;
|
||||
} catch (\Throwable $th) {
|
||||
$dailyAverageWeldedWdi = 0;
|
||||
}
|
||||
?>
|
||||
<td colspan="2" class="xl74" >{{round($dailyAverageWeldedWdi,2)}}</td>
|
||||
<td colspan="1" class="xl74" >{{$spooledIsometric}} %</td>
|
||||
<td colspan="1" class="xl72" >{{$remainWeldingShop}}</td>
|
||||
<td colspan="1" class="xl72" >{{$remainWeldingField}}</td>
|
||||
</tr>
|
||||
<tr height="61" class="header" style="height:45.75pt">
|
||||
<td height="61" colspan="2" class="xl68" >PROGRESS (%)</td>
|
||||
<td class="xl68" style="">SHOP
|
||||
WELDED (JOINT)</td>
|
||||
<td class="xl70" style="">FIELD WELDED
|
||||
(JOINT)</td>
|
||||
<td class="xl70" style="">SHOP WELDED (WDI)</td>
|
||||
<td class="xl70" style="">FIELD WELDED (WDI)</td>
|
||||
<td class="xl68" style="">SHOP
|
||||
WELDED (JOINT)</td>
|
||||
<td class="xl70" style="">FIELD WELDED
|
||||
(JOINT)</td>
|
||||
<td class="xl70" style="">SHOP WELDED (WDI)</td>
|
||||
<td class="xl70" style="">FIELD WELDED (WDI)</td>
|
||||
<td class="xl70" style="">SHOP AVARAGE (WDI)</td>
|
||||
<td class="xl70" style="">FIELD AVARAGE
|
||||
(WDI)</td>
|
||||
<td height="61" colspan="1" class="xl68" >SHOP SCOPE WDI</td>
|
||||
<td height="61" colspan="1" class="xl68" >FIELD SCOPE WDI</td>
|
||||
<td height="61" colspan="1" class="xl68" >BACKLOG</td>
|
||||
</tr>
|
||||
<tr height="21" style="height:15.75pt">
|
||||
|
||||
<td height="21" colspan="2" class="xl76" >{{$progress}}</td>
|
||||
<td class="xl77" style="border-top:none">{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->where("type_of_joint", "S")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->where("type_of_joint", "F")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->where("type_of_joint", "S")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->where("type_of_joint", "F")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereDate("welding_date", $today)->where("type_of_joint", "S")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereDate("welding_date", $today)->where("type_of_joint", "F")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereDate("welding_date", $today)->where("type_of_joint", "S")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereDate("welding_date", $today)->where("type_of_joint", "F")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >
|
||||
<?php try {
|
||||
echo round(db("weld_logs")
|
||||
->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->where("type_of_joint", "S")
|
||||
->whereDate("welding_date", $today)
|
||||
->whereNotNull("nps_1")
|
||||
->sum("nps_1") / $activeWeldersCountShop, 2);
|
||||
} catch (\Throwable $th) {
|
||||
echo 0;
|
||||
} ?>
|
||||
|
||||
|
||||
</td>
|
||||
<td class="xl77" >
|
||||
<?php try {
|
||||
echo round(db("weld_logs")
|
||||
->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->where("type_of_joint", "F")
|
||||
->whereDate("welding_date", $today)
|
||||
->whereNotNull("nps_1")
|
||||
->sum("nps_1") / $activeWeldersCountField, 2);
|
||||
} catch (\Throwable $th) {
|
||||
echo 0;
|
||||
} ?>
|
||||
|
||||
</td>
|
||||
<td height="21" colspan="1" class="xl76" >
|
||||
{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("type_of_joint", "S")->sum("nps_1")}}
|
||||
</td>
|
||||
<td height="21" colspan="1" class="xl76" >
|
||||
{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("type_of_joint", "F")->sum("nps_1")}}
|
||||
</td>
|
||||
<td height="21" colspan="1" class="xl76" >
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>S</td>
|
||||
<td>F</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNull("welding_date")->where("type_of_joint", "S")->sum("nps_1")}}</td>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNull("welding_date")->where("type_of_joint", "F")->sum("nps_1")}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="
|
||||
header">
|
||||
<td colspan="8" class="text-center">
|
||||
<?php
|
||||
$project = "General";
|
||||
$projectId = str_slug($project);
|
||||
$appWDI = setting($projectId . '-approximate-planned-wdi');
|
||||
try {
|
||||
$progress = round($totalWeldedWDI * 100 / $appWDI, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$progress = 0;
|
||||
} ?>
|
||||
{{$project}} Approximate Progress:
|
||||
<div class="progress bg-gray">
|
||||
|
||||
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width:{{$progress}}%">{{$progress}}%</div>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="7" class="text-center">
|
||||
{{$project}} Approximate WDI: <br>
|
||||
<strong>{{$appWDI}}</strong>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody></table>
|
||||
<table class="table table-bordered table-striped mt-5">
|
||||
<tr class="header">
|
||||
<td>Piping type</td>
|
||||
<td>Total Scope Shop</td>
|
||||
<td>Welded Scope Shop</td>
|
||||
<td class="table-success">Total Scope Field</td>
|
||||
<td class="table-success">Welded Scope Field</td>
|
||||
<td class="table-info">Total Scope</td>
|
||||
<td rowspan="3">
|
||||
@include("admin.type.summary.repair-rate-all")
|
||||
</td>
|
||||
</tr>
|
||||
<?php $pipingTypes = db("weld_logs")->groupBy("piping_type")->select("piping_type")->get()->pluck("piping_type")->toArray(); ?>
|
||||
@foreach($pipingTypes AS $pipingType)
|
||||
<?php $totalScope = db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("piping_type", $pipingType)->sum("nps_1"); ?>
|
||||
@if($totalScope>0)
|
||||
<tr>
|
||||
<td>{{$pipingType}}</td>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("type_of_joint", "S")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->where("type_of_joint", "S")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td class="table-success">{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("type_of_joint", "F")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td class="table-success">{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->whereNotNull("welding_date")->where("type_of_joint", "F")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td>{{$totalScope}}</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,317 +0,0 @@
|
||||
<style>
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:black;
|
||||
font-size:11.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:162;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:black;
|
||||
font-size:11.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:162;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
.xl65
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
mso-number-format:"dd\\\.mm\\\.yyyy\;\@";
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;
|
||||
white-space:normal;}
|
||||
.xl66
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
mso-number-format:"dd\\\.mm\\\.yyyy\;\@";
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;
|
||||
white-space:normal;}
|
||||
.xl67
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
mso-number-format:"dd\\\.mm\\\.yyyy\;\@";
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:1.0pt solid windowtext;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;
|
||||
white-space:normal;}
|
||||
.xl68
|
||||
{mso-style-parent:style0;
|
||||
color:white;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;
|
||||
background:#4F81BD;
|
||||
mso-pattern:black none;
|
||||
white-space:normal;}
|
||||
.xl69
|
||||
{mso-style-parent:style0;
|
||||
color:white;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;
|
||||
background:#4F81BD;
|
||||
mso-pattern:black none;
|
||||
white-space:normal;}
|
||||
.xl70
|
||||
{mso-style-parent:style0;
|
||||
color:white;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:1.0pt solid windowtext;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;
|
||||
background:#4F81BD;
|
||||
mso-pattern:black none;
|
||||
white-space:normal;}
|
||||
.xl71
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:Standard;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;}
|
||||
.xl72
|
||||
{mso-style-parent:style0;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;}
|
||||
.xl73
|
||||
{mso-style-parent:style0;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:1.0pt solid windowtext;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;}
|
||||
.xl74
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:Fixed;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;}
|
||||
.xl75
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:Fixed;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:1.0pt solid windowtext;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;}
|
||||
.xl76
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:Percent;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;}
|
||||
.xl77
|
||||
{mso-style-parent:style0;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;}
|
||||
.xl78
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:Fixed;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;}
|
||||
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:black;
|
||||
font-size:11.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:162;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:black;
|
||||
font-size:11.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:162;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
.xl65
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
mso-number-format:"dd\\\.mm\\\.yyyy\;\@";
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:1.0pt solid windowtext;
|
||||
white-space:normal;}
|
||||
.xl66
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
mso-number-format:"dd\\\.mm\\\.yyyy\;\@";
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:none;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;
|
||||
white-space:normal;}
|
||||
.xl67
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
mso-number-format:"dd\\\.mm\\\.yyyy\;\@";
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border-top:1.0pt solid windowtext;
|
||||
border-right:1.0pt solid windowtext;
|
||||
border-bottom:1.0pt solid windowtext;
|
||||
border-left:none;
|
||||
white-space:normal;}
|
||||
.xl68
|
||||
{mso-style-parent:style0;
|
||||
color:white;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;
|
||||
background:#4F81BD;
|
||||
mso-pattern:black none;
|
||||
white-space:normal;}
|
||||
.xl69
|
||||
{mso-style-parent:style0;
|
||||
font-weight:700;
|
||||
font-family:Calibri, sans-serif;
|
||||
mso-font-charset:204;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;}
|
||||
.xl70
|
||||
{mso-style-parent:style0;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;}
|
||||
.xl71
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:0;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;}
|
||||
.xl72
|
||||
{mso-style-parent:style0;
|
||||
mso-number-format:Fixed;
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
border:1.0pt solid windowtext;}
|
||||
</style>
|
||||
@@ -1,298 +0,0 @@
|
||||
<?php
|
||||
|
||||
foreach($projects AS $project) {
|
||||
|
||||
$remainWeldingShop = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->whereNotNull("fit_up_date")
|
||||
->where("project", $project)
|
||||
->where("type_of_joint", "S")
|
||||
->whereNull("welding_date")
|
||||
->sum("nps_1");
|
||||
$remainWeldingField = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")
|
||||
->whereNotNull("fit_up_date")
|
||||
->where("project", $project)
|
||||
->where("type_of_joint", "F")
|
||||
->whereNull("welding_date")
|
||||
->sum("nps_1");
|
||||
|
||||
$totalNps = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->sum("nps_1");
|
||||
$countNps = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->count("nps_1");
|
||||
$activeWeldersCount = db("naks_welders")->groupBy("welder_id")->select("welder_id")->whereIn("status", ['Shop Active', 'Field Active'])->get()->count();
|
||||
$activeWeldersCountShop = db("naks_welders")->groupBy("welder_id")->select("welder_id")->where("status", "Shop Active")->get()->count();
|
||||
$activeWeldersCountField = db("naks_welders")->groupBy("welder_id")->select("welder_id")->where("status", "Field Active")->get()->count();
|
||||
$totalNpsWithWelding = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->sum("nps_1");
|
||||
try {
|
||||
$progress = round(100*$totalNpsWithWelding / $totalNps, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$progress = 0;
|
||||
}
|
||||
|
||||
|
||||
$uniqueIsometricCount = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->groupBy("iso_number")->get()->count();
|
||||
$documentRevision = db("document_revisions")->groupBy("drawing_no")->get()->count();
|
||||
try {
|
||||
$spooledIsometric = round($uniqueIsometricCount * 100 / $documentRevision, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$spooledIsometric = 0;
|
||||
}
|
||||
|
||||
if($spooledIsometric>100) $spooledIsometric = 100;
|
||||
|
||||
$totalWeldedWDI = apply_welded_filter(db("weld_logs"))->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("project", $project)->whereNotNull("welding_date")->sum("nps_1");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
||||
<div class="block col-12" id="project{{str_slug($project)}}WeldSummaryBlock">
|
||||
<div class="block-header block-header-default">
|
||||
<h3 class="block-title"><i class="fa fa-building"></i> [{{$project}}] WELD SUMMARY - STELLAR</h3>
|
||||
</div>
|
||||
<div class="block-content">
|
||||
<div class="table-responsive">
|
||||
<table border="0" class="table table-bordered table-striped" >
|
||||
<colgroup><col span="11">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
|
||||
<tr height="41" class="header" style="height:30.75pt">
|
||||
<td height="41" colspan="2" class="xl68" >SCOPE-WDI</td>
|
||||
<td colspan="2" class="xl69" width="128" >TOTAL WELDED (JOINT)</td>
|
||||
<td colspan="2" class="xl69" width="128" >TOTAL WELDED (WDI)</td>
|
||||
|
||||
<td colspan="2" class="xl69" width="128" >{{$today->format("d.m.Y")}} - WELDED (JOINT)</td>
|
||||
<td colspan="2" class="xl69" width="128" >{{$today->format("d.m.Y")}} - WELDED (WDI)</td>
|
||||
<td colspan="2" class="xl69" width="128" >DAILY AVARAGE WELDED (WDI)</td>
|
||||
<td colspan="1" class="xl69" width="128" >SPOOLED ISOMETRIC</td>
|
||||
<td colspan="1" class="xl69" width="128" >REMAINING WELD SHOP (WDI)</td>
|
||||
<td colspan="1" class="xl69" width="128" >REMAINING WELD FIELD (WDI)</td>
|
||||
</tr>
|
||||
<tr height="21" style="height:15.75pt">
|
||||
<td height="21" colspan="2" class="xl71" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("project", $project)->whereIn("type_of_joint", ['S', 'F'])->sum("nps_1")}}</td>
|
||||
<td colspan="2" class="xl72" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("project", $project)->whereNotNull("welding_date")->count("welding_date")}}</td>
|
||||
<td colspan="2" class="xl72" >{{$totalWeldedWDI}}</td>
|
||||
|
||||
<td colspan="2" class="xl72" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("project", $project)->whereDate("welding_date", $today)->whereNotNull("welding_date")->count("nps_1")}}</td>
|
||||
<td colspan="2" class="xl72" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("project", $project)->whereDate("welding_date", $today)->whereNotNull("welding_date")->sum("nps_1")}}</td>
|
||||
<?php
|
||||
try {
|
||||
$dailyAverageWeldedWdi = db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereDate("welding_date", $today)->sum("nps_1")/$activeWeldersCount;
|
||||
} catch (\Throwable $th) {
|
||||
$dailyAverageWeldedWdi = 0;
|
||||
}
|
||||
?>
|
||||
<td colspan="2" class="xl74" >{{round($dailyAverageWeldedWdi,2)}}</td>
|
||||
<td colspan="1" class="xl74" >{{$spooledIsometric}} %</td>
|
||||
<td colspan="1" class="xl72" >{{$remainWeldingShop}}</td>
|
||||
<td colspan="1" class="xl72" >{{$remainWeldingField}}</td>
|
||||
</tr>
|
||||
<tr height="61" class="header" style="height:45.75pt">
|
||||
<td height="61" colspan="2" class="xl68" >PROGRESS (%)</td>
|
||||
<td class="xl68" style="">SHOP
|
||||
WELDED (JOINT)</td>
|
||||
<td class="xl70" style="">FIELD WELDED
|
||||
(JOINT)</td>
|
||||
<td class="xl70" style="">SHOP WELDED (WDI)</td>
|
||||
<td class="xl70" style="">FIELD WELDED (WDI)</td>
|
||||
<td class="xl68" style="">SHOP
|
||||
WELDED (JOINT)</td>
|
||||
<td class="xl70" style="">FIELD WELDED
|
||||
(JOINT)</td>
|
||||
<td class="xl70" style="">SHOP WELDED (WDI)</td>
|
||||
<td class="xl70" style="">FIELD WELDED (WDI)</td>
|
||||
<td class="xl70" style="">SHOP AVARAGE (WDI)</td>
|
||||
<td class="xl70" style="">FIELD AVARAGE
|
||||
(WDI)</td>
|
||||
<td height="61" colspan="1" class="xl68" >SHOP SCOPE WDI</td>
|
||||
<td height="61" colspan="1" class="xl68" >FIELD SCOPE WDI</td>
|
||||
<td height="61" colspan="1" class="xl68" >BACKLOG</td>
|
||||
</tr>
|
||||
<tr height="21" style="height:15.75pt">
|
||||
|
||||
<td height="21" colspan="2" class="xl76" >{{$progress}}</td>
|
||||
<td class="xl77" style="border-top:none">{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->where("type_of_joint", "S")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->where("type_of_joint", "F")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->where("type_of_joint", "S")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->where("type_of_joint", "F")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereDate("welding_date", $today)->where("type_of_joint", "S")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereDate("welding_date", $today)->where("type_of_joint", "F")->count()}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereDate("welding_date", $today)->where("type_of_joint", "S")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereDate("welding_date", $today)->where("type_of_joint", "F")->sum("nps_1")}}</td>
|
||||
<td class="xl77" >
|
||||
<?php try {
|
||||
//code...
|
||||
?>
|
||||
{{round(db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("type_of_joint", "S")->whereDate("welding_date", $today)->whereNotNull("nps_1")->sum("nps_1") / $activeWeldersCountShop, 2)}}
|
||||
<?php
|
||||
} catch (\Throwable $th) {
|
||||
echo 0;
|
||||
} ?>
|
||||
|
||||
|
||||
</td>
|
||||
<td class="xl77" >
|
||||
|
||||
<?php try {
|
||||
?>
|
||||
{{round(db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("type_of_joint", "F")->whereDate("welding_date", $today)->whereNotNull("nps_1")->sum("nps_1") / $activeWeldersCountField, 2)}}
|
||||
<?php
|
||||
} catch (\Throwable $th) {
|
||||
echo 0;
|
||||
} ?>
|
||||
|
||||
</td>
|
||||
<td height="21" colspan="1" class="xl76" >
|
||||
{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("type_of_joint", "S")->sum("nps_1")}}
|
||||
</td>
|
||||
<td height="21" colspan="1" class="xl76" >
|
||||
{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("type_of_joint", "F")->sum("nps_1")}}
|
||||
</td>
|
||||
<td height="21" colspan="1" class="xl76" >
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>S</td>
|
||||
<td>F</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNull("welding_date")->where("type_of_joint", "S")->sum("nps_1")}}</td>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNull("welding_date")->where("type_of_joint", "F")->sum("nps_1")}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr class="header">
|
||||
<td colspan="8" class="text-center">
|
||||
<?php
|
||||
$projectId = str_slug($project);
|
||||
$appWDI = setting($projectId . '-approximate-planned-wdi');
|
||||
try {
|
||||
$progress = round($totalWeldedWDI * 100 / $appWDI, 2);
|
||||
} catch (\Throwable $th) {
|
||||
$progress = 0;
|
||||
}
|
||||
?>
|
||||
{{$project}} Approximate Progress:
|
||||
<div class="progress bg-gray">
|
||||
|
||||
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width:{{$progress}}%">{{$progress}}%</div>
|
||||
</div>
|
||||
</td>
|
||||
<td colspan="7" class="text-center">
|
||||
{{$project}} Approximate WDI: <br>
|
||||
<strong>{{$appWDI}}</strong>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody></table>
|
||||
<table class="table table-bordered table-striped mt-5">
|
||||
<tr class="header">
|
||||
<td>Piping type</td>
|
||||
<td>Total Scope Shop</td>
|
||||
<td>Welded Scope Shop</td>
|
||||
<td>Total Scope Field</td>
|
||||
<td>Welded Scope Field</td>
|
||||
<td>Total Scope</td>
|
||||
<td rowspan="3">
|
||||
<?php
|
||||
$repairResults = repair_results();
|
||||
$ignoreResults = ignore_results();
|
||||
$excludeTotal = array_merge([''], $ignoreResults);
|
||||
|
||||
$notRepairUTCountShop = db("ultrasonic_tests")->where("project", $project)->where("type_of_joint", "S")->where("ut_result", "Accept / Годен")->count();
|
||||
$repairUTCountShop = db("ultrasonic_tests")->where("project", $project)->where("type_of_joint", "S")->whereIn("ut_result", $repairResults)->count();
|
||||
$notRepairRTCountShop = db("radiographic_tests")->where("project", $project)->where("type_of_joint", "S")->where("rt_result", "Accept / Годен")->count();
|
||||
$repairRTCountShop = db("radiographic_tests")->where("project", $project)->where("type_of_joint", "S")->whereIn("rt_result", $repairResults)->count();
|
||||
|
||||
$notRepairUTCountField = db("ultrasonic_tests")->where("project", $project)->where("type_of_joint", "F")->where("ut_result", "Accept / Годен")->count();
|
||||
$repairUTCountField = db("ultrasonic_tests")->where("project", $project)->where("type_of_joint", "F")->whereIn("ut_result", $repairResults)->count();
|
||||
$notRepairRTCountField = db("radiographic_tests")->where("project", $project)->where("type_of_joint", "F")->where("rt_result", "Accept / Годен")->count();
|
||||
$repairRTCountField = db("radiographic_tests")->where("project", $project)->where("type_of_joint", "F")->whereIn("rt_result", $repairResults)->count();
|
||||
|
||||
|
||||
$totalUTShop = db("ultrasonic_tests")->where("project", $project)->where("type_of_joint", "S")->whereNotIn("ut_result", $excludeTotal)->whereNotNull("ut_result")->count();
|
||||
$shopRepairTotal = $repairUTCountShop + $repairRTCountShop;
|
||||
$fieldRepairTotal = $repairUTCountField + $repairRTCountField;
|
||||
|
||||
$totalRTShop = db("radiographic_tests")->where("project", $project)->where("type_of_joint", "S")->whereNotIn("rt_result", $excludeTotal)->whereNotNull("rt_result")->count();
|
||||
|
||||
$totalUTField = db("ultrasonic_tests")->where("project", $project)->where("type_of_joint", "F")->whereNotIn("ut_result", $excludeTotal)->whereNotNull("ut_result")->count();
|
||||
$totalRTField = db("radiographic_tests")->where("project", $project)->where("type_of_joint", "F")->whereNotIn("rt_result", $excludeTotal)->whereNotNull("rt_result")->count();
|
||||
|
||||
$shopAllTotal = $totalRTShop + $totalUTShop;
|
||||
$fieldAllTotal = $totalRTField + $totalUTField;
|
||||
|
||||
try {
|
||||
if($shopAllTotal > 0)
|
||||
$shopPercent = round($shopRepairTotal * 100 / $shopAllTotal, 2);
|
||||
else
|
||||
$shopPercent = 0;
|
||||
} catch (\Throwable $th) {
|
||||
$shopPercent = 0;
|
||||
}
|
||||
|
||||
try {
|
||||
if($fieldAllTotal > 0)
|
||||
$fieldPercent = round($fieldRepairTotal * 100 / $fieldAllTotal, 2);
|
||||
else
|
||||
$fieldPercent = 0;
|
||||
} catch (\Throwable $th) {
|
||||
$fieldPercent = 0;
|
||||
}
|
||||
|
||||
?>
|
||||
<table class="table table-bordered ">
|
||||
<tr>
|
||||
<td width="80%" colspan="3">{{e2("Repair Rate %")}}</td>
|
||||
|
||||
<td>{{e2("Cutout Joints (WDI)")}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{e2("Shop")}}</td>
|
||||
<td>{{e2("Field")}}</td>
|
||||
<td rowspan="2" style="text-align:center; font-weight: bold; vertical-align:middle;
|
||||
font-size: 23px !important;">
|
||||
<?php
|
||||
try {
|
||||
$repairRateAll = round(($shopRepairTotal + $fieldRepairTotal) * 100 /($shopAllTotal + $fieldAllTotal), 2);
|
||||
} catch (\Throwable $th) {
|
||||
$repairRateAll = 0;
|
||||
}
|
||||
?>
|
||||
{{$repairRateAll}}</td>
|
||||
<td rowspan="2" style="vertical-align: middle;">{{db("deleted_joints")->where("project", $project)->whereNotNull("welding_date")->sum("nps_1")}}</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{$shopPercent}}</td>
|
||||
<td>{{$fieldPercent}}</td>
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $pipingTypes = db("weld_logs")->where("project", $project)->groupBy("piping_type")->select("piping_type")->get()->pluck("piping_type")->toArray(); ?>
|
||||
@foreach($pipingTypes AS $pipingType)
|
||||
<?php $totalScope = db("weld_logs")->where("project", $project)->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("piping_type", $pipingType)->sum("nps_1"); ?>
|
||||
@if($totalScope>0)
|
||||
<tr>
|
||||
<td>{{$pipingType}}</td>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("type_of_joint", "S")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td>{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->where("type_of_joint", "S")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td class="table-success">{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->where("type_of_joint", "F")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td class="table-success">{{db("weld_logs")->where("no_of_the_joint_as_per_as_built_survey", "not like", "%R%")->where("project", $project)->whereNotNull("welding_date")->where("type_of_joint", "F")->where("piping_type", $pipingType)->sum("nps_1")}}</td>
|
||||
<td>{{$totalScope}}</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
@@ -1,253 +0,0 @@
|
||||
<div class="block col-12" id="ndtSummaryBlock">
|
||||
<div class="block-header block-header-default">
|
||||
<h3 class="block-title"><i class="fa fa-table"></i> NDT SUMMARY - STELLAR</h3>
|
||||
</div>
|
||||
<div class="block-content">
|
||||
<table class="table table-bordered table-striped">
|
||||
<colgroup><col span="9"></colgroup>
|
||||
<tbody>
|
||||
<tr height="101" style="height:75.75pt">
|
||||
<td height="101" class="xl68" style="height:75.75pt;border-top:none;width:48pt">TYPE of EXAMINATION</td>
|
||||
<td class="xl68" style="">TOTAL EXAMINED (JOINT)</td>
|
||||
<td class="xl68" style="">TOTAL EXAMINED (WDI)</td>
|
||||
<td class="xl68" style="">TOTAL ACCEPTED (JOINT)</td>
|
||||
<td class="xl68" style="">TOTAL REJECTED (JOINT)</td>
|
||||
<td class="xl68" style="">OVERALL REPAIR RATE (%)</td>
|
||||
<td class="xl68" style="">{{$today->format("d.m.Y")}} - ACCEPTED (JOINT)</td>
|
||||
<td class="xl68" style="">{{$today->format("d.m.Y")}} - REJECTED (JOINT)</td>
|
||||
<td class="xl68" style="">{{$today->format("d.m.Y")}} - REPAIR RATE (%)</td>
|
||||
</tr>
|
||||
<?php
|
||||
// --- AYARLAR / TANIMLAMALAR ---
|
||||
|
||||
// Tamir olarak sayılacak sonuçlar (Sadece tamir edilebilir olanlar)
|
||||
$rtRepairResults = repair_results();
|
||||
|
||||
// İstatistikten tamamen çıkarılacak sonuçlar (Cancel vb.)
|
||||
// Veritabanınızdaki Cancel kaydı tam olarak nasılsa buraya ekleyin (örn: 'Cancel', 'Cancel / Отмена')
|
||||
$ignoreResults = ignore_results();
|
||||
|
||||
// --- RT HESAPLAMALARI ---
|
||||
|
||||
// Kabul edilenler ve Boş olanlar harici "Accept Olmayanlar" listesi (REJ + REPAIR)
|
||||
// Cancel'ı buraya dahil etmemek için exclude dizisini birleştiriyoruz.
|
||||
$excludeForRejectCalc = array_merge(['', "Accept / Годен"], $ignoreResults);
|
||||
$excludeForTotalCalc = array_merge([''], $ignoreResults);
|
||||
|
||||
// Toplam Ekzamine (Cancel Olanlar HARİÇ)
|
||||
$rtTotalJoint = db("radiographic_tests")
|
||||
->whereNotNull("rt_result")
|
||||
->whereNotIn("rt_result", $ignoreResults) // Cancel sayılmaz
|
||||
->count();
|
||||
|
||||
$rtAcceptJoint = db("radiographic_tests")->where("rt_result","Accept / Годен")->count();
|
||||
|
||||
// Toplam Reddedilen (Repair + Reject). Cancel dahil edilmez.
|
||||
$rtNotAcceptJoint = db("radiographic_tests")
|
||||
->whereNotNull("rt_result")
|
||||
->whereNotIn("rt_result", $excludeForRejectCalc)
|
||||
->count();
|
||||
|
||||
// --- GÜNLÜK (TODAY) RT ---
|
||||
|
||||
$rtTodayTotalJoint = db("radiographic_tests")
|
||||
->whereDate("rt_test_date", $today)
|
||||
->whereNotNull("rt_result")
|
||||
->whereNotIn("rt_result", $ignoreResults) // Günlük toplamdan Cancel'ı çıkar
|
||||
->count();
|
||||
|
||||
$rtTodayAcceptJoint = db("radiographic_tests")
|
||||
->whereDate("rt_test_date", $today)
|
||||
->where("rt_result","Accept / Годен")
|
||||
->count();
|
||||
|
||||
// Günlük Red (Repair + Reject), Cancel hariç
|
||||
$rtTodayRejectedJoint = db("radiographic_tests")
|
||||
->whereDate("rt_test_date", $today)
|
||||
->whereNotNull("rt_result")
|
||||
->whereNotIn("rt_result", $excludeForRejectCalc)
|
||||
->count();
|
||||
|
||||
// Günlük Sadece Tamir Oranı İçin (Sadece Repair sayılır, Reject sayılmaz)
|
||||
$rtTodayRepairJoint = db("radiographic_tests")
|
||||
->whereDate("rt_test_date", $today)
|
||||
->whereIn("rt_result", $rtRepairResults)
|
||||
->count();
|
||||
?>
|
||||
<tr height="21" style="height:15.75pt">
|
||||
<td height="21" class="xl69">RT</td>
|
||||
<td class="xl70">{{$rtTotalJoint}}</td>
|
||||
<td class="xl70">{{db("radiographic_tests")->whereNotNull("rt_result")->whereNotIn("rt_result", $ignoreResults)->sum("nps_1")}}</td>
|
||||
<td class="xl70">{{$rtAcceptJoint}}</td>
|
||||
<td class="xl71">{{$rtNotAcceptJoint}}</td>
|
||||
<td class="xl72">
|
||||
<?php
|
||||
// --- RT REPAIR RATE HESABI ---
|
||||
|
||||
// Sadece "Repair" olanları say (Reject/Cancel dahil değil)
|
||||
$repairRTCountShop = db("radiographic_tests")
|
||||
->where("type_of_joint", "S")
|
||||
->whereIn("rt_result", $rtRepairResults)
|
||||
->count();
|
||||
|
||||
$repairRTCountField = db("radiographic_tests")
|
||||
->where("type_of_joint", "F")
|
||||
->whereIn("rt_result", $rtRepairResults)
|
||||
->count();
|
||||
|
||||
$shopRepairTotal = $repairRTCountShop;
|
||||
$fieldRepairTotal = $repairRTCountField;
|
||||
|
||||
// Payda (Toplam) hesabı: Cancel olanları toplama dahil etme!
|
||||
// Eğer Cancel toplamda olursa, oran yanlış çıkar.
|
||||
$totalRTShop = db("radiographic_tests")
|
||||
->where("type_of_joint", "S")
|
||||
->whereNotIn("rt_result", $excludeForTotalCalc) // Boş ve Cancel hariç hepsi
|
||||
->count();
|
||||
|
||||
$totalRTField = db("radiographic_tests")
|
||||
->where("type_of_joint", "F")
|
||||
->whereNotIn("rt_result", $excludeForTotalCalc) // Boş ve Cancel hariç hepsi
|
||||
->count();
|
||||
|
||||
$shopAllTotal = $totalRTShop;
|
||||
$fieldAllTotal = $totalRTField;
|
||||
|
||||
try {
|
||||
// Paydalar 0 ise hata vermesin diye kontrol
|
||||
$denom = ($shopAllTotal + $fieldAllTotal);
|
||||
if ($denom > 0) {
|
||||
$repairRateAll = round(($shopRepairTotal + $fieldRepairTotal) * 100 / $denom, 2);
|
||||
} else {
|
||||
$repairRateAll = 0;
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
$repairRateAll = 0;
|
||||
}
|
||||
|
||||
setting_put("repairRateAll", $repairRateAll);
|
||||
?>
|
||||
{{$repairRateAll}}
|
||||
</td>
|
||||
<td class="xl70">{{$rtTodayAcceptJoint}}</td>
|
||||
<td class="xl70">{{$rtTodayRejectedJoint}}</td>
|
||||
<td class="xl72">
|
||||
<?php try {
|
||||
if ($rtTodayTotalJoint > 0) {
|
||||
echo round($rtTodayRepairJoint * 100 / $rtTodayTotalJoint, 2);
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
echo 0;
|
||||
} ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
// --- PAUT / UT KISMI ---
|
||||
// Aynı mantığı buraya da uyguluyoruz
|
||||
$utRepairResults = repair_results();
|
||||
|
||||
// Totalden Cancel çıkar
|
||||
$utTotalJoint = db("ultrasonic_tests")
|
||||
->whereNotNull("ut_result")
|
||||
->whereNotIn("ut_result", $ignoreResults)
|
||||
->count();
|
||||
|
||||
$utAcceptJoint = db("ultrasonic_tests")->where("ut_result","Accept / Годен")->count();
|
||||
|
||||
// Rejected kolonu için (Cancel hariç)
|
||||
$utNotAcceptJoint = db("ultrasonic_tests")
|
||||
->whereNotNull("ut_result")
|
||||
->whereNotIn("ut_result", $excludeForRejectCalc)
|
||||
->count();
|
||||
|
||||
// Günlük Veriler
|
||||
$utTodayTotalJoint = db("ultrasonic_tests")
|
||||
->whereDate("ut_test_date", $today)
|
||||
->whereNotNull("ut_result")
|
||||
->whereNotIn("ut_result", $ignoreResults)
|
||||
->count();
|
||||
|
||||
$utTodayAcceptJoint = db("ultrasonic_tests")
|
||||
->whereDate("ut_test_date", $today)
|
||||
->where("ut_result","Accept / Годен")
|
||||
->count();
|
||||
|
||||
$utTodayRejectedJoint = db("ultrasonic_tests")
|
||||
->whereDate("ut_test_date", $today)
|
||||
->whereNotNull("ut_result")
|
||||
->whereNotIn("ut_result", $excludeForRejectCalc)
|
||||
->count();
|
||||
|
||||
$utTodayRepairJoint = db("ultrasonic_tests")
|
||||
->whereDate("ut_test_date", $today)
|
||||
->whereIn("ut_result", $utRepairResults)
|
||||
->count();
|
||||
?>
|
||||
<tr height="21" style="height:15.75pt">
|
||||
<td height="21" class="xl69">PAUT</td>
|
||||
<td class="xl70">{{$utTotalJoint}}</td>
|
||||
<td class="xl70">{{db("ultrasonic_tests")->whereNotNull("ut_result")->whereNotIn("ut_result", $ignoreResults)->sum("nps_1")}}</td>
|
||||
<td class="xl70">{{db("ultrasonic_tests")->where("ut_result","Accept / Годен")->count()}}</td>
|
||||
<td class="xl71">{{$utNotAcceptJoint}}</td>
|
||||
<td class="xl72">
|
||||
<?php
|
||||
$repairUTCountShop = db("ultrasonic_tests")
|
||||
->where("type_of_joint", "S")
|
||||
->whereIn("ut_result", $utRepairResults)
|
||||
->count();
|
||||
|
||||
$repairUTCountField = db("ultrasonic_tests")
|
||||
->where("type_of_joint", "F")
|
||||
->whereIn("ut_result", $utRepairResults)
|
||||
->count();
|
||||
|
||||
// Total hesaplarken Cancel'ı hariç tut
|
||||
$totalUTShop = db("ultrasonic_tests")
|
||||
->where("type_of_joint", "S")
|
||||
->whereNotIn("ut_result", $excludeForTotalCalc)
|
||||
->count();
|
||||
|
||||
$totalUTField = db("ultrasonic_tests")
|
||||
->where("type_of_joint", "F")
|
||||
->whereNotIn("ut_result", $excludeForTotalCalc)
|
||||
->count();
|
||||
|
||||
$shopRepairTotal = $repairUTCountShop;
|
||||
$fieldRepairTotal = $repairUTCountField;
|
||||
$shopAllTotal = $totalUTShop;
|
||||
$fieldAllTotal = $totalUTField;
|
||||
|
||||
try {
|
||||
$denom = ($shopAllTotal + $fieldAllTotal);
|
||||
if ($denom > 0) {
|
||||
$repairRateAll = round(($shopRepairTotal + $fieldRepairTotal) * 100 / $denom, 2);
|
||||
} else {
|
||||
$repairRateAll = 0;
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
$repairRateAll = 0;
|
||||
}
|
||||
?>
|
||||
{{$repairRateAll}}
|
||||
</td>
|
||||
<td class="xl70">{{$utTodayAcceptJoint}}</td>
|
||||
<td class="xl70">{{$utTodayRejectedJoint}}</td>
|
||||
<td class="xl72">
|
||||
<?php try {
|
||||
if ($utTodayTotalJoint > 0) {
|
||||
echo round($utTodayRepairJoint * 100 / $utTodayTotalJoint, 2);
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
echo 0;
|
||||
} ?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,82 +0,0 @@
|
||||
|
||||
<?php
|
||||
$repairResults = repair_results();
|
||||
$ignoreResults = ignore_results();
|
||||
$excludeTotal = array_merge([''], $ignoreResults);
|
||||
|
||||
$notRepairUTCountShop = db("ultrasonic_tests")->where("type_of_joint", "S")->where("ut_result", "Accept / Годен")->count();
|
||||
$repairUTCountShop = db("ultrasonic_tests")->where("type_of_joint", "S")->whereIn("ut_result", $repairResults)->count();
|
||||
$notRepairRTCountShop = db("radiographic_tests")->where("type_of_joint", "S")->where("rt_result", "Accept / Годен")->count();
|
||||
$repairRTCountShop = db("radiographic_tests")->where("type_of_joint", "S")->whereIn("rt_result", $repairResults)->count();
|
||||
|
||||
$notRepairUTCountField = db("ultrasonic_tests")->where("type_of_joint", "F")->where("ut_result", "Accept / Годен")->count();
|
||||
$repairUTCountField = db("ultrasonic_tests")->where("type_of_joint", "F")->whereIn("ut_result", $repairResults)->count();
|
||||
$notRepairRTCountField = db("radiographic_tests")->where("type_of_joint", "F")->where("rt_result", "Accept / Годен")->count();
|
||||
$repairRTCountField = db("radiographic_tests")->where("type_of_joint", "F")->whereIn("rt_result", $repairResults)->count();
|
||||
|
||||
|
||||
$totalUTShop = db("ultrasonic_tests")->where("type_of_joint", "S")->whereNotIn("ut_result", $excludeTotal)->whereNotNull("ut_result")->count();
|
||||
$shopRepairTotal = $repairUTCountShop + $repairRTCountShop;
|
||||
$fieldRepairTotal = $repairUTCountField + $repairRTCountField;
|
||||
|
||||
$totalRTShop = db("radiographic_tests")->where("type_of_joint", "S")->whereNotIn("rt_result", $excludeTotal)->whereNotNull("rt_result")->count();
|
||||
|
||||
$totalUTField = db("ultrasonic_tests")->where("type_of_joint", "F")->whereNotIn("ut_result", $excludeTotal)->whereNotNull("ut_result")->count();
|
||||
$totalRTField = db("radiographic_tests")->where("type_of_joint", "F")->whereNotIn("rt_result", $excludeTotal)->whereNotNull("rt_result")->count();
|
||||
|
||||
$shopAllTotal = $totalRTShop + $totalUTShop;
|
||||
$fieldAllTotal = $totalRTField + $totalUTField;
|
||||
|
||||
try {
|
||||
if($shopAllTotal > 0)
|
||||
$shopPercent = round($shopRepairTotal * 100 / $shopAllTotal, 2);
|
||||
else
|
||||
$shopPercent = 0;
|
||||
} catch (\Throwable $th) {
|
||||
$shopPercent = 0;
|
||||
}
|
||||
|
||||
try {
|
||||
if($fieldAllTotal > 0)
|
||||
$fieldPercent = round($fieldRepairTotal * 100 / $fieldAllTotal, 2);
|
||||
else
|
||||
$fieldPercent = 0;
|
||||
} catch (\Throwable $th) {
|
||||
$fieldPercent = 0;
|
||||
}
|
||||
|
||||
?>
|
||||
<table class="table table-bordered ">
|
||||
<tr>
|
||||
<td width="80%" colspan="3">{{e2("Repair Rate %")}}</td>
|
||||
@if($id != "repair-table")
|
||||
<td>{{e2("Cutout Joints (WDI)")}} </td>
|
||||
@endif
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{e2("Shop")}}</td>
|
||||
<td>{{e2("Field")}}</td>
|
||||
|
||||
<td rowspan="2" style="text-align:center; font-weight: bold; vertical-align:middle;
|
||||
font-size: 23px !important;">
|
||||
<?php
|
||||
try {
|
||||
$repairRateAll = round(($shopRepairTotal + $fieldRepairTotal) * 100 /($shopAllTotal + $fieldAllTotal), 2);
|
||||
} catch (\Throwable $th) {
|
||||
$repairRateAll = 0;
|
||||
}
|
||||
?>
|
||||
{{$repairRateAll}}</td>
|
||||
@if($id != "repair-table")
|
||||
<td rowspan="2" style="vertical-align: middle;">{{db("deleted_joints")->whereNotNull("welding_date")->sum("nps_1")}}</td>
|
||||
@endif
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{$shopPercent}}</td>
|
||||
<td>{{$fieldPercent}}</td>
|
||||
|
||||
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
@@ -1,353 +0,0 @@
|
||||
{{col("col-md-7","QC Weldlog", 0, ['no-options' => true])}}
|
||||
|
||||
<small>🟡: {{e2("Worked in this isometry before")}}
|
||||
/ 🔴: {{e2("This welder previously worked as Real Welder")}}
|
||||
/ ❗: {{e2("Naks validation date close to end or finished")}}
|
||||
/ ❌📅: {{e2("Welding date is not equal or greater than Naks validation date")}}
|
||||
</small>
|
||||
<div id="qc-weldlog-datagrid"></div>
|
||||
{{_col()}}
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=welder-assignment.qc-weldlog',
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
var welderWdi = $("#qc-weldlog-datagrid").dxDataGrid({
|
||||
dataSource: dataSource,
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: false,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: false },
|
||||
toolbar: {
|
||||
items: [
|
||||
"saveButton",
|
||||
]
|
||||
},
|
||||
editing: {
|
||||
<?php if(isAuth($id, "modify")) { ?>
|
||||
allowUpdating: true,
|
||||
<?php } ?>
|
||||
startEditAction: 'dblClick',
|
||||
refreshMode: 'repaint',
|
||||
mode: 'batch', // 'batch' | 'cell' | 'form' | 'popup',
|
||||
|
||||
|
||||
},
|
||||
onEditorPreparing(e) {
|
||||
var editableColumns = [
|
||||
'certificate_no_1',
|
||||
'certificate_no_2',
|
||||
'wpq_report_1',
|
||||
'wpq_report_2',
|
||||
];
|
||||
if(e.parentType == "dataRow") {
|
||||
if(e.dataField == "welder_1" || e.dataField == "welder_2") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.searchEnabled = true;
|
||||
e.editorOptions.acceptCustomValue = false;
|
||||
e.editorOptions.dataSource = new DevExpress.data.CustomStore({
|
||||
load: function(loadOptions) {
|
||||
return $.getJSON('{{autocomplete_type("welder-assignment*welder_1")}}?row=' + JSON.stringify(e.row.data))
|
||||
.then(function(data) {
|
||||
// Check if there are no welders or error
|
||||
if(!data.welders || data.welders.length === 0 || data.error) {
|
||||
// Build detailed criteria analysis HTML
|
||||
let criteriaHtml = '';
|
||||
if(data.step_summary) {
|
||||
const summary = data.step_summary;
|
||||
const details = summary.criteria_details;
|
||||
|
||||
// Calculate lost records
|
||||
const lost2 = summary.step1_material_only - summary.step2_diameter;
|
||||
const lost3 = summary.step2_diameter - summary.step3_thickness;
|
||||
const lost4 = summary.step3_thickness - summary.step4_approval_date;
|
||||
const lost5 = summary.step4_approval_date - summary.step5_welding_method;
|
||||
const lostFinal = summary.step5_welding_method - summary.final_with_groupby;
|
||||
|
||||
// Determine statuses
|
||||
const step1Status = summary.step1_material_only > 0 ? '✅ Passed' : '❌ Failed';
|
||||
const step2Status = summary.step2_diameter > 0 ? '✅ Passed' : '❌ Failed';
|
||||
const step3Status = summary.step3_thickness > 0 ? '✅ Passed' : '❌ Failed';
|
||||
const step4Status = summary.step4_approval_date > 0 ? '✅ Passed' : '❌ Failed';
|
||||
const step5Status = summary.step5_welding_method > 0 ? '✅ Passed' : '❌ Failed';
|
||||
const finalStatus = summary.final_with_groupby > 0 ? '✅ SUCCESS' : '❌ NO RESULTS';
|
||||
const finalColor = summary.final_with_groupby > 0 ? '#5cb85c' : '#d9534f';
|
||||
|
||||
// Build warning message
|
||||
let warningMsg = '';
|
||||
if(summary.final_with_groupby === 0 && summary.step5_welding_method > 0) {
|
||||
warningMsg = '<div style="margin-top: 10px; padding: 10px; background-color: #fcf8e3; border-left: 4px solid #f0ad4e;"><strong>⚠️ Warning:</strong> Records exist before GROUP BY but disappear after GROUP BY. This indicates a problem with the GROUP BY clause or MIN() aggregation function.</div>';
|
||||
}
|
||||
|
||||
criteriaHtml =
|
||||
'<div style="text-align: left; margin-top: 15px;">' +
|
||||
'<h5 style="color: #d9534f; margin-bottom: 10px;">📊 Criteria Analysis</h5>' +
|
||||
'<table style="width: 100%; border-collapse: collapse; font-size: 12px;">' +
|
||||
'<tr style="background-color: #f5f5f5;">' +
|
||||
'<th style="padding: 8px; border: 1px solid #ddd; text-align: left;">Step</th>' +
|
||||
'<th style="padding: 8px; border: 1px solid #ddd; text-align: center;">Records Found</th>' +
|
||||
'<th style="padding: 8px; border: 1px solid #ddd; text-align: center;">Lost</th>' +
|
||||
'<th style="padding: 8px; border: 1px solid #ddd; text-align: left;">Status</th>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;"><strong>Step 1:</strong> Material Group Only</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold;">' + summary.step1_material_only + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center;">-</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;">' + step1Status + '</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;"><strong>Step 2:</strong> + Diameter (' + details.diameter_odmm + 'mm)</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold;">' + summary.step2_diameter + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; color: #d9534f;">-' + lost2 + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;">' + step2Status + '</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;"><strong>Step 3:</strong> + Thickness (' + details.thickness_tck + 'mm)</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold;">' + summary.step3_thickness + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; color: #d9534f;">-' + lost3 + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;">' + step3Status + '</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;"><strong>Step 4:</strong> + Approval Date (≤' + details.welding_date + ')</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold;">' + summary.step4_approval_date + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; color: #d9534f;">-' + lost4 + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;">' + step4Status + '</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;"><strong>Step 5:</strong> + Welding Method (' + details.welding_method + ')</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold;">' + summary.step5_welding_method + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; color: #d9534f;">-' + lost5 + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;">' + step5Status + '</td>' +
|
||||
'</tr>' +
|
||||
'<tr style="background-color: #fff3cd;">' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd;"><strong>Final:</strong> + GROUP BY</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold; color: ' + finalColor + ';">' + summary.final_with_groupby + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; text-align: center; color: #d9534f;">-' + lostFinal + '</td>' +
|
||||
'<td style="padding: 8px; border: 1px solid #ddd; color: ' + finalColor + '; font-weight: bold;">' + finalStatus + '</td>' +
|
||||
'</tr>' +
|
||||
'</table>' +
|
||||
'<div style="margin-top: 15px; padding: 10px; background-color: #f9f9f9; border-left: 4px solid #5bc0de;">' +
|
||||
'<strong>📋 Search Criteria:</strong><br>' +
|
||||
'• Material RU 1: <strong>' + details.material_ru_1 + '</strong><br>' +
|
||||
'• Material RU 2: <strong>' + details.material_ru_2 + '</strong><br>' +
|
||||
'• Diameter: <strong>' + details.diameter_odmm + ' mm</strong><br>' +
|
||||
'• Thickness: <strong>' + details.thickness_tck + ' mm</strong><br>' +
|
||||
'• Welding Method: <strong>' + details.welding_method + '</strong> (reversed: ' + details.welding_method_reversed + ')<br>' +
|
||||
'• Welding Date: <strong>' + details.welding_date + '</strong>' +
|
||||
'</div>' +
|
||||
warningMsg +
|
||||
'</div>';
|
||||
}
|
||||
|
||||
// Determine title and text based on whether there's an error or just no welders
|
||||
let titleText = 'No data found';
|
||||
let messageText = 'Welder details could not be found for this selection.';
|
||||
let htmlContent = criteriaHtml;
|
||||
|
||||
if(data.error) {
|
||||
titleText = 'Criteria validation failed';
|
||||
messageText = data.error;
|
||||
htmlContent = data.error + '<br><br>' + criteriaHtml;
|
||||
}
|
||||
|
||||
Swal.fire({
|
||||
icon: 'warning',
|
||||
title: titleText,
|
||||
text: messageText,
|
||||
html: htmlContent,
|
||||
width: '800px',
|
||||
customClass: {
|
||||
popup: 'detailed-swal-popup'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Return welders array or empty array
|
||||
return data.welders || [];
|
||||
});
|
||||
},
|
||||
byKey: function(key) {
|
||||
// Placeholder for byKey (not used in this case)
|
||||
return null;
|
||||
},
|
||||
insert: function(values) {
|
||||
// Placeholder for insert (not used in this case)
|
||||
return null;
|
||||
},
|
||||
update: function(key, values) {
|
||||
// Placeholder for update (not used in this case)
|
||||
return null;
|
||||
},
|
||||
remove: function(key) {
|
||||
// Placeholder for remove (not used in this case)
|
||||
return null;
|
||||
}
|
||||
});
|
||||
e.editorOptions.onValueChanged = function(selectData) {
|
||||
var selectedWelder = selectData.value.replace("🟡 ", "");
|
||||
selectedWelder = selectedWelder.replace("🔴 ", "");
|
||||
selectedWelder = selectedWelder.replace("🔴 🟡 ", "");
|
||||
selectedWelder = selectedWelder.replace("❗🔴 🟡 ", "");
|
||||
selectedWelder = selectedWelder.replace("❗", "");
|
||||
selectedWelder = selectedWelder.replace("❌📅", "");
|
||||
e.setValue(selectedWelder);
|
||||
var welder = e.row.data.welder_1;
|
||||
var rowIndex = e.rowIndex;
|
||||
if(e.dataField == "welder_2") {
|
||||
welder = e.row.data.welder_2;
|
||||
}
|
||||
|
||||
$.getJSON("{{autocomplete_type("welder-assignment*welder_detail")}}?welder="+welder+"&row=" + JSON.stringify(e.row.data), function (d) {
|
||||
if(e.dataField == "welder_1") {
|
||||
e.component.cellValue(e.row.rowIndex, "certificate_no_1", d.naks_no);
|
||||
e.component.cellValue(e.row.rowIndex, "wpq_report_1", d.wpq_document_no);
|
||||
} else {
|
||||
e.component.cellValue(e.row.rowIndex, "certificate_no_2", d.naks_no);
|
||||
e.component.cellValue(e.row.rowIndex, "wpq_report_2", d.wpq_document_no);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
} else if(e.dataField == "welding_date") {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.displayFormat = 'dd/MM/yyyy';
|
||||
e.dataType = 'date';
|
||||
e.editorOptions.format = 'dd/MM/yyyy';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
e.editorOptions.readOnly = false;
|
||||
} else if(editableColumns.includes(e.dataField)) {
|
||||
e.editorOptions.readOnly = true;
|
||||
} else {
|
||||
e.editorOptions.readOnly = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
columns : [
|
||||
"iso_number",
|
||||
"iso_rev",
|
||||
"type_of_joint",
|
||||
"joint_no",
|
||||
{
|
||||
dataField: "welding_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
{
|
||||
dataField: "welder_1",
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
dataField: "welder_2",
|
||||
width: 200,
|
||||
},
|
||||
"certificate_no_1",
|
||||
"wpq_report_1",
|
||||
"certificate_no_2",
|
||||
"wpq_report_2",
|
||||
"ru_1",
|
||||
"ru_2",
|
||||
"odmm",
|
||||
"tck",
|
||||
],
|
||||
onSaved() {
|
||||
$("#welder-wdi-datagrid").dxDataGrid("instance").option('dataSource', '?ajax=welder-assignment.welder-wdi&' + Math.random());
|
||||
|
||||
},
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
}).dxDataGrid("instance");
|
||||
|
||||
/*
|
||||
|
||||
setTimeout(function() {
|
||||
weldmap.dxDataGrid("instance").columnOption("welding_date", "dataType", "date");
|
||||
}, 2000);
|
||||
*/
|
||||
});
|
||||
</script>
|
||||
@@ -1,66 +0,0 @@
|
||||
{{col("col-md-2","Welder WDI", 0, ['no-options' => true])}}
|
||||
<div id="welder-wdi-datagrid"></div>
|
||||
{{_col()}}
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
var welderWdi = $("#welder-wdi-datagrid").dxDataGrid({
|
||||
dataSource: "?ajax=welder-assignment.welder-wdi",
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: false,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
columns : [
|
||||
"welder",
|
||||
"wdi",
|
||||
"loc",
|
||||
{
|
||||
dataField: "welding_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
],
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: false },
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
|
||||
setTimeout(function() {
|
||||
weldmap.dxDataGrid("instance").columnOption("welding_date", "dataType", "date");
|
||||
}, 2000);
|
||||
*/
|
||||
});
|
||||
</script>
|
||||
@@ -1,128 +0,0 @@
|
||||
{{col("col-md-5","Weldmap", 0, ['no-options' => true])}}
|
||||
<div id="weldmap-datagrid"></div>
|
||||
{{_col()}}
|
||||
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
var weldmap = $("#weldmap-datagrid").dxDataGrid({
|
||||
dataSource: "?ajax=welder-assignment.weldmap",
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: false,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
maxColumnWidth:100,
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
columns : [
|
||||
"iso_number",
|
||||
"rev",
|
||||
"joint",
|
||||
"joint_no",
|
||||
{
|
||||
dataField: "welding_date",
|
||||
dataType: "date",
|
||||
format: "dd/MM/yyyy"
|
||||
},
|
||||
"rw_1",
|
||||
"rw_2",
|
||||
|
||||
],
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
|
||||
var dataSource = new DevExpress.data.CustomStore({
|
||||
key: "id",
|
||||
load(loadOptions) {
|
||||
const deferred = $.Deferred();
|
||||
const args = {};
|
||||
|
||||
|
||||
|
||||
args['module'] = "{{$id}}";
|
||||
|
||||
$.ajax({
|
||||
url: '?ajax=welder-assignment.qc-weldlog&iso_number=' + e.data.iso_number + '&joint_no=' + e.data.joint_no,
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
data: args,
|
||||
success(result) {
|
||||
deferred.resolve(result);
|
||||
},
|
||||
error(e) {
|
||||
console.log("Data Loading Error");
|
||||
console.log(e);
|
||||
deferred.reject('{{e2("Data Loading Error")}}');
|
||||
},
|
||||
//timeout: 20000,
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
update: function(key, values) {
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// console.log("val" + values);
|
||||
$.ajax({
|
||||
url: "{{url("admin/save-json/weld_logs" )}}",
|
||||
method: "PUT",
|
||||
data: {
|
||||
'_token' : "{{ csrf_token() }}",
|
||||
values : values,
|
||||
key : key
|
||||
}
|
||||
})
|
||||
.done(function(e) {
|
||||
//console.log(e);
|
||||
//deferred.resolve;
|
||||
$("#welder-wdi-datagrid").dxDataGrid("instance").option('dataSource', '?ajax=welder-assignment.welder-wdi');
|
||||
return deferred.promise();
|
||||
|
||||
})
|
||||
.fail(function(e){
|
||||
deferred.reject("{{e2("Update failed")}}");
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// console.log(e);
|
||||
// $("#welder-wdi-datagrid").dxDataGrid("instance").option('dataSource', '?ajax=welder-assignment.welder-wdi&welding_date='+ e.data.welding_date +'&iso_number=' + e.data.iso_number + '&joint_no=' + e.data.joint_no);
|
||||
$("#qc-weldlog-datagrid").dxDataGrid("instance").option('dataSource', dataSource);
|
||||
$("#wqt-datagrid").dxDataGrid("instance").option('dataSource', "?ajax=welder-qualification-table2&weldlog_id=" + e.data.id);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(function() {
|
||||
weldmap.dxDataGrid("instance").columnOption("welding_date", "dataType", "date");
|
||||
}, 2000);
|
||||
});
|
||||
</script>
|
||||
@@ -1,56 +0,0 @@
|
||||
{{col("col-md-10","Welder Qualification Table", 0, ['no-options' => true])}}
|
||||
<div id="wqt-datagrid"></div>
|
||||
{{_col()}}
|
||||
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
var weldmap = $("#wqt-datagrid").dxDataGrid({
|
||||
dataSource: "?ajax=welder-qualification-table2",
|
||||
filterRow: { visible: true },
|
||||
searchPanel: { visible: false },
|
||||
headerFilter: {
|
||||
visible: true,
|
||||
allowSearch: true,
|
||||
},
|
||||
export: {
|
||||
enabled: false,
|
||||
formats: ['xlsx'],
|
||||
},
|
||||
|
||||
summary: {
|
||||
groupItems: [{
|
||||
summaryType: "count"
|
||||
}]
|
||||
},
|
||||
|
||||
paging: {
|
||||
pageSize: 20,
|
||||
},
|
||||
showBorders: true,
|
||||
allowColumnResizing: true,
|
||||
columnAutoWidth: true,
|
||||
allowColumnReordering: true,
|
||||
showColumnLines: true,
|
||||
columnFixing: {
|
||||
enabled: true
|
||||
},
|
||||
selection: {
|
||||
mode: 'single',
|
||||
deferred: true,
|
||||
},
|
||||
groupPanel: { visible: true },
|
||||
|
||||
onRowClick: function(e) {
|
||||
if(e.rowType === "data") {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(function() {
|
||||
weldmap.dxDataGrid("instance").columnOption("welding_date", "dataType", "date");
|
||||
weldmap.dxDataGrid("instance").columnOption("approval_date", "dataType", "date");
|
||||
weldmap.dxDataGrid("instance").columnOption("naks_validity", "dataType", "date");
|
||||
}, 2000);
|
||||
});
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,824 +0,0 @@
|
||||
<?php
|
||||
use App\Models\WeldLog;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
//$noRemoteOperations = false;
|
||||
$summaryTotalItems = '
|
||||
{
|
||||
column: "wall_thickness_1",
|
||||
summaryType: "sum"
|
||||
}, {
|
||||
column: "iso_number",
|
||||
summaryType: "count"
|
||||
}
|
||||
';
|
||||
$readOnlyColumns = [
|
||||
'line_specification',
|
||||
'main_material',
|
||||
'service_category',
|
||||
'fluid_group',
|
||||
'date_test',
|
||||
'test_result',
|
||||
'piping_class',
|
||||
'design_temperature_s',
|
||||
'rt_scope',
|
||||
'ut_scope',
|
||||
'pt_scope',
|
||||
'mt_scope',
|
||||
'pmi_scope',
|
||||
'design_pressure_mpa',
|
||||
'operating_temperature_s',
|
||||
'operating_pressure_mpa',
|
||||
'painting_cycle',
|
||||
'external_finish_type',
|
||||
'pwht_date',
|
||||
'no_of_pwht_report',
|
||||
'diagram_number_pwht',
|
||||
'test_laboratory_pwht',
|
||||
'vt_scope',
|
||||
'vt_result',
|
||||
'ferrite_scope',
|
||||
'ndt_percent',
|
||||
'vt_report',
|
||||
'vt_request_date',
|
||||
'test_laboratory_vt',
|
||||
'vt_result',
|
||||
'rt_scope',
|
||||
'rt_request_no',
|
||||
'rt_request_date',
|
||||
'rt_report',
|
||||
'rt_test_date',
|
||||
'test_laboratory_rt',
|
||||
'rt_result',
|
||||
'ut_scope',
|
||||
'ut_request_no',
|
||||
'ut_type',
|
||||
'ut_request_date',
|
||||
'ut_report',
|
||||
'ut_test_date',
|
||||
'test_laboratory_ut',
|
||||
'ut_result',
|
||||
'pt_scope',
|
||||
'pt_request_no',
|
||||
'pt_request_date',
|
||||
'pt_report',
|
||||
'pt_test_date',
|
||||
'test_laboratory_pt',
|
||||
'pt_result',
|
||||
'mt_scope',
|
||||
'mt_request_no',
|
||||
'mt_report',
|
||||
'mt_test_date',
|
||||
'test_laboratory_mt',
|
||||
'mt_result',
|
||||
'pmi_scope',
|
||||
'pmi_request_no',
|
||||
'pmi_request_date',
|
||||
'no_of_testing_report',
|
||||
'pmi_test_date',
|
||||
'test_laboratory_pmi',
|
||||
'pmi_result',
|
||||
'pwht',
|
||||
'pwht_date',
|
||||
'ht_scope',
|
||||
'ht_request_no',
|
||||
'no_of_ht_hardnes_test',
|
||||
'ht_request_date',
|
||||
'test_laboratory_ht',
|
||||
'ht_result',
|
||||
'ferrite_scope',
|
||||
'ferrite_request_no',
|
||||
'no_of_ferrite_check',
|
||||
'date_of_ferrite_check',
|
||||
'test_laboratory_ferrite',
|
||||
'test_package_no',
|
||||
'test_pressure',
|
||||
'type_of_test',
|
||||
'date_test',
|
||||
'test_result',
|
||||
'ferrite_result',
|
||||
'real_welder_1',
|
||||
'real_welder_2',
|
||||
'ste_subcontractor',
|
||||
|
||||
];
|
||||
|
||||
|
||||
|
||||
$columns = ['id'];
|
||||
|
||||
foreach($blockGroup AS $group => $cols) {
|
||||
foreach($cols AS $col) {
|
||||
$columns[] = $col;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Ensure alwaysSelectColumns are included
|
||||
if(isset($alwaysSelectColumns) && is_array($alwaysSelectColumns)) {
|
||||
foreach($alwaysSelectColumns as $forcedColumn) {
|
||||
if(!in_array($forcedColumn, $columns)) {
|
||||
$columns[] = $forcedColumn;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Joint Release Log için özel sorgu - deleted joints bilgilerini de çek
|
||||
// KRİTİK KURAL: Joint Release = (is_welded=1 olanlar) + (silinmiş ama welded olanlar)
|
||||
if(isset($id) && $id == "joint-release-log") {
|
||||
// Welded joint tiplerini al (joint_types tablosundan is_welded=1 olanlar)
|
||||
$weldedJointTypes = get_welded_joint_types();
|
||||
|
||||
// is_deleted ve deleted_comment'i columns'dan çıkar (gerçek sütunlar değil)
|
||||
$columnsForQuery = array_filter($columns, function($col) {
|
||||
return $col !== 'is_deleted' && $col !== 'deleted_comment';
|
||||
});
|
||||
|
||||
// Sütunları weld_logs prefix'i ile belirt
|
||||
$weldLogsColumns = array_map(function($col) {
|
||||
if(strpos($col, '.') !== false) {
|
||||
return $col;
|
||||
}
|
||||
return 'weld_logs.' . $col;
|
||||
}, $columnsForQuery);
|
||||
|
||||
// Sütunları deleted_joints prefix'i ile belirt (UNION için)
|
||||
$deletedJointsColumns = array_map(function($col) {
|
||||
if(strpos($col, '.') !== false) {
|
||||
return str_replace('weld_logs.', 'deleted_joints.', $col);
|
||||
}
|
||||
return 'deleted_joints.' . $col;
|
||||
}, $columnsForQuery);
|
||||
|
||||
// Release alanları — bu kolonlar joint_releases tablosundan okunmalı
|
||||
$releaseFields = [
|
||||
'joint_release_rfi_no', 'joint_release_rfi_date', 'joint_release_document_no', 'joint_release_document_date',
|
||||
'rt_release_rfi_no', 'rt_release_rfi_date', 'ut_release_rfi_no', 'ut_release_rfi_date',
|
||||
'pt_release_rfi_no', 'pt_release_rfi_date', 'mt_release_rfi_no', 'mt_release_rfi_date',
|
||||
'pmi_release_rfi_no', 'pmi_release_rfi_date', 'vt_release_rfi_no', 'vt_release_rfi_date',
|
||||
'pwht_release_rfi_no', 'pwht_release_rfi_date', 'ht_release_rfi_no', 'ht_release_rfi_date',
|
||||
'ferrite_release_rfi_no', 'ferrite_release_rfi_date',
|
||||
];
|
||||
|
||||
// weld_logs sütunları: release alanları jr. prefix'i ile, diğerleri weld_logs. prefix'i ile
|
||||
$weldLogsSelectColumns = array_map(function($col) use ($releaseFields) {
|
||||
$bare = strpos($col, '.') !== false ? substr($col, strrpos($col, '.') + 1) : $col;
|
||||
if (in_array($bare, $releaseFields)) {
|
||||
return 'jr.' . $bare;
|
||||
}
|
||||
return $col;
|
||||
}, $weldLogsColumns);
|
||||
|
||||
// deleted_joints sütunları: release alanları jr2. prefix'i ile, diğerleri deleted_joints. prefix'i ile
|
||||
$deletedJointsSelectColumns = array_map(function($col) use ($releaseFields) {
|
||||
$bare = strpos($col, '.') !== false ? substr($col, strrpos($col, '.') + 1) : $col;
|
||||
if (in_array($bare, $releaseFields)) {
|
||||
return 'jr2.' . $bare;
|
||||
}
|
||||
return $col;
|
||||
}, $deletedJointsColumns);
|
||||
|
||||
// Query 1: weld_logs'tan sadece welded joint tipleri + joint_releases JOIN
|
||||
$weldLogsQuery = WeldLog::select(
|
||||
array_merge($weldLogsSelectColumns, [
|
||||
'deleted_joints.comment as deleted_comment',
|
||||
'deleted_joints.deleted_date',
|
||||
DB::raw('0 as is_deleted'),
|
||||
DB::raw("'weld_logs' as source_table")
|
||||
])
|
||||
)
|
||||
->leftJoin('deleted_joints', function($join) {
|
||||
$join->on('weld_logs.iso_number', '=', 'deleted_joints.iso_number')
|
||||
->on('weld_logs.no_of_the_joint_as_per_as_built_survey', '=', 'deleted_joints.no_of_the_joint_as_per_as_built_survey');
|
||||
})
|
||||
->leftJoin('joint_releases as jr', 'weld_logs.id', '=', 'jr.weld_log_id')
|
||||
->whereIn('weld_logs.type_of_welds', $weldedJointTypes);
|
||||
|
||||
// Query 2: deleted_joints'ten kayıtlar (welded + welding_date dolu + weld_logs'ta karşılığı OLMAYAN) + joint_releases JOIN
|
||||
$deletedJointsQuery = DB::table('deleted_joints')
|
||||
->select(
|
||||
array_merge($deletedJointsSelectColumns, [
|
||||
'deleted_joints.comment as deleted_comment',
|
||||
'deleted_joints.deleted_date',
|
||||
DB::raw('1 as is_deleted'),
|
||||
DB::raw("'deleted_joints' as source_table")
|
||||
])
|
||||
)
|
||||
->leftJoin('joint_releases as jr2', 'deleted_joints.id', '=', 'jr2.deleted_joint_id')
|
||||
->whereIn('deleted_joints.type_of_welds', $weldedJointTypes)
|
||||
->whereNotNull('deleted_joints.welding_date')
|
||||
->whereNotExists(function($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('weld_logs')
|
||||
->whereColumn('weld_logs.iso_number', 'deleted_joints.iso_number')
|
||||
->whereColumn('weld_logs.no_of_the_joint_as_per_as_built_survey', 'deleted_joints.no_of_the_joint_as_per_as_built_survey');
|
||||
});
|
||||
|
||||
// UNION ile birleştir
|
||||
$listDatas = $weldLogsQuery->unionAll($deletedJointsQuery)
|
||||
->orderBy("id","DESC")
|
||||
->paginate(setting('row_count'));
|
||||
} else {
|
||||
$listDatas = WeldLog::select($columns)->orderBy("id","DESC")->paginate(setting('row_count'));
|
||||
}
|
||||
|
||||
$u = u();
|
||||
$steSubcontractor = db("subcontractors");
|
||||
$steSubcontractor2 = db("subcontractors");
|
||||
|
||||
if($u->subcontructer != "Stellar") {
|
||||
$steSubcontractor2 = $steSubcontractor2->where("company_name_en", $u->subcontructer);
|
||||
$steSubcontractor = $steSubcontractor->where("company_name_en", $u->subcontructer);
|
||||
}
|
||||
$steSubcontractor2 = $steSubcontractor2->get();
|
||||
$mainContractor = db("subcontractors")
|
||||
->where("operation_type","Main Contractor")
|
||||
->get();
|
||||
$generalContractor = db("subcontractors")
|
||||
->whereIn("job_description",['Employer', 'Engineering'])
|
||||
->get();
|
||||
|
||||
$steContractorMontaj = db("subcontractors")
|
||||
->whereIn("job_description",['Montaj'])
|
||||
->get();
|
||||
|
||||
$steSubcontractor = $steSubcontractor->get();
|
||||
$wps = db("w_p_s")->get();
|
||||
$weldingMethods = db("welding_methods")->get();
|
||||
$naksConsumables = db("naks_consumables")->get();
|
||||
$naksConsumablesProduct = db("naks_consumables")->select("product_name")->groupBy("product_name")->get();
|
||||
$naksConsumablesFluxGas = db("naks_consumables")
|
||||
->select('product_name')
|
||||
->whereIn('type_of_consumable', ['Flux / Флюсы', 'Gas / Газ'])
|
||||
->groupBy('product_name')
|
||||
->get();
|
||||
$mtos = db("m_t_o_s")->groupBy("component_code_id")->get();
|
||||
$materials = db("materials")->select("steel_grade")->groupBy("steel_grade")->get();
|
||||
$incomingControls = db("incoming_controls")->get();
|
||||
$steelGradeToRuGroup = db("materials")->get()->pluck("ru_group","steel_grade")->toArray();
|
||||
$typeOfWeldOptions = db('joint_types')
|
||||
->select('short_name_en')
|
||||
->whereNotNull('short_name_en')
|
||||
->orderBy('short_name_en')
|
||||
->get();
|
||||
|
||||
if($typeOfWeldOptions->isEmpty()) {
|
||||
$fallbackTypes = ['BW','FW','SW','TW','BJ','FJ','TH','CJ'];
|
||||
$typeOfWeldOptions = collect($fallbackTypes)->map(function($shortName) {
|
||||
return (object) ['short_name_en' => $shortName];
|
||||
});
|
||||
}
|
||||
$realWelders1 = db("weld_logs")->select("welder_1")->groupBy("welder_1")->whereNotNull("welder_1")->get()->toArray();
|
||||
$realWelders2 = db("weld_logs")->select("welder_2")->groupBy("welder_2")->whereNotNull("welder_2")->get()->toArray();
|
||||
|
||||
$relationDatas = [
|
||||
'ut_type' => [
|
||||
'type' => 'auto-complete2',
|
||||
'table' => 'u_t_types',
|
||||
'column' => 'ut_type_title',
|
||||
'pattern' => '{ut_type_title}',
|
||||
'affected' => [
|
||||
],
|
||||
],
|
||||
'piping_type' => [
|
||||
'values' => db("piping_types")->get()->pluck("title")->toArray(),
|
||||
'type' => 'manuel-select'
|
||||
],
|
||||
/*
|
||||
'real_welder_1' => [
|
||||
'datas' => $realWelders1,
|
||||
'pattern' => '{welder_1}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
'real_welder_2' => [
|
||||
'datas' => $realWelders2,
|
||||
'pattern' => '{welder_2}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
*/
|
||||
'ste_subcontractor' => [
|
||||
'datas' => $steContractorMontaj,
|
||||
'pattern' => '{company_name_en}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
'contractor' => [
|
||||
'datas' => $mainContractor,
|
||||
'pattern' => '{company_name_en}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
'general_contractor' => [
|
||||
'datas' => $generalContractor,
|
||||
'pattern' => '{company_name_en}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
/*
|
||||
'welding_materials_1_certificate_no' => [
|
||||
'datas' => $naksConsumables,
|
||||
'pattern' => '{inspection_test_report}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
|
||||
'welding_materials_2_certificate_no' => [
|
||||
'datas' => $naksConsumables,
|
||||
'pattern' => '{inspection_test_report}',
|
||||
'type' => 'select-dropdown',
|
||||
|
||||
],
|
||||
'welding_materials_3_certificate_no' => [
|
||||
'datas' => db("naks_consumables")
|
||||
->select('product_name')
|
||||
->whereIn('type_of_consumable', ['Electrode / Электрод', 'Gas / Газ'])
|
||||
->groupBy('product_name')
|
||||
->get(),
|
||||
'pattern' => '{product_name}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
|
||||
'welding_materials_1_lot_no' => [
|
||||
'datas' => $naksConsumables,
|
||||
'pattern' => '{batch_number}',
|
||||
'type' => 'select-dropdown',
|
||||
|
||||
],
|
||||
'welding_materials_2_lot_no' => [
|
||||
'datas' => $naksConsumables,
|
||||
'pattern' => '{batch_number}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
'welding_materials_3_lot_no' => [
|
||||
'datas' => $naksConsumables,
|
||||
'pattern' => '{batch_number}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'element_code_1' => [
|
||||
'type' => 'auto-complete2',
|
||||
'table' => 'm_t_o_s',
|
||||
'column' => 'component_code_id',
|
||||
'pattern' => '{component_code_id}',
|
||||
'affected' => [
|
||||
'member_no_1' => '{description_ru}',
|
||||
'material_no_1' => '{material}',
|
||||
]
|
||||
],
|
||||
'element_code_2' => [
|
||||
'type' => 'auto-complete2',
|
||||
'table' => 'm_t_o_s',
|
||||
'column' => 'component_code_id',
|
||||
'pattern' => '{component_code_id}',
|
||||
'affected' => [
|
||||
'member_no_2' => '{description_ru}',
|
||||
'material_no_2' => '{material}',
|
||||
]
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'welder_1' => [
|
||||
'datas' => db("welder_tests")->groupBy("naks_id")->get(),
|
||||
'pattern' => '[{naks_id}] {name_surname}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'welder_2' => [
|
||||
'datas' => db("welder_tests")->groupBy("naks_id")->get(),
|
||||
'pattern' => '[{naks_id}] {name_surname}',
|
||||
'type' => 'select-dropdown'
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'welder_1' => [
|
||||
'type' => 'auto-complete2',
|
||||
'table' => 'welder_tests',
|
||||
'column' => 'name_surname',
|
||||
'pattern' => '[{naks_no}] {name_surname}',
|
||||
'affected' => []
|
||||
|
||||
],
|
||||
'welder_2' => [
|
||||
'type' => 'auto-complete2',
|
||||
'table' => 'welder_tests',
|
||||
'column' => 'name_surname',
|
||||
'pattern' => '[{naks_no}] {name_surname}',
|
||||
'affected' => []
|
||||
|
||||
],
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
'element_code_1' => [
|
||||
'type' => 'select-dropdown2',
|
||||
'datas' => $mtos,
|
||||
'pattern' => '{component_code_id}',
|
||||
'affected' => [
|
||||
'member_no_1' => '{description_ru}',
|
||||
'material_no_1' => '{material}',
|
||||
]
|
||||
],
|
||||
'element_code_2' => [
|
||||
'type' => 'select-dropdown2',
|
||||
'datas' => $mtos,
|
||||
'pattern' => '{component_code_id}',
|
||||
'affected' => [
|
||||
'member_no_2' => '{description_ru}',
|
||||
'material_no_2' => '{material}',
|
||||
]
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'element_code_2' => [
|
||||
'type' => 'auto-complete',
|
||||
'table' => 'm_t_o_s',
|
||||
'column' => 'component_code_id',
|
||||
'affected' => [
|
||||
'member_no_2' => '{description_ru}',
|
||||
'material_no_2' => '{material}',
|
||||
]
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'element_code_1' => [
|
||||
'table' => 'm_t_o_s',
|
||||
'column' => 'component_code_id',
|
||||
'pattern' => '{component_code_id}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
'member_no_1' => '{description_ru}',
|
||||
'material_no_1' => '{material}',
|
||||
]
|
||||
],
|
||||
'element_code_2' => [
|
||||
'datas' => $mtos,
|
||||
'pattern' => '{component_code_id}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
'member_no_2' => '{description_ru}',
|
||||
'material_no_2' => '{material}',
|
||||
]
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'wps_no' => [
|
||||
'datas' => $wps,
|
||||
'pattern' => '{details}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
'wps_approval_date' => '{date}',
|
||||
'welding_method' => '{welding_process}',
|
||||
]
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'welding_materials_1' => [
|
||||
'datas' => $naksConsumablesProduct,
|
||||
'pattern' => '{product_name}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
|
||||
],
|
||||
'filter-columns' => ['welding_materials_1_lot_no','welding_materials_1_certificate_no'],
|
||||
],
|
||||
'welding_materials_2' => [
|
||||
'datas' => $naksConsumablesProduct,
|
||||
'pattern' => '{product_name}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
|
||||
],
|
||||
'filter-columns' => ['welding_materials_1_lot_no','welding_materials_1_certificate_no'],
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'ru_material_group_1' => [
|
||||
'datas' => $materials,
|
||||
'pattern' => '{steel_grade}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
]
|
||||
],
|
||||
'ru_material_group_2' => [
|
||||
'datas' => $materials,
|
||||
'pattern' => '{steel_grade}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
]
|
||||
],
|
||||
*/
|
||||
/*
|
||||
'certificate_number_of_1' => [
|
||||
'datas' => $incomingControls,
|
||||
'pattern' => '{component_code}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
]
|
||||
],
|
||||
'certificate_number_of_2' => [
|
||||
'datas' => $incomingControls,
|
||||
'pattern' => '{component_code}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
]
|
||||
],
|
||||
'heat_number_1' => [
|
||||
'datas' => $incomingControls,
|
||||
'pattern' => '{heat_number}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
]
|
||||
],
|
||||
'heat_number_2' => [
|
||||
'datas' => $incomingControls,
|
||||
'pattern' => '{heat_number}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
]
|
||||
],
|
||||
*/
|
||||
'welding_materials_3' => [
|
||||
'datas' => $naksConsumablesFluxGas,
|
||||
'pattern' => '{product_name}',
|
||||
'type' => 'select-dropdown',
|
||||
'affected' => [
|
||||
|
||||
],
|
||||
'filter-columns' => ['welding_materials_1_lot_no','welding_materials_1_certificate_no'],
|
||||
],
|
||||
'line_number' => [
|
||||
'type' => 'auto-complete2',
|
||||
'table' => 'line_lists',
|
||||
'column' => 'line_no',
|
||||
'pattern' => '{line_no}',
|
||||
'affected' => [
|
||||
'design_temperature_s' => '{design_temperature}',
|
||||
'service_category' => '{category}',
|
||||
'piping_class' => '{category} + {fluid_code}',
|
||||
'main_nps' => '{design_temperature}',
|
||||
'design_pressure_mpa' => '{design_pressure_mpa}',
|
||||
'operating_pressure_mpa' => '{working_pressure_mpa}',
|
||||
'painting_cycle' => '{painting_cycle}',
|
||||
'external_finish_type' => '{external_finish_type}',
|
||||
'operating_temperature_s' => '{working_temperature}',
|
||||
'ndt_percent' => '{ndt}',
|
||||
'fluid_code' => '{fluid_code}',
|
||||
],
|
||||
],
|
||||
'type_of_welds' => [
|
||||
'type' => 'select-dropdown',
|
||||
'datas' => $typeOfWeldOptions,
|
||||
'pattern' => '{short_name_en}',
|
||||
],
|
||||
'type_of_joint' => [
|
||||
'values' => [
|
||||
'F',
|
||||
'S',
|
||||
],
|
||||
'type' => 'manuel-select'
|
||||
],
|
||||
'nde' => [
|
||||
'caption' => 'ISO NDT',
|
||||
'type' => 'string'
|
||||
],
|
||||
|
||||
'pdf_engineering' => [
|
||||
'type' => 'link-search',
|
||||
'path' => '001_Drawings/001_Engineering/',
|
||||
'pattern' => "*{iso_number}*.pdf",
|
||||
'html' => '<i class="fa fa-pdf"></i>'
|
||||
],
|
||||
|
||||
'pdf_spool_iso' => [
|
||||
'type' => 'link-search',
|
||||
'path' => '001_Drawings/002_Iso/',
|
||||
'pattern' => "*{iso_number}*.pdf",
|
||||
'html' => '<i class="fa fa-pdf"></i>'
|
||||
],
|
||||
|
||||
|
||||
'pdf_as_build' => [
|
||||
'type' => 'link-search',
|
||||
'path' => '001_Drawings/003_As_Build(ID)/',
|
||||
'pattern' => "*{iso_number}*.pdf",
|
||||
'html' => '<i class="fa fa-pdf"></i>'
|
||||
],
|
||||
/*
|
||||
'pwht' => [
|
||||
'values' => [
|
||||
'YES',
|
||||
'NO',
|
||||
],
|
||||
'caption' => 'ISO PWHT',
|
||||
'type' => 'manuel-select'
|
||||
],
|
||||
*/
|
||||
|
||||
|
||||
|
||||
];
|
||||
|
||||
if($id == "weldlog") {
|
||||
unset($relationDatas['type_of_joint']);
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
const steelGradeToRuGroup = {!! json_encode_tr($steelGradeToRuGroup) !!};
|
||||
</script>
|
||||
<script>
|
||||
$(function(){
|
||||
/*
|
||||
|
||||
$(".wps_no .dropdown-item").on("click", function() {
|
||||
var dataGroup = $(this).attr("data-group");
|
||||
var dataGroupParent = $("." + dataGroup);
|
||||
var json = JSON.parse($(this).attr("data-filter-value"));
|
||||
var filler_metals_sfa_no = json.filler_metals_sfa_no.split(" + ");
|
||||
|
||||
dataGroupParent.find('.welding_materials_1 > input').val(filler_metals_sfa_no[0]);
|
||||
dataGroupParent.find('.welding_materials_1_lot_no [data-filter-value]').addClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_1_lot_no [data-filter-value*="'+filler_metals_sfa_no[0]+'"]').removeClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_1_certificate_no [data-filter-value]').addClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_1_certificate_no [data-filter-value*="'+filler_metals_sfa_no[0]+'"]').removeClass("d-none");
|
||||
|
||||
dataGroupParent.find('.welding_materials_2 > input').val(filler_metals_sfa_no[1]).attr("readonly","readonly");
|
||||
dataGroupParent.find('.welding_materials_2_lot_no [data-filter-value]').addClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_2_lot_no [data-filter-value*="'+filler_metals_sfa_no[1]+'"]').removeClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_2_certificate_no [data-filter-value]').addClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_2_certificate_no [data-filter-value*="'+filler_metals_sfa_no[1]+'"]').removeClass("d-none");
|
||||
|
||||
dataGroupParent.find('.welding_materials_3 > input').val(filler_metals_sfa_no[2]).attr("readonly","readonly");
|
||||
dataGroupParent.find('.welding_materials_3_lot_no [data-filter-value]').addClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_3_lot_no [data-filter-value*="'+filler_metals_sfa_no[2]+'"]').removeClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_3_certificate_no [data-filter-value]').addClass("d-none");
|
||||
dataGroupParent.find('.welding_materials_3_certificate_no [data-filter-value*="'+filler_metals_sfa_no[2]+'"]').removeClass("d-none");
|
||||
});
|
||||
|
||||
$(".element_code_1 .dropdown-item").on("click", function() {
|
||||
var dataGroup = $(this).attr("data-group");
|
||||
var dataGroupParent = $("." + dataGroup);
|
||||
var json = JSON.parse($(this).attr("data-filter-value"));
|
||||
var steelGrade = json.material;//dataGroupParent.find(".ru_material_group_1").val();
|
||||
// console.log(steelGrade);
|
||||
// console.log(steelGradeToRuGroup[steelGrade]);
|
||||
dataGroupParent.find(".ru_material_group_1").val(steelGradeToRuGroup[steelGrade]);
|
||||
});
|
||||
|
||||
$(".element_code_2 .dropdown-item").on("click", function() {
|
||||
var dataGroup = $(this).attr("data-group");
|
||||
var dataGroupParent = $("." + dataGroup);
|
||||
var json = JSON.parse($(this).attr("data-filter-value"));
|
||||
var steelGrade = json.material;//dataGroupParent.find(".ru_material_group_1").val();
|
||||
// console.log(steelGrade);
|
||||
// console.log(steelGradeToRuGroup[steelGrade]);
|
||||
dataGroupParent.find(".ru_material_group_2").val(steelGradeToRuGroup[steelGrade]);
|
||||
});
|
||||
|
||||
$(".nps_1").on("blur", function() {
|
||||
var dataGroup = $(this).attr("data-group");
|
||||
var dataGroupParent = $("." + dataGroup);
|
||||
var element_code_1 = dataGroupParent.find(".element_code_1").val();
|
||||
var thickness_by_asme_1 = dataGroupParent.find(".thickness_by_asme_1");
|
||||
var outside_diameter_1 = dataGroupParent.find(".outside_diameter_1");
|
||||
var wall_thickness_1 = dataGroupParent.find(".wall_thickness_1");
|
||||
var nps_1 = $(this).val();
|
||||
$.getJSON("{{url("admin/detail/m_t_o_s/component_code_id")}}",{
|
||||
value : element_code_1
|
||||
}, function(d) {
|
||||
console.log(d);
|
||||
if(d.dia_inch_1 == nps_1) {
|
||||
thickness_by_asme_1.val(d.thicknessmm_1).attr("readonly","readonly");
|
||||
outside_diameter_1.val(d.odmm_1).attr("readonly","readonly");
|
||||
wall_thickness_1.val(d.schedule_1).attr("readonly","readonly");
|
||||
}
|
||||
if(d.diainch_2 == nps_1) {
|
||||
thickness_by_asme_1.val(d.thicknessmm_2).attr("readonly","readonly");
|
||||
outside_diameter_1.val(d.odmm_2).attr("readonly","readonly");
|
||||
wall_thickness_1.val(d.schedule_2).attr("readonly","readonly");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".nps_2").on("blur", function() {
|
||||
var dataGroup = $(this).attr("data-group");
|
||||
var dataGroupParent = $("." + dataGroup);
|
||||
var element_code_1 = dataGroupParent.find(".element_code_2").val();
|
||||
var thickness_by_asme_1 = dataGroupParent.find(".thickness_by_asme_2");
|
||||
var outside_diameter_1 = dataGroupParent.find(".outside_diameter_2");
|
||||
var wall_thickness_1 = dataGroupParent.find(".wall_thickness_2");
|
||||
var nps_1 = $(this).val();
|
||||
$.getJSON("{{url("admin/detail/m_t_o_s/component_code_id")}}",{
|
||||
value : element_code_1
|
||||
}, function(d) {
|
||||
console.log(d);
|
||||
if(d.dia_inch_1 == nps_1) {
|
||||
thickness_by_asme_1.val(d.thicknessmm_1).attr("readonly","readonly");
|
||||
outside_diameter_1.val(d.odmm_1).attr("readonly","readonly");
|
||||
wall_thickness_1.val(d.schedule_1).attr("readonly","readonly");
|
||||
}
|
||||
if(d.diainch_2 == nps_1) {
|
||||
thickness_by_asme_1.val(d.thicknessmm_2).attr("readonly","readonly");
|
||||
outside_diameter_1.val(d.odmm_2).attr("readonly","readonly");
|
||||
wall_thickness_1.val(d.schedule_2).attr("readonly","readonly");
|
||||
}
|
||||
});
|
||||
});
|
||||
*/
|
||||
|
||||
$(".upload-pdf").on("click", function() {
|
||||
$("#uploadModal").modal();
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
@include("admin.type.weldmap.datagrid-script")
|
||||
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<?php
|
||||
if($id != "spool-area-release") {
|
||||
/*
|
||||
$prependColumns = [
|
||||
'pdf_engineering' => [
|
||||
'type' => 'link-search2',
|
||||
'path' => '001_Drawings/001_Engineering/',
|
||||
'pattern' => "*{iso_number}*.pdf",
|
||||
'html' => '<i class="fa fa-pdf"></i>'
|
||||
],
|
||||
|
||||
'pdf_spool_iso' => [
|
||||
'type' => 'link-search2',
|
||||
'path' => '001_Drawings/002_Iso/',
|
||||
'pattern' => "*{iso_number}*.pdf",
|
||||
'html' => '<i class="fa fa-pdf"></i>'
|
||||
],
|
||||
},
|
||||
|
||||
'pdf_as_build' => [
|
||||
'type' => 'link-search',
|
||||
'path' => '001_Drawings/003_As_Build(ID)/',
|
||||
'pattern' => "*{iso_number}*.pdf",
|
||||
'html' => '<i class="fa fa-pdf"></i>'
|
||||
],
|
||||
|
||||
];
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
if(getisset("upload-pdf")) {
|
||||
uploadDocument("iso", "001_Drawings/002_Iso");
|
||||
uploadDocument("engineer", "001_Drawings/001_Engineering");
|
||||
uploadDocument("asbuild", "001_Drawings/003_As_Build(ID)");
|
||||
?>
|
||||
<div class="col-12">
|
||||
{{bilgi("Upload has been success!")}}
|
||||
</div>
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
}
|
||||
|
||||
$isoPermissions = j(setting('weld_log_iso_upload_permission')) ?? [];
|
||||
$engineerPermissions = j(setting('engineer_upload_permission')) ?? [];
|
||||
$asBuildPermissions = j(setting('as_build_upload_permission')) ?? [];
|
||||
$isIsoUpload = false;
|
||||
$isEngineerUpload = false;
|
||||
$isAsBuildUpload = false;
|
||||
|
||||
if(is_array($isoPermissions) && in_array($u->level, $isoPermissions)) {
|
||||
$isIsoUpload = true;
|
||||
}
|
||||
if(is_array($engineerPermissions) && in_array($u->level, $engineerPermissions)) {
|
||||
$isEngineerUpload = true;
|
||||
}
|
||||
if(is_array($asBuildPermissions) && in_array($u->level, $asBuildPermissions)) {
|
||||
$isAsBuildUpload = true;
|
||||
}
|
||||
|
||||
if($isIsoUpload) {
|
||||
$firstUploadFolder = '001_Drawings/002_Iso/';
|
||||
$firstUploadTitle = 'Upload ISO PDF';
|
||||
}
|
||||
|
||||
if($isEngineerUpload) {
|
||||
$secondUploadFolder = '001_Drawings/001_Engineering/';
|
||||
$secondUploadTitle = 'Upload Engineer PDF';
|
||||
}
|
||||
|
||||
if($isAsBuildUpload) {
|
||||
$thirdUploadFolder = '001_Drawings/003_As_Build(ID)/';
|
||||
$thirdUploadTitle = 'Upload As Build PDF';
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@if($id == "base-weldmap" || $id == "weldmap")
|
||||
@include("admin.type.document.upload")
|
||||
@endif
|
||||
@include("components.blocks.module-block")
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@include("admin.type.weldmap.upload-modal")
|
||||
@include("components.incoming-control-popup")
|
||||
@@ -1,32 +0,0 @@
|
||||
<div class="modal" id="uploadModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
|
||||
<!-- Modal Header -->
|
||||
<form action="?upload-pdf" enctype="multipart/form-data" method="post">
|
||||
@csrf
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">{{e2("Upload PDF")}}</h4>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
</div>
|
||||
|
||||
<!-- Modal body -->
|
||||
<div class="modal-body">
|
||||
|
||||
{{e2("PDF Engineering")}}
|
||||
<input type="file" name="engineer" accept="application/pdf" id="" class="form-control">
|
||||
{{e2("PDF Spool ISO")}}
|
||||
<input type="file" name="iso" accept="application/pdf" id="" class="form-control">
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Modal footer -->
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-primary">{{e2("Upload")}}</button>
|
||||
<button type="button" class="btn btn-outline-danger" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,241 +0,0 @@
|
||||
<script>
|
||||
function editorPreparing(e, dataRow) {
|
||||
var options = e.editorOptions;
|
||||
var rowIndex = e.row.rowIndex;
|
||||
var rowData = e.row.data;
|
||||
var dataGrid = $("#dataGrid").dxDataGrid("instance");
|
||||
var exceptValue = ['undefined', 'null'];
|
||||
var column = e.dataField;
|
||||
var urlRowData = encodeURIComponent(JSON.stringify(rowData));
|
||||
//console.log(JSON.parse(urlRowData));
|
||||
if(e.dataField == "details") {
|
||||
e.editorName = 'dxTextBox';
|
||||
e.editorOptions.mask = '{{number_mask("WPS")}}';
|
||||
e.editorOptions.useMaskedValue = true;
|
||||
e.editorOptions.width = 500;
|
||||
}
|
||||
if(e.dataField.indexOf("date") !== -1) {
|
||||
e.editorName = 'dxDateBox';
|
||||
e.editorOptions.useMaskBehavior = true;
|
||||
}
|
||||
|
||||
if(e.dataField == "material_type_grade") {
|
||||
e.editorName = "dxTagBox";
|
||||
console.log("dxTagBox");
|
||||
console.log(e.value);
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
dataSource: '{{autocomplete_type("material_type_grade")}}?row=' + urlRowData,
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
},
|
||||
onFocusOut(focusEvent) {
|
||||
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
|
||||
|
||||
}
|
||||
if(e.dataField == "material_type_grade2") {
|
||||
e.editorName = "dxTagBox";
|
||||
console.log("dxTagBox");
|
||||
console.log(e.value);
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
dataSource: '{{autocomplete_type("material_type_grade")}}?row=' + urlRowData,
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
},
|
||||
onFocusOut(focusEvent) {
|
||||
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(e.dataField == "russian_standard_group_no_1") {
|
||||
e.editorName = "dxTagBox";
|
||||
console.log("dxTagBox");
|
||||
console.log(e.value);
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
dataSource: '{{autocomplete_type("russian_standard_group_no_1")}}?row=' + urlRowData,
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
},
|
||||
onFocusOut(focusEvent) {
|
||||
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(e.dataField == "russian_standard_group_no_2") {
|
||||
e.editorName = "dxTagBox";
|
||||
console.log("dxTagBox");
|
||||
console.log(e.value);
|
||||
e.editorOptions = {
|
||||
showSelectionControls: true,
|
||||
maxDisplayedTags: 2,
|
||||
showMultiTagOnly: false,
|
||||
applyValueMode: 'instantly',
|
||||
searchEnabled: true,
|
||||
dataSource: '{{autocomplete_type("russian_standard_group_no_1")}}?row=' + urlRowData,
|
||||
onValueChanged(valueEvent) {
|
||||
e.setValue(valueEvent.value.join(","));
|
||||
},
|
||||
onFocusOut(focusEvent) {
|
||||
|
||||
}
|
||||
};
|
||||
e.editorOptions.value = e.value != null ? e.value.split(",") : [];
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(e.dataField == "date") {
|
||||
e.validationRules[0].type = "async";
|
||||
}
|
||||
|
||||
if(e.row.data.work_type == "PIPE") {
|
||||
//console.log("hesaplama var");
|
||||
|
||||
if(e.dataField == "approved_date") {
|
||||
e.editorOptions.min = rowData.date;
|
||||
}
|
||||
|
||||
if(e.dataField == "min_outside_diameter") {
|
||||
e.validationRules[0].type = "async";
|
||||
}
|
||||
|
||||
if(e.dataField == "max_outside_diameter") {
|
||||
e.validationRules[0].type = "async";
|
||||
}
|
||||
|
||||
if(e.dataField == "min_thick") {
|
||||
e.validationRules[0].type = "async";
|
||||
}
|
||||
|
||||
if(e.dataField == "max_thick") {
|
||||
e.validationRules[0].type = "async";
|
||||
}
|
||||
} else {
|
||||
//console.log("hesaplama yok");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(e.dataField == "pqr_no") {
|
||||
e.editorName = "dxSelectBox";
|
||||
e.editorOptions.searchEnabled = true;
|
||||
e.editorOptions.acceptCustomValue = true;
|
||||
|
||||
e.editorOptions.dataSource = <?php echo json_encode_tr(db("prosedure_qualification_records")
|
||||
->select("pqr_no")
|
||||
->get()
|
||||
->pluck("pqr_no")
|
||||
); ?>
|
||||
/*
|
||||
new DevExpress.data.ODataStore({
|
||||
url: '{{autocomplete_url2("prosedure_qualification_records","pqr_no")}}',
|
||||
});
|
||||
*/
|
||||
e.editorOptions.width= 200;
|
||||
|
||||
options.onFocusOut = function(focusData) {
|
||||
}
|
||||
options.onValueChanged = function(selectData) {
|
||||
e.setValue(selectData.value);
|
||||
$.getJSON("{{row_detail_url("prosedure_qualification_records","pqr_no")}}?value=" + selectData.value, function(responseJSON) {
|
||||
|
||||
if(responseJSON.pre_heating_min == '') {
|
||||
responseJSON.pre_heating_min = 0;
|
||||
}
|
||||
|
||||
if(responseJSON.inter_pass_max == '') {
|
||||
responseJSON.inter_pass_max = 0;
|
||||
}
|
||||
|
||||
if(responseJSON.pwht_temp_range == '') {
|
||||
responseJSON.pwht_temp_range = 0;
|
||||
}
|
||||
|
||||
if(typeof responseJSON.pqr_no !== 'undefined') {
|
||||
localStorage.setItem("min_thick" + rowIndex, responseJSON.thickness_min);
|
||||
localStorage.setItem("max_thick" + rowIndex, responseJSON.thickness_max);
|
||||
localStorage.setItem("min_outside_diameter" + rowIndex, responseJSON.qualitication_outside_diameter_min);
|
||||
localStorage.setItem("max_outside_diameter" + rowIndex, responseJSON.qualitication_outside_diameter_max);
|
||||
|
||||
$.getJSON("{{autocomplete_type("joint_type")}}?row=" + urlRowData, function(responseJSON) {
|
||||
dataGrid.cellValue(rowIndex, "joint_type_definition", responseJSON.definition_en);
|
||||
});
|
||||
<?php
|
||||
$affectedCols = [
|
||||
'russian_standard_group_no_1' => '{responseJSON.russian_standart_group_no}',
|
||||
'russian_standard_group_no_2' => '{responseJSON.russian_standart_group_no_2}',
|
||||
'p_no_from' => '{responseJSON.p_no_from}',
|
||||
'p_no_to' => '{responseJSON.p_no_to}',
|
||||
'filler_metals_sfa_no' => '{responseJSON.brend}',
|
||||
'filler_metals_gost' => '{responseJSON.filter_metals_gost}',
|
||||
'pre_heating_min' => '{responseJSON.pre_heating_min}',
|
||||
'inter_pass_max' => '{responseJSON.inter_pass_max}',
|
||||
'pwht_temp_range' => '{responseJSON.pwht_temp_range}',
|
||||
'pwht_min_time' => '{responseJSON.pwht_min_time}',
|
||||
'shielding_gas' => '{responseJSON.shielding_gas}',
|
||||
'backing_gas' => '{responseJSON.backing_gas}',
|
||||
'current_polarity' => '{responseJSON.current_polarity}',
|
||||
'work_type' => '{responseJSON.work_type}',
|
||||
'joint_type' => '{responseJSON.joint_design}',
|
||||
'naks_certificate_no' => '{responseJSON.naks_technology}',
|
||||
'technology_category' => '{responseJSON.technology_category}',
|
||||
'work_type' => '{responseJSON.base_metal}',
|
||||
'welding_process' => '{responseJSON.welding_process}',
|
||||
'min_outside_diameter' => '{responseJSON.qualitication_outside_diameter_min}',
|
||||
'max_outside_diameter' => '{responseJSON.qualitication_outside_diameter_max}',
|
||||
'min_thick' => '{responseJSON.thickness_min}',
|
||||
'max_thick' => '{responseJSON.thickness_max}',
|
||||
];
|
||||
|
||||
|
||||
|
||||
foreach($affectedCols AS $affectedCol => $valueCol) {
|
||||
|
||||
$valueCol = str_replace('{', '${', $valueCol);
|
||||
|
||||
?>
|
||||
|
||||
if(!exceptValue.includes(`{{$valueCol}}`)) {
|
||||
dataGrid.cellValue(rowIndex, "{{$affectedCol}}", `{{$valueCol}}`);
|
||||
}
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user