« Back to History
kasab_entry_add.php
|
20260723_000646.php
Initial Domain Snapshot
Copy Code
<?php require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('kasab_entry_add'); $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; // User Activity Log: Page View require_once __DIR__ . '/helpers/activity_helper.php'; if (function_exists('log_activity')) { $u = $ctx['user'] ?? null; log_activity([ 'activity_type' => 'view', 'module_name' => 'kasab_entry', 'action_name' => 'kasab_entry_add_view', 'activity_note' => 'Kasab Entry Add page viewed', 'reference_id' => null, ]); } /* 1. Contractor (dept 38, single) */ $q = $pdo->prepare(" SELECT id, name FROM company_employee_master WHERE company_id = :cid AND department_id = 38 LIMIT 1 "); $q->execute([':cid'=>$company_id]); $contractor = $q->fetch(PDO::FETCH_ASSOC); /* 2. Assign Master Se Data (Active Records) */ $q_assign = $pdo->prepare(" SELECT id, assign_name FROM assign_master WHERE company_id = :cid AND is_active = 1 ORDER BY assign_name ASC "); $q_assign->execute([':cid' => $company_id]); $assign_list = $q_assign->fetchAll(PDO::FETCH_ASSOC); ?> <?php require_once __DIR__ . '/partials/header.php'; ?> <div class="container py-4"> <div class="card shadow-sm mb-4"> <div class="card-header bg-light"> <h5 class="mb-0">Kasab Entry</h5> </div> <div class="card-body"> <div class="row g-3 align-items-end"> <div class="col-md-2"> <label class="form-label">Roll Type</label> <select id="roll_type" class="form-select"> <option>Big</option> <option>Small</option> </select> </div> <div class="col-md-2"> <label class="form-label">Color</label> <select id="color" class="form-select"> <option>Copper</option> <option>Gold</option> <option>Anmol</option> <option>D-Anmol</option> <option>Red LG</option> <option>BB Anmol</option> <option>Silver</option> <option>Anti Gold</option> <option>Flora</option> </select> </div> <div class="col-md-2"> <label class="form-label">Date</label> <input type="date" id="entry_date" class="form-control" value="<?=date('Y-m-d')?>"> </div> <div class="col-md-2"> <label class="form-label">Assigned To</label> <select id="assigned_to" class="form-select"> <option value="">-- Select --</option> <?php foreach($assign_list as $row): ?> <option value="<?= $row['id'] ?>"><?= htmlspecialchars($row['assign_name']) ?></option> <?php endforeach; ?> </select> </div> <div class="col-md-2"> <label class="form-label">Contractor</label> <input type="text" class="form-control" value="<?=htmlspecialchars($contractor['name'] ?? '')?>" disabled> <input type="hidden" id="contractor" value="<?=$contractor['id'] ?? 0?>"> </div> <div class="col-md-1"> <label class="form-label">Raws</label> <input type="number" id="raws" class="form-control" min="1"> </div> <div class="col-md-1"> <label class="form-label">Rolls</label> <input type="number" id="rolls" class="form-control" min="1"> </div> <div class="col-md-1 d-grid"> <button type="button" class="btn btn-success" id="btnAdd"> Add </button> </div> </div> </div> </div> <div class="card shadow-sm mb-4"> <div class="card-header bg-light"> <h6 class="mb-0">Weight Entry (Live JSON)</h6> </div> <div class="card-body p-0"> <div class="table-responsive"> <table class="table table-bordered table-striped mb-0 text-center" id="entryTable"> <thead class="table-success"> <tr> <th>#</th> <th>Rolls</th> <th>Total Weight</th> <th>Avg / Roll</th> </tr> </thead> <tbody></tbody> </table> </div> </div> </div> <div class="card shadow-sm"> <div class="card-header bg-light"> <h6 class="mb-0">Live JSON Preview (Editable)</h6> </div> <div class="card-body"> <div class="table-responsive mb-3"> <table class="table table-bordered table-hover text-center" id="jsonTable"> <thead class="table-primary"> <tr> <th>Raw #</th> <th>Total Weight</th> <th>Avg / Roll</th> </tr> </thead> <tbody></tbody> </table> </div> <div class="d-grid"> <button type="button" class="btn btn-primary" id="btnSave" disabled> Save Entry </button> </div> </div> </div> </div> <script> let weights = []; let totalRaws = 0; let formMeta = {}; const btnAdd = document.getElementById('btnAdd'); const btnSave = document.getElementById('btnSave'); const entryTable = document.getElementById('entryTable'); const jsonTable = document.getElementById('jsonTable'); btnAdd.onclick = () => { weights = []; btnSave.disabled = true; jsonTable.querySelector('tbody').innerHTML = ''; entryTable.querySelector('tbody').innerHTML = ''; totalRaws = parseInt(document.getElementById('raws').value); const rollsVal = parseFloat(document.getElementById('rolls').value); const assignedToVal = document.getElementById('assigned_to').value; if (!totalRaws || totalRaws <= 0) { alert('Raws required'); return; } if (!rollsVal || rollsVal <= 0) { alert('Rolls required'); return; } if (!assignedToVal) { alert('Please select "Assigned To"'); return; } formMeta = { roll_type: document.getElementById('roll_type').value, color: document.getElementById('color').value, entry_date: document.getElementById('entry_date').value, contractor: document.getElementById('contractor').value, assigned_to: assignedToVal, // Yahan add ho gaya rolls: rollsVal }; for (let i = 1; i <= totalRaws; i++) { const tr = document.createElement('tr'); tr.innerHTML = ` <td>${i}</td> <td>${formMeta.rolls}</td> <td><input type="number" step="0.001" class="w form-control form-control-sm mx-auto" style="max-width:120px;"></td> <td class="avg">-</td> `; entryTable.querySelector('tbody').appendChild(tr); const input = tr.querySelector('.w'); input.addEventListener('keydown', e => { if (e.key !== 'Enter') return; e.preventDefault(); // already processed if (input.dataset.done === '1') { return; } const val = parseFloat(input.value); if (!val || val <= 0) { return; } const avg = val / formMeta.rolls; tr.querySelector('.avg').innerText = avg.toFixed(3); // range warning if (avg < 0.5 || avg > 1.1) { alert(`Warning: Avg roll weight ${avg.toFixed(3)} kg (Allowed: 0.50 – 1.10 kg)`); } // mark completed FIRST input.dataset.done = '1'; // lock field input.readOnly = true; // store by row index instead of push weights[i - 1] = val; renderJson(); const next = tr.nextElementSibling?.querySelector('.w'); if (next) { next.focus(); } else { btnSave.disabled = false; } }); } document.querySelector('.w')?.focus(); }; function renderJson() { const tbody = jsonTable.querySelector('tbody'); tbody.innerHTML = ''; weights.forEach((w, i) => { const avg = w / formMeta.rolls; tbody.innerHTML += ` <tr> <td>${i + 1}</td> <td> <input class="form-control form-control-sm mx-auto" style="max-width:120px;" value="${w}" step="0.001" type="number" onchange="updateWeight(${i}, this.value)"> </td> <td>${avg.toFixed(3)}</td> </tr> `; }); } function updateWeight(index, val) { weights[index] = parseFloat(val); renderJson(); } btnSave.onclick = () => { if (!weights.length) { alert('No weights entered'); return; } // Final check before sending if (weights.length < totalRaws) { alert('Please complete all rows before saving'); return; } fetch('kasab_entry_save_batch.php', { method: 'POST', headers: {'Content-Type':'application/json'}, body: JSON.stringify({ ...formMeta, weights: weights }) }) .then(r => r.json()) .then(res => { if (!res.success) { alert(res.error || 'Save failed'); return; } alert('Kasab entry saved successfully'); /* Clear only weight section */ weights = []; btnSave.disabled = true; jsonTable.querySelector('tbody').innerHTML = ''; entryTable.querySelector('tbody').innerHTML = ''; document.getElementById('raws').value = ''; document.getElementById('rolls').value = ''; }) .catch(err => { console.error(err); alert('Error occurred while saving'); }); }; </script> <?php require_once __DIR__ . '/partials/footer.php'; ?>