Exemplo n.º 1
0
 /// <summary>
 /// Hiển thị trạng thái kết nối điều app
 /// </summary>
 private void CheckConnectServerApp()
 {
     if (G5ServiceSyn.Ping() == Enum_G5_Ping.PingSu)
     {
         btnCheckApp.Caption    = "Điều App OK";
         btnCheckApp.LargeGlyph = Properties.Resources.App_Connect_16x;
     }
     else
     {
         btnCheckApp.Caption    = "Lỗi điều App";
         btnCheckApp.LargeGlyph = Properties.Resources.App_Error_16x;
         LogError.WriteLogErrorForDebug("CheckConnectServerApp: Lỗi điều App");
     }
 }
Exemplo n.º 2
0
        private void grvCanhBaoDieuApp_KeyDown(object sender, KeyEventArgs e)
        {
            #region ===Lệnh===
            CanhBaoDieuApp canhBaoDieuApp  = grvCanhBaoDieuApp.GetFocusedRow() as CanhBaoDieuApp;
            bool           hasThucHienLenh = false; // dung de xac dinh có thay đổi dữ liệu và gọi update
            var            msgDialog       = new Taxi.MessageBox.MessageBoxBA();

            #region ===1. Mời khách===
            if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1)
            {
                //kết thúc trong bảng cảnh báo chuyển sang cất vào bảng cảnh báo điếu app kết thúc
                if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi &&
                    !string.IsNullOrEmpty(_cuocGoi.XeNhan) &&
                    (_cuocGoi.LenhLaiXe.Contains(LENH_MOIKHACH) ||
                     _cuocGoi.LenhLaiXe.Contains(DIEUHANHMOIKHACH) ||
                     _cuocGoi.LenhLaiXe.Contains(KHONGLIENLACDUOC) ||
                     _cuocGoi.LenhLaiXe.Contains(DAGOIKHACHHANG)))
                {
                    _cuocGoi.LenhDienThoai = LENH_DAMOI;
                    if (_cuocGoi.G5_Type == Enum_G5_Type.DieuApp)
                    {
                        if (Config_Common.DienThoai_DieuApp_DaMoiCmdId >= 0)
                        {
                            G5ServiceSyn.SendText(_cuocGoi.XeNhan, _cuocGoi.LenhDienThoai, _cuocGoi.BookId, _cuocGoi.IDCuocGoi, ThongTinDangNhap.USER_ID, _cuocGoi.LoaiCuocKhach == LoaiCuocKhach.ChoKhachHopDong, Config_Common.DienThoai_DieuApp_DaMoiCmdId);
                        }
                        else
                        {
                            G5ServiceSyn.SendACKInvite(_cuocGoi.BookId, _cuocGoi.XeNhan, true, _cuocGoi.LenhDienThoai, _cuocGoi.LoaiCuocKhach == LoaiCuocKhach.ChoKhachHopDong);
                        }
                    }
                    _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
                    hasThucHienLenh        = true;
                }
                else
                {
                    msgDialog.Show(this,
                                   String.Format(
                                       "[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi, điều app và đã có xe nhận.",
                                       LENH_DAMOI),
                                   "Thông báo", Taxi.MessageBox.MessageBoxButtonsBA.OK, Taxi.MessageBox.MessageBoxIconBA.Error);
                }
            }
            #endregion

            #region === Not use ===

            #region ===2. Gặp xe ===
            //else if (e.KeyCode == Keys.D2 || e.KeyCode == Keys.NumPad2)
            //{
            //    // thực hiện khi có xe nhận
            //    if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && !string.IsNullOrEmpty(_cuocGoi.XeNhan) &&
            //        _cuocGoi.G5_Type == Enum_G5_Type.ChuyenSangDam)
            //    {
            //        _cuocGoi.LenhDienThoai = LENH_GAPXE;
            //        _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
            //        hasThucHienLenh = true;
            //        G5ServiceSyn.SendCatchUserSyn(_cuocGoi.BookId);
            //    }
            //    else
            //    {
            //        msgDialog.Show(this,
            //            String.Format(
            //                "[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và cuốc điều đàm. và đã có xe nhận.",
            //                LENH_GAPXE),
            //            "Thông báo", Taxi.MessageBox.MessageBoxButtons.OK, Taxi.MessageBox.MessageBoxIcon.Error);
            //    }
            //}
            #endregion

            #region ===3. Đã xin lỗi ===
            //else if (e.KeyCode == Keys.D3 || e.KeyCode == Keys.NumPad3)
            //{
            //    if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.G5_Type == Enum_G5_Type.ChuyenSangDam &&
            //        (_cuocGoi.TrangThaiCuocGoi == TrangThaiCuocGoiTaxi.CuocGoiKhongXe ||
            //            _cuocGoi.TrangThaiCuocGoi == TrangThaiCuocGoiTaxi.CuocGoiKhongXeLan1) &&
            //        (_cuocGoi.XeNhan == null || _cuocGoi.XeNhan.Length <= 0))
            //    {
            //        _cuocGoi.LenhDienThoai = LENH_DAXINLOI;
            //        _cuocGoi.TrangThaiCuocGoi = TrangThaiCuocGoiTaxi.CuocGoiKhongXe;
            //        _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.KetThuc;
            //        hasThucHienLenh = true;
            //    }
            //    else
            //    {
            //        msgDialog.Show(this,
            //            string.Format(
            //                "[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và cuốc điều đàm. và chưa có xe nhận.",
            //                LENH_DAXINLOI),
            //            "Thông báo",
            //            Taxi.MessageBox.MessageBoxButtons.OK,
            //            Taxi.MessageBox.MessageBoxIcon.Error);
            //    }
            //}
            #endregion

            #region ===4. Máy bận ===
            //else if (e.KeyCode == Keys.D4 || e.KeyCode == Keys.NumPad4)
            //{
            //    if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.LenhLaiXe == LENH_MOIKHACH)
            //    {
            //        _cuocGoi.LenhDienThoai = LENH_MAYBAN;
            //        _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
            //        hasThucHienLenh = true;
            //        G5ServiceSyn.SendText(bienSo, LENH_MAYBAN, _cuocGoi.BookId);
            //    }
            //    else
            //    {
            //        msgDialog.Show(this,
            //            String.Format("[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và lái xe yêu cầu mời khách và đã có xe nhận.", LENH_MAYBAN),
            //            "Thông báo",
            //            Taxi.MessageBox.MessageBoxButtons.OK, Taxi.MessageBox.MessageBoxIcon.Error);
            //    }
            //}
            #endregion

            #region ===5. Không liên lạc được ===
            //else if (e.KeyCode == Keys.D5 || e.KeyCode == Keys.NumPad5)
            //{
            //    if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.LenhLaiXe == LENH_MOIKHACH)
            //    {
            //        _cuocGoi.LenhDienThoai = LENH_KHONGLIENLACDUOC;
            //        _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
            //        hasThucHienLenh = true;
            //        G5ServiceSyn.SendText(bienSo, LENH_KHONGLIENLACDUOC, _cuocGoi.BookId);
            //    }
            //    else
            //    {
            //        msgDialog.Show(this,
            //            String.Format("[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và lái xe yêu cầu mời khách và đã có xe nhận.",
            //                LENH_KHONGLIENLACDUOC),
            //            "Thông báo", Taxi.MessageBox.MessageBoxButtons.OK, Taxi.MessageBox.MessageBoxIcon.Error);
            //    }
            //}
            #endregion

            #region ===6. Không nghe máy ===
            //else if (e.KeyCode == Keys.D6 || e.KeyCode == Keys.NumPad6)
            //{
            //    if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.LenhLaiXe == LENH_MOIKHACH)
            //    {
            //        _cuocGoi.LenhDienThoai = LENH_KHONGNGHEMAY;
            //        _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
            //        hasThucHienLenh = true;
            //        G5ServiceSyn.SendText(bienSo, LENH_KHONGNGHEMAY, _cuocGoi.BookId);
            //    }
            //    else
            //    {
            //        msgDialog.Show(this,
            //            String.Format("[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và lái xe yêu cầu mời khách và đã có xe nhận.",
            //                LENH_KHONGNGHEMAY),
            //            "Thông báo", Taxi.MessageBox.MessageBoxButtons.OK, Taxi.MessageBox.MessageBoxIcon.Error);
            //    }
            //}
            #endregion

            #region ===7. Không nói gì ===
            //else if (e.KeyCode == Keys.D7 || e.KeyCode == Keys.NumPad7)
            //{
            //    if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.LenhLaiXe == LENH_MOIKHACH)
            //    {
            //        if (Config_Common.CauHinhTextLenh7 == 1)
            //        {
            //            _cuocGoi.LenhDienThoai = "Gọi nhiều ko nghe";
            //        }
            //        else
            //        {
            //            _cuocGoi.LenhDienThoai = LENH_KHONGNOIGI;
            //        }

            //        if (Config_Common.CauHinhKetThucCuocLenh7 == 1)//cho phép kết thúc cuốc luôn
            //        {
            //            _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.KetThuc;
            //        }
            //        _cuocGoi.TrangThaiCuocGoi = TrangThaiCuocGoiTaxi.CuocGoiKhongXe;
            //        hasThucHienLenh = true;
            //        G5ServiceSyn.SendText(bienSo, _cuocGoi.LenhDienThoai, _cuocGoi.BookId);
            //    }
            //    else
            //    {
            //        msgDialog.Show(this,
            //            String.Format("[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và lái xe yêu cầu mời khách và đã có xe nhận.",
            //                LENH_KHONGNOIGI),
            //            "Thông báo", Taxi.MessageBox.MessageBoxButtons.OK, Taxi.MessageBox.MessageBoxIcon.Error);
            //    }
            //}
            #endregion

            #region ===8. Hủy xe/Hoãn ===
            //else if (e.KeyCode == Keys.D8 || e.KeyCode == Keys.NumPad8)
            //{
            //    if (_cuocGoi.LenhLaiXe ==LENH_MOIKHACH && _cuocGoi.BookId != Guid.Empty)
            //    {
            //        string dialog = msgDialog.Show(
            //        string.Format("Hủy xe / Hoãn {0}...?", _cuocGoi.DiaChiDonKhach), "Thông báo",
            //        Taxi.MessageBox.MessageBoxButtons.YesNo, Taxi.MessageBox.MessageBoxIcon.Question);
            //        if (dialog == "Yes")
            //        {
            //            _cuocGoi.LenhDienThoai = LENH_HUYXE;
            //            _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.KetThucCuaDienThoai;
            //            hasThucHienLenh = true;

            //            #region Gửi đã Hoãn tới Cho fastTaxi nếu là cuốc của fastTaxi

            //            G5ServiceSyn.SendOperatorCancel(_cuocGoi.BookId);

            //            if (_cuocGoi.FT_IsFT)
            //                ProcessFastTaxi.SendFastTaxi(_cuocGoi, Enum_FastTaxi_Status.Hoan_DaHoan);

            //            #endregion

            //            // Gửi hủy cho lái xe
            //            G5ServiceSyn.SendOperatorCancel(_cuocGoi.BookId);
            //        }
            //        else
            //        {
            //            return;
            //        }
            //    }
            //    else
            //    {
            //        _cuocGoi.LenhDienThoai = LENH_HUYXE;
            //        hasThucHienLenh = true;
            //    }

            //}
            #endregion
            #endregion

            #region ===9. Giữ rồi ===
            else if (e.KeyCode == Keys.D9 || e.KeyCode == Keys.NumPad9)
            {
                if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.G5_Type == Enum_G5_Type.DieuApp && _cuocGoi.LenhLaiXe == GIUKHACH)
                {
                    _cuocGoi.LenhDienThoai = LENH_GIUROI;
                    G5ServiceSyn.SendText(_cuocGoi.XeNhan, "Đã giữ khách", _cuocGoi.BookId, _cuocGoi.IDCuocGoi, ThongTinDangNhap.USER_ID, _cuocGoi.LoaiCuocKhach == LoaiCuocKhach.ChoKhachHopDong);
                    _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
                    hasThucHienLenh        = true;
                }
                else
                {
                    msgDialog.Show(this,
                                   String.Format("[Lệnh {0}] Cuội gọi phải là cuộc gọi taxi và cuốc điều đàm.", LENH_GIUROI),
                                   "Thông báo",
                                   Taxi.MessageBox.MessageBoxButtonsBA.OK, Taxi.MessageBox.MessageBoxIconBA.Error);
                }
            }
            #endregion

            #region === Gửi số điện thoại cho lái xe ===
            // có cho số
            if (e.KeyCode == Keys.Y)
            {
                if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.G5_Type == Enum_G5_Type.DieuApp && canhBaoDieuApp.CmdId == 50)
                {
                    _cuocGoi.LenhDienThoai = "Đã gửi SĐT";
                    G5ServiceSyn.SendText(_cuocGoi.XeNhan, _cuocGoi.PhoneNumber, _cuocGoi.BookId, _cuocGoi.IDCuocGoi, ThongTinDangNhap.USER_ID, _cuocGoi.LoaiCuocKhach == LoaiCuocKhach.ChoKhachHopDong, canhBaoDieuApp.CmdId);
                    _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
                    hasThucHienLenh        = true;
                    KetThucCanhBao(canhBaoDieuApp.Id, "Đã gửi SĐT");
                }
            }
            //Không cho số
            if (e.KeyCode == Keys.N)
            {
                if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi && _cuocGoi.G5_Type == Enum_G5_Type.DieuApp && canhBaoDieuApp.CmdId == 50)
                {
                    _cuocGoi.LenhDienThoai = "Không cho số";
                    G5ServiceSyn.SendText(_cuocGoi.XeNhan, _cuocGoi.PhoneNumber, _cuocGoi.BookId, _cuocGoi.IDCuocGoi, ThongTinDangNhap.USER_ID, _cuocGoi.LoaiCuocKhach == LoaiCuocKhach.ChoKhachHopDong, canhBaoDieuApp.CmdId, false);
                    _cuocGoi.TrangThaiLenh = TrangThaiLenhTaxi.DienThoai;
                    hasThucHienLenh        = true;
                    KetThucCanhBao(canhBaoDieuApp.Id, "Không cho số");
                }
            }
            #endregion

            #region === Trượt: không gửi số điện thoại cho lái xe ===
            if (e.KeyCode == Keys.T)
            {
                if (_cuocGoi.KieuCuocGoi == KieuCuocGoi.GoiTaxi &&
                    _cuocGoi.XeNhan != null && _cuocGoi.XeNhan != "")
                {
                    if (_cuocGoi.G5_Type == Enum_G5_Type.DieuApp)
                    {
                        if (Config_Common.DienThoai_DieuApp_CanhBaoMatKetNoiVoiServerDieuHanh)
                        {
                            if ((G5ServiceSyn.PingServer != Enum_G5_Ping.PingSu && _cuocGoi.LoaiCuocKhach != LoaiCuocKhach.ChoKhachHopDong) ||
                                (G5ServiceSyn.PingServer_XHD != Enum_G5_Ping.PingSu && _cuocGoi.LoaiCuocKhach == LoaiCuocKhach.ChoKhachHopDong))
                            {
                                if (_cuocGoi.G5_Type == Enum_G5_Type.DieuApp)
                                {
                                    msgDialog.Show(this, "Đang mất kết nối tới Server ĐH.", "Thông báo", Taxi.MessageBox.MessageBoxButtonsBA.OK, Taxi.MessageBox.MessageBoxIconBA.Error);
                                    return;
                                }
                            }
                        }
                        //Nếu là cuốc điều app và có xe dừng điểm hoặc thời gian vượt quá 5 phút thì cho trượt
                        if ((_cuocGoi.XeDungDiem != null && _cuocGoi.XeDungDiem != "") ||
                            (Config_Common.DienThoai_DieuApp_Truot == 0 || (DieuHanhTaxi.GetTimeServer() - (_cuocGoi.G5_SendDate ?? _cuocGoi.ThoiDiemGoi)).TotalMinutes > Config_Common.DienThoai_DieuApp_Truot) ||
                            (!string.IsNullOrEmpty(_cuocGoi.XeNhan) && Config_Common.DienThoai_DieuApp_TruotKhiCoXeNhan)
                            )
                        {
                            string dialog = msgDialog.Show(string.Format("{1} {0}...?", _cuocGoi.DiaChiDonKhach, LENH_TRUOTCHUA), "Thông báo",
                                                           Taxi.MessageBox.MessageBoxButtonsBA.YesNo, Taxi.MessageBox.MessageBoxIconBA.Question);
                            if (dialog == "Yes")
                            {
                                _cuocGoi.LenhDienThoai    = LENH_TRUOTCHUA;
                                _cuocGoi.TrangThaiCuocGoi = TrangThaiCuocGoiTaxi.CuocGoiTruot;
                                _cuocGoi.TrangThaiLenh    = TrangThaiLenhTaxi.KetThucCuaDienThoai;
                                hasThucHienLenh           = true;

                                // Gửi hủy cho lái xe
                                G5ServiceSyn.SendOperatorCancel(_cuocGoi.BookId, _cuocGoi.LoaiCuocKhach, "Trượt khách");
                                KetThucCanhBao(canhBaoDieuApp.Id, "Trượt");
                            }
                        }
                        else
                        {
                            msgDialog.Show(this,
                                           String.Format("[Lệnh Trượt] Cuội gọi phải là cuốc gọi điều App và lái xe đã báo trượt.", LENH_MAYBAN),
                                           "Thông báo",
                                           Taxi.MessageBox.MessageBoxButtonsBA.OK, Taxi.MessageBox.MessageBoxIconBA.Error);
                        }
                    }
                    else
                    {
                        _cuocGoi.TrangThaiCuocGoi = TrangThaiCuocGoiTaxi.CuocGoiTruot;
                        _cuocGoi.LenhDienThoai    = LENH_TRUOTCHUA;
                        _cuocGoi.TrangThaiLenh    = TrangThaiLenhTaxi.DienThoai;
                        hasThucHienLenh           = true;
                    }
                }
                else
                {
                    msgDialog.Show(this,
                                   String.Format("[Lệnh Trượt] Cuốc trượt phải là cuộc gọi taxi và đã có xe nhận.", LENH_MAYBAN),
                                   "Thông báo",
                                   Taxi.MessageBox.MessageBoxButtonsBA.OK, Taxi.MessageBox.MessageBoxIconBA.Error);
                }
            }
            #endregion

            #region **************** F4|| Space || Ctrl + C **************************

            else if ((e.KeyData == Keys.F4 || e.KeyData == Keys.Space))
            {
                HienThiFormGoiDienThoai(Taxi.Business.Configuration.GetDauSoGoiDi + canhBaoDieuApp.SoDienThoai, canhBaoDieuApp.DiaChiDon);
            }
            #endregion

            #region --------- Alt+C: Gọi cho lái xe -------
            else if (e.KeyData == (Keys.Alt | Keys.C))
            {
                try
                {
                    if (!string.IsNullOrEmpty(canhBaoDieuApp.SoXe))
                    {
                        if (CommonBL.DictDriver.ContainsKey(canhBaoDieuApp.SoXe))
                        {
                            var    objDriver = CommonBL.DictDriver[canhBaoDieuApp.SoXe];
                            string soDT      = objDriver.DiDong;
                            if (!string.IsNullOrEmpty(soDT))
                            {
                                string text = string.Format("Xe {0} - {1}", canhBaoDieuApp.SoXe, objDriver.TenNhanVien);
                                HienThiFormGoiDienThoai(soDT, text);
                            }
                            else
                            {
                                MessageBox.Show(string.Format("Lái xe {0}-{1} chưa có thông tin số điện thoại", canhBaoDieuApp.SoXe, objDriver.TenNhanVien), "Thông báo", MessageBoxButtons.OK);
                            }
                        }
                        else
                        {
                            MessageBox.Show(string.Format("Hiện tại không có lái xe nào chạy xe {0}", canhBaoDieuApp.SoXe), "Thông báo", MessageBoxButtons.OK);
                        }
                    }
                    else
                    {
                        MessageBox.Show(string.Format("Không gọi được. Chưa có xe nhận"), "Thông báo", MessageBoxButtons.OK);
                    }
                }
                catch (Exception ex)
                {
                }
            }
            #endregion

            #region ===Cập nhật dữ liệu===
            if (hasThucHienLenh)
            {
                _cuocGoi.MaNhanVienDienThoai = ThongTinDangNhap.USER_ID;
                bool updateSuccess = false;

                var checkChange = new CuocGoi.CheckChange();
                checkChange.DiaChiDon = true;
                checkChange.DiaChiTra = true;
                checkChange.XeNhan    = true;
                checkChange.XeDon     = true;

                if (Global.MoHinh == MoHinh.TongDaiMini)
                {
                    updateSuccess = CuocGoi.G5_DIENTHOAI_UpdateThongTinCuocGoi_Mini(_cuocGoi);
                }
                else
                {
                    updateSuccess = CuocGoi.G5_DIENTHOAI_UpdateThongTinCuocGoi(_cuocGoi, checkChange);
                }

                if (!updateSuccess)
                {
                    MessageBox.Show("Không lưu được dữ liệu, xin hãy liên hệ với quản trị.", "Thông báo");
                    return;
                }
                else
                {
                    // KetThucCanhBao(canhBaoDieuApp, canhBaoDieuAppKT, _cuocGoi.LenhDienThoai);
                    KetThucCanhBao(canhBaoDieuApp.Id, _cuocGoi.LenhDienThoai);
                }
            }
            #endregion

            #endregion

            #region ===Kết thúc cảnh báo, không xử lý===
            if (e.KeyCode == Keys.Delete)
            {
                //Kết thúc cảnh báo với nội dung "XÓA"
                if (MessageBox.Show("Bạn muốn kết thúc cảnh báo của SĐT " + canhBaoDieuApp.SoDienThoai + " mà không xử lý ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    KetThucCanhBao(canhBaoDieuApp.Id, "Xóa");
                }
            }
            #endregion

            #region ===Cuốc đã xử lý===
            if (e.KeyCode == Keys.D)
            {
                if (MessageBox.Show("Bạn đã xử lý cảnh báo của SĐT " + canhBaoDieuApp.SoDienThoai + " ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    KetThucCanhBao(canhBaoDieuApp.Id, "Đã xử lý");
                }
            }
            #endregion

            #region ===Keys Enter===
            if (e.KeyCode == Keys.Enter)
            {
                OnEventKeysEnter(rowPosition);
            }
            #endregion
        }