private void btnLocalConfirm_Click(object sender, EventArgs e)
        {
            try
            {
                if (grdVehicle.SelectedRows.Count < 1)
                {
                    MessageBox.Show("Bạn cần chọn 1 phương tiện.");
                    return;
                }
                var vehicleID = long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString());
                
                //check work-flow
                tblVehicle vehicle = VehicleFactory.GetByID(vehicleID);
                //VehicleChangeStatus get this field
                //if (vehicle != null && vehicle.Parking == null)
                //{
                //  MessageBox.Show("Xe này chưa chưa vào bãi, nên không thể vào nội địa", "Lỗi trình tự");
                //  return;
                //}

                //check work-flow
                //TODO: Tạm thời bỏ điểu kiên ko cần xe nhập cảnh có hàng OLD:vehicle != null && vehicle.HasGoodsImported != true PHục vụ Hữu nghị
                //if (vehicle != null && vehicle.HasGoodsImported != true)
                //{
                //    MessageBox.Show("Xe này chưa nhập cảnh có hàng, nên không thể vào nội địa", "Lỗi trình tự");
                //    return;
                //}

                var message = new StringBuilder();

                message.AppendLine("Thời gian vào nội địa: " + CommonFactory.GetCurrentDate().ToString("dd/MM/yyyy HH:mm"));

                GetInfoVehicleDialog(message, vehicle, 1);

                //if (MessageBox.Show(message.ToString(), "Xác nhận", MessageBoxButtons.YesNo) == DialogResult.Yes)
                var msgBox = new frmMessageBox(message.ToString());
                if (msgBox.ShowDialog() == DialogResult.Yes)
                {
                    // Neu thoa man dieu kien canh bao, hoac la xe nay khong co to khai nhap, thi cung hien len canh bao
                    //neu da canh bao roi thi thoi khong canh bao nua
                    var vehicleCheck = VehicleCheckFactory.GetExistingVehicleHasChecked(vehicleID).FirstOrDefault();
                    if (IsCheck(vehicleID, VehicleCheckFactory.CHECK_TYPE_IMPORT_LOCAL) || (IsNotHasDeclerationImport(vehicleID) && vehicleCheck == null))
                    {
                        // Show alert form
                        var frmAlert = new FrmAlert(_userInfo, vehicleID, _checkID, VehicleCheckFactory.CHECK_TYPE_IMPORT_LOCAL);
                        frmAlert.Show(this);
                        return;
                    }

                    var vehicleInfo = VehicleFactory.GetByID(long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));
                    vehicleInfo.IsGoodsImported = true;
                    vehicleInfo.ImportedLocalTime = CommonFactory.GetCurrentDate();
                    // is completed when user is confirm is local 
                    vehicleInfo.IsCompleted = true;

                    if (vehicleInfo.ConfirmLocalImportBy != null && vehicleInfo.ConfirmLocalImportBy != 0 && vehicleInfo.ConfirmLocalImportBy != _userInfo.UserID)
                        throw new Exception("Phương tiện đã được xác nhận bởi một người dùng khác!");

                    if (DeclarationVehicleFactory.IsExisting(vehicleInfo.VehicleID, 1)) // Neu ton tai thi xoa trong to khai 1
                    {
                        DeclarationVehicleFactory.DeleteByVehicleDeclarationID(vehicleInfo.VehicleID, 1);
                    }

                    vehicleInfo.ConfirmLocalImportBy = _userInfo.UserID;
                    vehicleInfo.ModifiedById = _userInfo.UserID;
                    VehicleFactory.UpdateVehicle(vehicleInfo);
                    // Bind data to gridview
                    BindData();
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void btnXacNhanXuatCanhKhongCoHang_Click(object sender, EventArgs e)
        {
            try
            {
                if (grdVehicle.SelectedRows.Count < 1)
                {
                    MessageBox.Show("Bạn cần chọn 1 phương tiện.");
                    return;
                }

                var vehicleID = long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString());
                //check work-flow
                tblVehicle vehicle = VehicleFactory.GetByID(vehicleID);
                if (vehicle != null && vehicle.IsExport != true)
                {
                    MessageBox.Show("Xe này chưa được xuất cảnh, nên không thể nhập cảnh không hàng", "Lỗi trình tự");
                    return;
                }

                // Thảo mãn điều kiện kiểm tra hoặc xe xuất cảnh không có hàng, nhập cũng không có hàng
                if (IsCheck(vehicleID, VehicleCheckFactory.CHECK_TYPE_EXPORT) || IsExportNoGoods(vehicleID))
                {
                    // Show alert form
                    var frmAlert = new FrmAlert(_userInfo, vehicleID, _checkID, VehicleCheckFactory.CHECK_TYPE_EXPORT);
                    frmAlert.Show(this);
                    return;
                }

                //Đối với những xe chưa hoàn thành thì hiện cảnh báo.
                //VD: Xe nhập cảnh mà chưa hoàn thành thủ tục mà lại nhập cảnh tiếp --> Cảnh báo
                if (vehicle.IsImport == true && vehicle.IsCompleted == false)
                {
                    var message1 = new StringBuilder();
                    message1.AppendLine("Cảnh báo: Xe" + vehicle.PlateNumber + " nhập cảnh mà chưa hoàn thành thủ tục mà lại nhập cảnh tiếp");
                    message1.AppendLine("Bạn có muốn tiếp tục ?");
                    var msgBox1 = new frmMessageBox(message1.ToString());
                    if (msgBox1.ShowDialog() != DialogResult.Yes)
                    {
                        return;
                    }
                }

                var message = new StringBuilder();
                message.AppendLine("Thời gian nhập cảnh: " + CommonFactory.GetCurrentDate().ToString("dd/MM/yyyy HH:mm"));
                message.AppendLine("Nhập cảnh không có hàng, không thu phí");

                //var vehicle = VehicleFactory.GetByID(long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));

                //if (MessageBox.Show(message.ToString(), "Xác nhận", MessageBoxButtons.YesNo) == DialogResult.Yes)
                var msgBox = new frmMessageBox(message.ToString());
                if (msgBox.ShowDialog() == DialogResult.Yes)
                {
                    vehicle.ImportDate = CommonFactory.GetCurrentDate();
                    vehicle.IsImport = true;
                    vehicle.HasGoodsImported = false;
                    if (vehicle.ConfirmImportBy != null && vehicle.ConfirmImportBy != 0 && vehicle.ConfirmImportBy != _userInfo.UserID)
                        throw new Exception("Phương tiện đã được xác nhận bởi một người dùng khác!");

                    vehicle.ConfirmImportBy = _userInfo.UserID;
                    vehicle.ImportStatus = "Nhập cảnh không có hàng";
                    vehicle.feeImportStatus = (int)FeeStatus.NotNeedPayFee;
                    vehicle.ModifiedById = _userInfo.UserID;
                    VehicleFactory.UpdateVehicle(vehicle);
                }
                // Bind data
                BindData();

                //print ticket
                //printTicket(2, vehicle);
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void btnXacNhanNhapCanhCoHang_Click(object sender, EventArgs e)
        {
            try
            {
                if (grdVehicle.SelectedRows.Count < 1)
                {
                    MessageBox.Show("Bạn cần chọn 1 phương tiện.");
                    return;
                }
                var vehicleID = long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString());

                //check work-flow
                tblVehicle vehicle = VehicleFactory.GetByID(vehicleID);
                if (vehicle != null && vehicle.IsExport != true)
                {
                    MessageBox.Show("Xe này chưa được xuất cảnh, nên không thể nhập cảnh có hàng", "Lỗi trình tự");
                    return;
                }

                if (IsCheck(vehicleID, VehicleCheckFactory.CHECK_TYPE_IMPORT))
                {
                    // Show alert form
                    FrmAlert frmAlert = new FrmAlert(_userInfo, vehicleID, _checkID, VehicleCheckFactory.CHECK_TYPE_IMPORT);
                    frmAlert.Show(this);
                    return;
                }

                //Đối với những xe chưa hoàn thành thì hiện cảnh báo.
                //VD: Xe nhập cảnh mà chưa hoàn thành thủ tục mà lại nhập cảnh tiếp --> Cảnh báo
                if (vehicle.IsImport == true && vehicle.IsCompleted == false)
                {
                    var message1 = new StringBuilder();
                    message1.AppendLine("Cảnh báo: Xe" + vehicle.PlateNumber + " nhập cảnh mà chưa hoàn thành thủ tục mà lại nhập cảnh tiếp");
                    message1.AppendLine("Bạn có muốn tiếp tục ?");
                    var msgBox1 = new frmMessageBox(message1.ToString());
                    if (msgBox1.ShowDialog() != DialogResult.Yes)
                    {
                        return;
                    }
                }


                var message = new StringBuilder();
                message.Append("Thời gian nhập cảnh: " + CommonFactory.GetCurrentDate().ToString("dd/MM/yyyy HH:mm"));

                //var vehicle = VehicleFactory.GetByID(long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));
                //var vehicle = VehicleFactory.GetByID(int.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));

                //if (MessageBox.Show(message.ToString(), "Xác nhận", MessageBoxButtons.YesNo) == DialogResult.Yes)
                var msgBox = new frmMessageBox(message.ToString());
                if (msgBox.ShowDialog() == DialogResult.Yes)
                {
                    vehicle.ImportDate = CommonFactory.GetCurrentDate();
                    //vehicle.ImportHour = CommonFactory.GetCurrentDate().ToString("HH:mm");
                    vehicle.IsImport = true;
                    vehicle.HasGoodsImported = true;
                    vehicle.ImportStatus = "Nhập cảnh có hàng";
                    if (vehicle.ConfirmImportBy != null && vehicle.ConfirmImportBy != 0 && vehicle.ConfirmImportBy != _userInfo.UserID)
                        throw new Exception("Phương tiện đã được xác nhận bởi một người dùng khác!");
                    var declarationImport = DeclarationFactory.GetByVehicleID(vehicle.VehicleID).Where(g => g.DeclarationType == 1).ToList();

                    // Neu phuong tien nay chua co trong to khai nhap, add phuong tien nay vao to khai so 1))
                    if (!DeclarationVehicleFactory.IsExisting(vehicle.VehicleID, 1) && declarationImport.Count == 0)
                    {
                        DeclarationVehicleFactory.Insert(vehicle.VehicleID, 1);
                    }

                    vehicle.ConfirmImportBy = _userInfo.UserID;
                    vehicle.ModifiedById = _userInfo.UserID;
                    VehicleFactory.UpdateVehicle(vehicle);
                    // Bind data to gridview
                    BindData();

                    //print ticket
                    if (_printSetting != null && _printSetting.PrintImportHasGood == true)
                    {
                        if (vehicle.HasGoodsImportedTocalPrint != null)
                        {

                            //var answer = MessageBox.Show("Xe này đã in phiếu rồi. Bạn có muốn in lại", "Cảnh báo", MessageBoxButtons.YesNo);
                            //if (answer == DialogResult.Yes)

                            var msgBox1 = new frmMessageBox("Xe này đã in phiếu rồi. Bạn có muốn in lại");
                            if (msgBox1.ShowDialog() == DialogResult.Yes)
                            {
                                printTicket(2, vehicle);
                            }
                        }
                        else
                        {
                            printTicket(2, vehicle);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void btnXacNhanXuatCanh_Click(object sender, EventArgs e)
        {
            try
            {
                var vehicleID = long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString());
                if (grdVehicle.SelectedRows.Count < 1)
                {
                    MessageBox.Show("Bạn cần chọn 1 phương tiện.");
                    return;
                }

                if (IsCheck(vehicleID, VehicleCheckFactory.CHECK_TYPE_EXPORT))
                {
                    // Show alert form
                    FrmAlert frmAlert = new FrmAlert(_userInfo, vehicleID, _checkID, VehicleCheckFactory.CHECK_TYPE_EXPORT);
                    frmAlert.Show(this);
                    return;
                }


                var vehicleInfo = VehicleFactory.GetByID(long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));

                //Đối với những xe chưa hoàn thành thì hiện cảnh báo.
                //VD: Xe xuất cảnh mà chưa hoàn thành thủ tục mà lại xuất cảnh tiếp --> Cảnh báo
                if (vehicleInfo.IsExport == true && vehicleInfo.IsCompleted == false)
                {
                    var message1 = new StringBuilder();
                    message1.AppendLine("Cảnh báo: Xe" + vehicleInfo.PlateNumber + " xuất cảnh mà chưa hoàn thành thủ tục mà lại xuất cảnh tiếp");
                    message1.AppendLine("Bạn có muốn tiếp tục ?");
                    var msgBox1 = new frmMessageBox(message1.ToString());
                    if (msgBox1.ShowDialog() != DialogResult.Yes)
                    {
                        return;
                    }
                }


                var message = new StringBuilder();
                message.AppendLine("Thời gian xuất cảnh: " + CommonFactory.GetCurrentDate().ToString("dd/MM/yyyy HH:mm"));
                //Kiem tra co phai xe khong cho hang
                var isExportNoGood = VehicleFactory.IsVehicleExportNoGood(vehicleInfo.VehicleID);
                if (isExportNoGood)
                {
                    message.AppendLine("Xe không chở hàng, không thu phí");
                }
                else
                {
                    GetInfoVehicleDialog(message, vehicleInfo, 0);
                }

                //if (MessageBox.Show(message.ToString(), "Xác nhận", MessageBoxButtons.YesNo) == DialogResult.Yes)
                var msgBox = new frmMessageBox(message.ToString());
                if (msgBox.ShowDialog() == DialogResult.Yes)
                {
                    vehicleInfo.ExportDate = CommonFactory.GetCurrentDate();

                    if (vehicleInfo.ConfirmExportBy != null && vehicleInfo.ConfirmExportBy != 0 && vehicleInfo.ConfirmExportBy != _userInfo.UserID)
                        throw new Exception("Phương tiện đã được xác nhận bởi một người dùng khác!");

                    vehicleInfo.ConfirmExportBy = _userInfo.UserID;
                    vehicleInfo.IsExport = true;
                    if (isExportNoGood) vehicleInfo.feeExportStatus = (int)FeeStatus.NotNeedPayFee;
                    vehicleInfo.ModifiedById = _userInfo.UserID;
                    VehicleFactory.UpdateVehicle(vehicleInfo);

                    // Bind to grid
                    BindData();

                    //print ticket
                    //printTicket(1, vehicleInfo);

                    //Ktra có phải xe sang tải, nếu là xe sang tải, ktra xe gốc, 
                    //nếu tất cả hàng hóa đã xuất khẩu thì đánh dấu Hàng hóa của xe gốc đã xuất khẩu hết
                    if (vehicleInfo.StatusChangeGood != null)
                    {
                        VehicleFactory.CheckVehicleChangeGood(vehicleInfo.VehicleID);
                    }

                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void btnParking_Click(object sender, EventArgs e)
        {
            try
            {
                if (grdVehicle.SelectedRows.Count < 1)
                {
                    MessageBox.Show("Bạn cần chọn 1 phương tiện.");
                    return;
                }

                var vehicleInfo = VehicleFactory.GetByID(long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));
                //check work-flow
                if (vehicleInfo != null && vehicleInfo.HasGoodsImported != true)
                {
                    MessageBox.Show("Xe này chưa nhập cảnh có hàng, nên không thể vào bãi", "Lỗi trình tự");
                    return;
                }

                vehicleInfo.Parking = "Hàng đã vào bãi";
                vehicleInfo.ParkingDate = CommonFactory.GetCurrentDate();
                vehicleInfo.ModifiedById = _userInfo.UserID;
                VehicleFactory.UpdateVehicle(vehicleInfo);
                // Bind data to gridview
                BindData();

                //print ticket
                if (_printSetting != null && _printSetting.PrintParking == true)
                {
                    if (vehicleInfo.ParkingTotalPrint != null)
                    {

                        var msgBox1 = new frmMessageBox("Xe này đã in phiếu rồi. Bạn có muốn in lại");
                        if (msgBox1.ShowDialog() == DialogResult.Yes)
                        {
                            printTicket(3, vehicleInfo);
                        }

                        //if (MessageBox.Show("Xe này đã in phiếu rồi. Bạn có muốn in lại", "Cảnh báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        //{
                        //    printTicket(3, vehicleInfo);
                        //}
                    }
                    else
                    {
                        printTicket(3, vehicleInfo);
                    }

                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }
        private void btnUpdateNoidia_Click(object sender, EventArgs e)
        {
            try
            {
                if (grdVehicle.SelectedRows.Count < 1)
                {
                    MessageBox.Show("Bạn cần chọn 1 phương tiện.");
                    return;
                }

                var vehicleID = long.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString());
                if (IsCheck(vehicleID, VehicleCheckFactory.CHECK_TYPE_IMPORT_LOCAL))
                {
                    // Show alert form
                    FrmAlert frmAlert = new FrmAlert(_userInfo, vehicleID, _checkID, VehicleCheckFactory.CHECK_TYPE_IMPORT_LOCAL);
                    frmAlert.Show(this);
                    return;
                }

                var dateNoidia = Utilities.Common.AddHourMinutes(dtpNoidia.Value, hourNoidia.Text);

                var message = new StringBuilder();
                message.Append("Thời gian vào nội địa: " + dateNoidia.ToString("dd/MM/yyyy HH:mm"));

                //if (MessageBox.Show(message.ToString(), "Xác nhận", MessageBoxButtons.YesNo) == DialogResult.Yes)
                var msgBox = new frmMessageBox(message.ToString());
                if (msgBox.ShowDialog() == DialogResult.Yes)
                {
                    var vehicleInfo = VehicleFactory.GetByID(int.Parse(grdVehicle.SelectedRows[0].Cells["VehicleID"].Value.ToString()));

                    vehicleInfo.ImportedLocalTime = dateNoidia;
                    vehicleInfo.ModifiedById = _userInfo.UserID;
                    VehicleFactory.UpdateVehicle(vehicleInfo);
                    BindData();
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsDebug) MessageBox.Show(ex.ToString());
            }
        }