//================================================================================================================= static void ProcesingKey(Menu.KEY key) { switch (lcd.Screen) { // hlavni nabidka --------------------------------------------------------------------------------- case (int)Menu.SCREEN.mainMenu: if (Card.type < (int)ROLE.SERVICE_BOTTLE) { error(1000, " Access denied ", (int)Menu.SCREEN.mainMenu); } else { switch (key) { case Menu.KEY.changeBottle: // change bottle if (Card.type == (int)ROLE.SERVICE_BOTTLE || Card.type > (int)ROLE.SERVICE_CREDIT) { selectedVolumeBottle = 0; selectedBottle = 0; selectedDose = 0; selectedMenu = (int)Menu.KEY.select_1; lcd.Screen = (int)Menu.SCREEN.selectBottle1; lcd.Print(20, 20, 3, 1, "Position is not selected"); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.changePrice: if (Card.type > (int)ROLE.SERVICE_CREDIT) { selectedVolumeBottle = 0; selectedBottle = 0; selectedDose = 0; selectedMenu = (int)Menu.KEY.changePrice; lcd.Screen = (int)Menu.SCREEN.selectBottle1; lcd.Print(20, 20, 3, 1, "Position is not selected"); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.changeCalibration: if (Card.type > (int)ROLE.SERVICE_CREDIT) { selectedVolumeBottle = 0; selectedBottle = 0; selectedDose = 0; selectedMenu = (int)Menu.KEY.changeCalibration; lcd.Screen = (int)Menu.SCREEN.selectBottle1; lcd.Print(20, 20, 3, 1, "Position is not selected"); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.changeDate: // change date if (Card.type > (int)ROLE.SERVICE_CREDIT) { lcd.Screen = (int)Menu.SCREEN.setDate; Menu.GetTimeDate(); lcd.PrintSettDate(Menu.dayNew, Menu.monthNew, Menu.yearNew); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.changeTime: // change time if (Card.type > (int)ROLE.SERVICE_CREDIT) { lcd.Screen = (int)Menu.SCREEN.setTime; Menu.GetTimeDate(); lcd.PrintSettTime(Menu.hourNew, Menu.minNew); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.systemSetting: // system setting if (Card.type > (int)ROLE.SERVICE) { lcd.Screen = (int)Menu.SCREEN.service; Settings.FindIndexCurrency(); PrintSettings(); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.systemLogger: // system logger if (Card.type > (int)ROLE.SERVICE_CREDIT) { //lcd.Screen = (int)Menu.SCREEN.logger; //loggLines = Logger.ReadLogg(); //cntPages = (loggLines.Count / 16); //if (loggLines.Count % 16 > 0) cntPages++; //curPage = 1; //PrintLogg(curPage); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.cleaning: // credit manage if (Card.type > (int)ROLE.SERVICE_BOTTLE) { lcd.Screen = (int)Menu.SCREEN.cleaning; lcd.Print(180, 20, 3, 1, "Cleaning", 0x81); lcd.Print(60, 55, 2, 1, "push button on selected position", 0x81); lcd.FillRectangle(touch_red, 0x0000, 180, 180, 300, 240); lcd.Print(215, 195, 2, 1, "STOP", 0x81); lcd.TouchSettings(TouchState.shut_1E); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; case Menu.KEY.info: // info if (Card.type > (int)ROLE.SERVICE_CREDIT) { lcd.Screen = (int)Menu.SCREEN.info; Thread.Sleep(10); Info(); } else { error(2000, " Access denied ", (int)Menu.SCREEN.mainMenu); } break; } key = 0; } break; // vyber lahve ------------------------------------------------------------------------------------ case (int)Menu.SCREEN.selectBottle1: case (int)Menu.SCREEN.selectBottle2: switch (key) { case Menu.KEY.NEXT: selectedBottle = 0; lcd.Screen = (int)Menu.SCREEN.selectBottle2; ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.PREV: selectedBottle = 0; lcd.Screen = (int)Menu.SCREEN.selectBottle1; ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.ESC: selectedBottle = 0; lcd.Screen = (int)Menu.SCREEN.mainMenu; break; default: lcd.Print(10, 20, 3, 1, "Position is not selected"); selectedBottle = Menu.GetSelectedBottle(key); if (selectedBottle > 0 && selectedBottle <= Settings.buttonNumber) { switch (selectedMenu) { case (int)Menu.KEY.changeBottle: lcd.Screen = (int)Menu.SCREEN.selectVolumeBottle; ProcesingKey(Menu.KEY.noKey); break; case (int)Menu.KEY.changePrice: lcd.Screen = (int)Menu.SCREEN.selectDose; ProcesingKey(Menu.KEY.noKey); break; case (int)Menu.KEY.changeCalibration: lcd.Screen = (int)Menu.SCREEN.set4Number; lcd.Print(20, 5, 2, 11, "Selected position is " + selectedBottle.ToString()); lcd.Print(20, 30, 2, 1, "Push button on selected position"); calib c = calibration.GetCalib(selectedBottle); calibrationNew = (int)(10000 / c.coef); lcd.PrintSettings(4, calibrationNew, "ml"); // zapíše původní kalibrační hodnotu break; } } else if (selectedBottle != 0) { error(1000, "Position " + (int)key + " is not occupied", lcd.Screen); } break; } break; // vyber objemu lahve ---------------------------------------------------------------------- case (int)Menu.SCREEN.selectVolumeBottle: Bottle svb = new Bottle(selectedBottle); switch (key) { case Menu.KEY.ESC: selectedBottle = 0; lcd.Screen = (int)Menu.SCREEN.selectBottle1; // navrat na vyber lahve ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.select_1: selectedVolumeBottle = svb.Volume; lcd.Screen = (int)Menu.SCREEN.set3Number; ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.select_2: // zkopiruji volume selectedVolumeBottle = svb.Volume; int bottleResidue = svb.Residue; svb.SetVolume(svb.Volume); // vybrany objem svb.SaveBottle(selectedBottle); // a ulozim do stavu ArrayList log = new ArrayList(); log.AddParam(LOG.TIME, DateTime.Now.ToString("HH:mm:ss")); log.AddParam(LOG.CARD, Card.cardid); log.AddParam(LOG.EVENT, EVENT.BOTTLECHANGE); log.AddParam(LOG.BOTTLE, selectedBottle); log.AddParam(LOG.BTLVOLUME, selectedVolumeBottle); log.AddParam(LOG.RESIDUE, bottleResidue); Logger.WriteLogg(log); selectedBottle = 0; selectedVolumeBottle = 0; SucessSave(2000, (int)Menu.SCREEN.selectBottle1); break; default: lcd.Print(20, 5, 2, 11, "Selected position is " + selectedBottle.ToString()); lcd.Print(20, 30, 2, 11, svb.Name); lcd.Print(310, 75, 2, 5, svb.Volume.ToString() + "ml"); lcd.Print(20, 110, 2, 1, "Residue"); lcd.Print(20, 140, 2, 1, svb.Residue.ToString() + " ml"); lcd.Print(20, 230, 3, 1, "Select option above"); break; } break; // vyber davky ------------------------------------------------------------------------------------ case (int)Menu.SCREEN.selectDose: Bottle sd = new Bottle(selectedBottle); switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.selectBottle1; // navrat na vyber lahve ProcesingKey(Menu.KEY.noKey); break; default: lcd.Print(20, 20, 3, 11, "Selected position is " + selectedBottle.ToString()); lcd.Print(20, 230, 2, 1, "Please select dose for changes"); selectedDose = Menu.GetSelectedDose(key); if (selectedDose > 0) { // nactu nastaveni switch (selectedDose) { case 1: priceNew = sd.SmallPrice; // cena calibrationNew = sd.SmallTime; // doba vydeje break; case 2: priceNew = sd.MiddlePrice; calibrationNew = sd.MiddleTime; break; case 3: priceNew = sd.LargePrice; calibrationNew = sd.LargeTime; break; } if (selectedMenu == (int)Menu.KEY.changePrice) // price { lcd.Screen = (int)Menu.SCREEN.set5Number; ProcesingKey(Menu.KEY.noKey); } else if (selectedMenu == (int)Menu.KEY.changeCalibration) // calibration { lcd.Screen = (int)Menu.SCREEN.set4Number; ProcesingKey(Menu.KEY.noKey); } } break; } break; // nastaveni ceny --------------------------------------------------------------------------------- case (int)Menu.SCREEN.set5Number: Bottle set5 = new Bottle(selectedBottle); string sdose = (selectedDose == 1) ? "small" : (selectedDose == 2) ? "medium" : "large"; switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.selectDose; // ESC ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.ENT: set5.SetPrice(selectedDose, priceNew); // nova cena set5.SaveBottle(selectedBottle); // ulozim vse ButtonRS485.SendSettings(selectedBottle); ArrayList log = new ArrayList(); log.AddParam(LOG.TIME, DateTime.Now.ToString("HH:mm:ss")); log.AddParam(LOG.CARD, Card.cardid); log.AddParam(LOG.EVENT, EVENT.PRICECHANGE); log.AddParam(LOG.BOTTLE, selectedBottle); log.AddParam(LOG.DOSE, selectedDose); log.AddParam(LOG.PRICE, priceNew); Logger.WriteLogg(log); SucessSave(2000, (int)Menu.SCREEN.selectDose); break; default: priceNew = Menu.SetPriceNew(key, priceNew); lcd.Print(20, 5, 2, 11, "Selected position is " + selectedBottle.ToString()); lcd.Print(20, 30, 2, 1, "Selected dose is " + sdose); lcd.PrintSettings(5, priceNew, Settings.currency); break; } break; // kalibrace -------------------------------------------------------------------------------------- case (int)Menu.SCREEN.set4Number: calib set4_c = calibration.GetCalib(selectedBottle); Bottle set4_b = new Bottle(selectedBottle); switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.selectBottle1; ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.ENT: set4_c.Caluclate(calibrationNew, set4_b.SmallDose, set4_b.MiddleDose, set4_b.LargeDose); calibration.SaveCalib(selectedBottle, set4_c); set4_b.SmallTime = set4_c.small; set4_b.MiddleTime = set4_c.medium; set4_b.LargeTime = set4_c.large; set4_b.SaveBottle(selectedBottle); calibrationNew = 0; // vynuluje calib new ArrayList log = new ArrayList(); log.AddParam(LOG.TIME, DateTime.Now.ToString("HH:mm:ss")); log.AddParam(LOG.CARD, Card.cardid); log.AddParam(LOG.EVENT, EVENT.CALIBRATION); log.AddParam(LOG.BOTTLE, selectedBottle); log.AddParam(LOG.DOSE, "123"); log.AddParam(LOG.CALIBTIME, (set4_c.coef * 1000).ToString()); Logger.WriteLogg(log); SucessSave(2000, (int)Menu.SCREEN.selectBottle1); break; default: calibrationNew = Menu.newNum(key, calibrationNew); lcd.Print(20, 5, 2, 11, "Selected position is " + selectedBottle.ToString()); lcd.Print(20, 30, 2, 1, new StringBuilder().Insert(0, " ", 32).ToString()); lcd.Print(20, 30, 2, 1, "Insert dose in ml"); lcd.PrintSettings(4, calibrationNew, "ml"); break; } break; // nastaveni vlastniho objemu --------------------------------------------------------------------- case (int)Menu.SCREEN.set3Number: Bottle rlahev = new Bottle(selectedBottle); switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.selectVolumeBottle; ProcesingKey(Menu.KEY.noKey); break; case Menu.KEY.ENT: if (selectedVolumeBottle > 0 && selectedVolumeBottle <= rlahev.Volume) { int btlresidue = rlahev.Residue; rlahev.Residue = selectedVolumeBottle; rlahev.SaveBottle(selectedBottle); ArrayList log = new ArrayList(); log.AddParam(LOG.TIME, DateTime.Now.ToString("HH:mm:ss")); log.AddParam(LOG.CARD, Card.cardid); log.AddParam(LOG.EVENT, EVENT.BOTTLECHANGE); log.AddParam(LOG.BOTTLE, selectedBottle); log.AddParam(LOG.BTLVOLUME, selectedVolumeBottle); log.AddParam(LOG.RESIDUE, btlresidue); Logger.WriteLogg(log); selectedVolumeBottle = 0; selectedBottle = 0; SucessSave(2000, (int)Menu.SCREEN.selectBottle1); } else if (selectedVolumeBottle > rlahev.Volume) { error(2000, " Value must be less than " + rlahev.Volume.ToString(), (int)Menu.SCREEN.set3Number); } else { error(2000, " Value must be bigger than 0 ", (int)Menu.SCREEN.set3Number); } break; default: selectedVolumeBottle = Menu.newNum(key, selectedVolumeBottle); lcd.Print(20, 5, 2, 11, "Selected position is " + selectedBottle.ToString()); lcd.Print(20, 30, 2, 1, "Set actual residue"); lcd.PrintSettings(4, selectedVolumeBottle, " ml"); break; } break; // nastaveni datum -------------------------------------------------------------------------------- case (int)Menu.SCREEN.setDate: switch (key) { case Menu.KEY.ENT: Utility.SetLocalTime(lcd.AdjustDateTime("date")); // ulozim do RTCC v LCD a local SucessSave(1000, (int)Menu.SCREEN.mainMenu); break; case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.mainMenu; // ESC break; default: Menu.SetDateNew(key); lcd.PrintSettDate(Menu.dayNew, Menu.monthNew, Menu.yearNew); break; } break; // nastaveni hodiny ------------------------------------------------------------------------------- case (int)Menu.SCREEN.setTime: switch (key) { case Menu.KEY.ENT: Thread.Sleep(10); Utility.SetLocalTime(lcd.AdjustDateTime("time")); // ulozim do RTCC v LCD a local SucessSave(1000, (int)Menu.SCREEN.mainMenu); break; case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.mainMenu; // ESC break; default: Menu.SetTimeNew(key); lcd.PrintSettTime(Menu.hourNew, Menu.minNew); break; } break; // servis --------------------------------------------------------------------------------------------- case (int)Menu.SCREEN.service: switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.mainMenu; break; case Menu.KEY.ENT: Settings.SaveSettings(); // ulozim na SD SucessSave(1000, (int)Menu.SCREEN.mainMenu); break; case Menu.KEY.dec_2: Settings.SetPosition("sub2"); PrintSettings(); break; case Menu.KEY.inc_2: Settings.SetPosition("add2"); PrintSettings(); break; case Menu.KEY.PREV: // prev Settings.SetIndexCurrency("dec"); PrintSettings(); break; case Menu.KEY.NEXT: // next Settings.SetIndexCurrency("inc"); PrintSettings(); break; case Menu.KEY.inc_10: // +10 Settings.SetMinresidue("add10"); PrintSettings(); break; case Menu.KEY.dec_10: // Settings.SetMinresidue("sub10"); PrintSettings(); break; } break; //------------------------------------------------------------------------------------------------- case (int)Menu.SCREEN.cleaning: if (key == Menu.KEY.stopClean) { Rising.Clear(); lcd.TouchSettings(TouchState.on); lcd.Screen = (int)Menu.SCREEN.mainMenu; } break; //------------------------------------------------------------------------------------------------- case (int)Menu.SCREEN.info: // info switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.mainMenu; // ESC break; } break; // logger --------------------------------------------------------------------------------------------- case (int)Menu.SCREEN.logger: switch (key) { case Menu.KEY.ESC: lcd.Screen = (int)Menu.SCREEN.mainMenu; break; case Menu.KEY.NEXT: if (curPage < cntPages) curPage++; PrintLogg(curPage); break; case Menu.KEY.PREV: if (curPage > 1) curPage--; PrintLogg(curPage); break; case Menu.KEY.END: curPage = cntPages; PrintLogg(curPage); break; } break; } }
//----------------------------------------------------------------------------------------------------------- static void Dispensing(int bottle, Choice choice) { if (!blockTouch) { Bottle lahev = new Bottle(bottle); int dose = 0; // objem v cl int price = 0; int onTime = 0; int pieces = 0; // pocet kusu Int64 Credit = 0; switch (choice) { case Choice.small: pieces = lahev.SmallPieces; dose = lahev.SmallDose; price = lahev.SmallPrice; // je sleva ? if (Card.discount > 0) { price -= (price / 100) * Card.discount; } onTime = lahev.SmallTime; break; case Choice.medium: pieces = lahev.MiddlePieces; dose = lahev.MiddleDose; price = lahev.MiddlePrice; // je sleva ? if (Card.discount > 0) { price -= (price / 100) * Card.discount; } onTime = lahev.MiddleTime; break; case Choice.large: pieces = lahev.LargePieces; dose = lahev.LargeDose; price = lahev.LargePrice; // je sleva ? if (Card.discount > 0) { price -= (price / 100) * Card.discount; } onTime = lahev.LargeTime; break; } if ((lahev.Residue - dose) >= Settings.minResidue) { if (onTime > 0 && dose > 0) { if (Card.credit >= price) { Credit = Card.credit - (Int32)price; // odectu kredit lahev.AddTotalDose(dose); // prictu do lokalni statistiky hodnotu //lahev.AddTotalPrice(price); // prictu do lokalni statistiky cenu lahev.SetResiude(lahev.Residue - dose); // odectu z lahve dose lahev.IncPieces((int)choice); // prictu kusy pieces++; Bill.PurchaseAdd(price); // prictu nakup string txtDoseVal = dose.ToString() + "ml"; string billLine = (StringPad(2, Bill.RowBill.ToString()) + ". " + StringPad(2, bottle.ToString()) + " " + StringPad(5, txtDoseVal) + " " + StringPad(10, price, true)); Bill.BillLineAdd(billLine); ButtonRS485.VentilsOnTime(FromButton.bottle, onTime); BUTTON = false; PARSEBUTTON = false; sl031.SetCreditNew(Credit); lahev.SaveBottle(bottle); Thread.Sleep((onTime * 10) + 500); // a cekam :-) lcd.PrintBill(290, billLine); LcdUpdateClient("credit"); ArrayList log = new ArrayList(); log.AddParam(LOG.TIME, DateTime.Now.ToString("HH:mm:ss")); log.AddParam(LOG.CARD, Card.cardid); log.AddParam(LOG.EVENT, EVENT.DISPENSING); log.AddParam(LOG.BOTTLE, bottle); log.AddParam(LOG.RESIDUE, lahev.Residue); log.AddParam(LOG.DOSE, (int)choice); log.AddParam(LOG.PRICE, price); Logger.WriteLogg(log); dispensed = true; } else // uz neni ani panak { dispensed = false; lcd.Beep(10); lcd.FillRectangle(0x0000, 0xFFFF, 5, 5, 475, 267); lcd.Print(20, 80, 2, 1, ("We are sorry, but you have low credit"), 0x81); lcd.Print(100, 140, 2, 1, ("Your balance: " + StringPad(2, (int)Credit, true) + " " + Settings.currency), 0x81); lcd.Print(100, 170, 2, 4, ("Price for: " + StringPad(2, price, true) + " " + Settings.currency), 0x81); BlockTouch(5000, (int)Menu.SCREEN.cardUser); } } else if (dose == 0) { dispensed = false; lcd.Beep(10); lcd.FillRectangle(0x0000, 0xFFFF, 5, 5, 475, 267); lcd.Print(15, 80, 2, 1, ("We are sorry, selected dose is blocked"), 0x81); lcd.Print(60, 140, 2, 4, ("Reason: dose volume is 0 ml"), 0x81); BlockTouch(5000, (int)Menu.SCREEN.cardUser); } else { dispensed = false; lcd.Beep(10); lcd.FillRectangle(0x0000, 0xFFFF, 5, 5, 475, 267); lcd.Print(15, 80, 2, 1, ("We are sorry, selected dose is blocked"), 0x81); lcd.Print(60, 140, 2, 4, ("Reason: wrong calibration"), 0x81); BlockTouch(5000, (int)Menu.SCREEN.cardUser); } } else { dispensed = false; string wineName = String.Empty; lcd.Beep(10); lcd.FillRectangle(0x0000, 0xFFFF, 5, 5, 475, 267); if ((lahev.Residue - lahev.SmallDose) < Settings.minResidue) { if (lahev.Name.Length > 24) { wineName = "Wine: " + lahev.Name.Substring(0, 20) + " ..."; } else { wineName = "Wine: " + lahev.Name; } string pos = "Position " + bottle + " is empty"; int _leftPos = 240 - ((pos.Length / 2) * 16); int _left = 240 - ((wineName.Length / 2) * 12); lcd.Print(_leftPos, 80, 3, 1, pos, 0x81); lcd.Print(_left, 140, 2, 1, wineName, 0x81); } else if ((lahev.Residue - lahev.MiddleDose) < Settings.minResidue) { string pos = "Only small dose"; int _leftPos = 240 - ((pos.Length / 2) * 16); lcd.Print(_leftPos, 80, 3, 1, pos, 0x81); } else if ((lahev.Residue - lahev.LargeDose) < Settings.minResidue) { string pos = "Only small and medium dose"; int _leftPos = 240 - ((pos.Length / 2) * 16); lcd.Print(_leftPos, 80, 3, 1, pos, 0x81); } lcd.Print(160, 170, 2, 4, "Residue: " + lahev.Residue + " ml", 0x81); BlockTouch(5000, (int)Menu.SCREEN.cardUser); } BUTTON = true; PARSEBUTTON = true; } }