« Back to History
jobwork_issue_receive.php
|
20260723_000646.php
Initial Domain Snapshot
Copy Code
<?php ob_start(); require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('gray_receive_entry'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; $success = isset($_GET['success']); $last_date = $_GET['last_date'] ?? ''; $inserted_id = $_GET['id'] ?? ''; // ===== AJAX ENDPOINT: FETCH JOBWORK ISSUE DETAILS BY CHALLAN NO ===== if (isset($_GET['action']) && $_GET['action'] === 'get_issue_details') { header('Content-Type: application/json'); $challan_no = trim($_GET['challan_no'] ?? ''); try { $stmt = $pdo->prepare(" SELECT jwi.id AS job_work_issue_id, jwi.gray_id, jwi.meter AS issue_meter, jwi.taka AS issue_taka, jwp.party_name, jwt.type_name, m.mill_name, q.quality_name FROM job_work_issue jwi LEFT JOIN job_work_party_master jwp ON jwi.job_worker_id = jwp.id LEFT JOIN jobwork_types jwt ON jwi.process_type_id = jwt.id LEFT JOIN gray_receive gr ON jwi.gray_id = gr.gray_id AND gr.company_id = jwi.company_id LEFT JOIN mill_master m ON gr.mill_id = m.id LEFT JOIN fabric_quality_master q ON gr.quality_id = q.id WHERE jwi.company_id = :cid AND jwi.challan_no = :challan LIMIT 1 "); $stmt->execute([':cid' => $company_id, ':challan' => $challan_no]); $details = $stmt->fetch(PDO::FETCH_ASSOC); if ($details) { echo json_encode(['success' => true, 'data' => $details]); } else { echo json_encode(['success' => false, 'message' => 'Issue Challan Number not found!']); } } catch (Exception $e) { echo json_encode(['success' => false, 'message' => 'Database error']); } exit(); } // ===== POST PROCESSING ===== if ($_SERVER['REQUEST_METHOD'] === 'POST') { $raw_date = $_POST['receive_date'] ?? ''; $d = DateTime::createFromFormat('d-m-Y', $raw_date); $receive_date = $d ? $d->format('Y-m-d') : date('Y-m-d'); try { $pdo->beginTransaction(); $stmt = $pdo->prepare(" INSERT INTO job_work_receive (company_id, job_work_issue_id, gray_id, meter, taka, receive_date, receive_challan_no, vehicle_no, remarks) VALUES (:cid, :job_work_issue_id, :gray_id, :meter, :taka, :receive_date, :receive_challan_no, :vehicle_no, :remarks) "); $stmt->execute([ ':cid' => $company_id, ':job_work_issue_id' => $_POST['job_work_issue_id'], ':gray_id' => $_POST['gray_id'], ':meter' => $_POST['meter'], ':taka' => $_POST['taka'], ':receive_date' => $receive_date, ':receive_challan_no' => $_POST['receive_challan_no'], ':vehicle_no' => $_POST['vehicle_no'], ':remarks' => $_POST['remarks'] ?? '' ]); $receive_id = $pdo->lastInsertId(); if (file_exists(__DIR__ . '/helpers/activity_helper.php')) { require_once __DIR__ . '/helpers/activity_helper.php'; log_activity([ 'activity_type' => 'entry', 'module_name' => 'job_work_receive', 'action_name' => 'receive_save', 'activity_note' => "Issue ID: {$_POST['job_work_issue_id']}, Gray ID: {$_POST['gray_id']}, Rec Meter: {$_POST['meter']}, Rec Taka: {$_POST['taka']}, Challan: {$_POST['receive_challan_no']}", 'reference_id' => $receive_id, ]); } $pdo->commit(); header("Location: jobwork_issue_receive.php?success=1&id=$receive_id&last_date=" . urlencode($raw_date)); exit(); } catch (Exception $e) { if ($pdo->inTransaction()) $pdo->rollBack(); die("System Error: " . $e->getMessage()); } } require_once __DIR__ . '/partials/header.php'; ?> <div class="container-fluid mt-3"> <div class="card p-3 shadow-sm border-0"> <div class="d-flex justify-content-between align-items-center mb-3"> <h5 class="m-0 text-primary fw-bold">Jobwork Receive Entry</h5> </div> <?php if($success): ?> <div class="alert alert-success alert-dismissible fade show border-0 shadow-sm py-2"> <strong>Success!</strong> Jobwork Receive Saved Entry ID: <?= htmlspecialchars($inserted_id) ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <form method="POST" id="receiveForm" autocomplete="off"> <!-- Hidden inputs needed for insertion --> <input type="hidden" id="job_work_issue_id" name="job_work_issue_id" required> <input type="hidden" id="gray_id" name="gray_id" required> <!-- SECTION 1: Issue Challan Lookup & Reference Details --> <div class="bg-light p-3 rounded mb-3 border border-light-subtle"> <div class="row g-3 align-items-end"> <div class="col-md-3"> <label class="form-label small fw-bold text-danger">Enter Issue Challan No</label> <div class="input-group"> <input type="text" id="issue_challan_no" class="form-control fw-bold border-danger text-uppercase" required> <button type="button" id="btnFetchIssue" class="btn btn-danger fw-bold">FETCH</button> </div> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-secondary">Gray ID</label> <input type="text" id="disp_gray_id" class="form-control text-muted fw-bold text-center" readonly disabled> </div> <div class="col-md-3"> <label class="form-label small fw-bold text-secondary">Mill Name</label> <input type="text" id="disp_mill" class="form-control text-muted" readonly disabled> </div> <div class="col-md-4"> <label class="form-label small fw-bold text-secondary">Quality</label> <input type="text" id="disp_quality" class="form-control text-muted" readonly disabled> </div> <div class="col-md-4"> <label class="form-label small fw-bold text-secondary">Job Worker Party</label> <input type="text" id="disp_worker" class="form-control text-muted" readonly disabled> </div> <div class="col-md-4"> <label class="form-label small fw-bold text-secondary">Process Type</label> <input type="text" id="disp_process" class="form-control text-muted" readonly disabled> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-secondary">Issued Meter</label> <input type="text" id="disp_issue_meter" class="form-control text-muted fw-bold" readonly disabled> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-secondary">Issued Taka</label> <input type="text" id="disp_issue_taka" class="form-control text-muted fw-bold text-center" readonly disabled> </div> </div> </div> <!-- SECTION 2: Receive Details Entry --> <div class="row g-3"> <div class="col-md-2"> <label class="form-label small fw-bold">Receive Date</label> <input type="text" id="receive_date" name="receive_date" class="form-control" value="<?= htmlspecialchars($last_date) ?>" required> </div> <div class="col-md-2"> <label class="form-label small fw-bold">Receive Challan No</label> <input type="text" name="receive_challan_no" class="form-control" required> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-primary">Receive Meter</label> <input type="number" step="0.01" id="meter" name="meter" class="form-control fw-bold border-primary text-primary" required> </div> <div class="col-md-2"> <label class="form-label small fw-bold text-primary">Receive Taka</label> <input type="number" id="taka" name="taka" class="form-control fw-bold border-primary text-primary text-center" required> </div> <div class="col-md-4"> <label class="form-label small fw-bold">Vehicle No</label> <input type="text" name="vehicle_no" class="form-control"> </div> <div class="col-md-9"> <label class="form-label small fw-bold">Remarks / Notes</label> <input type="text" name="remarks" class="form-control"> </div> <div class="col-md-3 d-flex align-items-end"> <button type="submit" id="saveBtn" class="btn btn-success w-100 fw-bold py-2">SAVE RECEIVE ENTRY</button> </div> </div> </form> </div> </div> <script> const dateInp = document.getElementById('receive_date'); if(!dateInp.value) { const d = new Date(); dateInp.value = String(d.getDate()).padStart(2,'0')+'-'+String(d.getMonth()+1).padStart(2,'0')+'-'+d.getFullYear(); } function fetchIssueDetails() { const challanNo = document.getElementById('issue_challan_no').value.trim(); if(!challanNo) return; fetch(`jobwork_issue_receive.php?action=get_issue_details&challan_no=${encodeURIComponent(challanNo)}`) .then(res => res.json()) .then(res => { if(res.success) { document.getElementById('job_work_issue_id').value = res.data.job_work_issue_id || ''; document.getElementById('gray_id').value = res.data.gray_id || ''; document.getElementById('disp_gray_id').value = res.data.gray_id || ''; document.getElementById('disp_mill').value = res.data.mill_name || ''; document.getElementById('disp_quality').value = res.data.quality_name || ''; document.getElementById('disp_worker').value = res.data.party_name || ''; document.getElementById('disp_process').value = res.data.type_name || ''; document.getElementById('disp_issue_meter').value = res.data.issue_meter || ''; document.getElementById('disp_issue_taka').value = res.data.issue_taka || ''; // Autopopulate editable receive meter and taka input fields with matching issue data defaults document.getElementById('meter').value = res.data.issue_meter || ''; document.getElementById('taka').value = res.data.issue_taka || ''; } else { alert(res.message); clearDisplayFields(); } }) .catch(err => { console.error(err); alert('Error communicating with the server'); }); } function clearDisplayFields() { document.getElementById('job_work_issue_id').value = ''; document.getElementById('gray_id').value = ''; document.getElementById('disp_gray_id').value = ''; document.getElementById('disp_mill').value = ''; document.getElementById('disp_quality').value = ''; document.getElementById('disp_worker').value = ''; document.getElementById('disp_process').value = ''; document.getElementById('disp_issue_meter').value = ''; document.getElementById('disp_issue_taka').value = ''; document.getElementById('meter').value = ''; document.getElementById('taka').value = ''; } document.getElementById('btnFetchIssue').addEventListener('click', fetchIssueDetails); document.getElementById('issue_challan_no').addEventListener('blur', fetchIssueDetails); // Enter Key Field Navigation Navigation Logic const inputs = Array.from(document.querySelectorAll('#receiveForm input, #receiveForm button')); inputs.forEach((input, i) => { input.addEventListener('keydown', (e) => { if (e.key === 'Enter') { e.preventDefault(); const next = inputs[i + 1]; if (next) next.focus(); } }); }); window.onload = () => setTimeout(() => document.getElementById('issue_challan_no').focus(), 200); </script> <?php require_once __DIR__ . '/partials/footer.php'; ob_end_flush(); ?>