/// <summary>
        /// Save
        /// </summary>
        /// <param name="companyId">companyId</param>
        public void Save(int companyId)
        {
            ActualCostsInformationTDS hotelCostsInformationChanges = (ActualCostsInformationTDS)Data.GetChanges();

            if (hotelCostsInformationChanges.InsuranceCostsBasicInformation.Rows.Count > 0)
            {
                ActualCostsInformationInsuranceCostsBasicInformationGateway actualCostsInformationInsuranceCostsBasicInformationGateway = new ActualCostsInformationInsuranceCostsBasicInformationGateway(hotelCostsInformationChanges);

                // Update employee
                foreach (ActualCostsInformationTDS.InsuranceCostsBasicInformationRow row in (ActualCostsInformationTDS.InsuranceCostsBasicInformationDataTable)hotelCostsInformationChanges.InsuranceCostsBasicInformation)
                {
                    // Insert new hours
                    if ((!row.Deleted) && (!row.InDatabase))
                    {
                        string comment = ""; if (!row.IsCommentNull()) comment = row.Comment;
                        ActualCostsInsuranceCompaniesCosts actualCostsInsuranceCompaniesCosts = new ActualCostsInsuranceCompaniesCosts(null);
                        actualCostsInsuranceCompaniesCosts.InsertDirect(row.ProjectID, row.RefID, row.InsuranceCompanyID, row.Date, row.RateCad, row.RateUsd, comment, row.Deleted, row.COMPANY_ID);
                    }

                    // Update hours
                    if ((!row.Deleted) && (row.InDatabase))
                    {
                        int projectId = row.ProjectID;
                        int refId = row.RefID;
                        bool originalDeleted = false;
                        int originalCompanyId = companyId;

                        // Original values
                        int originalInsuranceId = actualCostsInformationInsuranceCostsBasicInformationGateway.GetInsuranceIDOriginal(projectId, refId);
                        DateTime originalDate = actualCostsInformationInsuranceCostsBasicInformationGateway.GetDateOriginal(projectId, refId);
                        decimal originalRateCad = actualCostsInformationInsuranceCostsBasicInformationGateway.GetRateCadOriginal(projectId, refId);
                        decimal originalRateUsd = actualCostsInformationInsuranceCostsBasicInformationGateway.GetRateUsdOriginal(projectId, refId);
                        string originalComment = actualCostsInformationInsuranceCostsBasicInformationGateway.GetCommentOriginal(projectId, refId);

                        // New values
                        int newInsuranceId = actualCostsInformationInsuranceCostsBasicInformationGateway.GetInsuranceID(projectId, refId);
                        DateTime newDate = actualCostsInformationInsuranceCostsBasicInformationGateway.GetDate(projectId, refId);
                        decimal newRateCad = actualCostsInformationInsuranceCostsBasicInformationGateway.GetRateCad(projectId, refId);
                        decimal newRateUsd = actualCostsInformationInsuranceCostsBasicInformationGateway.GetRateUsd(projectId, refId);
                        string newComment = actualCostsInformationInsuranceCostsBasicInformationGateway.GetComment(projectId, refId);

                        ActualCostsInsuranceCompaniesCosts actualCostsInsuranceCompaniesCosts = new ActualCostsInsuranceCompaniesCosts(null);
                        actualCostsInsuranceCompaniesCosts.UpdateDirect(projectId, refId, originalInsuranceId, originalDate, originalRateCad, originalRateUsd, originalComment, originalDeleted, originalCompanyId, projectId, refId, newInsuranceId, newDate, newRateCad, newRateUsd, newComment, originalDeleted, originalCompanyId);
                    }

                    // Delete hours
                    if ((row.Deleted) && (row.InDatabase))
                    {
                        ActualCostsInsuranceCompaniesCosts actualCostsInsuranceCompaniesCosts = new ActualCostsInsuranceCompaniesCosts(null);
                        actualCostsInsuranceCompaniesCosts.DeleteDirect(row.ProjectID, row.RefID, row.COMPANY_ID);
                    }
                }
            }
        }
        /// <summary>
        /// Save all to database (direct)
        /// </summary>
        /// <param name="companyId">companyId</param>        
        public void Save(int companyId)
        {
            ActualCostsAddTDS insuranceCompaniesChanges = (ActualCostsAddTDS)Data.GetChanges();

            if (insuranceCompaniesChanges != null)
            {
                if (insuranceCompaniesChanges.InsuranceCompaniesCosts.Rows.Count > 0)
                {
                    ActualCostsAddInsuranceCompaniesCostsGateway actualCostsAddInsuranceCompaniesCostsGateway = new ActualCostsAddInsuranceCompaniesCostsGateway(insuranceCompaniesChanges);

                    foreach (ActualCostsAddTDS.InsuranceCompaniesCostsRow row in (ActualCostsAddTDS.InsuranceCompaniesCostsDataTable)insuranceCompaniesChanges.InsuranceCompaniesCosts)
                    {
                        // Insert new insurance cost
                        if ((!row.Deleted) && (!row.InDatabase))
                        {
                            int projectId = row.ProjectID;
                            int refId = row.RefID;
                            int insuranceCompanyId = row.InsuranceCompanyID;

                            decimal rateUsd = 0; if (!row.IsRateUsdNull()) rateUsd = row.RateUsd;
                            string comment = ""; if (!row.IsCommentNull()) comment = row.Comment;

                            ActualCostsInsuranceCompaniesCosts actualCostsInsuranceCompaniesCosts = new ActualCostsInsuranceCompaniesCosts(null);
                            actualCostsInsuranceCompaniesCosts.InsertDirect(projectId, refId, insuranceCompanyId, row.Date, row.RateCad, rateUsd, comment, row.Deleted, row.COMPANY_ID);
                        }
                    }
                }
            }
        }