Amended request creates new submission entry with 'Amended Request' label
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -8,6 +8,7 @@ const labels = {
|
|||||||
completed: 'Completed',
|
completed: 'Completed',
|
||||||
initial: 'Initial',
|
initial: 'Initial',
|
||||||
revision: 'Revision',
|
revision: 'Revision',
|
||||||
|
amendment: 'Amended',
|
||||||
team: 'Team',
|
team: 'Team',
|
||||||
client: 'Client',
|
client: 'Client',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -93,27 +93,33 @@ export default function RequestDetail() {
|
|||||||
setSaving(true);
|
setSaving(true);
|
||||||
|
|
||||||
if (action === 'edit') {
|
if (action === 'edit') {
|
||||||
const latestSub = submissions[submissions.length - 1];
|
const newVersion = (task.current_version || 0) + 1;
|
||||||
const updatedDescription = latestSub
|
await supabase.from('tasks').update({ current_version: newVersion }).eq('id', id);
|
||||||
? `${latestSub.description}\n\n─── Edited ${new Date().toLocaleDateString()} ───\n${revisionForm.description}`
|
|
||||||
: revisionForm.description;
|
|
||||||
|
|
||||||
await supabase.from('submissions').update({
|
const { data: newSub } = await supabase.from('submissions').insert({
|
||||||
description: updatedDescription,
|
task_id: id,
|
||||||
deadline: revisionForm.deadline || latestSub?.deadline || null,
|
version_number: newVersion + 1,
|
||||||
}).eq('id', latestSub.id);
|
type: 'amendment',
|
||||||
|
service_type: task.title,
|
||||||
|
deadline: revisionForm.deadline || null,
|
||||||
|
description: revisionForm.description,
|
||||||
|
submitted_by: currentUser.id,
|
||||||
|
submitted_by_name: currentUser.name,
|
||||||
|
}).select().single();
|
||||||
|
|
||||||
if (revisionFiles.length > 0) {
|
if (newSub && revisionFiles.length > 0) {
|
||||||
for (const file of revisionFiles) {
|
for (const file of revisionFiles) {
|
||||||
const path = `${id}/${Date.now()}_${file.name}`;
|
const path = `${id}/${Date.now()}_${file.name}`;
|
||||||
const { data: uploaded } = await supabase.storage.from('submissions').upload(path, file);
|
const { data: uploaded } = await supabase.storage.from('submissions').upload(path, file);
|
||||||
if (uploaded) {
|
if (uploaded) {
|
||||||
await supabase.from('submission_files').insert({
|
await supabase.from('submission_files').insert({
|
||||||
submission_id: latestSub.id, name: file.name, storage_path: path, size: file.size,
|
submission_id: newSub.id, name: file.name, storage_path: path, size: file.size,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTask(t => ({ ...t, current_version: newVersion }));
|
||||||
} else {
|
} else {
|
||||||
const newVersion = (task.current_version || 0) + 1;
|
const newVersion = (task.current_version || 0) + 1;
|
||||||
await supabase.from('tasks').update({ status: 'not_started', current_version: newVersion }).eq('id', id);
|
await supabase.from('tasks').update({ status: 'not_started', current_version: newVersion }).eq('id', id);
|
||||||
@@ -307,6 +313,11 @@ export default function RequestDetail() {
|
|||||||
const delivery = sub.delivery;
|
const delivery = sub.delivery;
|
||||||
return (
|
return (
|
||||||
<div key={sub.id} className="version-item">
|
<div key={sub.id} className="version-item">
|
||||||
|
{sub.type === 'amendment' && (
|
||||||
|
<div style={{ fontSize: 11, fontWeight: 700, textTransform: 'uppercase', color: 'var(--accent)', marginBottom: 8, letterSpacing: 0.5 }}>
|
||||||
|
Amended Request
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div className="version-header">
|
<div className="version-header">
|
||||||
<div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>
|
<div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>
|
||||||
<div className="version-number">{vLabel(sub.version_number - 1)}</div>
|
<div className="version-number">{vLabel(sub.version_number - 1)}</div>
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ create table public.submissions (
|
|||||||
id uuid default gen_random_uuid() primary key,
|
id uuid default gen_random_uuid() primary key,
|
||||||
task_id uuid references public.tasks(id) on delete cascade not null,
|
task_id uuid references public.tasks(id) on delete cascade not null,
|
||||||
version_number integer not null,
|
version_number integer not null,
|
||||||
type text not null check (type in ('initial', 'revision')) default 'initial',
|
type text not null check (type in ('initial', 'revision', 'amendment')) default 'initial',
|
||||||
service_type text default '',
|
service_type text default '',
|
||||||
deadline date,
|
deadline date,
|
||||||
description text default '',
|
description text default '',
|
||||||
|
|||||||
Reference in New Issue
Block a user