def submitContract(): if request.method=='POST': # move to after table insertion when debugging sql = text('''INSERT INTO contract (worker_username, service_id, time, contract_status) VALUES (:worker_username, :service_id, :time, 'pending');''') db.engine.execute(sql, \ worker_username=request.form.get('worker_username'), \ service_id=request.form.get('service_id'), \ time=request.form.get('time')) sql = text('''UPDATE service_request SET contracted=TRUE WHERE service_id=:service_id''') db.engine.execute(sql, service_id=request.form.get('service_id')) sql = text('''SELECT contract_id, client_username FROM contract c, service_request sr WHERE c.service_id=sr.service_id AND sr.service_id=:service_id AND worker_username=:worker_username;''') result = db.engine.execute(sql, \ service_id=request.form.get('service_id'), \ worker_username=request.form.get('worker_username')) result = result.fetchone() pushNotification(\ name=request.form.get('worker_username'), \ message='You\'ve received a contract from '+result[1], \ link='/contracts/'+str(result[0])) flash('Contract created, awaiting worker acceptance') return redirect('/') else: return redirect('/')
def interestRequest(service_id): if request.method == 'GET': return redirect('/') if session.get('user') and session['type'] == 'worker': sql = text( '''SELECT interested FROM worker_request WHERE service_id=:id AND worker_username=:user;''' ) results = db.engine.execute(sql, id=service_id, user=session['user']) interested = results.fetchone()[0] interested = not interested #change interest sql = text( 'UPDATE worker_request SET interested=:interested WHERE service_id=:id AND worker_username=:user;' ) db.engine.execute(sql, interested=interested, id=service_id, user=session['user']) #Notify the user if interested: sql = text( '''SELECT client_username FROM service_request WHERE service_id=:id''' ) results = db.engine.execute(sql, id=service_id) name = results.fetchone()[0] pushNotification( name, session.get('user') + ' is interested in your job', '/requests/' + str(service_id)) return redirect('/pending') else: return redirect('/')
def selectWorkers(id): workers = request.form.getlist('workers') for user in workers: worker_username = user print worker_username sql = text('''INSERT INTO worker_request (service_id, worker_username) VALUES (:id, :user);''') db.engine.execute(sql, id=id, user=worker_username) pushNotification(user, 'You have been requested for a job', '/pending/'+str(id))
def getMsg(message): room = session.get('room') msg = session.get('user') + ': ' + message['msg'] addMessage(msg, room) emit('message', {'msg': msg}, room=room) #If other user is not online and message not recently sent (?), do stuff if isOtherOffline(room) and not isOtherNotified(room): pushNotification(getOther(room), session.get('user')+' messaged you', '/chat/'+room)
def getMsg(message): room = session.get('room') msg = session.get('user') + ': ' + message['msg'] addMessage(msg, room) emit('message', {'msg': msg}, room=room) #If other user is not online and message not recently sent (?), do stuff if isOtherOffline(room) and not isOtherNotified(room): pushNotification(getOther(room), session.get('user') + ' messaged you', '/chat/' + room)
def selectWorkers(id): workers = request.form.getlist('workers') for user in workers: worker_username = user print worker_username sql = text( '''INSERT INTO worker_request (service_id, worker_username) VALUES (:id, :user);''' ) db.engine.execute(sql, id=id, user=worker_username) pushNotification(user, 'You have been requested for a job', '/pending/' + str(id))
def interestRequest(service_id): if request.method == 'GET': return redirect('/') if session.get('user') and session['type'] == 'worker': sql = text('''SELECT interested FROM worker_request WHERE service_id=:id AND worker_username=:user;''') results = db.engine.execute(sql, id=service_id, user=session['user']) interested = results.fetchone()[0] interested = not interested; #change interest sql = text('UPDATE worker_request SET interested=:interested WHERE service_id=:id AND worker_username=:user;') db.engine.execute(sql, interested=interested, id=service_id, user=session['user']) #Notify the user if interested: sql = text('''SELECT client_username FROM service_request WHERE service_id=:id''') results = db.engine.execute(sql, id=service_id) name = results.fetchone()[0] pushNotification(name, session.get('user')+' is interested in your job', '/requests/'+str(service_id)) return redirect('/pending') else: return redirect('/')
def clientCancelContract(id): if session.get('user') and session['type'] == 'client': sql = text('''SELECT client_username, worker_username, contract_status, contract.service_id FROM service_request sr, contract WHERE contract_id=:id AND contract.service_id=sr.service_id;''') result = db.engine.execute(sql, id=id).fetchone() client = result[0] worker = result[1] status = result[2] service_id = result[3] if client != session.get('user') or status != 'pending': return redirect('/') sql = text('''DELETE FROM contract WHERE contract_id=:id;''') db.engine.execute(sql, id=id) sql = text('''UPDATE service_request SET contracted=FALSE WHERE service_id=:id''') db.engine.execute(sql, id=service_id) flash('Pending contract deleted') pushNotification(worker, client+' cancelled a pending contract', '/contracts') return redirect('/') else: return redirect('/')
def workerAcceptContract(id): if session.get('user') and session['type'] == 'worker': sql = text('''UPDATE contract SET contract_status='accepted' WHERE contract_id=:id;''') db.engine.execute(sql, id=id) sql = text('''SELECT client_username, worker_username FROM service_request sr, contract c WHERE sr.service_id=c.service_id AND contract_id=:id''') result = db.engine.execute(sql, id=id) result = result.fetchone() pushNotification( \ name=result[0], \ message=result[1]+' has accepted your contract', \ link='/contracts/'+str(id)) return redirect('/contracts') else: return redirect('/')
def completeContract(id): if session.get('user') and session['type'] == 'client': #Check if this user is the owner of the request sql = text('''SELECT client_username, worker_username FROM contract, service_request WHERE contract.service_id=service_request.service_id AND contract_id=:id;''') result = db.engine.execute(sql, id=id) result = result.fetchone() contract_client = result[0] contract_worker = result[1] if contract_client == session.get('user'): #complete the contract sql = text('''UPDATE contract SET contract_status='finished', time_finish=NOW() WHERE contract_id=:id;''') db.engine.execute(sql, id=id) pushNotification(contract_worker, 'Contract with '+contract_client+' complete', '/contracts/'+str(id)) return redirect('/contracts/'+id+'/rating') else: return redirect('/') else: return redirect('/')
def workerDenyContract(id): if session.get('user') and session['type'] == 'worker': sql = text('''SELECT service_id FROM contract WHERE contract_id=:id;''') result = db.engine.execute(sql, id=id) service_id = result.fetchone()[0] sql = text('''UPDATE service_request SET contracted=FALSE WHERE service_id=:service_id;''') db.engine.execute(sql, service_id=service_id) sql = text('''DELETE FROM contract WHERE contract_id=:id;''') db.engine.execute(sql, id=id) sql = text('''SELECT client_username, worker_username FROM service_request sr, contract c WHERE sr.service_id=c.service_id AND contract_id=:id''') result = db.engine.execute(sql, id=id) result = result.fetchone() pushNotification( \ name=result[0], \ message=result[1]+' has denied your contract', \ link='/contracts/'+str(id)) return redirect('/contracts') else: return redirect('/')