The logic I would employ is something like
WHEN DateFin > CASE WHEN [Today is after the 7th] THEN [1st of This Month]
ELSE [First of Last Month]
END
THEN 1
ELSE 0
END
So the part that needs solving is getting the right date to compare to. The simplest way of doing this is getting the first of the month, for the day 7 days ago. The standard logic for getting the 1st of the current month is:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
Or if you prefer a shorter method you can rely on the implicit cast of an int to a date:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
Then just apply this logic to 7 days ago:
SELECT DATEADD(MONTH, DATEDIFF(MONTH, '19000101', DATEADD(DAY, -7, GETDATE())), '19000101')
Making your full statement:
save_visible = CASE WHEN DateFin >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', DATEADD(DAY, -7, GETDATE())), '19000101')
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END
Here's a quick test of this logic
SELECT Today = d.Date,
CutOffDate = CAST(DATEADD(MONTH, DATEDIFF(MONTH, '19000101', DATEADD(DAY, -7, d.Date)), '19000101') AS DATE)
FROM ( SELECT Date = CAST(DATEADD(DAY, - Number, '20140610') AS DATE)
FROM master..spt_values
WHERE [Type] = 'P'
AND Number BETWEEN 0 AND 50
) AS d
Gives
Today CutOffDate
2014-06-09 2014-06-01
2014-06-08 2014-06-01
2014-06-07 2014-05-01
2014-06-06 2014-05-01
....
2014-05-08 2014-05-01
2014-05-07 2014-04-01
2014-05-06 2014-04-01
2014-05-05 2014-04-01