feat: implement AdminController for CMS management and AppServiceProvider for application bootstrapping

This commit is contained in:
Ümit Tunç
2026-04-28 23:12:07 +03:00
parent 382469d16c
commit c510b18f42
151 changed files with 5 additions and 20197 deletions
@@ -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 &amp; 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">&times;</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>