@@ -55,7 +55,9 @@ import Wizard.Model.Questionnaire.QuestionnaireDetailQuestionnaire
5555import Wizard.Model.Questionnaire.QuestionnaireDetailSettings
5656import Wizard.Model.Questionnaire.QuestionnaireEvent
5757import Wizard.Model.Questionnaire.QuestionnaireEventLenses ()
58+ import Wizard.Model.Questionnaire.QuestionnaireFile
5859import Wizard.Model.Questionnaire.QuestionnairePerm
60+ import Wizard.Model.Questionnaire.QuestionnaireReply
5961import Wizard.Model.Tenant.Config.TenantConfig
6062import Wizard.S3.Document.DocumentS3
6163import Wizard.Service.KnowledgeModel.KnowledgeModelService
@@ -178,13 +180,15 @@ createQuestionnaireFromTemplate reqDto =
178180 , updatedAt = now
179181 }
180182 :: Questionnaire
181- newQtnEvents <- cloneQuestinonaireEvents newQtnUuid originQtnEvents
182183 insertQuestionnaire newQtn
183- insertQuestionnaireEvents newQtnEvents
184+ clonedFiles <- cloneQuestionnaireFiles originQtn. uuid newQtn. uuid
185+ newQtnEvents <- cloneQuestinonaireEvents newQtnUuid originQtnEvents
186+ let newQtnEventsWithReplacedFiles = replaceQuestinonaireEventsWithNewFiles clonedFiles newQtnEvents
187+ insertQuestionnaireEvents newQtnEventsWithReplacedFiles
184188 duplicateCommentThreads reqDto. questionnaireUuid newQtnUuid
185189 state <- getQuestionnaireState newQtnUuid pkg. pId
186190 permissionDtos <- traverse enhanceQuestionnairePerm newQtn. permissions
187- qtnCtn <- compileQuestionnaire newQtnEvents
191+ qtnCtn <- compileQuestionnaire newQtnEventsWithReplacedFiles
188192 return $ toSimpleDTO newQtn pkg state permissionDtos
189193
190194cloneQuestionnaire :: U. UUID -> AppContextM QuestionnaireDTO
@@ -209,9 +213,11 @@ cloneQuestionnaire cloneUuid =
209213 , updatedAt = now
210214 }
211215 :: Questionnaire
212- newQtnEvents <- cloneQuestinonaireEvents newQtnUuid originQtnEvents
213216 insertQuestionnaire newQtn
214- insertQuestionnaireEvents newQtnEvents
217+ clonedFiles <- cloneQuestionnaireFiles originQtn. uuid newQtn. uuid
218+ newQtnEvents <- cloneQuestinonaireEvents newQtnUuid originQtnEvents
219+ let newQtnEventsWithReplacedFiles = replaceQuestinonaireEventsWithNewFiles clonedFiles newQtnEvents
220+ insertQuestionnaireEvents newQtnEventsWithReplacedFiles
215221 duplicateCommentThreads cloneUuid newQtnUuid
216222 state <- getQuestionnaireState newQtnUuid pkg. pId
217223 permissionDtos <- traverse enhanceQuestionnairePerm newQtn. permissions
@@ -427,3 +433,20 @@ cloneQuestinonaireEvents newQtnUuid =
427433 newEventUuid <- liftIO generateUuid
428434 return $ setQuestionnaireUuid (setUuid event newEventUuid) newQtnUuid
429435 )
436+
437+ replaceQuestinonaireEventsWithNewFiles :: [(QuestionnaireFile , QuestionnaireFile )] -> [QuestionnaireEvent ] -> [QuestionnaireEvent ]
438+ replaceQuestinonaireEventsWithNewFiles clonedFiles qtnEvents =
439+ let findFile :: U. UUID -> Maybe (QuestionnaireFile , QuestionnaireFile )
440+ findFile fileUuid = L. find (\ (oldFile, newFile) -> oldFile. uuid == fileUuid) clonedFiles
441+ replaceEvent :: QuestionnaireEvent -> QuestionnaireEvent
442+ replaceEvent (SetReplyEvent' event) =
443+ let value' =
444+ case event. value of
445+ r@ FileReply {.. } ->
446+ case findFile r. fValue of
447+ Just (oldFile, newFile) -> r {fValue = newFile. uuid}
448+ _ -> r
449+ r -> r
450+ in SetReplyEvent' (event {value = value'})
451+ replaceEvent event' = event'
452+ in fmap replaceEvent qtnEvents
0 commit comments