/// <summary>
        /// Generates a list of entries that will be used to populate the new sheet in the spreadsheet
        /// </summary>
        /// <param name="timeSheetEntries">the entries retrieved from the time sheet database</param>
        /// <param name="spreadSheetUtil">utility to manage reads and writes to spreadsheet</param>
        /// <param name="sourceSheet">sheet name that contains the company and cost centre info</param>
        /// <returns></returns>
        private List<SpreadSheetEntry> GenerateBreakDownDataForProjectParticipants(List<TimeSheetEntry> timeSheetEntries, SpreadSheetUtil spreadSheetUtil)
        {
            List<SpreadSheetEntry> spreadSheetEntries = new List<SpreadSheetEntry>();

            foreach (TimeSheetEntry timeSheetEntry in timeSheetEntries)
            {
                SpreadSheetEntry spreadSheetEntry = new SpreadSheetEntry();

                CostCentreInfo centreValues = spreadSheetUtil.GetCostCentreDetailsFromSheet(timeSheetEntry);

                spreadSheetEntry.Date = timeSheetEntry.Date;
                spreadSheetEntry.Name = timeSheetEntry.Name;
                spreadSheetEntry.Description = timeSheetEntry.Task;
                spreadSheetEntry.Quantity = timeSheetEntry.Hours;
                spreadSheetEntry.UnitAmount = timeSheetEntry.Rate;
                spreadSheetEntry.CostType = timeSheetEntry.Task.Equals("Developmnet", StringComparison.CurrentCultureIgnoreCase) ||
                    timeSheetEntry.Task.Equals("Analysis", StringComparison.CurrentCultureIgnoreCase) ?
                    "APP_DEVELOPMENT(PROJECTS)" : "PROJECT MANAGEMENT";
                spreadSheetEntry.CostCentre = centreValues.CostCentre;
                spreadSheetEntry.Company = centreValues.Company;
                spreadSheetEntry.Entity = centreValues.Entity;

                spreadSheetEntries.Add(spreadSheetEntry);
            }

            return spreadSheetEntries;
        }
        public void GenerateInvoiceSheet(DateTime from, DateTime to, string fileName, string targetSheetName)
        {
            // this util will be used to retrieve the company and cost centre and to create and populate the new sheet in the provideed spreadsheet
            SpreadSheetUtil spreadSheetUtil = new SpreadSheetUtil(fileName, targetSheetName);

            // reads daily time sheet data from time sheet database
            List<TimeSheetEntry> timeSheetEntries = databaseUtil.RetrieveDailyDataForUsers(from, to, projectNames);

            // prepares break down data by linking time sheet data with spread sheet data
            List<SpreadSheetEntry> spreadSheetEntries = GenerateBreakDownDataForProjectParticipants(timeSheetEntries, spreadSheetUtil);

            // populates and saves new sheet
            spreadSheetUtil.AddSheet(spreadSheetEntries);
        }