Aktuelles Projekt kopieren
Produktlinie
Standard
|Expert
Betriebsart
CLOUD ABO
|ON-PREMISES
Module
Leistung & CRM
Budget & Teilprojekt
Fremdkosten
Ressourcenplanung
Business Intelligence
Die Zusatzfunktion Projektvorlagen ermöglicht es, Projekte aufgrund von hinterlegten Projektvorlagen zu erstellen. Falls Sie mit Projektvorlagen arbeiten möchten, empfehlen wir Ihnen, diese Zusatzfunktion zu laden.
Das Script in diesem Artikel erstellt ein neues Projekt in Vertec aufgrund des aktuellen Projekts:
Version | Beschreibung | Script |
---|---|---|
6.1.0.10 | Kopiert auch BearbeiterLinks, Keys und Tags. Der Projektcode wird über die Inputbox abgefragt. | ProjektKopieren61.py |
6.7 | xResourcePlanPhases werden nicht mehr kopiert (das Member wurde mit Vertec 6.7 entfernt). Script für Vertec Versionen vor 6.7.0.12 sowie zur Ausführung im Script Editor für alle Versionen. |
projektkopieren67.py |
6.7.0.12 | Verwendet selectedobjects . | CopyProject.py |
Auf dem Projekt, das kopiert werden soll. Bitte verwenden Sie jeweils das Script, welches zu Ihrer aktuellen Vertec Version passt.
Der (neuste) Scripttext wird hier dargestellt, um die Volltextsuche zu ermöglichen.
# coding: windows-1252 # #---Bezeichnung: Projekt kopieren # Klassen: Projekt # Selectedobjectsscript: Yes # Condexpression: self->size = 1 # EventType: Kein # EventClass: # EventMembers: # ExtendedRights: # #---Erstellt ein neues Projekt und kopiert die Einstellungen vom Quellen-Projekt #---2017-12-17, UOS: Aus Vorlage erstellt #---09.08.2018, sth: Kopiert nun auch BearbeiterLinks, CustomLinks, Keys und Tags. # Der Projektcode wird über die Inputbox abgefragt. #---29.11.2018, tka: Subphasenhandling: Projekt wird nur gesetzt, wenn Parentphase. #---30.01.2019, sth: Bugfix beim Kopieren von Zusatzfeldern. #---04.09.2020, sth: Bugfix beim Kopieren von CustomLinks. #---27.01.2022, sth: Script aus Config Set Projektvorlagen extrahiert. Budgetwerte auf Bearbeiterphaselinks werden ebenfalls kopiert. #---19.09.2023, sth: Member xResourcePlanPhases aus Projektvorgaben entfernt (wurde mit Vertec 6.7 gelöscht). # 10.10.2024, sth: Angepasst an selectedobjects und Vertec 6.7.0.12 def copySubPhasen(phase, parentPhase, project): subPhasen = phase.subphasen if len(subPhasen) > 0: for subPhase in subPhasen: newPhase = copyPhase(subPhase, parentPhase, project) copySubPhasen(subPhase, newPhase, project) def copyPhase(sourcePhase, parentPhase, project): # if there exists already an active phase with same code, do not copy, but return existing phase to copy subphases existingPhase = None if parentPhase: existingPhase = parentPhase.eval("subphasen->select(aktiv)->select(code='{}')->first".format(sourcePhase.code)) elif project: existingPhase = project.eval("phasen->select(aktiv)->select(code='{}')->first".format(sourcePhase.code)) if existingPhase: return existingPhase else: newPhase = vtcapp.createobject("Projektphase") # set parentphase or project if parentPhase: newPhase.parentphase = parentPhase else: newPhase.projekt = project # set attributes newPhase.code = sourcePhase.code newPhase.xAktiv = sourcePhase.Aktiv newPhase.verantwortlicher = sourcePhase.verantwortlicher newPhase.verrechenbar = sourcePhase.verrechenbar newPhase.status = sourcePhase.status newPhase.Beschreibung = sourcePhase.Beschreibung newPhase.bemerkung = sourcePhase.bemerkung newPhase.pauschal = sourcePhase.pauschal newPhase.pauschalspesen = sourcePhase.pauschalspesen newPhase.pauschalauslagen = sourcePhase.pauschalauslagen newPhase.orderidx = sourcePhase.orderidx # budget newPhase.xplanMinutenInt = sourcePhase.xplanMinutenInt newPhase.xplanWertExt = sourcePhase.xplanWertExt newPhase.xplanWertInt = sourcePhase.xplanWertInt newPhase.xplanKostenLeistung = sourcePhase.xplanKostenLeistung newPhase.xplanSpesenWert = sourcePhase.xplanSpesenWert newPhase.xplanKostenSpesen = sourcePhase.xplanKostenSpesen newPhase.xplanAuslagenWert = sourcePhase.xplanAuslagenWert newPhase.xplanKostenAuslagen = sourcePhase.xplanKostenAuslagen # set prerequisites newPhase.ansatzext = sourcePhase.ansatzext newPhase.ansatzkosten = sourcePhase.ansatzkosten newPhase.ansatzbearbeiter = sourcePhase.ansatzbearbeiter newPhase.tagespauschaleext = sourcePhase.tagespauschaleext newPhase.bearbeiterzuordnung = sourcePhase.bearbeiterzuordnung newPhase.taetigkeitenzuordnung = sourcePhase.taetigkeitenzuordnung newPhase.spesentypenzuordnung = sourcePhase.spesentypenzuordnung newPhase.auslagetypenzuordnung = sourcePhase.auslagetypenzuordnung # accounting newPhase.ertragskontoleistungen = sourcePhase.ertragskontoleistungen newPhase.ertragskontospesen = sourcePhase.ertragskontospesen newPhase.ertragskontoauslagen = sourcePhase.ertragskontoauslagen newPhase.kostenstelleleistungen = sourcePhase.kostenstelleleistungen newPhase.kostenstellespesen = sourcePhase.kostenstellespesen newPhase.kostenstelleauslagen = sourcePhase.kostenstelleauslagen # links copyPhaseUserLink(sourcePhase, newPhase) copyPhaseServiceTypes(sourcePhase, newPhase) copyPhaseExpenseTypes(sourcePhase, newPhase) copyPhasePurchaseTypes(sourcePhase, newPhase) # additional fields copyAdditionalFields(sourcePhase, newPhase) return newPhase def copyPhaseExpenseTypes(sourcePhase, newPhase): phaseExpenseTypeList = sourcePhase.eval("self.spesentypphaselink") for sourcePhaseExpenseType in phaseExpenseTypeList: newPhaseExpenseType = vtcapp.createobject("SpesenTypPhaseLink") newPhaseExpenseType.minPlanWertSpesen = sourcePhaseExpenseType.minPlanWertSpesen newPhaseExpenseType.maxPlanWertSpesen = sourcePhaseExpenseType.maxPlanWertSpesen newPhaseExpenseType.planKostenSpesen = sourcePhaseExpenseType.planKostenSpesen newPhaseExpenseType.planWertSpesen = sourcePhaseExpenseType.planWertSpesen newPhaseExpenseType.wertproeinheitext = sourcePhaseExpenseType.wertproeinheitext newPhaseExpenseType.wertproeinheitint = sourcePhaseExpenseType.wertproeinheitint newPhaseExpenseType.wertproeinheitkosten = sourcePhaseExpenseType.wertproeinheitkosten newPhaseExpenseType.bezeichnung = sourcePhaseExpenseType.bezeichnung newPhaseExpenseType.offertText = sourcePhaseExpenseType.offertText newPhaseExpenseType.phasen = newPhase newPhaseExpenseType.spesentypen = sourcePhaseExpenseType.spesentypen newPhaseExpenseType.bearbeiter = sourcePhaseExpenseType.bearbeiter # additional fields copyAdditionalFields(sourcePhaseExpenseType, newPhaseExpenseType) def copyPhasePurchaseTypes(sourcePhase, newPhase): PhasePurchaseTypeList = sourcePhase.eval("self.auslagetypphaselink") for sourcePhasePurchaseType in PhasePurchaseTypeList: newPhasePurchaseType = vtcapp.createobject("AuslageTypPhaseLink") newPhasePurchaseType.minPlanWertAuslagen = sourcePhasePurchaseType.minPlanWertAuslagen newPhasePurchaseType.PlanWertAuslagen = sourcePhasePurchaseType.PlanWertAuslagen newPhasePurchaseType.maxPlanWertAuslagen = sourcePhasePurchaseType.maxPlanWertAuslagen newPhasePurchaseType.PlanKostenAuslagen = sourcePhasePurchaseType.PlanKostenAuslagen newPhasePurchaseType.maxPlanKostenAuslagen = sourcePhasePurchaseType.maxPlanKostenAuslagen newPhasePurchaseType.minPlanKostenAuslagen = sourcePhasePurchaseType.minPlanKostenAuslagen newPhasePurchaseType.wertproeinheitext = sourcePhasePurchaseType.wertproeinheitext newPhasePurchaseType.wertproeinheitint = sourcePhasePurchaseType.wertproeinheitint newPhasePurchaseType.wertproeinheitkosten = sourcePhasePurchaseType.wertproeinheitkosten newPhasePurchaseType.bezeichnung = sourcePhasePurchaseType.bezeichnung newPhasePurchaseType.offertText = sourcePhasePurchaseType.offertText newPhasePurchaseType.phasen = newPhase newPhasePurchaseType.auslagetypen = sourcePhasePurchaseType.auslagetypen newPhasePurchaseType.bearbeiter = sourcePhasePurchaseType.bearbeiter # additional fields copyAdditionalFields(sourcePhasePurchaseType, newPhasePurchaseType) def copyPhaseUserLink(sourcePhase, newPhase): PhaseUserList = sourcePhase.eval("bearbeiterphasen") for sourcePhaseUser in PhaseUserList: newPhaseUser = vtcapp.createobject("BearbeiterPhaseLink") newPhaseUser.Ansatzkosten = sourcePhaseUser.Ansatzkosten newPhaseUser.AnsatzBearbeiter = sourcePhaseUser.AnsatzBearbeiter newPhaseUser.TagesPauschaleExt = sourcePhaseUser.TagesPauschaleExt newPhaseUser.AnsatzExt = sourcePhaseUser.AnsatzExt newPhaseUser.Bearbeiter = sourcePhaseUser.Bearbeiter newPhaseUser.xplanWertExt = sourcePhaseUser.xplanWertExt newPhaseUser.xplanwertint = sourcePhaseUser.xplanwertint newPhaseUser.xplanminutenint = sourcePhaseUser.xplanminutenint newPhaseUser.xplanauslagenwert = sourcePhaseUser.xplanauslagenwert newPhaseUser.xplankostenauslagen = sourcePhaseUser.xplankostenauslagen newPhaseUser.xplankostenleistung = sourcePhaseUser.xplankostenleistung newPhaseUser.xplankostenspesen = sourcePhaseUser.xplankostenspesen newPhaseUser.xplanspesenwert = sourcePhaseUser.xplanspesenwert newPhaseUser.bearbeiterstufe = sourcePhaseUser.bearbeiterstufe newPhaseUser.Phase = newPhase # additional fields copyAdditionalFields(sourcePhaseUser, newPhaseUser) def copyPhaseServiceTypes(sourcePhase, newPhase): PhaseServiceTypeList = sourcePhase.eval("taetigkeitphaselink") for sourcePhaseServiceType in PhaseServiceTypeList: newPhaseServiceType = vtcapp.createobject("TaetigkeitPhaseLink") newPhaseServiceType.planWertLeist = sourcePhaseServiceType.planWertLeist newPhaseServiceType.minPlanWertLeist = sourcePhaseServiceType.minPlanWertLeist newPhaseServiceType.stueckwert = sourcePhaseServiceType.stueckwert newPhaseServiceType.tagesPauschaleExt = sourcePhaseServiceType.tagesPauschaleExt newPhaseServiceType.bezeichnung = sourcePhaseServiceType.bezeichnung newPhaseServiceType.ansatzExt = sourcePhaseServiceType.ansatzExt newPhaseServiceType.planMinutenInt = sourcePhaseServiceType.planMinutenInt newPhaseServiceType.maxPlanWertLeist = sourcePhaseServiceType.maxPlanWertLeist newPhaseServiceType.ansatzKosten = sourcePhaseServiceType.ansatzKosten newPhaseServiceType.ansatzBearbeiter = sourcePhaseServiceType.ansatzBearbeiter newPhaseServiceType.offertText = sourcePhaseServiceType.offertText newPhaseServiceType.phasen = newPhase newPhaseServiceType.taetigkeiten = sourcePhaseServiceType.taetigkeiten newPhaseServiceType.bearbeiter = sourcePhaseServiceType.bearbeiter # additional fields copyAdditionalFields(sourcePhaseServiceType, newPhaseServiceType) def copyAdditionalFields (source, target): additionalFieldList = source.eval("zusatzfelder.metaZusatzfeld") for additionalField in additionalFieldList: additionalFieldname = additionalField.eval("fieldname") sourceValue = getattr(source, additionalFieldname) setattr(target, additionalFieldname, sourceValue) def copyUserLink(source, target): # when a project is created, the current user is automatically assigned and has to be deleted manually for user in list(target.evalocl("bearbeiterlink")): user.delete() userList = source.evalocl("bearbeiterlink") for sourceUser in userList: newUser = vtcapp.createobject("BearbeiterLink") newUser.Ansatzkosten = sourceUser.Ansatzkosten newUser.AnsatzBearbeiter = sourceUser.AnsatzBearbeiter newUser.TagesPauschaleExt = sourceUser.TagesPauschaleExt newUser.AnsatzExt = sourceUser.AnsatzExt newUser.Bearbeiter = sourceUser.Bearbeiter newUser.Bearbeiterstufe = sourceUser.Bearbeiterstufe target.bearbeiterlinks.append(newUser) def copyCustomLinks(source, target): # customlink oldLinks = vtcapp.getwithsql("Customlink", "customlinks={}".format(source.objid), "") for oldLink in oldLinks: newLink = vtcapp.createobject("Customlink") newLink.linktyp = oldLink.linktyp newLink.customlinks = target newLink.fromcustomlinks = oldLink.fromcustomlinks # fromcustomlink oldLinks = vtcapp.getwithsql("Customlink", "fromcustomlinks={}".format(source.objid), "") for oldLink in oldLinks: newLink = vtcapp.createobject("Customlink") newLink.linktyp = oldLink.linktyp newLink.customlinks = oldLink.customlinks newLink.fromcustomlinks = target def copyProjectSettings(source, target): # set attributes target.kunde = source.kunde target.bemerkung = source.bemerkung target.betreffend = source.betreffend target.beschrieb = source.beschrieb target.tarifstufe = source.tarifstufe target.waehrung = source.waehrung target.rechnungsIntervall = source.rechnungsIntervall target.xrechnungsadresse = source.xrechnungsadresse target.sprache = source.sprache target.kontaktPerson = source.kontaktPerson target.xmwsttyp = source.xmwsttyp target.hb = source.hb target.hbstv = source.hbstv target.sekr = source.sekr target.keys = source.keys target.tags = source.tags target.verflechtungen = source.verflechtungen target.gegenverflechtungen = source.gegenverflechtungen # add counterparties adrlist = target.gegenparteien adrlist += source.gegenparteien # budget target.xplanMinutenInt = source.xplanMinutenInt target.xplanWertExt = source.xplanWertExt target.xplanWertInt = source.xplanWertInt target.xplanKostenLeistung = source.xplanKostenLeistung target.xplanSpesenWert = source.xplanSpesenWert target.xplanKostenSpesen = source.xplanKostenSpesen target.xplanAuslagenWert = source.xplanAuslagenWert target.xplanKostenAuslagen = source.xplanKostenAuslagen # invoice settings target.rechRabatt = source.rechRabatt target.rechPauschal = source.rechPauschal target.rechRabattProzent = source.rechRabattProzent target.rechPauschalSpesenProzent = source.rechPauschalSpesenProzent target.rechPauschalBetrag = source.rechPauschalBetrag target.rechPauschalSpesen = source.rechPauschalSpesen target.rechPauschalSpesenBetrag = source.rechPauschalSpesenBetrag target.rechProforma = source.rechProforma target.rechUseSpesen = source.rechUseSpesen target.rechRabattBetrag = source.rechRabattBetrag # prerequisites target.xansatzext = source.xansatzext target.xansatzkosten = source.xansatzkosten target.xansatzbearbeiter = source.xansatzbearbeiter target.xtagesPauschaleExt = source.xtagesPauschaleExt target.xauslagenWeiterleiten = source.xauslagenWeiterleiten target.xdebikondition = source.xdebikondition # payment conditions target.xDebiKondition = source.xDebiKondition # accounting target.xDatenbankFibu = source.xDatenbankFibu target.xLoginFibu = source.xLoginFibu target.xPasswordFibu = source.xPasswordFibu target.xPersonenkonto =source.xPersonenkonto target.xErtragskontoLeistungen = source.xErtragskontoLeistungen target.xErtragskontoSpesen = source.xErtragskontoSpesen target.xErtragskontoAuslagen = source.xErtragskontoAuslagen target.xDebitorkonto = source.xDebitorkonto target.xVorschusskonto = source.xVorschusskonto target.xKostenstelleLeistungen = source.xKostenstelleLeistungen target.xKostenstelleSpesen = source.xKostenstelleSpesen target.xKostenstelleAuslagen = source.xKostenstelleAuslagen target.xZahlungstyp = source.xZahlungstyp # additional fields copyAdditionalFields (source, target) # assigned users copyUserLink(source, target) # custom links copyCustomLinks(source, target) def main(projectlist): for Vprojekt in projectlist: projektcode = vtcapp.inputbox('Vertec','Geben Sie den Code des neuen Projekts an','') if projektcode: # Erzeuge das neue Projekt projekt = vtcapp.createobject("Projekt") projekt.code = projektcode # Projekteinstellungen übernehmen copyProjectSettings(Vprojekt, projekt) # Phasen kopieren, falls vorhanden if Vprojekt.eval("allephasen.list->size>0"): PhasenStufe1 = Vprojekt.phasen for vorlagePhase in PhasenStufe1: newPhase = copyPhase(vorlagePhase, vorlagePhase.parentphase, projekt) copySubPhasen(vorlagePhase, newPhase, projekt) # Stichwörter übernehmen Stichwoerter = Vprojekt.eval("ordner->select(parentordner.stichwort)") for StOrdner in Stichwoerter: projekt.ordner.append(StOrdner) vtcapp.showdetailform (projekt) main(selectedobjects)