import { router, useLocalSearchParams } from 'expo-router'; import { useState } from 'react'; import { ScrollView, Text, TextInput, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import type { PurchaseOrderDto } from '@siop/shared'; import { useCreatePurchaseOrder, usePart } from '@/api/ressources'; import { BoutonTel, Carte, EnteteFiche, LigneInfo } from '@/composants/ui'; import { useTokens } from '@/theme/tokens'; const fmtMAD = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'MAD' }); /** Nouveau BC pré-rempli depuis l'alerte stock — maquette écran 6. Une * seule ligne (cette pièce) : le bon de commande multi-lignes détaillé * reste au web (D4). Confirmation explicite après création (trouvé en * recette 02/08 : la navigation instantanée en cas de succès ne donnait * aucun retour visible — deux BC créés côté serveur sans que le référent * s'en aperçoive dans l'app). */ export default function PageCommander() { const t = useTokens(); const { id } = useLocalSearchParams<{ id: string }>(); const { data: piece } = usePart(id); const creation = useCreatePurchaseOrder(); const manquant = piece ? Math.max(piece.threshold - piece.stock, 1) : 1; const [quantite, setQuantite] = useState(String(manquant)); const [prix, setPrix] = useState(''); const [cree, setCree] = useState(null); if (!piece || !piece.supplierId) return null; if (cree) { return ( L'envoi au fournisseur se fait depuis le web pour l'instant. (router.canGoBack() ? router.back() : router.replace('/stock'))} /> ); } const prixDefaut = piece.lastUnitPrice != null ? String(piece.lastUnitPrice) : ''; const prixSaisi = prix || prixDefaut; const qte = Number(quantite); const pu = Number(prixSaisi); const valide = qte > 0 && pu >= 0 && Number.isFinite(qte) && Number.isFinite(pu); return ( Quantité Prix unitaire (MAD) {creation.isError ? ( {creation.error.message} ) : null} creation.mutate( { supplierId: piece.supplierId!, lines: [{ partId: piece.id, quantity: qte, unitPrice: pu }], }, { onSuccess: (bc) => setCree(bc) }, ) } /> ); }