« Back to History
beam_quality_view.php
|
20260722_120325.php
Initial Domain Snapshot
Copy Code
<?php /* ========================================================= File: /erp/beam_quality_view.php Purpose: View-only page for Beam Quality (multi-yarn rows) Notes: Page-local; no edits, no schema changes. Mirrors beam_quality_edit layout ========================================================= */ error_reporting(E_ALL); ini_set('display_errors',1); /* ====== Auth/Bootstrap ====== */ require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('beam_quality_view'); $company_id = (int)$ctx['company_id']; $user_id = (int)$ctx['user']['id']; $u = $ctx['user']; $pdo = (isset($ctx['pdo']) && $ctx['pdo'] instanceof PDO) ? $ctx['pdo'] : null; if (!$pdo) { require __DIR__ . '/core/db.php'; } /* helpers */ function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } function canonical_stock($raw){ $raw = strtoupper(trim((string)$raw)); static $map = ['YARN'=>'Yarn','TFO'=>'TFO','TF0'=>'TFO','TFI'=>'TFO','TPM'=>'TPM','TP'=>'TPM','ZARI'=>'Zari']; return $map[$raw] ?? 'Yarn'; } function parse_denier_to_float($s): float { $s = trim((string)$s); if ($s === '') return 0.0; if (strpos($s, '/') !== false) { $left = trim(explode('/', $s, 2)[0]); if (preg_match('/\d+(\.\d+)?/', $left, $m)) return (float)$m[0]; } if (preg_match('/\d+(\.\d+)?/', $s, $m)) return (float)$m[0]; return 0.0; } function weight_100m_from_denier_and_tar($denier, $tar): float { // grams $d = max(0.0, (float)$denier); $t = max(0.0, (float)$tar); return ($d / 90.0) * $t; } /* ====== Load header + lines ====== */ $id = (int)($_GET['id'] ?? 0); if ($id <= 0){ http_response_code(400); exit('Missing id'); } $st = $pdo->prepare("SELECT * FROM beam_qualities WHERE id=:id AND company_id=:c"); $st->execute([':id'=>$id, ':c'=>$company_id]); $hdr = $st->fetch(PDO::FETCH_ASSOC); if(!$hdr){ http_response_code(404); exit('Not found or no permission'); } $st = $pdo->prepare("SELECT * FROM beam_quality_yarns WHERE beam_quality_id=:id ORDER BY seq_no,id"); $st->execute([':id'=>$id]); $lines = $st->fetchAll(PDO::FETCH_ASSOC); foreach($lines as &$ln){ $ln['stock_type'] = canonical_stock($ln['stock_type'] ?? 'Yarn'); } unset($ln); /* compute sums */ $hdr_tar_sum = 0.0; $weight_sum_g = 0.0; foreach($lines as $ln){ $v = isset($ln['total_tar']) ? (string)$ln['total_tar'] : ''; if ($v !== '' && is_numeric($v)) $hdr_tar_sum += (float)$v; $den = parse_denier_to_float($ln['denier'] ?? ''); $w = isset($ln['weight']) && is_numeric($ln['weight']) ? (float)$ln['weight'] : weight_100m_from_denier_and_tar($den, (float)($ln['total_tar'] ?? 0)); $weight_sum_g += $w; } /* ====== Render ====== */ ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>View Beam Quality</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> :root{ --primary:#34A853; --bg:#F5FFF7; --text:#202124; --muted:#5F6368; --card:#FFFFFF; --shadow:0 6px 18px rgba(0,0,0,.06); --radius:16px; --danger:#b00020; } body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Arial;background:var(--bg);color:var(--text);} .wrap{max-width:1150px;margin:20px auto;padding:16px;} .card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;} h1{margin:0 0 12px;} .row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:8px} label{font-size:12px;color:var(--muted);display:block;margin-bottom:6px;} .value{padding:10px;border-radius:10px;background:#f6f8fa;border:1px solid #e8eef2} table{width:100%;border-collapse:separate;border-spacing:0 8px;margin-top:10px} th,td{padding:6px} th{font-size:12px;color:#5F6368;text-align:left;} .tr-card{background:#fff;border:1px solid #eef2f7;border-radius:12px} .toolbar{display:flex;gap:10px;justify-content:space-between;align-items:center;margin-top:12px} .btn{padding:10px 14px;border-radius:12px;border:0;cursor:pointer} .btn-ghost{border:1px dashed #cdd9e3;background:transparent} .note{font-size:12px;color:#2e7d32} </style> </head> <body> <?php $__header = __DIR__ . '/partials/header.php'; if (file_exists($__header)) { if (!isset($company) || !is_array($company)) { $company = ['id'=>$company_id, 'name'=>($u['company_name'] ?? '')]; } include $__header; } ?> <div class="wrap"><div class="card"> <div class="toolbar"> <h1>View Beam Quality</h1> <div><a class="btn btn-ghost" href="/erp/beam_quality_list.php">← Back to List</a></div> </div> <div class="row"> <div> <label>Name</label> <div class="value"><?= h($hdr['name']) ?></div> </div> <div> <label>Pattern</label> <div class="value"><?= h($hdr['pattern'] ?? '') ?></div> </div> <div> <label>Tar (Auto Sum of Total Tar)</label> <div class="value"><?= h(number_format((float)($hdr['tar'] ?? $hdr_tar_sum),3,'.','')) ?></div> </div> <div> <label>Warping Rate</label> <div class="value"><?= h(number_format((float)($hdr['warping_rate'] ?? 0),3,'.','')) ?></div> </div> <div> <label>Total Weight (per 100 m)</label> <?php $wkg = $weight_sum_g/1000.0; ?> <div class="value"><?= h(number_format($weight_sum_g,3,'.','').' g ('.number_format($wkg,3,'.','').' kg)') ?></div> </div> </div> <h3 style="margin-top:18px;">Yarns</h3> <table id="yarnTable"> <thead> <tr> <th>Seq</th><th>Stock Type</th><th>Yarn Type</th><th>Denier</th><th>Color</th> <th>Total Tar</th><th>TPM</th><th>Weight (per 100 m)</th><th>Wastage</th> </tr> </thead> <tbody> <?php if(empty($lines)): ?> <tr class="tr-card"><td colspan="9" style="padding:12px">No yarn rows.</td></tr> <?php else: ?> <?php $seq=1; foreach($lines as $ln): $den = parse_denier_to_float($ln['denier'] ?? ''); $tt = isset($ln['total_tar']) && is_numeric($ln['total_tar']) ? (float)$ln['total_tar'] : 0.0; $w = isset($ln['weight']) && is_numeric($ln['weight']) ? (float)$ln['weight'] : weight_100m_from_denier_and_tar($den, $tt); ?> <tr class="tr-card"> <td><?=h($seq++)?></td> <td><?=h($ln['stock_type'] ?? 'Yarn')?></td> <td><?=h($ln['yarn_type'] ?? '')?></td> <td><?=h($ln['denier'] ?? '')?></td> <td><?=h($ln['color'] ?? '')?></td> <td><?=h(number_format($tt,3,'.',''))?></td> <td><?=h(number_format((float)($ln['tpm'] ?? 0),3,'.',''))?></td> <td><?=h(number_format($w,3,'.',''))?> g</td> <td><?=h(number_format((float)($ln['wastage'] ?? 0),3,'.',''))?></td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> <div style="margin-top:12px" class="note">This is a view-only page. To modify this Beam Quality use the Edit action from the list.</div> </div></div> <?php $__footer = __DIR__ . '/partials/footer.php'; if (file_exists($__footer)) include $__footer; ?> </body> </html>