Как рассчитать время на основе заданных дней

Модель :

class PackageLabPrice(core_models.TimestampedModel):
package = models.ForeignKey(
    Package, related_name="package_lab_price", on_delete=models.CASCADE
)
assigned_lab = models.ForeignKey(
    "sampleregistration.LabsCredentials", null=True, blank=True, on_delete=models.CASCADE
)
tat_time_duration = models.DurationField(blank=True, null=True,default=timedelta(hours=48))
package_price = models.FloatField(null=True, blank=True, default=None)
offer_price = models.FloatField(null=True, blank=True, default=None)
addon_price = models.FloatField(null=True, blank=True, default=None)
is_active = models.BooleanField(default=True)
is_outsource = models.BooleanField(default=False)
days = models.ManyToManyField(core_models.Days, related_name="package_lab_price_days", blank=True)

Здесь поле пакета - Test. Поэтому мне нужно рассчитать время. Допустим, кто-то заказал тест на пятницу, и его tat_time_duration составляет два дня. Но назначенная лаборатория закрыта в субботу и воскресенье. Поэтому человек должен получить ропорт во вторник. Но опять же, назначенная_лаборатория может быть закрыта во вторник. (Для каждого теста задается длительность по умолчанию_tat_duration и в какой день лаборатория открыта или закрыта. Итак, мне нужно получить окончательный результат.

Example

Я хотел бы прояснить ситуацию с этим изображением. Человек заказал анализ на пятницу, а его tat_time_duration составляет два дня, поэтому он получит отчет во вторник. Потому что суббота и солнце не отображены для этого теста (полный анализ крови). Следующий случай, если анализ заказан на понедельник. Человек получит отчет в среду. В последнем случае, если анализ заказан на среду, человек получит отчет во вторник, так как суббота и воскресенье не работают плюс два дня (учитывая tat_time_duration). Таким образом, для всех тестов по умолчанию используются tat_time_duration и дни. Мне нужно получить конечный результат на основе открытых и закрытых дней. Как это сделать. Я новичок в Djanog. Любая помощь будет очень признательна. Спасибо!!!

Вернуться на верх