private async void btnPreporuka_Click(object sender, EventArgs e) { // razlika oko slike prilikom izmjene ili dodavanja novog evenyta provjeriti // validacija zbog vremena i svih podataka if (this.ValidateChildren()) { var niz = txtVrijeme.Text.Split(':'); int sati = int.Parse(niz[0]); int minute = int.Parse(niz[1]); Model.Request.DatumPSearchRequest request = new DatumPSearchRequest { IzabraniDatum = dtpDatumOdrzavanja.Value, KategorijaId = (cmbKategorije.SelectedItem as Kategorija).Id, ProstorOdrzavanjaId = (cmbProstorOdrzavanja.SelectedItem as ProstorOdrzavanja).Id, VrijemeEventa = new TimeSpan(sati, minute, 0) }; var preporuke = await _datumPService.Get <List <Model.DatumP> >(request); DatumP preporuka = preporuke?[0]; if (preporuka != null) { if (!string.IsNullOrEmpty(preporuka.Poruka)) { if (preporuka.IzabranJePreporucen) { MessageBox.Show(preporuka.Poruka, "Preporuka datuma", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { DialogResult drs = MessageBox.Show(preporuka.Poruka, "Preporuka datuma", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (drs == DialogResult.Yes) { dtpDatumOdrzavanja.Value = preporuka.PreporuceniDatum; } } } } } }
public override List <DatumP> Get(DatumPSearchRequest search) { DateTime datum = new DateTime(search.IzabraniDatum.Year, search.IzabraniDatum.Month, search.IzabraniDatum.Day, search.VrijemeEventa.Hours, search.VrijemeEventa.Minutes, 0); search.IzabraniDatum = datum; DatumP Preporuka = new DatumP(); var eventi = _ctx.Event.Where(e => e.KategorijaId == search.KategorijaId).ToList(); List <int> Sume = new List <int>(); Sume.Add(0); Sume.Add(0); Sume.Add(0); Sume.Add(0); Sume.Add(0); Sume.Add(0); Sume.Add(0); foreach (var e in eventi) { var suma = _ctx.ProdajaTip.Where(p => p.EventId == e.Id).Sum(p => p.BrojProdatihKarataTip); DayOfWeek DanEventa = e.DatumOdrzavanja.DayOfWeek; switch (DanEventa) { case DayOfWeek.Monday: Sume[0] += suma; break; case DayOfWeek.Tuesday: Sume[1] += suma; break; case DayOfWeek.Wednesday: Sume[2] += suma; break; case DayOfWeek.Thursday: Sume[3] += suma; break; case DayOfWeek.Friday: Sume[4] += suma; break; case DayOfWeek.Saturday: Sume[5] += suma; break; case DayOfWeek.Sunday: Sume[6] += suma; break; } } DayOfWeek PreporuceniDan = search.IzabraniDatum.DayOfWeek; int najsuma = Sume.Max(); int index = Sume.IndexOf(najsuma); /* int najvecaSuma = 0; * for(int i = 0; i < 7; i++) * { * if (Sume[i] > najvecaSuma) * najvecaSuma = Sume[i]; * } */ switch (index) { case 0: PreporuceniDan = DayOfWeek.Monday; break; case 1: PreporuceniDan = DayOfWeek.Tuesday; break; case 2: PreporuceniDan = DayOfWeek.Wednesday; break; case 3: PreporuceniDan = DayOfWeek.Thursday; break; case 4: PreporuceniDan = DayOfWeek.Friday; break; case 5: PreporuceniDan = DayOfWeek.Saturday; break; case 6: PreporuceniDan = DayOfWeek.Sunday; break; } int brojac = 0; bool isPrviProvjeren = false; DateTime PocetniDatum = search.IzabraniDatum; while (true) { brojac++; if (brojac > 15) { Preporuka.Poruka = string.Empty; Preporuka.PreporuceniDatum = search.IzabraniDatum; break; } if (brojac == 1 && search.IzabraniDatum.DayOfWeek == PreporuceniDan) { isPrviProvjeren = true; Preporuka.Poruka = "Izabrani datum je preporuceni datum. "; //+ PreporuceniDan.ToString(); Preporuka.PreporuceniDatum = search.IzabraniDatum; var organizovani = _ctx.Event.Where(e => e.ProstorOdrzavanjaId == search.ProstorOdrzavanjaId) .Where(e => e.DatumOdrzavanja.Date.CompareTo(PocetniDatum.Date) == 0).ToList(); bool PostojiEventURazmakuOd10Sati = false; foreach (var o in organizovani) { if (Math.Abs((o.DatumOdrzavanja - search.IzabraniDatum).TotalHours) < 10) { PostojiEventURazmakuOd10Sati = true; } } if (organizovani.Count != 0 && PostojiEventURazmakuOd10Sati == false) { // gdje razmak izedju nijedog org eventa i novog nije manji od 10 h Preporuka.PreporuceniDatum = PocetniDatum; Preporuka.Poruka += "Na ovaj datum na izabranom prostoru postoji/e organizovani event/i u satnici/ama: "; foreach (var o in organizovani) { Preporuka.Poruka += o.VrijemeOdrzavanja + ","; } } if (PostojiEventURazmakuOd10Sati == false) { Preporuka.IzabranJePreporucen = true; break; } } if (!isPrviProvjeren) { PocetniDatum = PocetniDatum.AddDays(1); } if (isPrviProvjeren) { PocetniDatum = PocetniDatum.AddDays(7); // da odmah ide na preporuceni dan } if (PocetniDatum.DayOfWeek == PreporuceniDan) { isPrviProvjeren = true; // da li je izabrano mjesto slobodno u potpunosti if (_ctx.Event.Where(e => e.ProstorOdrzavanjaId == search.ProstorOdrzavanjaId) .Where(e => e.DatumOdrzavanja.Date.CompareTo(PocetniDatum.Date) == 0).Count() == 0) { // nema nijedan event na tom prostoru tog dana Preporuka.PreporuceniDatum = PocetniDatum; Preporuka.Poruka = "Po trendu prodaje karata evenata ove kategorije preporuceni datum " + "za ovaj event je " + PocetniDatum.ToShortDateString() + ", da li zelite promijeniti datum ? "; break; } } } List <Model.DatumP> lista = new List <DatumP>(); lista.Add(Preporuka); return(lista); }