Advertisement
lego11

PagamentoBollette V4

May 1st, 2021 (edited)
1,379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 15.47 KB | None | 0 0
  1. -- pagamento bollette V3 lego11
  2. os.pullEvent = os.pullEventRaw
  3.  
  4. local maxw, maxh = term.getSize()
  5.  
  6. -- VARIABILI
  7. lbl = "BN Credit"
  8. tabr = {}
  9. m = peripheral.wrap("right") -- magcard
  10. printer = peripheral.wrap("back") -- stampante
  11. cb = peripheral.wrap("bottom") -- commandblock
  12.  
  13. function clear()
  14.     term.clear()
  15.     term.setCursorPos(1, 1)
  16. end
  17.  
  18. function clearRed()
  19.     sfondo(colors.red)
  20.     term.clear()
  21.     term.setCursorPos(1, 1)
  22. end
  23.  
  24. function colore(sfumatura) term.setTextColour(sfumatura) end
  25.  
  26. function sfondo(sfumaturaSfondo) term.setBackgroundColour(sfumaturaSfondo) end
  27.  
  28. function fineColore() term.setTextColour(colours.white) end
  29.  
  30. function fineSfondo() term.setBackgroundColour(colours.black) end
  31.  
  32.  
  33. -- IMPLEMENTAZIONE DEL DRAWFILLEDBOX
  34. local function drawPixelInternal(xPos, yPos)
  35.     term.setCursorPos(xPos, yPos)
  36.     term.write(" ")
  37. end
  38.  
  39. local tColourLookup = {}
  40. for n = 1, 16 do
  41.     tColourLookup[string.byte("0123456789abcdef", n, n)] = 2 ^ (n - 1)
  42. end
  43.  
  44. function drawFilledBox(startX, startY, endX, endY, nColour)
  45.     if type(startX) ~= "number" or type(startX) ~= "number" or type(endX) ~=
  46.         "number" or type(endY) ~= "number" or
  47.         (nColour ~= nil and type(nColour) ~= "number") then
  48.         error("Expected startX, startY, endX, endY, colour", 2)
  49.     end
  50.  
  51.     startX = math.floor(startX)
  52.     startY = math.floor(startY)
  53.     endX = math.floor(endX)
  54.     endY = math.floor(endY)
  55.  
  56.     if nColour then term.setBackgroundColor(nColour) end
  57.     if startX == endX and startY == endY then
  58.         drawPixelInternal(startX, startY)
  59.         return
  60.     end
  61.  
  62.     local minX = math.min(startX, endX)
  63.     if minX == startX then
  64.         minY = startY
  65.         maxX = endX
  66.         maxY = endY
  67.     else
  68.         minY = endY
  69.         maxX = startX
  70.         maxY = startY
  71.     end
  72.  
  73.     for x = minX, maxX do for y = minY, maxY do drawPixelInternal(x, y) end end
  74. end
  75.  
  76.  
  77. function titolo(testo)
  78.     drawFilledBox(1, 1, maxw, 1, colors.yellow)
  79.     term.setCursorPos((maxw - #testo) / 2, 1)
  80.     colore(colors.black)
  81.     term.write(testo)
  82.     sfondo(colors.blue)
  83. end
  84.  
  85. function errore(errore)
  86.     sfondo(colors.red)
  87.     colore(colors.white)
  88.     term.clear()
  89.     term.setCursorPos(1, 1)
  90.     titolo("Errore irreversibile")
  91.     term.setCursorPos(1, 3)
  92.     sfondo(colors.red)
  93.     colore(colors.white)
  94.     print(errore)
  95.     print("\n\n\nAttendere qualche secondo...")
  96.     os.sleep(5)
  97.     os.reboot()
  98. end
  99.  
  100. function pinErrato()
  101.     clear()
  102.     print("Errore di verifica del PIN")
  103.     print("")
  104.     print("Premere un tasto per uscire")
  105.     os.pullEvent("key")
  106.     print("")
  107.     print("Ritirare il Disco Bolletta Elettronico")
  108.     disk.eject("left")
  109.     sleep(1)
  110.     os.reboot()
  111. end
  112.  
  113. function cartaNonValida()
  114.     clear()
  115.     print("Carta non valida o corrotta.")
  116.     print("")
  117.     print("Premere un tasto per uscire")
  118.     os.pullEvent("key")
  119.     print("")
  120.     print("Ritirare il Disco Bolletta Elettronico")
  121.     disk.eject("left")
  122.     sleep(1)
  123.     os.reboot()
  124. end
  125.  
  126. function cartaVuota()
  127.     clear()
  128.     print("Carta smagnetizzata o vuota.")
  129.     print("")
  130.     print("Premere un tasto per uscire")
  131.     os.pullEvent("key")
  132.     print("")
  133.     print("Ritirare il Disco Bolletta Elettronico")
  134.     disk.eject("left")
  135.     sleep(1)
  136.     os.reboot()
  137. end
  138.  
  139. function preleva()
  140.     tabr.t = tabc.t
  141.     tabr.e = tabc.e
  142.     tabr.p = tabc.p
  143.     tabr.v = tostring(credito - prelievo)
  144.     ncr = textutils.serialize(tabr)
  145.     m.setInsertCardLight(true)
  146.     m.beginWrite(ncr, lbl)
  147.     os.pullEvent("mag_write_done")
  148.     m.setInsertCardLight(false)
  149. end
  150.  
  151. s = peripheral.wrap("back")
  152. m = peripheral.wrap("right")
  153. lbl = "BN Credit"
  154.  
  155. function tocerror()
  156.     clear()
  157.     print("TOC ERROR")
  158.     print("")
  159.     print(
  160.         "Disco errato o danneggiato. Controllare il disco e ritentare l'operazione")
  161.     print("")
  162.     print("Premere un tasto qualsiasi per uscire.")
  163.     os.pullEvent("key")
  164.     disk.eject("left")
  165.     os.reboot()
  166. end
  167.  
  168. function bailOut()
  169.     sleep(5)
  170.     clear()
  171.     print("Uscita comandata dall'utente")
  172.     print("")
  173.     print("Bolletta NON PAGATA.")
  174.     print("")
  175.     disk.eject("left")
  176.     print("Ritirare il Disco Bolletta Elettronica")
  177.     sleep(5)
  178.     os.reboot()
  179. end
  180.  
  181. clear()
  182. print("eRGB - Sistema Pagamento Bollette")
  183. print("")
  184. print("Inserire il Disco Bolletta Elettronica nel lettore floppy a sinistra")
  185. print("")
  186. print("IMPORTANTE:")
  187. print("NON estrarre il disco manualmente dal lettore!")
  188. print("Verrà riciclato o espulso automaticamente!")
  189. os.pullEvent("disk")
  190. etichetta = disk.getLabel("left")
  191. if string.find(etichetta, "DBE") == nil then tocerror() end
  192. handle = assert(fs.open("disk/be", "r"), "ERRORE: disco non formattato")
  193. bedisco = handle.readAll()
  194. handle.close()
  195. tab = textutils.unserialize(bedisco) -- Tabella contenente le variabili
  196. prelievo = tonumber(tab.totale)
  197.  
  198. clear()
  199.  
  200. print(
  201.     "Per favore scegliere un'opzione utilizzando i tasti numerici e confermare con ENTER:")
  202. print("")
  203. print("[1] Proseguire con carta di credito")
  204. print("[2] Proseguire con Nebraska Pay")
  205. print("[3] Uscire senza pagare la bolletta")
  206. num = tonumber(read())
  207. if num == 1 then
  208.     clear()
  209.     print("Inserire la carta di credito nel lettore a destra")
  210.     m.setInsertCardLight(true)
  211.     za, rawcarta = os.pullEvent("mag_swipe")
  212.     m.setInsertCardLight(false)
  213.  
  214.     if rawcarta == nil then cartaVuota() end
  215.  
  216.     tabc = textutils.unserialize(rawcarta)
  217.  
  218.     if type(tabc) ~= "table" then cartaNonValida() end
  219.  
  220.     if tabc.t ~= "cc" then cartaNonValida() end
  221.  
  222.     if tabc.e ~= "BN" then cartaNonValida() end
  223.  
  224.     if tabc.p ~= "0000" then
  225.         print("")
  226.         print("Inserire il PIN e premere ENTER")
  227.         print("")
  228.         pinUtente = read("#")
  229.         if pinUtente ~= tabc.p then pinErrato() end
  230.     end
  231.     credito = tonumber(tabc.v)
  232.  
  233.     metodoPagamento = "CC"
  234. elseif num == 2 then
  235.  
  236.     sfondo(colours.blue)
  237.     term.clear()
  238.     term.setCursorPos(1, 1)
  239.     titolo("Paga con Nebraska Pay")
  240.     sfondo(colours.blue)
  241.     colore(colors.white)
  242.     print(
  243.         "\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.")
  244.  
  245.     -- nomeutente
  246.     term.setCursorPos(1, 9)
  247.     term.write("Nome utente:")
  248.     term.setCursorPos(15, 9)
  249.     fineColore()
  250.     utenteAccettato = false
  251.     conteggioErrori = 0
  252.     while utenteAccettato == false do
  253.         utente = read()
  254.         checkuser = http.get(
  255.                         "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=no&richiesta=verifica&utente=" ..
  256.                             utente).readAll()
  257.         tabcheckuser = textutils.unserialize(checkuser)
  258.         if tabcheckuser.stato == "OK" then
  259.             term.setCursorPos(15, 9)
  260.             colore(colours.lime)
  261.             term.write(utente)
  262.             fineColore()
  263.             utenteAccettato = true
  264.         else
  265.             term.setCursorPos(15, 9)
  266.             colore(colours.red)
  267.             term.write("Utente errato!          ")
  268.             sleep(2)
  269.             term.setCursorPos(15, 9)
  270.             fineColore()
  271.             term.write("                       ")
  272.             term.setCursorPos(15, 9)
  273.             conteggioErrori = conteggioErrori + 1
  274.             if conteggioErrori > 2 then
  275.                 term.setCursorPos(15, 9)
  276.                 colore(colours.red)
  277.                 errore("Troppi tentativi di immissione errati    ")
  278.             end
  279.         end
  280.     end
  281.     colore(colours.white)
  282.     term.setCursorPos(1, 11)
  283.     term.write("Password:")
  284.     term.setCursorPos(15, 11)
  285.     conteggioErrori = 0
  286.     passAccettata = false
  287.     while passAccettata == false do
  288.         fineColore()
  289.         password = read("#")
  290.         colore(colours.black)
  291.         checkuser = http.get(
  292.                         "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" ..
  293.                             password .. "&richiesta=addebito&valore=0&utente=" ..
  294.                             utente).readAll()
  295.         risposta = textutils.unserialize(checkuser)
  296.         if risposta.stato == "OK" then
  297.             term.setCursorPos(15, 11)
  298.             colore(colours.lime)
  299.             term.write("##############               ")
  300.             fineColore()
  301.             passAccettata = true
  302.         else
  303.             term.setCursorPos(15, 11)
  304.             colore(colours.red)
  305.             term.write("Password errata!            ")
  306.             conteggioErrori = conteggioErrori + 1
  307.             sleep(2)
  308.             term.setCursorPos(15, 11)
  309.             term.write("                               ")
  310.             term.setCursorPos(15, 11)
  311.             if conteggioErrori > 2 then
  312.                 term.setCursorPos(15, 11)
  313.                 colore(colours.red)
  314.                 errore("Troppi tentativi di immissione errati")
  315.             end
  316.         end
  317.     end
  318.     metodoPagamento = "NPAY"
  319.     credito = tonumber(risposta.saldo)
  320. elseif num == 3 then
  321.     bailOut()
  322. end
  323.  
  324. clear()
  325.  
  326. while true do
  327.     if metodoPagamento == "NPAY" then
  328.         print("Il conto ha una disponibilità di " .. credito .. " IC.")
  329.     else
  330.         print("La carta ha una disponibilità di " .. credito .. " IC.")
  331.     end
  332.     print("")
  333.     print("Bolletta del " .. tab.date .. " intestata a " .. tab.UICnumber .. " ")
  334.     print("")
  335.     print("Totale da pagare: " .. prelievo .. " IC")
  336.     print("")
  337.     print("")
  338.     print(
  339.         "Per favore scegliere un'opzione utilizzando i tasti numerici e confermare con ENTER:")
  340.     print("")
  341.     print("[1] Pagare la bolletta SENZA ricevuta")
  342.     print("[2] Pagare la bolletta CON ricevuta")
  343.     print("[3] Uscire senza pagare la bolletta")
  344.     num = tonumber(read())
  345.     if num == 1 then
  346.         if prelievo > credito then
  347.             clear()
  348.             print("Disponibilità insufficiente")
  349.             print("")
  350.             print("Bolletta NON PAGATA.")
  351.             print("Riprovare con un'altra carta di credito.")
  352.             print("")
  353.             print("Premere un tasto qualsiasi per uscire")
  354.             os.pullEvent("key")
  355.             disk.eject("left")
  356.             print("Ritirare il Disco Bolletta Elettronica")
  357.             sleep(5)
  358.             os.reboot()
  359.         end
  360.  
  361.         if metodoPagamento == "CC" then
  362.             clear()
  363.             print("Inserire nuovamente la carta per confermare il prelievo")
  364.             preleva()
  365.         else
  366.             inviaDenaro = http.get(
  367.                               "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" ..
  368.                                   password .. "&utente=" .. utente ..
  369.                                   "&richiesta=trasferimento&valore=" .. prelievo ..
  370.                                   "&beneficiario=eRGB").readAll()
  371.             risultatoInvio = textutils.unserialize(inviaDenaro)
  372.             if risultatoInvio.stato == "OK" then
  373.                 colore(colors.white)
  374.             else
  375.                 clear()
  376.                 errore("Errore durante il pagamento")
  377.             end
  378.         end
  379.         clear()
  380.         print("")
  381.         print("Attendere, autorizzazione pagamento in corso...")
  382.         redstone.setOutput("top", true)
  383.         sleep(5)
  384.         redstone.setOutput("top", false)
  385.         print("")
  386.         print("Pagamento effettuato correttamente!")
  387.         print("")
  388.         print("La bolletta è stata registrata come 'pagata'")
  389.         print("Grazie e arrivederci!")
  390.         print("")
  391.         print("Tra poco sarà possibile eseguire un'altra operazione.")
  392.         http.get("http://172.16.20.220/luanet/servlets/ergb_boll_pag.php?user="..tab.UICnumber)
  393.         sleep(5)
  394.         os.reboot()
  395.  
  396.     elseif num == 2 then
  397.         if prelievo > credito then
  398.             clear()
  399.             print("Disponibilità insufficiente")
  400.             print("")
  401.             print("Bolletta NON PAGATA.")
  402.             print("Riprovare con un'altra carta di credito.")
  403.             print("")
  404.             print("Premere un tasto qualsiasi per uscire")
  405.             os.pullEvent("key")
  406.             disk.eject("left")
  407.             print("Ritirare il Disco Bolletta Elettronica")
  408.             sleep(5)
  409.             os.reboot()
  410.         end
  411.         clear()
  412.         if metodoPagamento == "CC" then
  413.             clear()
  414.             print("Inserire nuovamente la carta per confermare il prelievo")
  415.             preleva()
  416.         else
  417.             inviaDenaro = http.get(
  418.                               "http://172.16.20.220/luanet/servlets/nebraskapay.php?auth=" ..
  419.                                   password .. "&utente=" .. utente ..
  420.                                   "&richiesta=trasferimento&valore=" .. prelievo ..
  421.                                   "&beneficiario=eRGB").readAll()
  422.             risultatoInvio = textutils.unserialize(inviaDenaro)
  423.             if risultatoInvio.stato == "OK" then
  424.                 colore(colors.white)
  425.             else
  426.                 clear()
  427.                 errore("Errore durante il pagamento")
  428.             end
  429.         end
  430.         clear()
  431.         print("Attendere, autorizzazione pagamento in corso...")
  432.         redstone.setOutput("top", true)
  433.         sleep(3)
  434.         redstone.setOutput("top", false)
  435.         if printer.getPaperLevel() == 0 or printer.getInkLevel() == 0 then
  436.             cartaInceppata = 0
  437.             print("")
  438.             print("Errore stampante")
  439.             print("")
  440.             print(
  441.                 "Impossibile stampare ricevuta. Il pagamento verrà comunque effettuato.")
  442.             print("")
  443.         else
  444.             print("Attendere, stampa in corso della ricevuta...")
  445.             printer.newPage()
  446.             printer.setPageTitle("Ricevuta eRGB")
  447.             printer.write("Ricevuta eRGB")
  448.             printer.setCursorPos(1, 2)
  449.             printer.setCursorPos(1, 4)
  450.             printer.write("La Bolletta del: ")
  451.             printer.setCursorPos(1, 6)
  452.             printer.write(tab.date)
  453.             printer.setCursorPos(1, 8)
  454.             printer.write("del cliente: ")
  455.             printer.setCursorPos(1, 10)
  456.             printer.write(tab.UICnumber)
  457.             printer.setCursorPos(1, 12)
  458.             printer.write("con un totale di:")
  459.             printer.setCursorPos(1, 14)
  460.             printer.write(prelievo)
  461.             printer.setCursorPos(10, 14)
  462.             printer.write("IC")
  463.             printer.setCursorPos(1, 16)
  464.             printer.write("e' stata pagata")
  465.             printer.setCursorPos(1, 17)
  466.             printer.write("correttamente.")
  467.             printer.setCursorPos(1, 19)
  468.             printer.write("Grazie per aver scelto")
  469.             printer.setCursorPos(1, 20)
  470.             printer.write("eRGB!")
  471.             printer.endPage()
  472.             sleep(2)
  473.             print("Stampa: 25%")
  474.             sleep(2)
  475.             print("Stampa: 50%")
  476.             sleep(2)
  477.             print("Stampa: 75%")
  478.             sleep(2)
  479.             print("Stampa: 100%")
  480.             sleep(2)
  481.             print("")
  482.             print("Ritirare la ricevuta")
  483.             print("")
  484.         end
  485.         print("Pagamento effettuato correttamente!")
  486.         print("")
  487.         print("La bolletta è stata registrata come 'pagata'")
  488.         http.get("http://172.16.20.220/luanet/servlets/ergb_boll_pag.php?user="..tab.UICnumber)
  489.         print("Grazie e arrivederci!")
  490.         print("")
  491.         print("Tra poco sarà possibile eseguire un'altra operazione.")
  492.         sleep(5)
  493.         os.reboot()
  494.     elseif num == 3 then
  495.         clear()
  496.         break
  497.     end
  498.     sleep(1)
  499.     clear()
  500. end
  501. bailOut()
  502.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement