feat(config): allow admin/owner to delete branches
Some checks failed
CI / lint-and-test (3.11) (push) Has been cancelled
CI / lint-and-test (3.13) (push) Has been cancelled

- Added DELETE /pos/api/config/branches/<id> that soft-deletes the branch (is_active=false).

- Restricted to owner/admin; main branch cannot be deleted.

- Added 'Eliminar' button in the branches grid for admin/owner.
This commit is contained in:
2026-06-30 17:57:29 +00:00
parent e9cfb2e756
commit 7e3205b03a
3 changed files with 49 additions and 1 deletions

View File

@@ -4,6 +4,9 @@
const Config = (() => {
const API = '/pos/api/config';
const user = window.POS_USER || {};
const canDeleteBranch = (user.role === 'owner' || user.role === 'admin');
// Cache for branches (used by employee modal selector)
let _branches = [];
@@ -183,6 +186,7 @@ const Config = (() => {
+ '</div>'
+ '<div class="device-card__actions">'
+ '<button class="btn btn--ghost btn--sm" onclick="Config.editBranch(' + b.id + ')">Editar</button>'
+ (canDeleteBranch && b.is_active && !b.is_main ? '<button class="btn btn--danger btn--sm" style="margin-left:4px;" onclick="Config.deleteBranch(' + b.id + ')">Eliminar</button>' : '')
+ '</div></div>';
});
@@ -238,6 +242,22 @@ const Config = (() => {
openBranchModal(b);
}
async function deleteBranch(branchId) {
var b = _branches.find(function(x) { return x.id === branchId; });
if (!b) { toast('Sucursal no encontrada', 'error'); return; }
if (b.is_main) { toast('No se puede eliminar la sucursal principal', 'error'); return; }
if (!confirm('¿Eliminar la sucursal "' + b.name + '"? Se marcará como inactiva.')) return;
try {
var res = await fetch(API + '/branches/' + branchId, { method: 'DELETE', headers: headers() });
var json = await res.json().catch(function() { return {}; });
if (!res.ok) throw new Error(json.error || res.statusText);
toast('Sucursal eliminada');
loadBranches();
} catch (e) {
toast(e.message || 'Error al eliminar sucursal', 'error');
}
}
async function saveBranch(data) {
var branchId = document.getElementById('branch-id').value;
var url = API + '/branches' + (branchId ? '/' + branchId : '');
@@ -1047,6 +1067,7 @@ const Config = (() => {
return {
init, setTheme, selectThemeOption, loadAllowedBrands, saveAllowedBrands,
loadBranches, loadEmployees, saveBranch, saveEmployee, editEmployee, deleteEmployee,
deleteBranch,
loadBusiness, saveBusiness, saveTaxParams, saveAll,
loadCurrency, saveCurrency,
loadVehicleCompatSource, saveVehicleCompatSource,