# -*- coding: utf-8 -*- from flask import Flask, render_template, redirect, url_for, request, jsonify from models import db, Oboruds, Auditory, Zametki from flask_migrate import Migrate from datetime import * import csv import random from urllib.parse import unquote from flask_httpauth import HTTPBasicAuth from werkzeug.security import generate_password_hash, check_password_hash from openpyxl import load_workbook app = Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db" app.jinja_env.auto_reload = True app.config['TEMPLATES_AUTO_RELOAD'] = True app.secret_key = '6523e58bc0eec42c31b9635d5e0dfc23b6d119b73e633bf3a5284c79bb4a1ede' db.init_app(app) migrate = Migrate(app, db) @app.route("/login", methods=['GET', 'POST']) def login(): return render_template('login.html') @app.route("/", methods=['GET', 'POST']) def index(): results = [] results1 = [] all_aud = db.session.query(Auditory).all() auds = [] for item in all_aud: auds.append(item.audnazvanie) if request.method == 'POST': p = request.form.get('srch').strip() all_aud = db.session.query(Auditory).all() s = db.session.query(Oboruds).filter( Oboruds.invNumber.contains(p)).first() if s: for item in all_aud: auds.append(item.audnazvanie) if s.aud_id is None: results.append([s.invNumber, s.nazvanie]) else: results1.append(s.invNumber) results1.append(s.nazvanie) aud = db.session.get(Auditory, s.aud_id) results1.append(aud.audnazvanie) return render_template('index.html', aud=all_aud, results=results, res1=results1) return render_template('index.html', aud=all_aud, results=results, res1=results1) @app.route("/perenos", methods=['GET', 'POST']) def perenos(): audid = request.args.get('audid') invnomer = request.args.get('invnum') ob = db.session.query(Oboruds).filter_by(invNumber=invnomer).first() ob.aud_id = audid db.session.commit() return jsonify({'success': True}, 200, {'ContentType': 'application/json'}) @app.route("/addaud", methods=['GET', 'POST']) def addAud(): return render_template('addaud.html', methods=['GET', 'POST']) @app.route('/searchonaud', methods=['GET', 'POST']) def searchonaud(): all_aud = db.session.query(Auditory).all() res = [] if request.method == 'GET' and request.args.get('auditory'): audid = request.args.get('auditory') q = db.session.query(Auditory, Oboruds).filter( Auditory.id == Oboruds.aud_id ).filter(Auditory.id == audid ).order_by(Oboruds.invNumber).all() results = [] for auditory, oboruds in q: results.append({ 'num_ved': oboruds.numberved, 'auditory_id': auditory.id, 'auditory_name': auditory.audnazvanie, 'inv_number': oboruds.invNumber, 'oboruds_id': oboruds.nazvanie, 'raspolog': oboruds.raspologenie, }) return jsonify(results) else: return render_template('searchonaud.html', aud=all_aud, res=res) @app.route("/addaudtodb", methods=['GET', 'POST']) def addaudtodb(): if request.method == 'POST': aud = request.form.get('auditory') db.session.add(Auditory(audnazvanie=aud)) db.session.commit() return redirect(url_for('addAud')) @app.route("/addoborudtodb", methods=['GET', 'POST']) def addoborudtodb(): res = [] if request.method == 'POST': audid = request.form.get('auditory') invnomer = request.form.get('invnomer') ob = db.session.query(Oboruds).filter_by(invNumber=invnomer).first() ob.aud_id = audid db.session.commit() return redirect(url_for('index')) @app.route('/all') def alloborud(): return render_template('all.html') @app.route('/getall') def getall(): oborud = db.session.query(Oboruds).order_by(Oboruds.invNumber).all() results = [] for oboruds in oborud : if oboruds.aud_id is None: results.append({ 'invNumber': oboruds.invNumber, 'nazvanie': oboruds.nazvanie, 'raspologenie': oboruds.raspologenie, 'balancenumber': oboruds.balancenumber, 'kolichestvo': oboruds.kolichestvo, 'numberppasu': oboruds.numberppasu, 'numberved': oboruds.numberved, 'aud': "" }) else: aud = db.session.query(Auditory).filter_by(id=oboruds.aud_id).first() results.append({ 'invNumber': oboruds.invNumber, 'nazvanie': oboruds.nazvanie, 'raspologenie': oboruds.raspologenie, 'balancenumber': oboruds.balancenumber, 'kolichestvo': oboruds.kolichestvo, 'numberppasu': oboruds.numberppasu, 'numberved': oboruds.numberved, 'aud': aud.audnazvanie }) return jsonify(results) @app.route('/vneaud', methods=['GET', 'POST']) def vneaud(): res = [] data = db.session.query(Oboruds).filter(Oboruds.aud_id == None).all() ak = db.session.query(Oboruds).all() for dt in data: res.append([dt.invNumber, dt.nazvanie, dt.typeBalanse]) return render_template('vneaud.html', res=res, kolvo=len(data), all_kol=len(ak)) @app.route('/zametki', methods=['GET', 'POST']) def zametki(): zam = db.session.query(Zametki).filter(Zametki.rmdt == None).all() if request.method == 'POST': textzam = request.form.get('textzam') timeadd = datetime.now(timezone.utc) if len(textzam) > 0: db.session.add(Zametki(txtzam=textzam, created_date=timeadd)) db.session.commit() return redirect(url_for('zametki')) return render_template('zametki.html', zam=zam) @app.route('/zamrm', methods=['GET', 'POST']) def js2(): zmid = request.args.get('zmid') ob = db.session.query(Zametki).filter_by(id=zmid).first() ob.rmdt = datetime.now(timezone.utc) db.session.commit() return jsonify({'success': True}), 200, {'ContentType': 'application/json'} @app.route('/zamsearch', methods=['GET', 'POST']) def zamsearch(): p = request.form.get('srch') searchedZam = db.session.query(Zametki).filter( Zametki.txtzam.contains(p)).ll() zam = [] for item in searchedZam: zam.append([item.txtzam, item.created_date]) return render_template('zametki.html', zam=zam) @app.route('/addraspved', methods=['GET', 'POST']) def addraspved(): if request.method == 'POST': query_string = request.data.decode() un_query_string = unquote(unquote(query_string)).split(',') ob = db.session.query(Oboruds).filter_by(invNumber=un_query_string[0]).first() ob.numberved=un_query_string[1] ob.kolichestvo = un_query_string[2] ob.balancenumber = un_query_string[3] ob.raspologenie=un_query_string[4] db.session.commit() db.session.close() return jsonify({'success': True}, 200, {'ContentType': 'application/json'}) @app.route('/addoborudasu', methods=['GET', 'POST']) def addoborud(): if request.method == 'POST': query_string = request.data.decode() un_query_string = unquote(unquote(query_string)).split(',') db.session.add( Oboruds(invNumber=un_query_string[0], nazvanie=un_query_string[5], raspologenie= un_query_string[4], numberved=un_query_string[1], kolichestvo=un_query_string[2], balancenumber=un_query_string[3] ) ) db.session.commit() return jsonify({'success': True}, 200, {'ContentType': 'application/json'}) # ================================================================================== def ranomraspr(): with app.app_context(): while len(db.session.query(Oboruds).filter(Oboruds.aud_id == None).all()) > 0: audid = random.choice(db.session.query(Auditory).all()) oborud = random.choice(db.session.query(Oboruds).filter(Oboruds.aud_id == None).all()) oborud.aud_id = audid.id db.session.commit() def createdb(): with app.app_context(): db.create_all() auds = ['519', '521', '521a', '522', '523', '601л', '602л', '603л', '604л', '605л', '606л', '607л', '608л', '609л', '610л', '611л', '612л', '613л', '616л', '617л', '618л', '619л', '620л', '621л', '622л', '626л', '627л', '703л', '710л', '713л'] for aud in auds: db.session.add(Auditory(audnazvanie=aud)) db.session.commit() with open('inventMavrin.csv', encoding='cp1251') as csv_file: csv_reader = csv.reader(csv_file, delimiter=';') for row in csv_reader: db.session.add( Oboruds(invNumber=row[0], nazvanie=row[1], typeBalanse='баланс')) db.session.commit() def write2excell(): wb = load_workbook("VedomostMOL.xlsx") sheet = wb.worksheets[0] x=19314 with app.app_context(): joinQuery = db.session.query(Oboruds, Auditory).filter( Oboruds.aud_id == Auditory.id).filter( Oboruds.invNumber==x) print(joinQuery.all()) for i in range(10): cell = 'B'+str(i+6) if __name__ == '__main__': #write2excell() #ranomraspr() #createdb() app.run(debug=True, host='0.0.0.0', port='3800')