public override async Task <ServiceResult> GetById(int id, bool EagerLoaded)
        {
            var user = await _authService.LoggedInUser();

            if (user == null)
            {
                return(ServiceResult.Unauthorized());
            }

            if (await _authService.CurrentUserIsInRoleAsync(RoleType.RadnikPrijem) ||
                await _authService.CurrentUserIsInRoleAsync(RoleType.MedicinskiTehnicar) ||
                await _authService.CurrentUserIsInRoleAsync(RoleType.Doktor))
            {
                if (!await _dbContext.Radnici
                    .AnyAsync(x => x.KorisnickiNalogId == user.Id && x.LicniPodaciId == id))
                {
                    return(ServiceResult.Forbidden("Nemate permisije za pristup licnim podacima drugih uposlenika."));
                }
            }
            else if (await _authService.CurrentUserIsInRoleAsync(RoleType.Pacijent))
            {
                if (!await _dbContext.Pacijenti
                    .Include(x => x.ZdravstvenaKnjizica)
                    .AnyAsync(x => x.KorisnickiNalogId == user.Id && x.ZdravstvenaKnjizica.LicniPodaciId == id))
                {
                    return(ServiceResult.Forbidden("Nemate permisije za pristup licnim podacima drugih pacijenata."));
                }
            }

            return(await base.GetById(id, EagerLoaded));
        }
Beispiel #2
0
        public virtual async Task <ServiceResult> GetById(int id, bool EagerLoaded)
        {
            TEntity result;

            if (EagerLoaded)
            {
                result = GetWithEagerLoad(id).FirstOrDefault();
            }
            else
            {
                result = await _dbContext.Set <TEntity>().FindAsync(id);
            }

            if (_authService.UserIsPacijent() && !await AuthorizePacijentForGetById(id))
            {
                return(ServiceResult.Forbidden());
            }

            if (result == null)
            {
                return(ServiceResult.NotFound());
            }

            if (EagerLoaded)
            {
                return(ServiceResult.OK(PrepareDataForClient <TDtoEagerLoaded>(result)));
            }

            return(ServiceResult.OK(PrepareDataForClient <TDto>(result)));
        }
Beispiel #3
0
        public override async Task <ServiceResult> Update(int id, ZahtevZaPregledUpsertDto dtoForUpdate)
        {
            if (!await _authService.CurrentUserIsInRoleAsync(RoleType.Pacijent))
            {
                return(ServiceResult.Forbidden("Samo pacijenti imaju pristup ovom resursu."));
            }

            var zahtevFromDb = await _dbContext.ZahteviZaPregled.FindAsync(id);

            if (zahtevFromDb == null)
            {
                return(new ServiceResult());
            }

            if (await ValidateModel(dtoForUpdate) is { } result&& !result.Succeeded)
            {
                return(ServiceResult.WithStatusCode(result.StatusCode, result.Message));
            }

            _mapper.Map(dtoForUpdate, zahtevFromDb);

            await Task.Run(() =>
            {
                _dbContext.ZahteviZaPregled.Update(zahtevFromDb);
            });

            await _dbContext.SaveChangesAsync();

            return(ServiceResult.OK(_mapper.Map <ZahtevZaPregledDtoLL>(zahtevFromDb)));
        }
        public override async Task <ServiceResult> Insert(PregledUpsertDto dtoForCreation)
        {
            var doktor = await _authService.GetCurrentLoggedInDoktor();

            if (doktor == null)
            {
                return(ServiceResult.Forbidden("Samo doktori mogu kreirati novi pregled."));
            }
            if (await ValidateModel(dtoForCreation) is { } result&& !result.Succeeded)
            {
                return(ServiceResult.WithStatusCode(result.StatusCode, result.Message));
            }

            if (await _dbContext.Pregledi.AnyAsync(x => x.DatumPregleda == dtoForCreation.DatumPregleda))
            {
                return(ServiceResult.BadRequest($"Termin {dtoForCreation.DatumPregleda:g} je već zauzet"));
            }
            var entity = new Pregled
            {
                DoktorId          = doktor.Id,
                PacijentId        = dtoForCreation.PacijentId,
                ZahtevZaPregledId = dtoForCreation.ZahtevZaPregledId,
                DatumPregleda     = dtoForCreation.DatumPregleda,
                IsOdradjen        = false
            };

            var zahtevFromDb = await _dbContext.ZahteviZaPregled.FindAsync(dtoForCreation.ZahtevZaPregledId);

            zahtevFromDb.IsObradjen = true;

            await _dbContext.AddAsync(entity);

            await _dbContext.SaveChangesAsync();

            var pacijent = await _dbContext.Pacijenti
                           .Include(x => x.ZdravstvenaKnjizica)
                           .ThenInclude(x => x.LicniPodaci)
                           .FirstOrDefaultAsync(x => x.Id == entity.PacijentId);

            await AddAndTrainModel(new GodisteVrijemeIdModel
            {
                Godiste    = (uint)pacijent.ZdravstvenaKnjizica.LicniPodaci.DatumRodjenja.Year,
                VrijemeUid = GetVrijemeUid(entity.DatumPregleda.TimeOfDay.Minutes)
            });

            return(ServiceResult.OK(_mapper.Map <PregledDtoLL>(entity)));
        }
Beispiel #5
0
        public override async Task <ServiceResult> Delete(int id)
        {
            var getDoktorResult = await GetDoktor(id);

            if (!getDoktorResult.Succeeded)
            {
                return(ServiceResult.WithStatusCode(getDoktorResult.StatusCode, getDoktorResult.Message));
            }

            var doktorFromDb = getDoktorResult.doktor;

            if (!await _authService.CurrentUserIsInRoleAsync(RoleType.Administrator) && doktorFromDb.Radnik.KorisnickiNalogId != ((await _authService.LoggedInUser())?.Id ?? 0))
            {
                return(ServiceResult.Forbidden("Ne mozete vrsiti izmene na drugim profilima doktora."));
            }

            if (await _dbContext.Uputnice.AnyAsync(x => x.UputioDoktorId == doktorFromDb.Id || x.UpucenKodDoktoraId == doktorFromDb.Id))
            {
                return(ServiceResult.BadRequest("Ne mozete izbrisati profil doktora sve dok postoje uputnice koje su povezane sa ovim doktorom."));
            }

            if (await _dbContext.ZahteviZaPregled.AnyAsync(x => x.DoktorId == doktorFromDb.Id))
            {
                return(ServiceResult.BadRequest("Ne mozete izbrisati profil doktora sve dok postoje zahtevi za pregled kod ovog doktora."));
            }

            if (await _dbContext.Pregledi.AnyAsync(x => x.DoktorId == doktorFromDb.Id))
            {
                return(ServiceResult.BadRequest("Ne mozete izbrisati profil doktora sve dok postoje zakazani ili odradjeni pregledi koje je odradio ovaj doktor."));
            }

            if (await _dbContext.ZdravstvenaKnjizica.AnyAsync(x => x.DoktorId == doktorFromDb.Id))
            {
                return(ServiceResult.BadRequest("Ne mozete izbrisati profil doktora sve dok ima zdravstvenih knjizica koje su povezane sa ovim doktorom."));
            }

            await _radnikService.Delete(doktorFromDb.RadnikId);

            await Task.Run(() =>
            {
                _dbContext.Remove(doktorFromDb);
            });

            await _dbContext.SaveChangesAsync();

            return(ServiceResult.NoContent());
        }
Beispiel #6
0
        /// <summary>
        /// Returns Uputnica if Doktor is authorized for it
        /// </summary>
        /// <returns></returns>
        private async Task <ServiceResult> GetUputnicaForManipulation(int id)
        {
            var doktor = await _authService.GetCurrentLoggedInDoktor();

            if (doktor == null)
            {
                return(ServiceResult.Forbidden("Samo doktori mogu vrsiti izmene pregleda."));
            }

            var uputnicaFromDb = await _dbContext.Uputnice.FindAsync(id);

            if (uputnicaFromDb == null)
            {
                return(ServiceResult.NotFound($"Uputnica sa ID-em {id} nije pronadjen."));
            }

            if (uputnicaFromDb.UputioDoktorId != doktor.Id)
            {
                return(ServiceResult.Forbidden("Nemate permisije za izmenu uputnica koje je kreirao drugi doktor."));
            }

            return(ServiceResult.OK(uputnicaFromDb));
        }
Beispiel #7
0
        public override async Task <ServiceResult> Update(int id, DoktorUpsertDto dtoForUpdate)
        {
            var getDoktorResult = await GetDoktor(id);

            if (!getDoktorResult.Succeeded)
            {
                return(ServiceResult.WithStatusCode(getDoktorResult.StatusCode, getDoktorResult.Message));
            }

            var doktorFromDb = getDoktorResult.doktor;

            if (!await _authService.CurrentUserIsInRoleAsync(RoleType.Administrator) && doktorFromDb.Radnik.KorisnickiNalogId != ((await _authService.LoggedInUser())?.Id ?? 0))
            {
                return(ServiceResult.Forbidden("Ne mozete vrsiti izmene na drugim profilima doktora."));
            }

            if (doktorFromDb.NaucnaOblastId != dtoForUpdate.NaucnaOblastId)
            {
                if (!await _dbContext.NaucneOblasti.AnyAsync(x => x.Id == dtoForUpdate.NaucnaOblastId))
                {
                    return(ServiceResult.NotFound(
                               $"Naucna oblast sa ID-em {dtoForUpdate.NaucnaOblastId} nije pronadjena."));
                }

                doktorFromDb.NaucnaOblastId = dtoForUpdate.NaucnaOblastId;
                await _dbContext.SaveChangesAsync();
            }

            _mapper.Map(dtoForUpdate, doktorFromDb.Radnik);
            var radnikUpdateResult = await _radnikService.Update(doktorFromDb.RadnikId, dtoForUpdate);

            if (!radnikUpdateResult.Succeeded)
            {
                return(ServiceResult.WithStatusCode(radnikUpdateResult.StatusCode, radnikUpdateResult.Message));
            }
            return(ServiceResult.OK(_mapper.Map <DoktorDtoLL>(doktorFromDb)));
        }
Beispiel #8
0
        public override async Task <ServiceResult> Insert(ZahtevZaPregledUpsertDto dtoForCreation)
        {
            var user = await _authService.LoggedInUser();

            if (user == null)
            {
                return(ServiceResult.Unauthorized());
            }

            var pacijent = await _dbContext.Pacijenti.FirstOrDefaultAsync(x => x.KorisnickiNalogId == user.Id);

            if (pacijent == null)
            {
                return(ServiceResult.Forbidden("Samo pacijenti mogu kreirati zahtev za pregled."));
            }

            if (await ValidateModel(dtoForCreation) is { } result&& !result.Succeeded)
            {
                return(ServiceResult.WithStatusCode(result.StatusCode, result.Message));
            }

            var entity = new ZahtevZaPregled
            {
                DoktorId   = dtoForCreation.DoktorId,
                PacijentId = pacijent.Id,
                UputnicaId = dtoForCreation.UputnicaId,
                Napomena   = dtoForCreation.Napomena,
                DatumVreme = DateTime.Now
            };

            await _dbContext.AddAsync(entity);

            await _dbContext.SaveChangesAsync();

            return(ServiceResult.OK(_mapper.Map <ZahtevZaPregledDtoLL>(entity)));
        }
Beispiel #9
0
        public override async Task <ServiceResult> Insert(UputnicaUpsertDto dtoForCreation)
        {
            var doktor = await _authService.GetCurrentLoggedInDoktor();

            if (doktor == null)
            {
                return(ServiceResult.Forbidden());
            }

            if (await ValidateModel(dtoForCreation) is { } validationResult&& !validationResult.Succeeded)
            {
                return(ServiceResult.WithStatusCode(validationResult.StatusCode, validationResult.Message));
            }

            var uputnica = _mapper.Map <Uputnica>(dtoForCreation);

            uputnica.UputioDoktorId = doktor.Id;

            await _dbContext.AddAsync(uputnica);

            await _dbContext.SaveChangesAsync();

            return(ServiceResult.OK(_mapper.Map <UputnicaDtoLL>(uputnica)));
        }