def defer(self): today = datetime.date.today() if today > self.date: raise ValueError('unable to defer assignments that have already been completed') eligible_workers = self.eligible_defer_targets() weighted_workers = [(w, w.deferral_weight()) for w in eligible_workers] new_worker = weighted_choice(weighted_workers) # create the debit debit = Debit.objects.create( worker=self.worker, skipped_assignment=self, ) # create the credit credit = Credit.objects.create( debit=debit, worker=new_worker, ) # resassign worker on current assignment self.worker = new_worker self.defer_code = generate_uuid() self.save() email.defer_notify(debit) return debit
def defer_to(self, new_worker): assert isinstance(new_worker, NamelessWorker) debit = Debit.objects.create( worker=self.worker, skipped_assignment=self ) credit = Credit.objects.create( debit=debit, worker=new_worker ) self.worker = new_worker self.defer_code = generate_uuid() self.save() email.defer_notify(debit) return debit