-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
120 lines (88 loc) · 4.32 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Abstract class is a class that has abstract method in itself,
# Abstract method is a method that has declaration but not definition.
# We cannot create an object of abstract class,
# but each class that inherits abstract class must implement abstract method
# class SadadTransaction:
# # note that all the classes should have this method with sale name and these argumants.
# # the better way is to create an abstract class, and the methods I want all the classes to have will be implemented in the abstract class
# def sale(self,sourceCard, destinationCard,amount):
# print("Sale Transaction")
from ttkbootstrap import Window, Entry, Button, Label, Combobox,INFO,OUTLINE
from tkinter import messagebox
from Services.sadad_transaction_service import SadadTransaction
from Services.sep_transaction_service import SepaTransaction
from Services.asan_pardakht_service import AsanPardakhtService
from Services.Common.base_transaction import BaseTransaction
destination_Card = "1234567890123456"
window = Window(title="Payment Form", themename="superhero")
window.grid_columnconfigure(0, weight=1)
amount_label = Label(window, text="Amount")
amount_label.grid(row=0, column=0, padx=10, pady=10, sticky="e")
amount_entry = Entry(window)
amount_entry.grid(row=0, column=1, padx=(0, 20), pady=10, sticky="ew")
amount_entry.insert(0, "5000")
amount_entry.config(state="readonly")
# psp = payment service provider
psp_label = Label(window, text="PSP")
psp_label.grid(row=1, column=0, padx=10, pady=10, sticky="e")
psp_combobox = Combobox(window, values=["Sadad", "Sep","Asan_Pardakht"], state="readonly")
psp_combobox.grid(row=1, column=1, padx=(0, 20), pady=10, sticky="ew")
card_label = Label(window, text="Card")
card_label.grid(row=2, column=0, padx=10, pady=(0, 10), sticky="e")
card_entry = Entry(window)
card_entry.grid(row=2, column=1, padx=(0, 20), pady=(0, 10), sticky="ew")
password_label = Label(window, text="Password")
password_label.grid(row=3, column=0, padx=10, pady=(0, 10), sticky="e")
password_entry = Entry(window)
password_entry.grid(row=3, column=1, padx=(0, 20), pady=(0, 10), sticky="ew")
def sale_transaction():
psp = psp_combobox.get()
service_transaction: BaseTransaction
match psp:
case "Sadad":
service_transaction = SadadTransaction(destination_Card)
case "Sepa":
service_transaction = SepaTransaction(destination_Card)
case "Asan_Pardakht":
service_transaction = AsanPardakhtService(destination_Card)
case _:
messagebox.showerror(title="Error", message="Invalid Value for PSP")
return None
try:
result = service_transaction.sale(source_card=card_entry.get(), pin=password_entry.get(),
amount = int(amount_entry.get()))
except ValueError as ex:
messagebox.showerror(title="Error", message=ex.args[0])
else:
if result.success:
messagebox.showinfo(title="Transaction Result", message=result.message)
else:
messagebox.showerror(title="Transaction Result", message=result.message)
transaction_button = Button(window, text="Sale", bootstyle="success", command=sale_transaction)
transaction_button.grid(row=4, column=0, padx=10, pady=10)
def balance_transaction():
psp = psp_combobox.get()
service_transaction: BaseTransaction
match psp:
case "Sadad":
service_transaction = SadadTransaction(destination_Card)
case "Sepa":
service_transaction = SepaTransaction(destination_Card)
case "Asan_Pardakht":
service_transaction = AsanPardakhtService(destination_Card)
case _:
messagebox.showerror(title="Error", message="Invalid Value for PSP")
return None
password = password_entry.get()
try:
result = service_transaction.balance(password)
except ValueError as ex:
messagebox.showerror(title="Error", message=ex.args[0])
else:
if result.success:
messagebox.showinfo(title="Transaction Result", message=result.message)
else:
messagebox.showerror(title="Transaction Result", message=result.message)
balance_button = Button(window,text="Balance",bootstyle=INFO+OUTLINE,command=balance_transaction)
balance_button.grid(row=5, column=0, padx=10, pady=10)
window.mainloop()