« Back to History
quality_view.php
|
20260722_120325.php
Initial Domain Snapshot
Copy Code
<?php /* ========================================================= Quality View (read-only) - company-scoped - schema-aware display + EXTRAS JSON decode ========================================================= */ error_reporting(E_ALL); ini_set('display_errors',1); require __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('quality_view'); $u = $ctx['user']; $company_id = (int)$ctx['company_id']; $pdo = isset($ctx['pdo']) && $ctx['pdo'] instanceof PDO ? $ctx['pdo'] : null; if (!$pdo) { require __DIR__ . '/core/db.php'; } function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } function pick($row,...$names){ foreach($names as $n){ if(isset($row[$n]) && $row[$n] !== '' && $row[$n] !== null) return $row[$n]; } return ''; } function hasTable(PDO $pdo,$t){ try{$pdo->query("SELECT 1 FROM `$t` LIMIT 1"); return true;}catch(Throwable $e){ return false; } } $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; if ($id<=0){ http_response_code(400); echo "Missing id"; exit; } /* load quality */ $st=$pdo->prepare("SELECT * FROM qualities WHERE id=:id AND company_id=:cid LIMIT 1"); $st->execute([':id'=>$id, ':cid'=>$company_id]); $q=$st->fetch(PDO::FETCH_ASSOC); if(!$q){ http_response_code(404); echo "Quality not found"; exit; } /* parse notes/extras */ $notes_raw = pick($q,'notes','remark'); $notes = $notes_raw; $extras = []; if ($notes_raw && preg_match('/__EXTRAS__\s*(\{.*)$/s',$notes_raw,$m)){ $notes = trim(substr($notes_raw,0,strpos($notes_raw,$m[0]))); $tmp = json_decode(trim($m[1]), true); if (is_array($tmp)) $extras = $tmp; } /* Resolve beams (names) */ $beamName = function($beam_id) use($pdo,$company_id){ if(!$beam_id) return ''; try{ $s=$pdo->prepare("SELECT name FROM beam_qualities WHERE id=? AND company_id=? LIMIT 1"); $s->execute([(int)$beam_id,$company_id]); return (string)($s->fetchColumn() ?: ''); }catch(Throwable $e){ return ''; } }; $primary_beam_id = (int)( $q['primary_beam_id'] ?? ($extras['primary_beam_id'] ?? 0) ); $secondary_beam_id = (int)( $q['secondary_beam_id'] ?? ($extras['secondary_beam_id'] ?? 0) ); $primary_beam_name = $beamName($primary_beam_id); $secondary_beam_name = $beamName($secondary_beam_id); /* Warping rows from beam_quality_yarns (if table exists) */ $warps = []; if ($primary_beam_id && hasTable($pdo,'beam_quality_yarns')){ try{ $s=$pdo->prepare("SELECT seq_no, yarn_type, denier, color, total_tar, tpm, weight, wastage FROM beam_quality_yarns WHERE beam_quality_id=? ORDER BY seq_no"); $s->execute([$primary_beam_id]); $warps = $s->fetchAll(PDO::FETCH_ASSOC) ?: []; }catch(Throwable $e){} } /* Basics */ $name = pick($q,'quality_name','name'); $code = pick($q,'quality_code','code'); $group = pick($q,'quality_group','category'); $loom = pick($q,'loom_type','machine'); $design = pick($q,'design_no'); $coll = pick($q,'collection_name'); $machine_cut = pick($q,'machine_cut'); $after_cut = pick($q,'after_finish_cut'); $epi = pick($q,'epi'); $ppi = pick($q,'ppi'); $reed = pick($q,'reed'); $pickv= pick($q,'pick'); $draft= pick($q,'draft'); $denting = pick($q,'denting'); $wg = pick($q,'width_greige'); $wf = pick($q,'width_finish'); $gsm = pick($q,'gsm'); $rate = pick($q,'default_rate_m','production_rate'); $sizing = pick($q,'sizing_rate'); $peak = pick($q,'peak_value'); $wast = pick($q,'wastage_percent'); $unit = pick($q,'unit_label') ?: 'meter'; $pas_wj = $extras['pasaria_with_jog'] ?? pick($q,'pasaria_with_jog'); $pas_woj = $extras['pasaria_without_jog'] ?? pick($q,'pasaria_without_jog'); $pas_jog = $extras['pasaria_jog'] ?? pick($q,'pasaria_jog'); $pri = $extras['primary_pissing_rate'] ?? pick($q,'primary_pissing_rate'); $sec = $extras['secondary_pissing_rate'] ?? pick($q,'secondary_pissing_rate'); $ptype = $extras['prod_type'] ?? pick($q,'production_type'); $btype = $extras['beam_type'] ?? pick($q,'beam_type'); $wtype = $extras['weave_type'] ?? pick($q,'weave_type'); $panna = $extras['panna'] ?? pick($q,'panna'); $weft_denier = $extras['weft_denier'] ?? ''; $weft_pano = $extras['weft_pano'] ?? ''; $weft_peak = $extras['weft_peak'] ?? ''; $weft_dobby_rpm = $extras['weft_dobby_rpm'] ?? ''; $weft_prod_days = $extras['weft_prod_days'] ?? ''; $weft_read = $extras['weft_read'] ?? ''; $weft_tpm = $extras['weft_tpm'] ?? ''; $weft_weight100 = $extras['weft_weight100'] ?? ''; $weft_wastage = $extras['weft_wastage'] ?? ''; $created = pick($q,'created_at'); $updated = pick($q,'updated_at'); ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>View Quality #<?= (int)$id ?> — <?= h($name ?: 'Quality') ?></title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style> :root{ --primary:#34A853; --bg:#F7FFFA; --text:#202124; --shadow:0 10px 24px rgba(0,0,0,.08); --radius:14px; } *{box-sizing:border-box} body{margin:0;background:var(--bg);font-family:Inter,system-ui,Segoe UI,Roboto,Arial,sans-serif;color:var(--text)} .wrap{max-width:1100px;margin:24px auto;padding:0 16px} .head{display:flex;align-items:center;justify-content:space-between;margin:6px 0 14px} .brand{font-weight:700;font-size:20px;color:var(--primary)} .card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:16px} .grid{display:grid;gap:10px} .g-3{grid-template-columns:repeat(3,minmax(0,1fr))} .g-2{grid-template-columns:repeat(2,minmax(0,1fr))} .kv{display:grid;grid-template-columns:160px 1fr;gap:6px 10px;margin:6px 0} .kv div:nth-child(odd){color:#5f6368} h3{margin:0 0 6px} table{width:100%;border-collapse:collapse} th,td{border-bottom:1px solid #eee;padding:8px;text-align:left;font-size:13.5px} th{font-size:12px;color:#5f6368;text-transform:uppercase;letter-spacing:.02em} .btn{display:inline-flex;align-items:center;gap:6px;border:1px solid #e5e7eb;border-radius:10px;padding:8px 12px;cursor:pointer;text-decoration:none;color:#111;background:#fff} .btn-primary{background:#34A853;color:#fff;border-color:#34A853} @media print{ .noprint{display:none} body{background:#fff} .card{box-shadow:none} } </style> </head> <body> <div class="wrap"> <div class="head"> <div class="brand">Quality #<?= (int)$id ?> • <?= h($name) ?></div> <div class="noprint"> <a class="btn" href="quality_list.php" target="_blank">Back to List</a> <a class="btn" href="quality_edit.php?id=<?= (int)$id ?>" target="_blank">Edit</a> <button class="btn btn-primary" onclick="window.print()">Print</button> </div> </div> <div class="card"> <h3>Summary</h3> <div class="kv"> <div>Code</div><div><?= h($code) ?></div> <div>Group</div><div><?= h($group) ?></div> <div>Loom</div><div><?= h($loom) ?></div> <div>Design</div><div><?= h($design) ?></div> <div>Collection</div><div><?= h($coll) ?></div> <div>Machine Cut</div><div><?= h($machine_cut) ?></div> <div>After Finish Cut</div><div><?= h($after_cut) ?></div> <div>EPI / PPI</div><div><?= h($epi) ?> / <?= h($ppi) ?></div> <div>Reed / Pick</div><div><?= h($reed) ?> / <?= h($pickv) ?></div> <div>Draft / Denting</div><div><?= h($draft) ?> / <?= h($denting) ?></div> <div>Width (Greige/Finish)</div><div><?= h($wg) ?> / <?= h($wf) ?></div> <div>GSM</div><div><?= h($gsm) ?></div> <div>Production Rate (₹/m)</div><div><?= h($rate) ?></div> <div>Sizing Rate</div><div><?= h($sizing) ?></div> <div>Peak Value</div><div><?= h($peak) ?></div> <div>Wastage %</div><div><?= h($wast) ?></div> <div>Unit</div><div><?= h($unit) ?></div> <div>Primary Beam</div><div><?= h($primary_beam_name ?: $primary_beam_id) ?></div> <div>Secondary Beam</div><div><?= h($secondary_beam_name ?: $secondary_beam_id) ?></div> <div>Created</div><div><?= h($created) ?></div> <div>Updated</div><div><?= h($updated) ?></div> </div> </div> <div class="card"> <h3>Production Details</h3> <div class="kv"> <div>Production Type</div><div><?= h($ptype) ?></div> <div>Beam Type</div><div><?= h($btype) ?></div> <div>Weave Type</div><div><?= h($wtype) ?></div> <div>Panna</div><div><?= h($panna) ?></div> </div> </div> <div class="card"> <h3>Pasaria / Pissing</h3> <div class="kv"> <div>Pasaria (With Jog)</div><div><?= h($pas_wj) ?></div> <div>Pasaria (Without Jog)</div><div><?= h($pas_woj) ?></div> <div>Pasaria (Jog)</div><div><?= h($pas_jog) ?></div> <div>Primary Pissing Rate</div><div><?= h($pri) ?></div> <div>Secondary Pissing Rate</div><div><?= h($sec) ?></div> </div> </div> <div class="card"> <h3>Weft Detail (Wana)</h3> <div class="kv"> <div>Denier/Count</div><div><?= h($weft_denier) ?></div> <div>Pano</div><div><?= h($weft_pano) ?></div> <div>Peak</div><div><?= h($weft_peak) ?></div> <div>Dobby RPM</div><div><?= h($weft_dobby_rpm) ?></div> <div>Production/Days</div><div><?= h($weft_prod_days) ?></div> <div>Read</div><div><?= h($weft_read) ?></div> <div>TPM</div><div><?= h($weft_tpm) ?></div> <div>Weight [100M]</div><div><?= h($weft_weight100) ?></div> <div>Wastage %</div><div><?= h($weft_wastage) ?></div> </div> </div> <?php if ($warps): ?> <div class="card"> <h3>Warping Detail (Tana) • <?= h($primary_beam_name ?: ('Beam #'.$primary_beam_id)) ?></h3> <table> <thead> <tr> <th>#</th><th>Yarn</th><th>Denier</th><th>Color</th><th>Total Taar</th><th>TPM</th><th>Weight[100M]</th><th>Wastage %</th> </tr> </thead> <tbody> <?php foreach($warps as $i=>$w): ?> <tr> <td><?= (int)$w['seq_no'] ?></td> <td><?= h($w['yarn_type']) ?></td> <td><?= h($w['denier']) ?></td> <td><?= h($w['color']) ?></td> <td><?= h($w['total_tar']) ?></td> <td><?= h($w['tpm']) ?></td> <td><?= h($w['weight']) ?></td> <td><?= h($w['wastage']) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php endif; ?> <?php if($notes): ?> <div class="card"> <h3>Notes</h3> <div><?= nl2br(h($notes)) ?></div> </div> <?php endif; ?> </div> </body> </html>