private void txtExportTotalVehicles_Leave(object sender, EventArgs e)
 {
     try
     {
         if (string.IsNullOrEmpty(txtExportTotalVehicles.Text)) return;
         var totalVehicles = Convert.ToInt32(txtExportTotalVehicles.Text);
         ViewAllVehicleHasGood vehicleInfo;
         for (int i = 0; i < totalVehicles - grdVehicle.Rows.Count; i++)
         {
             vehicleInfo = new ViewAllVehicleHasGood();
             // Add to the list object
             _vehicleInfosTemp.Add(vehicleInfo);
         }
         // Bind to datagrid
         BindVehicle(_vehicleInfosTemp);
     }
     catch (Exception ex)
     {
         logger.Error(ex.ToString());
         if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());      
     }
 }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            // add new vehicle
            try
            {
                if (!Validate()) return;

                // Add data to veicleInfo list
                var vehicleInfo = new ViewAllVehicleHasGood();
                vehicleInfo.DriverName = txtDriverName.Text.Trim();
                vehicleInfo.PlateNumber = StringUtil.RemoveAllNonAlphanumericString(txtPlateNumber.Text).ToUpper();
                vehicleInfo.PlateNumberPartner = StringUtil.RemoveAllNonAlphanumericString(txtVehicleChinese.Text).ToUpper();
                if (txtNumberOfContainer.Text != "")
                {
                    vehicleInfo.NumberOfContainer = txtNumberOfContainer.Text.Trim();
                }

                if (_isExport)
                {
                    vehicleInfo.ExportDate = dtpExportDate.Value;                    
                    vehicleInfo.ConfirmExportBy = _userInfo.UserID;
                }

                if (_isImport)
                {
                    vehicleInfo.ImportDate = dtpImportDate.Value;                    
                    vehicleInfo.ConfirmImportBy = _userInfo.UserID;
                }

                vehicleInfo.Status = txtStatus.Text;
                vehicleInfo.Note = txtNote.Text;                
                vehicleInfo.IsExport = _isExport;
                vehicleInfo.IsImport = _isImport;
                vehicleInfo.IsCompleted = _isCompleted;
                vehicleInfo.DeclarationID = _parrentDeclaration.DeclarationID;
                if (vehicleInfo.ExportDate != null && vehicleInfo.ExportDate.Value.Year.Equals(1900))
                {
                    vehicleInfo.ExportDate = null;
                }
                if (vehicleInfo.ImportDate != null && vehicleInfo.ImportDate.Value.Year.Equals(1900))
                {
                    vehicleInfo.ImportDate = null;
                }

                vehicleInfo.vehicleTypeId = Int32.Parse(cbVehicleType.SelectedValue.ToString());
                vehicleInfo.ExportGoodTypeId = Int32.Parse(cbExportGoodType.SelectedValue.ToString());
                vehicleInfo.ImportGoodTypeId = Int32.Parse(cbImportGoodType.SelectedValue.ToString());

                if (rbVehicleChangeVN.Checked || rbVehicleChangeChinese.Checked)
                {
                    vehicleInfo.StatusChangeGood = rbVehicleChangeVN.Checked
                                                       ? (byte) Utilities.Enums.VehicleChangeStatus.SangTaiVN
                                                       : (byte) Utilities.Enums.VehicleChangeStatus.SangTaiTQ;
                    vehicleInfo.ListVehicleChangeGood = txtVehicleChangeGood.SelectedItems.Cast<VehicleNumber>().ToList();
                }
 
                // Add Mode
                if (_mode == 0)
                {
                    // Bind to gridview.
                    _vehicleInfosTemp.Add(vehicleInfo);
                    _newAddingVehicles.Add(vehicleInfo);
                    ((FrmDecleExport)this.Owner).BindVehicle(_vehicleInfosTemp);
                }
                else
                {
                    // Insert into database
                    // _vehicleBOL.Insert(vehicleInfo);
                    _newAddingVehicles.Add(vehicleInfo);
                    // Bind to gridview.
                    // Get Vehicle by DeclarationID
                    var listVehicle = VehicleFactory.GetFromViewByDeclarationID((Convert.ToInt32(vehicleInfo.DeclarationID)));
                    ((FrmDecleExport)this.Owner).BindVehicle(listVehicle);

                }
                grdVehicle.DataSource = null;
                grdVehicle.DataSource = _newAddingVehicles;

                //Set curent cell for poiter to bottom
                this.grdVehicle.CurrentCell = this.grdVehicle[0, this.grdVehicle.Rows.Count - 1];

                // MessageBox.Show(ConstantInfo.MESSAGE_INSERT_SUCESSFULLY);
                ResetForm();
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void txtExportTotalVehicles_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue.Equals(13))// Enter key
            {
                try
                {

                    if (string.IsNullOrEmpty(txtExportTotalVehicles.Text)) return;
                    var totalVehicles = Convert.ToInt32(txtExportTotalVehicles.Text);

                    if (_vehicleInfosTemp.Count > totalVehicles)
                        throw new Exception("Bạn phải nhập số phương tiện lớn hơn số phương tiện hiện tại hoặc bạn phải xóa phương tiện đi");

                    ViewAllVehicleHasGood vehicleInfo;
                    var bias = totalVehicles - _vehicleInfosTemp.Count;
                    for (int i = 0; i < bias; i++)
                    {
                        vehicleInfo = new ViewAllVehicleHasGood();
                        // Add to the list object
                        _vehicleInfosTemp.Add(vehicleInfo);
                    }
                    // Bind to datagrid
                    BindVehicle(_vehicleInfosTemp);
                }
                catch (Exception ex)
                {
                    logger.Error(ex.ToString());
                    if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());      
                }
            }
        }
        private void BindDataToControls(ViewAllVehicleHasGood vehicleInfo)
        {
            try
            {
                txtDriverName.Text = vehicleInfo.DriverName;
                txtPlateNumber.Text = vehicleInfo.PlateNumber;
                //if (vehicleInfo.IsChineseVehicle == null || vehicleInfo.IsChineseVehicle == false)
                //{
                //    lblVehicleChinese.Visible = txtVehicleChinese.Visible = true;
                //    txtVehicleChinese.Text = vehicleInfo.PlateNumberPartner;    
                //}
                //else
                //{
                //    lblVehicleChinese.Visible = txtVehicleChinese.Visible = false;
                //}
                //TODO: CheckBox VehicleChangeGood
                txtVehicleChinese.Text = vehicleInfo.PlateNumberPartner;
                if (vehicleInfo.IsChineseVehicle == true) rbVehicleChangeChinese.Enabled = false;
                switch (vehicleInfo.StatusChangeGood)
                {
                    case (byte) Utilities.Enums.VehicleChangeStatus.SangTaiVN:
                        {
                            //Get from db if mode = 2 or 3
                            List<VehicleNumber> listSelectChange;
                            if (_mode == 2 || _mode == 3)
                            {
                                listSelectChange = VehicleFactory.GetListVehicleChangeById(vehicleInfo.VehicleID);
                                _listVehicleChangeVN.AddRange(listSelectChange);
                                _listVehicleChangeVN = _listVehicleChangeVN.Distinct(new VehicleNumberComparer()).ToList();
                            }
                            else
                            {
                                listSelectChange = vehicleInfo.ListVehicleChangeGood ?? VehicleFactory.GetListVehicleChangeById(vehicleInfo.VehicleID);
                            }
                            rbVehicleChangeVN.Checked = true;
                            txtVehicleChangeGood.SelectedItems = listSelectChange.Cast<object>().ToList();
                            txtVehicleChangeGood.BindData();
                        }
                        break;
                    case (byte)Utilities.Enums.VehicleChangeStatus.SangTaiTQ:
                        {
                            //Get from db if mode = 2 or 3
                            List<VehicleNumber> listSelectChange;
                            if (_mode == 2 || _mode == 3)
                            {
                                listSelectChange = VehicleFactory.GetListVehicleChangeById(vehicleInfo.VehicleID, true);
                                _listVehicleChangeChinese.AddRange(listSelectChange);
                                _listVehicleChangeChinese = _listVehicleChangeChinese.Distinct(new VehicleNumberComparer()).ToList();
                            }
                            else
                            {
                                listSelectChange = vehicleInfo.ListVehicleChangeGood ?? VehicleFactory.GetListVehicleChangeById(vehicleInfo.VehicleID, true);
                            }
                            rbVehicleChangeChinese.Checked = true;
                            txtVehicleChangeGood.SelectedItems = listSelectChange.Cast<object>().ToList();
                            txtVehicleChangeGood.BindData();
                        }
                        break;
                }
                if (vehicleInfo.IsChineseVehicle == true)
                {
                    txtVehicleChinese.AutoCompleteMode = AutoCompleteMode.None;
                }

                txtNumberOfContainer.Text = vehicleInfo.NumberOfContainer;

                if (vehicleInfo.IsImport != null && vehicleInfo.IsImport.Value)
                {
                    dtpImportDate.Value = (DateTime)vehicleInfo.ImportDate;
                    dtpImportDate.Visible = true;
                    mtxtImportHour.Text = vehicleInfo.ImportDate.Value.ToString("HH:mm");
                    mtxtImportHour.Visible = true;
                    lblIsImport.Visible = false;
                }
                else
                {
                    dtpImportDate.Visible = false;
                    mtxtImportHour.Visible = false;
                    lblIsImport.Visible = true;
                }

                if (vehicleInfo.IsExport != null && vehicleInfo.IsExport.Value && vehicleInfo.ExportDate != null)
                {
                    dtpExportDate.Value = (DateTime)vehicleInfo.ExportDate;
                    dtpExportDate.Visible = true;
                    mtxtExportHour.Text = vehicleInfo.ExportDate.Value.ToString("HH:mm");
                    mtxtExportHour.Visible = true;
                    lblIsExport.Visible = false;
                }
                else
                {
                    dtpExportDate.Visible = false;
                    mtxtExportHour.Visible = false;
                    lblIsExport.Visible = true;
                }

                txtStatus.Text = vehicleInfo.Status;
                if (vehicleInfo.Status.Equals("Hàng hóa đã xuất khẩu hết")) txtStatus.Enabled = false;
                txtNote.Text = vehicleInfo.Note;
                if (vehicleInfo.IsCompleted != null)
                {
                    _isCompleted = vehicleInfo.IsCompleted.Value;
                }
                if(vehicleInfo.IsImport != null) {
                    _isImport = vehicleInfo.IsImport.Value;
                }

                if (vehicleInfo.IsExport != null)
                {
                    _isExport = vehicleInfo.IsExport.Value;
                }

                if (vehicleInfo.ConfirmImportBy != null && vehicleInfo.ConfirmImportBy != 0 && vehicleInfo.ConfirmImportBy != _userInfo.UserID)
                    btnConfirmImport.Enabled = false;

                if (vehicleInfo.ConfirmExportBy != null && vehicleInfo.ConfirmExportBy != 0 && vehicleInfo.ConfirmExportBy != _userInfo.UserID)
                {
                  btnConfirmExport.Enabled = false;
                }

                if (vehicleInfo.ExportGoodTypeId != null)
                {
                    cbExportGoodType.SelectedValue = vehicleInfo.ExportGoodTypeId;
                }
                if (vehicleInfo.ImportGoodTypeId != null)
                {
                    cbImportGoodType.SelectedValue = vehicleInfo.ImportGoodTypeId;
                }
                if (vehicleInfo.vehicleTypeId != null)
                {
                    cbVehicleType.SelectedValue = vehicleInfo.vehicleTypeId;
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        /// <summary>
        /// Handles the KeyPress event of the txtPlateNumber control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.Forms.KeyPressEventArgs"/> instance containing the event data.</param>
        private void txtPlateNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((_mode == 0 || _mode == 4) && e.KeyChar == 13)
                {
                    AutoFillVehicleType();
                    if (!Validate()) return;

                    // Add data to veicleInfo list
                    var vehicleInfo = new ViewAllVehicleHasGood();
                    vehicleInfo.DriverName = txtDriverName.Text.Trim();

                    vehicleInfo.vehicleTypeId = Int32.Parse(cbVehicleType.SelectedValue.ToString());
                    vehicleInfo.ExportGoodTypeId = Int32.Parse(cbExportGoodType.SelectedValue.ToString());
                    vehicleInfo.ImportGoodTypeId = Int32.Parse(cbImportGoodType.SelectedValue.ToString());
 
                    vehicleInfo.PlateNumber = StringUtil.RemoveAllNonAlphanumericString(txtPlateNumber.Text).ToUpper();
                    vehicleInfo.PlateNumberPartner = StringUtil.RemoveAllNonAlphanumericString(txtVehicleChinese.Text).ToUpper();
                    if (txtNumberOfContainer.Text != "")
                    {
                        vehicleInfo.NumberOfContainer = txtNumberOfContainer.Text.Trim();
                    }

                    if (_isExport)
                    {
                        vehicleInfo.ExportDate = dtpExportDate.Value;
                        // add Hour minutes
                        vehicleInfo.ExportDate = Common.AddHourMinutes(vehicleInfo.ExportDate.Value, mtxtExportHour.Text);
                    }

                    if (_isImport)
                    {
                        vehicleInfo.ImportDate = dtpImportDate.Value;
                        vehicleInfo.ImportDate = Common.AddHourMinutes(vehicleInfo.ImportDate.Value, mtxtImportHour.Text);
                    }

                    vehicleInfo.Status = txtStatus.Text;
                    vehicleInfo.Note = txtNote.Text;
                    vehicleInfo.VehicleID = _vehicleInfosTemp.Count + 1;
                    vehicleInfo.IsExport = _isExport;
                    vehicleInfo.IsImport = _isImport;
                    vehicleInfo.IsCompleted = _isCompleted;
                    vehicleInfo.DeclarationID = _parrentDeclaration.DeclarationID;
                    if (vehicleInfo.ExportDate != null && vehicleInfo.ExportDate.Value.Year.Equals(1900))
                    {
                        vehicleInfo.ExportDate = null;
                    }
                    if (vehicleInfo.ImportDate != null && vehicleInfo.ImportDate.Value.Year.Equals(1900))
                    {
                        vehicleInfo.ImportDate = null;
                    }
                    
                    if (rbVehicleChangeVN.Checked || rbVehicleChangeChinese.Checked)
                    {
                        vehicleInfo.StatusChangeGood = rbVehicleChangeVN.Checked
                                                           ? (byte)Utilities.Enums.VehicleChangeStatus.SangTaiVN
                                                           : (byte)Utilities.Enums.VehicleChangeStatus.SangTaiTQ;
                        vehicleInfo.ListVehicleChangeGood = txtVehicleChangeGood.SelectedItems.Cast<VehicleNumber>().ToList();
                    }

                    _vehicleInfosTemp.Add(vehicleInfo);
                    _newAddingVehicles.Add(vehicleInfo);
                    ResetForm();
                    grdVehicle.DataSource = null;
                    grdVehicle.DataSource = _newAddingVehicles;
                    grdVehicle.Refresh();
                    //Set curent cell for poiter to bottom
                    this.grdVehicle.CurrentCell = this.grdVehicle[0, this.grdVehicle.Rows.Count - 1];


                    ((FrmDecleExport)this.Owner).BindVehicle(_vehicleInfosTemp);
                    txtPlateNumber.Focus();
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void PrintTicket(ViewAllVehicleHasGood vehicleInfo)
        {
            var vehicleTicket = new ECustoms.VehicleExportParkTicket();
            ((TextObject)vehicleTicket.Section3.ReportObjects["CompanyName"]).Text = GlobalInfo.CompanyName.ToUpper();
            var txtPrintUser = (TextObject)vehicleTicket.Section3.ReportObjects["txtPrintUser"];
            var txtPrintType = (TextObject)vehicleTicket.Section3.ReportObjects["txtPrintType"];

            var txtTotalPrintVehicleTicketOfDay = (TextObject)vehicleTicket.Section3.ReportObjects["txtTotalPrintVehicleTicketOfDay"];
            var txtPrintDate = (TextObject)vehicleTicket.Section3.ReportObjects["txtPrintDate"];
            var txtParkingDate = (TextObject)vehicleTicket.Section3.ReportObjects["txtParkingDate"];
            var txtVehicleNumber = (TextObject)vehicleTicket.Section3.ReportObjects["txtVehicleNumber"];
            var txtBarcode = (TextObject)vehicleTicket.Section3.ReportObjects["txtBarcode"];
            var txtVehicleType = (TextObject)vehicleTicket.Section3.ReportObjects["txtVehicleType"];
            txtVehicleNumber.Text = vehicleInfo.PlateNumber;

            if (String.IsNullOrEmpty(vehicleInfo.Name) ==false)
            {
                txtVehicleType.Text = vehicleInfo.Name;
            }
            else
            {
                txtVehicleType.Text = "Không phân loại";
            }


            if (vehicleInfo.ExportParkingDate != null)
            {
                txtParkingDate.Text = ((DateTime)vehicleInfo.ExportParkingDate).ToString("dd/MM/yyyy HH:mm");
            }

            //txtBarcode.Text = "*" + vehicleInfo.PlateNumber + "*";
            //String PlateNumberKey = Utilities.EnCryptDecrypt.Encrypt(vehicleInfo.PlateNumber, true);
            txtBarcode.Text = "*" + vehicleInfo.PlateNumber + "*";

            txtPrintUser.Text = _userInfo.Name;
            txtPrintType.Text = "Nhập xe vào bãi xuất";
            DateTime currentDate = CommonFactory.GetCurrentDate();
            txtPrintDate.Text = currentDate.ToString("dd/MM/yyyy HH:mm");

            //update tong so lan print ticket trong 1 ngay
            long orderNumber = ApplicationObjectFactory.updateTotalTicketPrint(ApplicationObjectFactory.TOTAL_EXPORT_PARK_TICKET_IN_DATE);

            txtTotalPrintVehicleTicketOfDay.Text = orderNumber.ToString();

            //preview ticket
            //FrmCrystalReport report = new FrmCrystalReport(vehicleTicket, _userInfo);
       
            //report.MaximizeBox = true;
            //report.Show(this);

            //Print ticket directly
            vehicleTicket.ExportToDisk(ExportFormatType.CrystalReport, "VehicleTicket.rpt");

            foreach (String printerName in _printSetting.ListPrinter)
            {
                if (Utilities.PrinterChecking.IsValid(printerName))
                {
                    try
                    {
                        AutoPrintReport(printerName, "VehicleTicket.rpt");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Không kết nối được với máy in: " + printerName);
                    }
                }
                else
                {
                    MessageBox.Show("Không kết nối được với máy in: " + printerName);
                }
            }

        
        }
        private ViewAllVehicleHasGood GetVehicle()
        {
            var vehicleInfo = new ViewAllVehicleHasGood();
            try
            {
                if (!Validate())
                    return null;
                // Add data to veicleInfo list

                vehicleInfo.DriverName = txtDriverName.Text.Trim();
                vehicleInfo.PlateNumber = txtPlateNumber.Text = StringUtil.RemoveAllNonAlphanumericString(txtPlateNumber.Text).ToUpper();

                vehicleInfo.vehicleTypeId = Int32.Parse(cbVehicleType.SelectedValue.ToString());
                vehicleInfo.ExportGoodTypeId = Int32.Parse(cbGoodType.SelectedValue.ToString());
                vehicleInfo.Name = cbVehicleType.Text;

                if (txtNumberOfContainer.Text != "")
                {
                    vehicleInfo.NumberOfContainer = txtNumberOfContainer.Text.Trim();
                }

                vehicleInfo.Status = txtStatus.Text;
                vehicleInfo.Note = txtNote.Text;
                vehicleInfo.VehicleID = _vehicleInfosTemp.Count + 1;
                vehicleInfo.IsExport = false;
                vehicleInfo.IsImport = false;
                vehicleInfo.IsCompleted = false;
                vehicleInfo.IsExportParking = true;
                vehicleInfo.ExportParkingDate = CommonFactory.GetCurrentDate();
                vehicleInfo.ConfirmExportParkingBy = UserInfo.UserID;


            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
            return vehicleInfo;
        }
        private ViewAllVehicleHasGood GetVehicle()
        {
            var vehicleInfo = new ViewAllVehicleHasGood();
            try
            {
                if (!Validate())
                    return null;
                // Add data to veicleInfo list
                
                vehicleInfo.DriverName = txtDriverName.Text.Trim();
                vehicleInfo.PlateNumber = txtPlateNumber.Text = StringUtil.RemoveAllNonAlphanumericString(txtPlateNumber.Text).ToUpper();
                if (txtNumberOfContainer.Text != "")
                {
                    vehicleInfo.NumberOfContainer = txtNumberOfContainer.Text.Trim();
                }

                if (cbConfirmExport.Checked)
                {
                    vehicleInfo.ExportDate = dateTimePickerExport.Value;                    
                    vehicleInfo.ConfirmExportBy = _userInfo.UserID;
                }

                if (cbConfirmImport.Checked)
                {
                    vehicleInfo.ImportDate = dateTimePickerImport.Value;                    
                    vehicleInfo.ConfirmImportBy = _userInfo.UserID;
                }

                vehicleInfo.vehicleTypeId = Int32.Parse(cbVehicleType.SelectedValue.ToString());
                vehicleInfo.ExportGoodTypeId = 0; //khong phan loai
                vehicleInfo.ImportGoodTypeId = 0; //khong phan loai
                vehicleInfo.Status = txtStatus.Text;
                vehicleInfo.Note = txtNote.Text;
                vehicleInfo.VehicleID = _vehicleInfosTemp.Count + 1;
                vehicleInfo.IsExport = cbConfirmExport.Checked;
                vehicleInfo.IsImport = cbConfirmImport.Checked;
                vehicleInfo.IsCompleted = false;
                //vehicleInfo.DeclarationID = _parrentDeclaration.DeclarationID;
                if (vehicleInfo.ExportDate != null && vehicleInfo.ExportDate.Value.Year.Equals(1900))
                {
                    vehicleInfo.ExportDate = null;
                }
                if (vehicleInfo.ImportDate != null && vehicleInfo.ImportDate.Value.Year.Equals(1900))
                {
                    vehicleInfo.ImportDate = null;
                }                
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
            return vehicleInfo;
        }