Uname: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

403WebShell
403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/rentals_updated/wp-content/plugins/operators/admin-logsheet.php
<?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">&times;</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">&times;</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">&times;</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');

?>

Youez - 2016 - github.com/yon3zu
LinuXploit