Script: Projekt kopieren

Produktlinien: Expert
Module: Leistung & CRM
Erstellt: 27.09.2013, Änderung: 12.12.2017
Python Script für Version 6.0 hinzugefügt.
Mehr ansehen

Inhalt

Erstellt ein neues Projekt und übernimmt die Werte eines bestehenden Projektes.

Als Projektleiter wird der Benutzer eingefügt, der das Script ausführt.

Es werden alle Werte ausser Leistungen, Spesen und Vorschüsse übernommen. Auch inhaltliche Angaben wie Ordnerreferenzen werden nicht übernommen.

Übernimmt die Phasen in der richtigen Reihenfolge sowie die verschiedenen Zuordnungen und Berechtigungen. Ausserdem werden Phasenbudgets übernommen (ohne BudgetChange-Objekte).

Der Name des neuen Projektes kann eingegeben werden. Das neue Projekt wird inaktiv gesetzt.

Ausführen

Auf dem Projekt, das kopiert werden soll. Bitte verwenden Sie jeweils das Script, welches zu Ihrer aktuellen Vertec Version passt.

Versionen

Vertec VersionBesonderheiten VersionScript
Version 3.1.7.x - 3.1.8.x

GenericLinks werden nicht übernommen.

Der Projektcode wird kopiert und mit "(Kopie)" versehen. Es kann noch kein Name angegeben werden.

ProjektKopieren30.txt
Version 4.0 bis Version 4.3.

Übernimmt die Phasen in der richtigen Reihenfolge sowie die Bearbeiterzuordnungen und zugeordneten Tätigkeiten.

Der Name des neuen Projektes kann eingegeben werden. Das neue Projekt wird inaktiv gesetzt.

ProjektKopieren40.txt
Ab Version 4.3Das Feld privDocPfad gibt es nicht mehrProjektKopieren43.txt
Ab Version 5.0Berücksichtigt die Zuordnung von Auslagen- und Spesentypen zu PhasenProjektKopieren50.txt
Ab Version 5.2Berücksichtigt die neue Zuordnung von Tätigkeiten zu Phasen. Kopiert neu Zusatzfelder.ProjektKopieren52.txt
Ab Version 5.2.6Berücksichtigt das Member xMwstTypProjektKopieren526.txt
Ab Version 5.3Berücksichtigt planWertInt (Budgetwert internes Honorar)ProjektKopieren53.txt
Ab Version 5.5Kopiert neu auch GenericLinks.ProjektKopieren55.txt
Ab Version 5.6

Berücksichtigt Bearbeiterstufe auf BearbeiterPhaseLink und die Zuordnung Bearbeiter auf ProjekteintragstypPhaseLink.

Das Kopieren von CustomLinks ist zur Zeit noch nicht möglich.

ProjektKopieren56.txt
Ab Version 5.8

BearbeiterLink (neu als UserEintrag), ProjektberichtLink kopiert auch berichtName und automatischDrucken. Ruft die Funktionen msgbox und inputbox direkt auf dem Vertec Objekt auf. Kopiert auch CustomLinks.

ProjektKopieren58.txt
Ab Version 6.0

Member der automatischen Rechnungsstellung entfernt, Verflechtungen 1 und 2 sowie Gegenverflechtungen 1 und 2 zusammengeführt; Berichte und Projektberichtlinks entfernt.

ProjektKopieren60.txt
ProjektKopieren60.py

Scripttext

Ein Scripttext wird hier dargestellt, um die Volltextsuche zu ermöglichen. Es handelt sich dabei um den neusten Scripttext, aktuell Python Script ab Version 6.0.

# coding: windows-1252
#
#---Bezeichnung: Projekt kopieren
#   Klassen: Projekt
#   CondExpression:
#   ObjectScript: Yes
#   ContainerScript: N
#   EventType: -
#   EventClass: -
#   EventMembers: -
#   ExtendedRights: N
#
#---Erstellt ein neues Projekt und kopiert die Einstellungen vom Quellen-Projekt
#---2017-12-17, UOS: Aus Vorlage erstellt

from vtcapp import msgbox, createobject, beginsystemcontext, endsystemcontext

def main(Vprojekt):

    def copySubPhasen(phase, parentPhase):
        subPhasen = phase.subphasen
        if len(subPhasen) > 0:
            for subPhase in subPhasen:
                newPhase = copyPhase(subPhase, parentPhase, projekt)
                copySubPhasen(subPhase, newPhase)

    def copyPhase(vorlagePhase, parentPhase, projekt):
        newPhase = createobject("Projektphase")
        newPhase.projekt = projekt
        # Phasen unterhalb des Projektes haben keine Parentphase.
        if parentPhase != None:
            newPhase.parentphase = parentPhase
        newPhase.code = vorlagePhase.code
        newPhase.xAktiv = vorlagePhase.Aktiv
        newPhase.verrechenbar = vorlagePhase.verrechenbar
        newPhase.status = vorlagePhase.status
        newPhase.Beschreibung = vorlagePhase.Beschreibung
        newPhase.bemerkung = vorlagePhase.bemerkung
        newPhase.pauschal = vorlagePhase.pauschal
        newPhase.pauschalspesen = vorlagePhase.pauschalspesen
        newPhase.pauschalauslagen = vorlagePhase.pauschalauslagen
        newPhase.orderidx = vorlagePhase.orderidx

        # Vorgaben
        newPhase.ansatzext = vorlagePhase.ansatzext
        newPhase.ansatzkosten = vorlagePhase.ansatzkosten
        newPhase.ansatzbearbeiter = vorlagePhase.ansatzbearbeiter
        newPhase.tagespauschaleext = vorlagePhase.tagespauschaleext
        newPhase.bearbeiterzuordnung = vorlagePhase.bearbeiterzuordnung
        newPhase.taetigkeitenzuordnung = vorlagePhase.taetigkeitenzuordnung
        newPhase.spesentypenzuordnung = vorlagePhase.spesentypenzuordnung
        newPhase.auslagetypenzuordnung = vorlagePhase.auslagetypenzuordnung

        # Buchhaltung
        newPhase.ertragskontoleistungen = vorlagePhase.ertragskontoleistungen
        newPhase.ertragskontospesen = vorlagePhase.ertragskontospesen
        newPhase.ertragskontoauslagen = vorlagePhase.ertragskontoauslagen
        newPhase.kostenstelleleistungen = vorlagePhase.kostenstelleleistungen
        newPhase.kostenstellespesen = vorlagePhase.kostenstellespesen
        newPhase.kostenstelleauslagen = vorlagePhase.kostenstelleauslagen

        #Links
        CopyPhasenBearbeiter(vorlagePhase, newPhase)
        CopyPhasenTaetigkeiten(vorlagePhase, newPhase)
        CopyPhasenSpesentypen(vorlagePhase, newPhase)
        CopyPhasenAuslagentypen(vorlagePhase, newPhase)

        # Zusatzfelder
        CopyZusatzfelder(vorlagePhase, newPhase)

        return newPhase

    def CopyPhasenSpesentypen(oldphase, newphase):
        PhaseSpesentypenListe = oldphase.eval("self.spesentypphaselink")
        for oldPhasenSpesentyp in PhaseSpesentypenListe:
            newPhasenSpesentyp = createobject("SpesenTypPhaseLink")
            newPhasenSpesentyp.minPlanWertSpesen = oldPhasenSpesentyp.minPlanWertSpesen
            newPhasenSpesentyp.maxPlanWertSpesen = oldPhasenSpesentyp.maxPlanWertSpesen
            newPhasenSpesentyp.planKostenSpesen = oldPhasenSpesentyp.planKostenSpesen
            newPhasenSpesentyp.planWertSpesen = oldPhasenSpesentyp.planWertSpesen
            newPhasenSpesentyp.wertproeinheitext = oldPhasenSpesentyp.wertproeinheitext
            newPhasenSpesentyp.wertproeinheitint = oldPhasenSpesentyp.wertproeinheitint
            newPhasenSpesentyp.wertproeinheitkosten = oldPhasenSpesentyp.wertproeinheitkosten
            newPhasenSpesentyp.bezeichnung = oldPhasenSpesentyp.bezeichnung
            newPhasenSpesentyp.offertText = oldPhasenSpesentyp.offertText
            newPhasenSpesentyp.phasen = newphase
            newPhasenSpesentyp.spesentypen = oldPhasenSpesentyp.spesentypen
            newPhasenSpesentyp.bearbeiter = oldPhasenSpesentyp.bearbeiter

    def CopyPhasenAuslagentypen(oldphase, newphase):
        PhaseAuslagentypenListe = oldphase.eval("self.auslagetypphaselink")
        for oldPhasenAuslagentyp in PhaseAuslagentypenListe:
            newPhasenAuslagentyp = createobject("AuslageTypPhaseLink")
            newPhasenAuslagentyp.minPlanWertAuslagen = oldPhasenAuslagentyp.minPlanWertAuslagen
            newPhasenAuslagentyp.PlanWertAuslagen = oldPhasenAuslagentyp.PlanWertAuslagen
            newPhasenAuslagentyp.maxPlanWertAuslagen = oldPhasenAuslagentyp.maxPlanWertAuslagen
            newPhasenAuslagentyp.PlanKostenAuslagen = oldPhasenAuslagentyp.PlanKostenAuslagen
            newPhasenAuslagentyp.maxPlanKostenAuslagen = oldPhasenAuslagentyp.maxPlanKostenAuslagen
            newPhasenAuslagentyp.minPlanKostenAuslagen = oldPhasenAuslagentyp.minPlanKostenAuslagen
            newPhasenAuslagentyp.wertproeinheitext = oldPhasenAuslagentyp.wertproeinheitext
            newPhasenAuslagentyp.wertproeinheitint = oldPhasenAuslagentyp.wertproeinheitint
            newPhasenAuslagentyp.wertproeinheitkosten = oldPhasenAuslagentyp.wertproeinheitkosten
            newPhasenAuslagentyp.bezeichnung = oldPhasenAuslagentyp.bezeichnung
            newPhasenAuslagentyp.offertText = oldPhasenAuslagentyp.offertText
            newPhasenAuslagentyp.phasen = newphase
            newPhasenAuslagentyp.auslagetypen = oldPhasenAuslagentyp.auslagetypen
            newPhasenAuslagentyp.bearbeiter = oldPhasenAuslagentyp.bearbeiter

    def CopyPhasenBearbeiter(oldphase, newphase):
        PhaseBearbeiterListe = oldphase.eval("bearbeiterphasen")
        for oldPhasenBearbeiter in PhaseBearbeiterListe:
            newPhasenBearbeiter = createobject("BearbeiterPhaseLink")
            newPhasenBearbeiter.Ansatzkosten = oldPhasenBearbeiter.Ansatzkosten
            newPhasenBearbeiter.AnsatzBearbeiter = oldPhasenBearbeiter.AnsatzBearbeiter
            newPhasenBearbeiter.TagesPauschaleExt = oldPhasenBearbeiter.TagesPauschaleExt
            newPhasenBearbeiter.AnsatzExt = oldPhasenBearbeiter.AnsatzExt
            newPhasenBearbeiter.Bearbeiter = oldPhasenBearbeiter.Bearbeiter
            newPhasenBearbeiter.Phase = newphase

    def CopyPhasenTaetigkeiten(oldphase, newphase):
        PhaseTaetigkeitenListe = oldphase.eval("taetigkeitphaselink")
        for oldPhasenTaetigkeit in PhaseTaetigkeitenListe:
            newPhasenTaetigkeit = createobject("TaetigkeitPhaseLink")
            newPhasenTaetigkeit.planWertLeist = oldPhasenTaetigkeit.planWertLeist
            newPhasenTaetigkeit.minPlanWertLeist = oldPhasenTaetigkeit.minPlanWertLeist
            newPhasenTaetigkeit.stueckwert = oldPhasenTaetigkeit.stueckwert
            newPhasenTaetigkeit.tagesPauschaleExt = oldPhasenTaetigkeit.tagesPauschaleExt
            newPhasenTaetigkeit.bezeichnung = oldPhasenTaetigkeit.bezeichnung
            newPhasenTaetigkeit.ansatzExt = oldPhasenTaetigkeit.ansatzExt
            newPhasenTaetigkeit.planMinutenInt = oldPhasenTaetigkeit.planMinutenInt
            newPhasenTaetigkeit.maxPlanWertLeist = oldPhasenTaetigkeit.maxPlanWertLeist
            newPhasenTaetigkeit.ansatzKosten = oldPhasenTaetigkeit.ansatzKosten
            newPhasenTaetigkeit.ansatzBearbeiter = oldPhasenTaetigkeit.ansatzBearbeiter
            newPhasenTaetigkeit.offertText = oldPhasenTaetigkeit.offertText
            newPhasenTaetigkeit.phasen = newphase
            newPhasenTaetigkeit.taetigkeiten = oldPhasenTaetigkeit.taetigkeiten
            newPhasenTaetigkeit.bearbeiter = oldPhasenTaetigkeit.bearbeiter

    def CopyZusatzfelder (quelle, ziel):
        zusatzfeldlist = quelle.eval("zusatzfelder.metaZusatzfeld")
        for zusatzfeld in zusatzfeldlist:
            print zusatzfeld
            zusatzfeldname = zusatzfeld.eval("fieldname")
            print zusatzfeldname
            quellwert = getattr(quelle, zusatzfeldname)
            setattr(ziel, zusatzfeldname, quellwert)

    def CopyProjekteinstellungen(source, target):
        # Diverse Felder
        target.rechnungsIntervall = source.rechnungsIntervall
        target.bemerkung = source.bemerkung
        target.betreffend = source.betreffend
        target.beschrieb = source.beschrieb
        target.tarifstufe = source.tarifstufe
        target.projektnummer = source.projektnummer
        #Die Rechnungsvorgaben auf dem Projekt:
        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
        #Vorgaben
        target.xansatzext = source.xansatzext
        target.xansatzkosten = source.xansatzkosten
        target.xansatzbearbeiter = source.xansatzbearbeiter
        target.xtagesPauschaleExt = source.xtagesPauschaleExt
        #Zahlungskonditionen
        target.xDebiKondition = source.xDebiKondition
        #Buchhaltung
        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
        # Zusatzfelder
        CopyZusatzfelder (source, target)

    if not Vprojekt.eval("oclistypeof(Projekt)"):
        msgbox("Das Script wurde nicht auf einem Projekt ausgeführt.")
        return

    projekt = vtcapp.createobject("Projekt")

    #Zusätzliche Projekteinstellungen übernehmen
    CopyProjekteinstellungen(Vprojekt, projekt)

    #Stichworte übernehmen
    Stichworte = Vprojekt.eval("ordner->select(parentordner.stichwort)")
    for StOrdner in Stichworte:
		projekt.ordner.append(StOrdner)
		
    # Mindestens 1 Phase vorhanden
    if Vprojekt.eval("allephasen.list->size>0"):
        PhasenStufe1 = Vprojekt.phasen
        for vorlagePhase in PhasenStufe1:
            newPhase = copyPhase(vorlagePhase, vorlagePhase.parentphase, projekt)
            copySubPhasen(vorlagePhase, newPhase)

    vtcapp.showdetailform (projekt)

main(argobject)