예제 #1
0
        public async Task <IActionResult> Add([FromBody] InOrderDTO model)
        {
            var outOrderDTOs = await _orderService.Add(model, HttpContext);

            if (outOrderDTOs == null)
            {
                return(BadRequest());
            }

            return(Ok(outOrderDTOs));
        }
예제 #2
0
        public async Task <List <OutOrderDTO> > Add(InOrderDTO model, HttpContext context)
        {
            if (model == null || model.ListaElemenata == null || model.ListaElemenata.Count == 0)
            {
                return(null);
            }

            string userName = TokensHelper.GetClaimFromJwt(context, ClaimTypes.Name);

            var user = await _userManager.FindByNameAsync(userName);

            if (user == null)
            {
                throw new ErrorException(ErrorCode.UserNotFound, "Prodavac ne postoji u sistemu.");
            }

            var listaNarudzbina = new List <Narudzbina>();

            foreach (var el in model.ListaElemenata)
            {
                var proizvod = _db.Proizvodi.Where(p => p.Id == el.Id)?.Include(i => i.Prodavac).FirstOrDefault();
                if (proizvod == null)
                {
                    continue;
                }
                var narudzbinaZaOvogProdavca = listaNarudzbina.FirstOrDefault(n => n.Prodavac.Id == proizvod.Prodavac.Id);
                if (narudzbinaZaOvogProdavca == null)
                {
                    narudzbinaZaOvogProdavca = new Narudzbina
                    {
                        Id             = Guid.NewGuid(),
                        ListaElemenata = new List <ElementKorpe>
                        {
                            new ElementKorpe
                            {
                                Id       = Guid.NewGuid(),
                                Kolicina = el.Kolicina,
                                Proizvod = proizvod
                            }
                        },
                        Kupac                = user,
                        StatusNarudzbine     = StatusNarudzbine.Nova,
                        VremeIsporukeUDanima = null,
                        Prodavac             = proizvod.Prodavac
                    };
                    listaNarudzbina.Add(narudzbinaZaOvogProdavca);
                }
                else
                {
                    narudzbinaZaOvogProdavca.ListaElemenata.Add(new ElementKorpe
                    {
                        Id       = Guid.NewGuid(),
                        Kolicina = el.Kolicina,
                        Proizvod = proizvod
                    });
                }
            }

            foreach (var narudzbina in listaNarudzbina)
            {
                narudzbina.DatumNarudzbine = DateTime.UtcNow;
                _db.Narudzbine.Add(narudzbina);
            }

            try
            {
                await _db.SaveChangesAsync();
            }
            catch (Exception)
            {
                throw new ErrorException(ErrorCode.DbError, "Greška pri čuvanju narudzbine u bazu podataka.");
            }

            var outListaNarudzbina = new List <OutOrderDTO>();

            foreach (var narudzbina in listaNarudzbina)
            {
                var outNar = new OutOrderDTO
                {
                    Id       = narudzbina.Id,
                    Prodavac = new Account
                    {
                        FirstName   = narudzbina.Prodavac.FirstName,
                        LastName    = narudzbina.Prodavac.LastName,
                        Email       = narudzbina.Prodavac.Email,
                        PhoneNumber = narudzbina.Prodavac.PhoneNumber
                    },
                    ListaElemenata = new List <OutElementKorpeDTO>()
                };
                foreach (var el in narudzbina.ListaElemenata)
                {
                    outNar.ListaElemenata.Add(new OutElementKorpeDTO
                    {
                        Kolicina = el.Kolicina,
                        Proizvod = new OutProizvodDTO
                        {
                            Id              = el.Proizvod.Id,
                            Naziv           = el.Proizvod.Naziv,
                            Cena            = el.Proizvod.Cena,
                            Opis            = el.Proizvod.Opis,
                            NacinKoriscenja = el.Proizvod.NacinKoriscenja,
                            Prodavac        = null
                        }
                    });
                }
                outListaNarudzbina.Add(outNar);
            }

            return(outListaNarudzbina);
        }