Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- pagamento bollette V3 lego11
- os.pullEvent = os.pullEventRaw
- local maxw, maxh = term.getSize()
- -- VARIABILI
- lbl = "BN Credit"
- tabr = {}
- m = peripheral.wrap("right") -- magcard
- printer = peripheral.wrap("back") -- stampante
- cb = peripheral.wrap("bottom") -- commandblock
- function clear()
- term.clear()
- term.setCursorPos(1, 1)
- end
- function clearRed()
- sfondo(colors.red)
- term.clear()
- term.setCursorPos(1, 1)
- end
- function colore(sfumatura) term.setTextColour(sfumatura) end
- function sfondo(sfumaturaSfondo) term.setBackgroundColour(sfumaturaSfondo) end
- function fineColore() term.setTextColour(colours.white) end
- function fineSfondo() term.setBackgroundColour(colours.black) end
- -- IMPLEMENTAZIONE DEL DRAWFILLEDBOX
- local function drawPixelInternal(xPos, yPos)
- term.setCursorPos(xPos, yPos)
- term.write(" ")
- end
- local tColourLookup = {}
- for n = 1, 16 do
- tColourLookup[string.byte("0123456789abcdef", n, n)] = 2 ^ (n - 1)
- end
- function drawFilledBox(startX, startY, endX, endY, nColour)
- if type(startX) ~= "number" or type(startX) ~= "number" or type(endX) ~=
- "number" or type(endY) ~= "number" or
- (nColour ~= nil and type(nColour) ~= "number") then
- error("Expected startX, startY, endX, endY, colour", 2)
- end
- startX = math.floor(startX)
- startY = math.floor(startY)
- endX = math.floor(endX)
- endY = math.floor(endY)
- if nColour then term.setBackgroundColor(nColour) end
- if startX == endX and startY == endY then
- drawPixelInternal(startX, startY)
- return
- end
- local minX = math.min(startX, endX)
- if minX == startX then
- minY = startY
- maxX = endX
- maxY = endY
- else
- minY = endY
- maxX = startX
- maxY = startY
- end
- for x = minX, maxX do for y = minY, maxY do drawPixelInternal(x, y) end end
- end
- function titolo(testo)
- drawFilledBox(1, 1, maxw, 1, colors.yellow)
- term.setCursorPos((maxw - #testo) / 2, 1)
- colore(colors.black)
- term.write(testo)
- sfondo(colors.blue)
- end
- function errore(errore)
- sfondo(colors.red)
- colore(colors.white)
- term.clear()
- term.setCursorPos(1, 1)
- titolo("Errore irreversibile")
- term.setCursorPos(1, 3)
- sfondo(colors.red)
- colore(colors.white)
- print(errore)
- print("\n\n\nAttendere qualche secondo...")
- os.sleep(5)
- os.reboot()
- end
- function pinErrato()
- clear()
- print("Errore di verifica del PIN")
- print("")
- print("Premere un tasto per uscire")
- os.pullEvent("key")
- print("")
- print("Ritirare il Disco Bolletta Elettronico")
- disk.eject("left")
- sleep(1)
- os.reboot()
- end
- function cartaNonValida()
- clear()
- print("Carta non valida o corrotta.")
- print("")
- print("Premere un tasto per uscire")
- os.pullEvent("key")
- print("")
- print("Ritirare il Disco Bolletta Elettronico")
- disk.eject("left")
- sleep(1)
- os.reboot()
- end
- function cartaVuota()
- clear()
- print("Carta smagnetizzata o vuota.")
- print("")
- print("Premere un tasto per uscire")
- os.pullEvent("key")
- print("")
- print("Ritirare il Disco Bolletta Elettronico")
- disk.eject("left")
- sleep(1)
- os.reboot()
- end
- function preleva()
- tabr.t = tabc.t
- tabr.e = tabc.e
- tabr.p = tabc.p
- tabr.v = tostring(credito - prelievo)
- ncr = textutils.serialize(tabr)
- m.setInsertCardLight(true)
- m.beginWrite(ncr, lbl)
- os.pullEvent("mag_write_done")
- m.setInsertCardLight(false)
- end
- s = peripheral.wrap("back")
- m = peripheral.wrap("right")
- lbl = "BN Credit"
- function tocerror()
- clear()
- print("TOC ERROR")
- print("")
- print(
- "Disco errato o danneggiato. Controllare il disco e ritentare l'operazione")
- print("")
- print("Premere un tasto qualsiasi per uscire.")
- os.pullEvent("key")
- disk.eject("left")
- os.reboot()
- end
- function bailOut()
- sleep(5)
- clear()
- print("Uscita comandata dall'utente")
- print("")
- print("Bolletta NON PAGATA.")
- print("")
- disk.eject("left")
- print("Ritirare il Disco Bolletta Elettronica")
- sleep(5)
- os.reboot()
- end
- clear()
- print("eRGB - Sistema Pagamento Bollette")
- print("")
- print("Inserire il Disco Bolletta Elettronica nel lettore floppy a sinistra")
- print("")
- print("IMPORTANTE:")
- print("NON estrarre il disco manualmente dal lettore!")
- print("Verrà riciclato o espulso automaticamente!")
- os.pullEvent("disk")
- etichetta = disk.getLabel("left")
- if string.find(etichetta, "DBE") == nil then tocerror() end
- handle = assert(fs.open("disk/be", "r"), "ERRORE: disco non formattato")
- bedisco = handle.readAll()
- handle.close()
- tab = textutils.unserialize(bedisco) -- Tabella contenente le variabili
- prelievo = tonumber(tab.totale)
- clear()
- print(
- "Per favore scegliere un'opzione utilizzando i tasti numerici e confermare con ENTER:")
- print("")
- print("[1] Proseguire con carta di credito")
- print("[2] Proseguire con Nebraska Pay")
- print("[3] Uscire senza pagare la bolletta")
- num = tonumber(read())
- if num == 1 then
- clear()
- print("Inserire la carta di credito nel lettore a destra")
- m.setInsertCardLight(true)
- za, rawcarta = os.pullEvent("mag_swipe")
- m.setInsertCardLight(false)
- if rawcarta == nil then cartaVuota() end
- tabc = textutils.unserialize(rawcarta)
- if type(tabc) ~= "table" then cartaNonValida() end
- if tabc.t ~= "cc" then cartaNonValida() end
- if tabc.e ~= "BN" then cartaNonValida() end
- if tabc.p ~= "0000" then
- print("")
- print("Inserire il PIN e premere ENTER")
- print("")
- pinUtente = read("#")
- if pinUtente ~= tabc.p then pinErrato() end
- end
- credito = tonumber(tabc.v)
- metodoPagamento = "CC"
- elseif num == 2 then
- sfondo(colours.blue)
- term.clear()
- term.setCursorPos(1, 1)
- titolo("Paga con Nebraska Pay")
- sfondo(colours.blue)
- colore(colors.white)
- print(
- "\n\nInserire i propri dati. Premere Enter per confermare i dati inseriti. \nSe i dati sono corretti, il campo diventerà verde. Se sono errati, il programma chiederà di reinserirli nuovamente.")
- -- nomeutente
- term.setCursorPos(1, 9)
- term.write("Nome utente:")
- term.setCursorPos(15, 9)
- fineColore()
- utenteAccettato = false
- conteggioErrori = 0
- while utenteAccettato == false do
- utente = read()
- checkuser = http.get(
- "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=no&richiesta=verifica&utente=" ..
- utente).readAll()
- tabcheckuser = textutils.unserialize(checkuser)
- if tabcheckuser.stato == "OK" then
- term.setCursorPos(15, 9)
- colore(colours.lime)
- term.write(utente)
- fineColore()
- utenteAccettato = true
- else
- term.setCursorPos(15, 9)
- colore(colours.red)
- term.write("Utente errato! ")
- sleep(2)
- term.setCursorPos(15, 9)
- fineColore()
- term.write(" ")
- term.setCursorPos(15, 9)
- conteggioErrori = conteggioErrori + 1
- if conteggioErrori > 2 then
- term.setCursorPos(15, 9)
- colore(colours.red)
- errore("Troppi tentativi di immissione errati ")
- end
- end
- end
- colore(colours.white)
- term.setCursorPos(1, 11)
- term.write("Password:")
- term.setCursorPos(15, 11)
- conteggioErrori = 0
- passAccettata = false
- while passAccettata == false do
- fineColore()
- password = read("#")
- colore(colours.black)
- checkuser = http.get(
- "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" ..
- password .. "&richiesta=addebito&valore=0&utente=" ..
- utente).readAll()
- risposta = textutils.unserialize(checkuser)
- if risposta.stato == "OK" then
- term.setCursorPos(15, 11)
- colore(colours.lime)
- term.write("############## ")
- fineColore()
- passAccettata = true
- else
- term.setCursorPos(15, 11)
- colore(colours.red)
- term.write("Password errata! ")
- conteggioErrori = conteggioErrori + 1
- sleep(2)
- term.setCursorPos(15, 11)
- term.write(" ")
- term.setCursorPos(15, 11)
- if conteggioErrori > 2 then
- term.setCursorPos(15, 11)
- colore(colours.red)
- errore("Troppi tentativi di immissione errati")
- end
- end
- end
- metodoPagamento = "NPAY"
- credito = tonumber(risposta.saldo)
- elseif num == 3 then
- bailOut()
- end
- clear()
- while true do
- if metodoPagamento == "NPAY" then
- print("Il conto ha una disponibilità di " .. credito .. " IC.")
- else
- print("La carta ha una disponibilità di " .. credito .. " IC.")
- end
- print("")
- print("Bolletta del " .. tab.date .. " intestata a " .. tab.UICnumber .. " ")
- print("")
- print("Totale da pagare: " .. prelievo .. " IC")
- print("")
- print("")
- print(
- "Per favore scegliere un'opzione utilizzando i tasti numerici e confermare con ENTER:")
- print("")
- print("[1] Pagare la bolletta SENZA ricevuta")
- print("[2] Pagare la bolletta CON ricevuta")
- print("[3] Uscire senza pagare la bolletta")
- num = tonumber(read())
- if num == 1 then
- if prelievo > credito then
- clear()
- print("Disponibilità insufficiente")
- print("")
- print("Bolletta NON PAGATA.")
- print("Riprovare con un'altra carta di credito.")
- print("")
- print("Premere un tasto qualsiasi per uscire")
- os.pullEvent("key")
- disk.eject("left")
- print("Ritirare il Disco Bolletta Elettronica")
- sleep(5)
- os.reboot()
- end
- if metodoPagamento == "CC" then
- clear()
- print("Inserire nuovamente la carta per confermare il prelievo")
- preleva()
- else
- inviaDenaro = http.get(
- "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" ..
- password .. "&utente=" .. utente ..
- "&richiesta=trasferimento&valore=" .. prelievo ..
- "&beneficiario=eRGB").readAll()
- risultatoInvio = textutils.unserialize(inviaDenaro)
- if risultatoInvio.stato == "OK" then
- colore(colors.white)
- else
- clear()
- errore("Errore durante il pagamento")
- end
- end
- clear()
- print("")
- print("Attendere, autorizzazione pagamento in corso...")
- redstone.setOutput("top", true)
- sleep(5)
- redstone.setOutput("top", false)
- print("")
- print("Pagamento effettuato correttamente!")
- print("")
- print("La bolletta è stata registrata come 'pagata'")
- print("Grazie e arrivederci!")
- print("")
- print("Tra poco sarà possibile eseguire un'altra operazione.")
- http.get("http://172.16.20.220/luanet/servlets/ergb_boll_pag.php?user="..tab.UICnumber)
- sleep(5)
- os.reboot()
- elseif num == 2 then
- if prelievo > credito then
- clear()
- print("Disponibilità insufficiente")
- print("")
- print("Bolletta NON PAGATA.")
- print("Riprovare con un'altra carta di credito.")
- print("")
- print("Premere un tasto qualsiasi per uscire")
- os.pullEvent("key")
- disk.eject("left")
- print("Ritirare il Disco Bolletta Elettronica")
- sleep(5)
- os.reboot()
- end
- clear()
- if metodoPagamento == "CC" then
- clear()
- print("Inserire nuovamente la carta per confermare il prelievo")
- preleva()
- else
- inviaDenaro = http.get(
- "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" ..
- password .. "&utente=" .. utente ..
- "&richiesta=trasferimento&valore=" .. prelievo ..
- "&beneficiario=eRGB").readAll()
- risultatoInvio = textutils.unserialize(inviaDenaro)
- if risultatoInvio.stato == "OK" then
- colore(colors.white)
- else
- clear()
- errore("Errore durante il pagamento")
- end
- end
- clear()
- print("Attendere, autorizzazione pagamento in corso...")
- redstone.setOutput("top", true)
- sleep(3)
- redstone.setOutput("top", false)
- if printer.getPaperLevel() == 0 or printer.getInkLevel() == 0 then
- cartaInceppata = 0
- print("")
- print("Errore stampante")
- print("")
- print(
- "Impossibile stampare ricevuta. Il pagamento verrà comunque effettuato.")
- print("")
- else
- print("Attendere, stampa in corso della ricevuta...")
- printer.newPage()
- printer.setPageTitle("Ricevuta eRGB")
- printer.write("Ricevuta eRGB")
- printer.setCursorPos(1, 2)
- printer.setCursorPos(1, 4)
- printer.write("La Bolletta del: ")
- printer.setCursorPos(1, 6)
- printer.write(tab.date)
- printer.setCursorPos(1, 8)
- printer.write("del cliente: ")
- printer.setCursorPos(1, 10)
- printer.write(tab.UICnumber)
- printer.setCursorPos(1, 12)
- printer.write("con un totale di:")
- printer.setCursorPos(1, 14)
- printer.write(prelievo)
- printer.setCursorPos(10, 14)
- printer.write("IC")
- printer.setCursorPos(1, 16)
- printer.write("e' stata pagata")
- printer.setCursorPos(1, 17)
- printer.write("correttamente.")
- printer.setCursorPos(1, 19)
- printer.write("Grazie per aver scelto")
- printer.setCursorPos(1, 20)
- printer.write("eRGB!")
- printer.endPage()
- sleep(2)
- print("Stampa: 25%")
- sleep(2)
- print("Stampa: 50%")
- sleep(2)
- print("Stampa: 75%")
- sleep(2)
- print("Stampa: 100%")
- sleep(2)
- print("")
- print("Ritirare la ricevuta")
- print("")
- end
- print("Pagamento effettuato correttamente!")
- print("")
- print("La bolletta è stata registrata come 'pagata'")
- http.get("http://172.16.20.220/luanet/servlets/ergb_boll_pag.php?user="..tab.UICnumber)
- print("Grazie e arrivederci!")
- print("")
- print("Tra poco sarà possibile eseguire un'altra operazione.")
- sleep(5)
- os.reboot()
- elseif num == 3 then
- clear()
- break
- end
- sleep(1)
- clear()
- end
- bailOut()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement