feat: mejorar pos movil y cierre de jornada
This commit is contained in:
@@ -26,9 +26,13 @@
|
||||
<div v-if="resumen">
|
||||
<div class="mb-2">Ventas: ${{ resumen.totalVentas }}</div>
|
||||
<div class="mb-2">Gastos: ${{ resumen.totalGastos }}</div>
|
||||
<div class="mb-2 font-weight-bold">Saldo esperado: ${{ jornadaAbierta ? jornadaAbierta.baseInicial + resumen.totalVentas - resumen.totalGastos : 0 }}</div>
|
||||
<div class="mb-2 font-weight-bold">Saldo esperado en efectivo: ${{ saldoEsperadoEfectivo.toLocaleString() }}</div>
|
||||
</div>
|
||||
<v-btn @click="cerrar" color="error" block class="mt-2" :disabled="!jornadaAbierta">Cerrar Jornada (generar cuadre)</v-btn>
|
||||
<v-text-field v-model.number="saldoRealEfectivo" type="number" label="Efectivo contado (obligatorio)" prefix="$" class="mt-4" />
|
||||
<v-text-field v-model.number="totalQRBanco" type="number" label="Dinero en banco por QR (opcional)" prefix="$" />
|
||||
<v-alert v-if="saldoRealEfectivo !== null && resumen" :type="diferenciaEfectivo === 0 ? 'success' : 'warning'" variant="tonal" class="mb-2">Diferencia de efectivo: ${{ diferenciaEfectivo.toLocaleString() }}</v-alert>
|
||||
<v-alert v-if="cierreError" :type="cierreCompletado ? 'success' : 'error'" variant="tonal" class="mb-2">{{ cierreError }}</v-alert>
|
||||
<v-btn @click="cerrar" color="error" block class="mt-2" :disabled="!jornadaAbierta || saldoRealEfectivo < 0" prepend-icon="mdi-lock-check">Cerrar caja y jornada</v-btn>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-col>
|
||||
@@ -37,14 +41,21 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { JornadaService } from '@toldo/services';
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import { JornadaService, CuadreService } from '@toldo/services';
|
||||
|
||||
const service = new JornadaService();
|
||||
const cuadreService = new CuadreService();
|
||||
const jornadaAbierta = ref<any>(null);
|
||||
const responsablesStr = ref('');
|
||||
const baseInicial = ref(0);
|
||||
const resumen = ref<any>(null);
|
||||
const saldoRealEfectivo = ref<number | null>(null);
|
||||
const totalQRBanco = ref<number | null>(null);
|
||||
const cierreError = ref('');
|
||||
const cierreCompletado = ref(false);
|
||||
const saldoEsperadoEfectivo = ref(0);
|
||||
const diferenciaEfectivo = computed(() => saldoRealEfectivo.value === null ? 0 : saldoRealEfectivo.value - saldoEsperadoEfectivo.value);
|
||||
|
||||
function formatFecha(d: any) {
|
||||
try { return new Date(d).toLocaleString(); } catch { return d; }
|
||||
@@ -54,8 +65,11 @@ async function cargar() {
|
||||
jornadaAbierta.value = await service.getJornadaAbierta();
|
||||
if (jornadaAbierta.value) {
|
||||
resumen.value = await service.getResumenJornada(jornadaAbierta.value.id);
|
||||
const cuadre = await cuadreService.calcularCuadreDelDia(jornadaAbierta.value.fecha, jornadaAbierta.value.baseInicial);
|
||||
saldoEsperadoEfectivo.value = cuadre.saldoEsperadoEfectivo ?? 0;
|
||||
} else {
|
||||
resumen.value = null;
|
||||
saldoEsperadoEfectivo.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,10 +89,14 @@ async function abrir() {
|
||||
|
||||
async function cerrar() {
|
||||
if (!jornadaAbierta.value) return;
|
||||
cierreError.value = '';
|
||||
cierreCompletado.value = false;
|
||||
if (saldoRealEfectivo.value === null || saldoRealEfectivo.value === undefined || saldoRealEfectivo.value < 0) { cierreError.value = 'El efectivo contado es obligatorio.'; return; }
|
||||
try {
|
||||
const cid = await service.cerrarJornada(jornadaAbierta.value.id);
|
||||
const cid = await service.cerrarJornada(jornadaAbierta.value.id, Number(saldoRealEfectivo.value), totalQRBanco.value === null ? undefined : Number(totalQRBanco.value));
|
||||
await cargar();
|
||||
alert(`Jornada cerrada. Cuadre: ${cid}`);
|
||||
cierreCompletado.value = true;
|
||||
cierreError.value = `Cierre de caja y jornada completado: ${cid}`;
|
||||
} catch (e: any) {
|
||||
alert(e.message);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user