public async Task <IActionResult> Create(DonationEventInputModel viewModel, RequestInfoViewModel model)
        {
            var userDonorId = this.userManager.GetUserId(this.User);

            var hospitalDataId = model.HospitalDataId != null ? model.HospitalDataId : viewModel.HospitalId;

            if (hospitalDataId == null)
            {
                return(this.RedirectToAction("HttpStatusCodeHandler", "Error", this.NotFound()));
            }

            double       neededQuantity = model.NeededQuantity;
            double       quantity       = viewModel.Quantity;
            BloodGroup   bloodGroup     = viewModel.BloodGroup;
            RhesusFactor rhesusFactor   = viewModel.RhesusFactor;

            await this.donationEventsService
            .CreateDonation(
                hospitalDataId,
                userDonorId,
                neededQuantity,
                quantity,
                bloodGroup,
                rhesusFactor);

            return(this.RedirectToAction("QAndA", "Home"));
        }
Exemple #2
0
        public async Task CreateDonation(
            string requestOrHospitalId,
            string userDonorId,
            double neededQuantity,
            double quantity,
            BloodGroup bloodGroup,
            RhesusFactor rhesusFactor)
        {
            var donorData = this.donorDataUserRepository.All()
                            .FirstOrDefault(ddu => ddu.ApplicationUserId == userDonorId);

            if (donorData == null)
            {
                throw new ArgumentException(GlobalConstants.NoDonorDataErrorMessage);
            }

            var request = this.requestRepository.All()
                          .FirstOrDefault(r => r.Id == requestOrHospitalId);

            var hospitalData = this.hospitalDataUserRepository.All()
                               .FirstOrDefault(hd =>
                                               request != null ?
                                               hd.Id == request.HospitalId : hd.Id == requestOrHospitalId);

            if (hospitalData == null)
            {
                throw new ArgumentException(GlobalConstants.NoHospitalDataErrorMessage);
            }

            var bloodBank = this.bloodBankRepository.All()
                            .FirstOrDefault(bbk => bbk.HospitalDataId == hospitalData.Id);

            var bag = this.bloodBagRepository.All()
                      .FirstOrDefault(bg => bg.BloodBankId == bloodBank.Id);

            var donationEvent = new DonationEvent
            {
                DateOfDonation = DateTime.UtcNow,
                RequestId      = request != null ? requestOrHospitalId : null,
                UserDonorId    = userDonorId,
            };

            await this.donationEventRepository.AddAsync(donationEvent);

            await this.donationEventRepository.SaveChangesAsync();

            bag = new BloodBag
            {
                Quantity       = quantity != 0 ? quantity : neededQuantity,
                CollectionDate = DateTime.UtcNow,
                DonorDataId    = donorData.Id,
                BloodGroup     = bloodGroup,
                RhesusFactor   = rhesusFactor,
                BloodBankId    = bloodBank.Id,
            };

            await this.bloodBagRepository.AddAsync(bag);

            await this.bloodBagRepository.SaveChangesAsync();
        }
        public async Task AddRecipientAsync(
            string userHospitalId,
            string firstName,
            string middleName,
            string lastName,
            int age,
            double neededQuantity,
            EmergencyStatus recipientEmergency,
            BloodGroup bloodGroup,
            RhesusFactor rhesusFactor)
        {
            var hospitalData = this.hospitalDataRepository.All()
                               .FirstOrDefault(uhd => uhd.ApplicationUserId == userHospitalId);

            if (hospitalData == null)
            {
                throw new ArgumentException(GlobalConstants.NoHospitalDataErrorMessage);
            }

            if (firstName == null ||
                middleName == null ||
                lastName == null ||
                age == 0 ||
                neededQuantity == 0)
            {
                throw new ArgumentException(GlobalConstants.NotFullRecipientDataErrorMessage);
            }

            var recipient = new Recipient
            {
                FirstName          = firstName,
                MiddleName         = middleName,
                LastName           = lastName,
                Age                = age,
                NeededQuantity     = neededQuantity,
                RecipientEmergency = recipientEmergency,
                BloodGroup         = bloodGroup,
                RhesusFactor       = rhesusFactor,
            };

            var recipientHospitalData = new RecipientHospitalData
            {
                HospitalDataId = hospitalData.Id,
                RecipientId    = recipient.Id,
            };

            recipient.HospitalDataId = recipientHospitalData.HospitalDataId;

            await this.recipientsRepository.AddAsync(recipient);

            await this.recipientsRepository.SaveChangesAsync();

            await this.recipientHospitalDataRepository.AddAsync(recipientHospitalData);

            await this.recipientHospitalDataRepository.SaveChangesAsync();
        }
        public async Task <string> CreateRequestAsync(
            string userId,
            string content,
            DateTime publishedOn,
            EmergencyStatus emergencyStatus,
            BloodGroup bloodGroup,
            RhesusFactor rhesusFactor,
            double neededQuantity)
        {
            if (neededQuantity == 0)
            {
                throw new ArgumentException(GlobalConstants.NoQuantityErrrorMessage);
            }

            var hospitalData = this.hospitalDataRepository.All()
                               .Where(hd => hd.ApplicationUserId == userId)
                               .FirstOrDefault();

            if (hospitalData == null)
            {
                throw new ArgumentException(GlobalConstants.NoHospitalDataErrorMessage);
            }

            var location = this.locationDataRepository.All()
                           .FirstOrDefault(l => l.Id == hospitalData.LocationId);

            var request = new Request
            {
                HospitalName    = hospitalData.Name,
                Content         = content,
                PublishedOn     = publishedOn,
                EmergencyStatus = emergencyStatus,
                BloodGroup      = bloodGroup,
                RhesusFactor    = rhesusFactor,
                NeededQuantity  = neededQuantity,
                Location        = location,
            };

            request.HospitalId = hospitalData.Id;

            await this.requestsRepository.AddAsync(request);

            await this.requestsRepository.SaveChangesAsync();

            var userHospital = new HospitalDataRequest
            {
                HospitalDataId = hospitalData.Id,
                RequestId      = request.Id,
            };

            await this.requestsHospitalDataRepository.AddAsync(userHospital);

            await this.requestsHospitalDataRepository.SaveChangesAsync();

            return(request.Id);
        }
        public async Task <IEnumerable <BloodBag> > EmptyBloodAsync(string userHospitalDataId, BloodGroup bloodGroup, RhesusFactor rhesusFactor)
        {
            var hospitalData = this.hospitalsRepository
                               .All()
                               .FirstOrDefault(hd => hd.ApplicationUserId == userHospitalDataId);

            var bloodBank = this.bloodBankRepository
                            .All()
                            .FirstOrDefault(bb => bb.HospitalDataId == hospitalData.Id);

            var bloodBags = this.bagRepository.All()
                            .Where(bag =>
                                   bag.BloodBankId == bloodBank.Id &&
                                   bag.BloodGroup == bloodGroup &&
                                   bag.RhesusFactor == rhesusFactor);

            foreach (var bag in bloodBags)
            {
                bag.IsDeleted = true;
            }

            await this.bagRepository.SaveChangesAsync();

            return(bloodBags.ToList());
        }
Exemple #6
0
 public Blood(BloodType type, RhesusFactor rhFactor)
 {
     BloodType    = type;
     RhesusFactor = rhFactor;
 }