private void btnProcent_Click(object sender, EventArgs e) { textBox1Focus(); if (Prevzema) { return; } Prevzema = true; if (CurrSortiranje.Equals(Sortiranje.ProcentOpagjacki)) { pbProcent.Image = Resources.LightArrowUp; CurrSortiranje = Sortiranje.ProcentRastecki; } else { pbProcent.Image = Resources.LightArrowDown; pbStara.Image = Resources.DarkArrowDown; pbNova.Image = Resources.DarkArrowDown; pbIme.Image = Resources.DarkArrowDown; CurrSortiranje = Sortiranje.ProcentOpagjacki; } Thread oThread = new Thread(new ThreadStart(PrevzemiStavki)); oThread.Start(); LoadingSemaphore.Release(); }
/// <summary> /// Search movies asynchronously /// </summary> public override async Task LoadMoviesAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(CancellationLoadingMovies.Token); StopLoadingMovies(); if (reset) { Movies.Clear(); Page = 0; VerticalScroll = 0d; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Movies.Count == MaxNumberOfMovies) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading search page {Page} with criteria: {SearchFilter}"); HasLoadingFailed = false; try { IsLoadingMovies = true; var result = await MovieService.SearchMoviesAsync(SearchFilter, Page, MaxMoviesPerPage, Genre, Rating, CancellationLoadingMovies.Token); Movies.AddRange(result.movies.Except(Movies, new MovieLightComparer())); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = result.nbMovies; UserService.SyncMovieHistory(Movies); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading search page {Page} with criteria {SearchFilter}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded search page {Page} with criteria {SearchFilter} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
private void LoadLogo() { // Доколку нема линк постави ја предодредената слика if (Restoran.LogoUrl == null) { return; } Image img; try { // Пробај да ја вчиташ сликата img = ImageFromURL(Restoran.LogoUrl); // Забелешка: Вчитување со посебен метод за да се земе Image објект. Можно е и директно во PictureBox // но така не е можно да се обезбеди паралелизам, а да не се примети кочење, бидејќи самите контроли // синхронизираат и не дозволуваат во исто време две нишки да прават измени. } catch (Exception) { // Доколку не може да се вчита постави предодредена слика img = Resources.FASAP_LOGO; } // Чекај додека не заврши почетното исцртување на формата (важно за да не се приметува сецкање при појавувањето на формата) LoadingSemaphore.WaitOne(); // Постави ја сликата на pictureBoxLogo SetPbDefaultLogo(pictureBoxLogo, img); }
public void PostaviNarackiPorast() { string sql = @"with t as (select r.restoran_id, r.ime_restoran, pret.pret_mesec, tek.tek_mesec, tek.tek_mesec / pret.pret_mesec as koef from restoran r left outer join (select r.restoran_id, r.ime_restoran, count(*) as tek_mesec from narachka n, restoran r where n.restoran_id = r.restoran_id and to_char(n.vreme, 'mm.yyyy') like to_char(sysdate, 'mm.yyyy') group by r.restoran_id, r.ime_restoran) tek on r.ime_restoran = tek.ime_restoran left outer join (select r.restoran_id, r.ime_restoran, count(*) as pret_mesec from narachka n, restoran r where n.restoran_id = r.restoran_id and to_char(n.vreme, 'mm.yyyy') like to_char( add_months(sysdate, -1), 'mm.yyyy') group by r.restoran_id, r.ime_restoran) pret on tek.ime_restoran = pret.ime_restoran ) select Претходен_месец, Тековен_месец, Пораст from ((select t.restoran_id, t.ime_restoran as Ресторан, NVL(t.pret_mesec, 0) || ' нарачки' as Претходен_месец, NVL(t.tek_mesec, 0) || ' нарачки' as Тековен_месец, round((koef - 1) * 100, 1) || '%' as Пораст from t where t.koef <= 1 or t.koef is null) union (select t.restoran_id, t.ime_restoran as Ресторан, NVL(t.pret_mesec, 0) || ' нарачки' as Претходен_месец, NVL(t.tek_mesec, 0) || ' нарачки' as Тековен_месец, round(koef * 100, 1) || '%' as Пораст from t where t.koef > 1 or t.koef is null)) tmp where restoran_id = :RES_ID"; OracleCommand cmd = new OracleCommand(sql, Conn); OracleParameter prm = new OracleParameter("RES_ID", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); cmd.CommandType = CommandType.Text; string predhoden = null; string tekoven = null; string procent = null; try { OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { predhoden = dr.GetString(0); tekoven = dr.GetString(1); procent = dr.GetString(2); break; } } catch (Exception) { SetText(lblErrorMessage, "Имате проблем со поврзување на конекцијата"); SetVisible(lblErrorMessage, true); } LoadingSemaphore.WaitOne(); SetObject(lblPredhoden, predhoden); SetObject(lblTekoven, tekoven); SetObject(lblProcent, procent); }
private void buttonFASAP1_Click(object sender, EventArgs e) { buttonFASAP1.Enabled = false; Thread oThread = new Thread(new ThreadStart(KreirajMeni)); oThread.Start(); indMeni = 0; LoadingSemaphore.Release(); buttonFASAP1.Enabled = true; }
public void PostaviDatum() { if (!ValidateChildren() || Postavuva) { return; } Postavuva = true; pbProcent.Image = Resources.LightArrowDown; pbRegion.Image = Resources.DarkArrowDown; Thread oThread = new Thread(new ThreadStart(PrevzemiPodatociZaRegioni)); oThread.Start(); LoadingSemaphore.Release(); }
public void PostaviNajverenKlient() { string sql = @"SELECT * FROM ( SELECT ONL.IME_KLIENT AS IME, ONL.PREZIME_KLIENT AS PREZIME, ONL.ADRESA_ZA_DOSTAVA AS ADRESA, SUM(VKUPNA_CENA) AS SUMA FROM RESTORAN RES JOIN NARACHKA NAR ON RES.RESTORAN_ID = NAR.RESTORAN_ID JOIN ONLINE_NARACHKA ONL ON NAR.RESTORAN_ID = ONL.RESTORAN_ID AND NAR.NARACHKA_ID = ONL.NARACHKA_ID WHERE RES.RESTORAN_ID = :RES_ID GROUP BY (RES.RESTORAN_ID, ONL.ADRESA_ZA_DOSTAVA, ONL.IME_KLIENT, ONL.PREZIME_KLIENT) ORDER BY SUM(VKUPNA_CENA) DESC )"; OracleCommand cmd = new OracleCommand(sql, Conn); OracleParameter prm = new OracleParameter("RES_ID", OracleDbType.Int64); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); cmd.CommandType = CommandType.Text; string ime = null; string prezime = null; string suma = null; string adresa = null; try { OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { ime = dr.GetString(0); prezime = dr.GetString(1); suma = dr.GetInt32(3).ToString(); adresa = dr.GetString(2).ToString(); break; } } catch (Exception) { SetText(lblErrorMessage, "Имате проблем со поврзување на конекцијата"); SetVisible(lblErrorMessage, true); } LoadingSemaphore.WaitOne(); SetObject(lblIme, ime); SetObject(lblPrezime, prezime); SetObject(lblSuma, suma); SetObject(lblAdresa, adresa); }
/// <summary> /// Search shows asynchronously /// </summary> public override async Task LoadShowsAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(CancellationLoadingShows.Token); await Task.Run(async() => { StopLoadingShows(); if (reset) { DispatcherHelper.CheckBeginInvokeOnUI(() => { Shows.Clear(); Page = 0; VerticalScroll = 0d; }); } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Shows.Count == MaxNumberOfShows) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading search page {Page} with criteria: {SearchFilter}"); HasLoadingFailed = false; try { IsLoadingShows = true; var result = await ShowService.SearchShowsAsync(SearchFilter, Page, MaxNumberOfShows, Genre, Rating * 10, CancellationLoadingShows.Token); DispatcherHelper.CheckBeginInvokeOnUI(() => { Shows.AddRange(result.shows.Except(Shows, new ShowLightComparer())); IsLoadingShows = false; IsShowFound = Shows.Any(); CurrentNumberOfShows = Shows.Count; MaxNumberOfShows = result.nbShows; UserService.SyncShowHistory(Shows); }); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading search page {Page} with criteria {SearchFilter}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded search page {Page} with criteria {SearchFilter} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }); }
private void SocuvajPromeni() { if (!ValidateChildren()) { timer1.Stop(); ButtonFasapSetText(lblErrorMessage, "Лошо внесени податоци, промените се одбиени"); ButtonFasapSetVisible(lblErrorMessage, true); timer1.Start(); IsChanged = false; return; } if (SelectedComponent != null) { try { SelectedComponent.SqlDelete(Conn, Restoran.RestoranID); } catch (Exception ex) { timer1.Stop(); ButtonFasapSetText(lblErrorMessage, ex.Message); ButtonFasapSetVisible(lblErrorMessage, true); timer1.Start(); return; } if (IsDecorator) { Dodatok dodatok = new Dodatok((SelectedComponent as Stavka).ID, tbIme.Text, int.Parse(tbCena.Text), tbOpis.Text); dodatok.Parent = SelectedComponent.Parent; SelectedComponent = dodatok; } else { Stavka dodatok = new Stavka((SelectedComponent as Stavka).ID, tbIme.Text, int.Parse(tbCena.Text), tbOpis.Text); dodatok.Parent = SelectedComponent.Parent; SelectedComponent = dodatok; } try { SelectedComponent.SqlInsert(Conn, Restoran.RestoranID); IsChanged = false; Thread oThread = new Thread(new ThreadStart(KreirajMeni)); oThread.Start(); LoadingSemaphore.Release(); } catch (Exception ex) { timer1.Stop(); ButtonFasapSetText(lblErrorMessage, ex.Message); ButtonFasapSetVisible(lblErrorMessage, true); timer1.Start(); } } else { if (DodadiStavka) { MenuComponent mc; if (IsDecorator) { mc = new Dodatok(-1, tbIme.Text, int.Parse(tbCena.Text), tbOpis.Text); } else { mc = new Stavka(-1, tbIme.Text, int.Parse(tbCena.Text), tbOpis.Text); } mc.Parent = CurrMenu; try { mc.SqlInsert(Conn, Restoran.RestoranID); IsChanged = false; Thread oThread = new Thread(new ThreadStart(KreirajMeni)); oThread.Start(); LoadingSemaphore.Release(); tbIme.Visible = false; lblIme.Visible = false; lblOpis.Visible = false; tbOpis.Visible = false; lblDodatok.Visible = false; btnDodatok.Visible = false; lblCena.Visible = false; tbCena.Visible = false; } catch (DuplicatePrimaryKeyException ex) { MessageBoxForm mf = new MessageBoxForm(ex.Message, false); if (mf.ShowDialog() == DialogResult.Yes) { tbIme.Text = ""; } else { tbIme.Visible = false; lblIme.Visible = false; lblOpis.Visible = false; tbOpis.Visible = false; lblDodatok.Visible = false; btnDodatok.Visible = false; lblCena.Visible = false; tbCena.Visible = false; IsChanged = false; SelectedComponent = null; } } catch (Exception ex) { timer1.Stop(); ButtonFasapSetText(lblErrorMessage, ex.Message); ButtonFasapSetVisible(lblErrorMessage, true); timer1.Start(); } } else { MenuComponent mc = new Meni(tbIme.Text); mc.Parent = CurrMenu; try { mc.SqlInsert(Conn, Restoran.RestoranID); IsChanged = false; Thread oThread = new Thread(new ThreadStart(KreirajMeni)); oThread.Start(); LoadingSemaphore.Release(); tbIme.Visible = false; lblIme.Visible = false; } catch (DuplicatePrimaryKeyException ex) { MessageBoxForm mf = new MessageBoxForm(ex.Message, false); if (mf.ShowDialog() == DialogResult.Yes) { tbIme.Text = ""; } else { tbIme.Visible = false; lblIme.Visible = false; IsChanged = false; SelectedComponent = null; } } catch (Exception ex) { timer1.Stop(); ButtonFasapSetText(lblErrorMessage, ex.Message); ButtonFasapSetVisible(lblErrorMessage, true); timer1.Start(); } } } }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(CancellationLoadingMovies.Token); if (reset) { Movies.Clear(); Page = 0; VerticalScroll = 0d; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Movies.Count == MaxNumberOfMovies) { Page--; LoadingSemaphore.Release(); return; } StopLoadingMovies(); Logger.Info( $"Loading page {Page}..."); HasLoadingFailed = false; try { IsLoadingMovies = true; await Task.Run(async() => { var getMoviesWatcher = new Stopwatch(); getMoviesWatcher.Start(); var seen = UserService.GetSeenMovies(Page); var favorites = UserService.GetFavoritesMovies(Page); var movies = seen.allMovies.Union(favorites.allMovies).Distinct().ToList(); var result = await MovieService .GetSimilarAsync(Page, Utils.Constants.MaxMoviesPerPage, movies, CancellationLoadingMovies.Token).ConfigureAwait(false); getMoviesWatcher.Stop(); var getMoviesEllapsedTime = getMoviesWatcher.ElapsedMilliseconds; if (reset && getMoviesEllapsedTime < 500) { // Wait for VerticalOffset to reach 0 (animation lasts 500ms) await Task.Delay(500 - (int)getMoviesEllapsedTime, CancellationLoadingMovies.Token).ConfigureAwait(false); } DispatcherHelper.CheckBeginInvokeOnUI(() => { Movies.AddRange(result.movies.Except(Movies, new MovieLightComparer())); IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = result.nbMovies == 0 ? Movies.Count : result.nbMovies; UserService.SyncMovieHistory(Movies); }); }, CancellationLoadingMovies.Token).ConfigureAwait(false); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(); StopLoadingMovies(); if (reset) { Movies.Clear(); Page = 0; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Movies.Count == MaxNumberOfMovies) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading movies seen page {Page}..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var imdbIds = await UserService.GetSeenMovies(Page); if (!_needSync) { var movies = new List <MovieJson>(); await imdbIds.movies.ParallelForEachAsync(async imdbId => { var movie = await MovieService.GetMovieAsync(imdbId); if (movie != null) { movie.IsFavorite = true; movies.Add(movie); } }); var updatedMovies = movies.OrderBy(a => a.Title) .Where(a => (Genre != null ? a.Genres.Any( genre => genre.ToLowerInvariant() == Genre.EnglishName.ToLowerInvariant()) : a.Genres.TrueForAll(b => true)) && a.Rating >= Rating); Movies.AddRange(updatedMovies.Except(Movies.ToList(), new MovieComparer())); } else { var moviesToDelete = Movies.Select(a => a.ImdbCode).Except(imdbIds.allMovies); var moviesToAdd = imdbIds.allMovies.Except(Movies.Select(a => a.ImdbCode)); foreach (var movie in moviesToDelete.ToList()) { Movies.Remove(Movies.FirstOrDefault(a => a.ImdbCode == movie)); } var movies = moviesToAdd.ToList(); await movies.ParallelForEachAsync(async imdbId => { var movie = await MovieService.GetMovieAsync(imdbId); if ((Genre != null ? movie.Genres.Any( genre => genre.ToLowerInvariant() == Genre.EnglishName.ToLowerInvariant()) : movie.Genres.TrueForAll(b => true)) && movie.Rating >= Rating) { DispatcherHelper.CheckBeginInvokeOnUI(() => { Movies.Add(movie); }); } }); } IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = imdbIds.nbMovies; await UserService.SyncMovieHistoryAsync(Movies); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading movies seen page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { Movies.Sort((a, b) => String.Compare(a.Title, b.Title, StringComparison.Ordinal)); _needSync = false; watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded movies seen page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
public override void LoadingMethod() { LoadingSemaphore.Release(2); }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadShowsAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(); StopLoadingShows(); if (reset) { Shows.Clear(); Page = 0; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Shows.Count == MaxNumberOfShows) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading shows favorite page {Page}..."); HasLoadingFailed = false; try { IsLoadingShows = true; var imdbIds = await UserService.GetFavoritesShows(Page); if (!_needSync) { var shows = new List <ShowJson>(); await imdbIds.shows.ParallelForEachAsync(async imdbId => { var show = await ShowService.GetShowAsync(imdbId); if (show != null) { show.IsFavorite = true; shows.Add(show); } }); var updatedShows = shows.OrderBy(a => a.Title) .Where(a => (Genre != null ? a.Genres.Any( genre => genre.ToLowerInvariant() == Genre.EnglishName.ToLowerInvariant()) : a.Genres.TrueForAll(b => true)) && a.Rating.Percentage >= Rating * 10); Shows.AddRange(updatedShows.Except(Shows.ToList(), new ShowComparer())); } else { var showsToDelete = Shows.Select(a => a.ImdbId).Except(imdbIds.allShows); var showsToAdd = imdbIds.allShows.Except(Shows.Select(a => a.ImdbId)); foreach (var movie in showsToDelete.ToList()) { Shows.Remove(Shows.FirstOrDefault(a => a.ImdbId == movie)); } var shows = showsToAdd.ToList(); await shows.ParallelForEachAsync(async imdbId => { var show = await ShowService.GetShowAsync(imdbId); if ((Genre != null ? show.Genres.Any( genre => genre.ToLowerInvariant() == Genre.EnglishName.ToLowerInvariant()) : show.Genres.TrueForAll(b => true)) && show.Rating.Percentage >= Rating * 10) { DispatcherHelper.CheckBeginInvokeOnUI(() => { Shows.Add(show); }); } }); } IsLoadingShows = false; IsShowFound = Shows.Any(); CurrentNumberOfShows = Shows.Count; MaxNumberOfShows = imdbIds.nbShows; await UserService.SyncShowHistoryAsync(Shows); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading shows favorite page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { Shows.Sort((a, b) => String.Compare(a.Title, b.Title, StringComparison.Ordinal)); _needSync = false; watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded shows favorite page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
public void PrevzemiPodatociZaRegioni() { DateTime Od = DateTime.ParseExact(tbDatumOd.Text + " 00:00", "dd.MM.yyyy HH:mm", CultureInfo.InvariantCulture); DateTime Do = DateTime.ParseExact(tbDatumDo.Text + " 23:59", "dd.MM.yyyy HH:mm", CultureInfo.InvariantCulture); string sql = @"select r.region, NVL(period_rg.period, 0) as BROJ_NARACHKI, ROUND(nvl(period_rg.period/period_vk.period * 100, 0), 2) AS PROCENT from ( select distinct SUBSTR(adresa_za_dostava, 1, INSTR(adresa_za_dostava,'""', 1, 1) - 2) AS REGION from online_narachka where restoran_id = :RES_ID and adresa_za_dostava is not null ) r natural left outer join ( select count(*) as period from ( select narachka_id from online_narachka where restoran_id = :RES_ID1 and adresa_za_dostava is not null ) n natural join ( select narachka_id from narachka where restoran_id = :RES_ID2 AND vreme >= :DatumOd AND vreme <= :DatumDo ) o ) period_vk left outer join ( select n.region, count(*) as period from ( select narachka_id, SUBSTR(adresa_za_dostava, 1, INSTR(adresa_za_dostava,'""', 1, 1) - 2) AS REGION from online_narachka where restoran_id = :RES_ID3 and adresa_za_dostava is not null ) n natural join ( select narachka_id from narachka where restoran_id = :RES_ID4 AND vreme >= :Od AND vreme <= :Do ) o group by n.region ) period_rg on period_rg.region = r.region order by ROUND(nvl(period_rg.period/period_vk.period * 100, 0), 2) desc, r.region asc"; OracleCommand cmd = new OracleCommand(sql, Conn); OracleParameter prm = new OracleParameter("RES_ID", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID1", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID2", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("DatumOd", OracleDbType.Date); prm.Value = Od; cmd.Parameters.Add(prm); prm = new OracleParameter("DatumDo", OracleDbType.Date); prm.Value = Do; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID3", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID4", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("Od", OracleDbType.Date); prm.Value = Od; cmd.Parameters.Add(prm); prm = new OracleParameter("Do", OracleDbType.Date); prm.Value = Do; cmd.Parameters.Add(prm); Regioni = new List <Naracki.Region>(); try { cmd.CommandType = CommandType.Text; OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Naracki.Region reg = new Naracki.Region(dr.GetString(0), dr.GetInt32(1), dr.GetDecimal(2)); Regioni.Add(reg); } } catch (Exception ex) { SetText(lblErrorMessage, "Имате проблем со поврзување на конекцијата"); SetVisible(lblErrorMessage, true); } LoadingSemaphore.WaitOne(); PostaviRegioni(); }
public void PrevzemiStavki() { string sql = @"SELECT A.IME_STAVKA AS STAVKA, A.CENA_STAVKA || ' ден.' AS CENA, NVL(A.PROSEK, 0) || ' ком/ден' AS NOV, NVL(B.PROSEK, 0) || ' ком/ден' AS STAR, ROUND((A.PROSEK - B.PROSEK)*100/B.PROSEK, 2) || '%' AS PROCENT_NA_PORAST FROM ( SELECT S.IME_MENI, S.IME_STAVKA, S.OPIS_STAVKA, S.CENA_STAVKA, VALIDNOST_STAVKA, ROUND(SUM(V.KOLICHINA_STAVKA) / TO_NUMBER(MAX(N.VREME) - MIN(N.VREME) + 1), 1) AS PROSEK FROM ( SELECT RESTORAN_ID, IME_MENI, STAVKA_ID, IME_STAVKA, VALIDNOST_STAVKA, OPIS_STAVKA, CENA_STAVKA FROM ( SELECT RESTORAN_ID, IME_MENI, STAVKA_ID, IME_STAVKA, VALIDNOST_STAVKA, OPIS_STAVKA, CENA_STAVKA FROM STAVKA WHERE RESTORAN_ID = :RES_ID AND VALIDNOST_STAVKA = 1 ) WHERE (RESTORAN_ID, IME_MENI, IME_STAVKA) IN ( SELECT RESTORAN_ID, IME_MENI, IME_STAVKA FROM STAVKA WHERE RESTORAN_ID = :RES_ID1 AND VALIDNOST_STAVKA = 0 ) ) S LEFT OUTER JOIN VKLUCHUVA V ON S.RESTORAN_ID = V.RESTORAN_ID AND S.IME_MENI = V.IME_MENI AND S.STAVKA_ID = V.STAVKA_ID LEFT OUTER JOIN NARACHKA N ON V.RESTORAN_ID = N.RESTORAN_ID AND V.NARACHKA_ID = N.NARACHKA_ID GROUP BY (S.RESTORAN_ID, S.IME_MENI, S.STAVKA_ID, S.IME_STAVKA, S.VALIDNOST_STAVKA, S.OPIS_STAVKA, S.CENA_STAVKA) ) A JOIN ( SELECT IME_MENI, IME_STAVKA, OPIS_STAVKA, AVG(PROSEK) AS PROSEK FROM ( SELECT S.IME_MENI, S.IME_STAVKA, S.OPIS_STAVKA, VALIDNOST_STAVKA, ROUND(SUM(V.KOLICHINA_STAVKA) / TO_NUMBER(MAX(N.VREME) - MIN(N.VREME) + 1), 1) AS PROSEK FROM ( SELECT RESTORAN_ID, IME_MENI, STAVKA_ID, IME_STAVKA, VALIDNOST_STAVKA, OPIS_STAVKA FROM ( SELECT RESTORAN_ID, IME_MENI, STAVKA_ID, IME_STAVKA, VALIDNOST_STAVKA, OPIS_STAVKA FROM STAVKA WHERE RESTORAN_ID = :RES_ID2 AND VALIDNOST_STAVKA = 0 ) WHERE (RESTORAN_ID, IME_MENI, IME_STAVKA) IN ( SELECT RESTORAN_ID, IME_MENI, IME_STAVKA FROM STAVKA WHERE RESTORAN_ID = :RES_ID3 AND VALIDNOST_STAVKA = 0 ) ) S LEFT OUTER JOIN VKLUCHUVA V ON S.RESTORAN_ID = V.RESTORAN_ID AND S.IME_MENI = V.IME_MENI AND S.STAVKA_ID = V.STAVKA_ID LEFT OUTER JOIN NARACHKA N ON V.RESTORAN_ID = N.RESTORAN_ID AND V.NARACHKA_ID = N.NARACHKA_ID GROUP BY (S.RESTORAN_ID, S.IME_MENI, S.STAVKA_ID, S.IME_STAVKA, S.VALIDNOST_STAVKA, S.OPIS_STAVKA) ) GROUP BY (IME_MENI, IME_STAVKA, OPIS_STAVKA) ) B ON A.IME_STAVKA = B.IME_STAVKA AND A.IME_MENI = B.IME_MENI AND NVL(A.OPIS_STAVKA, 0) = NVL(B.OPIS_STAVKA, 0)" ; if (CurrSortiranje.Equals(Sortiranje.ImeOpagjacki)) { sql += "\nORDER BY STAVKA desc"; } else if (CurrSortiranje.Equals(Sortiranje.ImeRastecki)) { sql += "\nORDER BY STAVKA asc"; } else if (CurrSortiranje.Equals(Sortiranje.ProcentOpagjacki)) { sql += "\nORDER BY ROUND((A.PROSEK - B.PROSEK)*100/B.PROSEK, 2) desc, STAVKA"; } else if (CurrSortiranje.Equals(Sortiranje.ProcentRastecki)) { sql += "\nORDER BY ROUND((A.PROSEK - B.PROSEK)*100/B.PROSEK, 2) asc, STAVKA"; } else if (CurrSortiranje.Equals(Sortiranje.StaraOpagjacki)) { sql += "\nORDER BY NVL(B.PROSEK, 0) desc, STAVKA"; } else if (CurrSortiranje.Equals(Sortiranje.StaraRastecki)) { sql += "\nORDER BY NVL(B.PROSEK, 0) asc, STAVKA"; } else if (CurrSortiranje.Equals(Sortiranje.NovaOpagjacki)) { sql += "\nORDER BY NVL(A.PROSEK, 0) desc, STAVKA"; } else if (CurrSortiranje.Equals(Sortiranje.NovaRastecki)) { sql += "\nORDER BY NVL(A.PROSEK, 0) asc, STAVKA"; } OracleCommand cmd = new OracleCommand(sql, Conn); OracleParameter prm = new OracleParameter("RES_ID", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID1", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID2", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); prm = new OracleParameter("RES_ID3", OracleDbType.Int32); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); Stavki = new List <StavkaPorast>(); try { cmd.CommandType = CommandType.Text; OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { StavkaPorast st = new StavkaPorast(dr.GetString(0), dr.GetString(3), dr.GetString(2), dr.GetString(1), dr.GetString(4)); Stavki.Add(st); } } catch (Exception ex) { SetText(lblErrorMessage, "Имате проблем со поврзување на конекцијата"); SetVisible(lblErrorMessage, true); } LoadingSemaphore.WaitOne(); PostaviTabela(); }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(CancellationLoadingMovies.Token); StopLoadingMovies(); if (reset) { Movies.Clear(); Page = 0; VerticalScroll = 0d; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Movies.Count == MaxNumberOfMovies && reset) { Page--; LoadingSemaphore.Release(); return; } Logger.Trace( "Loading movies favorites page..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var imdbIds = UserService.GetFavoritesMovies(Page); var moviesToDelete = Movies.Select(a => a.ImdbId).Except(imdbIds.allMovies); var moviesToAdd = imdbIds.movies.Except(Movies.Select(a => a.ImdbId)); foreach (var movie in moviesToDelete.ToList()) { Movies.Remove(Movies.FirstOrDefault(a => a.ImdbId == movie)); } var movies = moviesToAdd.ToList(); var moviesToAddAndToOrder = new List <MovieLightJson>(); if (movies.Any()) { var movieByIds = await MovieService.GetMoviesByIds(movies, CancellationLoadingMovies.Token); foreach (var movie in movieByIds.movies) { if ((Genre == null || movie.Genres.Contains(Genre.EnglishName)) && movie.Rating >= Rating) { moviesToAddAndToOrder.Add(movie); } } } foreach (var movie in moviesToAddAndToOrder.Except(Movies.ToList(), new MovieLightComparer())) { var pair = Movies .Select((value, index) => new { value, index }) .FirstOrDefault(x => string.CompareOrdinal(x.value.Title, movie.Title) > 0); if (pair == null) { Movies.Add(movie); } else { Movies.Insert(pair.index, movie); } } IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = imdbIds.nbMovies; UserService.SyncMovieHistory(Movies); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading movies favorite page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { NeedSync = false; watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Trace( $"Loaded movies favorite page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
/// <summary> /// Креирање на мени со помош на хеш мапи. /// Идеја: Да се овозможи еднократно читање од база и потоа линеарно креирање на дрвото на менија. /// /// Ги поставува: Restoran.GlavnoMeni и CurrMenu (иста истанца) /// </summary> private void KreirajMeni() { Dictionary <string, Meni> Menus = new Dictionary <string, Meni>(); Dictionary <StavkaKey, Stavka> Items = new Dictionary <StavkaKey, Stavka>(); // Вчитување на менија string sql = @"SELECT * FROM MENI WHERE RESTORAN_ID = :RES_ID AND VALIDNOST_MENI = 1"; OracleCommand cmd = new OracleCommand(sql, Conn); OracleParameter prm = new OracleParameter("RES_ID", OracleDbType.Int64); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); cmd.CommandType = CommandType.Text; OracleDataReader dr = cmd.ExecuteReader(); Meni meni; while (dr.Read()) { meni = new Meni(dr.GetString(1)); Object obj = dr.GetValue(3); if (obj == null) { meni.ImeGlavno = null; } else { meni.ImeGlavno = obj as String; } String IsValid = (string)dr.GetValue(2); if (IsValid == "1") { meni.ValidnostMeni = true; } else { meni.ValidnostMeni = false; } Menus.Add(meni.Ime, meni); } // Вчитување на ставки sql = @"SELECT * FROM STAVKA WHERE VALIDNOST_STAVKA LIKE '1' AND RESTORAN_ID = :RES_ID"; cmd = new OracleCommand(sql, Conn); prm = new OracleParameter("RES_ID", OracleDbType.Int64); prm.Value = Restoran.RestoranID; cmd.Parameters.Add(prm); cmd.CommandType = CommandType.Text; dr = cmd.ExecuteReader(); Dodatok dodatok; Stavka stavka; while (dr.Read()) { String IsDecorator = (string)dr.GetValue(5); Object ImeGlavno = dr.GetValue(1); Object OpisStavka = dr.GetValue(3); if (IsDecorator == "1") { dodatok = new Dodatok((int)dr.GetValue(2), dr.GetString(7), (decimal)dr.GetValue(4)); if (ImeGlavno == null) { dodatok.ImeGlavno = null; } else { dodatok.ImeGlavno = ImeGlavno as String; } if (OpisStavka == null) { dodatok.Opis = null; } else { dodatok.Opis = OpisStavka as String; } Items.Add(dodatok.GetStavkaKey(), dodatok); } else { stavka = new Stavka((int)dr.GetValue(2), dr.GetString(7), (decimal)dr.GetValue(4)); if (ImeGlavno == null) { stavka.ImeGlavno = null; } else { stavka.ImeGlavno = ImeGlavno as String; } if (OpisStavka == null) { stavka.Opis = null; } else { stavka.Opis = OpisStavka as String; } Items.Add(stavka.GetStavkaKey(), stavka); } } foreach (var obj in Menus) { Meni menu; if (obj.Value.ImeGlavno != null && Menus.TryGetValue(obj.Value.ImeGlavno, out menu)) { menu.AddComp(obj.Value); obj.Value.Parent = menu; } else { Restoran.GlavnoMeni = obj.Value; } } foreach (var obj in Items) { Meni menu; if (Menus.TryGetValue(obj.Value.ImeGlavno, out menu)) { menu.AddComp(obj.Value); obj.Value.Parent = menu; } } //lblOsnovnoMeni.UpdateObject(Restoran.GlavnoMeni); LoadingSemaphore.WaitOne(); SetObject(lblOsnovnoMeni, Restoran.GlavnoMeni); CurrMenu = Restoran.GlavnoMeni; PopolniListaMenija(); }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadMoviesAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(); StopLoadingMovies(); if (reset) { Movies.Clear(); Page = 0; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Movies.Count == MaxNumberOfMovies) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading movies seen page {Page}..."); HasLoadingFailed = false; try { IsLoadingMovies = true; var imdbIds = await UserService.GetSeenMovies(Page); if (!NeedSync) { var movies = new List <MovieLightJson>(); await imdbIds.movies.ParallelForEachAsync(async imdbId => { try { var movie = await MovieService.GetMovieLightAsync(imdbId); if (movie != null) { movie.IsFavorite = true; movies.Add(movie); } } catch (Exception ex) { Logger.Error(ex); } }); var updatedMovies = movies.OrderBy(a => a.Title) .Where(a => (Genre == null || a.Genres.Contains(Genre.EnglishName)) && a.Rating >= Rating); foreach (var movie in updatedMovies.Except(Movies.ToList(), new MovieLightComparer())) { var pair = Movies .Select((value, index) => new { value, index }) .FirstOrDefault(x => string.CompareOrdinal(x.value.Title, movie.Title) > 0); if (pair == null) { Movies.Add(movie); } else { Movies.Insert(pair.index, movie); } } } else { var moviesToDelete = Movies.Select(a => a.ImdbCode).Except(imdbIds.allMovies); var moviesToAdd = imdbIds.allMovies.Except(Movies.Select(a => a.ImdbCode)); foreach (var movie in moviesToDelete.ToList()) { Movies.Remove(Movies.FirstOrDefault(a => a.ImdbCode == movie)); } var movies = moviesToAdd.ToList(); var moviesToAddAndToOrder = new List <MovieLightJson>(); await movies.ParallelForEachAsync(async imdbId => { try { var movie = await MovieService.GetMovieLightAsync(imdbId); if ((Genre == null || movie.Genres.Contains(Genre.EnglishName)) && movie.Rating >= Rating) { moviesToAddAndToOrder.Add(movie); } } catch (Exception ex) { Logger.Error(ex); } }); foreach (var movie in moviesToAddAndToOrder.Except(Movies.ToList(), new MovieLightComparer())) { var pair = Movies .Select((value, index) => new { value, index }) .FirstOrDefault(x => string.CompareOrdinal(x.value.Title, movie.Title) > 0); if (pair == null) { Movies.Add(movie); } else { Movies.Insert(pair.index, movie); } } } IsLoadingMovies = false; IsMovieFound = Movies.Any(); CurrentNumberOfMovies = Movies.Count; MaxNumberOfMovies = imdbIds.nbMovies; await UserService.SyncMovieHistoryAsync(Movies).ConfigureAwait(false); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading movies seen page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { NeedSync = false; watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded movies seen page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
/// <summary> /// Load movies asynchronously /// </summary> public override async Task LoadShowsAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(); StopLoadingShows(); if (reset) { Shows.Clear(); Page = 0; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Shows.Count == MaxNumberOfShows) { Page--; LoadingSemaphore.Release(); return; } Logger.Info( $"Loading shows favorite page {Page}..."); HasLoadingFailed = false; try { IsLoadingShows = true; var imdbIds = await UserService.GetFavoritesShows(Page); if (!NeedSync) { var shows = new List <ShowLightJson>(); await imdbIds.shows.ParallelForEachAsync(async imdbId => { try { var show = await ShowService.GetShowLightAsync(imdbId); if (show != null) { show.IsFavorite = true; shows.Add(show); } } catch (Exception ex) { Logger.Error(ex); } }); var updatedShows = shows.OrderBy(a => a.Title) .Where(a => (Genre == null || a.Genres.Contains(Genre.EnglishName)) && a.Rating.Percentage >= Rating * 10); foreach (var show in updatedShows.Except(Shows.ToList(), new ShowLightComparer())) { var pair = Shows .Select((value, index) => new { value, index }) .FirstOrDefault(x => string.CompareOrdinal(x.value.Title, show.Title) > 0); if (pair == null) { Shows.Add(show); } else { Shows.Insert(pair.index, show); } } } else { var showsToDelete = Shows.Select(a => a.ImdbId).Except(imdbIds.allShows); var showsToAdd = imdbIds.allShows.Except(Shows.Select(a => a.ImdbId)); foreach (var movie in showsToDelete.ToList()) { Shows.Remove(Shows.FirstOrDefault(a => a.ImdbId == movie)); } var shows = showsToAdd.ToList(); var showsToAddAndToOrder = new List <ShowLightJson>(); await shows.ParallelForEachAsync(async imdbId => { try { var show = await ShowService.GetShowLightAsync(imdbId); if ((Genre == null || show.Genres.Contains(Genre.EnglishName)) && show.Rating.Percentage >= Rating * 10) { showsToAddAndToOrder.Add(show); } } catch (Exception ex) { Logger.Error(ex); } }); foreach (var show in showsToAddAndToOrder.Except(Shows.ToList(), new ShowLightComparer())) { var pair = Shows .Select((value, index) => new { value, index }) .FirstOrDefault(x => string.CompareOrdinal(x.value.Title, show.Title) > 0); if (pair == null) { Shows.Add(show); } else { Shows.Insert(pair.index, show); } } } IsLoadingShows = false; IsShowFound = Shows.Any(); CurrentNumberOfShows = Shows.Count; MaxNumberOfShows = imdbIds.nbShows; await UserService.SyncShowHistoryAsync(Shows).ConfigureAwait(false); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading shows favorite page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { NeedSync = false; watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded shows favorite page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }
/// <summary> /// Load shows asynchronously /// </summary> public override async Task LoadShowsAsync(bool reset = false) { await LoadingSemaphore.WaitAsync(); if (reset) { Shows.Clear(); Page = 0; VerticalScroll = 0d; } var watch = Stopwatch.StartNew(); Page++; if (Page > 1 && Shows.Count == MaxNumberOfShows) { Page--; LoadingSemaphore.Release(); return; } StopLoadingShows(); Logger.Info( $"Loading page {Page}..."); HasLoadingFailed = false; try { IsLoadingShows = true; await Task.Run(async() => { var getMoviesWatcher = new Stopwatch(); getMoviesWatcher.Start(); var result = await ShowService.Discover(Page).ConfigureAwait(false); getMoviesWatcher.Stop(); var getMoviesEllapsedTime = getMoviesWatcher.ElapsedMilliseconds; if (reset && getMoviesEllapsedTime < 500) { // Wait for VerticalOffset to reach 0 (animation lasts 500ms) await Task.Delay(500 - (int)getMoviesEllapsedTime).ConfigureAwait(false); } DispatcherHelper.CheckBeginInvokeOnUI(() => { Shows.AddRange(result.Item1.Except(Shows, new ShowLightComparer())); IsLoadingShows = false; IsShowFound = Shows.Any(); CurrentNumberOfShows = Shows.Count; MaxNumberOfShows = result.nbMovies; UserService.SyncShowHistory(Shows); }); }).ConfigureAwait(false); } catch (Exception exception) { Page--; Logger.Error( $"Error while loading page {Page}: {exception.Message}"); HasLoadingFailed = true; Messenger.Default.Send(new ManageExceptionMessage(exception)); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Info( $"Loaded page {Page} in {elapsedMs} milliseconds."); LoadingSemaphore.Release(); } }