Checkpoint: Ajout du champ Abonnement (OUI/NON) aux factures avec détection automatique par mots-clés et édition directe dans la liste
This commit is contained in:
@@ -409,6 +409,7 @@ export default function Invoices() {
|
||||
<TableHead>Service</TableHead>
|
||||
<TableHead>Type achat</TableHead>
|
||||
<TableHead>Ventilation</TableHead>
|
||||
<TableHead>Abonnement</TableHead>
|
||||
<TableHead>Score</TableHead>
|
||||
<TableHead>Statut</TableHead>
|
||||
<TableHead className="w-32">Actions</TableHead>
|
||||
@@ -509,6 +510,21 @@ export default function Invoices() {
|
||||
<option value="__ADD_NEW__" className="font-semibold text-blue-600">➜ Ajouter...</option>
|
||||
</select>
|
||||
</TableCell>
|
||||
<TableCell className="text-sm">
|
||||
<select
|
||||
value={invoice.isSubscription ? "OUI" : "NON"}
|
||||
onChange={(e) => {
|
||||
updateFieldMutation.mutate({
|
||||
id: invoice.id,
|
||||
data: { isSubscription: e.target.value === "OUI" ? 1 : 0 },
|
||||
});
|
||||
}}
|
||||
className="w-full px-2 py-1 border rounded text-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||
>
|
||||
<option value="NON">NON</option>
|
||||
<option value="OUI">OUI</option>
|
||||
</select>
|
||||
</TableCell>
|
||||
<TableCell>{getQualityBadge(invoice.qualityScore)}</TableCell>
|
||||
<TableCell>{getExportStatusBadge(invoice.exportStatus || "not_exported")}</TableCell>
|
||||
<TableCell>
|
||||
|
||||
@@ -20,6 +20,7 @@ export default function Settings() {
|
||||
const [orderNumberKeywords, setOrderNumberKeywords] = useState("");
|
||||
const [supplierKeywords, setSupplierKeywords] = useState("");
|
||||
const [totalAmountKeywords, setTotalAmountKeywords] = useState("");
|
||||
const [subscriptionKeywords, setSubscriptionKeywords] = useState("");
|
||||
const [sftpHost, setSftpHost] = useState("");
|
||||
const [sftpPort, setSftpPort] = useState(22);
|
||||
const [sftpUsername, setSftpUsername] = useState("");
|
||||
@@ -36,6 +37,7 @@ export default function Settings() {
|
||||
setOrderNumberKeywords(settings.orderNumberKeywords || "");
|
||||
setSupplierKeywords(settings.supplierKeywords || "");
|
||||
setTotalAmountKeywords(settings.totalAmountKeywords || "");
|
||||
setSubscriptionKeywords(settings.subscriptionKeywords || "");
|
||||
setSftpHost(settings.sftpHost || "");
|
||||
setSftpPort(settings.sftpPort || 22);
|
||||
setSftpUsername(settings.sftpUsername || "");
|
||||
@@ -77,6 +79,7 @@ export default function Settings() {
|
||||
orderNumberKeywords,
|
||||
supplierKeywords,
|
||||
totalAmountKeywords,
|
||||
subscriptionKeywords,
|
||||
sftpHost,
|
||||
sftpPort,
|
||||
sftpUsername,
|
||||
@@ -205,6 +208,20 @@ export default function Settings() {
|
||||
rows={2}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="subscriptionKeywords">Abonnement</Label>
|
||||
<Textarea
|
||||
id="subscriptionKeywords"
|
||||
value={subscriptionKeywords}
|
||||
onChange={(e) => setSubscriptionKeywords(e.target.value)}
|
||||
placeholder="Abonnement, Subscription, Mensuel, Annuel, Recurring"
|
||||
rows={2}
|
||||
/>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Les factures contenant ces mots-clés seront automatiquement marquées comme abonnement
|
||||
</p>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user