A graph-based constraint programming approach for the integrated process planning and scheduling problem