home *** CD-ROM | disk | FTP | other *** search
/ Lighthouse Design Suite / LIGHTHOUSE.mdf / TaskMaster_1.8 / Application / FilterServicer.service / writetm.pl < prev   
Perl Script  |  1993-10-22  |  20KB  |  681 lines

  1. #
  2. #  writetm.pl
  3. #
  4. #  This package allows the user to easily create a TaskMaster model of a 
  5. #  project and have it write to a properly formatted TaskMaster file.
  6. #
  7. #  Copyright (C) 1993 Lighthouse Design Ltd.
  8. #
  9. #  You may freely copy, distribute, and reuse the code in
  10. #  this example provided this copyright legend and disclaimer
  11. #  are preserved in all copies and derivative work.
  12. #
  13. #  Lighthouse Design disclaims any warranty of any kind,
  14. #  expressed or implied, as to this code's fitness
  15. #  for any particular use.
  16. #
  17.  
  18. package writetm;
  19.  
  20. $numTasks = 1;            # root task
  21. $numResources = 3;        # root res, unassigned, expenses
  22. $numCalendars = 1;              # root resource calendar hard wired
  23. $numAssignments = 0;        # none to start with
  24. $numDependencies = 0;        # none to start with
  25. $projectStartDate = "";
  26.  
  27. sub main'setProjectName{ # project name
  28.     $projectName = $_[0];
  29. }
  30.  
  31. sub main'setProjectManager{ # project manager
  32.     $projectManager = $_[0];
  33. }
  34.  
  35. sub main'setProjectStartDate{ # project start date
  36.     $projectStartDate = $_[0];
  37. }
  38.  
  39. sub main'setProjectEndDate{ # project end date for end on
  40.     $projectEndDate = $_[0];
  41. }
  42.  
  43. sub main'setDefaultCalendar{ # default calendar name
  44.     $defaultCalendar = $_[0];
  45. }
  46.  
  47. sub main'addTask{ #ID Name Type Outline StartDate Duration ConstraintType ConstraintDate Expenses LevelPrio Subtitle Notes
  48.  
  49.     ++$numTasks;
  50.     ($taskID{$numTasks},$taskName{$numTasks},$taskType{$numTasks},$taskOutline{$numTasks}, $taskStartDate{$numTasks}, $taskDuration{$numTasks}, $taskConstraintType{$numTasks}, $taskConstraintDate{$numTasks}, $taskExpenses{$numTasks}, $taskLevelPrio{$numTasks}, $taskSubtitle{$numTasks}, $taskNotes{$numTasks}) = @_;
  51.     if(!$taskOutline{$numTasks}){
  52.     $ignoreOutlines = 1;
  53.     }elsif($taskOutline{$numTasks} !~ /(.*\.)?\d+\.$/){
  54.     print "Adding . -> $taskOutline{$numTasks}\n";
  55.     $taskOutline{$numTasks} .= ".";
  56.     if($taskOutline{$numTasks} !~ /(.*\.)?\d+\.$/){
  57.         print "Really bad outline number -> $taskOutline{$numTasks}\n";
  58.         $ignoreOutlines = 1;
  59.     }
  60.     }
  61.     if($taskOutline{$numTasks} =~ /(.*\.)\d+\./){
  62.     if($taskChildren{$1}){
  63.         $taskChildren{$1} ++;
  64.     }else{
  65.         $taskChildren{$1} = 1;
  66.     }
  67.     }
  68.     
  69.     if(!$taskConstraintType{$numTasks}){
  70.     $taskConstraintType{$numTasks} = "Earliest";
  71.     $taskConstraintDate{$numTasks} = "7/1/93 0:00:00";
  72.     }elsif(!$taskConstraintDate{$numTasks}){
  73.     $taskConstraintDate{$numTasks} = "today";
  74.     }
  75.     if(!$taskType{$numTasks}){
  76.     $taskType{$numTasks} = "Task";
  77.     }
  78.     $taskIndexOutline{$taskOutline{$numTasks}} = $numTasks;
  79.     $taskIndexID{$taskID{$numTasks}} = $numTasks;
  80.     $taskIDName{$taskName{$numTasks}} = $taskID{$numTasks};
  81.     if(!$earliestTaskStartDate || ($taskStartDate{$numTasks} && &earlier($taskStartDate{$numTasks}, $earliestTaskStartDate))){
  82.     $earliestTaskStartDate = $taskStartDate{$numTasks};
  83.     }
  84.     return $numTasks;
  85. }
  86.  
  87. sub main'taskIDFromName{ # Name
  88.     return $taskIDName{$_[0]};
  89. }
  90.  
  91. sub main'taskIDFromOutline { #outline
  92.     return $taskID{&taskIndexFromOutline($_[0])};
  93. }
  94.  
  95. sub main'taskIndexFromOutline { #outline
  96.     return $taskIndexOutline{$_[0]};
  97. }
  98.  
  99. sub main'taskIndexFromID { # outline
  100.     return $taskIndexID{$_[0]};
  101. }
  102.  
  103. sub main'resetWriteTM {
  104.     undef(%resourceID);
  105.     undef(%resourceName);
  106.     undef(%resourceQuantity);
  107.     undef(%resourceIDName);
  108.     undef(%resourceIndexID);
  109.     undef(%resourceCalendarName);
  110.     undef(%pricePerUse);
  111.     undef(%pricePerDay);
  112.     undef(%calendarName);
  113.     undef(%calendarIndexFromName);
  114.     undef(%holidayDates);
  115.     undef(%hoursS);
  116.     undef(%hoursM);
  117.     undef(%hoursT);
  118.     undef(%hoursW);
  119.     undef(%hoursTh);
  120.     undef(%hoursF);
  121.     undef(%hoursSa);
  122.     undef(%assignmentWorkTime);
  123.     undef(%assignmentQuantity);
  124.     undef(%assignmentEffort);
  125.     undef(%taskID);
  126.     undef(%taskName);
  127.     undef(%taskType);
  128.     undef(%taskOutline);
  129.     undef(%taskStartDate);
  130.     undef(%taskDuration);
  131.     undef(%taskConstraintType);
  132.     undef(%taskConstraintDate);
  133.     undef(%taskExpenses);
  134.     undef(%taskLevelPrio);
  135.     undef(%taskSubtitle);
  136.     undef(%taskNotes);
  137.     undef(%taskChildren);
  138.     undef(%taskHasAssignments);
  139.     undef(%taskIndexOutline);
  140.     undef(@holidays);
  141.     undef(%dependFrom);
  142.     undef(%dependTo);
  143.     undef($ignoreOutlines);
  144.     $numTasks = 1;            # root task
  145.     $numResources = 3;        # root res, unassigned, expenses
  146.     $numCalendars = 1;              # root resource calendar hard wired
  147.     $numAssignments = 0;        # none to start with
  148.     $numDependencies = 0;        # none to start with
  149.     $projectStartDate = "";
  150. }
  151.     
  152. sub main'addResource{ #ID Name Quant $PerDay $PerUse $calendarName
  153.  
  154.     ++$numResources;
  155.     ($resourceID{$numResources}, $resourceName{$numResources}, $resourceQuantity{$numResources}, $pricePerDay{$numResources}, $pricePerUse{$numResources}, $resourceCalendarName{$numResources}) = @_;
  156.     $resourceQuantity{$numResources} = int($resourceQuantity{$numResources}+0.5);
  157.     $resourceIDName{$resourceName{$numResources}} = $resourceID{$numResources};
  158.     $resourceIndexID{$resourceID{$numResources}} = $numResources;
  159. }
  160.  
  161. sub main'resourceIDFromName{ # Name
  162.     return $resourceIDName{$_[0]};
  163. }
  164.  
  165. sub main'resourceIndexFromID{ #ID
  166.     return $resourceIndexID{$_[0]};
  167. }
  168.  
  169. sub main'addCalendar{ # Name HoursS HoursM HoursT HoursW HoursTh HoursF HoursS HolidayDate HolidayDate ...
  170.     $numCalendars ++;
  171.     ($calendarName{$numCalendars}, $hoursS{$numCalendars}, $hoursM{$numCalendars}, $hoursT{$numCalendars}, $hoursW{$numCalendars}, $hoursTh{$numCalendars}, $hoursF{$numCalendars}, $hoursSa{$numCalendars}, @holidays) = @_;
  172.     foreach $holidayDate (@holidays){
  173.     if($holidayDates{$numCalendars}){
  174.         $holidayDates{$numCalendars} .= "-".$holidayDate;
  175.     }else{
  176.         $holidayDates{$numCalendars} = $holidayDate;
  177.     }
  178.     }        
  179.     $calendarIndexFromName{$calendarName{$numCalendars}} = $numCalendars;
  180. }
  181.  
  182. sub main'addCalendarCopyOf {  # newCalendarName, oldCalendarName
  183.     local($newCalendarName, $oldCalendarName) = @_;
  184.     (local($index) = $calendarIndexFromName{$oldCalendarName}) || return 0;
  185.  
  186.     $numCalendars++;
  187.     $calendarName{$numCalendars} = $newCalendarName;
  188.     $hoursS{$numCalendars} = $hoursS{$index};
  189.     $hoursM{$numCalendars} = $hoursM{$index};
  190.     $hoursT{$numCalendars} = $hoursT{$index};
  191.     $hoursW{$numCalendars} = $hoursW{$index};
  192.     $hoursTh{$numCalendars} = $hoursTh{$index};
  193.     $hoursF{$numCalendars} = $hoursF{$index};
  194.     $hoursSa{$numCalendars} = $hoursSa{$index};
  195.     $holidayDates{$numCalendars} = $holidayDates{$index};
  196.     $calendarIndexFromName{$newCalendarName} = $numCalendars;
  197. }
  198.  
  199. sub main'setCalendarHoursForDay{ # calendarName, dayNumber(1=Sun), hours
  200.     local($calendarName, $dayNumber, $hours) = @_;
  201.     (local($index) = $calendarIndexFromName{$calendarName}) || return 0;
  202.     if($dayNumber == 1){
  203.     $hoursS{$index} = $hours;
  204.     }elsif($dayNumber == 2){
  205.     $hoursM{$index} = $hours;
  206.     }elsif($dayNumber == 3){
  207.     $hoursT{$index} = $hours;
  208.     }elsif($dayNumber == 4){
  209.     $hoursW{$index} = $hours;
  210.     }elsif($dayNumber == 5){
  211.     $hoursTh{$index} = $hours;
  212.     }elsif($dayNumber == 6){
  213.     $hoursF{$index} = $hours;
  214.     }elsif($dayNumber == 7){
  215.     $hoursSa{$index} = $hours;
  216.     }
  217. }
  218.     
  219. sub main'addCalendarHolidays{ # calendarName, holidayDate
  220.     local($calendarName, @holidayDateList) = @_;
  221.     (local($index) = $calendarIndexFromName{$calendarName}) || return 0;
  222.     foreach $holidayDate (@holidayDateList){
  223.     if($holidayDates{$index}){
  224.         $holidayDates{$index} .= "-".$holidayDate;
  225.     }else{
  226.         $holidayDates{$index} = $holidayDate;
  227.     }
  228.     }
  229. }
  230.  
  231. sub main'calendarFromName{ #calendarName
  232.     return $calendarIndexFromName{$_[0]};
  233. }
  234.  
  235. sub main'addAssignment{ # TaskID ResourceID WorkTime Quantity %effort
  236.     $numAssignments++;
  237.     ($assignmentTaskID, $assignmentResourceID, $assignmentWorkTime{$numAssignments}, $assignmentQuantity{$numAssignments}, $assignmentEffort{$numAssignments}) = @_;
  238.     $assignmentTask{$numAssignments} = $taskIndexID{$assignmentTaskID};
  239.     $assignmentResource{$numAssignments} = $resourceIndexID{$assignmentResourceID};
  240.     $taskHasAssignments{$assignmentTask{$numAssignments}} = 1;
  241.     $assignmentQuantity{$numAssignments} = int($assignmentQuantity{$numAssignments}+0.5);
  242. }
  243.  
  244. sub main'addDependency{ # FromTaskID ToTaskID
  245.     $numDependencies++;
  246.     ($dependFromID, $dependToID) = @_;
  247.     $dependFrom{$numDependencies} = $dependFromID;
  248.     $dependTo{$numDependencies} = $dependToID;
  249. }
  250.  
  251. sub main'outputToFile{ # filename, existingInterfaceFile
  252.     local($filename, $interfaceFile) = @_;
  253.     local($coretextFilename) = $filename . "/CoreText.tmdata";
  254.  
  255.     if(!&resolve()){
  256.     # messages will be printed out by resolve
  257.     exit 0;
  258.     }
  259.  
  260.     if((-f "$coretextFilename")){
  261.     print "$filename exists, overwriting\n";
  262.     }elsif((!mkdir($filename, 0775))){
  263.     die "Couldn't create $filename - exiting.";
  264.     }
  265.     if(!open(TMFILE, ">$coretextFilename")){
  266.     die "Couln't open $coretextFilename";
  267.     }
  268.     select((select(TMFILE), $| = 1)[0]);
  269.  
  270.     if($interfaceFile){
  271.     `cp $interfaceFile $filename`;
  272.     }
  273.  
  274.     &checkStructure();
  275.     &output();
  276. }
  277.  
  278. #
  279. #  Local Subroutines
  280. #
  281. sub resolve{
  282.     local($ct);
  283.  
  284.     #resolve assignments resources and tasks
  285.     for($ct = 1; $ct <= $numAssignments; $ct++){
  286.     if(!$assignmentTask{$ct} || !$assignmentResource{$ct}){
  287.         print STDERR "Error: couldn't resolve Assignment\n";
  288.         return 0;
  289.     }
  290.     if($taskType{$assignmentTask{$ct}} eq "Group"){
  291.         print STDERR "Error: assignment made to group\n";
  292.     }
  293.     }
  294.  
  295.     # check for unassigned and expenses resource assignments needed
  296.     for($ct = 2; $ct <= $numTasks; $ct++){
  297.     if($taskType{$ct} eq "Task"){
  298.         if($taskExpenses{$ct}>0){
  299.         $numAssignments++;
  300.         $assignmentTask{$numAssignments} = $ct;
  301.         $assignmentResource{$numAssignments} = 3;
  302.         $assignmentWorkTime{$numAssignments} = "0d";
  303.         $assignmentQuantity{$numAssignments} = int($taskExpenses{$ct}+0.5);
  304.         }
  305.         if($taskDuration{$ct} && !$taskHasAssignments{$ct}){
  306.         $numAssignments++;
  307.         $assignmentTask{$numAssignments} = $ct;
  308.         $assignmentResource{$numAssignments} = 2;
  309.         $assignmentWorkTime{$numAssignments} = $taskDuration{$ct};
  310.         $assignmentQuantity{$numAssignments} = 1;
  311.         }
  312.     }
  313.     }
  314.  
  315.     # resolve resource calendars
  316.     if($numResources <= 3){
  317.     $numResources++;
  318.     $resourceID{$numResources} = "Default guy";
  319.     $resourceName{$numResources} = "";
  320.     $resourceQuantity{$numResources} = 1;
  321.     $pricePerDay{$numResources} = 0;
  322.     $pricePerUse{$numResources} = 0;
  323.     if($defaultCalendar){
  324.         $resourceCalendarName{$numResources} = $defaultCalendar;
  325.     }
  326.     }
  327.     for($ct = 4; $ct <= $numResources; $ct++){
  328.     if($resourceCalendarName{$ct} && !$calendarIndexFromName{$resourceCalendarName{$ct}}){
  329.         print STDERR "Error: couldn't resolve calendar for: $resourceName{$ct}\n";
  330.         return 0;
  331.     }
  332.     }
  333.  
  334.     #resolve depends to,from
  335.     for($ct = 1; $ct <=$numDependencies; $ct++){
  336.     $dependFrom{$ct} = $taskIndexID{$dependFrom{$ct}};
  337.     $dependTo{$ct} = $taskIndexID{$dependTo{$ct}};
  338.     if(!$dependFrom{$ct} || !$dependTo{$ct}){
  339.         print STDERR "Error: couldn't resolve Dependency\n";
  340.         return 0;
  341.     }
  342.     }
  343.  
  344.     return 1;
  345. }
  346.  
  347. sub checkStructure{
  348.     print "Checking Structure...\n";
  349.     if($ignoreOutlines){
  350.     return 1;
  351.     }
  352.  
  353.     if($numTasks == 1){
  354.     &main'addTask(1,"","Task",1);
  355.     }
  356.     for($count=2; $count <= $numTasks; $count++){ 
  357.     if($taskOutline{$count} =~ /(.*\.)\d+\./){
  358.         if(!$taskIndexOutline{$1}){
  359.         $numTasks++;    
  360.         $taskName{$numTasks} = "**Unexported Group Task**";
  361.         $taskNotes{$numTasks} = "NOTE:Group task $1 wasn't exported.";
  362.         $taskIndexOutline{$1} = $numTasks;
  363.         $taskOutline{$numTasks} = $1;
  364.         $taskLevelPrio{$numTasks} = 0;
  365.         $taskSubtitle{$numTasks} = "";
  366.         $taskType{$numTasks} = "Group";
  367.         $taskConstraintType{$numTasks} = "Earliest";
  368.         $taskConstraintDate{$numTasks} = "1/1/1970";
  369.         }
  370.     }
  371.     if($taskChildren{$taskOutline{$count}} && $taskType{$count} !~ /^Group/){
  372.         $outlineNum = $taskOutline{$count};
  373.         $numTasks++;    
  374.         $taskName{$numTasks} = "**Group Task**";
  375.         $taskIndexOutline{$outlineNum} = $numTasks;
  376.         $taskOutline{$numTasks} = $outlineNum;
  377.         $taskLevelPrio{$numTasks} = 0;
  378.         $taskSubtitle{$numTasks} = "";
  379.         $taskType{$numTasks} = "Group";
  380.         $taskChildren{$numTasks} = $taskChildren{$count};
  381.         $newNum = $taskChildren{$taskOutline{$count}}+1;
  382.         $taskChildren{$outlineNum} = 0;
  383.         $taskConstraintType{$numTasks} = "Earliest";
  384.         $taskConstraintDate{$numTasks} = "1/1/1970";
  385.  
  386.         $taskOutline{$count}.= "$newNum.";
  387.         $taskIndexOutline{$taskOutline{$count}} = $count;
  388.         $taskNotes{$numTasks} = "NOTE:Task $taskName{$count} was moved to $taskOutline{$count}, it wasn't a group task";
  389.     }
  390.     }
  391.     return 1;
  392. }
  393.  
  394. sub output{
  395. #
  396. #  Print out the file...
  397. #
  398.     print "Writing...\n\n";
  399. #
  400. # Header
  401. #
  402.     print TMFILE "#!GP_CORE_TEXT-Version-9\n";
  403.     print TMFILE "#TaskMaster Output Perl script v1.0\n";
  404.     print TMFILE "\n";
  405.  
  406. #
  407. # Date/Duration stuff
  408. #
  409.  
  410.     print TMFILE "DurationParser\n";
  411.     print TMFILE "\tday 28800\n";
  412.     print TMFILE "\tweek 144000\n";
  413.     print TMFILE "\tmonth 604800\n";
  414.     print TMFILE "\tyear 7200000\n";
  415.     print TMFILE "\tdisplayRT 27\n";
  416.     print TMFILE "\tdisplayWT 27\n";
  417.     print TMFILE "end\n";
  418.     print TMFILE "\n";
  419.     print TMFILE "DateParser\n";
  420.     print TMFILE "\tEuropean 0\n";
  421.     print TMFILE "\tDateFormat 35\n";
  422.     print TMFILE "end\n";
  423.     print TMFILE "\n";
  424.  
  425. #
  426. # Resources
  427. #
  428.  
  429.     print TMFILE "# Resource Pool\n";
  430.     print TMFILE "OutlineNumResource \"\"\n";
  431.     print TMFILE "Resource 1\n";
  432.     print TMFILE "\tName \"RootResource\"\n";
  433.     print TMFILE "\tParent -1\n";
  434.     print TMFILE "\tUseCost 0 0.00000\n";
  435.     print TMFILE "\tTimeCost 3 0.00000\n";
  436.     print TMFILE "\tQuantity 1\n";
  437.     print TMFILE "end\n";
  438.  
  439.     print TMFILE "Resource 2\n";
  440.     print TMFILE "\tName \"Unassigned Tasks\"\n";
  441.     print TMFILE "\tParent 1\n";
  442.     print TMFILE "\tUseCost 0 0.00000\n";
  443.     print TMFILE "\tTimeCost 3 0.00000\n";
  444.     print TMFILE "\tQuantity 1\n";
  445.     if($defaultCalendar){
  446.     &outputCalendar($defaultCalendar);
  447.     }
  448.     print TMFILE "end\n";
  449.  
  450.     print TMFILE "Resource 3\n";
  451.     print TMFILE "\tName \"Expenses\"\n";
  452.     print TMFILE "\tParent 1\n";
  453.     print TMFILE "\tUseCost 0 1.00000\n";
  454.     print TMFILE "\tTimeCost 3 0.00000\n";
  455.     print TMFILE "\tQuantity -1\n";
  456.     print TMFILE "end\n";
  457.     $count = 4;
  458.     while ($count <= $numResources){
  459.     print TMFILE "Resource $count\n";
  460.     print TMFILE "\tName \"$resourceName{$count}\"\n";
  461.     print TMFILE "\tParent 1\n";
  462.     if($pricePerUse{$count}){
  463.         printf(TMFILE "\tUseCost 0 %f\n", $pricePerUse{$count});
  464.     }else{
  465.         print TMFILE "\tUseCost 0 0.00000\n";
  466.     }
  467.     if($pricePerDay{$count}){
  468.         printf(TMFILE "\tTimeCost 3 %f\n",$pricePerDay{$count});
  469.     }else{
  470.         print TMFILE "\tTimeCost 3 0.00000\n"; 
  471.     }
  472.     print TMFILE "\tQuantity $resourceQuantity{$count}\n";
  473.     if($resourceCalendarName{$count}){
  474.         &outputCalendar($resourceCalendarName{$count});
  475.     }
  476.     print TMFILE "end\n";
  477.     $count++;
  478.     }
  479.     print TMFILE "\n";     
  480.  
  481. #
  482. # Project Stuff
  483. #
  484.     if($projectName){
  485.     print TMFILE "Project \"$projectName\"\n";
  486.     }else{
  487.     print TMFILE "Project \"Imported Project\"\n";
  488.     }
  489.     if($projectManager){
  490.     print TMFILE "Manager \"$projectManager\"\n"; 
  491.     }else{
  492.     $manager = `/usr/ucb/whoami`;
  493.     chop($manager);
  494.     print TMFILE "Manager \"$manager\"\n"; 
  495.     }
  496.     print TMFILE "OutlineNumTask \"\"\n";
  497.     print TMFILE "Alternative 1\n";
  498.     print TMFILE "\tName \"Baseline\"\n";
  499.     print TMFILE "end\n";
  500.     print TMFILE "Alternative 2\n";
  501.     print TMFILE "\tName \"Actual\"\n";
  502.     print TMFILE "end\n";
  503.     print TMFILE "\n";
  504.  
  505. #
  506. # Tasks
  507. #
  508.     print TMFILE "Task 1\n";
  509.     print TMFILE "\tParent -1\n";
  510.     print TMFILE "\tTaskAlternative 1\n"; 
  511.     if($projectStartDate ne ""){
  512.     print TMFILE "\t\tStartOn ^$projectStartDate^\n";
  513.     }elsif($projectEndDate ne ""){
  514.     print TMFILE "\t\tEndOn ^$projectEndDate^\n";
  515.     }elsif($earliestTaskStartDate && $earliestTaskStartDate ne "1/1/93"){
  516.     print TMFILE "\t\tStartOn ^$earliestTaskStartDate^\n";
  517.     }else{
  518.     print TMFILE "\t\tStartOn ^1/1/93^\n";
  519.     }
  520.     print TMFILE "\tend\n";
  521.     print TMFILE "end\n";
  522.     &printTasksFrom("");
  523. #
  524. # Scenarios
  525. #
  526.  
  527.     print TMFILE "Scenario\n";
  528.     print TMFILE "\tName \"Baseline-Plan\"\n";
  529.     print TMFILE "\tAlternativeIDs 1 2\n" ;
  530.     print TMFILE "end\n";
  531.     print TMFILE "Scenario\n";
  532.     print TMFILE "\tName \"Baseline-Actual\"\n";
  533.     print TMFILE "\tAlternativeIDs 2 1\n";
  534.     print TMFILE "end\n";
  535.  
  536. #
  537. # Dependencies
  538. #
  539.  
  540.     for($count=1; $count <= $numDependencies; $count++){
  541.     print TMFILE "Dependency $dependTo{$count} DependsOn $dependFrom{$count}\n";
  542.     print TMFILE "\tDependencyAlternative 1\n";
  543.     print TMFILE "\t\tRelationType 1\n";
  544.     print TMFILE "\tend\n";
  545.     print TMFILE "end\n";
  546.     }
  547.  
  548. #
  549. # Assignments
  550. #
  551.  
  552.     for($count=1; $count <= $numAssignments; $count++){
  553.     print TMFILE "ScheduledEvent $assignmentResource{$count} $assignmentTask{$count} 1\n";
  554.     print TMFILE "\tPersonTime \"$assignmentWorkTime{$count}\"\n";
  555.     if($assignmentEffort{$count}){
  556.         print TMFILE "\tEffort $assignmentEffort{$count}\n";
  557.     }else{
  558.         print TMFILE "\tEffort 1.0000\n";
  559.     }
  560.     print TMFILE "\tPercentComplete 0.00000\n";
  561.     print TMFILE "\tAssignment $assignmentResource{$count} $assignmentQuantity{$count}\n";
  562.     print TMFILE "end\n";
  563.     }
  564.     print "Done Writing...\n\n";
  565.     sleep (0.5);
  566. }
  567.  
  568. sub outputCalendar { # calendar name
  569.     $calendarIndex = $calendarIndexFromName{$_[0]};
  570.     print TMFILE "\tCalendar\n";
  571.     &outputWorkDay($hoursS{$calendarIndex});
  572.     &outputWorkDay($hoursM{$calendarIndex});
  573.     &outputWorkDay($hoursT{$calendarIndex});
  574.     &outputWorkDay($hoursW{$calendarIndex});
  575.     &outputWorkDay($hoursTh{$calendarIndex});
  576.     &outputWorkDay($hoursF{$calendarIndex});
  577.     &outputWorkDay($hoursSa{$calendarIndex});
  578.     if($holidayDates{$calendarIndex}){
  579.     @holidayDates = split(/-/,$holidayDates{$calendarIndex});
  580.     print TMFILE "#\t\tHolidays\n";
  581.     for($i=0; $i <= $#holidayDates; $i++){
  582.         print TMFILE "\t\tEvent \"1d\" ^$holidayDates[$i] 0:00:00^\n";
  583.     }
  584.     }
  585.     print TMFILE "\tend\n";
  586. }
  587.  
  588. sub outputWorkDay{ # hoursOfWork
  589.     local($hours) = $_[0];
  590.     local($off, $out);
  591.  
  592.     print TMFILE "\t\tWorkDay\n";
  593.     if($hours){
  594.     $off = (24 - $hours)/2;
  595.     print TMFILE "\t\t\tOff \"${off}h\"\n";
  596.     print TMFILE "\t\t\tOn  \"${hours}h\"\n";
  597.     print TMFILE "\t\t\tOff \"${off}h\"\n";
  598.     }else{
  599.     print TMFILE "\t\t\tOff \"1d\"\n";
  600.     }
  601.     print TMFILE "\t\tend\n";
  602. }
  603.  
  604. sub earlier {
  605.     local($aDate, $bDate) = @_;
  606.     
  607.     if(!$aDate || !$bDate){
  608.     return 0;
  609.     }
  610.     @aArray = split(/\//, $aDate);
  611.     @bArray = split(/\//, $bDate);
  612.  
  613.     return ($aArray[2] < $bArray[2] || $aArray[0] < $bArray[0] || $aArray[1] < $bArray[1]);
  614. }
  615.  
  616. sub printTasksFrom {
  617.     local($currentOutline) = @_;
  618.     local($count);
  619.     if(!$ignoreOutlines){
  620.     $currentOutline .= "1.";
  621.     while ($count = $taskIndexOutline{$currentOutline}){
  622.         &outputTask($count);
  623.         &printTasksFrom($currentOutline);
  624.         $currentOutline = &increment($currentOutline);
  625.     }    
  626.     }else{
  627.     for($count=2; $count<=$numTasks ;$count++){
  628.         &outputTask($count);
  629.     }            
  630.     }
  631. }
  632.  
  633. sub outputTask{ # index
  634.     local($count) = $_[0];
  635.  
  636.     print TMFILE "Task $count\n";
  637.     print TMFILE "\tTitle \"$taskName{$count}\"\n";
  638.     if($taskSubtitle{$count}){
  639.     print TMFILE "\tSubtitle \"$taskSubtitle{$count}\"\n";
  640.     }
  641.     if($taskNotes{$count}){
  642.     print TMFILE "\tUserField \"$taskNotes{$count}\"\n";
  643.     }
  644.     if($ignoreOutlines){
  645.     print TMFILE "\tParent 1\n";
  646.     }else{
  647.     if($taskOutline{$count} =~ /(.*\.)\d+\./){
  648.         print TMFILE "\tParent $taskIndexOutline{$1}\n";
  649.     }else{
  650.         print TMFILE "\tParent 1\n";
  651.     }
  652.     }
  653.     if($taskLevelPrio{$count} > 0){
  654.     print TMFILE "\tPriority $taskLevelPrio{$count}\n";
  655.     }
  656.     print TMFILE "\tTaskAlternative 1\n"; 
  657.     print TMFILE "\t\t$taskConstraintType{$count} ^$taskConstraintDate{$count}^\n";
  658.     print TMFILE "\tend\n";
  659.     print TMFILE "end\n";
  660. }        
  661.  
  662. sub increment {
  663.     local($outlineNumber) = @_;
  664.     local(@temp);
  665.     if($outlineNumber){
  666.     @temp = split(/\./, $outlineNumber);
  667.     $temp[$#temp]++;
  668.     $ret = join('.',@temp);
  669.     $ret .= '.';
  670.     }else{
  671.     return ("1.");
  672.     }
  673. }
  674.  
  675. 1;
  676.  
  677. # Place Emacs into Perl-mode
  678. # Local Variables:
  679. # mode: perl
  680. # End:
  681.