This commit is contained in:
aminhashemi92 2025-09-29 17:38:11 +03:30
parent 810c87e2e0
commit b5bf3a5dbe
51 changed files with 2397 additions and 326 deletions

View file

@ -290,6 +290,10 @@ class ProcessInstance(SluggedModel):
dependencies = step.get_dependencies()
for dependency_id in dependencies:
step_instance = self.step_instances.filter(step_id=dependency_id).first()
if step_instance and step_instance.status == 'in_progress' and step_instance.step.order == 3 and step.order == 4:
return True
if step_instance and step_instance.status == 'approved' and step_instance.step.order == 8 and step.order == 9:
return True
if not step_instance or step_instance.status != 'completed':
return False
return True
@ -320,6 +324,7 @@ class StepInstance(models.Model):
('skipped', 'رد شده'),
('blocked', 'مسدود شده'),
('rejected', 'رد شده و نیاز به اصلاح'),
('approved', 'تایید اضطراری'),
],
default='pending',
verbose_name="وضعیت"
@ -417,6 +422,7 @@ class StepRejection(models.Model):
blank=True
)
created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ رد شدن")
is_deleted = models.BooleanField(default=False, verbose_name='حذف شده')
history = HistoricalRecords()
class Meta:
@ -433,6 +439,14 @@ class StepRejection(models.Model):
self.step_instance.save()
super().save(*args, **kwargs)
def hard_delete(self):
super().delete()
def delete(self, *args, **kwargs):
self.is_deleted = True
self.save()
class StepApproverRequirement(models.Model):
"""Required approver roles for a step."""
@ -457,11 +471,20 @@ class StepApproval(models.Model):
decision = models.CharField(max_length=8, choices=[('approved', 'تایید'), ('rejected', 'رد')], verbose_name='نتیجه')
reason = models.TextField(blank=True, verbose_name='علت (برای رد)')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ')
is_deleted = models.BooleanField(default=False, verbose_name='حذف شده')
class Meta:
unique_together = ('step_instance', 'role')
verbose_name = 'تایید مرحله'
verbose_name_plural = 'تاییدهای مرحله'
def delete(self, *args, **kwargs):
self.is_deleted = True
self.save()
def hard_delete(self):
super().delete()
def __str__(self):
return f"{self.step_instance} - {self.role} - {self.decision}"