123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- from django.db import models
- from django.core.validators import MaxValueValidator, MinValueValidator
- import random
- from .engineeringmodel import EngineeringModel, ModelChaotic
- from .attributeset import AttributeSet
- from .names import WorkerNames
-
-
- # worker klasse
- class Worker(models.Model):
- name = models.CharField(default="random worker", max_length=20)
- attributes = models.ForeignKey(AttributeSet, default=1, on_delete=models.CASCADE)
- skilledModels = models.ForeignKey(
- EngineeringModel, on_delete=models.CASCADE, blank=True
- )
- amplifyer = models.FloatField(
- default=1, validators=[MinValueValidator(1.0), MaxValueValidator(2.0)]
- )
- salary = models.IntegerField(default=1000)
- status = models.IntegerField(
- default=0, validators=[MinValueValidator(0), MaxValueValidator(3)]
- )
- # status 0 = in workermarket; 1=in company; 2=wokring on order; 3=locked
- lockedRounds = models.IntegerField(default=0, validators=[MinValueValidator(0)])
- happyness = models.IntegerField(
- default=100, validators=[MinValueValidator(0), MaxValueValidator(100)]
- )
- sick = models.BooleanField(default=False)
-
- def __str__(self):
- return self.name
-
- @classmethod
- def createRandom(cls):
- name = random.choice(WorkerNames.objects.all()).name
- attributes = AttributeSet.createRandom(20)
- allmodels = EngineeringModel.objects.all()
- allmodelsnochaotic = [
- model for model in allmodels if not isinstance(model, ModelChaotic)
- ]
- skilledModels = random.choice(allmodelsnochaotic)
- if random.random() < 0.8:
- value = round(random.uniform(1, 1.3), 1)
- else:
- value = round(random.uniform(1.3, 1.6), 1)
- amplifyer = value
- salary = round(amplifyer * 2500 * random.uniform(0.7, 1.3))
- worker = cls(
- name=name,
- attributes=attributes,
- skilledModels=skilledModels,
- amplifyer=amplifyer,
- salary=salary,
- status=0,
- )
- worker.save()
- return worker
-
- def improveAttribute(self, attribute, amount):
- self.attributes.increase(attribute=attribute, amount=amount)
-
- def calculateHappyness(self, number):
- if (self.happyness + number) > 100:
- self.happyness = 100
- elif (self.happyness + number) < 0:
- self.happyness = 0
- else:
- self.happyness += number
- self.save()
-
- def quitJob(self):
- self.delete()
-
- def calculateSick(self):
- if self.sick == False:
- randnumber = random.randint(1, 100)
- if randnumber <= 3:
- self.setStatus(3)
- self.setSick(True)
- rounds = random.randint(1, 2)
- self.setLockedRounds(rounds)
- elif self.sick == True and self.lockedRounds < 0:
- self.setSick(False)
- self.setStatus(1)
-
- def setStatus(self, status):
- self.status = status
- self.save()
-
- def getStatus(self):
- return self.status
-
- def setLockedRounds(self, amount):
- self.lockedRounds = amount
- self.save()
-
- def setSick(self, sickness):
- self.sick = sickness
- self.save()
|