예제 #1
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);
            }
        }
예제 #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 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);
            }
        }
예제 #4
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);
            }
        }
예제 #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
        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);
            }
        }
예제 #7
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);
            }
        }
예제 #8
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);
            }
        }
예제 #9
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);
            }
        }
예제 #10
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);
            }
        }
예제 #11
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);
        }
예제 #12
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);
        }