feat(workshop): add vehicle from new order modal too
The '+ Nuevo' vehicle button is now available in both the edit and new service order modals.
This commit is contained in:
@@ -22,6 +22,7 @@ var Workshop = (function() {
|
|||||||
var selectedEditCustomer = null;
|
var selectedEditCustomer = null;
|
||||||
var vehicleSearchTimer = null;
|
var vehicleSearchTimer = null;
|
||||||
var selectedEditVehicle = null;
|
var selectedEditVehicle = null;
|
||||||
|
var newVehicleContext = null;
|
||||||
var currentView = 'list';
|
var currentView = 'list';
|
||||||
var currentPage = 1;
|
var currentPage = 1;
|
||||||
var perPage = 25;
|
var perPage = 25;
|
||||||
@@ -704,7 +705,8 @@ var Workshop = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function openNewVehicleModal() {
|
function openNewVehicleModal(context) {
|
||||||
|
newVehicleContext = context || 'edit';
|
||||||
document.getElementById('newVehicleModal').classList.add('is-open');
|
document.getElementById('newVehicleModal').classList.add('is-open');
|
||||||
document.getElementById('nvPlate').value = '';
|
document.getElementById('nvPlate').value = '';
|
||||||
document.getElementById('nvVIN').value = '';
|
document.getElementById('nvVIN').value = '';
|
||||||
@@ -715,6 +717,10 @@ var Workshop = (function() {
|
|||||||
document.getElementById('nvOwner').value = '';
|
document.getElementById('nvOwner').value = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openNewVehicleModalFromNewOrder() {
|
||||||
|
openNewVehicleModal('new');
|
||||||
|
}
|
||||||
|
|
||||||
function closeNewVehicleModal() {
|
function closeNewVehicleModal() {
|
||||||
document.getElementById('newVehicleModal').classList.remove('is-open');
|
document.getElementById('newVehicleModal').classList.remove('is-open');
|
||||||
}
|
}
|
||||||
@@ -734,14 +740,27 @@ var Workshop = (function() {
|
|||||||
year: document.getElementById('nvYear').value ? parseInt(document.getElementById('nvYear').value, 10) : null,
|
year: document.getElementById('nvYear').value ? parseInt(document.getElementById('nvYear').value, 10) : null,
|
||||||
color: document.getElementById('nvColor').value.trim() || null,
|
color: document.getElementById('nvColor').value.trim() || null,
|
||||||
owner_name: document.getElementById('nvOwner').value.trim() || null,
|
owner_name: document.getElementById('nvOwner').value.trim() || null,
|
||||||
branch_id: currentOrder ? currentOrder.branch_id : null
|
branch_id: (currentOrder ? currentOrder.branch_id : null) || (window.POS_USER ? window.POS_USER.branch_id : null)
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
var res = await api('POST', '/vehicles', payload);
|
var res = await api('POST', '/vehicles', payload);
|
||||||
var label = plate + (payload.make ? ' · ' + payload.make : '') + (payload.model ? ' ' + payload.model : '');
|
var label = plate + (payload.make ? ' · ' + payload.make : '') + (payload.model ? ' ' + payload.model : '');
|
||||||
|
if (newVehicleContext === 'new') {
|
||||||
|
var sel = document.getElementById('noVehicle');
|
||||||
|
var opt = document.createElement('option');
|
||||||
|
opt.value = res.id;
|
||||||
|
opt.textContent = label.trim();
|
||||||
|
sel.appendChild(opt);
|
||||||
|
sel.value = res.id;
|
||||||
|
// also add to cached vehicles array if present
|
||||||
|
if (typeof vehicles !== 'undefined') {
|
||||||
|
vehicles.push({id: res.id, plate: plate, vin: vin, make: payload.make, model: payload.model, year: payload.year, color: payload.color, owner_name: payload.owner_name});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
selectedEditVehicle = {id: res.id, label: label.trim()};
|
selectedEditVehicle = {id: res.id, label: label.trim()};
|
||||||
document.getElementById('eoVehicleSearch').value = selectedEditVehicle.label;
|
document.getElementById('eoVehicleSearch').value = selectedEditVehicle.label;
|
||||||
document.getElementById('eoVehicleId').value = res.id;
|
document.getElementById('eoVehicleId').value = res.id;
|
||||||
|
}
|
||||||
toast('Vehículo creado');
|
toast('Vehículo creado');
|
||||||
closeNewVehicleModal();
|
closeNewVehicleModal();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -1159,6 +1178,7 @@ var Workshop = (function() {
|
|||||||
searchCustomersForSO: searchCustomersForSO,
|
searchCustomersForSO: searchCustomersForSO,
|
||||||
searchVehiclesForSO: searchVehiclesForSO,
|
searchVehiclesForSO: searchVehiclesForSO,
|
||||||
openNewVehicleModal: openNewVehicleModal,
|
openNewVehicleModal: openNewVehicleModal,
|
||||||
|
openNewVehicleModalFromNewOrder: openNewVehicleModalFromNewOrder,
|
||||||
closeNewVehicleModal: closeNewVehicleModal,
|
closeNewVehicleModal: closeNewVehicleModal,
|
||||||
saveNewVehicle: saveNewVehicle,
|
saveNewVehicle: saveNewVehicle,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<meta name="theme-color" content="#F5A623" />
|
<meta name="theme-color" content="#F5A623" />
|
||||||
<link rel="shortcut icon" type="image/png" href="/pos/static/pwa/icon-192.png" />
|
<link rel="shortcut icon" type="image/png" href="/pos/static/pwa/icon-192.png" />
|
||||||
|
|
||||||
<link rel="stylesheet" href="/pos/static/css/workshop.css?v=37">
|
<link rel="stylesheet" href="/pos/static/css/workshop.css?v=38">
|
||||||
<style>
|
<style>
|
||||||
.so-notes-grid { display: grid; grid-template-columns: 120px 1fr; gap: var(--space-2); align-items: start; }
|
.so-notes-grid { display: grid; grid-template-columns: 120px 1fr; gap: var(--space-2); align-items: start; }
|
||||||
.so-notes-grid .form-label { margin: 0; padding-top: var(--space-2); }
|
.so-notes-grid .form-label { margin: 0; padding-top: var(--space-2); }
|
||||||
@@ -190,7 +190,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label class="form-label" for="noVehicle">Vehículo</label>
|
<label class="form-label" for="noVehicle">Vehículo</label>
|
||||||
<select class="form-input" id="noVehicle"></select>
|
<div style="display:flex;gap:var(--space-2);">
|
||||||
|
<select class="form-input" id="noVehicle" style="flex:1;"></select>
|
||||||
|
<button class="btn btn--secondary" type="button" onclick="Workshop.openNewVehicleModalFromNewOrder()">+ Nuevo</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label class="form-label" for="noMechanic">Mecánico asignado</label>
|
<label class="form-label" for="noMechanic">Mecánico asignado</label>
|
||||||
@@ -266,7 +269,7 @@
|
|||||||
<input class="form-input" id="eoVehicleSearch" autocomplete="off" placeholder="Buscar por placa..." oninput="Workshop.searchVehiclesForSO()" />
|
<input class="form-input" id="eoVehicleSearch" autocomplete="off" placeholder="Buscar por placa..." oninput="Workshop.searchVehiclesForSO()" />
|
||||||
<div id="eoVehicleResults" style="display:none;position:absolute;z-index:10;top:100%;left:0;right:0;max-height:180px;overflow-y:auto;background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 4px 12px rgba(0,0,0,.15);"></div>
|
<div id="eoVehicleResults" style="display:none;position:absolute;z-index:10;top:100%;left:0;right:0;max-height:180px;overflow-y:auto;background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 4px 12px rgba(0,0,0,.15);"></div>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn--secondary" type="button" onclick="Workshop.openNewVehicleModal()">+ Nuevo</button>
|
<button class="btn btn--secondary" type="button" onclick="Workshop.openNewVehicleModal('edit')">+ Nuevo</button>
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" id="eoVehicleId" />
|
<input type="hidden" id="eoVehicleId" />
|
||||||
</div>
|
</div>
|
||||||
@@ -429,7 +432,7 @@
|
|||||||
<script src="/pos/static/js/pos-utils.js?v=33" defer></script>
|
<script src="/pos/static/js/pos-utils.js?v=33" defer></script>
|
||||||
<script src="/pos/static/js/sidebar.js?v=36" defer></script>
|
<script src="/pos/static/js/sidebar.js?v=36" defer></script>
|
||||||
<script src="/pos/static/js/offline-banner.js" defer></script>
|
<script src="/pos/static/js/offline-banner.js" defer></script>
|
||||||
<script src="/pos/static/js/workshop.js?v=37" defer></script>
|
<script src="/pos/static/js/workshop.js?v=38" defer></script>
|
||||||
<script>if('serviceWorker' in navigator){navigator.serviceWorker.register('/pos/sw.js',{scope:'/pos/'});}</script>
|
<script>if('serviceWorker' in navigator){navigator.serviceWorker.register('/pos/sw.js',{scope:'/pos/'});}</script>
|
||||||
<script src="/pos/static/js/pwa-install.js" defer></script>
|
<script src="/pos/static/js/pwa-install.js" defer></script>
|
||||||
<script src="/pos/static/js/chat.js" defer></script>
|
<script src="/pos/static/js/chat.js" defer></script>
|
||||||
|
|||||||
Reference in New Issue
Block a user