1230
1227
project.addScheduleManager( sm );
1231
1228
project.calculate( *sm );
1235
printDebug( &project, task1, s);
1236
printSchedulingLog( *sm, s );
1238
QCOMPARE( task1->earlyStart(), targetstart );
1239
QVERIFY( task1->lateStart() >= task1->earlyStart() );
1240
QVERIFY( task1->earlyFinish() <= task1->endTime() );
1241
QVERIFY( task1->lateFinish() >= task1->endTime() );
1243
QCOMPARE( task1->startTime(), DateTime( r->availableFrom().date(), t1 ) );
1244
QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
1245
QVERIFY( task1->schedulingError() == false );
1230
// printDebug( r, s);
1231
// printDebug( mr, s);
1232
// printDebug( &project, task1, s);
1233
// printSchedulingLog( *sm, s );
1235
QCOMPARE( task1->earlyStart(), task1->requests().workTimeAfter( targetstart ) );
1236
QVERIFY( task1->lateStart() >= task1->earlyStart() );
1237
QVERIFY( task1->earlyFinish() <= task1->endTime() );
1238
QVERIFY( task1->lateFinish() >= task1->endTime() );
1240
QCOMPARE( task1->startTime(), DateTime( r->availableFrom().date(), t1 ) );
1241
QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
1242
QVERIFY( task1->schedulingError() == false );
1245
void ProjectTester::requiredResource()
1248
project.setName( "P1" );
1249
DateTime targetstart = DateTime( QDate::currentDate(), QTime(0,0,0) );
1250
DateTime targetend = DateTime( targetstart.addDays( 7 ) );
1251
project.setConstraintStartTime( targetstart );
1252
project.setConstraintEndTime( targetend);
1254
Calendar *c = new Calendar("Test");
1256
int length = 8*60*60*1000; // 8 hours
1258
for ( int i = 1; i <= 7; ++i ) {
1259
CalendarDay *wd1 = c->weekday(i);
1260
wd1->setState(CalendarDay::Working);
1261
wd1->addInterval(TimeInterval(t1, length));
1263
project.addCalendar( c );
1265
Task *task1 = project.createTask( &project );
1266
task1->setName( "T1" );
1267
project.addTask( task1, &project );
1268
task1->estimate()->setUnit( Duration::Unit_h );
1269
task1->estimate()->setExpectedEstimate( 8.0 );
1270
task1->estimate()->setType( Estimate::Type_Effort );
1272
QString s = "Required resource: Working + required material resource --------";
1273
ResourceGroup *g = new ResourceGroup();
1274
project.addResourceGroup( g );
1275
Resource *r = new Resource();
1276
r->setName( "Work" );
1277
r->setAvailableFrom( targetstart );
1278
r->setCalendar( c );
1279
project.addResource( g, r );
1281
ResourceGroup *mg = new ResourceGroup();
1282
mg->setType( ResourceGroup::Type_Material );
1283
project.addResourceGroup( mg );
1284
Resource *mr = new Resource();
1285
mr->setType( Resource::Type_Material );
1286
mr->setName( "Material" );
1287
mr->setAvailableFrom( targetstart );
1288
mr->setCalendar( c );
1289
project.addResource( mg, mr );
1291
ResourceGroupRequest *gr = new ResourceGroupRequest( g );
1292
task1->addRequest( gr );
1293
ResourceRequest *rr = new ResourceRequest( r, 100 );
1294
gr->addResourceRequest( rr );
1296
QList<Resource*> lst; lst << mr;
1297
rr->setRequiredResources( lst );
1299
ScheduleManager *sm = project.createScheduleManager( "Test Plan" );
1300
project.addScheduleManager( sm );
1301
project.calculate( *sm );
1303
// Debug::print( r, s);
1304
// Debug::print( mr, s);
1305
// Debug::print( &project, task1, s);
1306
// Debug::printSchedulingLog( *sm, s );
1308
QCOMPARE( task1->earlyStart(), task1->requests().workTimeAfter( targetstart ) );
1309
QVERIFY( task1->lateStart() >= task1->earlyStart() );
1310
QVERIFY( task1->earlyFinish() <= task1->endTime() );
1311
QVERIFY( task1->lateFinish() >= task1->endTime() );
1313
QCOMPARE( task1->startTime(), DateTime( r->availableFrom().date(), t1 ) );
1314
QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
1315
QVERIFY( task1->schedulingError() == false );
1317
QList<Appointment*> apps = r->appointments( sm->id() );
1318
QVERIFY( apps.count() == 1 );
1319
QCOMPARE( task1->startTime(), apps.first()->startTime() );
1320
QCOMPARE( task1->endTime(), apps.last()->endTime() );
1322
apps = mr->appointments( sm->id() );
1323
QVERIFY( apps.count() == 1 );
1324
QCOMPARE( task1->startTime(), apps.first()->startTime() );
1325
QCOMPARE( task1->endTime(), apps.last()->endTime() );
1327
s = "Required resource limits availability --------";
1328
DateTime tomorrow = targetstart.addDays( 1 );
1329
mr->setAvailableFrom( tomorrow );
1330
project.calculate( *sm );
1332
// Debug::print( r, s);
1333
// Debug::print( mr, s);
1334
// Debug::print( &project, task1, s);
1335
// Debug::printSchedulingLog( *sm, s );
1337
QCOMPARE( task1->earlyStart(), task1->requests().workTimeAfter( targetstart ) );
1338
QVERIFY( task1->lateStart() >= task1->earlyStart() );
1339
QVERIFY( task1->earlyFinish() <= task1->endTime() );
1340
QVERIFY( task1->lateFinish() >= task1->endTime() );
1342
QCOMPARE( task1->startTime(), DateTime( mr->availableFrom().date(), t1 ) );
1343
QCOMPARE( task1->endTime(), task1->startTime() + Duration( 0, 8, 0 ) );
1344
QVERIFY( task1->schedulingError() == false );
1346
apps = r->appointments( sm->id() );
1347
QVERIFY( apps.count() == 1 );
1348
QCOMPARE( task1->startTime(), apps.first()->startTime() );
1349
QCOMPARE( task1->endTime(), apps.last()->endTime() );
1351
apps = mr->appointments( sm->id() );
1352
QVERIFY( apps.count() == 1 );
1353
QCOMPARE( task1->startTime(), apps.first()->startTime() );
1354
QCOMPARE( task1->endTime(), apps.last()->endTime() );
1357
void ProjectTester::resourceWithLimitedAvailability()
1360
project.setName( "P1" );
1361
DateTime targetstart = DateTime( QDate( 2010, 5, 1 ), QTime(0,0,0) );
1362
DateTime targetend = DateTime( targetstart.addDays( 7 ) );
1363
project.setConstraintStartTime( targetstart );
1364
project.setConstraintEndTime( targetend);
1366
DateTime expectedEndTime( QDate( 2010, 5, 3 ), QTime( 16, 0, 0 ) );
1368
Calendar *c = new Calendar("Test");
1370
int length = 8*60*60*1000; // 8 hours
1372
for ( int i = 1; i <= 7; ++i ) {
1373
CalendarDay *wd1 = c->weekday(i);
1374
wd1->setState(CalendarDay::Working);
1375
wd1->addInterval(TimeInterval(t1, length));
1377
project.addCalendar( c );
1379
Task *task1 = project.createTask( &project );
1380
task1->setName( "T1" );
1381
project.addTask( task1, &project );
1382
task1->estimate()->setUnit( Duration::Unit_d );
1383
task1->estimate()->setExpectedEstimate( 4.0 );
1384
task1->estimate()->setType( Estimate::Type_Effort );
1386
QString s = "Two resources: One with available until < resulting task length --------";
1387
ResourceGroup *g = new ResourceGroup();
1388
project.addResourceGroup( g );
1389
Resource *r1 = new Resource();
1390
r1->setName( "R1" );
1391
r1->setAvailableFrom( targetstart );
1392
r1->setCalendar( c );
1393
project.addResource( g, r1 );
1395
Resource *r2 = new Resource();
1396
r2->setName( "R2" );
1397
r2->setAvailableFrom( targetstart );
1398
r2->setAvailableUntil( targetstart.addDays( 1 ) );
1399
r2->setCalendar( c );
1400
project.addResource( g, r2 );
1402
ResourceGroupRequest *gr = new ResourceGroupRequest( g );
1403
task1->addRequest( gr );
1404
ResourceRequest *rr1 = new ResourceRequest( r1, 100 );
1405
gr->addResourceRequest( rr1 );
1406
ResourceRequest *rr2 = new ResourceRequest( r2, 100 );
1407
gr->addResourceRequest( rr2 );
1409
ScheduleManager *sm = project.createScheduleManager( "Test Plan" );
1410
project.addScheduleManager( sm );
1411
project.calculate( *sm );
1413
Debug::print( r1, s);
1414
Debug::print( r2, s);
1415
Debug::print( &project, task1, s);
1416
Debug::printSchedulingLog( *sm, s );
1418
QCOMPARE( task1->endTime(), expectedEndTime );
1248
1421
} //namespace KPlato