36573-vm/submit_application.php
2025-12-04 02:32:25 +00:00

222 lines
10 KiB
PHP

<?php
session_start();
require_once __DIR__ . '/db/config.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
exit('Method Not Allowed');
}
if (!isset($_SESSION['user'])) {
http_response_code(403);
exit('Unauthorized');
}
$pdo = db();
try {
// Get the role ID for the first approval level
$stmt_role = $pdo->prepare("SELECT id FROM roles WHERE name = 'Approver Level 1'");
$stmt_role->execute();
$approver_role = $stmt_role->fetch(PDO::FETCH_ASSOC);
$approver_role_id = $approver_role ? $approver_role['id'] : null;
$pdo->beginTransaction();
// 1. Insert into customer_applications
$application_id = 'APP-' . strtoupper(uniqid());
$created_by = $_SESSION['user']['username'] ?? 'system';
$stmt = $db->prepare(
'INSERT INTO customer_applications (user_id, company_name, company_website, company_phone, sales_owner, payment_terms, tags, notes, declaration_text, signature_path, major_product, capital, capital_currency, main_shareholders, num_employees, payment_terms_ar, pl_year, net_sales, net_income_margin, net_income_margin_ratio, sales_target_this_year, sales_target_next_year, sales_target_after_next, credit_rank, credit_limit, credit_research_status, credit_research_reason, tax_rate_area, billing_type, del_to_code, delivery_abbreviation, del_to_customer_name, del_to_address_1, del_to_address_2, del_to_address_3, del_to_address_4, del_to_postcode, del_to_phone, del_to_area_code, del_to_transportation_code, del_to_stock_point_code, del_to_recipient_section, del_to_country_code, del_to_shipment_flag, del_to_transport_days, del_to_shipment_condition_category, del_to_transport_service_exist, del_to_shipment_condition_place, doc_req_do, doc_req_packing_list, doc_req_invoice, doc_req_export_permit, doc_req_po_do_inv, doc_req_do_inv, doc_req_others, pack_req_one_line_carton, pack_req_one_item_carton, pack_req_one_item_pocket, pack_req_thomson_label, pack_req_contents_label, pack_req_delivery_schedule, forwarder_name, forwarder_code, forwarder_address, forwarder_contact_person, forwarder_phone, forwarder_fax, forwarder_delivery_method, forwarder_delivery_timings, forwarder_delivery_requirements, special_instructions_shipping_mark, special_instructions_fax_documents, special_instructions_details, special_instructions_attention_to, special_instructions_fax_number, remarks) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
);
$stmt->execute([
$_SESSION['user_id'],
$_POST['company_name'],
$_POST['company_website'],
$_POST['company_phone'],
$_POST['sales_owner'],
$_POST['payment_terms'],
$_POST['tags'],
$_POST['notes'],
$_POST['declaration_text'],
$signature_path,
$_POST['major_product'] ?? null,
$_POST['capital'] ?? null,
$_POST['capital_currency'] ?? null,
$_POST['main_shareholders'] ?? null,
$_POST['num_employees'] ?? null,
$_POST['payment_terms_ar'] ?? null,
$_POST['pl_year'] ?? null,
$_POST['net_sales'] ?? null,
$_POST['net_income_margin'] ?? null,
$_POST['net_income_margin_ratio'] ?? null,
$_POST['sales_target_this_year'] ?? null,
$_POST['sales_target_next_year'] ?? null,
$_POST['sales_target_after_next'] ?? null,
$_POST['credit_rank'] ?? null,
$_POST['credit_limit'] ?? null,
$_POST['credit_research_status'] ?? null,
$_POST['credit_research_reason'] ?? null,
$_POST['tax_rate_area'] ?? null,
$_POST['billing_type'] ?? null,
$_POST['del_to_code'] ?? null,
$_POST['delivery_abbreviation'] ?? null,
$_POST['del_to_customer_name'] ?? null,
$_POST['del_to_address_1'] ?? null,
$_POST['del_to_address_2'] ?? null,
$_POST['del_to_address_3'] ?? null,
$_POST['del_to_address_4'] ?? null,
$_POST['del_to_postcode'] ?? null,
$_POST['del_to_phone'] ?? null,
$_POST['del_to_area_code'] ?? null,
$_POST['del_to_transportation_code'] ?? null,
$_POST['del_to_stock_point_code'] ?? null,
$_POST['del_to_recipient_section'] ?? null,
$_POST['del_to_country_code'] ?? null,
$_POST['del_to_shipment_flag'] ?? null,
$_POST['del_to_transport_days'] ?? null,
$_POST['del_to_shipment_condition_category'] ?? null,
isset($_POST['del_to_transport_service_exist']) ? implode(',', $_POST['del_to_transport_service_exist']) : null,
$_POST['del_to_shipment_condition_place'] ?? null,
$_POST['doc_req_do'] ?? null,
$_POST['doc_req_packing_list'] ?? null,
$_POST['doc_req_invoice'] ?? null,
$_POST['doc_req_export_permit'] ?? null,
$_POST['doc_req_po_do_inv'] ?? null,
$_POST['doc_req_do_inv'] ?? null,
$_POST['doc_req_others'] ?? null,
$_POST['pack_req_one_line_carton'] ?? null,
$_POST['pack_req_one_item_carton'] ?? null,
$_POST['pack_req_one_item_pocket'] ?? null,
$_POST['pack_req_thomson_label'] ?? null,
$_POST['pack_req_contents_label'] ?? null,
$_POST['pack_req_delivery_schedule'] ?? null,
$_POST['forwarder_name'] ?? null,
$_POST['forwarder_code'] ?? null,
$_POST['forwarder_address'] ?? null,
$_POST['forwarder_contact_person'] ?? null,
$_POST['forwarder_phone'] ?? null,
$_POST['forwarder_fax'] ?? null,
$_POST['forwarder_delivery_method'] ?? null,
$_POST['forwarder_delivery_timings'] ?? null,
$_POST['forwarder_delivery_requirements'] ?? null,
$_POST['special_instructions_shipping_mark'] ?? null,
$_POST['special_instructions_fax_documents'] ?? null,
$_POST['special_instructions_details'] ?? null,
$_POST['special_instructions_attention_to'] ?? null,
$_POST['special_instructions_fax_number'] ?? null,
$_POST['remarks'] ?? null
]);
$customer_application_id = $pdo->lastInsertId();
// 2. Insert into customer_contacts
if (isset($_POST['contact']) && is_array($_POST['contact'])) {
$stmt_contact = $pdo->prepare(
'INSERT INTO customer_contacts (customer_application_id, name, email, phone, is_primary) VALUES (?, ?, ?, ?, ?)'
);
foreach ($_POST['contact'] as $index => $contact) {
$is_primary = (isset($contact['is_primary']) && $contact['is_primary'] == '1');
$stmt_contact->execute([
$customer_application_id,
$contact['name'],
$contact['email'],
$contact['phone'],
$is_primary ? 1 : 0
]);
}
}
// 3. Insert into customer_addresses
if (isset($_POST['address']) && is_array($_POST['address'])) {
$stmt_address = $pdo->prepare(
'INSERT INTO customer_addresses (customer_application_id, address_type, address_line_1, address_line_2, city, state, postal_code, country) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
);
foreach ($_POST['address'] as $address) {
$stmt_address->execute([
$customer_application_id,
$address['type'],
$address['line1'],
$address['line2'],
$address['city'],
$address['state'],
$address['postal_code'],
$address['country']
]);
}
}
// 4. 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, email, phone, address) VALUES (?, ?, ?, ?, ?, ?)'
);
foreach ($_POST['trade_reference'] as $trade_ref) {
$stmt_trade_ref->execute([
$customer_application_id,
$trade_ref['company_name'],
$trade_ref['contact_person'],
$trade_ref['email'],
$trade_ref['phone'],
$trade_ref['address']
]);
}
}
// 5. Insert into customer_bank_details
if (isset($_POST['bank_name'])) {
$stmt_bank = $pdo->prepare(
'INSERT INTO customer_bank_details (customer_application_id, bank_name, branch, bsb_number, account_number, account_name) VALUES (?, ?, ?, ?, ?, ?)'
);
$stmt_bank->execute([
$customer_application_id,
$_POST['bank_name'],
$_POST['branch'],
$_POST['bsb_number'],
$_POST['account_number'],
$_POST['account_name']
]);
}
// 6. Handle Signature and Declaration
$signature_path = null;
if (isset($_POST['signature']) && !empty($_POST['signature'])) {
$signature_data = $_POST['signature'];
list($type, $data) = explode(';', $signature_data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
$signature_filename = 'signature_' . $application_id . '_' . time() . '.png';
$signature_path = 'uploads/' . $signature_filename;
file_put_contents($signature_path, $data);
}
$stmt_declar = $pdo->prepare('UPDATE customer_applications SET declaration_text = ?, signature_path = ? WHERE id = ?');
$stmt_declar->execute([
$_POST['declaration_text'],
$signature_path,
$customer_application_id
]);
$pdo->commit();
// Redirect to dashboard with success message
$_SESSION['flash_message'] = [
'type' => 'success',
'message' => 'Customer application (' . $application_id . ') submitted successfully!'
];
header('Location: index.php');
exit();
} catch (PDOException $e) {
$pdo->rollBack();
error_log('Application submission failed: ' . $e->getMessage());
// Redirect back to form with error message
$_SESSION['flash_message'] = [
'type' => 'danger',
'message' => 'There was an error submitting your application. Please try again. ' . $e->getMessage()
];
header('Location: new_application.php');
exit();
}