« Back to History
exporter_party_payment.php
|
20260721_154032.php
Initial Bulk Import
Copy Code
<?php /* ============================================================================= File: /erp/party_payment_export.php Purpose: Party BANK Payment Excel Export (ICICI / Non-ICICI) Source : party_ac_detail ============================================================================= */ error_reporting(E_ALL); ini_set('display_errors', 1); /* ---------- AUTH ---------- */ require_once __DIR__ . '/modules/auth/auth.php'; require_login(); $u = auth_user(); $company_id = (int)($u['company_id'] ?? 0); require_once __DIR__ . '/core/db.php'; /* ---------- INPUT ---------- */ $rows_json = $_POST['salary_rows'] ?? '[]'; $rows = json_decode($rows_json, true); if (!is_array($rows) || empty($rows)) { exit('No party rows received'); } /* ---------- HELPERS ---------- */ function paymentTypeFromIfsc(string $ifsc): string { return (stripos($ifsc, 'ICIC') === 0) ? 'I' : 'N'; } function colName(int $n): string { $s = ''; while ($n > 0) { $m = ($n - 1) % 26; $s = chr(65 + $m) . $s; $n = intdiv($n - $m - 1, 26); } return $s; } /* ---------- BANK EXCEL HEADERS (LOCKED) ---------- */ $headers = [ 'Debit A/c Number', 'Beneficiary A/c Number', 'Beneficiary Name', 'Amount', 'Payment Type (Mandatory for all types of payments)', 'Payment date', 'IFSC Code', 'Beneficiary Mobile No.', 'Beneficiary email-id', 'Bene Address 1', 'Bene Address 2', 'Bene Address 3', 'Bene Address 4', 'Add detail 1', 'Add detail 2', 'Add detail 3', 'Add detail 4', 'Add detail 5', 'Remarks', 'Credit Narration' ]; /* ---------- COMPANY BANK (DEBIT ACCOUNT) ---------- */ $st = $pdo->prepare(" SELECT debit_ac_no, bank_user_id FROM company_bank_accounts WHERE company_id = ? ORDER BY id DESC LIMIT 1 "); $st->execute([$company_id]); $bank = $st->fetch(PDO::FETCH_ASSOC); if (!$bank || empty($bank['debit_ac_no'])) { exit('Company debit account not configured'); } $debit_ac = trim($bank['debit_ac_no']); $bank_user_id = trim($bank['bank_user_id'] ?: (string)$company_id); /* ---------- PARTY IDS ---------- */ $party_ids = array_unique(array_map( fn($r) => (int)($r['party_account_id'] ?? 0), $rows )); $party_ids = array_filter($party_ids); if (empty($party_ids)) { exit('No valid party accounts'); } $in = implode(',', array_fill(0, count($party_ids), '?')); /* ---------- FETCH PARTY DATA ---------- */ $st = $pdo->prepare(" SELECT id, party_name, account_no, beneficiary_name, ifsc_code FROM party_ac_detail WHERE company_id = ? AND id IN ($in) "); $st->execute(array_merge([$company_id], $party_ids)); $party = []; foreach ($st->fetchAll(PDO::FETCH_ASSOC) as $r) { $party[(int)$r['id']] = $r; } /* ---------- BUILD EXCEL ROWS ---------- */ $data = []; $data[] = $headers; $payDateFmt = date('d-M-Y'); $narration = date('M-Y'); foreach ($rows as $r) { $pid = (int)($r['party_account_id'] ?? 0); $amt = (float)($r['amount'] ?? 0); if ($pid <= 0 || $amt <= 0 || !isset($party[$pid])) { continue; } $p = $party[$pid]; $data[] = [ $debit_ac, // Debit A/c $p['account_no'], // Beneficiary A/c $p['beneficiary_name'], // Beneficiary Name number_format($amt, 0, '.', ''), // Amount paymentTypeFromIfsc($p['ifsc_code']), // I / N $payDateFmt, // Payment date strtoupper($p['ifsc_code']), // IFSC '', '', '', '', '', // Mobile / Email / Address '', '', '', '', '', // Add detail 1–5 $p['party_name'], // Remarks $narration // Credit Narration ]; } /* ---------- XLSX XML ---------- */ $sheet = '<?xml version="1.0" encoding="UTF-8"?> <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData>'; $r = 0; foreach ($data as $row) { $r++; $sheet .= '<row r="'.$r.'">'; $c = 0; foreach ($row as $val) { $c++; $cell = colName($c).$r; $sheet .= '<c r="'.$cell.'" t="inlineStr"><is><t>' . htmlspecialchars((string)$val, ENT_QUOTES | ENT_XML1) . '</t></is></c>'; } $sheet .= '</row>'; } $sheet .= '</sheetData></worksheet>'; /* ---------- ZIP XLSX ---------- */ $tmp = tempnam(sys_get_temp_dir(), 'party_xlsx_'); @unlink($tmp); $zip = new ZipArchive(); $zip->open($tmp, ZipArchive::CREATE); $zip->addFromString('[Content_Types].xml', '<?xml version="1.0" encoding="UTF-8"?> <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/> <Default Extension="xml" ContentType="application/xml"/> <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/> <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> </Types>'); $zip->addFromString('_rels/.rels', '<?xml version="1.0" encoding="UTF-8"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/> </Relationships>'); $zip->addFromString('xl/workbook.xml', '<?xml version="1.0" encoding="UTF-8"?> <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheets> <sheet name="Sheet1" sheetId="1"/> </sheets> </workbook>'); $zip->addFromString('xl/worksheets/sheet1.xml', $sheet); $zip->close(); /* ---------- DOWNLOAD ---------- */ $file = $bank_user_id.'_UPLD_'.date('dmY').'_PARTY.xlsx'; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment; filename="'.$file.'"'); header('Content-Length: '.filesize($tmp)); readfile($tmp); @unlink($tmp); exit;