We've tried to make this as simple as possible, but we're using a couple of cool techniques to prevent accidental deletion of Project (and Contact) records while keeping the system unlocked. For a detailed overview of these techniques, please read Deleting Contacts for an overview of all this before reading below which just deals with project specific issues.. Thanks.
Projects have fewer direct children than contacts do so the deletion issues are a bit simpler here. We are doing one interesting thing, however. When you enter project start and end dates in the header of the project's record...
...you're actually creating a related appointment record marked as a "project overview" record. This is how we get these overview dates to show up in the gantt chart.
So, when you delete a project we want to delete these overview records as well so that they don't persist in the gantt chart after the project is gone. To accomplish this we've turned on cascading deletes in the relationship from Projects to ProjectApptOverview
We suggest you leave activity in place when we deleting projects but if you don't want to, you can turn Cascading Deletes on from Projects to ProjectActivitySimple. You could also turn cascades on from Projects to Project_PhasesSimple to delete a project's phases when you delete the project but we don't recommend it.
Our orphan control scripts restrict your ability to delete projects that have phases. However, this can get a little strange when deleting found sets. For instance, if you have both a project and all its phases in a found set and select Records / Delete All Records, one of two things will happen...
So, just make sure you've thought things through before you start batch deleting projects. It may be worthwhile to simply mark projects as inactive instead of deleting them.