/// <summary>
        /// Lấy báng giá tàu Hải Phong tại thời điểm
        /// </summary>
        /// <param name="date"></param>
        /// <param name="cruise"></param>
        protected CruiseExpenseTable GetCurrentCruiseTable(DateTime date, Cruise cruise)
        {
            #region -- cruise table --

            bool isNeedNewTable = false;
            if (_cruiseTable != null)
            {
                if (_cruiseTable.ValidFrom > date || _cruiseTable.ValidTo < date || _cruiseTable.Cruise != cruise)
                {
                    isNeedNewTable = true;
                }
            }
            else
            {
                isNeedNewTable = true;
            }

            if (isNeedNewTable)
            {
                _cruiseTable = Module.CruiseTableGetValid(date, cruise);
            }

            #endregion

            return(_cruiseTable);
        }
        protected void rptCruiseTables_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.DataItem is CruiseExpenseTable)
            {
                CruiseExpenseTable table         = (CruiseExpenseTable)e.Item.DataItem;
                HyperLink          hyperLinkEdit = e.Item.FindControl("hyperLinkEdit") as HyperLink;
                if (hyperLinkEdit != null)
                {
                    hyperLinkEdit.NavigateUrl = string.Format("CruiseConfig.aspx?NodeId={0}&SectionId={1}&TableId={2}",
                                                              Node.Id, Section.Id, table.Id);
                }

                Literal litValidFrom = e.Item.FindControl("litValidFrom") as Literal;
                if (litValidFrom != null)
                {
                    litValidFrom.Text = table.ValidFrom.ToString("dd/MM/yyyy");
                }

                Literal litValidTo = e.Item.FindControl("litValidTo") as Literal;
                if (litValidTo != null)
                {
                    litValidTo.Text = table.ValidTo.Value.ToString("dd/MM/yyyy");
                }

                Literal litCruise = e.Item.FindControl("litCruise") as Literal;
                if (litCruise != null)
                {
                    if (table.Cruise != null)
                    {
                        litCruise.Text = table.Cruise.Name;
                    }
                }
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            IList list = ValidateData();

            if (list != null)
            {
                if (ActiveTable == null)
                {
                    _table = new CruiseExpenseTable();
                }

                _table.ValidFrom = DateTime.ParseExact(txtValidFrom.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                _table.ValidTo   = DateTime.ParseExact(txtValidTo.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                if (ddlCruises.SelectedIndex >= 0)
                {
                    _table.Cruise = Module.CruiseGetById(Convert.ToInt32(ddlCruises.SelectedValue));
                }

                Module.SaveOrUpdate(_table);

                foreach (CruiseExpense expense in list)
                {
                    expense.Table = _table;
                    Module.SaveOrUpdate(expense);
                }
            }
        }
        protected void rptCruiseTables_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            CruiseExpenseTable table = Module.CruiseTableGetById(Convert.ToInt32(e.CommandArgument));

            switch (e.CommandName.ToLower())
            {
            case "delete":
                Module.Delete(table);
                break;
            }
        }