Script: Projekt kopieren V56
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
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 |
