tarandalinux

SilverPOS Admin 21-Too many connections

Jan 21st, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.05 KB | None | 0 0
  1. from kivy.app import App
  2. from kivy.uix.boxlayout import BoxLayout
  3. from kivy.uix.textinput import TextInput
  4. from kivy.uix.button import Button
  5. from kivy.uix.spinner import Spinner
  6.  
  7. from collections import OrderedDict
  8. from pymongo import MongoClient
  9. from utils.datatable import DataTable
  10. from datetime import datetime
  11. import hashlib
  12. import mysql.connector
  13. import pandas as pd
  14. import matplotlib.pyplot as plt
  15. from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg as FCK
  16.  
  17. class AdminWindow(BoxLayout):
  18.     def __init__(self, **kwargs):
  19.         super().__init__(**kwargs)
  20.         self.mydb = mysql.connector.connect(
  21.             host='localhost',
  22.             user='root',
  23.             passwd='#323423e',
  24.             database='pos'
  25.         )
  26.         self.mycursor = self.mydb.cursor()
  27.         self.products = self.get_products()
  28.         product_code = []
  29.         product_name = []
  30.         spinvals = []
  31.         for product in self.products.find():
  32.             product_code.append(product['product_code'])
  33.             name = product['product_name']
  34.             if len(name) > 30:
  35.                 name = name[:30] + '...'
  36.             product_name.append(name)
  37.  
  38.         for x in range(len(product_code)):
  39.             line = ' | '.joint([product_code[x],product_name[x]])
  40.             spinvals.append(line)
  41.         self.ids.target_product.values = spinvals
  42.  
  43.         content = self.ids.scrn_contents
  44.         users = self.get_users()
  45.         userstable = DataTable(table=users)
  46.         content.add_widget(userstable)
  47.  
  48.         #Display Products
  49.         product_scrn = self.ids.scrn_product_content
  50.         products = self.get_products()
  51.         prod_table = DataTable(table=products)
  52.         product_scrn.add_widget(prod_table)
  53.  
  54.     def add_user_fields(self):
  55.         target = self.ids.ops_fields
  56.         target.clear_widgets()
  57.         crud_first = TextInput(hint_text='First Name',multiline=False)
  58.         crud_last = TextInput(hint_text='Last Name',multiline=False)
  59.         crud_user = TextInput(hint_text='User Name',multiline=False)
  60.         crud_pwd = TextInput(hint_text='Password',multiline=False)
  61.         crud_des = Spinner(text='Operator',values=['Operator','Administrator'])
  62.         crud_submit = Button(text='Add',size_hint_x=None,width=100,on_release=lambda x: self.add_user(crud_first.text,crud_last.text,crud_user.text,crud_pwd.text,crud_des.text))
  63.  
  64.         target.add_widget(crud_first)
  65.         target.add_widget(crud_last)
  66.         target.add_widget(crud_user)
  67.         target.add_widget(crud_pwd)
  68.         target.add_widget(crud_des)
  69.         target.add_widget(crud_submit)
  70.    
  71.     def add_product_fields(self):
  72.         target = self.ids.ops_fields_p
  73.         target.clear_widgets()
  74.  
  75.         crud_code = TextInput(hint_text='Product Code',multiline=False)
  76.         crud_name = TextInput(hint_text='Product Name',multiline=False)
  77.         crud_weight = TextInput(hint_text='Product Weight',multiline=False)
  78.         crud_stock = TextInput(hint_text='Product In Stock',multiline=False)
  79.         crud_sold = TextInput(hint_text='Product Sold',multiline=False)
  80.         crud_order = TextInput(hint_text='Product Order',multiline=False)
  81.         crud_purchase = TextInput(hint_text='Product Last Purchase',multiline=False)
  82.         crud_submit = Button(text='Add',size_hint_x=None,width=100,on_release=lambda x: self.add_product(crud_code.text,crud_name.text,crud_weight.text,crud_stock.text,crud_sold.text,crud_order.text,crud_purchase.text))
  83.  
  84.         target.add_widget(crud_code)
  85.         target.add_widget(crud_name)
  86.         target.add_widget(crud_weight)
  87.         target.add_widget(crud_stock)
  88.         target.add_widget(crud_sold)
  89.         target.add_widget(crud_order)
  90.         target.add_widget(crud_purchase)
  91.         target.add_widget(crud_submit)
  92.  
  93.     def add_user(self, first,last,user,pwd,des):
  94.         content = self.ids.scrn_contents
  95.         content.clear_widgets()
  96.         sql = 'INSERT INTO users(first_name,last_name,user_name,password,designation,date) VALUES(%s,%s,%s,%s,%s,%s)'
  97.         values =[first,last,user,pwd,des,datetime.now()]
  98.  
  99.         self.mycursor.execute(sql,values)
  100.         self.mydb.commit()
  101.  
  102.         users = self.get_users()
  103.         userstable = DataTable(table=users)
  104.         content.add_widget(userstable)
  105.  
  106.     def add_product(self,code,name,weight,stock,sold,order,purchase):
  107.         content = self.ids.scrn_product_contents
  108.         content.clear_widgets()
  109.  
  110.         self.products.insert_one({'product_code': code,'product_name':name,'product_weight': weight,'in_stock':stock,'sold': sold,'order': order,'last_purchase':purchase})
  111.  
  112.         prodz = self.get_products()
  113.         stocktable = DataTable(table=prodz)
  114.         content.add_widget(stocktable)
  115.  
  116.  
  117.     def update_user_fields(self):
  118.         target = self.ids.ops_fields
  119.         target.clear_widgets()
  120.         crud_first = TextInput(hint_text='First Name',multiline=False)
  121.         crud_last = TextInput(hint_text='Last Name',multiline=False)
  122.         crud_user = TextInput(hint_text='User Name',multiline=False)
  123.         crud_pwd = TextInput(hint_text='Password',multiline=False)
  124.         crud_des = Spinner(text='Operator',values=['Operator','Administrator'])
  125.         crud_submit = Button(text='Update',size_hint_x=None,width=100,on_release=lambda x: self.update_user(crud_first.text,crud_last.text,crud_user.text,crud_pwd.text,crud_des.text))
  126.  
  127.         target.add_widget(crud_first)
  128.         target.add_widget(crud_last)
  129.         target.add_widget(crud_user)
  130.         target.add_widget(crud_pwd)
  131.         target.add_widget(crud_des)
  132.         target.add_widget(crud_submit)
  133.  
  134.     def update_product_fields(self):
  135.         target = self.ids.ops_fields_p
  136.         target.clear_widgets()
  137.  
  138.         crud_code = TextInput(hint_text='Product Code',multiline=False)
  139.         crud_name = TextInput(hint_text='Product Name',multiline=False)
  140.         crud_weight = TextInput(hint_text='Product Weight',multiline=False)
  141.         crud_stock = TextInput(hint_text='Product In Stock',multiline=False)
  142.         crud_sold = TextInput(hint_text='Product Sold',multiline=False)
  143.         crud_order = TextInput(hint_text='Product Order',multiline=False)
  144.         crud_purchase = TextInput(hint_text='Product Last Purchase',multiline=False)
  145.         crud_submit = Button(text='Update',size_hint_x=None,width=100,on_release=lambda x: self.update_product(crud_code.text,crud_name.text,crud_weight.text,crud_stock.text,crud_sold.text,crud_order.text,crud_purchase.text))
  146.  
  147.         target.add_widget(crud_code)
  148.         target.add_widget(crud_name)
  149.         target.add_widget(crud_weight)
  150.         target.add_widget(crud_stock)
  151.         target.add_widget(crud_sold)
  152.         target.add_widget(crud_order)
  153.         target.add_widget(crud_purchase)
  154.         target.add_widget(crud_submit)
  155.  
  156.  
  157.     def update_user(self, first,last,user,pwd,des):
  158.         content = self.ids.scrn_contents
  159.         content.clear_widgets()
  160.         pwd = hashlib.sha256(pwd.encode()).hexdigest()
  161.        
  162.         sql = 'UPDATE users SET first_name=%s,last_name=%s,user_name=%s,password=%s,designation=%s WHERE user_name=%s'
  163.         values =[first,last,user,pwd,des,user]
  164.  
  165.         self.mycursor.execute(sql,values)
  166.         self.mydb.commit()
  167.  
  168.         users = self.get_users()
  169.         userstable = DataTable(table=users)
  170.         content.add_widget(userstable)
  171.  
  172.     def update_product(self,code,name,weight,stock,sold,order,purchase):
  173.         content = self.ids.scrn_product_contents
  174.         content.clear_widgets()
  175.  
  176.         self.add_products.update_one({'product_code':code},{'$set':{'product_code': code,'product_name':name,'product_weight': weight,'in_stock':stock,'sold': sold,'order': order,'last_purchase':purchase}})
  177.  
  178.         prodz = self.get_products()
  179.         stocktable = DataTable(table=prodz)
  180.         content.add_widget(stocktable)
  181.  
  182.     def remove_user_fields(self):
  183.         target = self.ids.ops_fields
  184.         target.clear_widgets()
  185.         crud_user = TextInput(hint_text='User Name')
  186.         crud_submit = Button(text='Remove',size_hint_x=None,width=100,on_release=lambda x: self.remove_user(crud_user.text))
  187.        
  188.         target.add_widget(crud_user)
  189.         target.add_widget(crud_submit)
  190.  
  191.     def remove_product_fields(self):
  192.         target = self.ids.ops_fields_p
  193.         target.clear_widgets()
  194.         crud_code = TextInput(hint_text='Product Code')
  195.         crud_submit = Button(text='Remove',size_hint_x=None,width=100,on_release=lambda x: self.remove_product(crud_code.text))
  196.        
  197.         target.add_widget(crud_code)
  198.         target.add_widget(crud_submit)
  199.  
  200.     def remove_user(self,user):
  201.         content = self.ids.scrn_contents
  202.         content.clear_widgets()
  203.  
  204.         sql = 'DELETE FROM users WHERE user_name = %s'
  205.         #self.users.remove({'user_name':user})
  206.         values = [user]
  207.         self.mycursor.execute(sql,values)
  208.         self.mydb.commit()
  209.  
  210.         users = self.get_users()
  211.         userstable = DataTable(table=users)
  212.         content.add_widget(userstable)
  213.  
  214.     def remove_product(self,code):
  215.         content = self.ids.scrn_product_contents
  216.         content.clear_widgets()
  217.  
  218.         self.products.remove({'product_code':code})
  219.  
  220.         prodz = self.get_products()
  221.         stocktable = DataTable(table=prodz)
  222.         content.add_widget(stocktable)
  223.  
  224.     def get_users(self):
  225.         mydb = mysql.connector.connect(
  226.             host='localhost',
  227.             user='root',
  228.             passwd='#334233',
  229.             database='pos'
  230.         )
  231.         mycursor = mydb.cursor()
  232.         _users = OrderedDict()
  233.         _users['first_names'] = {}
  234.         _users['last_names'] = {}
  235.         _users['user_names'] = {}
  236.         _users['passwords'] = {}
  237.         _users['designations'] = {}
  238.         first_names = []
  239.         last_names = []
  240.         user_names = []
  241.         passwords = []
  242.         designations = []
  243.  
  244.         sql = 'SELECT * FROM users'
  245.         mycursor.execute(sql)
  246.         users = mycursor.fetchall()
  247.         for user in users.find():
  248.             first_names.append(user['first_name'])
  249.             last_names.append(user['last_name'])
  250.             user_names.append(user['user_name'])
  251.             pwd = user['password']
  252.             if len(pwd) > 10:
  253.                 pwd = pwd[:10] + '...'
  254.             passwords.append(pwd)
  255.             designations.append(user['designation'])
  256.         # print(designations)
  257.         users_length = len(first_names)
  258.         idx = 0
  259.         while idx < users_length:
  260.             _users['first_names'][idx] = first_names[idx]
  261.             _users['last_names'][idx] = last_names[idx]
  262.             _users['user_names'][idx] = user_names[idx]
  263.             _users['passwords'][idx] = passwords[idx]
  264.             _users['designations'][idx] = designations[idx]
  265.  
  266.             idx += 1
  267.        
  268.         return _users
  269.    
  270.     def get_products(self):
  271.         mydb = mysql.connector.connect(
  272.             host='localhost',
  273.             user='root',
  274.             passwd='#3242432',
  275.             database='pos'
  276.         )
  277.         mycursor = mydb.cursor()
  278.         _stocks = OrderedDict()
  279.         _stocks['product_code'] = {}
  280.         _stocks['product_name'] = {}
  281.         _stocks['product_weight'] = {}
  282.         _stocks['in_stock'] = {}
  283.         _stocks['sold'] = {}
  284.         _stocks['order'] = {}
  285.         _stocks['last_purchase'] = {}
  286.  
  287.         self.products = self.get_products()
  288.         product_code = []
  289.         product_name = []
  290.         product_weight = []
  291.         in_stock = []
  292.         sold = []
  293.         order = []
  294.         last_purchase = []
  295.         sql = 'SELECT * FROM stocks'
  296.         mycursor.execute(sql)
  297.         products = mycursor.fetchall()
  298.         for product in products.find():
  299.             product_code.append(product['product_code'])
  300.             name = product['product_name']
  301.             if len(name) > 10:
  302.                 name = name[:10] + '...'
  303.             product_name.append(name)
  304.             product_weight.append(product['product_weight'])
  305.             in_stock.append(product['in_stock'])
  306.             try:
  307.                 sold.append(product[6])
  308.             except KeyError:
  309.                 sold.append('')
  310.             try:
  311.                 order.append(product[7])
  312.             except KeyError:
  313.                 order.append('')
  314.             try:
  315.                 last_purchase.append(product[8])
  316.             except KeyError:
  317.                 last_purchase.append('')
  318.         # print(designations)
  319.         products_length = len(product_code)
  320.         idx = 0
  321.         while idx < products_length:
  322.             _stocks['product_code'][idx] = product_code[idx]
  323.             _stocks['product_name'][idx] = product_name[idx]
  324.             _stocks['product_weight'][idx] = product_weight[idx]
  325.             _stocks['in_stock'][idx] = in_stock[idx]
  326.             _stocks['sold'][idx] = sold[idx]
  327.             _stocks['order'][idx] = order[idx]
  328.             _stocks['last_purchase'][idx] = last_purchase[idx]
  329.            
  330.  
  331.             idx += 1
  332.        
  333.         return _stocks
  334.     def view_stats(self):
  335.         plt.cla()
  336.         target_product = self.ids.target_product.text
  337.         target = target_product[:target_product.find(' | ')]
  338.         name = target_product[target_product.find(' | '):]
  339.  
  340.         df = pd.read_csv('products_purchase.csv')
  341.         purchases = []
  342.         dates = []
  343.         count = 0
  344.         for x in range(len(df)):
  345.             if str(df.Product_code[x]) == target:
  346.                 purchases.append(df.Purchased[x])
  347.                 dates.append(count)
  348.                 count += 1
  349.         plt.bar(dates,pruchases,color='teal',lable=name)
  350.         plt.ylabel('Total Purchases')
  351.         plt.xlabel('day')
  352.  
  353.         self.ids.analysis_res.append(FCK(plt.gcf()))
  354.        
  355.     def change_screen(self, instance):
  356.         if instance.text == 'Manage Products':
  357.             self.ids.scrn_mngr.current = 'scrn_product_content'
  358.         elif instance.text == 'Manage Users':
  359.             self.ids.scrn_mngr.current = 'scrn_content'
  360.         else:
  361.             self.ids.scrn_mngr.current = 'scrn_analysis'
  362.  
  363.  
  364. class AdminApp(App):
  365.     def build(self):
  366.  
  367.         return AdminWindow()
  368.  
  369. if __name__=='__main__':
  370.     AdminApp().run()
Add Comment
Please, Sign In to add comment