419 lines
18 KiB
PHP
419 lines
18 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../session.php';
|
|
require '../config.php';
|
|
require '../include_header.php';
|
|
?>
|
|
|
|
<body>
|
|
<?php require '../include_topbar.php'; ?>
|
|
<?php require '../include_setting_sidebar.php'; ?>
|
|
|
|
<main id="content" class="content py-15">
|
|
<div class="container-fluid">
|
|
|
|
<!-- Page header -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center mb-6 gap-3">
|
|
<div>
|
|
<h1 class="fs-3 mb-1">Company Profile</h1>
|
|
<p class="mb-0">Manage your company information, branding and tax details</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row g-5">
|
|
|
|
<!-- LEFT: Logo / Seal -->
|
|
<div class="col-lg-3 col-12">
|
|
|
|
<!-- Logo card -->
|
|
<div class="card mb-4">
|
|
<div class="card-body p-6 text-center">
|
|
<div class="mb-3">
|
|
<img id="logo_preview"
|
|
src="<?php echo $server_url?>assets/images/logo.svg"
|
|
alt="Company Logo"
|
|
class="rounded border p-2"
|
|
style="width:120px;height:120px;object-fit:contain;">
|
|
</div>
|
|
<p class="text-muted small mb-3">Company Logo</p>
|
|
<label class="btn btn-outline-secondary btn-sm w-100 mb-2">
|
|
<i class="ti ti-upload me-1"></i>Upload Logo
|
|
<input type="file" id="company_logo" accept="image/*" class="d-none">
|
|
</label>
|
|
<button type="button" id="remove_logo_btn"
|
|
class="btn btn-ghost-danger btn-sm w-100 d-none"
|
|
onclick="remove_image('logo')">
|
|
<i class="ti ti-trash me-1"></i>Remove Logo
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Seal card -->
|
|
<div class="card">
|
|
<div class="card-body p-6 text-center">
|
|
<div class="mb-3">
|
|
<img id="seal_preview"
|
|
src="<?php echo $server_url?>assets/images/logo.svg"
|
|
alt="Company Seal"
|
|
class="rounded border p-2"
|
|
style="width:120px;height:120px;object-fit:contain;">
|
|
</div>
|
|
<p class="text-muted small mb-3">Company Seal</p>
|
|
<label class="btn btn-outline-secondary btn-sm w-100 mb-2">
|
|
<i class="ti ti-upload me-1"></i>Upload Seal
|
|
<input type="file" id="company_seal" accept="image/*" class="d-none">
|
|
</label>
|
|
<button type="button" id="remove_seal_btn"
|
|
class="btn btn-ghost-danger btn-sm w-100 d-none"
|
|
onclick="remove_image('seal')">
|
|
<i class="ti ti-trash me-1"></i>Remove Seal
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
</div><!-- /LEFT -->
|
|
|
|
<!-- RIGHT: Tabbed form -->
|
|
<div class="col-lg-9 col-12">
|
|
<div class="card">
|
|
<div class="card-body p-0">
|
|
|
|
<ul class="nav nav-tabs px-6 pt-4" id="companyTabs">
|
|
<li class="nav-item">
|
|
<a class="nav-link active" data-bs-toggle="tab" href="#tab_basic">
|
|
<i class="ti ti-building me-1"></i>Basic Info
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-bs-toggle="tab" href="#tab_address">
|
|
<i class="ti ti-map-pin me-1"></i>Address
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-bs-toggle="tab" href="#tab_tax">
|
|
<i class="ti ti-receipt-tax me-1"></i>Tax & Finance
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-bs-toggle="tab" href="#tab_contact">
|
|
<i class="ti ti-phone me-1"></i>Contact
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="tab-content p-6">
|
|
|
|
<!-- Tab 1: Basic Info -->
|
|
<div class="tab-pane active show" id="tab_basic">
|
|
<div class="row">
|
|
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Company Name (TH)</label>
|
|
<input type="text" class="form-control" id="company_name" placeholder="ชื่อบริษัท">
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Company Name (EN)</label>
|
|
<input type="text" class="form-control" id="company_name2" placeholder="Company Name (English)">
|
|
</div>
|
|
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Nickname / Channel Name</label>
|
|
<input type="text" class="form-control" id="channel_name" placeholder="e.g. my-shop"
|
|
oninput="this.value=this.value.toLowerCase().replace(/[^a-z0-9_-]/g,'')">
|
|
<div class="form-text">Unique identifier. Lowercase, no spaces.</div>
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<label class="form-label">Branch</label>
|
|
<input type="text" class="form-control" id="branch" placeholder="สำนักงานใหญ่">
|
|
</div>
|
|
<div class="col-md-3 mb-3">
|
|
<label class="form-label">Branch No.</label>
|
|
<input type="text" class="form-control" id="branch_no" placeholder="00000">
|
|
</div>
|
|
|
|
<div class="col-md-4 mb-3">
|
|
<label class="form-label">Fiscal Year End</label>
|
|
<select class="form-select" id="fiscal_year">
|
|
<option value="">— Select month —</option>
|
|
<?php for ($m = 1; $m <= 12; $m++): ?>
|
|
<option value="<?php echo str_pad($m, 2, '0', STR_PAD_LEFT); ?>">
|
|
<?php echo date('F', mktime(0,0,0,$m,1)); ?>
|
|
</option>
|
|
<?php endfor; ?>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-4 mb-3">
|
|
<label class="form-label">Currency</label>
|
|
<select class="form-select" id="fx">
|
|
<option value="thb">THB — Thai Baht</option>
|
|
<option value="usd">USD — US Dollar</option>
|
|
<option value="eur">EUR — Euro</option>
|
|
<option value="sgd">SGD — Singapore Dollar</option>
|
|
<option value="myr">MYR — Malaysian Ringgit</option>
|
|
</select>
|
|
</div>
|
|
|
|
</div>
|
|
</div><!-- /tab_basic -->
|
|
|
|
<!-- Tab 2: Address -->
|
|
<div class="tab-pane" id="tab_address">
|
|
<div class="row">
|
|
<div class="col-12 mb-3">
|
|
<label class="form-label">Address</label>
|
|
<textarea class="form-control" id="address" rows="3"
|
|
placeholder="Full address…"></textarea>
|
|
</div>
|
|
<div class="col-12 mb-3">
|
|
<label class="form-label">Address 2 <span class="text-muted">(optional)</span></label>
|
|
<textarea class="form-control" id="address2" rows="2"
|
|
placeholder="Branch / shipping address…"></textarea>
|
|
</div>
|
|
</div>
|
|
</div><!-- /tab_address -->
|
|
|
|
<!-- Tab 3: Tax & Finance -->
|
|
<div class="tab-pane" id="tab_tax">
|
|
<div class="row">
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Tax ID (เลขประจำตัวผู้เสียภาษี)</label>
|
|
<input type="text" class="form-control" id="tax_id"
|
|
placeholder="0-0000-00000-00-0" maxlength="20">
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">PromptPay Number</label>
|
|
<input type="text" class="form-control" id="prompt_pay"
|
|
placeholder="13-digit PromptPay" maxlength="13">
|
|
</div>
|
|
<div class="col-12 mb-3">
|
|
<label class="form-label">Entrepreneur / Owner Name</label>
|
|
<input type="text" class="form-control" id="entrepreneur"
|
|
placeholder="ชื่อผู้ประกอบการ">
|
|
</div>
|
|
</div>
|
|
</div><!-- /tab_tax -->
|
|
|
|
<!-- Tab 4: Contact -->
|
|
<div class="tab-pane" id="tab_contact">
|
|
<div class="row">
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Email</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="ti ti-mail"></i></span>
|
|
<input type="email" class="form-control" id="email"
|
|
placeholder="company@example.com">
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Phone</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="ti ti-phone"></i></span>
|
|
<input type="text" class="form-control" id="phone"
|
|
placeholder="02-xxx-xxxx">
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Fax</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="ti ti-printer"></i></span>
|
|
<input type="text" class="form-control" id="fax"
|
|
placeholder="02-xxx-xxxx">
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Website</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="ti ti-world"></i></span>
|
|
<input type="url" class="form-control" id="website"
|
|
placeholder="https://example.com">
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6 mb-3">
|
|
<label class="form-label">Facebook Page</label>
|
|
<div class="input-group">
|
|
<span class="input-group-text"><i class="ti ti-brand-facebook"></i></span>
|
|
<input type="url" class="form-control" id="facebook_page"
|
|
placeholder="https://facebook.com/yourpage">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- /tab_contact -->
|
|
|
|
</div><!-- /tab-content -->
|
|
</div><!-- /card-body -->
|
|
|
|
<div class="card-footer d-flex justify-content-end gap-2">
|
|
<button class="btn btn-primary" onclick="save_company();">
|
|
<i class="ti ti-device-floppy me-1"></i>Save Changes
|
|
</button>
|
|
</div>
|
|
|
|
</div><!-- /card -->
|
|
</div><!-- /RIGHT -->
|
|
|
|
</div><!-- /row g-5 -->
|
|
</div>
|
|
<?php require '../include_ending.php'; ?>
|
|
</main>
|
|
|
|
|
|
<script>
|
|
// ═══════════════════════════════════════════════════════
|
|
// State
|
|
// ═══════════════════════════════════════════════════════
|
|
const api = '<?php echo $server_url?>setting/api/engine/';
|
|
const img_base = '<?php echo $server_url?>uploads/company/';
|
|
let _logo_action = 'keep'; // 'keep' | 'replace' | 'remove'
|
|
let _seal_action = 'keep';
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════
|
|
// On load
|
|
// ═══════════════════════════════════════════════════════
|
|
$(function () {
|
|
load_company();
|
|
bind_image_input('#company_logo', '#logo_preview', '#remove_logo_btn', v => _logo_action = v);
|
|
bind_image_input('#company_seal', '#seal_preview', '#remove_seal_btn', v => _seal_action = v);
|
|
});
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════
|
|
// Load
|
|
// ═══════════════════════════════════════════════════════
|
|
function load_company() {
|
|
return ajax_request({
|
|
url: api + 'retrieve_company.php',
|
|
autoPrepare: true,
|
|
checkRequired: 0,
|
|
action: 'read',
|
|
onSuccess: function (r) {
|
|
const c = r.output;
|
|
|
|
// Basic info
|
|
$('#company_name').val(c.company_name || '');
|
|
$('#company_name2').val(c.company_name2 || '');
|
|
$('#channel_name').val(c.channel_name || '');
|
|
$('#branch').val(c.branch || '');
|
|
$('#branch_no').val(c.branch_no || '');
|
|
$('#fiscal_year').val(c.fiscal_year || '');
|
|
$('#fx').val(c.fx || 'thb');
|
|
|
|
// Address
|
|
$('#address').val(c.address || '');
|
|
$('#address2').val(c.address2 || '');
|
|
|
|
// Tax & Finance
|
|
$('#tax_id').val(c.tax_id || '');
|
|
$('#prompt_pay').val(c.prompt_pay || '');
|
|
$('#entrepreneur').val(c.entrepreneur || '');
|
|
|
|
// Contact
|
|
$('#email').val(c.email || '');
|
|
$('#phone').val(c.phone || '');
|
|
$('#fax').val(c.fax || '');
|
|
$('#website').val(c.website || '');
|
|
$('#facebook_page').val(c.facebook_page || '');
|
|
|
|
// Images
|
|
if (c.company_logo) {
|
|
$('#logo_preview').attr('src', img_base + c.company_logo);
|
|
$('#remove_logo_btn').removeClass('d-none');
|
|
}
|
|
if (c.company_seal) {
|
|
$('#seal_preview').attr('src', img_base + c.company_seal);
|
|
$('#remove_seal_btn').removeClass('d-none');
|
|
}
|
|
},
|
|
});
|
|
}
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════
|
|
// Save
|
|
// ═══════════════════════════════════════════════════════
|
|
function save_company() {
|
|
const fd = new FormData();
|
|
|
|
// Only files + action flags — all text fields (.form-control / .form-select)
|
|
// are collected automatically by autoPrepare → prepare_form_data()
|
|
fd.append('logo_action', _logo_action);
|
|
fd.append('seal_action', _seal_action);
|
|
const logo_file = $('#company_logo')[0].files[0];
|
|
const seal_file = $('#company_seal')[0].files[0];
|
|
if (logo_file) fd.append('company_logo', logo_file);
|
|
if (seal_file) fd.append('company_seal', seal_file);
|
|
|
|
return ajax_request({
|
|
url: api + 'manage_company.php',
|
|
autoPrepare: true,
|
|
checkRequired: 0,
|
|
action: 'update',
|
|
formData: fd,
|
|
onSuccess: function (r) {
|
|
if (r.company_logo !== undefined) {
|
|
refresh_image_slot(
|
|
'logo', r.company_logo,
|
|
'#logo_preview', '#remove_logo_btn', '#company_logo'
|
|
);
|
|
_logo_action = 'keep';
|
|
}
|
|
if (r.company_seal !== undefined) {
|
|
refresh_image_slot(
|
|
'seal', r.company_seal,
|
|
'#seal_preview', '#remove_seal_btn', '#company_seal'
|
|
);
|
|
_seal_action = 'keep';
|
|
}
|
|
bootbox.alert('Company profile saved.');
|
|
},
|
|
});
|
|
}
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════
|
|
// Image helpers
|
|
// ═══════════════════════════════════════════════════════
|
|
function bind_image_input(input_sel, preview_sel, remove_btn_sel, set_action) {
|
|
$(input_sel).on('change', function () {
|
|
const file = this.files[0];
|
|
if (!file) return;
|
|
const reader = new FileReader();
|
|
reader.onload = e => {
|
|
$(preview_sel).attr('src', e.target.result);
|
|
$(remove_btn_sel).removeClass('d-none');
|
|
set_action('replace');
|
|
};
|
|
reader.readAsDataURL(file);
|
|
});
|
|
}
|
|
|
|
function remove_image(slot) {
|
|
if (slot === 'logo') {
|
|
$('#logo_preview').attr('src', '<?php echo $server_url?>assets/images/logo.svg');
|
|
$('#company_logo').val('');
|
|
$('#remove_logo_btn').addClass('d-none');
|
|
_logo_action = 'remove';
|
|
} else {
|
|
$('#seal_preview').attr('src', '<?php echo $server_url?>assets/images/logo.svg');
|
|
$('#company_seal').val('');
|
|
$('#remove_seal_btn').addClass('d-none');
|
|
_seal_action = 'remove';
|
|
}
|
|
}
|
|
|
|
function refresh_image_slot(slot, filename, preview_sel, remove_btn_sel, input_sel) {
|
|
const fallback = '<?php echo $server_url?>assets/images/logo.svg';
|
|
const src = filename ? img_base + filename + '?t=' + Date.now() : fallback;
|
|
$(preview_sel).attr('src', src);
|
|
filename
|
|
? $(remove_btn_sel).removeClass('d-none')
|
|
: $(remove_btn_sel).addClass('d-none');
|
|
$(input_sel).val('');
|
|
}
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|