public async Task <IActionResult> Add([FromBody] InOrderDTO model) { var outOrderDTOs = await _orderService.Add(model, HttpContext); if (outOrderDTOs == null) { return(BadRequest()); } return(Ok(outOrderDTOs)); }
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); }