private void AddToInvoiceFile(bool addDelimiter, InvoiceFileDto fileDto, params string[] rows)
 {
     foreach (var row in rows)
         fileDto.FileRows.Add(row);
     // section delimiter
     if (addDelimiter)
         fileDto.FileRows.Add(string.Empty);
 }
        /// <summary>
        /// This method is not good at all, since it contains hard-coded strings.
        /// If there will be need to localize(translate) the file, this code should be rewritten.
        /// </summary>
        /// <param name="invoice"></param>
        /// <param name="fees"></param>
        /// <returns></returns>
        private InvoiceFileDto PrepareInvoiceFile(Invoice invoice, IDictionary<FeeType, Fee> fees)
        {
            var fileDto = new InvoiceFileDto
            {
                InvoiceNumber = invoice.Number,
                FileRows = new List<string>()
            };

            const string invoiceHeader = "Invoice";
            var number = string.Format("Number,{0}", invoice.Number);
            var date = string.Format("Date,{0}", invoice.Date.ToString("dd.MM.yyyy HH:mm:ss"));
            var customer = string.Format("Customer,{0}", invoice.Customer);
            AddToInvoiceFile(true, fileDto, invoiceHeader, number, date, customer);

            const string rowsHeader = "Rows";
            const string rowsDescription = "Equipments,Days rented,Price";
            AddToInvoiceFile(false, fileDto, rowsHeader, rowsDescription);

            // using invariant culture renders decimals with '.' - useful distinction in .csv files
            var rowStrs = invoice.Rows.Select(row =>
                string.Format("{0},{1},{2}", row.Equipment.Name, row.RentedDays,
                    row.GetRowPrice(fees).ToString(CultureInfo.InvariantCulture))).ToArray();
            AddToInvoiceFile(true, fileDto, rowStrs);

            const string bottomHeader = "Total";
            var totalPrice = string.Format("Price,{0}",
                invoice.GetInvoicePrice().ToString(CultureInfo.InvariantCulture));
            var points = string.Format("Loyalty points,{0}", invoice.GetInvoiceLoyaltyPoints());
            AddToInvoiceFile(false, fileDto, bottomHeader, totalPrice, points);

            return fileDto;
        }