public async Task <ZahtjevDto> OdobriZahtjev(OdobravanjeZahtjevaDto odobravanjeZahtjeva) { // trazimo zahtjev po id-u var zahtjev = await _context.Zahtjevi .Include(v => v.Valuta) .Where(z => z.ZahtjevId == odobravanjeZahtjeva.ZahtjevId) .ProjectTo <ZahtjevDto>(_mapper.ConfigurationProvider) .Select(z => new ZahtjevDto() { ZahtjevId = z.ZahtjevId, KorisnikId = z.KorisnikId, ProdajemValutaId = z.ProdajemValutaId, ProdajemValuta = _context.Valute.Where(v => v.ValutaId == z.ProdajemValutaId).Select(s => s.Naziv).FirstOrDefault(), KupujemValutaId = z.KupujemValutaId, KupujemValuta = _context.Valute.Where(v => v.ValutaId == z.KupujemValutaId).Select(s => s.Naziv).FirstOrDefault(), Iznos = z.Iznos, Prihvacen = z.Prihvacen, DatumVrijemeKreiranja = DateTime.Now }) .FirstOrDefaultAsync(); var httpClient = _httpClientFactory.CreateClient(); var url = $"https://v6.exchangerate-api.com/v6/09a14a921f6de3a3c311a083/pair/{zahtjev.ProdajemValuta}/{zahtjev.KupujemValuta}/{zahtjev.Iznos}"; var response = await httpClient.GetAsync(url); var responseStream = await response.Content.ReadAsStreamAsync(); var responseObject = await JsonSerializer.DeserializeAsync <KonverzijaValute>(responseStream); // dobijemo period u kojem se ta valuta moze prodati po idu var vrijemeProdaje = await _context.Valute .Where(v => v.ValutaId == zahtjev.ProdajemValutaId) .Select(v => new VrijemeValuteDto() { AktivnoOd = v.AktivnoOd, AktivnoDo = v.AktivnoDo }) .FirstOrDefaultAsync(); //trazimo sva vremena i gledamo da li je moguca prodaja TimeSpan start = vrijemeProdaje.AktivnoOd; //10 TimeSpan end = vrijemeProdaje.AktivnoDo; //12 TimeSpan now = DateTime.Now.TimeOfDay; if ((now < start) && (now > end)) { throw new Exception("Zahtjev se ne može odobriti jer se navedena valuta ne može prodati u ovo doba dana."); } if (odobravanjeZahtjeva.Prihvacen == 2) { var prodajnoSredstvo = await _context.Sredstva .Where(u => u.KorisnikId == zahtjev.KorisnikId && u.ValutaId == zahtjev.ProdajemValutaId) .FirstOrDefaultAsync(); prodajnoSredstvo.Iznos -= zahtjev.Iznos; _context.Sredstva.Update(prodajnoSredstvo); await _context.SaveChangesAsync(); var kupovnoSredstvo = await _context.Sredstva .Where(u => u.KorisnikId == zahtjev.KorisnikId && u.ValutaId == zahtjev.KupujemValutaId) .FirstOrDefaultAsync(); if (kupovnoSredstvo == null) { var kupovno = new Sredstva() { ValutaId = zahtjev.KupujemValutaId, KorisnikId = zahtjev.KorisnikId, Iznos = responseObject.conversion_result }; _context.Sredstva.Add(kupovno); await _context.SaveChangesAsync(); } else { kupovnoSredstvo.Iznos += responseObject.conversion_result; _context.Sredstva.Update(kupovnoSredstvo); await _context.SaveChangesAsync(); } var zah = await _context.Zahtjevi .Where(v => v.ZahtjevId == odobravanjeZahtjeva.ZahtjevId) .FirstOrDefaultAsync(); zah.Prihvacen = 2; zah.DatumVrijemeKreiranja = DateTime.Now; _context.Zahtjevi.Update(zah); await _context.SaveChangesAsync(); } var odobravanje = new OdobravanjeZahtjevaDto() { ZahtjevId = odobravanjeZahtjeva.ZahtjevId, Prihvacen = odobravanjeZahtjeva.Prihvacen }; var odobreno = _mapper.Map <ZahtjevDto>(odobravanje); return(odobreno); }
public async Task <ZahtjevDto> OdobriZahtjev(OdobravanjeZahtjevaDto odobravanjeZahtjeva) { return(await _service.OdobriZahtjev(odobravanjeZahtjeva)); }