/// <summary> /// Перевизначений метод обробки повідомлень. /// </summary> /// <param name="m">Повідомлення</param> protected override void WndProc(ref Message m) { base.WndProc(ref m); //winapi.WinAPI.OutputDebugString(m.ToString()); if (m.Msg == (int)CoreLib.MyMsgs.WM_HOTKEY) { //winapi.Funcs.OutputDebugString("Q"); #region hot key control switch (m.WParam.ToInt32()) { case 0x10: #region CONTROL + DELETE { //if (this.Cheque.ExtendedProperties.ContainsKey("BILL") && this.Cheque.ExtendedProperties["BILL"] != null && bool.Parse(this.Cheque.ExtendedProperties["LOCK"].ToString())) if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBoxEx.Show(this.chequeDGV, "Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (Cheque.Rows.Count == 0) break;//r if (!(_fl_adminMode || UserConfig.Properties[24]) && (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OWNER_NO, string.Empty).ToString() == string.Empty)) if (admin.ShowDialog() != DialogResult.OK) break;//r try { int index = chequeDGV.CurrentRow.Index; if (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OID, string.Empty).ToString() != string.Empty) { try { Dictionary<string, object[]> deletedRows = new Dictionary<string, object[]>(); deletedRows = (Dictionary<string, object[]>)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); //DataRow[] dRow = new DataRow[1] { }; //this.Cheque.Rows.CopyTo(dRow, index); if (!deletedRows.ContainsKey(this.Cheque.Rows[index]["C"].ToString())) { deletedRows.Add(this.Cheque.Rows[index]["C"].ToString(), this.Cheque.Rows[index].ItemArray); DataWorkShared.SetBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); } } catch { } } object profileKey = this.Cheque.Rows[index]["F"]; object productId = this.Cheque.Rows[index]["ID"]; object productOID = this.Cheque.Rows[index]["C"]; Cheque.Rows.RemoveAt(index); try { DataRow dProfileRow = this.Cheques.Tables[profileKey.ToString()].Rows.Find(productOID); int idxPR = this.Cheques.Tables[profileKey.ToString()].Rows.IndexOf(dProfileRow); this.Cheques.Tables[profileKey.ToString()].Rows.RemoveAt(idxPR); } catch { } //AppFunc.OutputDebugString("k"); if (m.LParam.ToInt32() == 0x100) RowsRemoved_MyEvent(true, false); else RowsRemoved_MyEvent(true); index--; if (index < 0) if (Cheque.Rows.Count != 0) index = 0; else break;//r chequeDGV.CurrentCell = chequeDGV.Rows[index].Cells[chequeDGV.Columns.GetFirstColumn(DataGridViewElementStates.Visible).Name]; chequeDGV.Rows[index].Selected = true; } catch { } break; } #endregion case 0x11: #region CONTROL + SHIFT + DELETE { //if (this.Cheque.ExtendedProperties.ContainsKey("BILL") && this.Cheque.ExtendedProperties["BILL"] != null && bool.Parse(this.Cheque.ExtendedProperties["LOCK"].ToString())) if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBoxEx.Show(this.chequeDGV, "Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (Cheque.Rows.Count == 0) break;//r if (!(_fl_adminMode || UserConfig.Properties[24])) if (admin.ShowDialog() != DialogResult.OK) break;//r if (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OID, string.Empty).ToString() != string.Empty) { try { Dictionary<string, object[]> deletedRows = new Dictionary<string, object[]>(); deletedRows = (Dictionary<string, object[]>)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); for (int index = 0; index < this.Cheque.Rows.Count; index++) { if (!deletedRows.ContainsKey(this.Cheque.Rows[index]["C"].ToString())) deletedRows.Add(this.Cheque.Rows[index]["C"].ToString(), this.Cheque.Rows[index].ItemArray); } DataWorkShared.SetBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); } catch { } } Cheque.Rows.Clear(); /* if (ConfigManager.Instance.CommonConfiguration.PROFILES_UseProfiles) foreach (DictionaryEntry de in ConfigManager.Instance.CommonConfiguration.PROFILES_Items) RowsRemoved_MyEvent_profile(de.Key); */ if (m.LParam.ToInt32() == 0x100) RowsRemoved_MyEvent(true, false, false); else RowsRemoved_MyEvent(true, true, true); break; } #endregion case 0x12: #region CONTROL + PageDown { if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBoxEx.Show(this.chequeDGV, "Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (_fl_isInvenCheque) return; if (!(_fl_adminMode || UserConfig.Properties[3])) if (admin.ShowDialog() != DialogResult.OK) return; double discSUMA = 0.0; try { discSUMA = (double)Cheque.Compute("Sum(SUM)", "USEDDISC = " + Boolean.TrueString); } catch { } uiWndDiscountRequest d = new uiWndDiscountRequest(discSUMA, true); d.SetDiscount(ref discArrPercent, ref discArrCash); d.Dispose(); if (discArrPercent[0] == 0.0 && discArrPercent[1] == 0.0 && discArrCash[0] == 0.0 && discArrCash[1] == 0.0) ResetDiscount(); else { відмінитиЗнижкунадбавкуToolStripMenuItem.Enabled = true; if (ConfigManager.Instance.CommonConfiguration.APP_OnlyDiscount) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку"; else { if ((discArrPercent[0] != 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку і націнку"; if ((discArrPercent[0] == 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] == 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати націнку"; if ((discArrPercent[0] != 0.0 && discArrPercent[1] == 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] == 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку"; } } UpdateSumInfo(true); break; } #endregion case 0x13: #region CONTROL + PageUp { if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBoxEx.Show(this.chequeDGV, "Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (_fl_isInvenCheque) return; if (!(_fl_adminMode || UserConfig.Properties[3])) if (admin.ShowDialog() != DialogResult.OK) return; double discSUMA = 0; try { discSUMA = (double)Cheque.Compute("Sum(SUM)", "USEDDISC = " + Boolean.TrueString); } catch { } uiWndDiscountRequest d = new uiWndDiscountRequest(discSUMA, false); d.SetDiscount(ref discArrPercent, ref discArrCash); d.Dispose(); if (discArrPercent[0] == 0.0 && discArrPercent[1] == 0.0 && discArrCash[0] == 0.0 && discArrCash[1] == 0.0) ResetDiscount(); else { відмінитиЗнижкунадбавкуToolStripMenuItem.Enabled = true; if (ConfigManager.Instance.CommonConfiguration.APP_OnlyDiscount) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати націнку"; else { if ((discArrPercent[0] != 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку і націнку"; if ((discArrPercent[0] == 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] == 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати націнку"; if ((discArrPercent[0] != 0.0 && discArrPercent[1] == 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] == 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку"; } } UpdateSumInfo(true); break; } #endregion case 0x14: #region SHIFT + DELETE { if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBoxEx.Show(this.chequeDGV, "Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (_fl_isInvenCheque) return; ResetDiscount(); UpdateSumInfo(true); addChequeInfo.Text = string.Empty; break; } #endregion case 0x15: #region ENTER { if (global::components.Components.WinApi.Com_WinApi.InSendMessage()) { if (ConfigManager.Instance.CommonConfiguration.APP_ScannerUseProgamMode) System.Threading.Thread.Sleep(ConfigManager.Instance.CommonConfiguration.APP_ScannerCharReadFrequency + 1); global::components.Components.WinApi.Com_WinApi.ReplyMessage(new IntPtr(0x15)); } //if ( this.Cheque.ExtendedProperties.ContainsKey("BILL") && this.Cheque.ExtendedProperties["BILL"] != null && bool.Parse(((Dictionary<string, object>)this.Cheque.ExtendedProperties["BILL"])["IS_LOCKED"].ToString())) if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBoxEx.Show(this.chequeDGV, "Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } //for (int i = 0x10; i < 0x20; i++) //AppFunc.UnregisterHotKey(this, i); bool editWasClosed = false; //winapi.WinAPI.OutputDebugString("Enter"); if (!UserConfig.Properties[22]) if (ConfigManager.Instance.CommonConfiguration.APP_ScannerUseProgamMode && lastInputChar.AddMilliseconds(ConfigManager.Instance.CommonConfiguration.APP_ScannerCharReadFrequency) > DateTime.Now && chararray != null && chararray.Length != 0) { //if (chequeDGV.CurrentCell != null && chequeDGV.CurrentCell.IsInEditMode) //{ // if (chequeDGV.CurrentCell.EditedFormattedValue.ToString().Contains(chararray)) // { // string val = chequeDGV.CurrentCell.EditedFormattedValue.ToString(); // int bcidx = val.IndexOf(chararray); // val = val.Substring(0, bcidx); // if (val == string.Empty) // val = "0"; // chequeDGV.CurrentCell.Value = Convert.ToDouble(val); // } // chequeDGV.EndEdit(); // editWasClosed = true; //} bool okToProceed = true; if (chararray.Length == 1 && !char.IsDigit(chararray[0])) okToProceed = false; if (okToProceed) { Com_WinApi.OutputDebugString("SEARCH: ok to proceed by program"); //winapi.WinAPI.OutputDebugString("srch: " + chararray); SearchFilter(false, 2, true); SrchTbox.Text = chararray; } else { Com_WinApi.OutputDebugString("SEARCH: no ok. Using textbox."); string _sameText = SrchTbox.Text; SearchFilter(false, 2, true); SrchTbox.Text = _sameText; } SrchTbox.Select(); chararray = string.Empty; } //close edit if (chequeDGV.CurrentCell != null && chequeDGV.CurrentCell.IsInEditMode) { chequeDGV.EndEdit(); editWasClosed = true; } //lastInputChar = DateTime.Now; //launch article property if (chequeDGV.Focused && chequeDGV.RowCount != 0) { if (!(_fl_adminMode || UserConfig.Properties[24]) && (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OWNER_NO, string.Empty).ToString() == string.Empty)) if (admin.ShowDialog(this) != DialogResult.OK) return; DataRow dRow = Cheque.Rows.Find(chequeDGV.CurrentRow.Cells["C"].Value); Request req = new Request(dRow, MathLib.GetDouble(dRow["TOT"])); req.UpdateRowSource(this.chequeDGV, this); req.Dispose(); UpdateSumInfo(true); break;//r } //Adding article to Cheque if (articleDGV.Focused && articleDGV.RowCount != 0) { DataRow article = Articles.Rows.Find(articleDGV.CurrentRow.Cells["C"].Value); if (!this._fl_isOk && this.Cheque.Rows.Count >= 3 && this.Cheque.Rows.Find(article["C"].ToString()) == null) { MMessageBoxEx.Show(this.chequeDGV, "Ви не можете продавати більше позицій в демо-режимі", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break; } if (article != null) { CoreLib.AddArticleToCheque(chequeDGV, articleDGV, article, ConfigManager.Instance.CommonConfiguration.APP_StartTotal, Articles); SearchFilter(true, this.currSrchType, false); // hide product panel when it was displayed automatically /*if (splitContainer1.Panel2.Tag != null) { вікноТоварівToolStripMenuItem.PerformClick(); splitContainer1.Panel2.Tag = null; // skin sensor integration (show panel when some arts are hidden) if (this.сенсорToolStripMenuItem.Checked) this.chequeContainer.Panel2Collapsed = false; }*/ } break;//r } //winapi.WinAPI.OutputDebugString("srch: " + SrchTbox.Text); //Searching if (!editWasClosed && SrchTbox.Focused && SrchTbox.Text != string.Empty) { DataTable sTable = Articles.Clone(); bool allowToShow = false; int i = 0; //Debug.Write("BeginAdd"); #region search box if (SrchTbox.Text != "") { switch (currSrchType) { case 0: { #region by name string[] words = SrchTbox.Text.Trim().Split(' '); DataRow[] dr1 = new DataRow[0]; DataRow[] dr2 = new DataRow[0]; DataTable dTable = (DataTable)articleDGV.DataSource; //string srchString = string.Empty; SrchTbox.Text = string.Empty; for (int l = 0; l < words.Length; l++) { try { dr1 = dTable.Select("NAME Like '%" + words[l] + "%'"); dr2 = dTable.Select("DESC Like '%" + words[l] + "%'"); } catch { } sTable.Clear(); sTable.BeginLoadData(); if (dr1.Length > dr2.Length) { for (i = 0; i < dr1.Length; i++) sTable.Rows.Add(dr1[i].ItemArray); } else { for (i = 0; i < dr2.Length; i++) sTable.Rows.Add(dr2[i].ItemArray); } sTable.EndLoadData(); dTable = sTable.Copy(); if (dTable.Rows.Count > 0) { articleDGV.DataSource = dTable; articleDGV.Select(); allowToShow = true; SrchTbox.Text += words[l] + " "; //SrchTbox.Select(0, srchString.Length); } } if (SrchTbox.Text == string.Empty) //if (SrchTbox.SelectedText == string.Empty) { MMessageBoxEx.Show(this.chequeDGV, "Нажаль нічого не вдалось знайти", "Результат пошуку", MessageBoxButtons.OK, MessageBoxIcon.Information); SearchFilter(false, ConfigManager.Instance.CommonConfiguration.APP_SearchType, true); } #endregion break; } case 1: { #region by id try { DataRow[] dr = Articles.Select("ID Like \'" + SrchTbox.Text + "%\'"); if (dr.Length == 0) { MMessageBoxEx.Show(this.chequeDGV, "Нажаль нічого не вдалось знайти", "Результат пошуку", MessageBoxButtons.OK, MessageBoxIcon.Information); SearchFilter(false, ConfigManager.Instance.CommonConfiguration.APP_SearchType, true); break; } if (dr.Length == 1) { SearchFilter(false, currSrchType, true); CoreLib.AddArticleToCheque(chequeDGV, articleDGV, dr[0], ConfigManager.Instance.CommonConfiguration.APP_StartTotal, Articles); allowToShow = false; break; } else { sTable.Clear(); sTable.BeginLoadData(); for (i = 0; i < dr.Length; i++) sTable.Rows.Add(dr[i].ItemArray); sTable.EndLoadData(); articleDGV.DataSource = sTable; articleDGV.Select(); allowToShow = true; } } catch { SrchTbox.Focus(); SrchTbox.SelectAll(); } #endregion break; } case 2: { #region by bc try { allowToShow = BCSearcher(SrchTbox.Text, true); } catch (FormatException) { SrchTbox.Focus(); SrchTbox.SelectAll(); } #endregion break; } } } #endregion // show article panel if there are filtered productss if (splitContainer1.Panel2Collapsed && allowToShow) { вікноТоварівToolStripMenuItem.PerformClick(); splitContainer1.Panel2.Tag = new object(); articleDGV.Select(); // skin sensor integration (hide panel when some arts are showing) if (this.сенсорToolStripMenuItem.Checked) this.chequeContainer.Panel2Collapsed = true; } articleDGV.Update(); //Debug.Write("EndAdd"); } break; } #endregion case 0x16: #region CONTROL + ENTER { if (_fl_isInvenCheque || Cheque.Rows.Count == 0) break;//r if (!(_fl_adminMode || UserConfig.Properties[23])) { //if (admin.ShowDialog() != DialogResult.OK) MMessageBoxEx.Show(this.chequeDGV, "Закриття чеку заблоковано", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break;//r } // if we use legal printer if (Program.AppPlugins.IsActive(PluginType.FPDriver)) { // we close legal cheque CloseCheque(true); } else { // if we don't use legal printer and // if we allow to close normal cheque or admin mode is active if (UserConfig.Properties[6]) { // we close normal cheque CloseCheque(false); } else MMessageBoxEx.Show(this.chequeDGV, "Закриття чеку заблоковано", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); } break; } #endregion case 0x17: #region CONTROL + SHIFT + ENTER { if (_fl_isInvenCheque) break;//r if (Cheque.Rows.Count == 0 && UserConfig.Properties[12]) { string nextChqNom = string.Empty; object[] localData = new object[0]; if (ConfigManager.Instance.CommonConfiguration.PROFILES_UseProfiles) { string info = ""; foreach (DictionaryEntry de in ConfigManager.Instance.CommonConfiguration.PROFILES_Items) { localData = DataWorkCheque.NonFxChqsInfo(0, ref nextChqNom, int.Parse(de.Key.ToString())); info += "| " + string.Format("{3}: за {1} продано {0} чек(ів) на суму {2:F" + ConfigManager.Instance.CommonConfiguration.APP_MoneyDecimals + "} ", localData[0], localData[1], MathLib.GetDouble(localData[2].ToString()), ((Hashtable)de.Value)["NAME"]); } DDM_Status.Text = info; } else { localData = DataWorkCheque.NonFxChqsInfo(0, ref nextChqNom); DDM_Status.Text = string.Format("За {1} продано {0} чек(ів) на суму {2:F" + ConfigManager.Instance.CommonConfiguration.APP_MoneyDecimals + "}", localData[0], localData[1], MathLib.GetDouble(localData[2].ToString())); } break;//r } if (Cheque.Rows.Count == 0)// || !Program.Service.UseEKKR) break;//r if (!(_fl_adminMode || (UserConfig.Properties[23] && UserConfig.Properties[6]))) { MMessageBoxEx.Show(this.chequeDGV, "Закриття чеку заблоковано", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break; } if (ConfigManager.Instance.CommonConfiguration.Content_Common_PromptMsgOnIllegal && DialogResult.Yes != MMessageBoxEx.Show(this.chequeDGV, "Закрити чек без фіксації оплати", Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)) break;//r /* if (!(ADMIN_STATE || (UserConfig.Properties[23] && UserConfig.Properties[6]))) if (admin.ShowDialog() != DialogResult.OK) break;//r */ CloseCheque(false); break; } #endregion case 0x18: #region F5 { if (!ConfigManager.Instance.CommonConfiguration.APP_SrchTypesAccess[0]) { MMessageBoxEx.Show(this.chequeDGV, "Пошук по назві не дозволений", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (currSrchType != 0) SearchFilter(false, 0, true); else { SrchTbox.Focus(); SrchTbox.Select(SrchTbox.Text.Length, 0); } break; } #endregion case 0x19: #region F6 { if (!ConfigManager.Instance.CommonConfiguration.APP_SrchTypesAccess[1]) { MMessageBoxEx.Show(this.chequeDGV, "Пошук по коду не дозволений", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (currSrchType != 1) SearchFilter(false, 1, true); else { SrchTbox.Focus(); SrchTbox.Select(SrchTbox.Text.Length, 0); } break; } #endregion case 0x1A: #region F7 { //winapi.WinAPI.OutputDebugString("F7"); if (!ConfigManager.Instance.CommonConfiguration.APP_SrchTypesAccess[2]) { MMessageBoxEx.Show(this.chequeDGV, "Пошук по штрих-коду не дозволений", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (currSrchType != 2) SearchFilter(false, 2, true); else { SrchTbox.Focus(); SrchTbox.Select(0, SrchTbox.Text.Length); } break; } #endregion case 0x1B: #region F8 { if (Cheque.ExtendedProperties.Contains("BILL")) MMessageBoxEx.Show(this.chequeDGV, "Відкритий рахунок №" + " " + Cheque.ExtendedProperties["NOM"], Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break; } #endregion case 0x1C: #region F9 { string infoText = string.Empty; UserSchema us = new UserSchema(); infoText += UserConfig.UserID; infoText += "\r\n\r\n--------------------------------------------------\r\n\r\n"; for (int i = 0; i < UserSchema.ITEMS_COUNT; i++) infoText += us.SchemaItems[i] + " : " + (UserConfig.Properties[i] ? "Так" : "Ні") + "\r\n"; MMessageBoxEx.Show(infoText, UserConfig.UserID); break; } #endregion case 0x1D: #region ESCAPE { if (this.currSrchType != ConfigManager.Instance.CommonConfiguration.APP_SearchType || this.SrchTbox.Text.Length != 0 || this.Articles.Rows.Count != this.articleDGV.RowCount) { SearchFilter(false, ConfigManager.Instance.CommonConfiguration.APP_SearchType, true); //this.sensorDataPanel1.Navigator.DisplayedCategoryFilter = ""; //this.Navigator_OnFilterChanged("", EventArgs.Empty); } else this.Close(); break; } #endregion case 0x1E: #region CONTROL + Q { if (_fl_isInvenCheque) break;//r _fl_taxDocRequired = !_fl_taxDocRequired; if (_fl_taxDocRequired) CashLbl.Image = Properties.Resources.naklad; else CashLbl.Image = null; break; } #endregion case 0x1F: #region CONTROL { if (chequeDGV.CurrentCell != null && chequeDGV.CurrentCell.IsInEditMode) chequeDGV.EndEdit(); break; } #endregion } #endregion //winapi.Funcs.OutputDebugString("W"); } if (m.Msg == (int)CoreLib.MyMsgs.WM_UPDATE) { if (_fl_canUpdate) this.timerExchangeImport_Tick(this.timerExchangeImport, EventArgs.Empty); } }
/// <summary> /// Перевизначений метод обробки повідомлень. /// </summary> /// <param name="m">Повідомлення</param> protected override void WndProc(ref Message m) { base.WndProc(ref m); //winapi.WinAPI.OutputDebugString(m.ToString()); if (m.Msg == (int)CoreLib.MyMsgs.WM_HOTKEY) { //winapi.Funcs.OutputDebugString("Q"); #region hot key control switch (m.WParam.ToInt32()) { case 0x10: #region CONTROL + DELETE { //if (this.Cheque.ExtendedProperties.ContainsKey("BILL") && this.Cheque.ExtendedProperties["BILL"] != null && bool.Parse(this.Cheque.ExtendedProperties["LOCK"].ToString())) if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBox.Show("Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (Cheque.Rows.Count == 0) break;//r if (!(ADMIN_STATE || UserConfig.Properties[24]) && (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OWNER_NO, string.Empty).ToString() == string.Empty)) if (admin.ShowDialog() != DialogResult.OK) break;//r try { int index = chequeDGV.CurrentRow.Index; if (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OID, string.Empty).ToString() != string.Empty) { try { Dictionary<string, object[]> deletedRows = new Dictionary<string, object[]>(); deletedRows = (Dictionary<string, object[]>)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); //DataRow[] dRow = new DataRow[1] { }; //this.Cheque.Rows.CopyTo(dRow, index); if (!deletedRows.ContainsKey(this.Cheque.Rows[index]["C"].ToString())) { deletedRows.Add(this.Cheque.Rows[index]["C"].ToString(), this.Cheque.Rows[index].ItemArray); DataWorkShared.SetBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); } } catch { } } Cheque.Rows.RemoveAt(index); //AppFunc.OutputDebugString("k"); RowsRemoved_MyEvent(true); index--; if (index < 0) if (Cheque.Rows.Count != 0) index = 0; else break;//r chequeDGV.CurrentCell = chequeDGV.Rows[index].Cells[chequeDGV.Columns.GetFirstColumn(DataGridViewElementStates.Visible).Name]; chequeDGV.Rows[index].Selected = true; } catch { } break; } #endregion case 0x11: #region CONTROL + SHIFT + DELETE { //if (this.Cheque.ExtendedProperties.ContainsKey("BILL") && this.Cheque.ExtendedProperties["BILL"] != null && bool.Parse(this.Cheque.ExtendedProperties["LOCK"].ToString())) if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBox.Show("Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (Cheque.Rows.Count == 0) break;//r if (!(ADMIN_STATE || UserConfig.Properties[24])) if (admin.ShowDialog() != DialogResult.OK) break;//r if (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OID, string.Empty).ToString() != string.Empty) { try { Dictionary<string, object[]> deletedRows = new Dictionary<string, object[]>(); deletedRows = (Dictionary<string, object[]>)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); for (int index = 0; index < this.Cheque.Rows.Count ; index++) { if (!deletedRows.ContainsKey(this.Cheque.Rows[index]["C"].ToString())) deletedRows.Add(this.Cheque.Rows[index]["C"].ToString(), this.Cheque.Rows[index].ItemArray); } DataWorkShared.SetBillProperty(this.Cheque, CoreConst.DELETED_ROWS, deletedRows); } catch { } } Cheque.Rows.Clear(); RowsRemoved_MyEvent(true); break; } #endregion case 0x12: #region CONTROL + PageDown { if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBox.Show("Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (inventChq) return; if (!(ADMIN_STATE || UserConfig.Properties[3])) if (admin.ShowDialog() != DialogResult.OK) return; double discSUMA = 0.0; try { discSUMA = (double)Cheque.Compute("Sum(SUM)", "USEDDISC = " + Boolean.TrueString); } catch { } uiWndDiscountRequest d = new uiWndDiscountRequest(discSUMA, true); d.SetDiscount(ref discArrPercent, ref discArrCash); d.Dispose(); if (discArrPercent[0] == 0.0 && discArrPercent[1] == 0.0 && discArrCash[0] == 0.0 && discArrCash[1] == 0.0) ResetDiscount(); else { відмінитиЗнижкунадбавкуToolStripMenuItem.Enabled = true; if (AppConfig.APP_OnlyDiscount) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку"; else { if ((discArrPercent[0] != 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку і націнку"; if ((discArrPercent[0] == 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] == 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати націнку"; if ((discArrPercent[0] != 0.0 && discArrPercent[1] == 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] == 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку"; } } UpdateSumInfo(true); break; } #endregion case 0x13: #region CONTROL + PageUp { if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBox.Show("Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (inventChq) return; if (!(ADMIN_STATE || UserConfig.Properties[3])) if (admin.ShowDialog() != DialogResult.OK) return; double discSUMA = 0; try { discSUMA = (double)Cheque.Compute("Sum(SUM)", "USEDDISC = " + Boolean.TrueString); } catch { } uiWndDiscountRequest d = new uiWndDiscountRequest(discSUMA, false); d.SetDiscount(ref discArrPercent, ref discArrCash); d.Dispose(); if (discArrPercent[0] == 0.0 && discArrPercent[1] == 0.0 && discArrCash[0] == 0.0 && discArrCash[1] == 0.0) ResetDiscount(); else { відмінитиЗнижкунадбавкуToolStripMenuItem.Enabled = true; if (AppConfig.APP_OnlyDiscount) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати націнку"; else { if ((discArrPercent[0] != 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку і націнку"; if ((discArrPercent[0] == 0.0 && discArrPercent[1] != 0.0) || (discArrCash[0] == 0.0 && discArrCash[1] != 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати націнку"; if ((discArrPercent[0] != 0.0 && discArrPercent[1] == 0.0) || (discArrCash[0] != 0.0 && discArrCash[1] == 0.0)) відмінитиЗнижкунадбавкуToolStripMenuItem.Text = "Скасувати знижку"; } } UpdateSumInfo(true); break; } #endregion case 0x14: #region SHIFT + DELETE { if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBox.Show("Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (inventChq) return; ResetDiscount(); UpdateSumInfo(true); break; } #endregion case 0x21: { //winapi.WApi.OutputDebugString("LINE FEED KEY HOT"); break; } case 0x20: { //winapi.WApi.OutputDebugString("RETURN KEY HOT"); break; } case 0x15: #region ENTER { //if ( this.Cheque.ExtendedProperties.ContainsKey("BILL") && this.Cheque.ExtendedProperties["BILL"] != null && bool.Parse(((Dictionary<string, object>)this.Cheque.ExtendedProperties["BILL"])["IS_LOCKED"].ToString())) if ((bool)DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.IS_LOCKED, false)) { MMessageBox.Show("Поточний рахунок № " + DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.BILL_NO) + " надрукований клієнту.\r\nЗробіть з нього чек.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } //for (int i = 0x10; i < 0x20; i++) //AppFunc.UnregisterHotKey(this, i); bool editWasClosed = false; //winapi.WinAPI.OutputDebugString("Enter"); if (!UserConfig.Properties[22]) if (lastInputChar.AddMilliseconds(AppConfig.APP_ScannerCharReadFrequency) > DateTime.Now && chararray != null && chararray.Length != 0) { //if (chequeDGV.CurrentCell != null && chequeDGV.CurrentCell.IsInEditMode) //{ // if (chequeDGV.CurrentCell.EditedFormattedValue.ToString().Contains(chararray)) // { // string val = chequeDGV.CurrentCell.EditedFormattedValue.ToString(); // int bcidx = val.IndexOf(chararray); // val = val.Substring(0, bcidx); // if (val == string.Empty) // val = "0"; // chequeDGV.CurrentCell.Value = Convert.ToDouble(val); // } // chequeDGV.EndEdit(); // editWasClosed = true; //} // char filtering string newCharArray = string.Empty; foreach (char sci in this.chararray) { if (Char.IsLetter(sci) || Char.IsNumber(sci)) newCharArray += sci; } //winapi.WApi.OutputDebugString("SEARCHING WITH BARCODE: [" + chararray + "]"); SearchFilter(false, 2, true); SrchTbox.Text = newCharArray; SrchTbox.Select(); this.chararray = string.Empty; } //close edit if (chequeDGV.CurrentCell != null && chequeDGV.CurrentCell.IsInEditMode) { chequeDGV.EndEdit(); editWasClosed = true; } //lastInputChar = DateTime.Now; //launch article property if (chequeDGV.Focused && chequeDGV.RowCount != 0) { if (!(ADMIN_STATE || UserConfig.Properties[24]) && (DataWorkShared.ExtractBillProperty(this.Cheque, CoreConst.OWNER_NO, string.Empty).ToString() == string.Empty)) if (admin.ShowDialog() != DialogResult.OK) return; DataRow dRow = Cheque.Rows.Find(chequeDGV.CurrentRow.Cells["C"].Value); Request req = new Request(dRow, CoreLib.GetDouble(dRow["TOT"])); req.UpdateRowSource(); req.Dispose(); UpdateSumInfo(true); break;//r } //Adding article to Cheque if (articleDGV.Focused && articleDGV.RowCount != 0) { DataRow article = Articles.Rows.Find(articleDGV.CurrentRow.Cells["C"].Value); if (!this._fl_isOk && this.Cheque.Rows.Count >= 3 && this.Cheque.Rows.Find(article["C"].ToString()) == null) { MMessageBox.Show(this, "Ви не можете продавати більше позицій в демо-режимі", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break; } if (article != null) CoreLib.AddArticleToCheque(chequeDGV, articleDGV, article, AppConfig.APP_StartTotal, Articles); break;//r } //winapi.WinAPI.OutputDebugString("srch: " + SrchTbox.Text); //Searching if (!editWasClosed && SrchTbox.Focused && SrchTbox.Text != string.Empty) { DataTable sTable = Articles.Clone(); bool allowToShow = false; int i = 0; //Debug.Write("BeginAdd"); #region search box //winapi.WApi.OutputDebugString("SEARCH BOX TEXT: [" + SrchTbox.Text + "]"); if (SrchTbox.Text != "") { switch (currSrchType) { case 0: { #region by name string[] words = SrchTbox.Text.Trim().Split(' '); DataRow[] dr1 = new DataRow[0]; DataRow[] dr2 = new DataRow[0]; DataTable dTable = (DataTable)articleDGV.DataSource; //string srchString = string.Empty; SrchTbox.Text = string.Empty; for (int l = 0; l < words.Length; l++) { try { dr1 = dTable.Select("NAME Like '%" + words[l] + "%'"); dr2 = dTable.Select("DESC Like '%" + words[l] + "%'"); } catch { } sTable.Clear(); sTable.BeginLoadData(); if (dr1.Length > dr2.Length) { for (i = 0; i < dr1.Length; i++) sTable.Rows.Add(dr1[i].ItemArray); } else { for (i = 0; i < dr2.Length; i++) sTable.Rows.Add(dr2[i].ItemArray); } sTable.EndLoadData(); dTable = sTable.Copy(); if (dTable.Rows.Count > 0) { articleDGV.DataSource = dTable; articleDGV.Select(); allowToShow = true; SrchTbox.Text += words[l] + " "; //SrchTbox.Select(0, srchString.Length); } } if (SrchTbox.Text == string.Empty) //if (SrchTbox.SelectedText == string.Empty) { MMessageBox.Show(this, "Нажаль нічого не вдалось знайти", "Результат пошуку", MessageBoxButtons.OK, MessageBoxIcon.Information); SearchFilter(false, AppConfig.APP_SearchType, true); } #endregion break; } case 1: { #region by id try { DataRow[] dr = Articles.Select("ID Like \'" + SrchTbox.Text + "%\'"); if (dr.Length == 0) { MMessageBox.Show(this, "Нажаль нічого не вдалось знайти", "Результат пошуку", MessageBoxButtons.OK, MessageBoxIcon.Information); SearchFilter(false, AppConfig.APP_SearchType, true); break; } if (dr.Length == 1) { SearchFilter(false, currSrchType, true); CoreLib.AddArticleToCheque(chequeDGV, articleDGV, dr[0], AppConfig.APP_StartTotal, Articles); allowToShow = false; break; } else { sTable.Clear(); sTable.BeginLoadData(); for (i = 0; i < dr.Length; i++) sTable.Rows.Add(dr[i].ItemArray); sTable.EndLoadData(); articleDGV.DataSource = sTable; articleDGV.Select(); allowToShow = true; } } catch { SrchTbox.Focus(); SrchTbox.SelectAll(); } #endregion break; } case 2: { #region by bc try { string _bcvalue = SrchTbox.Text.Trim('C', ' '); allowToShow = BCSearcher(_bcvalue, true); } catch (FormatException) { SrchTbox.Focus(); SrchTbox.SelectAll(); } #endregion break; } } } #endregion if (splitContainer1.Panel2Collapsed && allowToShow) { вікноТоварівToolStripMenuItem.PerformClick(); splitContainer1.Panel2.Tag = new object(); articleDGV.Select(); } articleDGV.Update(); //Debug.Write("EndAdd"); } break; } #endregion case 0x16: #region CONTROL + ENTER { if (inventChq || Cheque.Rows.Count == 0) break;//r if (!(ADMIN_STATE || UserConfig.Properties[23])) { //if (admin.ShowDialog() != DialogResult.OK) MMessageBox.Show(this, "Закриття чеку заблоковано", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break;//r } // if we use legal printer if (Program.Service.UseEKKR) { // we close legal cheque CloseCheque(true); } else { // if we don't use legal printer and // if we allow to close normal cheque or admin mode is active if (UserConfig.Properties[6]) { // we close normal cheque CloseCheque(false); } else MMessageBox.Show(this, "Закриття чеку заблоковано", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); } break; } #endregion case 0x17: #region CONTROL + SHIFT + ENTER { if (inventChq) break;//r if (Cheque.Rows.Count == 0 && UserConfig.Properties[12]) { string nextChqNom = string.Empty; object[] localData = CoreLib.NonFxChqsInfo(0, ref nextChqNom); DDM_Status.Text = string.Format("За {1} продано {0} чек(ів) на суму {2:F" + AppConfig.APP_MoneyDecimals + "}", localData[0], localData[1], CoreLib.GetDouble(localData[2].ToString())); break;//r } if (Cheque.Rows.Count == 0)// || !Program.Service.UseEKKR) break;//r if (!(ADMIN_STATE || (UserConfig.Properties[23] && UserConfig.Properties[6]) )) { MMessageBox.Show(this, "Закриття чеку заблоковано", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break; } if (AppConfig.Content_Common_PromptMsgOnIllegal && DialogResult.Yes != MMessageBox.Show(this, "Закрити чек без фіксації оплати", Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)) break;//r /* if (!(ADMIN_STATE || (UserConfig.Properties[23] && UserConfig.Properties[6]))) if (admin.ShowDialog() != DialogResult.OK) break;//r */ CloseCheque(false); break; } #endregion case 0x18: #region F5 { if (!AppConfig.APP_SrchTypesAccess[0]) { MMessageBox.Show(this, "Пошук по назві не дозволений", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (currSrchType != 0) SearchFilter(false, 0, true); else { SrchTbox.Focus(); SrchTbox.Select(SrchTbox.Text.Length, 0); } break; } #endregion case 0x19: #region F6 { if (!AppConfig.APP_SrchTypesAccess[1]) { MMessageBox.Show(this, "Пошук по коду не дозволений", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (currSrchType != 1) SearchFilter(false, 1, true); else { SrchTbox.Focus(); SrchTbox.Select(SrchTbox.Text.Length, 0); } break; } #endregion case 0x1A: #region F7 { //winapi.WinAPI.OutputDebugString("F7"); if (!AppConfig.APP_SrchTypesAccess[2]) { MMessageBox.Show(this, "Пошук по штрих-коду не дозволений", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); break;//r } if (currSrchType != 2) SearchFilter(false, 2, true); else { SrchTbox.Focus(); SrchTbox.Select(0, SrchTbox.Text.Length); } break; } #endregion case 0x1B: #region F8 { if (Cheque.ExtendedProperties.Contains("BILL")) MMessageBox.Show(this, "Відкритий рахунок №" + " " + Cheque.ExtendedProperties["NOM"], Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); break; } #endregion case 0x1C: #region F9 { string infoText = string.Empty; UserSchema us = new UserSchema(); infoText += UserConfig.UserID; infoText += "\r\n\r\n--------------------------------------------------\r\n\r\n"; for (int i = 0; i < UserSchema.ITEMS_COUNT; i++) infoText += us.SchemaItems[i] + " : " + (UserConfig.Properties[i] ? "Так" : "Ні") + "\r\n"; MMessageBox.Show(infoText, UserConfig.UserID); break; } #endregion case 0x1D: #region ESCAPE { SearchFilter(false, AppConfig.APP_SearchType, true); break; } #endregion case 0x1E: #region CONTROL + Q { if (inventChq) break;//r nakladna = !nakladna; if (nakladna) CashLbl.Image = Properties.Resources.naklad; else CashLbl.Image = null; break; } #endregion case 0x1F: #region CONTROL { if (chequeDGV.CurrentCell != null && chequeDGV.CurrentCell.IsInEditMode) chequeDGV.EndEdit(); break; } #endregion } #endregion //winapi.Funcs.OutputDebugString("W"); } if (m.Msg == (int)CoreLib.MyMsgs.WM_UPDATE) { if (_fl_canUpdate) this.timer1_Tick(this.timer1, EventArgs.Empty); } }