/// <summary>
        /// Save
        /// </summary>
        /// <returns>employeeId</returns>
        public int Save()
        {
            EmployeesAddTDS employeeAddChanges = (EmployeesAddTDS)Data.GetChanges();
            int employeeId = 0;

            if (employeeAddChanges != null)
            {
                if (employeeAddChanges.EmployeeAdd.Rows.Count > 0)
                {
                    EmployeeAddGateway employeeNavigatorGateway = new EmployeeAddGateway(employeeAddChanges);

                    // Update employees
                    foreach (EmployeesAddTDS.EmployeeAddRow row in (EmployeesAddTDS.EmployeeAddDataTable)employeeAddChanges.EmployeeAdd)
                    {
                        // Insert new employees
                        if ((!row.Deleted) && (!row.InDatabase))
                        {
                            Employee employee = new Employee(null);
                            int? loginId = null; if (!row.IsLoginIDNull()) loginId = row.LoginID;
                            int? contactsId = null; if (!row.IsContactsIDNull()) contactsId = row.ContactsID;
                            string middleInitial = ""; if (!row.IsMiddleInitialNull()) middleInitial = row.MiddleInitial;
                            string email = ""; if (!row.IseMailNull()) email = row.eMail;
                            bool assignableSrs = row.AssignableSRS;
                            string jobClass = ""; if (!row.IsJobClassTypeNull()) jobClass = row.JobClassType;
                            string personalAgencyName = ""; if (!row.IsPersonalAgencyNameNull()) personalAgencyName = row.PersonalAgencyName;
                            bool isVacationsManager = row.IsVacationsManager;
                            bool approveTimesheets = row.ApproveTimesheets;
                            decimal? bourdenFactor = null; if (!row.IsBourdenFactorNull()) bourdenFactor = (decimal)row.BourdenFactor;
                            decimal? usHealthBenefitFactor = null; if (!row.IsUSHealthBenefitFactorNull()) usHealthBenefitFactor = (decimal)row.USHealthBenefitFactor;
                            decimal? benefitFactorCad = null; if (!row.IsBenefitFactorCadNull()) benefitFactorCad = (decimal)row.BenefitFactorCad;
                            decimal? benefitFactorUsd = null; if (!row.IsBenefitFactorUsdNull()) benefitFactorUsd = (decimal)row.BenefitFactorUsd;
                            string crew = ""; //TODO CREW

                            employeeId = employee.InsertDirect(loginId, contactsId, row.FullName, row.FirstName, middleInitial, row.LastName, row.Type, row.State, row.IsSalesman, row.RequestProjectTime, row.Deleted, row.Salaried, email, assignableSrs, jobClass, row.Category, personalAgencyName, isVacationsManager, approveTimesheets, bourdenFactor, usHealthBenefitFactor, benefitFactorCad, benefitFactorUsd, crew);

                            // Employee Categories Approve Timesheets
                            EmployeeCategoryApproveTimesheets employeeCategoryApproveTimesheets = new EmployeeCategoryApproveTimesheets(null);
                            employeeCategoryApproveTimesheets.InsertDirect(employeeId, "Field", false, false);
                            employeeCategoryApproveTimesheets.InsertDirect(employeeId, "Field 44", false, false);
                            employeeCategoryApproveTimesheets.InsertDirect(employeeId, "Mechanic/Manufactoring", false, false);
                            employeeCategoryApproveTimesheets.InsertDirect(employeeId, "Office/Admin", false, false);
                            employeeCategoryApproveTimesheets.InsertDirect(employeeId, "Special Forces", false, false);
                        }
                    }
                }
            }

            return employeeId;
        }
        /// <summary>
        /// Save all categories approve timesheets to database (direct)
        /// </summary>
        public void Save()
        {
            EmployeeInformationTDS categoryApproveTimesheetsInformationChanges = (EmployeeInformationTDS)Data.GetChanges();

            if (categoryApproveTimesheetsInformationChanges.CategoryApproveTimesheetsInformation.Rows.Count > 0)
            {
                EmployeeInformationCategoryApproveTimesheetsInformationGateway employeeInformationCategoryApproveTimesheetsInformationGateway = new EmployeeInformationCategoryApproveTimesheetsInformationGateway(categoryApproveTimesheetsInformationChanges);

                foreach (EmployeeInformationTDS.CategoryApproveTimesheetsInformationRow row in (EmployeeInformationTDS.CategoryApproveTimesheetsInformationDataTable)categoryApproveTimesheetsInformationChanges.CategoryApproveTimesheetsInformation)
                {
                    int employeeId = row.EmployeeID;
                    string category = row.Category;
                    bool deleted = false;

                    // original values
                    bool originalApproveTimesheets = employeeInformationCategoryApproveTimesheetsInformationGateway.GetApproveTimesheetsOriginal(employeeId, category);

                    // new values
                    bool newApproveTimesheets = employeeInformationCategoryApproveTimesheetsInformationGateway.GetApproveTimesheets(employeeId, category);

                    EmployeeCategoryApproveTimesheets employeeCategoryApproveTimesheets = new EmployeeCategoryApproveTimesheets(null);
                    int rowsAffected = employeeCategoryApproveTimesheets.UpdateDirect(employeeId, category, originalApproveTimesheets, deleted, employeeId, category, newApproveTimesheets, deleted);

                    if (rowsAffected == 0)
                    {
                        employeeCategoryApproveTimesheets.InsertDirect(employeeId, category, newApproveTimesheets, deleted);
                    }
                }
            }
        }