beginTransaction(); // 1. Insert into customer_applications $stmt = $pdo->prepare( 'INSERT INTO customer_applications ( application_id, customer_id, created_by, company_name, company_phone, fax, gst_reg_no, company_reg_no, date_of_incorporation, country_of_incorporation, nature_of_business, credit_terms_requested, credit_limit_requested, account_setup_ar_statement, account_setup_dunning_letter, account_setup_ap_payment, declaration_name, declaration_designation, declaration_date ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' ); $stmt->execute([ uniqid(), $_SESSION['user']['id'], $_SESSION['user']['id'], $_POST['company_name'] ?? null, $_POST['company_phone'] ?? null, $_POST['fax'] ?? null, $_POST['gst_reg_no'] ?? null, $_POST['company_reg_no'] ?? null, $_POST['date_of_incorporation'] ?? null, $_POST['country_of_incorporation'] ?? null, $_POST['nature_of_business'] ?? null, $_POST['credit_terms_requested'] ?? null, $_POST['credit_limit_requested'] ?? null, isset($_POST['account_setup_ar_statement']) ? 1 : 0, isset($_POST['account_setup_dunning_letter']) ? 1 : 0, isset($_POST['account_setup_ap_payment']) ? 1 : 0, $_POST['declaration_name'] ?? null, $_POST['declaration_designation'] ?? null, $_POST['declaration_date'] ?? null ]); $customer_application_id = $pdo->lastInsertId(); // Insert Primary Contact if (!empty($_POST['contact_person_name']) && !empty($_POST['contact_person_email'])) { $stmt_contact = $pdo->prepare( 'INSERT INTO customer_contacts (customer_application_id, name, email, phone, is_primary) VALUES (?, ?, ?, ?, ?)' ); $stmt_contact->execute([ $customer_application_id, $_POST['contact_person_name'], $_POST['contact_person_email'], $_POST['contact_person_phone'] ?? null, 1 // Set as primary contact ]); } // Insert Billing Address if (!empty($_POST['company_address'])) { $stmt_address = $pdo->prepare( 'INSERT INTO customer_addresses (customer_application_id, address_type, address_line_1) VALUES (?, ?, ?)' ); $stmt_address->execute([$customer_application_id, 'BILLING', $_POST['company_address']]); } // Insert Delivery Address if (!empty($_POST['del_to_address'])) { $stmt_del_address = $pdo->prepare( 'INSERT INTO customer_addresses (customer_application_id, address_type, address_line_1) VALUES (?, ?, ?)' ); $stmt_del_address->execute([$customer_application_id, 'SHIPPING', $_POST['del_to_address']]); } // 2. Insert into shareholder_director_information if (isset($_POST['shareholder']) && is_array($_POST['shareholder'])) { $stmt_shareholder = $pdo->prepare( 'INSERT INTO shareholder_director_information (application_id, name, address, nric_fin, perc_of_shareholding, contact_no) VALUES (?, ?, ?, ?, ?, ?)' ); foreach ($_POST['shareholder'] as $shareholder) { if (empty($shareholder['name'])) continue; // Skip empty rows $stmt_shareholder->execute([ $customer_application_id, $shareholder['name'] ?? null, $shareholder['address'] ?? null, $shareholder['nric_fin'] ?? null, $shareholder['perc_of_shareholding'] ?? null, $shareholder['contact_no'] ?? null ]); } } // 3. Insert into customer_trade_references if (isset($_POST['trade_reference']) && is_array($_POST['trade_reference'])) { $stmt_trade_ref = $pdo->prepare( 'INSERT INTO customer_trade_references (customer_application_id, company_name, contact_person, telephone_no, fax_no) VALUES (?, ?, ?, ?, ?)' ); foreach ($_POST['trade_reference'] as $trade_ref) { if (empty($trade_ref['company_name'])) continue; // Skip empty rows $stmt_trade_ref->execute([ $customer_application_id, $trade_ref['company_name'] ?? null, $trade_ref['contact_person'] ?? null, $trade_ref['telephone_no'] ?? null, $trade_ref['fax_no'] ?? null ]); } } // 4. Insert into customer_bank_details if (!empty($_POST['bank_name'])) { $stmt_bank = $pdo->prepare( 'INSERT INTO customer_bank_details (customer_application_id, bank_name, address, swift_code, account_number, contact_person, telephone_no, fax_no) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' ); $stmt_bank->execute([ $customer_application_id, $_POST['bank_name'] ?? null, $_POST['bank_address'] ?? null, $_POST['bank_swift_code'] ?? null, $_POST['bank_account_no'] ?? null, $_POST['bank_contact_person'] ?? null, $_POST['bank_telephone_no'] ?? null, $_POST['bank_fax_no'] ?? null ]); } // 5. Insert into customer_financial_information if (!empty($_POST['paid_up_capital'])) { $stmt_financial = $pdo->prepare( 'INSERT INTO customer_financial_information (customer_application_id, latest_audited_financial_year, shareholder_equity, paid_up_capital, annual_turnover, net_profit_loss, currency) VALUES (?, ?, ?, ?, ?, ?, ?)' ); $stmt_financial->execute([ $customer_application_id, $_POST['latest_audited_financial_year'] ?? null, $_POST['shareholder_equity'] ?? null, $_POST['paid_up_capital'] ?? null, $_POST['annual_turnover'] ?? null, $_POST['net_profit_loss'] ?? null, $_POST['currency'] ?? null ]); } // Set initial approval status $stmt_role = $pdo->prepare("SELECT id FROM roles WHERE name = 'Sales Manager'"); $stmt_role->execute(); $approver_role = $stmt_role->fetch(PDO::FETCH_ASSOC); $approver_role_id = $approver_role ? $approver_role['id'] : null; $stmt_update = $pdo->prepare('UPDATE customer_applications SET approval_level = 1, current_approver_role_id = ? WHERE id = ?'); $stmt_update->execute([$approver_role_id, $customer_application_id]); $pdo->commit(); $_SESSION['flash_message'] = [ 'type' => 'success', 'message' => 'Customer application submitted successfully!' ]; header('Location: index.php'); exit(); } catch (PDOException $e) { $pdo->rollBack(); error_log('Application submission failed: ' . $e->getMessage()); $_SESSION['flash_message'] = [ 'type' => 'danger', 'message' => 'There was an error submitting your application. Please check the data and try again. Error: ' . $e->getMessage() ]; header('Location: new_application.php'); exit(); }