@gikido
For DefaultDate of the Date Picker use this:
If(myDefaultDate>Today(),Today(),myDefaultDate)
For OnChange of the Date Picker use this:
With
(
{myCurrentDate:Self.SelectedDate,myDay:Day(Self.SelectedDate)}
,If(myCurrentDate>Today(),Set(myDefaultDate,DateAdd(Self.SelectedDate,1,Days));Notify("Date must not be later than today's date",NotificationType.Error),If(myDay<=7,Set(myDefaultDate,Date(Year(myCurrentDate),Month(myCurrentDate),7)),If(myDay>=8&&myDay<=17,Set(myDefaultDate,Date(Year(myCurrentDate),Month(myCurrentDate),17)),If(myDay>=18&&myDay<=27,Set(myDefaultDate,Date(Year(myCurrentDate),Month(myCurrentDate),27)),Set(myDefaultDate,DateAdd(Self.SelectedDate,1,Days)))))
));
Reset(Self);
If the date is greater than today, an error is displayed, and the Date Picker is reset to show today's date.
If the day is greater than 27, I have changed your last rule. Instead of specifically setting the day to 6, it will set the day to the day +1. However, it actually will end up keeping on doing this, until it reaches your first rule again (since the 1st day is less than 7), which ends up setting it to 7th day of the following month.
I think it might work better that way. Not only that, but if selecting say the end of October, causes the first rule to be hit to try and set it to November 7, it will actually find out that it went past Today, and should end up setting it to Today. So I think it might work better this way.
In case you really must have the final rule set it to the 6th day of the month and not the 7th, this might be sort of tricky, I'll give the above for now which wraps your last rule back into the first rules, as I feel like it might be working more smoothly that way.