private void gridView_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e) { if (0 > e.RowHandle && sender.GetType() != typeof(GridView)) { return; } DataRow dr = gridView.GetDataRow(e.RowHandle); if (null != dr && dr.Table.Columns.Contains("state_cd")) { try { int state_cd = KnUtil.parseInt32(dr["state_cd"].ToString()); Color row_color = ObjOrder.getStateColor(state_cd); // 색상 적용 if (row_color != Color.Empty) { e.Appearance.BackColor = row_color; } } catch (Exception ex) { TsLog.writeLog(ex.Message); } } }
public void requestOrderPrint(ObjOrder _sel_order) { if (null == _sel_order) { Debug.WriteLine("homg"); KnDevexpressFunc.showMessage("잘못된 주문입니다. 주문을 선택 후 출력하기를 \n시도 해 주십시오.", MessageBoxIcon.Information); return; } if (null == _sel_order.m_print_port_num || 0 == _sel_order.m_print_port_num.Length) { Debug.WriteLine("jung"); KnDevexpressFunc.showMessage("해당 주문의 주문연동 설정된 출력포트는 프린트 설정이 \n안되어 있습니다.", MessageBoxIcon.Information); return; } if (null == _sel_order.m_print_raw_data_buf || 0 == _sel_order.m_print_raw_data_buf.Length) { Debug.WriteLine("sun"); KnDevexpressFunc.showMessage("선택된 주문은 출력할 데이터가 없습니다.", MessageBoxIcon.Information); return; } FormMain main_form = Kons.ShopCallpass.AppMain.AppCore.Instance.Mainform; if (null != main_form) { Debug.WriteLine("bab"); main_form.printOrder(_sel_order); } }
public void setGridViewDataSource(DataTable _dt) { lock (m_lock_datasource) { ObjOrder.makeTableSchema(ref _dt); // set table columns with ObjOrder class gridControl.DataSource = _dt; } }
override protected void initDlgControls() { if (null == m_dlg_obj) { return; } // border //ctr_tbx_order_num.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_tbx_order_type.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_tbx_state_cd.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_tbx_call_num.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_tbx_call_datetime.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_tbx_customer_cost.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_tbx_customer_request_memo.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_lbx_arv_locate_address.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_lbx_arv_locate_alternative_address.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; //ctr_lbx_arv_locate_memo.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; // set enable ctr_tbx_order_num.Properties.ReadOnly = true; ctr_tbx_order_type.Properties.ReadOnly = true; ctr_tbx_state_cd.Properties.ReadOnly = true; ctr_tbx_call_num.Properties.ReadOnly = true; ctr_tbx_cust_pay_type_name.Properties.ReadOnly = true; ctr_tbx_call_datetime.Properties.ReadOnly = true; ctr_tbx_customer_cost.Properties.ReadOnly = true; ctr_tbx_customer_request_memo.Properties.ReadOnly = true; ctr_lbx_arv_locate_address.Properties.ReadOnly = true; ctr_lbx_arv_locate_alternative_address.Properties.ReadOnly = true; ctr_lbx_arv_locate_memo.Properties.ReadOnly = true; // set content ctr_tbx_order_num.Text = m_dlg_obj.m_order_num; ctr_tbx_order_type.Text = ObjOrder.getOrderTypeString(m_dlg_obj.m_order_type); ctr_tbx_state_cd.Text = ObjOrder.getStateString(m_dlg_obj.m_state_cd); ctr_tbx_call_num.Text = m_dlg_obj.m_call_num; ctr_tbx_cust_pay_type_name.Text = ObjOrder.getCustPayTypeString(m_dlg_obj.m_customer_pay_type_cd); ctr_tbx_call_datetime.Text = m_dlg_obj.m_call_datetime.ToString("yyyy-MM-dd HH:mm:ss"); ctr_tbx_customer_cost.Text = Kons.Utility.KnUtil.formatMoney(m_dlg_obj.m_customer_cost); ctr_tbx_customer_request_memo.Text = m_dlg_obj.m_customer_request_memo; ctr_lbx_arv_locate_address.Text = m_dlg_obj.m_arv_locate_address; ctr_lbx_arv_locate_alternative_address.Text = m_dlg_obj.m_arv_locate_alternative_address; // 대체 가능한 주소 - 신주소 ctr_lbx_arv_locate_memo.Text = m_dlg_obj.m_arv_locate_memo; // if ((int)ObjOrder.STATE_TYPE.ORDER_STATE_0 == m_dlg_obj.m_state_cd) { ctr_btn_req_delivery.Enabled = true; } else { ctr_btn_req_delivery.Enabled = false; } }
// ---------------------------------------------------------- basic method // public FormDlgOrderDetail(Form _parnet = null, ObjOrder _sel_obj = null) { setBaseFormData(null, null, DLG_TYPE.TYPE_NORMAL); InitializeComponent(); m_parent_form = (FormViewOrderList)_parnet; m_dlg_obj = _sel_obj; initDlgObjects(); initDlgControls(); }
public void onCallbackOrderAdd(FormDlgBase.DLG_TYPE _who, ObjOrder _obj) { ObjOrder des_obj = (ObjOrder)_obj; if (null != des_obj) { onChangeObj(des_obj); // 수정한 것은 redraw 이후 포키싱이 되도록 order_num 를 저장 해 둔다. m_next_focus_order_num = des_obj.m_order_num; } }
public void onObjChange(String _obj_key) { Utility.Utility.LogWrite("onChangeObj인자1개짜리"); ObjOrder recv_obj = new ObjOrder(); if (null != recv_obj) { recv_obj.initObj(); if (recv_obj.loadFromDB(_obj_key)) { onChangeObj(recv_obj); } } }
private void showDlgModifyObj(String _order_num = "") { if (0 == _order_num.Length) { KnDevexpressFunc.showMessage("선택된 주문이 없습니다.", MessageBoxIcon.Information); return; } ObjOrder sel_order = Kons.ShopCallpass.AppMain.AppCore.Instance.getAppDoc().getObjOrder(_order_num); if (null != sel_order) { FormDlgOrderDetail dlg = new FormDlgOrderDetail(this, sel_order); dlg.ShowDialog(); } }
// ---------------------------------------------------------- // public String setObjOrder(ObjOrder _order) { if (null == _order || null == _order.m_order_num || 0 == _order.m_order_num.Length) { return(null); } if (m_dic_order.ContainsKey(_order.m_order_num)) { m_dic_order[_order.m_order_num] = _order; } else { m_dic_order.Add(_order.m_order_num, _order); } return(_order.m_order_num); }
public DataTable getGridViewDataSource() { lock (m_lock_datasource) { DataTable dt = (DataTable)gridControl.DataSource; if (null == dt) { dt = new DataTable(); if (null != dt) { ObjOrder.makeTableSchema(ref dt); // set table columns with ObjOrder class gridControl.DataSource = dt; } else { Debug.Assert(false); } } return(dt); } }
public void requestDelivery(ObjOrder _sel_order) { Utility.Utility.LogWrite("requestDelivery 재정의 함수"); if (null == _sel_order) { KnDevexpressFunc.showMessage("잘못된 주문입니다. 주문을 선택 후 출력하기를 \n시도 해 주십시오.", MessageBoxIcon.Information); return; } if (null != _sel_order) { if ((int)ObjOrder.STATE_TYPE.ORDER_STATE_0 != _sel_order.m_state_cd) { if (DialogResult.Yes != MessageBox.Show("선택한 주문은 이미 배달대행을 요청한 건 입니다. \r다시 배달 요청을 하시겠습니까?", "확인", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { return; } } FormDlgRequestDelivery dlg = new FormDlgRequestDelivery(this, _sel_order); dlg.ShowDialog(); } }
public void onChangeObj(ObjOrder _obj, bool _is_change_state = false) { Utility.Utility.LogWrite("onChangeObj인자2개짜리"); try { // save Kons.ShopCallpass.AppMain.AppCore.Instance.getAppDoc().setObjOrder(_obj); // check visible if (!isShowOrder(_obj)) { return; } // control DataTable view_table = getGridViewDataSource(); if (null != view_table) { // 기존 객체 얻기 DataRow[] sel_rows = null; try { sel_rows = view_table.Select(String.Format("order_num = '{0}'", _obj.m_order_num)); } catch (Exception err) { TsLog.writeLog(err.Message); } // 기존 없으면 생성 if (null == sel_rows || 0 == sel_rows.Length) { sel_rows = new DataRow[1]; if (null != sel_rows) { sel_rows[0] = view_table.NewRow(); } view_table.Rows.InsertAt(sel_rows[0], 0); } else { if (!_is_change_state) { // 상태변경을 해야하는 경우(배달요청후)가 아니면 기존 상태를 안바뀌게 하기위해 아래 채우기전에 이전값으로 넣음 // 중복으로 연계 눌렀을경우 상태가 변경되는것을 막기위해 기본적으로 이전 상태를 유지한다. _obj.m_state_cd = KnUtil.parseInt32(sel_rows[0]["state_cd"].ToString()); } } // 새로 받은 내용 채우기 if (null != sel_rows[0]) { ObjOrder.setTableData(ref sel_rows[0], ref _obj); // obj -> data row } // 다시 그리기 redrawListControl(); } } catch (Exception ex) { Kons.ShopCallpass.AppMain.AppCore.detectException(ex.Message); } }
private void initPopupMenu() { try { ArrayList link_array = new ArrayList(); link_array.Clear(); link_array.Add(KnDevexpressFunc.createPopupmenuLinkPersistInfo("등록주문 상세보기", "popup_btn_detail", Properties.Resources.selectall_16x16, this.popupMenu_ItemClick, false)); link_array.Add(KnDevexpressFunc.createPopupmenuLinkPersistInfo("등록주문 출력하기", "popup_btn_print", Properties.Resources.print_16x16, this.popupMenu_ItemClick, false)); link_array.Add(KnDevexpressFunc.createPopupmenuLinkPersistInfo("배달대행 요청하기", "popup_btn_state_1", ObjOrder.getStateImage((int)ObjOrder.STATE_TYPE.ORDER_STATE_1), this.popupMenu_ItemClick, true)); KnDevexpressFunc.setPopupmenuLinkPersistInfo(popupMenu, link_array); } catch (Exception ex) { Debug.Assert(false, ex.Message); throw; } }
public bool isShowOrder(ObjOrder _obj) { // 보인다 return(true); }
// 시작문자를 찾아서 이후부터 저장버퍼에 저장한다. // 시작을 했다면 종료문자를 찾아서 메시지 보내고 이후 앞 부분을 저장 해 둔다 private int saveReadData(byte[] _read_buf, int _read_offset, int _read_length) { Utility.Utility.LogWrite("saveReadData"); int copy_offset = 0; Utility.Utility.LogWrite("saveReadData _read_buf : \n" + EncodingToStringFitness(CheckSender(), _read_buf) + "\n"); Utility.Utility.LogWrite("saveReadData _read_buf 출력 횟수 : " + (++count) + " _read_buf.Length : " + _read_buf.Length + " _read_length : " + _read_length); ModelAppDevice device = new ModelAppDevice(); string val = device.readConfigString("TEMP_PORTNAME", "temp_portName"); int inputType = 0; for (int i = 0; i < 4; i++) { if (val.Equals(device.readConfigString("CONFIG_ORDER_INPUT", "listen_port_num_" + i.ToString()))) { inputType = Int32.Parse(device.readConfigString("CONFIG_ORDER_INPUT", "input_type_" + i.ToString())); } } Utility.Utility.LogWrite("inputType : " + inputType); int index = 0; switch (inputType) { case 10: index = 0; break; case 21: index = 4; break; case 26: index = 3; break; case 27: index = 5; break; case 31: index = 2; break; case 32: index = 1; break; case 33: index = 6; break; case 98: index = 7; break; } string str = device.readConfigString(CONFIG_SECTION[index], keyValues[index]); Utility.Utility.LogWrite("str : " + str); PROTOCOL_EOD = ConvertByteArray(str); Utility.Utility.LogWrite("PROTOCOL_EOD: " + PROTOCOL_EOD); PROTOCOL_TMP = new byte[PROTOCOL_EOD.Length]; bool is_receive_eod = false; int copy_length = 0; Utility.Utility.LogWrite("isWaitDataEnd() : " + isWaitDataEnd()); if (isWaitDataEnd()) { copy_length += PROTOCOL_SOD.Length; // 시작문자 부분은 건너뛰고 검색을 시작하므로 아래 +1 이 안되는 부분이기 때문에 먼저 대해준다. int isOptimizationMode = device.readConfigLong("FORM_MAIN", "optimization_mode"); for (int i = (copy_offset + PROTOCOL_SOD.Length); i < (_read_length - PROTOCOL_EOD.Length + 1); i++) { Array.Copy(_read_buf, _read_offset + i, PROTOCOL_TMP, 0, PROTOCOL_TMP.Length); if (isOptimizationMode == 0) { //log지우면안됨!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Utility.Utility.LogWrite("PROTOCOL_TMP:" + ConvertByteToHexString(PROTOCOL_TMP) + " eod:" + ConvertByteToHexString(PROTOCOL_EOD)); } if (PROTOCOL_TMP.SequenceEqual(PROTOCOL_EOD)) { is_receive_eod = true; copy_length += PROTOCOL_TMP.Length; Utility.Utility.LogWrite("끝문자 i위치 : " + i); Utility.Utility.LogWrite("기타 파서 전용 이프문"); break; } copy_length += 1; } Utility.Utility.LogWrite("끝문자체크is_receive_eod : " + is_receive_eod); if (!is_receive_eod) // 못찾았으면 검색한 길이만큼 더해 준다 { copy_length += (PROTOCOL_EOD.Length - 1); } } else { is_receive_eod = true; // 종료를 찾는 것이 아니면 받은만큼이 종료이기 때문에... copy_length = _read_length; } Utility.Utility.LogWrite("copy_length > (m_save_buf.Length - m_save_len) : " + (copy_length > (m_save_buf.Length - m_save_len))); // 복사할 버퍼의 남은크기 확인 if (copy_length > (m_save_buf.Length - m_save_len)) { resetSaveBuf(); // 버퍼가 가득찬 경우 받은것을 파기한다. return(copy_offset + copy_length); } // 복사할 길이를 찾아서 저장 버퍼에 복사한다. System.Array.Copy(_read_buf, _read_offset + copy_offset, m_save_buf, m_save_len, copy_length); m_save_len += copy_length; Utility.Utility.LogWrite("m_save_buf : " + EncodingToStringFitness(CheckSender(), m_save_buf)); Utility.Utility.LogWrite("m_save_len : " + m_save_len); Utility.Utility.LogWrite("m_save_buf 출력 횟수 : " + (++count2) + " m_save_buf.Length : " + m_save_buf.Length + " m_save_len : " + m_save_len); Utility.Utility.LogWrite("is_receive_eod : " + is_receive_eod); // 상위로 메시지 보내고 버퍼 초기화 if (is_receive_eod) { Utility.Utility.LogWrite("m_parser : " + m_parser); if (null != m_parser) { string tmp = device.readConfigString("UNWANTEDKEYWORD", "unwanted_keyword"); Utility.Utility.LogWrite("tmp : " + tmp); string[] exclusivePatterns = tmp.Split('+'); Utility.Utility.LogWrite("exclusivePatterns.Length : " + exclusivePatterns.Length); for (int i = 0; i < exclusivePatterns.Length; i++) { Utility.Utility.LogWrite("exclusivePatterns[i] : " + exclusivePatterns[i]); } bool flag = false; for (int i = 0; i < exclusivePatterns.Length; i++) { flag = EncodingToStringFitness(CheckSender(), m_save_buf).Contains(exclusivePatterns[i]); if (flag) { break; } } ObjOrder recv_order = null; if (prevPaper != EncodingToStringFitness(CheckSender(), m_save_buf)) { Utility.Utility.LogWrite("apple"); if (!flag) { Utility.Utility.LogWrite("grape"); recv_order = m_parser.parsingInputOrderRawData(m_save_buf, m_save_len); } } //Utility.Utility.LogWrite("recv_order : " + recv_order); if (null != recv_order) { // 주문에 print 정보 저장 recv_order.setRawDataForPrint(m_print_output_port_num, m_save_buf, 0, m_save_len); bool isThisDataToRegister = false; Utility.Utility.LogWrite("inputType : " + inputType); switch (inputType) { case 10: if (device.readConfigLong("CONFIG_ORDER_INPUT", "is_enroll_bemin") == 1) { isThisDataToRegister = true; Utility.Utility.LogWrite("배민꺼 : " + inputType); } break; case 32: if (device.readConfigLong("CONFIG_ORDER_INPUT", "is_enroll_yogiyo") == 1) { isThisDataToRegister = true; Utility.Utility.LogWrite("요기요꺼 : " + inputType); } break; default: if (device.readConfigLong("CONFIG_ORDER_INPUT", "is_enroll_pos") == 1) { isThisDataToRegister = true; Utility.Utility.LogWrite("포스기 : " + inputType); } break; } if (isThisDataToRegister && prevPaper != EncodingToStringFitness(CheckSender(), m_save_buf)) { if (!flag) { Utility.Utility.LogWrite("가나다라"); prevPaper = EncodingToStringFitness(CheckSender(), m_save_buf); sendMyNotify(SERIAL_PORT_NOTIFY_WHAT.ORDER_OBJECT, recv_order); } } } } if (device.readConfigString("CONFIG_PRINT_OUTPUT", "is_use_usb_printer") == "1") { ByteArrayToFile(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\saveBuf" + (count4++).ToString() + ".txt", m_save_buf); } // 받은길이 초기화 resetSaveBuf(); } // 처리한 메시지 길이 반환 return(copy_offset + copy_length); }
private void gridView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (gridView.FocusedRowHandle < 0 && sender.GetType() != typeof(GridView)) { return; } try { if (gridView.IsRowSelected(e.RowHandle) || gridView.FocusedRowHandle == e.RowHandle) { Rectangle bounds = e.Bounds; // rowInfo.Bounds; bounds.X -= 1; bounds.Width += 2; if (null == m_focus_pen) { m_focus_pen = new Pen(Brushes.OrangeRed, 2); } e.Graphics.DrawLine(m_focus_pen, new Point(bounds.X, bounds.Y), new Point(bounds.X + bounds.Width, bounds.Y)); e.Graphics.DrawLine(m_focus_pen, new Point(bounds.X, bounds.Y + bounds.Height), new Point(bounds.X + bounds.Width, bounds.Y + bounds.Height)); } switch (e.Column.FieldName) { case "display_index": { e.DisplayText = (gridControl.FocusedView.RowCount - e.RowHandle).ToString(); } break; case "state_cd": { //Debug.WriteLine("e.Column.FieldName : " + e.Column.FieldName); //Debug.WriteLine("ObjOrder.getStateString(state_cd) : " + ObjOrder.getStateString(state_cd)); int state_cd = (int)e.CellValue; string text = ObjOrder.getStateString(state_cd); Bitmap img = ObjOrder.getStateImage(state_cd); if (img != null) { Point pos = new Point(); pos.X = e.Bounds.Location.X + 2; pos.Y = e.Bounds.Location.Y + ((e.Bounds.Height - img.Height) / 2); e.Graphics.DrawImage(img, pos.X, pos.Y, img.Width, img.Height); int margin_x = img.Width + 4; Rectangle rect = new Rectangle(e.Bounds.X + margin_x, e.Bounds.Y, e.Bounds.Width - margin_x, e.Bounds.Height); e.Appearance.DrawString(e.Cache, text, rect); e.Handled = true; } } break; case "call_num": { e.DisplayText = ((null == e.CellValue || 8 > e.CellValue.ToString().Length) ? e.CellValue.ToString() : KnUtil.formatTelNumber(e.CellValue.ToString())); } break; } } catch (Exception ex) { String erro_msg = (null == ex.Message ? "error - OrderList_gridView_CustomDrawCell" : ex.Message); TsLog.writeLog(erro_msg); //Debug.Assert(false, erro_msg); } }
private void gridView_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { // row handle & sender check if (gridView.FocusedRowHandle < 0 && sender.GetType() != typeof(GridView)) { return; } try { switch (e.Column.FieldName) { case "order_type": { int order_type = ((null == e.Value || 0 == e.Value.ToString().Length) ? 0 : (int)e.Value); e.DisplayText = ObjOrder.getOrderTypeString(order_type); } break; case "call_datetime": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("MM-dd HH:mm")); } break; case "date_1": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "date_2": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "date_3": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "date_4": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "date_5": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "date_6": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "date_7": { DateTime datetime = ((null == e.Value || 8 > e.Value.ToString().Length) ? DateTime.MinValue : (DateTime)e.Value); e.DisplayText = (DateTime.MinValue == datetime ? "" : datetime.ToString("HH:mm")); } break; case "customer_pay_type_cd": { int customer_pay_type_cd = ((null == e.Value || 0 == e.Value.ToString().Length) ? 0 : (int)e.Value); e.DisplayText = ObjOrder.getCustPayTypeString(customer_pay_type_cd); } break; case "shop_cost": { e.DisplayText = ((null == e.Value || 0 == e.Value.ToString().Length) ? "" : KnUtil.formatMoney((int)e.Value)); } break; case "customer_cost": { e.DisplayText = ((null == e.Value || 0 == e.Value.ToString().Length) ? "" : KnUtil.formatMoney((int)e.Value)); } break; } } catch (Exception ex) { String erro_msg = (null == ex.Message ? "error - OrderList_gridView_CustomColumnDisplayText" : ex.Message); TsLog.writeLog(erro_msg); Debug.Assert(false, erro_msg); } }