public static HttpStatusCode IzdajRacun(int korpaId, string popust = "") { MContext ctx = new MContext(); // Dohvacanje korpe / narudzbe za koju se izdaje racun Korpa korpa = ctx.Korpa.FirstOrDefault(x => x.Id == korpaId); NagradnaIgra igra = null; if (popust != "") { igra = ctx.NagradnaIgra.FirstOrDefault(item => item.KuponKod == popust && item.Iskoristen == false); if (igra == null) { return(HttpStatusCode.Conflict); } if (DateTime.Now > igra.VaziDo) { return(HttpStatusCode.Gone); } } // Provjera da li korpa postoji if (korpa != null) { #region Slanje racuna na email // Dohvatit sve podatke o korpi u svrhu formiranja racuna KorpaVm korpaVm = GetAllAboutKorpa(korpaId, false, false); string body = ""; // Pohrana racuna u bazu podataka Racun racun = new Racun { KorpaId = korpaVm.KorpaId, Datum = DateTime.Now, UkupnaCijena = (float)korpaVm.UkupnaCijena, }; // Ukoliko korisnik ima kupon sa sifrom if (igra != null) { racun.Popust = igra.Popust; racun.CijenaSaPopustom = racun.UkupnaCijena - racun.UkupnaCijena * (igra.Popust / 100); igra.Iskoristen = true; } else { racun.CijenaSaPopustom = racun.UkupnaCijena; } racun.Korpa = korpa; ctx.Racun.Add(racun); korpa.Racun = racun; korpa.RacunId = racun.KorpaId; ctx.SaveChanges(); // Kreiranje body dijela za slanje emaila body = "Poštovani " + korpaVm.Korisnik.Ime + " " + korpaVm.Korisnik.Prezime + ", <br/><br/>" + "Naručeno: " + korpaVm.UkupnoSalata + " salata, <br/><b>Ukupan iznos: </b>" + racun.UkupnaCijena + " KM<br/>"; body += igra != null ? "<b>Cijena sa popustom:</b> " + racun.CijenaSaPopustom + " KM (" + igra.Popust + " % popusta)<br/><br/><br/>" : ""; string bodyDetail = ""; int counter = 0; foreach (var item in korpaVm.ListSalate) { counter++; string bodySastojciSporedni = ""; foreach (var sastojak in item.ListSastojciSporedni) { bodySastojciSporedni += sastojak.Naziv + ", "; } bodyDetail += "<hr/>" + counter + ".)" + " Glavni sastojak: " + item.GlavniSastojak.Naziv + "<br/>Sporedni: " + bodySastojciSporedni + "<br/>Dressing: " + item.DresingSastojak.Naziv + "<br/>Količina: " + item.Kolicina + " komada<br/>Cijena salate: " + item.UkupnaCijena + " KM"; } body += "<br/>================Detalji narudžbe===============<br/>" + bodyDetail; // Salje se racun u obliku emaila, korisniku koji je narucio AccountHelper.Sendemail(new EmailVm { To = korpaVm.Korisnik.Email, Body = body, Subject = "Express Salad Bar racun" }); #endregion // Oznacavanje korpe finiliziranom, sada korisnik moze komentarisati svoju narudzbu korpa.Finilizirana = true; korpa.Zavrsena = true; // Snimanje promijena ctx.SaveChanges(); return(HttpStatusCode.OK); } return(HttpStatusCode.NotFound); }
public IHttpActionResult DownloadPdf(int id) { using (MemoryStream ms = new MemoryStream()) { KorpaVm korpaVm = KorpaHelper.GetAllAboutKorpa(id, false, true); Document doc = new Document(PageSize.A4, 88f, 88f, 10f, 10f); Font NormalFont = FontFactory.GetFont("Arial", 12, BaseColor.BLUE); PdfWriter writer = PdfWriter.GetInstance(doc, ms); doc.Open(); Paragraph header1 = new Paragraph("Express Salad Bar"); header1.Alignment = Element.ALIGN_CENTER; doc.Add(header1); Paragraph header2 = new Paragraph("Racun za " + korpaVm.Korisnik.Ime + " " + korpaVm.Korisnik.Prezime); header2.Alignment = Element.ALIGN_CENTER; doc.Add(header2); doc.Add(new Paragraph("Vase narudzbe: ")); PdfPTable table = new PdfPTable(5); table.TotalWidth = 400f; //fix the absolute width of the table table.LockedWidth = true; //relative col widths in proportions - 1/3 and 2/3 float[] widths = new float[] { 5f, 5f, 5f, 5f, 5f }; table.SetWidths(widths); table.HorizontalAlignment = 0; //leave a gap before and after the table table.SpacingBefore = 20f; table.SpacingAfter = 30f; Font bold = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD); Phrase headerGlavni = new Phrase("Glavni sastojak", bold); Phrase headerSporedni = new Phrase("Sporedni sastojci", bold); Phrase headerDresing = new Phrase("Dresing", bold); Phrase headerKolicina = new Phrase("Kolicina", bold); Phrase headerCijena = new Phrase("Cijena salate", bold); PdfPCell cell1 = new PdfPCell(headerGlavni); PdfPCell cell2 = new PdfPCell(headerSporedni); PdfPCell cell3 = new PdfPCell(headerDresing); PdfPCell cell4 = new PdfPCell(headerKolicina); PdfPCell cell5 = new PdfPCell(headerCijena); table.AddCell(cell1); table.AddCell(cell2); table.AddCell(cell3); table.AddCell(cell4); table.AddCell(cell5); foreach (KorpaIndexRow item in korpaVm.ListSalate) { table.AddCell(item.GlavniSastojak.Naziv + " (" + item.GlavniSastojak.Cijena + " KM)"); string sporedni = ""; float sporedniCijena = 0; foreach (SastojciRow element in item.ListSastojciSporedni) { sporedni += element.Naziv + ","; sporedniCijena += element.Cijena; } table.AddCell(sporedni + " (" + sporedniCijena + " KM)"); table.AddCell(item.DresingSastojak.Naziv + " (" + item.DresingSastojak.Cijena + " KM)"); table.AddCell(item.Kolicina.ToString()); table.AddCell(item.CijenaSalate.ToString(CultureInfo.InvariantCulture)); } doc.Add(table); Paragraph header4 = new Paragraph("Potpis konobara: "); header4.Alignment = Element.ALIGN_RIGHT; doc.Add(header4); Paragraph header5 = new Paragraph("_______________________"); header5.Alignment = Element.ALIGN_RIGHT; doc.Add(header5); Paragraph header3 = new Paragraph("Hvala Vam najljepsa, dodjite nam!"); header3.Alignment = Element.ALIGN_RIGHT; doc.Add(header3); doc.Close(); byte[] bytes = ms.ToArray(); ms.Close(); // return File(bytes, "application/pdf", DateTime.Now.Second + ".pdf"); var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(bytes) }; result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = DateTime.Now.Second + ".pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); var response = ResponseMessage(result); return(response); } }
public static KorpaVm GetAllAboutKorpa(int korpaId, bool aktivna, bool zavrsena) { MContext ctx = new MContext(); Expression <Func <KorpaStavke, bool> > whereClause; Korpa isExistsKorpa = null; if (korpaId == 0) { // Ukoliko smo proslijedili specificnu korpu, onda je potrebno napraviti i query za to whereClause = a => a.Korpa.Aktivna == !zavrsena && a.Korpa.Zavrsena == zavrsena; } else { isExistsKorpa = ctx.Korpa.FirstOrDefault(x => x.Id == korpaId); if (isExistsKorpa == null) { return(null); } whereClause = x => x.Korpa.Id == korpaId && x.Korpa.Aktivna == aktivna && x.Korpa.Zavrsena == zavrsena; } KorpaVm korpaModel = new KorpaVm(); korpaModel.ListSalate = ctx.KorpaStavke.Where(whereClause) .Select(x => new KorpaIndexRow { KorpaId = x.KorpaId, SalataId = x.SalataId, Kolicina = x.Kolicina, Napomena = x.Salata.Napomena, DatumKreiranja = x.Salata.DatumKreiranja, Komentar = x.Salata.OcjeneKomentari == null ? "" : x.Salata.OcjeneKomentari.Komentar, Ocjena = x.Salata.OcjeneKomentari == null ? 0 : x.Salata.OcjeneKomentari.Ocjena, GlavniSastojak = ctx.SalataStavke.Where( y => y.SalataId == x.SalataId && y.Sastojak.VrstaSastojka.Naziv == Constants.SastojakGlavni) .Select(y => new SastojciRow { SalataId = y.SalataId, SastojakId = y.SastojakId, Naziv = y.Sastojak.Naziv, Vrsta = y.Sastojak.VrstaSastojka.Naziv, Cijena = y.Sastojak.Cijena, Gramaza = y.Sastojak.Gramaza, BrojKalorija = y.Sastojak.BrojKalorija }).FirstOrDefault(), DresingSastojak = ctx.SalataStavke.Where( y => y.SalataId == x.SalataId && y.Sastojak.VrstaSastojka.Naziv == Constants.SastojakDresing) .Select(y => new SastojciRow { SalataId = y.SalataId, SastojakId = y.SastojakId, Naziv = y.Sastojak.Naziv, Vrsta = y.Sastojak.VrstaSastojka.Naziv, Cijena = y.Sastojak.Cijena, Gramaza = y.Sastojak.Gramaza, BrojKalorija = y.Sastojak.BrojKalorija }).FirstOrDefault(), ListSastojciSporedni = ctx.SalataStavke.Where( y => y.SalataId == x.SalataId && y.Sastojak.VrstaSastojka.Naziv == Constants.SastojakSporedni) .Select(y => new SastojciRow { SalataId = y.SalataId, SastojakId = y.SastojakId, Naziv = y.Sastojak.Naziv, Vrsta = y.Sastojak.VrstaSastojka.Naziv, Cijena = y.Sastojak.Cijena, Gramaza = y.Sastojak.Gramaza, BrojKalorija = y.Sastojak.BrojKalorija }).ToList(), CijenaSalate = ctx.SalataStavke.Where(y => y.SalataId == x.SalataId) .Select(y => y.Sastojak.Cijena) .ToList() .Sum(), UkupnaCijena = ctx.SalataStavke.Where(y => y.SalataId == x.SalataId).Select(y => y.Sastojak.Cijena).Sum() * x.Kolicina }).ToList(); korpaModel.Korisnik = isExistsKorpa.Korisnik; // Racunanje broja salata, njihove cijene kao i broja stavki salate korpaModel.UkupnoSalata = 0; korpaModel.UkupnaCijena = 0.0; korpaModel.KorpaStavke = korpaModel.ListSalate?.Count() ?? 0; if (korpaModel.ListSalate != null) { foreach (KorpaIndexRow item in korpaModel.ListSalate) { korpaModel.UkupnoSalata += item.Kolicina; korpaModel.UkupnaCijena += item.UkupnaCijena; } } // Ukoliko je korpa prazna, oznaciti je kao takvu if (korpaModel.UkupnoSalata == 0) { korpaModel.EmptyBasket = true; } return(korpaModel); }