73 lines
2.1 KiB
Vue
73 lines
2.1 KiB
Vue
<template>
|
|
<div class="container-fluid py-4">
|
|
<div class="row">
|
|
<div class="col-lg-8 mx-auto">
|
|
<div class="card">
|
|
<div class="card-header pb-0 p-3">
|
|
<div class="d-flex justify-content-between align-items-center">
|
|
<h6 class="mb-0">Créer un nouvel avoir</h6>
|
|
<soft-button
|
|
color="secondary"
|
|
variant="outline"
|
|
size="sm"
|
|
@click="goBack"
|
|
>
|
|
<i class="fas fa-arrow-left me-2"></i>Retour
|
|
</soft-button>
|
|
</div>
|
|
</div>
|
|
<div class="card-body p-3">
|
|
<new-avoir-form @submit="handleSubmit" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { useRouter } from "vue-router";
|
|
import NewAvoirForm from "@/components/molecules/Avoir/NewAvoirForm.vue";
|
|
import SoftButton from "@/components/SoftButton.vue";
|
|
import { useAvoirStore } from "@/stores/avoirStore";
|
|
import { useNotificationStore } from "@/stores/notification";
|
|
|
|
const router = useRouter();
|
|
const avoirStore = useAvoirStore();
|
|
const notificationStore = useNotificationStore();
|
|
|
|
const goBack = () => {
|
|
router.back();
|
|
};
|
|
|
|
const handleSubmit = async (formData) => {
|
|
try {
|
|
const payload = {
|
|
client_id: formData.clientId,
|
|
invoice_id: formData.invoiceId,
|
|
avoir_number: formData.number,
|
|
status: formData.status,
|
|
avoir_date: formData.date,
|
|
reason_type: formData.reason,
|
|
reason_description: formData.reasonDetail,
|
|
lines: formData.lines.map((line) => ({
|
|
description: line.designation,
|
|
quantity: line.quantity,
|
|
unit_price: line.priceHt,
|
|
tva_rate: 0,
|
|
})),
|
|
};
|
|
|
|
await avoirStore.createAvoir(payload);
|
|
notificationStore.success(
|
|
"Succès",
|
|
`Avoir créé avec succès: ${formData.number}`
|
|
);
|
|
router.push("/avoirs");
|
|
} catch (err) {
|
|
console.error("Error creating avoir:", err);
|
|
notificationStore.error("Erreur", "Erreur lors de la création de l'avoir");
|
|
}
|
|
};
|
|
</script>
|