/// <summary>
        /// Save all data to database (direct)
        /// </summary>
        /// <param name="companyId">companyId</param>
        public void Save(int companyId)
        {
            ProjectNavigatorTDS workFunctionChanges = (ProjectNavigatorTDS)Data.GetChanges();

            if (workFunctionChanges != null)
            {
                if (workFunctionChanges.ProjectWorkFunctionBudget.Rows.Count > 0)
                {
                    ProjectNavigatorProjectWorkFunctionBudgetGateway projectNavigatorProjectWorkFunctionBudgetGateway = new ProjectNavigatorProjectWorkFunctionBudgetGateway(workFunctionChanges);

                    foreach (ProjectNavigatorTDS.ProjectWorkFunctionBudgetRow row in (ProjectNavigatorTDS.ProjectWorkFunctionBudgetDataTable)workFunctionChanges.ProjectWorkFunctionBudget)
                    {
                        // Insert new work function budget
                        if ((!row.Deleted) && (!row.InDatabase))
                        {
                            ProjectWorkFunctionBudget projectWorkFunctionBudget = new ProjectWorkFunctionBudget(null);
                            projectWorkFunctionBudget.InsertDirect(row.ProjectID, row.Work_, row.Function_, row.RefID, row.Budget, row.Deleted, row.COMPANY_ID, row.Budget_);
                        }

                        // Update work function budget
                        if ((!row.Deleted) && (row.InDatabase))
                        {
                            int projectId = row.ProjectID;
                            string work_ = row.Work_;
                            string function = row.Function_;
                            int refId = row.RefID;
                            bool originalDeleted = false;
                            int originalCompanyId = companyId;

                            // original values
                            decimal originalBudget = projectNavigatorProjectWorkFunctionBudgetGateway.GetBudgetOriginal(projectId, work_, function, refId);
                            decimal originalBudget_ = projectNavigatorProjectWorkFunctionBudgetGateway.GetBudget_Original(projectId, work_, function, refId);

                            // new values
                            decimal newBudget = projectNavigatorProjectWorkFunctionBudgetGateway.GetBudget(projectId, work_, function, refId);
                            decimal newBudget_ = projectNavigatorProjectWorkFunctionBudgetGateway.GetBudget_(projectId, work_, function, refId);

                            ProjectWorkFunctionBudget projectWorkFunctionBudget = new ProjectWorkFunctionBudget(null);
                            projectWorkFunctionBudget.UpdateDirect(projectId, work_, function, refId, originalBudget, originalDeleted, originalCompanyId, projectId, work_, function, refId, newBudget, originalDeleted, originalCompanyId, originalBudget_, newBudget_);
                        }

                        // Delete work function budget
                        if ((row.Deleted) && (row.InDatabase))
                        {
                            ProjectWorkFunctionBudget projectWorkFunctionBudget = new ProjectWorkFunctionBudget(null);
                            projectWorkFunctionBudget.DeleteDirect(row.ProjectID, row.Work_, row.Function_, row.RefID, row.Budget, row.Deleted, row.COMPANY_ID);
                        }
                    }
                }
            }
        }
 // ////////////////////////////////////////////////////////////////////////
 // PUBLIC METHODS
 //
 /// <summary>
 /// LoadAllByProjectId
 /// </summary>
 /// <param name="projectId">projectId</param>              
 public void LoadAllByProjectId(int projectId)
 {
     ProjectNavigatorProjectWorkFunctionBudgetGateway projectNavigatorProjectWorkFunctionBudgetGateway = new ProjectNavigatorProjectWorkFunctionBudgetGateway(Data);
     projectNavigatorProjectWorkFunctionBudgetGateway.LoadAllByProjectId(projectId);
 }