feat: botao discreto para resetar revisao e confirmacao flexivel ao gerar pdf e imprimir

This commit is contained in:
2026-09-10 13:41:14 +00:00
parent 69f37c02a8
commit d22366c73f
3 changed files with 76 additions and 6 deletions
+12 -1
View File
@@ -19,6 +19,7 @@ interface PrioridadesPDFProps {
dataModificacao: string;
modificadoPor?: string;
} | null;
onIncrementarRevisao?: () => Promise<boolean>;
}
export const PrioridadesPDF: React.FC<PrioridadesPDFProps> = ({
@@ -27,7 +28,8 @@ export const PrioridadesPDF: React.FC<PrioridadesPDFProps> = ({
itensPorPrioridade,
ofSelecionada,
faseSelecionada,
versaoAtual
versaoAtual,
onIncrementarRevisao
}) => {
const [isGenerating, setIsGenerating] = useState(false);
const [isPrinting, setIsPrinting] = useState(false);
@@ -76,6 +78,15 @@ export const PrioridadesPDF: React.FC<PrioridadesPDFProps> = ({
return;
}
if (onIncrementarRevisao) {
const querSubir = window.confirm(
`Deseja incrementar a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1} para esta impressão?\n\n- Clique em OK para subir a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1}\n- Clique em Cancelar para manter a revisão atual (Rev. ${versaoAtual?.revisao || 0})`
);
if (querSubir) {
await onIncrementarRevisao();
}
}
try {
setIsPrinting(true);
await printProfessionalPDF('prioridades-pdf-content');
@@ -128,6 +128,41 @@ export const useItensPrioridadeFabricacaoFiltrado = () => {
}
};
const resetarRevisao = async (valor: number = 0) => {
if (!ofSelecionada || !faseSelecionada) return false;
try {
const dataModificacao = new Date().toISOString();
const { error } = await supabase
.from('prioridades_fabricacao')
.update({
revisao: valor,
data_ultima_modificacao: dataModificacao
})
.eq('of_number', ofSelecionada)
.eq('etapa_fase', faseSelecionada);
if (error) {
console.error('Erro ao resetar revisão no DB:', error);
toast.error('Erro ao resetar revisão.');
return false;
}
setVersaoAtual(prev => ({
...prev!,
revisao: valor,
dataModificacao: dataModificacao
}));
toast.success(`Revisão resetada para ${valor}`);
return true;
} catch (error) {
console.error('Erro ao resetar revisão:', error);
return false;
}
};
return {
...hookOriginal,
itensPorPrioridade: itensFiltrados,
@@ -135,6 +170,7 @@ export const useItensPrioridadeFabricacaoFiltrado = () => {
faseSelecionada,
versaoAtual,
onFiltroChange: handleFiltroChange,
incrementarRevisao
incrementarRevisao,
resetarRevisao
};
};
+27 -4
View File
@@ -8,7 +8,7 @@ import { useItensPrioridadeFabricacaoFiltrado } from '@/hooks/useItensPrioridade
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { Plus, FileText, RefreshCw, Printer } from 'lucide-react';
import { Plus, FileText, RefreshCw, Printer, X } from 'lucide-react';
import { toast } from 'sonner';
const PrioridadesFabricacao = () => {
@@ -25,7 +25,8 @@ const PrioridadesFabricacao = () => {
faseSelecionada,
versaoAtual,
onFiltroChange,
incrementarRevisao
incrementarRevisao,
resetarRevisao
} = useItensPrioridadeFabricacaoFiltrado();
const [showPecaSelector, setShowPecaSelector] = useState(false);
@@ -53,6 +54,13 @@ const PrioridadesFabricacao = () => {
await refetch();
};
const handleResetarRevisao = async () => {
if (!ofSelecionada || !faseSelecionada) return;
if (window.confirm(`Deseja resetar o número de revisão desta lista de prioridades (OF: ${ofSelecionada} - Fase: ${faseSelecionada}) para 0?`)) {
await resetarRevisao(0);
}
};
const generateTickBoxesHTML = (quantity: number): string => {
if (!quantity || quantity <= 0) return '';
@@ -132,7 +140,10 @@ const PrioridadesFabricacao = () => {
}
let revisaoParaImprimir = versaoAtual?.revisao || 0;
if (window.confirm(`Deseja gerar uma nova revisão (Rev. ${(versaoAtual?.revisao || 0) + 1}) para esta impressão?`)) {
const querSubir = window.confirm(
`Deseja incrementar a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1} para esta impressão?\n\n- Clique em OK para subir a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1}\n- Clique em Cancelar para manter a revisão atual (Rev. ${versaoAtual?.revisao || 0})`
);
if (querSubir) {
const sucesso = await incrementarRevisao();
if (sucesso) {
revisaoParaImprimir += 1;
@@ -425,6 +436,14 @@ const PrioridadesFabricacao = () => {
<div className="flex items-center gap-2">
<span className="text-sm font-medium">Revisão:</span>
<Badge variant="outline">{versaoAtual.revisao}</Badge>
<button
type="button"
onClick={handleResetarRevisao}
className="h-5 w-5 inline-flex items-center justify-center rounded-full text-muted-foreground hover:text-red-600 hover:bg-muted transition-colors ml-0.5"
title="Resetar revisão para 0"
>
<X className="h-3 w-3" />
</button>
</div>
</Card>
)}
@@ -453,7 +472,10 @@ const PrioridadesFabricacao = () => {
variant="outline"
size="sm"
onClick={async () => {
if (window.confirm(`Deseja gerar uma nova revisão (Rev. ${(versaoAtual?.revisao || 0) + 1}) para este PDF?`)) {
const querSubir = window.confirm(
`Deseja incrementar a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1} antes de gerar o PDF?\n\n- Clique em OK para subir a revisão para Rev. ${(versaoAtual?.revisao || 0) + 1}\n- Clique em Cancelar para manter a revisão atual (Rev. ${versaoAtual?.revisao || 0})`
);
if (querSubir) {
await incrementarRevisao();
}
setShowPrioridadesPDF(true);
@@ -511,6 +533,7 @@ const PrioridadesFabricacao = () => {
ofSelecionada={ofSelecionada}
faseSelecionada={faseSelecionada}
versaoAtual={versaoAtual}
onIncrementarRevisao={incrementarRevisao}
/>
</div>
</StandardPageLayout>