public void Calculate(long storeid, DateTime aBegin, List<EmployeePlanningWeek> weeks)
        {
            if (weeks != null && weeks.Count > 0)
            {
                // build list of absences
                List<AbsenceTimePlanning> lst_Absences = new List<AbsenceTimePlanning>();
                foreach (EmployeePlanningWeek week in weeks)
                {
                    foreach (EmployeePlanningDay day in week.Days.Values)
                    {
                        if (day.AbsenceTimeList != null && day.AbsenceTimeList.Count > 0)
                        {
                            foreach (AbsenceTimePlanning absence_time in day.AbsenceTimeList)
                            {
                                lst_Absences.Add(absence_time);
                            }
                        }
                    }
                }
                // if exists absence times
                if (lst_Absences.Count > 0)
                {
                    AbsenceManager absencemanager = new AbsenceManager(ServerEnvironment.AbsenceService);
                    int year = DateTimeHelper.GetYearByDate(aBegin);
                    long countryid = ServerEnvironment.StoreService.GetCountryByStoreId(storeid);
                    absencemanager.CountryId = countryid;
                    // fill times by absence entity
                    absencemanager.FillAbsencePlanningTimes(lst_Absences);
                    double avg_day_a_week = ServerEnvironment.AvgWorkingDaysInWeekService.GetAvgWorkingDaysInWeekByStore(storeid, year);

                    long[] ids = new long[weeks.Count];
                    for (int i = 0; i < weeks.Count; i++)
                    {
                        ids[i] = weeks[i].EmployeeId;
                    }
                    List<EmployeeContract> lst =
                        ServerEnvironment.EmployeeContractService.GetEmployeeContracts(ids, aBegin, aBegin.AddDays(7));

                    DictionListEmployeesContract indexer = new DictionListEmployeesContract(lst);

                    Calculate(avg_day_a_week, indexer, lst_Absences);
                }

            }
        }