Assets from purchase invoice lines, straight-line depreciation/amortization with salvage value, disposals, and [Asset Mgmt] sources in Batch GL Entries. Green third workspace with an app access guard.
180 lines
6.9 KiB
PHP
180 lines
6.9 KiB
PHP
<?php
|
|
session_start();
|
|
require '../config.php';
|
|
require '../include_header.php';
|
|
?>
|
|
|
|
<body>
|
|
<?php require '../include_topbar.php'; ?>
|
|
<?php require '../include_sidebar_asset.php'; ?>
|
|
|
|
<main id="content" class="content py-15">
|
|
<div class="container-fluid">
|
|
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="d-flex align-items-center mb-5 gap-3">
|
|
<a href="<?php echo $server_url?>asset/categories.php" class="btn btn-light btn-sm">
|
|
<i class="ti ti-arrow-left me-1"></i>Back
|
|
</a>
|
|
<h1 class="fs-3 mb-0">Manage Asset Category</h1>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row" id="categoryForm">
|
|
<div class="col-lg-8">
|
|
<div class="card">
|
|
<div class="card-body p-6">
|
|
|
|
<input type="hidden" id="id">
|
|
|
|
<div class="row g-4">
|
|
<div class="col-md-3">
|
|
<label class="form-label">Code <span class="text-danger">*</span></label>
|
|
<input type="text" class="form-control" id="category_code" placeholder="e.g. IT" required>
|
|
</div>
|
|
<div class="col-md-5">
|
|
<label class="form-label">Name <span class="text-danger">*</span></label>
|
|
<input type="text" class="form-control" id="category_name" placeholder="e.g. Computer equipment" required>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<label class="form-label">Status</label>
|
|
<select class="form-select" id="status">
|
|
<option value="1">Active</option>
|
|
<option value="0">Inactive</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<label class="form-label">Asset Class <span class="text-danger">*</span></label>
|
|
<select class="form-select" id="asset_class" required>
|
|
<option value="tangible">Tangible — straight-line depreciation</option>
|
|
<option value="intangible">Intangible — straight-line amortization</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">Default Useful Life (months) <span class="text-danger">*</span></label>
|
|
<input type="number" class="form-control" id="useful_life_months" min="1" max="1200" step="1" value="60" required>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<h2 class="fs-6 mb-0 mt-2">GL Accounts</h2>
|
|
<p class="text-muted small mb-0">Used when Accounting posts this category's entries from Batch GL Entries.</p>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">Asset Cost Account <span class="text-danger">*</span></label>
|
|
<select class="form-select" id="cost_account_code" required></select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><span class="label-accum">Accumulated Depreciation</span> Account <span class="text-danger">*</span></label>
|
|
<select class="form-select" id="accum_account_code" required></select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label"><span class="label-expense">Depreciation</span> Expense Account <span class="text-danger">*</span></label>
|
|
<select class="form-select" id="expense_account_code" required></select>
|
|
</div>
|
|
<div class="col-md-6"></div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">Gain on Disposal Account <span class="text-danger">*</span></label>
|
|
<select class="form-select" id="gain_account_code" required></select>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label">Loss on Disposal Account <span class="text-danger">*</span></label>
|
|
<select class="form-select" id="loss_account_code" required></select>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<label class="form-label">Description</label>
|
|
<textarea class="form-control" id="description" rows="2" placeholder="Optional"></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="d-flex gap-2 mt-5">
|
|
<button class="btn btn-primary" onclick="manage_category();" id="btn_submit" data-min-role="admin">Create Category</button>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</main>
|
|
|
|
<?php require '../include_ending.php'; ?>
|
|
<script src="<?php echo $server_url?>assets/js/asset.js"></script>
|
|
|
|
<script>
|
|
var category_id = <?php echo (int)($_GET['id'] ?? 0); ?>;
|
|
var accounts = [];
|
|
|
|
var ACCOUNT_SELECTS = {
|
|
cost_account_code: ['asset'],
|
|
accum_account_code: ['asset'],
|
|
expense_account_code: ['expense'],
|
|
gain_account_code: ['revenue'],
|
|
loss_account_code: ['expense']
|
|
};
|
|
|
|
function fill_account_selects(values) {
|
|
Object.keys(ACCOUNT_SELECTS).forEach(function(field) {
|
|
$('#' + field).html(account_options(accounts, ACCOUNT_SELECTS[field], (values || {})[field] || ''));
|
|
});
|
|
}
|
|
|
|
function update_class_labels() {
|
|
var intangible = $('#asset_class').val() === 'intangible';
|
|
$('.label-accum').text(intangible ? 'Accumulated Amortization' : 'Accumulated Depreciation');
|
|
$('.label-expense').text(intangible ? 'Amortization' : 'Depreciation');
|
|
}
|
|
|
|
function manage_category() {
|
|
return ajax_request({
|
|
url: server_url + 'asset/api/engine/manage_category.php',
|
|
autoPrepare: true,
|
|
checkRequired: 1,
|
|
action: 'manage',
|
|
onSuccess: function() {
|
|
window.location.href = server_url + 'asset/categories.php';
|
|
}
|
|
});
|
|
}
|
|
|
|
function retrieve_for_edit() {
|
|
if (!category_id) return Promise.resolve();
|
|
return ajax_request({
|
|
url: server_url + 'asset/api/engine/retrieve_category.php',
|
|
autoPrepare: true,
|
|
checkRequired: 0,
|
|
action: 'read',
|
|
data: { id: category_id },
|
|
onSuccess: function(res) {
|
|
var c = res.output;
|
|
$('#id').val(c.id);
|
|
$('#category_code').val(c.category_code);
|
|
$('#category_name').val(c.category_name);
|
|
$('#asset_class').val(c.asset_class);
|
|
$('#useful_life_months').val(c.useful_life_months);
|
|
$('#description').val(c.description || '');
|
|
$('#status').val(c.status);
|
|
fill_account_selects(c);
|
|
update_class_labels();
|
|
$('#btn_submit').text('Update Category');
|
|
}
|
|
});
|
|
}
|
|
|
|
$('#asset_class').on('change', update_class_labels);
|
|
|
|
$(async function() {
|
|
try {
|
|
await load_posting_accounts(function(rows) { accounts = rows; fill_account_selects({}); });
|
|
await retrieve_for_edit();
|
|
} catch (e) { console.log(e); }
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|