Пример #1
0
class Controller():
    def __init__(self):
        self.notif = Notification()
        self.log = Logs()
        self.bloodBank = BloodBank()

    def addBR(self, bloodType, Location, day1, month1, year1, day2, month2,
              year2, isOkay):
        if (isOkay == "True"):
            br = BloodRecord(bloodType, Location, day1, month1, year1, day2,
                             month2, year2, isOkay)
            if (br.hasExpired()):
                self.log.addLog(
                    "addBloodRecord",
                    "BloodRecord: {}, {}-{}-{}, {}-{}-{}, {} expired".format(
                        bloodType.name, year1, month1, day1, year2, month2,
                        day2, Location), "failure")
                self.notif.addNotif(
                    "Expired blood can not be entered into the system")
                if (self.bloodBank.BelowThreshold(0)):
                    self.notif.addNotif(
                        "Not enough blood added to guarantee minimum supply")
                    self.log.addLog("addBloodRecord",
                                    "Minimum supply not met after insertion",
                                    "success")
            else:
                self.bloodBank.Push(bloodType, br)
                self.log.addLog(
                    "addBloodRecord",
                    "Added BloodRecord: {}, {}-{}-{}, {}-{}-{}, {}".format(
                        bloodType.name, year1, month1, day1, year2, month2,
                        day2, Location), "success")
                if (self.bloodBank.BelowThreshold(1)):
                    self.notif.addNotif(
                        "Not enough blood added to guarantee minimum supply")
                    self.log.addLog("addBloodRecord",
                                    "Minimum supply not met after insertion",
                                    "success")
        else:
            self.log.addLog(
                "addBloodRecord",
                "BloodRecord: {}, {}-{}-{}, {}-{}-{}, {} rejected".format(
                    bloodType.name, year1, month1, day1, year2, month2, day2,
                    Location), "failure")
            if (self.bloodBank.BelowThreshold(0)):
                self.notif.addNotif(
                    "Not enough blood added to guarantee minimum supply")
                self.log.addLog("addBloodRecord",
                                "Minimum supply not met after insertion",
                                "success")

    def ViewNotifs(self):
        return self.notif.viewNotifs()

    def ViewLog(self):
        return self.log.viewLog()

    def ViewBR(self):
        # transform BloodRecords into Strings
        return self.bloodBank.ViewAll()

    def ViewBRLevels(self):
        return self.bloodBank.ViewBRLevels()

    def RequestBR(self, bloodType):
        while (self.bloodBank.CompatibleBloodExists(bloodType)):
            # checks if a responding to request will result in > minimum supply of blood
            if (self.bloodBank.BelowThreshold(-1)):
                self.notif.addNotif(
                    "Removal results in blood levels below minimum supply")
                self.log.addLog("bloodRequest",
                                "Minimum supply not guaranteed after removal",
                                "failure")
                return None
            else:
                requestedBlood = self.bloodBank.GetBloodMatch(bloodType)
                # found expired blood so we dont return it
                # Qop has already removed it from the system
                # continue looping to find suitable blood for request
                if (requestedBlood.hasExpired()):
                    self.notif.addNotif(
                        "Expired blood has been found and removed")
                    self.log.addLog(
                        "expiredBlood",
                        "expired BloodRecord: {}, {}-{}-{}, {}-{}-{}, {} found and removed"
                        .format(requestedBlood.bType.name,
                                requestedBlood.donationDate.year,
                                requestedBlood.donationDate.month,
                                requestedBlood.donationDate.day,
                                requestedBlood.expiryDate.year,
                                requestedBlood.expiryDate.month,
                                requestedBlood.expiryDate.day,
                                requestedBlood.location), "success")
                    continue
                else:
                    self.notif.addNotif(
                        "One unit of {} type blood has been used".format(
                            bloodType.name))
                    self.log.addLog(
                        "bloodRequest",
                        "BloodRecord: {}, {}-{}-{}, {}-{}-{}, {} used to respond to request"
                        .format(requestedBlood.bType.name,
                                requestedBlood.donationDate.year,
                                requestedBlood.donationDate.month,
                                requestedBlood.donationDate.day,
                                requestedBlood.expiryDate.year,
                                requestedBlood.expiryDate.month,
                                requestedBlood.expiryDate.day,
                                requestedBlood.location), "success")
                    return self.bloodBank.BRToJSONString(requestedBlood)
        # no blood found
        else:
            self.log.addLog(
                "bloodRequest",
                "No available blood of type {}".format(bloodType.name),
                "failure")
            return None