Files
wms-app/app/setting/company.php
T
2026-04-27 10:50:31 +07:00

418 lines
18 KiB
PHP

<?php
session_start();
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 &amp; 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">
<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>