Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
        }