| Server IP : 13.126.101.145 / Your IP : 216.73.217.50 Web Server : Apache/2.4.52 (Ubuntu) System : Linux ip-11-115-0-196 6.8.0-1039-aws #41~22.04.1-Ubuntu SMP Thu Sep 11 10:54:48 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 8.3.17 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/rentals_updated/wp-content/plugins/operators/ |
Upload File : |
<?php
// Ensure the file is not accessed directly
if (!defined('ABSPATH')) {
exit;
}
function create_log_files_data_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'log_files_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) NOT NULL,
customer_id INT(11) NOT NULL,
contract_id VARCHAR(255) NOT NULL,
log_url VARCHAR(255) NOT NULL,
working_hours DECIMAL(5,2) DEFAULT 0.00,
log_user_remarks TEXT,
log_approve_status VARCHAR(20) DEFAULT 'Pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
add_action('after_setup_theme', 'create_log_files_data_table');
// Add admin menu
add_action('admin_menu', 'logsheet_admin_menu');
function logsheet_admin_menu() {
add_menu_page(
'Log Sheet', // Page title
'Log Sheet', // Menu title
'manage_options', // Capability
'logsheet-dashboard', // Menu slug
'logsheet_list',// Callback function
'dashicons-media-spreadsheet', // Icon URL
6 // Position
);
// Add a submenu page
add_submenu_page(
'logsheet-dashboard', // The slug name for the parent menu
'Create Log Sheet', // The text to be displayed in the title tags of the page when the submenu is selected
'Create Log Sheet', // The text to be used for the submenu
'manage_options', // The capability required for this menu to be displayed to the user
'create_logsheet', // The slug name to refer to this submenu
'create_logsheet' // The function to be called to output the content for this page
);
/* add_submenu_page(null, //parent slug
'Delete Operator', //page title
'Delete', //menu title
'manage_options', //capability
'delete-operator', //menu slug
'delete_operator'); //function */
}
function logsheet_enqueue_custom_styles_and_scripts($hook) {
// Load only on the logsheet dashboard page
if ($hook !== 'toplevel_page_logsheet-dashboard' && $hook != 'log-sheet_page_create_logsheet') {
return;
}
// Enqueue Bootstrap CSS
wp_enqueue_style('bootstrap-css', 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css');
// Enqueue DataTables CSS
wp_enqueue_style('datatables-css', 'https://cdn.datatables.net/1.10.24/css/jquery.dataTables.min.css');
// Enqueue Font Awesome CSS
wp_enqueue_style('fontawesome-css', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css');
// Enqueue your custom CSS
wp_enqueue_style('rfq-custom-styles', plugin_dir_url(__FILE__) . 'css/custom-style.css');
// Enqueue jQuery and DataTables JS
wp_enqueue_script('jquery');
wp_enqueue_script('datatables-js', 'https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js', array('jquery'), '1.10.24', true);
// Enqueue Bootstrap JS and your custom JS
wp_enqueue_script('bootstrap-js', 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js', array('jquery'), '4.5.2', true);
wp_enqueue_script('rfq-custom-scripts', plugin_dir_url(__FILE__) . 'js/custom-script.js', array('jquery'), '1.0', true);
// wp_enqueue_script('logsheet-scripts', plugin_dir_url(__FILE__) . 'js/logsheet-scripts.js', array('jquery'), '1.0', true);
wp_localize_script('logsheet-scripts', 'logsheet_ajax', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('ba_file_upload')
));
}
add_action('admin_enqueue_scripts', 'logsheet_enqueue_custom_styles_and_scripts');
function logsheet_list() {
// Enable error reporting
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
try {
global $wpdb;
// Get all operators
$args = array(
'role' => 'operator',
'orderby' => 'ID',
'order' => 'DESC'
);
$operators = get_users($args);
?>
<div class="wrap rfq-wrap">
<h1 class="wp-heading-inline mb-2 font-weight-bold">Log Sheet</h1>
<div class="table-responsive">
<table id="logsheet-table" class="table display pb-30 dataTable table-data">
<thead style="background-color:#FFBD2B;">
<tr>
<th scope="row" class="manage-column">Sr. No</th>
<th scope="col" class="manage-column">Log Date</th>
<th scope="col" class="manage-column">RMS Contract ID</th>
<th scope="col" class="manage-column">SAP Contract ID</th>
<th scope="col" class="manage-column">Operator Name</th>
<th scope="col" class="manage-column">Employee ID</th>
<th scope="col" class="manage-column">Customer Name</th>
<th scope="col" class="manage-column">Equipment Name</th>
<th scope="col" class="manage-column">Start Time</th>
<th scope="col" class="manage-column">End Time</th>
<th scope="col" class="manage-column">Shift</th>
<th scope="col" class="manage-column">Working Hour</th>
<th scope="col" class="manage-column">Start SMU</th>
<th scope="col" class="manage-column">End SMU</th>
<th scope="col" class="manage-column">Breakdown</th>
<th scope="col" class="manage-column">Image</th>
<th scope="col" class="manage-column">BA Upload</th>
<th scope="col" class="manage-column">Working Hours</th>
<th scope="col" class="manage-column">Status</th>
<th scope="col" class="manage-column">Remarks</th>
<th scope="col" class="manage-column">Actions</th>
</tr>
</thead>
<tbody>
<?php
$i = 1;
foreach ($operators as $operator) {
$user_info = get_userdata($operator->ID);
$contract_id = get_user_meta($operator->ID, 'contract_id', true);
$emp_id = get_user_meta($operator->ID, 'Operator_id', true);
// Only display if contract_id is not null or empty
if (!empty($contract_id)) {
$user_name = $user_info->first_name;
// Fetch order details only if the order ID is valid
if ($contract_id) {
// Get the customer name (from order customer ID)
$order = wc_get_order($contract_id);
if ($order) {
$customer_id = $order->get_user_id();
$customer_name = $customer_id ? get_userdata($customer_id)->first_name : 'NA';
// Get the product name (from order items)
$items = $order->get_items();
$product_name = 'NA'; // Default value
if (!empty($items)) {
$product = wc_get_product(reset($items)->get_product_id());
if ($product) { // Ensure the product exists before calling get_name()
$product_name = $product->get_name();
}
}
} else {
$customer_name = 'NA';
$product_name = 'NA';
}
} else {
$customer_name = 'NA';
$product_name = 'NA';
}
// Get the latest logsheet entry for this operator
$logsheet_table = $wpdb->prefix . 'logsheet';
$latest_log = $wpdb->get_row($wpdb->prepare(
"SELECT * FROM $logsheet_table WHERE operator_id = %d ORDER BY log_date DESC, id DESC LIMIT 1",
$operator->ID
));
// Get log_files_data
$log_files_table = $wpdb->prefix . 'log_files_data';
$log_files_data = $wpdb->get_row($wpdb->prepare(
"SELECT * FROM $log_files_table WHERE user_id = %d AND contract_id = %d ORDER BY id DESC LIMIT 1",
$operator->ID, $contract_id
));
?>
<tr>
<td><?php echo $i; ?></td>
<td>
<?php
if ($latest_log && !empty($latest_log->log_date)) {
echo esc_attr($latest_log->log_date);
} else {
echo 'No Date';
}
?>
</td>
<td><?php echo esc_html($contract_id); ?></td>
<td><?php if ($order) {
echo esc_html($order->get_meta('contract_id'));
} else {
echo 'NA';
} ?></td>
<td><?php echo esc_html($user_name); ?></td>
<td><?php echo esc_html($emp_id);?></td>
<td><?php echo esc_html($customer_name); ?></td>
<td><?php echo esc_html($product_name); ?></td>
<td><?php if ($latest_log && !empty($latest_log->start_time)) {echo esc_attr($latest_log->start_time);} else {echo 'No fuel';}?></td>
<td><?php if ($latest_log && !empty($latest_log->end_time)) {echo esc_attr($latest_log->end_time);} else {echo 'NA';}?></td>
<td><?php if ($latest_log && !empty($latest_log->shift)) {echo esc_attr($latest_log->shift);} else {echo 'NA';}?></td>
<td><?php if ($latest_log && !empty($latest_log->working_hour)) {echo esc_attr($latest_log->working_hour);} else {echo 'NA';}?></td>
<td><?php if ($latest_log && !empty($latest_log->start_smu)) {echo esc_attr($latest_log->start_smu);} else {echo 'NA';}?></td>
<td><?php if ($latest_log && !empty($latest_log->end_smu)) {echo esc_attr($latest_log->end_smu);} else {echo 'NA';}?></td>
<td><?php if ($latest_log && !empty($latest_log->breakdown)) {echo esc_attr($latest_log->breakdown);} else {echo 'NA';}?></td>
<td>
<?php
if ($latest_log) {
$attachment_table = $wpdb->prefix . 'logs_attachment_docs';
$attachments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $attachment_table WHERE log_id = %d", $latest_log->id));
if (!empty($attachments)) {
// Use first attachment from attachment table
$first_image = $attachments[0]->attachment;
echo "<img src='" . esc_url(home_url('/wp-content/uploads/operator-logs-attachments/' . $first_image)) . "' width='50' height='50' class='log-image hello' data-toggle='modal' data-target='#imageModal" . esc_attr($latest_log->id) . "' style='cursor: pointer;'>";
} else {
// Fallback to images from same table if available
if (!empty($latest_log->images)) {
$image_urls = explode(',', $latest_log->images);
$first_image = trim($image_urls[0]);
echo "<img src='" . esc_url($first_image) . "' width='50' height='50' class='log-image hie' data-toggle='modal' data-target='#imageModal" . esc_attr($latest_log->id) . "' style='cursor: pointer;'>";
} else {
echo "No image";
}
}
} else {
echo "Not Uploaded";
}
?>
</td>
<td>
<input type="file" name="ba_file" accept=".pdf,.doc,.docx" class="ba-file-input" >
<?php if ($log_files_data && $log_files_data->log_url): ?>
<a href="<?php echo esc_url($log_files_data->log_url); ?>" target="_blank">View File</a>
<?php endif; ?>
</td>
<td>
<input type="number" name="working_hours" class="working-hours-input" value="<?php echo esc_attr($log_files_data ? $log_files_data->working_hours : ''); ?>" min="0" onkeydown="return event.keyCode !== 189" step="0.5">
</td>
<td>
<?php echo esc_html($log_files_data ? $log_files_data->log_approve_status : ''); ?>
</td>
<td>
<?php echo esc_html($log_files_data ? $log_files_data->log_user_remarks : ''); ?>
</td>
<td>
<button type="button" class="btn btn-primary export-pdf-btn" data-operator-id="<?php echo esc_attr($operator->ID); ?>">Operator Log</button>
<button type="button" class="btn btn-primary order-log-btn" data-order-id="<?php echo esc_attr($contract_id); ?>">Contract Log</button>
<button type="button" class="btn btn-primary update-log-btn" data-operator-id="<?php echo esc_attr($operator->ID); ?>" data-contract-id="<?php echo esc_attr($contract_id); ?>">Send to Customer</button>
</td>
</tr>
<?php if ($latest_log && !empty($attachments)) : ?>
<!-- Image Gallery Modal -->
<div class="modal fade" id="imageModal<?php echo esc_attr($latest_log->id); ?>" tabindex="-1" role="dialog" aria-labelledby="imageModalLabel<?php echo esc_attr($latest_log->id); ?>" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="imageModalLabel<?php echo esc_attr($latest_log->id); ?>">Logsheet Images</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<?php
foreach ($attachments as $attachment) {
echo "<div class='col-md-4 mb-3'>";
echo "<img src='" . esc_url(home_url('/wp-content/uploads/operator-logs-attachments/' . $attachment->attachment)) . "' class='img-fluid' alt='Logsheet Image'>";
echo "</div>";
}
?>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
<?php
$i++;
} // end if contract_id check
} // end foreach
?>
</tbody>
</table>
</div>
</div>
<!-- Date Range Picker Modal -->
<div class="modal fade" id="dateRangeModal" tabindex="-1" role="dialog" aria-labelledby="dateRangeModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="dateRangeModalLabel">Select Date Range</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form id="dateRangeForm">
<div class="form-group">
<label for="startDate">Start Date:</label>
<input type="date" class="form-control" id="startDate" required>
</div>
<div class="form-group">
<label for="endDate">End Date:</label>
<input type="date" class="form-control" id="endDate" required>
</div>
<input type="hidden" id="operatorId" value="">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="downloadPdfBtn">Download PDF</button>
</div>
</div>
</div>
</div>
<!-- Order Log Date Range Modal -->
<div class="modal fade" id="orderDateRangeModal" tabindex="-1" role="dialog" aria-labelledby="orderDateRangeModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="orderDateRangeModalLabel">Select Date Range for Order Log</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form id="orderDateRangeForm">
<div class="form-group">
<label for="orderStartDate">Start Date:</label>
<input type="date" class="form-control" id="orderStartDate" required>
</div>
<div class="form-group">
<label for="orderEndDate">End Date:</label>
<input type="date" class="form-control" id="orderEndDate" required>
</div>
<input type="hidden" id="orderId" value="">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="downloadOrderPdfBtn">Download PDF</button>
</div>
</div>
</div>
</div>
<script>
// jQuery(document).ready(function($) {
// // Initialize DataTable
// $('#logsheet-table').DataTable({
// "scrollX": true,
// });
// // Handle click on "Export As PDF" button
// $('.export-pdf-btn').on('click', function() {
// var operatorId = $(this).data('operator-id');
// $('#operatorId').val(operatorId);
// $('#dateRangeModal').modal('show');
// });
// // Handle click on "Download PDF" button
// $('#downloadPdfBtn').on('click', function() {
// generatePDF();
// });
// // Handle BA file upload
// $('.ba-upload-form').on('submit', function(e) {
// e.preventDefault();
// var formData = new FormData(this);
// formData.append('action', 'upload_ba_file');
// formData.append('security', logsheet_ajax.nonce); // Add this line
// $.ajax({
// url: logsheet_ajax.ajaxurl,
// type: 'POST',
// data: formData,
// contentType: false,
// processData: false,
// success: function(response) {
// if (response.success) {
// alert(response.data.message);
// // Update the UI to show the uploaded file if needed
// } else {
// alert(response.data.message);
// }
// },
// error: function() {
// alert('Error uploading file. Please try again.');
// }
// });
// });
// $('.update-log-btn').on('click', function() {
// var row = $(this).closest('tr');
// var operatorId = $(this).data('operator-id');
// var contractId = $(this).data('contract-id');
// var workingHours = row.find('.working-hours-input').val();
// var status = row.find('.log-approve-status').val();
// var fileInput = row.find('.ba-file-input')[0];
// var formData = new FormData();
// formData.append('action', 'update_log_data');
// formData.append('operator_id', operatorId);
// formData.append('contract_id', contractId);
// formData.append('working_hours', workingHours);
// formData.append('status', status);
// if (fileInput.files.length > 0) {
// formData.append('ba_file', fileInput.files[0]);
// }
// $.ajax({
// url: ajaxurl,
// type: 'POST',
// data: formData,
// contentType: false,
// processData: false,
// success: function(response) {
// if (response.success) {
// alert(response.data.message);
// if (response.data.file_url) {
// row.find('.ba-file-input').after('<a href="' + response.data.file_url + '" target="_blank">View File</a>');
// }
// } else {
// alert(response.data.message);
// }
// },
// error: function() {
// alert('Error updating log. Please try again.');
// }
// });
// });
// function generatePDF() {
// var operatorId = $('#operatorId').val();
// var startDate = $('#startDate').val();
// var endDate = $('#endDate').val();
// if (!startDate || !endDate) {
// alert('Please select both start and end dates.');
// return;
// }
// var dataToPass = {
// user_id: operatorId,
// start_date: startDate,
// end_date: endDate
// };
// // Build query string from dataToPass object
// var queryString = Object.keys(dataToPass).map(function(key) {
// return encodeURIComponent(key) + '=' + encodeURIComponent(dataToPass[key]);
// }).join('&');
// window.open('<?php echo esc_url(plugin_dir_url(__FILE__) . 'logsheet.php'); ?>' + '?' + queryString, '_blank');
// $('#dateRangeModal').modal('hide');
// }
// // Handle click on "Order Log" button
// $('.order-log-btn').on('click', function() {
// var orderId = $(this).data('order-id');
// $('#orderId').val(orderId);
// $('#orderDateRangeModal').modal('show');
// });
// // Handle click on "Download PDF" button for order log
// $('#downloadOrderPdfBtn').on('click', function() {
// generateOrderPDF();
// });
// // This new function for generating Order PDF
// function generateOrderPDF() {
// var orderId = $('#orderId').val();
// var startDate = $('#orderStartDate').val();
// var endDate = $('#orderEndDate').val();
// if (!startDate || !endDate) {
// alert('Please select both start and end dates.');
// return;
// }
// var dataToPass = {
// order_id: orderId,
// start_date: startDate,
// end_date: endDate,
// type: 'order' // Add this to differentiate from operator logs
// };
// // Build query string from dataToPass object
// var queryString = Object.keys(dataToPass).map(function(key) {
// return encodeURIComponent(key) + '=' + encodeURIComponent(dataToPass[key]);
// }).join('&');
// window.open('<?php echo esc_url(plugin_dir_url(__FILE__) . 'logsheet.php'); ?>' + '?' + queryString, '_blank');
// $('#orderDateRangeModal').modal('hide');
// }
// });
jQuery(document).ready(function($) {
// Initialize DataTable
var table = $('#logsheet-table').DataTable({
"scrollX": true
});
// Use event delegation for "Export As PDF" button
$('#logsheet-table').on('click', '.export-pdf-btn', function() {
var operatorId = $(this).data('operator-id');
$('#operatorId').val(operatorId);
$('#dateRangeModal').modal('show');
});
// Use event delegation for "Order Log" button
$('#logsheet-table').on('click', '.order-log-btn', function() {
var orderId = $(this).data('order-id');
$('#orderId').val(orderId);
$('#orderDateRangeModal').modal('show');
});
// Use event delegation for "Send to Customer" button
$('#logsheet-table').on('click', '.update-log-btn', function() {
var row = $(this).closest('tr');
var operatorId = $(this).data('operator-id');
var contractId = $(this).data('contract-id');
var workingHours = row.find('.working-hours-input').val();
var fileInput = row.find('.ba-file-input')[0];
var formData = new FormData();
formData.append('action', 'update_log_data');
formData.append('operator_id', operatorId);
formData.append('contract_id', contractId);
formData.append('working_hours', workingHours);
formData.append('status', 'Pending');
formData.append('nonce', '<?php echo wp_create_nonce('update_log_data'); ?>');
if (fileInput.files.length > 0) {
formData.append('ba_file', fileInput.files[0]);
}
$.ajax({
url: ajaxurl,
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function(response) {
if (response.success) {
alert(response.data.message);
if (response.data.file_url) {
row.find('.ba-file-input').after('<a href="' + response.data.file_url + '" target="_blank">View File</a>');
}
} else {
alert(response.data.message);
}
},
error: function() {
alert('Error updating log. Please try again.');
}
});
});
// Handle click on "Download PDF" button for operator log
$('#downloadPdfBtn').on('click', function() {
generatePDF();
});
// Handle click on "Download PDF" button for order log
$('#downloadOrderPdfBtn').on('click', function() {
generateOrderPDF();
});
function generatePDF() {
var operatorId = $('#operatorId').val();
var startDate = $('#startDate').val();
var endDate = $('#endDate').val();
if (!startDate || !endDate) {
alert('Please select both start and end dates.');
return;
}
var dataToPass = {
user_id: operatorId,
start_date: startDate,
end_date: endDate
};
var queryString = Object.keys(dataToPass).map(function(key) {
return encodeURIComponent(key) + '=' + encodeURIComponent(dataToPass[key]);
}).join('&');
window.open('<?php echo esc_url(plugin_dir_url(__FILE__) . 'logsheet.php'); ?>?' + queryString, '_blank');
$('#dateRangeModal').modal('hide');
}
function generateOrderPDF() {
var orderId = $('#orderId').val();
var startDate = $('#orderStartDate').val();
var endDate = $('#orderEndDate').val();
if (!startDate || !endDate) {
alert('Please select both start and end dates.');
return;
}
var dataToPass = {
order_id: orderId,
start_date: startDate,
end_date: endDate,
type: 'order'
};
var queryString = Object.keys(dataToPass).map(function(key) {
return encodeURIComponent(key) + '=' + encodeURIComponent(dataToPass[key]);
}).join('&');
window.open('<?php echo esc_url(plugin_dir_url(__FILE__) . 'logsheet.php'); ?>?' + queryString, '_blank');
$('#orderDateRangeModal').modal('hide');
}
});
</script>
<?php
} catch (Exception $e) {
// Log the error
error_log('Error in logsheet_list function: ' . $e->getMessage());
// Display an error message to the user
echo '<div class="error"><p>An error occurred while loading the log sheet. Please try again later or contact the administrator.</p></div>';
}
}
// AJAX handler for log data update
add_action('wp_ajax_update_log_data', 'handle_log_update');
function handle_log_update() {
global $wpdb;
if (!check_ajax_referer('update_log_data', 'nonce', false)) {
wp_send_json_error(['message' => 'Security check failed']);
return;
}
if (!isset($_POST['operator_id']) || !isset($_POST['contract_id']) || !isset($_POST['working_hours']) || !isset($_POST['status'])) {
wp_send_json_error(['message' => 'Missing required data']);
}
$operator_id = intval($_POST['operator_id']);
$contract_id = intval($_POST['contract_id']);
$order = wc_get_order($contract_id);
$customer_id = $order->get_customer_id();
$working_hours = floatval($_POST['working_hours']);
// $status = sanitize_text_field($_POST['status']);
$status ='Pending';
$log_files_table = $wpdb->prefix . 'log_files_data';
$data = array(
'working_hours' => $working_hours,
'customer_id' => $customer_id,
'updated_at' => current_time('mysql')
);
$file_url = '';
if (isset($_FILES['ba_file'])) {
$file = $_FILES['ba_file'];
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['path'] . '/Log-sheet-files/' . date('Y-m-d');
wp_mkdir_p($upload_path);
$filename = wp_unique_filename($upload_path, $file['name']);
$file_path = $upload_path . '/' . $filename;
if (move_uploaded_file($file['tmp_name'], $file_path)) {
$file_url = $upload_dir['url'] . '/Log-sheet-files/' . date('Y-m-d') . '/' . $filename;
$data['log_url'] = $file_url;
} else {
wp_send_json_error(['message' => 'Failed to upload file. Please try again.']);
return;
}
}
$existing_row = $wpdb->get_row($wpdb->prepare(
"SELECT * FROM $log_files_table WHERE user_id = %d AND contract_id = %d",
$operator_id,
$contract_id
));
if ($existing_row) {
$result = $wpdb->update(
$log_files_table,
$data,
array('user_id' => $operator_id, 'contract_id' => $contract_id),
array('%f', '%s', '%s', '%s', '%s'),
array('%d', '%d')
);
} else {
$data['user_id'] = $operator_id;
$data['contract_id'] = $contract_id;
$data['customer_id'] = $customer_id;
$data['created_at'] = current_time('mysql');
$result = $wpdb->insert($log_files_table, $data, array('%d', '%d', '%f', '%s', '%s', '%s', '%s', '%s'));
}
if ($result === false) {
wp_send_json_error(['message' => 'Failed to update log data. Please try again.']);
} else {
wp_send_json_success([
'message' => 'Log data Sent successfully to Customer.',
'file_url' => $file_url
]);
}
}
function create_logsheet(){
global $wpdb;
if(isset($_POST['createlogs'])!=''){
$table_name = $wpdb->prefix . "logsheet";
$user_id = get_current_user_id();
$productId = get_user_meta($user_id, 'machine_associated', true);
$equipment_number = get_post_meta($productId, 'equipment_number', true);
$model_number = get_post_meta($productId, 'model_number', true);
$machine_serial_no = get_post_meta($productId, 'machine_serialno', true);
$registration_number = get_post_meta($productId, 'registration_number', true);
$log_date = $_POST['log_date'];
$start_time = $_POST['start_time'];
$end_time = $_POST['end_time'];
$shift = $_POST['shift'];
$working_hour = $_POST['working_hour'];
$down_hour = $_POST['down_hour'];
$result_check = $wpdb->insert($table_name, [
"equipment_id" => $productId,
"equipment_no" => $equipment_number,
"model_no" => $model_number,
"machine_serial_no" => $machine_serial_no,
"registration_no" => $registration_number,
"operator_id" => $user_id,
"log_date" => $log_date,
"start_time" => $start_time,
"end_time" => $end_time,
"shift" => $shift,
"working_hour" => $working_hour,
"down_hour" => $down_hour,
"log_created_on" => date('Y-m-d H:i:s'),
]);
if($result_check){
//successfully inserted.
echo "<p>Log Sheet Created Successfully</p>";
}else{
//something gone wrong
echo "<p>Error Occurs</p>";
}
}
?>
<div class="wrap">
<div class="row">
<div class="col-md-12">
<h3>Equipment Rental Logsheet</h3>
<form method="post" name="createoperator" id="createuser" class="form" enctype="multipart/form-data">
<table id="logsheet-table" class="table table-striped table-bordered">
<thead class="thead-dark">
<tr>
<th scope="row" class="manage-column">Log Date</th>
<th scope="col" class="manage-column">Shift</th>
<th scope="col" class="manage-column">Start Time</th>
<th scope="col" class="manage-column">End Time</th>
<th scope="col" class="manage-column">Working Hour</th>
<th scope="col" class="manage-column">Breakdown / Operator Absence</th>
<th scope="col" class="manage-column">Fuel</th>
<th scope="col" class="manage-column">Work Hours in Vision Link</th>
<th scope="col" class="manage-column">Actions</th>
</tr>
</thead>
<tbody>
<?php
$start_date = '2024-07-08';
$end_date = '2024-11-10';
// Create DateTime objects for start and end dates
$start = new DateTime($start_date);
$end = new DateTime($end_date);
// Create a DateInterval of one day
$interval = new DateInterval('P1D');
// Create a DatePeriod with the start date, interval, and end date
$period = new DatePeriod($start, $interval, $end->modify('+1 day')); // modify to include end date
$i = 1;
foreach ($period as $date) {
?>
<tr>
<td>
<input type="text" name="log_date" id="log_date" value="<?php echo $date->format('Y-m-d');?>" class="form-control" readonly>
</td>
<td>
<select name="shift" id="shift" class="form-control" readonly>
<option value="">Select</option>
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
</td>
<td>
<select name="start_time[]" id="start_time<?php echo $i;?>" class="start_time form-control" readonly></select>
</td>
<td>
<select name="end_time[]" id="end_time<?php echo $i;?>" class="end_time form-control" readonly>
<option value="00:00">12:00 AM</option>
</select>
</td>
<td>
<input type="text" class="form-control" name="work_hour" id="work_hour<?php echo $i;?>" value="8" readonly>
</td>
<td>
<input type="text" class="form-control" value="0" readonly>
</td>
<td>
<input type="text" class="form-control" value="1234" readonly>
</td>
<td>
<input type="text" class="form-control" value="1234" readonly>
</td>
<td>
<input type="submit" class="btn btn-primary" value="Save">
</td>
</tr>
<script>
jQuery(document).ready(function($) {
function generateTimeOptions(interval) {
let times = [];
let start = new Date(0, 0, 0, 0, 0);
let end = new Date(0, 0, 0, 23, 59);
while (start <= end) {
let hours = start.getHours();
let minutes = start.getMinutes();
let timeValue = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes);
let timeDisplay = (hours % 12 || 12) + ":" + (minutes < 10 ? "0" + minutes : minutes) + (hours < 12 ? " AM" : " PM");
times.push({ value: timeValue, display: timeDisplay });
start.setMinutes(start.getMinutes() + interval);
}
return times;
}
function populateStartDropdown() {
let timeOptions = generateTimeOptions(30);
let startDropdown = jQuery('#start_time<?php echo $i;?>');
$.each(timeOptions, function(index, time) {
startDropdown.append(jQuery('<option>', {
value: time.value,
text: time.display
}));
});
}
function updateEndDropdown(selectedStartTime) {
let timeOptions = generateTimeOptions(30);
let endDropdown = $('#end_time<?php echo $i;?>');
endDropdown.empty();
let startTime = new Date('1970-01-01T' + selectedStartTime + 'Z');
jQuery.each(timeOptions, function(index, time) {
let endTime = new Date('1970-01-01T' + time.value + 'Z');
if (endTime > startTime) {
endDropdown.append($('<option>', {
value: time.value,
text: time.display
}));
}
});
}
populateStartDropdown();
jQuery('#start_time<?php echo $i;?>').on('change', function() {
let selectedStartTime = jQuery(this).val();
updateEndDropdown(selectedStartTime);
});
jQuery('#start_time<?php echo $i;?>').on('change', function() {
// Get the values from the date inputs
let startDate = jQuery('#startDate').val();
let endDate = jQuery('#endDate').val();
// Convert the date strings to Date objects
let start = new Date(startDate);
let end = new Date(endDate);
/* // Check if the dates are valid
if (isNaN(start) || isNaN(end)) {
alert('Please enter valid dates.');
return;
} */
// Calculate the difference in time
let timeDiff = end - start;
// Calculate the difference in days
let dayDiff = timeDiff / (1000 * 3600 * 24);
// Display the difference in the text box
jQuery('#work_hour<?php echo $i;?>').val(dayDiff);
});
});
</script>
<?php
$i++;
}
?>
</tbody>
</table>
</form>
</div>
</div>
</div>
<?php
}
//Function to trigger notification
function LogsheetUploadNotification() {
if (is_user_logged_in()) {
global $wpdb;
$user_id = get_current_user_id();
// Query to check if the user got Logsheet for approval
$log_upload = $wpdb->get_row(
$wpdb->prepare(
"SELECT id, log_approve_status
FROM wp_log_files_data
WHERE user_id = %d AND log_approve_status = 'Pending'
ORDER BY updated_at DESC
LIMIT 1",
$user_id
)
);
if ($log_upload ) {
echo '<div class="woocommerce-info">Logsheet Uploaded <a href="' . esc_url(home_url('/my-account/log-approval')) . '" class="button wc-forward" style="display: inline-block; background-color:#000;color:#ffbd2b;padding:5px 10px;border-radius:5px;font-size:13px;">
View Logsheet
</a></div>';
} else {
echo '<div class="woocommerce-info"> No pending logsheet for approval</div>';
}
}
}
add_action('woocommerce_account_notification_endpoint', 'LogsheetUploadNotification');
?>