export def lumen-assono-backup-nexttape [dateinput: datetime]: nothing -> nothing { print 'Next Required Tape:' print $'($dateinput | get-backup-string)' print '' print 'Tapes after that:' 1..9 | each {|i| print $'($i): (($dateinput + ((7 * $i) | into duration -u day)) | get-backup-string)' } | ignore } def get-backup-string []: datetime -> string { let backupDay = $in - ($in | format date '%w' | into duration -u day) + 6day let saturdayOfMonth = $backupDay | get-week-of-month let monthOfQuarter = $backupDay | get-month-of-quarter let quarter = $backupDay | get-quarter let year = $backupDay | get-year if ($saturdayOfMonth == 1) { if ($monthOfQuarter == 1) { if ($quarter == 1) { $'TapeLTO5-Y(($year | into string | str substring 3..))' } else { $'TapeLTO5-Q($quarter)' } } else { $'TapeLTO5-M($monthOfQuarter)' } } else { $'TapeLTO5-W($saturdayOfMonth)' } } def get-week-of-month []: datetime -> int { let firstDay = ($in - ($in | format date '%d' | into duration -u day) + 1day) let $firstSpecificDay = $firstDay + (((($in | format date '%w' | into int) + 7 - ($firstDay | format date '%w' | into int)) mod 7) | into duration -u day) ((($in - $firstSpecificDay) | into int | into datetime | format date '%d' | into int) / 7 | math floor) + 1 } def get-month-of-quarter []: datetime -> int { let month = ($in | format date '%m' | into int) + 3 ($month..($month - 3)..1) | last } def get-quarter []: datetime -> int { (($in | format date '%m') | into int) / 3 | math ceil } def get-year []: datetime -> int { $in | format date '%Y' }