3 changed files with 143 additions and 0 deletions
@ -0,0 +1,72 @@ |
|||||
|
import copy |
||||
|
import sys |
||||
|
import os |
||||
|
sys.path.insert(0,r"X:\Users\Ralphie\Documents\local_repo\price_finder") |
||||
|
dirname = os.path.dirname(__file__) |
||||
|
sys.path.insert(0,dirname) |
||||
|
# print(dirname) |
||||
|
sys.path.insert(0,dirname) |
||||
|
from batch_process import get_prices |
||||
|
from quad_dialog_new import message,dicter |
||||
|
import datetime |
||||
|
import sqlite3 |
||||
|
import pandas |
||||
|
from decimal import Decimal as D |
||||
|
import argparse |
||||
|
# print('imports done') |
||||
|
# print(os.getcwd()) |
||||
|
if __name__ == "__main__": |
||||
|
parser = argparse.ArgumentParser() |
||||
|
parser.add_argument('--stdout',action = 'store') |
||||
|
parser.add_argument('--stderr',action = 'store') |
||||
|
args = parser.parse_args() |
||||
|
# print('args parsed') |
||||
|
time = str(datetime.datetime.today()) |
||||
|
# breakpoint() |
||||
|
if args.stdout: |
||||
|
with open(args.stdout,'w') as file: |
||||
|
file.write(time) |
||||
|
# print("stdout written") |
||||
|
sys.stdout = open(args.stdout,'a') |
||||
|
|
||||
|
if args.stderr: |
||||
|
with open(args.stderr,'w') as file: |
||||
|
file.write(time) |
||||
|
# print("stderr written") |
||||
|
sys.stderr = open(args.stderr,'a') |
||||
|
con = sqlite3.connect(os.path.join(dirname,'quadparts.db')) |
||||
|
cur = con.cursor() |
||||
|
date = str(datetime.date.today()) |
||||
|
result = list(cur.execute('SELECT * FROM parts WHERE date == ? LIMIT 1',(date,))) |
||||
|
quad_links = list(row[0] for row in cur.execute('SELECT link FROM links ORDER BY id')) |
||||
|
if not result: |
||||
|
print('Executing') |
||||
|
quad_parts_base = pandas.read_sql('SELECT * FROM names',con).to_dict('records') |
||||
|
products = get_prices(quad_links,use_proxies=True) |
||||
|
current = copy.deepcopy(quad_parts_base) |
||||
|
complete = list({'product_name':product.info_product['product_name'], |
||||
|
'price': float(product.info_product['price']), |
||||
|
'date': product.time.strftime('%Y-%m-%d'), |
||||
|
'time': product.time.strftime('%H:%M:%S.%f'), |
||||
|
'location':product.info_url.netloc, |
||||
|
'link_id': quad_links.index(product.url)} for product in products) |
||||
|
df = pandas.DataFrame(complete) |
||||
|
df.to_sql('parts',con,if_exists='append',index=False) |
||||
|
for i in range(len(complete)): |
||||
|
complete[i]['price'] = round(D(complete[i]['price']),2) |
||||
|
for item in current: |
||||
|
name = item['name'] |
||||
|
link = item['link'] |
||||
|
item['product_name'] = complete[link]['product_name'] |
||||
|
item['price'] = complete[link]['price'] |
||||
|
item['time'] = complete[link]['time'] |
||||
|
bought = message(quad_parts_base,current) |
||||
|
quad_parts_base = dicter(quad_parts_base) |
||||
|
for key,is_purchased in bought.items(): |
||||
|
if is_purchased: |
||||
|
if quad_parts_base[key]['count'] > 1: |
||||
|
cur.execute('UPDATE names SET count = count - 1 WHERE name == ?',(key,)) |
||||
|
else: |
||||
|
cur.execute('UPDATE names SET purchased = 1 WHERE name == ?',(key,)) |
||||
|
con.commit() |
||||
|
con.close() |
||||
@ -0,0 +1,71 @@ |
|||||
|
# import saveto |
||||
|
import datetime |
||||
|
from decimal import Decimal as D |
||||
|
from tkinter import * |
||||
|
def dicter(l): |
||||
|
ret = {} |
||||
|
for thing in l: |
||||
|
name = thing['name'] |
||||
|
ret[name] = thing |
||||
|
return ret |
||||
|
def message(qpb,qpd): |
||||
|
qpb,qpd = map(dicter,(qpb,qpd)) |
||||
|
def button_callback(arg): |
||||
|
check_boxes[arg].toggle() |
||||
|
prods = list(filter(lambda item: not item[1]['purchased'],qpb.items())) |
||||
|
|
||||
|
root = Tk() |
||||
|
checks = dict( |
||||
|
(prod[0],BooleanVar()) for prod in prods) |
||||
|
|
||||
|
root.wm_title("Today's Prices") |
||||
|
labels = ["","Product name","Price","Count","Total"] |
||||
|
for i,label in enumerate(labels): |
||||
|
Label(root,text = label).grid(row =0,column = i) |
||||
|
|
||||
|
row = 1 |
||||
|
total = 0 |
||||
|
single_total = 0 |
||||
|
buttons = [] |
||||
|
check_boxes = [] |
||||
|
for prod,data in prods: |
||||
|
|
||||
|
check_boxes.append( |
||||
|
Checkbutton(root,variable=checks[prod],state = DISABLED) |
||||
|
) |
||||
|
|
||||
|
check_boxes[-1].grid(row = row,column = labels.index(""),stick=E) |
||||
|
|
||||
|
buttons.append( |
||||
|
Button( |
||||
|
root,text=prod,command = lambda row=row-1: button_callback(row) |
||||
|
) |
||||
|
) |
||||
|
|
||||
|
buttons[-1].grid(row=row,column = labels.index("Product name"),sticky = E+W) |
||||
|
|
||||
|
price = D(qpd[prod]['price']) |
||||
|
row_total = data['count']*price |
||||
|
|
||||
|
Label(root,text = '${}'.format(price),relief = "sunken").grid(row = row,column=labels.index('Price'),sticky=E+W) |
||||
|
Label(root,text = data['count'],relief = "sunken").grid(row=row,column=labels.index('Count'),sticky = E+W) |
||||
|
Label(root,text = '${}'.format(row_total),relief = "sunken").grid(row = row,column=labels.index("Total"),sticky=E+W) |
||||
|
|
||||
|
total += row_total |
||||
|
single_total += price |
||||
|
row += 1 |
||||
|
|
||||
|
Label(root,text = "Total:").grid(row = row,column=labels.index("Count")) |
||||
|
Label(root,text = "Individual:").grid(row = row,column=labels.index("Product name"),sticky = E) |
||||
|
Label(root,text = "${}".format(total)).grid(row=row,column = labels.index("Total")) |
||||
|
Label(root,text = "${}".format(single_total)).grid(row=row,column=labels.index("Price")) |
||||
|
Button(root,text = "OK", command = root.quit).grid(row=row+2) |
||||
|
|
||||
|
root.overrideredirect(True) |
||||
|
root.wm_attributes("-topmost", True) |
||||
|
mainloop() |
||||
|
root.destroy() |
||||
|
|
||||
|
for key in checks.keys(): |
||||
|
checks[key] = checks[key].get() |
||||
|
return checks |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue