Skip to content

Commit

Permalink
Update python schedule create sample
Browse files Browse the repository at this point in the history
  • Loading branch information
joniles committed Aug 16, 2024
1 parent 577a821 commit 190edc8
Showing 1 changed file with 29 additions and 29 deletions.
58 changes: 29 additions & 29 deletions src.python/mpxj/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,15 @@ import mpxj
jpype.startJVM()

from java.lang import Double
from java.text import SimpleDateFormat
from net.sf.mpxj import ProjectFile, TaskField, Duration, TimeUnit, RelationType
from net.sf.mpxj.writer import FileFormat
from java.time import LocalDate, LocalDateTime
from net.sf.mpxj import ProjectFile, TaskField, Duration, TimeUnit, RelationType, Availability, Relation
from net.sf.mpxj.common import LocalDateTimeHelper
from net.sf.mpxj.writer import UniversalProjectWriter, FileFormat

# In the example below we'll be generating an MSPDI
# file which we can import into Microsoft Project.
filename = "test.xml"
fileformat = FileFormat.MSPDI

# Create a simple date format to allow us to easily set date values.
df = SimpleDateFormat("dd/MM/yyyy")
# The helper class we use later to actually write the file
# uses an enumeration to determine the output format.
file_name = "test.xml"
file_format = FileFormat.MSPDI

# Create a ProjectFile instance
file = ProjectFile()
Expand All @@ -65,15 +63,15 @@ file = ProjectFile()
calendar = file.addDefaultBaseCalendar()

# Add a holiday to the calendar to demonstrate calendar exceptions
calendar.addCalendarException(df.parse("13/03/2006"), df.parse("13/03/2006"))
calendar.addCalendarException(LocalDate.of(2006, 3, 13), LocalDate.of(2006, 3, 13))

# Retrieve the project properties and set the start date. Note Microsoft
# Project appears to reset all task dates relative to this date, so this
# date must match the start date of the earliest task for you to see
# the expected results. If this value is not set, it will default to
# today's date.
properties = file.getProjectProperties()
properties.setStartDate(df.parse("01/01/2003"))
properties.setStartDate(LocalDateTime.of(2003, 1, 1, 8, 0))

# Set a couple more properties just for fun
properties.setProjectTitle("Created by MPXJ")
Expand All @@ -90,7 +88,9 @@ resource1.setName("Resource1")

resource2 = file.addResource()
resource2.setName("Resource2")
resource2.setMaxUnits(Double.valueOf(50.0))
# This resource is only available 50% of the time
resource2.getAvailability().add(Availability(LocalDateTimeHelper.START_DATE_NA, LocalDateTimeHelper.END_DATE_NA, Double.valueOf(50.0)));


# Create a summary task
task1 = file.addTask()
Expand All @@ -100,7 +100,7 @@ task1.setName("Summary Task")
task2 = task1.addTask()
task2.setName("First Sub Task")
task2.setDuration(Duration.getInstance(10.5, TimeUnit.DAYS))
task2.setStart(df.parse("01/01/2003"))
task2.setStart(LocalDateTime.of(2003, 1, 1, 8, 0))
task2.setText(1, "My Custom Value 1")

# We'll set this task up as being 50% complete. If we have no resource
Expand All @@ -110,34 +110,35 @@ task2.setText(1, "My Custom Value 1")
# correct values in order for MS project to mark the task as complete
# or partially complete.
task2.setPercentageComplete(Double.valueOf(50.0))
task2.setActualStart(df.parse("01/01/2003"))
task2.setActualStart(LocalDateTime.of(2003, 1, 1, 8, 0))

# Create the second sub task
task3 = task1.addTask()
task3.setName("Second Sub Task")
task3.setStart(df.parse("11/01/2003"))
task3.setStart(LocalDateTime.of(2003, 1, 11, 8, 0))
task3.setDuration(Duration.getInstance(10, TimeUnit.DAYS))
task3.setText(1, "My Custom Value 2")


# Link these two tasks
task3.addPredecessor(task2, RelationType.FINISH_START, None)
task3.addPredecessor(Relation.Builder().targetTask(task2))

# Add a milestone
milestone1 = task1.addTask()
milestone1.setName("Milestone")
milestone1.setStart(df.parse("21/01/2003"))
milestone1.setStart(LocalDateTime.of(2003, 1, 21, 8, 0))
milestone1.setDuration(Duration.getInstance(0, TimeUnit.DAYS))
milestone1.addPredecessor(task3, RelationType.FINISH_START, None)
milestone1.addPredecessor(Relation.Builder().targetTask(task3))

# This final task has a percent complete value, but no
# resource assignments. This is an interesting case it it requires
# special processing to generate the MSPDI file correctly.
task4 = file.addTask()
task4.setName("Next Task")
task4.setDuration(Duration.getInstance(8, TimeUnit.DAYS))
task4.setStart(df.parse("01/01/2003"))
task4.setStart(LocalDateTime.of(2003, 1, 1, 8, 0))
task4.setPercentageComplete(Double.valueOf(70.0))
task4.setActualStart(df.parse("01/01/2003"))
task4.setActualStart(LocalDateTime.of(2003, 1, 1, 8, 0))

# Assign resources to tasks
assignment1 = task2.addResourceAssignment(resource1)
Expand All @@ -157,28 +158,27 @@ assignment1.setActualWork(Duration.getInstance(40, TimeUnit.HOURS))
# be the same as the task start dates.
assignment1.setRemainingWork(Duration.getInstance(40, TimeUnit.HOURS))
assignment2.setRemainingWork(Duration.getInstance(80, TimeUnit.HOURS))
assignment1.setStart(df.parse("01/01/2003"))
assignment2.setStart(df.parse("11/01/2003"))
assignment1.setStart(LocalDateTime.of(2003, 1, 1, 8, 0))
assignment2.setStart(LocalDateTime.of(2003, 1, 11, 8, 0))

# Write a 100% complete task
task5 = file.addTask()
task5.setName("Last Task")
task5.setDuration(Duration.getInstance(3, TimeUnit.DAYS))
task5.setStart(df.parse("01/01/2003"))
task5.setStart(LocalDateTime.of(2003, 1, 1, 8, 0))
task5.setPercentageComplete(Double.valueOf(100.0))
task5.setActualStart(df.parse("01/01/2003"))
task5.setActualStart(LocalDateTime.of(2003, 1, 1, 8, 0))

# Write a 100% complete milestone
task6 = file.addTask()
task6.setName("Last Milestone")
task6.setDuration(Duration.getInstance(0, TimeUnit.DAYS))
task6.setStart(df.parse("01/01/2003"))
task6.setStart(LocalDateTime.of(2003, 1, 1, 8, 0))
task6.setPercentageComplete(Double.valueOf(100.0))
task6.setActualStart(df.parse("01/01/2003"))
task6.setActualStart(LocalDateTime.of(2003, 1, 1, 8, 0))

# Write the file
from net.sf.mpxj.writer import UniversalProjectWriter
UniversalProjectWriter(fileformat).write(file, filename)
writer = UniversalProjectWriter(file_format).write(file, file_name)

jpype.shutdownJVM()
```

0 comments on commit 190edc8

Please sign in to comment.