« Back to History
merge_gray_id.php
|
20260920_164915.php
Initial Domain Snapshot
Copy Code
<?php require_once __DIR__ . '/modules/auth/page_acl.php'; $ctx = page_require_access('gray_receive_entry'); if (!function_exists('h')) { function h($value) { return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8'); } } $pdo = $ctx['pdo']; $company_id = (int)$ctx['company_id']; $success_msg = ''; $error_msg = ''; $gid1 = isset($_GET['gid1']) ? trim((string)$_GET['gid1']) : ''; $gid2 = isset($_GET['gid2']) ? trim((string)$_GET['gid2']) : ''; $rec1 = null; $rec2 = null; if ($gid1 !== '' && $gid2 !== '') { $fetchStmt = $pdo->prepare(" SELECT g.*, mm.mill_name as mill_name, fq.quality_name as quality_name FROM gray_receive g LEFT JOIN mill_master mm ON mm.id = g.mill_id AND mm.company_id = g.company_id LEFT JOIN fabric_quality_master fq ON fq.id = g.quality_id AND fq.company_id = g.company_id WHERE g.gray_id = :gid AND g.company_id = :cid AND g.status = 'open' "); $fetchStmt->execute([':gid' => $gid1, ':cid' => $company_id]); $rec1 = $fetchStmt->fetch(PDO::FETCH_ASSOC); $fetchStmt->execute([':gid' => $gid2, ':cid' => $company_id]); $rec2 = $fetchStmt->fetch(PDO::FETCH_ASSOC); if (!$rec1) $error_msg = "Gray ID {$gid1} nahi mila ya already close hai."; if (!$rec2) $error_msg = "Gray ID {$gid2} nahi mila ya already close hai."; if ($rec1 && $rec2 && $gid1 == $gid2) $error_msg = "Same Gray ID enter kiya hai!"; } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'merge') { $mgid1 = (int)($_POST['merge_gid1'] ?? 0); $mgid2 = (int)($_POST['merge_gid2'] ?? 0); if ($mgid1 <= 0 || $mgid2 <= 0) { $error_msg = 'Dono Gray ID enter karein.'; } elseif ($mgid1 === $mgid2) { $error_msg = 'Same Gray ID merge nahi kar sakte.'; } else { $fetchStmt = $pdo->prepare("SELECT * FROM gray_receive WHERE gray_id = :gid AND company_id = :cid AND status = 'open'"); $fetchStmt->execute([':gid' => $mgid1, ':cid' => $company_id]); $frec1 = $fetchStmt->fetch(PDO::FETCH_ASSOC); $fetchStmt->execute([':gid' => $mgid2, ':cid' => $company_id]); $frec2 = $fetchStmt->fetch(PDO::FETCH_ASSOC); if (!$frec1 || !$frec2) { $error_msg = 'Ek ya dono Gray ID open status mein nahi hain.'; } else { $pdo->beginTransaction(); try { $target_id = max($mgid1, $mgid2); $source_id = min($mgid1, $mgid2); $target_rec = ($target_id == $mgid1) ? $frec1 : $frec2; $source_rec = ($source_id == $mgid1) ? $frec1 : $frec2; $merged_grey_mts = (float)$target_rec['grey_mts'] + (float)$source_rec['grey_mts']; $merged_finish_mts = (float)$target_rec['finish_mts'] + (float)$source_rec['finish_mts']; $merged_taka = (int)$target_rec['taka'] + (int)$source_rec['taka']; $merged_gpno = trim($target_rec['gpno'] . ', ' . $source_rec['gpno'], ', '); $merged_remark = 'Merged Gray ID ' . $source_id . ' into this.'; $updTarget = $pdo->prepare(" UPDATE gray_receive SET grey_mts = :gmts, finish_mts = :fmts, taka = :taka, gpno = :gpno, remark = :remark, updated_at = NOW() WHERE gray_id = :gid AND company_id = :cid "); $updTarget->execute([ ':gmts' => $merged_grey_mts, ':fmts' => $merged_finish_mts, ':taka' => $merged_taka, ':gpno' => $merged_gpno, ':remark'=> $merged_remark, ':gid' => $target_id, ':cid' => $company_id, ]); $updSource = $pdo->prepare(" UPDATE gray_receive SET grey_mts = 0, finish_mts = 0, taka = 0, gpno = '', remark = CONCAT('MERGED INTO Gray ID: {$target_id} | Old Remark: ', COALESCE(remark, '')), status = 'close', updated_at = NOW() WHERE gray_id = :gid AND company_id = :cid "); $updSource->execute([':gid' => $source_id, ':cid' => $company_id]); $updCut = $pdo->prepare("UPDATE cutting_entry SET gray_id = :new_gid WHERE gray_id = :old_gid AND company_id = :cid"); $updCut->execute([':new_gid' => $target_id, ':old_gid' => $source_id, ':cid' => $company_id]); $updJWI = $pdo->prepare("UPDATE job_work_issue SET gray_id = :new_gid WHERE gray_id = :old_gid AND company_id = :cid"); $updJWI->execute([':new_gid' => $target_id, ':old_gid' => $source_id, ':cid' => $company_id]); $updJWR = $pdo->prepare("UPDATE job_work_receive SET gray_id = :new_gid WHERE gray_id = :old_gid AND company_id = :cid"); $updJWR->execute([':new_gid' => $target_id, ':old_gid' => $source_id, ':cid' => $company_id]); $updComments = $pdo->prepare("UPDATE gray_receive_comments SET gray_id = :new_gid WHERE gray_id = :old_gid AND company_id = :cid"); $updComments->execute([':new_gid' => (string)$target_id, ':old_gid' => (string)$source_id, ':cid' => $company_id]); $sendRows = $pdo->prepare("SELECT id, grey_id FROM va_send_entry WHERE company_id = :cid AND (grey_id LIKE :like1 OR grey_id = :exact)"); $sendRows->execute([':cid' => $company_id, ':like1' => '%"' . $source_id . '"%', ':exact' => (string)$source_id]); foreach ($sendRows->fetchAll(PDO::FETCH_ASSOC) as $sr) { $newGreyId = str_replace((string)$source_id, (string)$target_id, $sr['grey_id']); $updVS = $pdo->prepare("UPDATE va_send_entry SET grey_id = :new_gid WHERE id = :id AND company_id = :cid"); $updVS->execute([':new_gid' => $newGreyId, ':id' => $sr['id'], ':cid' => $company_id]); } $pdo->commit(); $success_msg = "Gray ID {$source_id} → Gray ID {$target_id} mein merge ho gaya!"; require_once __DIR__ . '/helpers/activity_helper.php'; log_activity([ 'activity_type' => 'update', 'module_name' => 'merge_gray_id', 'action_name' => 'merge', 'activity_note' => "Gray ID {$source_id} merged into Gray ID {$target_id}. Grey: {$merged_grey_mts}, Finish: {$merged_finish_mts}, Taka: {$merged_taka}, GP: {$merged_gpno}", 'reference_id' => $target_id, ]); $rec1 = $rec2 = null; $gid1 = $gid2 = ''; } catch (Exception $e) { $pdo->rollBack(); $error_msg = 'Merge failed: ' . $e->getMessage(); } } } } ?> <?php require_once __DIR__ . '/partials/header.php'; ?> <div class="content-wrapper"> <div class="container-fluid py-3"> <div class="text-center mb-3"> <h4 class="fw-bold text-primary m-0"><i class="bi bi-merge"></i> Merge Gray IDs</h4> <small class="text-muted">Do Gray IDs ko merge karein - Chhota ID blank hoga, saara data bade ID mein jayega</small> </div> <?php if ($success_msg): ?> <div class="alert alert-success alert-dismissible fade show" role="alert"> <i class="bi bi-check-circle-fill me-2"></i><?= h($success_msg) ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <?php if ($error_msg): ?> <div class="alert alert-danger alert-dismissible fade show" role="alert"> <i class="bi bi-exclamation-triangle-fill me-2"></i><?= h($error_msg) ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <div class="card shadow-sm border-0 mb-4"> <div class="card-header bg-primary text-white fw-bold"> <i class="bi bi-search me-2"></i>Search Gray IDs </div> <div class="card-body"> <form method="get" class="row g-3 align-items-end"> <div class="col-md-4"> <label class="form-label fw-bold">Gray ID 1 (Source - jo blank hoga)</label> <input type="number" name="gid1" class="form-control form-control-lg" placeholder="Enter Gray ID 1" value="<?= h($gid1) ?>" required min="1"> </div> <div class="col-md-4"> <label class="form-label fw-bold">Gray ID 2 (Target - jisme data jayega)</label> <input type="number" name="gid2" class="form-control form-control-lg" placeholder="Enter Gray ID 2" value="<?= h($gid2) ?>" required min="1"> </div> <div class="col-md-2"> <button type="submit" class="btn btn-primary btn-lg w-100 fw-bold"> <i class="bi bi-search me-1"></i>Search </button> </div> <div class="col-md-2"> <a href="merge_gray_id.php" class="btn btn-outline-secondary btn-lg w-100">Clear</a> </div> </form> </div> </div> <?php if ($rec1 && $rec2): ?> <div class="row"> <div class="col-md-5"> <div class="card border-danger shadow-sm"> <div class="card-header bg-danger text-white fw-bold"> <i class="bi bi-x-circle me-1"></i>Gray ID <?= h($gid1) ?> (SOURCE - Blank hoga) </div> <div class="card-body"> <div class="mb-2 p-2 bg-light rounded"> <small class="text-muted fw-bold">GP No:</small> <div class="fw-bold text-break" style="font-size: 14px;"><?= h($rec1['gpno'] ?: '-') ?></div> </div> <table class="table table-sm mb-0"> <tr><td class="fw-bold">Gray ID</td><td><?= h($rec1['gray_id']) ?></td></tr> <tr><td class="fw-bold">Mill</td><td><?= h($rec1['mill_name'] ?: '-') ?></td></tr> <tr><td class="fw-bold">Quality</td><td><span class="badge bg-secondary"><?= h($rec1['quality_name'] ?: '-') ?></span></td></tr> <tr><td class="fw-bold">Grey Meters</td><td class="text-danger fw-bold"><?= number_format((float)$rec1['grey_mts'], 2) ?></td></tr> <tr><td class="fw-bold">Finish Meters</td><td class="text-danger fw-bold"><?= number_format((float)$rec1['finish_mts'], 2) ?></td></tr> <tr><td class="fw-bold">Taka</td><td class="text-danger fw-bold"><?= (int)$rec1['taka'] ?></td></tr> <tr><td class="fw-bold">Date</td><td><?= date('d-m-Y', strtotime($rec1['rec_date'])) ?></td></tr> </table> </div> </div> </div> <div class="col-md-2 d-flex align-items-center justify-content-center"> <div class="text-center"> <div class="fs-1 text-primary"><i class="bi bi-arrow-right-circle-fill"></i></div> <div class="fw-bold text-primary">MERGE</div> </div> </div> <div class="col-md-5"> <div class="card border-success shadow-sm"> <div class="card-header bg-success text-white fw-bold"> <i class="bi bi-check-circle me-1"></i>Gray ID <?= h($gid2) ?> (TARGET - Data jayega) </div> <div class="card-body"> <div class="mb-2 p-2 bg-light rounded"> <small class="text-muted fw-bold">GP No:</small> <div class="fw-bold text-break" style="font-size: 14px;"><?= h($rec2['gpno'] ?: '-') ?></div> </div> <table class="table table-sm mb-0"> <tr><td class="fw-bold">Gray ID</td><td><?= h($rec2['gray_id']) ?></td></tr> <tr><td class="fw-bold">Mill</td><td><?= h($rec2['mill_name'] ?: '-') ?></td></tr> <tr><td class="fw-bold">Quality</td><td><span class="badge bg-secondary"><?= h($rec2['quality_name'] ?: '-') ?></span></td></tr> <tr><td class="fw-bold">Grey Meters</td><td class="text-success fw-bold"><?= number_format((float)$rec2['grey_mts'], 2) ?></td></tr> <tr><td class="fw-bold">Finish Meters</td><td class="text-success fw-bold"><?= number_format((float)$rec2['finish_mts'], 2) ?></td></tr> <tr><td class="fw-bold">Taka</td><td class="text-success fw-bold"><?= (int)$rec2['taka'] ?></td></tr> <tr><td class="fw-bold">Date</td><td><?= date('d-m-Y', strtotime($rec2['rec_date'])) ?></td></tr> </table> </div> </div> </div> </div> <div class="row mt-3"> <div class="col-md-5"> <div class="alert alert-warning text-center mb-0"> <strong>AFTER MERGE:</strong><br> Gray ID <?= h($gid1) ?> = 0 (blank) </div> </div> <div class="col-md-2"></div> <div class="col-md-5"> <div class="alert alert-success text-center mb-0"> <strong>AFTER MERGE:</strong><br> Grey: <?= number_format((float)$rec1['grey_mts'] + (float)$rec2['grey_mts'], 2) ?> | Finish: <?= number_format((float)$rec1['finish_mts'] + (float)$rec2['finish_mts'], 2) ?> | Taka: <?= (int)$rec1['taka'] + (int)$rec2['taka'] ?> </div> </div> </div> <div class="row mt-2"> <div class="col-12"> <div class="alert alert-info text-center mb-0"> <strong>GP No (Combined):</strong> <?= h($rec1['gpno'] . ', ' . $rec2['gpno']) ?> <?php if ($rec1['quality_name'] !== $rec2['quality_name']): ?> <br><small class="text-danger"><i class="bi bi-exclamation-triangle"></i> Quality alag hai: <?= h($rec1['quality_name']) ?> vs <?= h($rec2['quality_name']) ?></small> <?php endif; ?> </div> </div> </div> <div class="text-center mt-3"> <form method="post" onsubmit="return confirm('Are you sure? Ye action undo nahi hoga!')"> <input type="hidden" name="action" value="merge"> <input type="hidden" name="merge_gid1" value="<?= h($gid1) ?>"> <input type="hidden" name="merge_gid2" value="<?= h($gid2) ?>"> <button type="submit" class="btn btn-danger btn-lg px-5 fw-bold"> <i class="bi bi-merge me-2"></i>MERGE NOW </button> </form> </div> <?php endif; ?> </div> </div> <?php require_once __DIR__ . '/partials/footer.php'; ?>