Skip to content
Permalink
main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
from email import message
import imp
from importlib.resources import contents
from turtle import title
import webbrowser
import sqlite3
from async_timeout import timeout
from kivy import Config
# graphics configuration
Config.set('graphics', 'width', '414')
Config.set('graphics', 'height', '896')
Config.set('graphics', 'minimum_width', '414')
Config.set('graphics', 'minimum_height', '896')
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
import time
import plyer
from plyer import notification
import gmaps
location = ""
# define the screens
class SplashScreen(Screen):
pass
class LogInScreen(Screen):
pass
class RegisterScreen(Screen):
pass
class RegisterScreencont(Screen):
pass
class PackageSelectScreen(Screen):
pass
class Package01Screen(Screen):
pass
class Package02Screen(Screen):
pass
class Package03Screen(Screen):
pass
class Package04Screen(Screen):
pass
class PaymentScreen(Screen):
pass
class MapScreen(Screen):
pass
class Alert(Popup):
def __init__(self, title, text):
super(Alert, self).__init__()
content = AnchorLayout(anchor_x='center', anchor_y='bottom')
content.add_widget(
Label(text=text, halign='left', valign='top')
)
ok_button = Button(text='Ok', size_hint=(None, None), size=(Window.width / 10, Window.height / 25))
content.add_widget(ok_button)
popup = Popup(
title=title,
content=content,
size_hint=(None, None),
size=(Window.width / 1.2, Window.height / 5),
auto_dismiss=True,
)
ok_button.bind(on_press=popup.dismiss)
popup.open()
Builder.load_file('gui.kv')
DB_PATH = 'database_file.db'
TABLE_USER_QUERY = """
CREATE TABLE IF NOT EXISTS User (
carRegNo varchar(30) PRIMARY KEY,
firstName varchar(100) NOT NULL,
lastName varchar(100) NOT NULL,
vehicleType varchar(50) NOT NULL,
contactNo varchar(30) NOT NULL,
password varchar(100) NOT NULL
)
"""
class CarWash(App):
def build(self):
Window.clearcolor = (0.08,0.21,0.41,0)
self.sm = ScreenManager()
# set app pages
self.splashPage = SplashScreen(name='splash')
self.loginPage = LogInScreen(name='logIn')
self.registerPage = RegisterScreen(name='register')
self.registerContPage = RegisterScreencont(name='registercont')
self.packageSelection = PackageSelectScreen(name='pakcage_selection')
self.package01Page = Package01Screen(name='package01')
self.package02Page = Package02Screen(name='package02')
self.package03Page = Package03Screen(name='package03')
self.package04Page = Package04Screen(name='package04')
self.paymentPage = PaymentScreen(name="payment")
self.mapPage = MapScreen(name="map")
# add all pages to the root
self.sm.add_widget(self.splashPage)
self.sm.add_widget(self.loginPage)
self.sm.add_widget(self.registerPage)
self.sm.add_widget(self.registerContPage)
self.sm.add_widget(self.packageSelection)
self.sm.add_widget(self.package01Page)
self.sm.add_widget(self.package02Page)
self.sm.add_widget(self.package03Page)
self.sm.add_widget(self.package04Page)
self.sm.add_widget(self.paymentPage)
self.sm.add_widget(self.mapPage)
# create DB with User Table
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute(TABLE_USER_QUERY)
conn.commit()
conn.close()
notifyMe('Offers', 'Offers from as little as £2.99, register now or login')
return self.sm
def register(self):
ids = self.registerPage.ids
firstName = ids.first_name.text.strip()
lastName = ids.last_name.text.strip()
carRegNo = ids.car_reg_no.text.strip()
vehicleType = ids.vehicle_type.text.strip()
if firstName == "" or lastName == "" or carRegNo == "" or vehicleType == "" or vehicleType == "Select from the Dropdown Menu":
Alert(title='Error', text='All input fields required!')
else:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("SELECT carRegNo FROM User WHERE carRegNo = :carRegNo", {'carRegNo' : carRegNo})
if len(cursor.fetchall()) == 0:
self.cahced_user = {"firstName" : firstName, "lastName" : lastName, "carRegNo" : carRegNo, "vehicleType" : vehicleType}
self.sm.switch_to(self.registerContPage, direction='left')
else:
Alert(title='Error', text='Car Registration Number\n Already Exists!')
conn.close()
def registerCont(self):
ids = self.registerContPage.ids
contactNo = ids.contactNo.text.strip()
password = ids.password.text.strip()
confirmedPassword = ids.confirmedPassword.text.strip()
if contactNo == "" or password == "" or confirmedPassword == "":
Alert(title='Error', text='All input fields required!')
elif len(password) < 4:
Alert(title='Error', text='Password required atleast 4 characters!')
elif password != confirmedPassword:
Alert(title='Error', text="Password doesn't match \nwith confirmed password!")
else:
# register user
self.cahced_user["contactNo"] = contactNo
self.cahced_user["password"] = password
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("INSERT INTO User VALUES (:carRegNo, :firstName, :lastName, :vehicleType, :contactNo, :password)", {
'carRegNo' : self.cahced_user["carRegNo"],
'firstName': self.cahced_user["firstName"],
'lastName': self.cahced_user["lastName"],
'vehicleType': self.cahced_user["vehicleType"],
'contactNo': self.cahced_user["contactNo"],
'password': self.cahced_user["password"]
})
conn.commit()
conn.close()
Alert(title='Success', text="Registration Success!")
self.sm.switch_to(self.loginPage, direction='right')
def on_login(self):
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("SELECT carRegNo FROM User WHERE carRegNo = :carRegNo AND password = :password",
{'carRegNo' : self.loginPage.ids.carRegNo.text, 'password' : self.loginPage.ids.password.text})
records = cursor.fetchall()
conn.close()
if len(records) == 0:
Alert(title='Failed', text="Car Registration or Password is Invalid!")
else:
self.sm.switch_to(self.mapPage)
offers()
notifyMe('Special offers', 'Offers from as little as £2.99')
def logout(self):
for child in reversed(self.loginPage.ids.grid.children):
if isinstance(child, TextInput):
child.text = ''
self.sm.switch_to(self.splashPage)
def map(self,instance):
global location
myid= instance.gid
if myid == "mega":
location = "Mega Hand Car Wash"
elif myid == "super":
location = "Superwash Car Wash"
elif myid == "zefi":
location = "Zefi Hand Car Wash"
def buy(self,package="package 1"):
if package == "package 1":
self.price = 2.99
self.packageName = "Starter"
elif package == "package 2":
self.price = 5.99
self.packageName = "Intermediate"
elif package == "package 3":
self.price = 9.99
self.packageName = "Premium"
else:
# package 4
self.price = 17.99
self.packageName = "Quite literally"
self.sm.switch_to(self.paymentPage, direction='left')
def pay(self):
global location
ids = self.paymentPage.ids
paymentType = ids.payment_type.text.strip()
if paymentType == "" or paymentType == "Payment Option":
Alert(title="Error", text="Select a payment method!")
elif paymentType == "Cash":
Alert(title="Success", text=f"You have selected {self.packageName} \nwhich cost £{self.price}.\nThank you we await you in "+ location + ".")
self.sm.switch_to(self.packageSelection, direction='right')
else:
Alert(title="Info", text=f"You will be redirected to paypal\nweb page to proceed the payment.")
self.sm.switch_to(self.packageSelection, direction='right')
webbrowser.open(f'http://127.0.0.1:5000?package_name={self.packageName}&price={self.price}')
def on_package_01(self):
self.sm.switch_to(self.package01Page, direction='left')
def on_package_02(self):
self.sm.switch_to(self.package02Page, direction='left')
def on_package_03(self):
self.sm.switch_to(self.package03Page, direction='left')
def on_package_04(self):
self.sm.switch_to(self.package04Page, direction='left')
def go_to_package_selection_page(self):
self.sm.switch_to(self.packageSelection, direction='left')
def back_to_package_selection_page(self):
self.sm.switch_to(self.packageSelection, direction='right')
def go_to_login_page(self):
self.sm.switch_to(self.loginPage, direction='left')
def go_to_map_page(self):
self.sm.switch_to(self.mapPage, direction='left')
def back_to_map_page(self):
self.sm.switch_to(self.mapPage, direction='right')
def back_to_reg_page_1(self):
self.sm.switch_to(self.registerPage, direction='right')
def go_to_register_page(self):
self.sm.switch_to(self.registerPage, direction='left')
def go_back_to_splash_page(self):
self.sm.switch_to(self.splashPage, direction='right')
def go_back_to_home_page(self):
self.sm.switch_to(self.packageSelection, direction='right')
notifyMe('Offers', 'Offers from as little as £2.99')
# notifcation for offers upon login
class offers(Popup):
def __init__(self):
layout = AnchorLayout(anchor_x='center', anchor_y="top")
layout.add_widget(
Label(text='Offers starting from as litte as £2.99', halign='left', valign='top')
)
notify = Popup(
title='Special offers',content=layout,size_hint=(None, None),size=(Window.width , Window.height / 6),pos_hint={'center': .9 , 'top': 1},
#Done the notification but need to make sure it shows on the user device, showing a couple time where necessary
)
X = Button(text='X', size_hint=(None, None), size=(20, 20))
layout.add_widget(X)
X.bind(on_press=notify.dismiss)
notify.open()
# notifcation to the users os.
def notifyMe(title, message):
i =0
while i < 1:
plyer.notification.notify(title=title, message=message, app_icon='logo.png', timeout=3)
i += 1
if __name__ == "__main__":
CarWash().run()