123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- from django.db import models
- from polymorphic.models import PolymorphicModel
-
- # from .company import Company
- from .worker import Worker
- from .offer import Offer
- from .order import Order
-
-
- # Action und erbende Klassen
- class Action(PolymorphicModel):
- name = models.CharField(default="random Action", max_length=20)
- actionmaker = models.ForeignKey("Company", default=1, on_delete=models.CASCADE)
-
- def execute(self):
- pass
-
- def cancel(self):
- pass
-
- def addActionToCompany(self):
- self.actionmaker.addAction(self)
-
- def __str__(self):
- return self.name
-
-
- class ActionEmploy(Action):
- worker = models.ForeignKey(Worker, default=1, on_delete=models.CASCADE)
-
- @classmethod
- def create(cls, worker, actionmaker):
- # klassenobject erstellen
- name = "Hiring " + worker.name
- action = cls(name=name, worker=worker, actionmaker=actionmaker)
- action.save()
- # worker von market entferenen und action zu company hinzufügen
- actionmaker.removeFromWorkermarket(worker)
- action.addActionToCompany()
- return action
-
- def execute(self):
- self.worker.setStatus(1)
- self.worker.save()
- self.actionmaker.workers.add(self.worker)
- # Arbeiter zu Company hinzufügen
-
- def cancel(self):
- self.actionmaker.addToWorkermarket(self.worker)
-
-
- class ActionUnemploy(Action):
- worker = models.ForeignKey(Worker, null=True, blank=True, on_delete=models.CASCADE)
-
- @classmethod
- def create(cls, worker, actionmaker):
- # klassenobject erstellen
- name = "Firing " + worker.name
- action = cls(name=name, worker=worker, actionmaker=actionmaker)
- action.save()
- # workerstatus anpassen und action zu company hinzufügen
- actionmaker.workers.remove(worker)
- action.addActionToCompany()
- return action
-
- def execute(self):
- pass # self.worker.delete() hier das delete noch machbar machen
-
- def cancel(self):
- self.actionmaker.workers.add(self.worker)
-
-
- class ActionOffer(Action):
- order = models.ForeignKey(Order, default=1, on_delete=models.CASCADE)
- amount = models.IntegerField(default=0)
-
- @classmethod
- def create(cls, order, amount, actionmaker):
- # klassenobject erstellen
- name = "Offer for " + order.name
- action = cls(
- name=name,
- order=order,
- amount=amount,
- actionmaker=actionmaker,
- )
- action.save()
- # order von market entfernen und action zu company hinzufügen
- action.addActionToCompany()
- return action
-
- def execute(self):
- self.order.setStatus(1)
- self.order.save()
- offer = Offer.objects.create(
- company=self.actionmaker, amount=self.amount, order=self.order
- )
- self.order.offers.add(offer)
- # Angebot einer Order auf OrderMarket vorlegen
-
- def cancel(self):
- # bleibt leer actually
- pass
-
-
- class ActionCancelOrder(Action):
- order = models.ForeignKey(Order, default=1, on_delete=models.CASCADE)
-
- @classmethod
- def create(cls, order, actionmaker):
- # klassenobject erstellen
- name = "Cancel " + order.name
- action = cls(
- name=name,
- order=order,
- actionmaker=actionmaker,
- )
- action.save()
- # action zu company hinzufügen
- action.addActionToCompany()
- return action
-
- def execute(self):
- self.actionmaker.calculateCustomerSatisfaction(-30)
- self.order.cancelOrder()
- self.order.delete()
-
- def cancel(self):
- # bleibt leer actually
- pass
-
-
- class ActionTrain(Action):
- worker = models.ForeignKey(Worker, null=True, blank=True, on_delete=models.CASCADE)
- trainskill = models.CharField(default="empty", max_length=50)
- cost = models.IntegerField(default=1000)
-
- @classmethod
- def create(cls, worker, trainskill, actionmaker):
- # klassenobject erstellen
- name = "Train Worker " + worker.name
- action = cls(
- name=name,
- worker=worker,
- trainskill=trainskill,
- actionmaker=actionmaker,
- )
- # worker locken status 3
- worker.setStatus(3)
- action.save()
- # action zu company hinzufügen
- action.addActionToCompany()
- return action
-
- def execute(self):
- # Arbeiter in bestimmtem Skill verbesser und für eine runde locken
- self.worker.improveAttribute(attribute=self.trainskill, amount=10)
- self.worker.setLockedRounds(1)
- # trainingskosten zahlen
- self.actionmaker.addProfit(-self.cost)
-
- def cancel(self):
- self.worker.setStatus(1)
|