import { Head, Link, useForm } from '@inertiajs/react';
import { PageTitle, Panel } from '@/components/procurement';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
type Policy = {
id: number;
revision: number;
status: string;
created_by: number;
enabled: boolean;
valid_from: string;
valid_until: string;
};
type Cancellation = {
id: number;
purchase_award_id: number;
created_by: number;
status: string;
reason: string;
review_reason: string | null;
};
type Props = {
role: string;
actorId: number;
policies: Policy[];
reviews: {
purchase_control_policy_id: number;
reviewed_by: number;
decision: string;
}[];
awards: { id: number; requisition_id: number; status: string }[];
cancellations: Cancellation[];
sources: { id: number; number: string; revision_id: number | null }[];
};
const states: Record
Este circuito abrange apenas adjudicações sem ordem emitida. Um pedido pendente suspende decisões e emissão. Ordens, recepções, facturas e pagamentos exigem um circuito próprio.
{role === 'admin' && (Assinaturas:{' '} { reviews.filter( (review) => review.purchase_control_policy_id === policy.id && review.decision === 'approved', ).length } /2
{role === 'admin' && policy.status === 'pending' && policy.id === policies[0]?.id && policy.created_by !== actorId && !reviews.some( (review) => review.purchase_control_policy_id === policy.id && review.reviewed_by === actorId, ) && (Cancelamento{' '} {states[cancellation.status]}:{' '} {cancellation.reason}
{cancellation.review_reason && (Decisão:{' '} {cancellation.review_reason}
)} {role === 'finance' && cancellation.status === 'pending' && cancellation.created_by !== actorId && (Sem cancelamentos aprovados para revisão.
)} {sources.map((source) => ({source.number}
{source.revision_id ? ( Abrir nova requisição ) : (