public string CancelTicket(TTicket tticket, string userId)
        {
            try
            {
                using (TicketReturnFeeConfigurationBusiness _ticketReturnFeeBusiness = new TicketReturnFeeConfigurationBusiness())
                    using (TicketBusiness business = new TicketBusiness())
                    {
                        Ticket cancelTicket = business.Get(tticket.TicketId);

                        if (cancelTicket == null)
                        {
                            return(string.Format("{0} Vé không tồn tại, không thể hủy vé, Mã:{0}", Constants.SERVER_ERROR_CODE_SINGLE_DATA_NOT_SYNC, tticket.TicketId));
                        }

                        string  result    = string.Empty;
                        decimal returnFee = _ticketReturnFeeBusiness.GetReturnFee(cancelTicket, DateTime.Now);
                        if (returnFee > 0)
                        {
                            result = business.Cancel(cancelTicket, returnFee);
                        }
                        else
                        {
                            result = business.Delete(cancelTicket.id);
                        }
                        return(result);
                    }

                //notify to the others client station
                //BroadcastToClient(ClientAction.CancelTicket,tticket);
            }
            catch (Exception exc)
            {
                ServerLogger.logError("[CancelTicket]", exc);
                return(exc.Message);
            }
        }
        public override bool HandleSaveTask()
        {
            bool isSuccess = false;

            try
            {
                string errorMsg = string.Empty;
                errorMsg = ValidateData();
                var confirmView = new TicketPaymentView();
                var tickets     = new List <Ticket>();

                if (string.IsNullOrEmpty(errorMsg))
                {
                    if (_isUpdating == false)
                    {
                        foreach (var seatNo in _selectedSeatNumbers)
                        {
                            tickets.Add(CreateUpdateTicket(seatNo: seatNo));
                        }

                        if (tickets.Count > 1)
                        {
                            int index = 1;
                            tickets.ForEach(x =>
                            {
                                x.id += index.ToString("D2");
                                index++;
                            });
                        }

                        confirmView.ConfirmTickets = tickets;
                        //confirmView.SellTicket = new TicketPaymentView.SellTicketDelegate(SellTicket);
                        confirmView.ShowDialog();
                        if (confirmView.DialogResult == System.Windows.Forms.DialogResult.OK ||
                            confirmView.DialogResult == System.Windows.Forms.DialogResult.Yes)
                        {
                            foreach (var ticket in tickets)
                            {
                                errorMsg = _ticketBusiness.Insert(ticket);
                            }
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        var ticket = CreateUpdateTicket(_ticketBusiness.Get(lblTicketId.Text));
                        errorMsg = _ticketBusiness.Update(ticket);
                    }
                }

                // print receipt
                if (string.IsNullOrEmpty(errorMsg) && confirmView.DialogResult == System.Windows.Forms.DialogResult.Yes)
                {
                    var tour = _tourBusiness.Get(_tourId);
                    var bus  = _busBusiness.Get(_busId);

                    Exporter <EntityObject> exporter = new Exporter <EntityObject>(Constants.PRINT_TICKET_RECIEPT, tickets, new List <EntityObject>()
                    {
                        tour
                    }, new List <EntityObject>()
                    {
                        bus
                    });
                    exporter.Run();
                }

                // output result
                if (string.IsNullOrEmpty(errorMsg))
                {
                    ShowInformationMessage(_isUpdating ? Constants.Messages.MSG_TICKET_UPDATE_TICKET_SUCCESS_MSG : Constants.Messages.MSG_TICKET_INSERT_TICKET_SUCCESS_MSG);
                    isSuccess = true;

                    LoadSeatMapData();
                    ChangeStatusControl(false);
                }
                else
                {
                    ShowErrorMessageBox(errorMsg);
                    isSuccess = false;
                }
            }
            catch (Exception ex)
            {
                AppLogger.logError(this.ToString(), Constants.Messages.MSG_TICKET_UPDATE_TICKET_EXCEPTION_MSG, ex);
                ShowErrorMessageBox(Constants.Messages.MSG_TICKET_UPDATE_TICKET_FAIL_MSG);
            }

            return(isSuccess);
        }