예제 #1
0
        public void SacuvajGrad(Grad grad)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Grad> repo = new DataRepositoryBase <Grad>(context);

                    if (repo.GetAll().Where(x => x.Naziv == grad.Naziv && x.isDeleted == false).FirstOrDefault() != null)
                    {
                        throw new Exception(String.Format("Grad '{0}' već postoji u bazi.", grad.Naziv));
                    }

                    if (grad.Id != 0)
                    {
                        Grad g = repo.Get(grad.Id);
                        g.Naziv     = grad.Naziv;
                        g.isDeleted = grad.isDeleted;
                        repo.Update(g);
                    }
                    else
                    {
                        repo.Insert(grad);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #2
0
        public void SacuvajInkrement(Inkrement inkrement)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Inkrement> repo = new DataRepositoryBase <Inkrement>(context);

                    if (repo.GetAll().Where(x => (x.Cijena == inkrement.Cijena || x.IznosInkrementa == inkrement.IznosInkrementa) && x.isDeleted == false).FirstOrDefault() != null)
                    {
                        throw new Exception("Cijena ili iznos inkrementa već postoji u bazi.");
                    }

                    if (inkrement.Id != 0)
                    {
                        Inkrement i = repo.Get(inkrement.Id);
                        i.Cijena          = inkrement.Cijena;
                        i.IznosInkrementa = inkrement.IznosInkrementa;
                        i.isDeleted       = inkrement.isDeleted;

                        repo.Update(i);
                    }
                    else
                    {
                        repo.Insert(inkrement);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #3
0
        public void SacuvajKategorija(Kategorija kategorija)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Kategorija> repo = new DataRepositoryBase <Kategorija>(context);

                    if (repo.GetAll().Where(x => x.Naziv == kategorija.Naziv && x.isDeleted == false).FirstOrDefault() != null)
                    {
                        throw new Exception(String.Format("Kategorija '{0}' već postoji u bazi.", kategorija.Naziv.ToLower()));
                    }

                    if (kategorija.Id != 0)
                    {
                        Kategorija k = repo.Get(kategorija.Id);
                        k.Naziv     = kategorija.Naziv;
                        k.isDeleted = kategorija.isDeleted;
                        repo.Update(k);
                    }
                    else
                    {
                        repo.Insert(kategorija);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #4
0
        public void SacuvajNacinPlacanja(NacinPlacanja nacinPlacanja)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <NacinPlacanja> repo = new DataRepositoryBase <NacinPlacanja>(context);

                    if (repo.GetAll().Where(x => x.Opis == nacinPlacanja.Opis && x.isDeleted == false).FirstOrDefault() != null)
                    {
                        throw new Exception(String.Format("Način plaćanja '{0}' već postoji u bazi.", nacinPlacanja.Opis.ToLower()));
                    }

                    if (nacinPlacanja.Id != 0)
                    {
                        NacinPlacanja np = repo.Get(nacinPlacanja.Id);
                        np.Opis      = nacinPlacanja.Opis;
                        np.isDeleted = nacinPlacanja.isDeleted;

                        repo.Update(np);
                    }
                    else
                    {
                        repo.Insert(nacinPlacanja);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #5
0
        public void DodajKomentarArtikla(KomentarArtikla komentar)
        {
            try
            {
                if (komentar.TextKomentara == null || string.IsNullOrEmpty(komentar.TextKomentara))
                {
                    throw new FaultException("Morate unijeti tekst komentara!");
                }

                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <KomentarArtikla> repo = new DataRepositoryBase <KomentarArtikla>(context);
                    if (repo.GetAll().Where(x => x.ArtikalId == komentar.ArtikalId && x.KomentatorId == komentar.KomentatorId).FirstOrDefault() != null)
                    {
                        throw new FaultException("Već ste jednom komentirali artikal!");
                    }

                    komentar.Datum = DateTime.Now;
                    repo.Insert(komentar);
                }
            }
            catch (FaultException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #6
0
        /// <summary>
        /// 获取用户无读取权限的字段
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="securityFields"></param>
        /// <returns></returns>
        public List <Guid> GetNoneReadFields(Guid userId, List <Guid> securityFields, int objectTypeCode)
        {
            if (securityFields.IsEmpty())
            {
                return(securityFields);
            }
            List <Guid> result;
            Sql         s = Sql.Builder.Append("select distinct b.AttributeId from RoleObjectAccess a")
                            .Append("inner join Attribute b on a.ObjectId = b.AttributeId")
                            .Append("inner join SystemUserRoles c on a.RoleId = c.RoleId")
                            .Append("where a.AccessRightsMask = 1 and c.SystemUserId=@0", userId)
                            .Append("and a.ObjectId in(@0)", securityFields.Select(x => (object)x).ToArray())
                            .Append("and a.ObjectTypeCode = @0", objectTypeCode);
            var data = new DataRepositoryBase <dynamic>(_dbContext).ExecuteQuery(s);

            if (data.NotEmpty())
            {
                result = securityFields.Where(x => !data.Select(f => f.AttributeId).Contains(x)).ToList();
            }
            else
            {
                result = securityFields;
            }
            return(result);
        }
예제 #7
0
        public long QueryHandlingCount(Guid handlerId, Guid?entityid)
        {
            string s = @"select count(1) as Count
            from WorkFlowProcess a
            inner join WorkFlowInstance b on a.WorkFlowInstanceId = b.WorkFlowInstanceId
            inner join Entity c on b.EntityId = c.EntityId
            inner join SystemUser d on b.ApplicantId = d.SystemUserId
            inner join WorkFlow e on b.WorkFlowId = e.WorkFlowId
            where a.HandlerId=@0 and a.StateCode = 1
            ";

            if (entityid.HasValue && !entityid.Value.Equals(Guid.Empty))
            {
                s += " and b.EntityId='" + entityid.Value + "'";
            }
            var dataRepository = new DataRepositoryBase <dynamic>(DbContext);
            var result         = dataRepository.ExecuteQuery(s, handlerId);

            if (result.NotEmpty())
            {
                var value = (result[0] as IDictionary <string, object>).Values.First();
                return(value != null?long.Parse(value.ToString()) : 0);
            }
            return(0);
        }
예제 #8
0
 public QueryByAttributeResolver(IAppContext appContext
                                 , IDbContext dbContext
                                 , IQueryMetadataFinder queryMetadataFinder)
 {
     this.User            = appContext.GetFeature <ICurrentUser>();
     _dbContext           = dbContext;
     _repository          = new DataRepositoryBase <dynamic>(_dbContext);
     _queryMetadataFinder = queryMetadataFinder;
 }
예제 #9
0
 public ChartRepository(IDbContext dbContext
                        , IAttributeRepository attributeRepository
                        , IStringMapRepository stringMapRepository
                        , IOptionSetDetailRepository optionSetDetailRepository
                        ) : base(dbContext)
 {
     _dataRepository            = new DataRepositoryBase <dynamic>(dbContext);
     _attributeRepository       = attributeRepository;
     _stringMapRepository       = stringMapRepository;
     _optionSetDetailRepository = optionSetDetailRepository;
 }
예제 #10
0
        public NacinPlacanja[] GetNaciniPlacanja()
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <NacinPlacanja> repo = new DataRepositoryBase <NacinPlacanja>(context);

                    return(repo.GetAll().Where(x => x.isDeleted == false).ToArray());
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #11
0
        public string GetLocalizedLabelXml(Guid solutionId)
        {
            var result = new DataRepositoryBase <object>(DbContext).Find(@"select convert(xml,(select a.ComponentState,a.Label,a.LabelTypeCode,a.LanguageId,a.LocalizedLabelId,a.ObjectColumnName,a.ObjectId,a.SolutionId
            from LocalizedLabel a
            FOR XML PATH('LocalizedLabel'),ROOT('LocalizedLabels')))");

            if (result != null)
            {
                var data = (result as IDictionary <string, object>).ToList();
                if (data.NotEmpty() && data[0].Value != null)
                {
                    return(data[0].Value.ToString());
                }
            }
            return(string.Empty);
        }
예제 #12
0
        public Artikal[] GetArtikli()
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Artikal> repo = new DataRepositoryBase <Artikal>(context);

                    return(repo.GetAll().Where(x => x.isDeleted == false).ToArray());
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #13
0
        public Grad[] GetGradovi()
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Grad> repo = new DataRepositoryBase <Grad>(context);

                    return(repo.GetAll().Where(x => x.isDeleted == false).OrderBy(x => x.Naziv).ToArray());
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #14
0
        public void OcijeniKorisnika(OcjenaKorisnika ocjena)
        {
            try
            {
                if (ocjena.Ocjena < 1)
                {
                    throw new FaultException("Morate odabrati ocjenu!");
                }

                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <OcjenaKorisnika> ocjenaRepo = new DataRepositoryBase <OcjenaKorisnika>(context);
                    AukcijaRepository aukcijaRepo = new AukcijaRepository(context);

                    Aukcija aukcija = aukcijaRepo.Get(ocjena.AukcijaId);

                    if ((ocjena.OcjenjivacId == aukcija.ProdavacId || ocjena.OcjenjivacId == aukcija.KupacId) &&
                        (ocjena.OcijenjeniKorisnikId == aukcija.ProdavacId || ocjena.OcijenjeniKorisnikId == aukcija.KupacId))
                    {
                        if (ocjenaRepo.GetAll().Where(x => x.OcjenjivacId == ocjena.OcjenjivacId &&
                                                      x.OcijenjeniKorisnikId == ocjena.OcijenjeniKorisnikId && x.AukcijaId == ocjena.AukcijaId).FirstOrDefault() != null)
                        {
                            throw new FaultException("Možete ocijeniti korisnika samo jednom!");
                        }
                        else
                        {
                            ocjena.Datum = DateTime.Now;
                        }
                        ocjenaRepo.Insert(ocjena);
                    }
                    else
                    {
                        throw new FaultException("Ocjenjivać i ocijenjeni korisnik moraju biti kupac ili prodavac!");
                    }
                }
            }
            catch (FaultException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #15
0
        public Aukcija KreirajAukciju(AukcijaKreirajDTO aukcijaModel, int prijavljeniKorisnik)
        {
            Aukcija aukcija = new Aukcija();

            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    Artikal artikal = new Artikal();

                    DateTime pocetakAukcije = DateTime.Now;

                    IArtikalRepository      artikalRepo = new ArtikalRepository(context);
                    IAukcijaRepository      aukcijaRepo = new AukcijaRepository(context);
                    IDataRepository <Slika> slikeRepo   = new DataRepositoryBase <Slika>(context);

                    aukcija.ArtikalId       = artikalRepo.KreirajIzAukcije(aukcijaModel.Naziv, aukcijaModel.Model, aukcijaModel.Proizvodjac);
                    aukcija.Pocetak         = pocetakAukcije;
                    aukcija.Zavrsetak       = pocetakAukcije.AddDays(aukcijaModel.Trajanje);
                    aukcija.MinimalnaCijena = aukcijaModel.MinimalnaCijena;
                    aukcija.KupiOdmahCijena = aukcijaModel.KupiOdmahCijena;
                    aukcija.Napomena        = aukcijaModel.Napomena;
                    aukcija.DetaljanOpis    = aukcijaModel.DetaljanOpis;
                    aukcija.NacinPlacanjaId = aukcijaModel.NacinPlacanjaId;
                    aukcija.KategorijaId    = aukcijaModel.KategorijaId;
                    aukcija.ProdavacId      = prijavljeniKorisnik;

                    aukcija = aukcijaRepo.Insert(aukcija);

                    foreach (var slika in aukcijaModel.Slike)
                    {
                        slika.AukcijaId = aukcija.Id;
                        slikeRepo.Insert(slika);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }

            return(aukcija);
        }
예제 #16
0
        public void OcijeniArtikal(OcjenaArtikla ocjena)
        {
            try
            {
                if (ocjena.Ocjena < 1)
                {
                    throw new FaultException("Morate odabrati ocjenu!");
                }

                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <OcjenaArtikla> ocjenaRepo = new DataRepositoryBase <OcjenaArtikla>(context);
                    AukcijaRepository aukcijaRepo = new AukcijaRepository(context);

                    Aukcija aukcija = aukcijaRepo.Get(ocjena.AukcijaId);

                    if (aukcija.KupacId == ocjena.OcijenioId)
                    {
                        if (ocjenaRepo.GetAll().Where(x => x.ArtikalId == ocjena.ArtikalId && x.OcijenioId == aukcija.KupacId && x.AukcijaId == ocjena.AukcijaId).FirstOrDefault() != null)
                        {
                            throw new FaultException("Možete ocijeniti artikal samo jednom!");
                        }
                        else
                        {
                            ocjena.Datum = DateTime.Now;
                            ocjenaRepo.Insert(ocjena);
                        }
                    }
                    else
                    {
                        throw new FaultException("Morate biti kupac da bi mogli ocijeniti artikal!");
                    }
                }
            }
            catch (FaultException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #17
0
        public PagedList <dynamic> QueryHandledList(Guid handlerId, int page, int pageSize, Guid?entityid)
        {
            string s = @"select a.*,e.Name AS WorkFlowName,b.ApplicantId,b.EntityId,b.ObjectId,b.Description as ApplyDescription,c.LocalizedName as EntityLocalizedName,d.Name as ApplicantIdName
            from WorkFlowProcess a
            inner join WorkFlowInstance b on a.WorkFlowInstanceId = b.WorkFlowInstanceId
            inner join Entity c on b.EntityId = c.EntityId
            inner join SystemUser d on b.ApplicantId = d.SystemUserId
            inner join WorkFlow e on b.WorkFlowId = e.WorkFlowId
            where a.HandlerId=@0 and a.StateCode in(2,3)
            ";

            if (entityid.HasValue && !entityid.Value.Equals(Guid.Empty))
            {
                s += " and b.EntityId='" + entityid.Value + "'";
            }
            s += " order by a.HandleTime desc";
            var dataRepository = new DataRepositoryBase <dynamic>(DbContext);

            return(dataRepository.ExecuteQueryPaged(page, pageSize, s, handlerId));
        }
예제 #18
0
        public PagedList <dynamic> QueryApplyHandlingList(Guid applierId, int page, int pageSize, Guid?entityid)
        {
            string s = @"select b.*,c.LocalizedName as EntityLocalizedName,d.Name as ApplicantIdName,e.Name AS WorkFlowName
            from WorkFlowInstance b
            inner join Entity c on b.EntityId = c.EntityId
            inner join SystemUser d on b.ApplicantId = d.SystemUserId
            inner join WorkFlow e on b.WorkFlowId = e.WorkFlowId
            where b.ApplicantId=@0 and b.StateCode = 1
            ";

            if (entityid.HasValue && !entityid.Value.Equals(Guid.Empty))
            {
                s += " and b.EntityId='" + entityid.Value + "'";
            }
            s += " order by b.CreatedOn desc";

            var dataRepository = new DataRepositoryBase <dynamic>(DbContext);

            return(dataRepository.ExecuteQueryPaged(page, pageSize, s, applierId));
        }
예제 #19
0
        public void ObrisiNacinPlacanja(int id)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <NacinPlacanja> repo = new DataRepositoryBase <NacinPlacanja>(context);

                    if (id > 0)
                    {
                        NacinPlacanja np = repo.Get(id);
                        np.isDeleted = true;
                        repo.Update(np);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #20
0
        public void ObrisiInkrement(int id)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Inkrement> repo = new DataRepositoryBase <Inkrement>(context);

                    if (id > 0)
                    {
                        Inkrement inkrement = repo.Get(id);
                        inkrement.isDeleted = true;
                        repo.Update(inkrement);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #21
0
        public void ObrisiKategorija(int id)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Kategorija> repo = new DataRepositoryBase <Kategorija>(context);

                    if (id > 0)
                    {
                        Kategorija kategorija = repo.Get(id);
                        kategorija.isDeleted = true;
                        repo.Update(kategorija);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #22
0
        public void ObrisiGrad(int id)
        {
            try
            {
                using (BHaoDataContext context = new BHaoDataContext())
                {
                    IDataRepository <Grad> repo = new DataRepositoryBase <Grad>(context);

                    if (id > 0)
                    {
                        Grad grad = repo.Get(id);
                        grad.isDeleted = true;
                        repo.Update(grad);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
예제 #23
0
 public OrganizationBaseRepository(IOptionsMonitor <DataBaseOptions> options)
 {
     _repository = new DataRepositoryBase <OrganizationBase>(options.CurrentValue);
 }
예제 #24
0
 public OrganizationDataProvider(
     IDbContext dbContext
     )
 {
     _repository = new DataRepositoryBase <dynamic>(dbContext);
 }
예제 #25
0
 public AggregateExpressionResolver(IQueryResolverFactory queryResolverFactory, IDbContext dbContext)
 {
     _queryResolverFactory = queryResolverFactory;
     _dataRepository       = new DataRepositoryBase <dynamic>(dbContext);
 }
예제 #26
0
        public AukcijaDTO GetAukcijaDetail(int aukcijaId, int korisnikId)
        {
            var query = from a in _context.Aukcije.Include(x => x.Slike)
                        where a.Id == aukcijaId
                        join ar in _context.Artikli on a.ArtikalId equals ar.Id
                        join n in _context.NaciniPlacanja on a.NacinPlacanjaId equals n.Id
                        select new AukcijaDTO()
            {
                Id                = a.Id,
                Pocetak           = a.Pocetak,
                Zavrsetak         = a.Zavrsetak,
                NazivArtikla      = ar.Naziv,
                Proizvodjac       = ar.Proizvodjac,
                Model             = ar.Model,
                PocetnaCijena     = a.MinimalnaCijena,
                KupiOdmahCijena   = a.KupiOdmahCijena,
                DetaljanOpis      = a.DetaljanOpis,
                ProdavacId        = a.ProdavacId,
                NacinPlacanja     = n.Opis,
                Napomena          = a.Napomena,
                Slike             = a.Slike,
                NajveciPonudjacId = a.NajveciPonudjacId,
                Zavrsena          = a.Zavrsena,
                ArtikalId         = (int)a.ArtikalId
            };

            AukcijaDTO aukcijaDTO = query.FirstOrDefault();

            KorisnikRepository korisnikRepo = new KorisnikRepository(_context);

            if (aukcijaDTO.NajveciPonudjacId != 0)
            {
                Ponuda najvecaPonuda = _context.Ponude
                                       .Where(x => x.KorisnikId == aukcijaDTO.NajveciPonudjacId && x.AukcijaId == aukcijaDTO.Id)
                                       .OrderByDescending(x => x.Iznos)
                                       .Take(1).SingleOrDefault();

                aukcijaDTO.NajvecaPonuda = najvecaPonuda;

                aukcijaDTO.NajveciPonudjac = korisnikRepo.GetById(aukcijaDTO.NajveciPonudjacId);
            }
            aukcijaDTO.Prodavac = korisnikRepo.GetById(aukcijaDTO.ProdavacId);

            PonudaRepository ponudaRepo = new PonudaRepository(_context);

            aukcijaDTO.Ponude = ponudaRepo.GetPonudeByAukcijaId(aukcijaDTO.Id);

            IDataRepository <OcjenaKorisnika> ocjenaKorisnikaRepo = new DataRepositoryBase <OcjenaKorisnika>(_context);

            aukcijaDTO.OcjeneKorisnika = ocjenaKorisnikaRepo.GetAll().Where(x => x.AukcijaId == aukcijaDTO.Id).ToList();

            IDataRepository <OcjenaArtikla> ocjenaArtiklaRepo = new DataRepositoryBase <OcjenaArtikla>(_context);

            aukcijaDTO.OcjeneArtikla = ocjenaArtiklaRepo.GetAll().Where(x => x.ArtikalId == aukcijaDTO.ArtikalId).ToList();

            IDataRepository <KomentarKorisnika> komentarKorisnikaRepo = new DataRepositoryBase <KomentarKorisnika>(_context);
            KomentarKorisnika komentar = komentarKorisnikaRepo.GetAll().Where(x => x.KomentatorId == korisnikId && x.AukcijaId == aukcijaDTO.Id).FirstOrDefault();

            if (komentar != null && komentar.isDeleted)
            {
                komentar.TextKomentara = "Komentar obrisan.";
            }
            aukcijaDTO.KomentarKorisnika = komentar;

            IDataRepository <KomentarArtikla> komentarArtiklaRepo = new DataRepositoryBase <KomentarArtikla>(_context);
            KomentarArtikla komentarArtikla = komentarArtiklaRepo.GetAll().Where(x => x.KomentatorId == korisnikId && x.AukcijaId == aukcijaDTO.Id).FirstOrDefault();

            if (komentarArtikla != null && komentarArtikla.isDeleted)
            {
                komentarArtikla.TextKomentara = "Komentar obrisan.";
            }
            aukcijaDTO.KomentarArtikla = komentarArtikla;


            ArtikalRepository artikalRepo = new ArtikalRepository(_context);
            Artikal           artikal     = artikalRepo.GetByIdWithProsjecnaOcjena(aukcijaDTO.ArtikalId);

            aukcijaDTO.Artikal = artikal;

            return(aukcijaDTO);
        }
예제 #27
0
 public ModuleRepository(IOptionsMonitor <DataBaseOptions> options)
 {
     _repository = new DataRepositoryBase <Domain.Module>(options.CurrentValue);
 }
예제 #28
0
 public FieldValueUpdater(ILocalizedTextProvider localizedTextProvider
                          , IDbContext dbContext)
 {
     _loc        = localizedTextProvider;
     _repository = new DataRepositoryBase <dynamic>(dbContext);
 }
예제 #29
0
 public SystemUserSettingsRepository(IDbContext dbContext)
 {
     _repository = new DataRepositoryBase <UserSettings>(dbContext);
 }
예제 #30
0
        public static AukcijaDTO Licitiraj(Ponuda ponuda, BHaoDataContext _context)
        {
            IAukcijaRepository       aukcijaRepo   = new AukcijaRepository(_context);
            IInkrementRepository     inkrementRepo = new InkrementRepository(_context);
            IDataRepository <Ponuda> ponudaRepo    = new DataRepositoryBase <Ponuda>(_context);
            KorisnikRepository       korisnikRepo  = new KorisnikRepository(_context);

            AukcijaDTO aukcijaDTO = new AukcijaDTO();

            Aukcija aukcija = aukcijaRepo.Get(ponuda.AukcijaId);

            if (aukcija.ProdavacId == ponuda.KorisnikId)
            {
                throw new PonudaCreateException("Prodavac ne može licitirati na vlastitu aukciju!");
            }

            if (ponuda.MaksimalanIznos <= aukcija.MinimalnaCijena || ponuda.MaksimalanIznos <= aukcija.NajvecaPonuda)
            {
                throw new PonudaCreateException("Maksimalna ponuda mora biti veća od početne cijene ili trenutne najveće ponude!");
            }

            if (aukcija.Zavrsena || aukcija.Zavrsetak < DateTime.Now)
            {
                throw new PonudaCreateException("Vrijeme aukcije isteklo, aukcija završena!");
            }

            List <Ponuda> topDvijePonude = ponudaRepo.GetAll().Where(x => x.AukcijaId == ponuda.AukcijaId)
                                           .OrderByDescending(x => x.MaksimalanIznos).ThenByDescending(x => x.Id).Take(2).ToList();

            Ponuda trenutnaNajveca = new Ponuda();

            if (topDvijePonude.Count > 0)
            {
                trenutnaNajveca = topDvijePonude[0];
            }

            if (aukcija.NajvecaPonuda == null)
            {
                aukcija.NajvecaPonuda = aukcija.MinimalnaCijena > 0 ? aukcija.MinimalnaCijena : 1;
                ponuda.Iznos          = (decimal)aukcija.NajvecaPonuda;

                ponudaRepo.Insert(ponuda);

                aukcija.NajvecaPonuda     = ponuda.Iznos;
                aukcija.NajveciPonudjacId = ponuda.KorisnikId;
                aukcijaRepo.Update(aukcija);

                aukcijaDTO.NajvecaPonuda = ponuda;
            }
            else
            {
                if (aukcija.NajveciPonudjacId == ponuda.KorisnikId)
                {
                    throw new PonudaCreateException("Već imate najveću ponudu!");
                }

                //Inkrement inkrement = inkrementRepo.GetInkrementByIznosPonude((decimal)aukcija.NajvecaPonuda);

                if (ponuda.MaksimalanIznos > trenutnaNajveca.MaksimalanIznos)
                {
                    Inkrement inkrement = inkrementRepo.GetInkrementByIznosPonude(trenutnaNajveca.MaksimalanIznos);
                    if ((trenutnaNajveca.MaksimalanIznos + inkrement.IznosInkrementa) <= ponuda.MaksimalanIznos)
                    {
                        ponuda.Iznos = trenutnaNajveca.MaksimalanIznos + inkrement.IznosInkrementa;
                    }
                    else
                    {
                        ponuda.Iznos = ponuda.MaksimalanIznos;
                    }



                    ponudaRepo.Insert(ponuda);

                    if (trenutnaNajveca.Iznos != trenutnaNajveca.MaksimalanIznos)
                    {
                        trenutnaNajveca.Iznos = trenutnaNajveca.MaksimalanIznos;
                        ponudaRepo.Insert(trenutnaNajveca);
                    }


                    aukcija.NajvecaPonuda     = ponuda.Iznos;
                    aukcija.NajveciPonudjacId = ponuda.KorisnikId;
                    aukcijaRepo.Update(aukcija);

                    aukcijaDTO.NajvecaPonuda = ponuda;
                }
                else
                {
                    Ponuda novaNajveca = new Ponuda();
                    novaNajveca.AukcijaId       = trenutnaNajveca.AukcijaId;
                    novaNajveca.KorisnikId      = trenutnaNajveca.KorisnikId;
                    novaNajveca.MaksimalanIznos = trenutnaNajveca.MaksimalanIznos;

                    Inkrement inkrement = inkrementRepo.GetInkrementByIznosPonude(ponuda.MaksimalanIznos);
                    if (trenutnaNajveca.MaksimalanIznos > (ponuda.MaksimalanIznos + inkrement.IznosInkrementa))
                    {
                        novaNajveca.Iznos   = ponuda.MaksimalanIznos + inkrement.IznosInkrementa;
                        novaNajveca.Vrijeme = DateTime.Now;
                    }
                    else
                    {
                        novaNajveca.Iznos   = trenutnaNajveca.MaksimalanIznos;
                        novaNajveca.Vrijeme = DateTime.Now;
                    }

                    ponuda.Iznos = ponuda.MaksimalanIznos;

                    ponudaRepo.Insert(ponuda);
                    ponudaRepo.Insert(novaNajveca);

                    aukcija.NajvecaPonuda     = novaNajveca.Iznos;
                    aukcija.NajveciPonudjacId = novaNajveca.KorisnikId;
                    aukcijaRepo.Update(aukcija);

                    aukcijaDTO.NajvecaPonuda = novaNajveca;
                }

                //ponuda.Iznos = (decimal)aukcija.NajvecaPonuda + inkrement.IznosInkrementa < ponuda.MaksimalanIznos
                //    ? (decimal)aukcija.NajvecaPonuda + inkrement.IznosInkrementa : ponuda.MaksimalanIznos;
            }



            //if (topDvijePonude.Count > 1)
            //{
            //    Ponuda ponuda1 = topDvijePonude.First();
            //    Ponuda ponuda2 = topDvijePonude.Last();

            //    if (ponuda1.KorisnikId != ponuda2.KorisnikId)
            //    {

            //        Inkrement inkrement = inkrementRepo.GetInkrementByIznosPonude(ponuda2.MaksimalanIznos);

            //        ponuda1.Iznos = (ponuda2.MaksimalanIznos + inkrement.IznosInkrementa) > ponuda1.MaksimalanIznos ? ponuda1.MaksimalanIznos : ponuda2.MaksimalanIznos + inkrement.IznosInkrementa;

            //        ponudaRepo.Insert(ponuda1);


            //        aukcija.NajvecaPonuda = ponuda1.Iznos;
            //        aukcija.NajveciPonudjacId = ponuda1.KorisnikId;
            //        aukcijaRepo.Update(aukcija);

            //        aukcijaDTO.NajveciPonudjacId = aukcija.NajveciPonudjacId;
            //        aukcijaDTO.NajvecaPonuda = ponuda1;
            //        aukcijaDTO.NajveciPonudjac = korisnikRepo.GetById(aukcija.NajveciPonudjacId);
            //        aukcijaDTO.Prodavac = korisnikRepo.GetById(aukcija.ProdavacId);
            //        return aukcijaDTO;
            //    }


            //    aukcijaDTO.NajveciPonudjacId = ponuda1.KorisnikId;
            //    aukcijaDTO.NajvecaPonuda = ponuda1;
            //    aukcijaDTO.NajveciPonudjac = korisnikRepo.GetById(ponuda1.KorisnikId);

            //    return aukcijaDTO;
            //}

            //aukcija.NajvecaPonuda = ponuda.Iznos;
            //aukcija.NajveciPonudjacId = ponuda.KorisnikId;
            //aukcijaRepo.Update(aukcija);

            //aukcijaDTO.NajvecaPonuda = ponuda;
            aukcijaDTO.NajveciPonudjacId = aukcija.NajveciPonudjacId;
            aukcijaDTO.NajveciPonudjac   = korisnikRepo.GetById(aukcija.NajveciPonudjacId);
            aukcijaDTO.Prodavac          = korisnikRepo.GetById(aukcija.ProdavacId);
            return(aukcijaDTO);
        }