public FileStreamResult CreateRechnung(RechnungViewModel model)
        {
            RechnungData data = Mapper.Map <RechnungData>(model);

            if (model.BestehenderKunde != null)
            {
                SetKundenInfo(data, model.BestehenderKunde);
            }

            SetPrices(data);
            SetRechnungsNr(data);
            data = CalculateService.CalulateRechnungTotals(data);

            DocX doc = RechnungService.Create(data);

            MemoryStream ms = new MemoryStream();

            doc.SaveAs(ms);
            ms.Position = 0;

            string FILENAME = $"Rechnung_{data.RechnungsNummer}.docx";

            var file = new FileStreamResult(ms, CONTENTTYPEWORD)
            {
                FileDownloadName = string.Format(FILENAME)
            };

            return(file);
        }
        public void TestCreate_One_Product_Pizza()
        {
            // Arrange
            IRechnungService rechnung = new RechnungService();
            RechnungData     data     = new RechnungData
            {
                Kunde            = "Metzgerei Siegfried",
                AdressZeile1     = "Bottigenstrasse 22",
                AdressZeile2     = "3018 Bern",
                RechnungsDatum   = DateTime.Today,
                LieferDatum      = DateTime.Today,
                RechnungsNummer  = "0079",
                EinzelpreisPizza = 10.00m,
                TotalPizza       = 20.00m,
                MengePizza       = 2,
                SubTotal         = 20.00m,
                Total            = 20.00m
            };

            // Act
            DocX document = rechnung.Create(data);

            document.SaveAs(FILE_NAME);

            // Assert
            Assert.IsNotNull(document);
            Assert.IsTrue(File.Exists(FILE_NAME));
            Assert.IsFalse(document.Tables.Any(x => x.Rows.Any(y => y.Cells.Any(p => p.Paragraphs.Any(t => t.Text.Contains(Bearfoods.BBQ))))));
            Assert.IsFalse(document.Tables.Any(x => x.Rows.Any(y => y.Cells.Any(p => p.Paragraphs.Any(t => t.Text.Contains(Bearfoods.Jus))))));
            Assert.IsTrue(document.Tables.Any(x => x.Rows.Any(y => y.Cells.Any(p => p.Paragraphs.Any(t => t.Text.Contains(Bearfoods.Pizza))))));
        }
        private static DocX PopulateVorlageWithRechnungData(RechnungData data)
        {
            Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Bearfoods.RechnungPath);

            DocX document = DocX.Load(stream).Copy();

            document.ReplaceText(nameof(data.Kunde), data.Kunde ?? string.Empty);
            document.ReplaceText(nameof(data.AdressZeile1), data.AdressZeile1 ?? string.Empty);
            document.ReplaceText(nameof(data.AdressZeile2), data.AdressZeile2 ?? string.Empty);
            document.ReplaceText(nameof(data.Jahr), data.Jahr ?? string.Empty);
            document.ReplaceText(nameof(data.RechnungsNummer), data.RechnungsNummer ?? string.Empty);
            document.ReplaceText(nameof(data.RechnungsDatum), data.RechnungsDatum.ToShortDateString());
            document.ReplaceText(nameof(data.LieferDatum), data.LieferDatum.ToShortDateString());
            document.ReplaceText(nameof(data.MengeBBQSmall), data.MengeBBQSmall == 0 ? string.Empty : data.MengeBBQSmall.ToString());
            document.ReplaceText(nameof(data.MengeBBQ), data.MengeBBQ == 0 ? string.Empty : data.MengeBBQ.ToString());
            document.ReplaceText(nameof(data.MengePizza), data.MengePizza == 0 ? string.Empty : data.MengePizza.ToString());
            document.ReplaceText(nameof(data.MengeJusSmall), data.MengeJusSmall == 0 ? string.Empty : data.MengeJusSmall.ToString());
            document.ReplaceText(nameof(data.MengeJus), data.MengeJus == 0 ? string.Empty : data.MengeJus.ToString());
            document.ReplaceText(nameof(data.EinzelpreisBBQSmall), data.EinzelpreisBBQSmall == 0 ? string.Empty : data.EinzelpreisBBQSmall.ToString());
            document.ReplaceText(nameof(data.EinzelpreisBBQ), data.EinzelpreisBBQ == 0 ? string.Empty : data.EinzelpreisBBQ.ToString());
            document.ReplaceText(nameof(data.EinzelpreisPizza), data.EinzelpreisPizza == 0 ? string.Empty : data.EinzelpreisPizza.ToString());
            document.ReplaceText(nameof(data.EinzelpreisJusSmall), data.EinzelpreisJusSmall == 0 ? string.Empty : data.EinzelpreisJusSmall.ToString());
            document.ReplaceText(nameof(data.EinzelpreisJus), data.EinzelpreisJus == 0 ? string.Empty : data.EinzelpreisJus.ToString());
            document.ReplaceText(nameof(data.TotalBBQSmall), data.TotalBBQSmall == 0 ? string.Empty : data.TotalBBQSmall.ToString());
            document.ReplaceText(nameof(data.TotalBBQ), data.TotalBBQ == 0 ? string.Empty : data.TotalBBQ.ToString());
            document.ReplaceText(nameof(data.TotalPizza), data.TotalPizza == 0 ? string.Empty : data.TotalPizza.ToString());
            document.ReplaceText(nameof(data.TotalJusSmall), data.TotalJusSmall == 0 ? string.Empty : data.TotalJusSmall.ToString());
            document.ReplaceText(nameof(data.TotalJus), data.TotalJus == 0 ? string.Empty : data.TotalJus.ToString());
            document.ReplaceText(nameof(data.SubTotal), data.SubTotal == 0 ? string.Empty : data.SubTotal.ToString());
            document.ReplaceText(nameof(data.Total), data.Total == 0 ? string.Empty : data.Total.ToString());

            return(document);
        }
 private void SetPrices(RechnungData data)
 {
     data.EinzelpreisBBQ      = pricesConfig.Value.BBQPrice;
     data.EinzelpreisBBQSmall = pricesConfig.Value.BBQPriceSmall;
     data.EinzelpreisPizza    = pricesConfig.Value.PizzaPrice;
     data.EinzelpreisJus      = pricesConfig.Value.JusPrice;
     data.EinzelpreisJusSmall = pricesConfig.Value.JusPriceSmall;
 }
        private void SetKundenInfo(RechnungData data, string bestehenderKunde)
        {
            Kunde kunde = kundenConfig.Value.Kunden.Find(x => x.Name == bestehenderKunde);

            data.Kunde        = kunde.Name;
            data.AdressZeile1 = kunde.Adresse1;
            data.AdressZeile2 = kunde.Adresse2;
        }
Example #6
0
        public void TestCalculatePrices_Rechnung()
        {
            // Arrange
            RechnungData data = CreateRechnungData();

            // Act
            data = CalculateService.CalulateRechnungTotals(data);

            // Assert
            Assert.AreEqual(76m, data.Total);
            Assert.AreEqual(76m, data.SubTotal);
            Assert.AreEqual(16m, data.TotalBBQ);
            Assert.AreEqual(24m, data.TotalPizza);
            Assert.AreEqual(36m, data.TotalJus);
        }
        public void TestCreate_Full()
        {
            // Arrange
            IRechnungService rechnung = new RechnungService();
            RechnungData     data     = CreateRechnungData();

            // Act
            DocX document = rechnung.Create(data);

            document.SaveAs(FILE_NAME);

            // Assert
            Assert.IsNotNull(document);
            Assert.IsTrue(File.Exists(FILE_NAME));
        }
        private void SetRechnungsNr(RechnungData data)
        {
            if (System.IO.File.Exists("counters.json"))
            {
                Counters counters;
                using (StreamReader reader = new StreamReader("counters.json"))
                {
                    string jsonCounters = reader.ReadToEnd();
                    counters = JsonConvert.DeserializeObject <Counters>(jsonCounters);
                }

                data.RechnungsNummer = counters.RechnungsNr.ToString();

                counters.RechnungsNr += 1;

                string jsonToBeWritten = JsonConvert.SerializeObject(counters);
                System.IO.File.WriteAllText("counters.json", jsonToBeWritten);
            }
        }
        public RechnungData CalulateRechnungTotals(RechnungData data)
        {
            const int DELIVERY_COST = 4;

            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            data.TotalBBQ      = data.EinzelpreisBBQ * data.MengeBBQ;
            data.TotalBBQSmall = data.EinzelpreisBBQSmall * data.MengeBBQSmall;
            data.TotalPizza    = data.EinzelpreisPizza * data.MengePizza;
            data.TotalJus      = data.EinzelpreisJus * data.MengeJus;
            data.TotalJusSmall = data.EinzelpreisJusSmall * data.MengeJusSmall;

            data.Total    = data.TotalBBQ + data.TotalPizza + data.TotalJus + data.TotalBBQSmall + data.TotalJusSmall + DELIVERY_COST;
            data.SubTotal = data.Total - DELIVERY_COST;

            return(data);
        }
        public DocX Create(RechnungData data)
        {
            DocX document = PopulateVorlageWithRechnungData(data);

            bool hasBBQ      = data.MengeBBQ > 0;
            bool hasPizza    = data.MengePizza > 0;
            bool hasJus      = data.MengeJus > 0;
            bool hasJusSmall = data.MengeJusSmall > 0;
            bool hasBBQSmall = data.MengeBBQSmall > 0;

            if (!hasBBQ)
            {
                RemoveProductRow(document, Bearfoods.BBQ);
            }

            if (!hasPizza)
            {
                RemoveProductRow(document, Bearfoods.Pizza);
            }

            if (!hasJus)
            {
                RemoveProductRow(document, Bearfoods.Jus);
            }

            if (!hasJusSmall)
            {
                RemoveProductRow(document, Bearfoods.JusSmall);
            }

            if (!hasBBQSmall)
            {
                RemoveProductRow(document, Bearfoods.BBQSmall);
            }

            return(document);
        }