예제 #1
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);
            }
        }
예제 #2
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);
            }
        }
예제 #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 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);
            }
        }
예제 #7
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);
        }
예제 #8
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);
            }
        }
예제 #9
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);
        }