Free Support Forum - aspose.com

Problem with generating programmatically task with different resources


#1

Hello Support,

I’m trying to generate from scratch complete fixed duration task with 4 different resources - one resource is cost resource and rest of them are work resources with different calendars. This is how it looks like files.zip (128.4 KB) I have problems with setting resources calendar (each resource in mpp file has Standard calendar - however Im changing it). Another thing is that duration is wrong, it should have 57.6h totally - as in expected output mpp file.
Code which Im using to generate output file:

    Project project = new Project("test.mpt");
    project.set(Prj.START_DATE, toDate(LocalDateTime.of(2019, 1, 1, 0, 0)));
    Calendar standard = project.getCalendars().add("Standard");
    Calendar.makeStandardCalendar(standard);
    Calendar hour24 = project.getCalendars().add("24H");
    Calendar.make24HourCalendar(hour24);
    Calendar nighShift = project.getCalendars().add("Night_shift");
    Calendar.makeNightShiftCalendar(nighShift);
    project.set(Prj.CALENDAR, hour24);
    Task task1 = project.getRootTask().getChildren().add("test task");
    task1.set(Tsk.IS_MANUAL, NullableBool.to_NullableBool(false));
    task1.set(Tsk.TYPE, TaskType.FixedDuration);
    task1.set(Tsk.DURATION, task1.getParentProject().getDuration(2, 4));
    task1.set(Tsk.WORK, task1.getParentProject().getDuration(57.6, 2));

    Resource cost = project.getResources().add("Fixed cost");
    cost.set(Rsc.COST_PER_USE, new BigDecimal(500));
    cost.set(Rsc.TYPE, ResourceType.Cost);

    Resource et = project.getResources().add("ET");
    et.set(Rsc.TYPE, ResourceType.Work);
    et.set(Rsc.STANDARD_RATE, toBigDecimal(125d));
    et.set(Rsc.OVERTIME_RATE, toBigDecimal(1d));
    Calendar cal1 = project.getCalendars().add(et.get(Rsc.NAME));
    cal1.setBaseCalendar(nighShift);
    cal1.setBaselineCalendar(true);
    et.set(Rsc.CALENDAR, cal1);

    Resource projEng = project.getResources().add("Project Engineer");
    projEng.set(Rsc.TYPE, ResourceType.Work);
    projEng.set(Rsc.STANDARD_RATE, toBigDecimal(150d));
    projEng.set(Rsc.OVERTIME_RATE, toBigDecimal(1d));
    Calendar cal2 = project.getCalendars().add(projEng.get(Rsc.NAME));
    cal2.setBaseCalendar(hour24);
    cal2.setBaselineCalendar(true);
    projEng.set(Rsc.CALENDAR, cal2);

    Resource projMan = project.getResources().add("Project Manager");
    projMan.set(Rsc.TYPE, ResourceType.Work);
    projMan.set(Rsc.STANDARD_RATE, toBigDecimal(200d));
    projMan.set(Rsc.OVERTIME_RATE, toBigDecimal(1d));
    Calendar cal3 = project.getCalendars().add(projMan.get(Rsc.NAME));
    cal3.setBaseCalendar(hour24);
    cal3.setBaselineCalendar(true);
    projMan.set(Rsc.CALENDAR, cal3);

    ResourceAssignment etAssn = project.getResourceAssignments().add(task1, et);
    etAssn.set(Asn.UNITS, 2d);
    ResourceAssignment projManAssn = project.getResourceAssignments().add(task1, projMan);
    projManAssn.set(Asn.UNITS, 0.2d);

    ResourceAssignment projEngAssn = project.getResourceAssignments().add(task1, projEng);
    projEngAssn.set(Asn.UNITS, 0.2d);

    ResourceAssignment assn = project.getResourceAssignments().add(task1, cost);
    assn.set(Asn.UNITS, 1d);

    project.save("output.mpp", SaveFileFormat.MPP);

Could you please help me with achieve the same result as shown in expected ouput mpp file programatically?


#2

@dusinski,

I have worked with sample code shared by you. The code snippet you have shared includes some undeclared variables so would you please share SSCCE complete working sample code so that we may try to further investigate to help you out.


#3

Im very sorry, I forgot to remove utils form code, this is code:

    Project project = new Project("test.mpt");
    project.set(Prj.START_DATE, Date.from(LocalDateTime.of(2019, 1, 1, 0, 0).atZone(ZoneId.systemDefault()).toInstant()));
    Calendar standard = project.getCalendars().add("Standard");
    Calendar.makeStandardCalendar(standard);
    Calendar hour24 = project.getCalendars().add("24H");
    Calendar.make24HourCalendar(hour24);
    Calendar nighShift = project.getCalendars().add("Night_shift");
    Calendar.makeNightShiftCalendar(nighShift);
    project.set(Prj.CALENDAR, hour24);
    Task task1 = project.getRootTask().getChildren().add("test task");
    task1.set(Tsk.IS_MANUAL, NullableBool.to_NullableBool(false));
    task1.set(Tsk.TYPE, TaskType.FixedDuration);
    task1.set(Tsk.DURATION, task1.getParentProject().getDuration(2, 4));
    task1.set(Tsk.WORK, task1.getParentProject().getDuration(57.6, 2));

    Resource cost = project.getResources().add("Fixed cost");
    cost.set(Rsc.COST_PER_USE, new BigDecimal(500));
    cost.set(Rsc.TYPE, ResourceType.Cost);

    Resource et = project.getResources().add("ET");
    et.set(Rsc.TYPE, ResourceType.Work);
    et.set(Rsc.STANDARD_RATE, new BigDecimal("125"));
    et.set(Rsc.OVERTIME_RATE, new BigDecimal("1"));
    Calendar cal1 = project.getCalendars().add(et.get(Rsc.NAME));
    cal1.setBaseCalendar(nighShift);
    cal1.setBaselineCalendar(true);
    et.set(Rsc.CALENDAR, cal1);

    Resource projEng = project.getResources().add("Project Engineer");
    projEng.set(Rsc.TYPE, ResourceType.Work);
    projEng.set(Rsc.STANDARD_RATE, new BigDecimal("150"));
    projEng.set(Rsc.OVERTIME_RATE, new BigDecimal("1"));
    Calendar cal2 = project.getCalendars().add(projEng.get(Rsc.NAME));
    cal2.setBaseCalendar(hour24);
    cal2.setBaselineCalendar(true);
    projEng.set(Rsc.CALENDAR, cal2);

    Resource projMan = project.getResources().add("Project Manager");
    projMan.set(Rsc.TYPE, ResourceType.Work);
    projMan.set(Rsc.STANDARD_RATE, new BigDecimal("200"));
    projMan.set(Rsc.OVERTIME_RATE, new BigDecimal("1"));
    Calendar cal3 = project.getCalendars().add(projMan.get(Rsc.NAME));
    cal3.setBaseCalendar(hour24);
    cal3.setBaselineCalendar(true);
    projMan.set(Rsc.CALENDAR, cal3);

    ResourceAssignment etAssn = project.getResourceAssignments().add(task1, et);
    etAssn.set(Asn.UNITS, 2d);
    ResourceAssignment projManAssn = project.getResourceAssignments().add(task1, projMan);
    projManAssn.set(Asn.UNITS, 0.2d);

    ResourceAssignment projEngAssn = project.getResourceAssignments().add(task1, projEng);
    projEngAssn.set(Asn.UNITS, 0.2d);

    ResourceAssignment assn = project.getResourceAssignments().add(task1, cost);
    assn.set(Asn.UNITS, 1d);

    project.save("output.mpp", SaveFileFormat.MPP);

I also notice that fixed cost is not shown properly when Im setting project calendar, there must be something wrong in my logic.


#4

@dusinski,

I have worked with source file and sample code shared by you and have been able to observe issue. An issue with ID TASKSJAVA-894 has been created in our issue tracking system to further investigate and resolve the issue. This thread has been linked with the issue so that you may be notified once the issue will be fixed.