diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 21789ceb70..70af7c9a62 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -768,13 +768,40 @@ void StdCmdSaveAs::activated(int iMsg) return; } - // SaveAs uses current origin (allows saving to different origin) - FileOrigin* origin = OriginManager::instance()->currentOrigin(); - if (!origin) { + auto* mgr = OriginManager::instance(); + FileOrigin* currentOrigin = mgr->currentOrigin(); + FileOrigin* docOrigin = mgr->originForDocument(doc); + + if (!currentOrigin) { return; } - origin->saveDocumentAsInteractive(doc); + // Determine workflow based on document and target origins + OriginType currentType = currentOrigin->type(); + OriginType docType = docOrigin ? docOrigin->type() : OriginType::Local; + + if (docOrigin == currentOrigin || !docOrigin) { + // Same origin or new document - standard SaveAs + currentOrigin->saveDocumentAsInteractive(doc); + } + else if (currentType == OriginType::PLM && docType == OriginType::Local) { + // Local → PLM: Migration workflow + // The PLM origin's saveDocumentAsInteractive should handle this + currentOrigin->saveDocumentAsInteractive(doc); + } + else if (currentType == OriginType::Local && docType == OriginType::PLM) { + // PLM → Local: Export workflow + // Use local origin to save without PLM tracking + currentOrigin->saveDocumentAsInteractive(doc); + } + else if (currentType == OriginType::PLM && docType == OriginType::PLM) { + // PLM → Different PLM: Transfer workflow + currentOrigin->saveDocumentAsInteractive(doc); + } + else { + // Default: use current origin + currentOrigin->saveDocumentAsInteractive(doc); + } } bool StdCmdSaveAs::isActive()