Automation to Mark as Reviewed and Set Next Review Date to Specific Date?

I have a list of projects I review seasonally (every three months), usually around the solstices/equinoxes. So, I have these projects set to review every 3 months. The thing is, I don’t always have time the day exactly three months before the next review date. So if I set a project to be reviewed every three months, but I don’t review it exactly three months before the next review date, it will appear for review later than I would like it to.

So for example, let’s say I have another seasonal review set for Sep 20. Sep 20 rolls around, and it turns out this this is actually a busy day, and I don’t have time to do my seasonal review until the next day. So on Sep 21, is there a way I could make a button that marks a selected project as reviewed, and sets the next review date to Dec 20? And then again, if I have to delay my December 20th seasonal review to say, Dec 22, if it could set the next review to Mar 20? And so on.

Hi, I am by no means an expert but I think the answer is to Repeat from Assigned Dates and not Completion.

Are your projects set to Repeat on Completion? If so, try testing with Assigned Dates.

Completion is for something like getting a hair cut. I want it cut 4-weeks from completion.

Assigned Dates are for something that needs doing on a set cycle irrespective of when the last task was completed. For example, I might pay my rent every 4-weeks. If I am a week late one month it is then due again in 3-weeks on the Assigned Date.

I hope this helps

The repetition rules for review are less advanced than for defer and due dates so you can’t use the Assigned Dates method @iwaddo described directly. However, consider creating a project or task group with repetition rules and a first action of “review seasonal tasks”. Then you can use the full complexity of the defer and due date repetitions. You would still see the project when you did your reviews, but that is not necessarily a bad thing.

You can manually change the next review date of a project through the user interface. Click on the review date in the project inspector.

If you want to change a project review date with a script, the following is an example you can adapt to your needs. Save it as a *.omnijs file and import it to OmniFocus. More information is at https://omni-automation.com/.

/*{
	"type": "action",
	"targets": ["omnifocus"],
	"author": "M P",
	"identifier": "local.omnifocus.test_time",
	"version": "1.0",
	"description": "Action Description",
	"label": "test time",
	"shortLabel": "test time"
}*/
(() => {
	var action = new PlugIn.Action(function(selection, sender){
        const proj = selection.projects[0]
        
        const form = new Form();
        form.addField(new Form.Field.Date(
        	"date",
        	"Next review date",
        	proj.nextReviewDate
        	));
        form.show("Move the review date", "Okay")
        .then(form => {
        	selection.projects.forEach(proj => {
                proj.nextReviewDate = form.values["date"];
            });
        });	
	});
	
	action.validate = function(selection, sender){
	    return selection.projects.length > 0;
	} ;
	
	return action;
})();