Direkt zum Inhalt | Direkt zur Navigation

 

Script: Projekt kopieren V56

Aktuelles Projekt kopieren (Vertec 5.6)

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 und CustomLinks werden nicht übernommen.

Übernimmt die Phasen in der richtigen Reihenfolge sowie die verschiedenen Zuordnungen und Berechtigungen.

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

Version

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.

Version 3: Projekt kopieren V3

Ab Version 4.0: Projekt kopieren V4

Ab Version 4.3: Projekt kopieren V43

Ab Version 5.0: Projekt kopieren V50

Ab Version 5.2: Projekt kopieren V52

Ab Version 5.2.6: Projekt kopieren V526

Ab Version 5.3: Projekt kopieren V53

Ab Version 5.5: Projekt kopieren V55

Ausführen

Auf dem Projekt, das kopiert werden soll.

Script

ProjektKopieren56.txt

Scripttext

'---Bezeichnung: Projekt kopieren
'   Klassen: Projekt
'   ObjectScript: Y
'   ContainerScript: N
'   EventType: Kein
'   EventClass:
'   EventMembers:
'   ExtendedRights: Y
'---Kopiert das ausgewählte Projekt.
'---07.01.2010, IB: Script angepasst bzw. erweitert. Genericlinks werden auch kopiert.
'---05.07.2011, SR: Version 5.6: Bearbeiterstufe auf BearbeiterPhaseLink. Bearbeiter auf ProjekteintragstypPhaseLink.
'---26.08.2011 IB(DL): Zusatzfelder Phasen Auslage- und Tätigkeitstypen werden auch kopiert
'---28.11.2011, SR: Kopiert orderidx auf Projektphasen, projektnummer auf Projekt,
'                   Zusatzfelder auf BearbeiterPhaseLinks. Vereinfachung Evaluierung der Zusatzfeldklassen.
'---03.01.2012, SR: Evaluierung des Projektnamens nach der Überprüfung des aktuellen Objekts.
'		    Code umformatiert und lesbarer gemacht.

option explicit

Sub CopyBoolean (Target, Source, Member)
 if cstr(Source.member(member))<>"" then
   target.member(Member) = source.Member(Member)
 end if
end sub

Sub CopyZusatzfelder (oldphase, newphase, classname)
dim zusatzfeldlist
dim zusatzfeldname
dim i

'Suche alle Zusatzfelder einer bestimmten Klasse
set zusatzfeldlist = oldphase.eval("zusatzfelder.metaZusatzfeld")
for i = 0 to zusatzfeldlist.count-1
    zusatzfeldname = zusatzfeldlist.objects(i).eval("fieldname")
    newphase.zusatzfeldasvariant(zusatzfeldname) = oldphase.zusatzfeldasvariant(zusatzfeldname)
next
end sub

Sub CopyPhasenMembers (oldphase, newphase)

newphase.member("code") = oldphase.member("code")
newphase.member("orderidx") =  oldphase.member("orderidx")
newphase.member("verantwortlicher") = oldphase.member("verantwortlicher")
newphase.member("xAktiv") = oldphase.member("xAktiv")
newphase.member("verrechenbar") = oldphase.member("verrechenbar")
newphase.member("Beschreibung") = oldphase.member("Beschreibung")
newphase.member("xEndDatum") = oldphase.member("xEndDatum")
newphase.member("xStartDatum") = oldphase.member("xStartDatum")
newphase.member("xPlanWertExt") = oldphase.member("xPlanWertExt")
newphase.member("xPlanMinutenInt") = oldphase.member("xPlanMinutenInt")
newphase.member("xPlanSpesenWert") = oldphase.member("xPlanSpesenWert")
newphase.member("AnsatzBearbeiter") = oldphase.member("AnsatzBearbeiter")
newphase.member("AnsatzExt") = oldphase.member("AnsatzExt")
newphase.member("ErtragskontoSpesen") = oldphase.member("ErtragskontoSpesen")
newphase.member("Status") = oldphase.member("Status")
newphase.member("ErtragskontoAuslagen") = oldphase.member("ErtragskontoAuslagen")
newphase.member("PauschalAuslagen") = oldphase.member("PauschalAuslagen")
CopyBoolean newphase, oldphase, "xAuslagenWeiterleiten"
newphase.member("KostenstelleSpesen") = oldphase.member("KostenstelleSpesen")
newphase.member("xPlanKostenAuslagen") = oldphase.member("xPlanKostenAuslagen")
newphase.member("pauschal") = oldphase.member("pauschal")
newphase.member("TagesPauschaleExt") = oldphase.member("TagesPauschaleExt")
newphase.member("PauschalSpesen") = oldphase.member("PauschalSpesen")
newphase.member("KostenstelleAuslagen") = oldphase.member("KostenstelleAuslagen")
newphase.member("AnsatzKosten") = oldphase.member("AnsatzKosten")
newphase.member("KostenstelleLeistungen") = oldphase.member("KostenstelleLeistungen")
newphase.member("ErtragskontoLeistungen") = oldphase.member("ErtragskontoLeistungen")
newphase.member("xMinPlanWertLeist") = oldphase.member("xMinPlanWertLeist")
newphase.member("xMinPlanWertSpesen") = oldphase.member("xMinPlanWertSpesen")
newphase.member("xPlanKostenLeistung") = oldphase.member("xPlanKostenLeistung")
newphase.member("xMaxPlanWertLeist") = oldphase.member("xMaxPlanWertLeist")
newphase.member("xPlanKostenSpesen") = oldphase.member("xPlanKostenSpesen")
newphase.member("xMaxPlanWertSpesen") = oldphase.member("xMaxPlanWertSpesen")
newphase.member("xPlanAuslagenWert") = oldphase.member("xPlanAuslagenWert")

End Sub

sub AddSubphasen (oldphase, newphase)
dim oldsubphase
dim newsubphase
dim sublist
dim k

set sublist = oldphase.eval("subphasen")
for k = 0 to sublist.count-1
    set oldsubphase = sublist.objects(k)
    set newsubphase = Vertec.createobject("Projektphase")
    newsubphase.member("parentphase") = newphase
    CopyPhasenMembers oldsubphase, newsubphase
    CopyZusatzfelder oldsubphase, newsubphase, "ProjektPhase"
    call CopyPhasenBearbeiter (oldsubphase, newsubphase)
    call CopyPhasenTaetigkeiten (oldsubphase, newsubphase)
    call CopyPhasenSpesentypen (oldsubphase, newsubphase)
    call CopyPhasenAuslagentypen (oldsubphase, newsubphase)
    AddSubphasen oldsubphase, newsubphase
next
end sub

sub CopyPhasenSpesentypen (oldphase, newphase)
dim srcList
dim trgList
dim ii

set srcList = oldphase.eval("self.spesentypphaselink")
for ii = 0 to srcList.count - 1
    set trgList = Vertec.CreateObject("SpesenTypPhaseLink")
    trgList.member("minPlanWertSpesen") = srcList.Objects(ii).member("minPlanWertSpesen")
    trgList.member("maxPlanWertSpesen") = srcList.Objects(ii).member("maxPlanWertSpesen")
    trgList.member("planKostenSpesen") = srcList.Objects(ii).member("planKostenSpesen")
    trgList.member("planWertSpesen") = srcList.Objects(ii).member("planWertSpesen")
    trgList.member("wertproeinheitext") = srcList.Objects(ii).member("wertproeinheitext")
    trgList.member("wertproeinheitint") = srcList.Objects(ii).member("wertproeinheitint")
    trgList.member("wertproeinheitkosten") = srcList.Objects(ii).member("wertproeinheitkosten")
    trgList.member("bezeichnung") = srcList.Objects(ii).member("bezeichnung")
    trgList.member("offertText") = srcList.Objects(ii).Member("offertText")
    set trgList.member("phasen") = newphase
    set trgList.member("spesentypen") = srcList.objects(ii).member("spesentypen")
    set trgList.member("bearbeiter") = srcList.objects(ii).member("bearbeiter")
next
end sub

sub CopyPhasenAuslagentypen (oldphase, newphase)
dim srcList
dim trgList
dim ii

set srcList = oldphase.eval("self.auslagetypphaselink")
for ii=0 to srcList.count - 1
    set trgList = Vertec.CreateObject("AuslageTypPhaseLink")
    trgList.member("minPlanWertAuslagen") = srcList.Objects(ii).member("minPlanWertAuslagen")
    trgList.member("PlanWertAuslagen") = srcList.Objects(ii).member("PlanWertAuslagen")
    trgList.member("maxPlanWertAuslagen") = srcList.Objects(ii).member("maxPlanWertAuslagen")
    trgList.member("PlanKostenAuslagen") = srcList.Objects(ii).member("PlanKostenAuslagen")
    trgList.member("maxPlanKostenAuslagen") = srcList.Objects(ii).member("maxPlanKostenAuslagen")
    trgList.member("minPlanKostenAuslagen") = srcList.Objects(ii).member("minPlanKostenAuslagen")
    trgList.member("wertproeinheitext") = srcList.Objects(ii).member("wertproeinheitext")
    trgList.member("wertproeinheitint") = srcList.Objects(ii).member("wertproeinheitint")
    trgList.member("wertproeinheitkosten") = srcList.Objects(ii).member("wertproeinheitkosten")
    trgList.member("bezeichnung") = srcList.Objects(ii).member("bezeichnung")
    trgList.member("offertText") = srcList.Objects(ii).Member("offertText")
    set trgList.member("phasen") = newphase
    set trgList.member("auslagetypen") = srcList.objects(ii).member("auslagetypen")
    set trgList.member("bearbeiter") = srcList.objects(ii).member("bearbeiter")
    CopyZusatzfelder srcList.objects(ii), trgList, "AuslageTypPhaseLink"
next
end sub

sub CopyPhasenBearbeiter (oldphase, newphase)
dim srcList
dim trgList
dim ii

set srcList = oldphase.eval("bearbeiterphasen")
for ii=0 to srcList.count - 1
   set trgList = Vertec.CreateObject("BearbeiterPhaseLink")
   trgList.member("Ansatzkosten") = srcList.Objects(ii).Member("Ansatzkosten")
   trgList.member("AnsatzBearbeiter") = srcList.Objects(ii).Member("AnsatzBearbeiter")
   trgList.member("TagesPauschaleExt") = srcList.Objects(ii).Member("TagesPauschaleExt")
   trgList.member("AnsatzExt") = srcList.Objects(ii).Member("AnsatzExt")
   trgList.member("Bearbeiter") = srcList.Objects(ii).Member("Bearbeiter")
   trgList.member("Bearbeiterstufe") = srcList.Objects(ii).Member("Bearbeiterstufe")
   newphase.member("Bearbeiterphasen").Add(trgList)
   CopyZusatzfelder srcList.objects(ii), trgList, "BearbeiterPhaseLink"
next
end sub

sub CopyPhasenTaetigkeiten (oldphase, newphase)
dim srcList
dim trgList
dim ii

set srcList = oldphase.eval("taetigkeitphaselink")
for ii=0 to srcList.count - 1
    set trgList = Vertec.CreateObject("TaetigkeitPhaseLink")
    trgList.member("planWertLeist") = srcList.Objects(ii).Member("planWertLeist")
    trgList.member("minPlanWertLeist") = srcList.Objects(ii).Member("minPlanWertLeist")
    trgList.member("stueckwert") = srcList.Objects(ii).Member("stueckwert")
    trgList.member("planWertLeist") = srcList.Objects(ii).Member("planWertLeist")
    trgList.member("tagesPauschaleExt") = srcList.Objects(ii).Member("tagesPauschaleExt")
    trgList.member("bezeichnung") = srcList.Objects(ii).Member("bezeichnung")
    trgList.member("ansatzExt") = srcList.Objects(ii).Member("ansatzExt")
    trgList.member("planMinutenInt") = srcList.Objects(ii).Member("planMinutenInt")
    trgList.member("maxPlanWertLeist") = srcList.Objects(ii).Member("maxPlanWertLeist")
    trgList.member("ansatzKosten") = srcList.Objects(ii).Member("ansatzKosten")
    trgList.member("ansatzBearbeiter") = srcList.Objects(ii).Member("ansatzBearbeiter")
    trgList.member("offertText") = srcList.Objects(ii).Member("offertText")
    set trgList.member("phasen") = newphase
    set trgList.member("taetigkeiten") = srcList.objects(ii).member("taetigkeiten")
    set trgList.member("bearbeiter") = srcList.objects(ii).member("bearbeiter")
    CopyZusatzfelder srcList.objects(ii), trgList, "TaetigkeitPhaseLink"
next
end sub

sub main
Dim Name
Dim source, target
Dim adrlist1, adrlist2
Dim i
Dim srcList, trgList
Dim phasenlist
Dim oldphase, newphase

'Überprüfe das aktuelle Objekt
set source = Vertec.argobject
if not source.IsOfType("Projekt") then
   Msgbox "Sie müssen dieses Script auf einem einzelnen Projekt ausführen"
   Exit Sub
end if

'Evaluiere den Namen des neuen Projekts
Name = inputbox ("Name des neuen Projektes:")
if Name = "" then exit sub

'Erzeuge das Projekt und übernehme alle Werte
set target = Vertec.createObject("Projekt")
target.member("aktiv") = false
target.Member("code") = Name
target.member("sprache") = source.Member("sprache")
CopyZusatzfelder source, target, "Projekt"
target.member("xkostenstellespesen") = source.Member("xkostenstellespesen")
target.member("xErtragskontoLeistungen") = source.Member("xErtragskontoLeistungen")
target.member("xErtragskontoSpesen") = source.Member("xErtragskontoSpesen")
target.member("xDatenbankFibu") = source.member("xDatenbankFibu")
target.member("xLoginFibu") = source.member("xLoginFibu")
target.member("xPasswordFibu") = source.member("xPasswordFibu")
target.member("xpersonenKonto") = source.Member("xpersonenKonto")
target.member("kontaktPerson") = source.Member("kontaktPerson")
target.member("autoRechnungDrucken") = source.Member("autoRechnungDrucken")
target.member("autoRechnungBuchen") = source.Member("autoRechnungBuchen")
target.member("autoRechnungErstellen") = source.Member("autoRechnungErstellen")
target.member("Typ") = source.Member("Typ")
target.member("rechnungsintervall") = source.Member("rechnungsintervall")
target.member("bemerkung") = source.Member("bemerkung")
target.member("xmwsttyp") = source.Member("xmwsttyp")
target.member("betreffend") = source.Member("betreffend")
target.member("xkostenstelleleistungen") = source.Member("xkostenstelleleistungen")
target.member("projektleiter") = Vertec.user
target.member("hb") = source.Member("hb")
target.member("hbstv") = source.Member("hbstv")
target.member("sekr") = source.Member("sekr")
target.member("kunde") = source.Member("kunde")
target.member("xrechnungsadresse") = source.Member("xrechnungsadresse")
target.member("beschrieb") = source.Member("beschrieb")
target.member("waehrung") = source.Member("waehrung")
target.member("tarifstufe") = source.member("tarifstufe")
target.member("projektnummer") = source.member("projektnummer")
target.member("verflechtungen1") = source.member("verflechtungen1")
target.member("verflechtungen2") = source.member("verflechtungen2")
target.member("gegenverflechtungen1") = source.member("gegenverflechtungen1")
target.member("gegenverflechtungen2") = source.member("gegenverflechtungen2")
'Die Rechnungsvorgaben auf dem Projekt:
target.member("rechRabatt") = source.member("rechRabatt")
target.member("rechPauschal") = source.member("rechPauschal")
target.member("rechRabattProzent") = source.member("rechRabattProzent")
target.member("rechPauschalSpesenProzent") = source.member("rechPauschalSpesenProzent")
target.member("rechPauschalBetrag") = source.member("rechPauschalBetrag")
target.member("rechPauschalSpesen") = source.member("rechPauschalSpesen")
target.member("rechPauschalSpesenBetrag") = source.member("rechPauschalSpesenBetrag")
'hänge noch die gleichen Gegenparteien an...
set adrlist1 = source.member("gegenparteien")
set adrlist2 = target.member("gegenparteien")
for i = 0 to adrlist1.count-1
    adrlist2.add adrlist1.objects(i)
next
' angehängte bearbeiter kopieren
' zuerst eigentliche liste der bearbeiter
set srcList = source.member("bearbeiter")
set trgList = target.member("bearbeiter")
' muss zuerst die bearbeiterliste löschen
' da beim erzeugen automatisch der aktuelle
' Bearbeiter zugeordnet wird
for i = trgList.count-1 to 0 step-1
    trglist.remove trglist.objects(i)
next
for i=0 to srcList.count-1
    trgList.Add srcList.Objects(i)
next
' im zweiten Schritt die Linkobjektangaben
set srcList = source.eval("bearbeiterlink")
set trgList = target.eval("bearbeiterlink")
for i=0 to srclist.count-1
    trgList.Objects(i).Member("ansatzbearbeiter") = srcList.Objects(i).Member("ansatzbearbeiter")
    trgList.Objects(i).Member("ansatzkosten") = srcList.Objects(i).Member("ansatzkosten")
    trgList.Objects(i).Member("ansatzext") = srcList.Objects(i).Member("ansatzext")
    trgList.Objects(i).Member("tagespauschaleExt") = srcList.Objects(i).Member("tagespauschaleExt")
    trgList.Objects(i).Member("bezeichnung") = srcList.Objects(i).Member("bezeichnung")
next
'Nun kommen die Projektphasen dran
set phasenlist = source.eval("phasen")
for i = 0 to phasenlist.count-1
    set oldphase = phasenlist.objects(i)
    set newphase = Vertec.createObject("Projektphase")
    newphase.member("projekt") = target
    call CopyPhasenBearbeiter (oldphase, newphase)
    call CopyPhasenTaetigkeiten (oldphase, newphase)
    call CopyPhasenSpesentypen (oldphase, newphase)
    call CopyPhasenAuslagentypen (oldphase, newphase)
    CopyPhasenMembers oldphase, newphase
    CopyZusatzfelder oldphase, newphase, "ProjektPhase"
    AddSubphasen oldphase, newphase
next
'Angehängte Berichte werden ebenfalls kopiert
set trgList = target.eval("berichte")
set srcList = source.eval("berichte")
for i = 0 to srcList.count-1
    trgList.add srcList.objects(i)
next
set srcList = source.eval("projektberichtlink")
set trgList = target.eval("projektberichtlink")
for i = 0 to srcList.count-1
    trgList.objects(i).member("berichtName") = srcList.objects(i).member("berichtName")
    trgList.objects(i).member("automatischDrucken") = srcList.objects(i).member("automatischDrucken")
    trgList.objects(i).member("adresse") = srcList.objects(i).member("adresse")
next
'---GenericLinks kopieren
call CopyGenericLinks(source, target)

Vertec.ShowForm(target)

end sub

Sub CopyGenericLinks(vonProjekt, nachProjekt)
dim Containers, Links
dim Container, newContainer, linkObj
dim i, j

set Containers = vonProjekt.eval("genericContainers")
'---Containers erstellen
For i=0 to Containers.Count-1
    set Container = Containers.Objects(i)
    set newContainer = Vertec.CreateObject("GenericLinkContainer")
    newContainer.Member("rolle") = Container.Member("rolle")
    newContainer.Member("fromContainer") = nachProjekt
    set Links = Container.Member("links")
    for j=0 to Links.Count-1
        set linkObj = Links.Objects(j)
        newContainer.Member("links").Add linkObj
    next
next
end sub

call main
erstellt: 12.07.2011
geändert: 06.02.2012: Fehlerkorrektur: letzte Kommentarzeile auskommentiert.
Produktlinien: Expert
Module: Leistung & CRM
  

kontakt

Suche in Knowledge Base
Hotline

Vertec Hotline: +41 43 444 60 05
Mo - Fr: 9-12 / 14-17 Uhr
Netviewer starten...
Weitere Informationen zu Netviewer.

Haben Sie eine technische Frage zu einem Vertec-Produkt?
zum Anfrageformular...

Unsere Kunden über unsere Support-Leistungen

„Vertec bietet einen hervorragenden Support beim Weiterausbau und bei der Parametrisierung und auch die Hotline-Unterstützung verdient das Prädikat top.“

Thomas Marx, Egeli Informatik AG (46 User)


„Der hervorragende Support, die Hotline sowie eine permanente Weiterentwicklung des Produkts garantieren uns einen hohen Investitionsschutz.“

Moreno Bellido, Walder Wyss (170 User)