52 Commits

Author SHA1 Message Date
Danamir
86713fc75f uncommited changes 2025-11-10 08:11:46 +03:00
Danamir
c24a1fa8c6 Last coommit before refactoring 2025-08-04 10:33:21 +03:00
1c33775f92 fixed table 2024-05-22 15:58:16 +03:00
43ab114e1a fixed table 2024-05-22 13:42:52 +03:00
946ad5c31f add sorting func 2024-05-18 20:58:55 +03:00
Your Name
7b956d89bf merge head by alembic 2024-05-06 08:29:58 -04:00
0891abc0e1 add fumc for login 2024-05-06 15:23:24 +03:00
08393f6685 Merge branch 'main' of https://git.danamir.su/danamir/asuinventory 2024-05-06 15:15:23 +03:00
9cde4e2c7d add readexcell func 2024-05-06 15:14:47 +03:00
Your Name
0a60a16344 bug fix 2024-04-09 23:52:19 +03:00
Your Name
496ef3fa9d bug fix 2024-04-09 23:51:48 +03:00
Your Name
3494e5d17c Merge branch 'main' of https://git.danamir.su/danamir/asuinventory 2024-04-08 10:49:58 +03:00
Your Name
29b0070260 add reload page 2024-04-08 10:47:54 +03:00
Your Name
2e9cc918d5 update db schema 2024-04-05 01:26:46 +03:00
Your Name
d943894ae8 all done2 2024-04-04 22:55:38 +03:00
Your Name
1c901ddb00 all done 2024-04-04 22:51:45 +03:00
Your Name
f9a188c927 add data to db 2024-04-04 20:00:26 +03:00
Your Name
1fce4b41c0 add modal fucnc 2024-04-04 19:31:07 +03:00
Your Name
7ccbba06c1 add click on row 2024-04-04 12:48:43 +03:00
Your Name
63115f0328 asdsadsa 2024-04-03 23:28:55 +03:00
cb862c63a6 add new func 2024-04-03 22:50:16 +03:00
927d8d75a9 edit db scheme 2024-04-03 22:37:57 +03:00
509a3ee913 edit gitignore 2024-04-03 22:31:08 +03:00
86f0f9d977 db check 2024-04-03 22:24:02 +03:00
0c4bf4b9fd 12333 2024-04-03 20:05:36 +03:00
d71945ecb2 11111 2024-04-03 20:02:05 +03:00
3cd5fe63b5 12311 2024-04-03 20:01:50 +03:00
0c6001b297 Resolve merge conflict by incorporating both suggestions 2024-04-03 19:58:22 +03:00
682b6c4ffd 1112 2024-04-03 19:57:28 +03:00
9c859d4660 111 2024-04-03 19:55:02 +03:00
Your Name
f6b720e4eb Merge branch 'dev' of https://git.danamir.su/danamir/asuinventory into dev 2024-04-03 12:17:54 +03:00
Your Name
2fda39a449 123 2024-04-03 12:11:33 +03:00
291e5d0e25 db upgrade 2024-04-03 12:08:40 +03:00
45d8dfd870 change js 2024-04-03 12:04:44 +03:00
Your Name
4c6166c907 add to model 2024-04-02 23:09:27 +03:00
Your Name
2c51bdc695 Merge branch 'dev' 2024-04-02 23:07:44 +03:00
Your Name
c2f3f10c9b add to model 2024-04-02 23:04:45 +03:00
Your Name
f1c755c6ec 123 2024-04-02 22:59:04 +03:00
d2b01f56ec Merge branch 'dev' of https://git.danamir.su/danamir/asuinventory into dev 2024-04-02 22:50:42 +03:00
34ea972560 add new fictures 2024-04-02 22:50:36 +03:00
87c4ebe33e db schema update 2024-04-02 16:34:06 +03:00
Your Name
3a3e62a375 111 2024-04-01 22:43:02 +03:00
Your Name
bf93bf0fdb local changes 2024-04-01 22:37:14 +03:00
Your Name
027b1dc855 1111 2024-04-01 22:35:26 +03:00
4a47746e9d merge 2024-04-01 15:21:43 +03:00
12a63278f7 Merge branch 'dev' 2024-04-01 15:17:53 +03:00
294d646bb6 remove cache 2024-04-01 15:17:12 +03:00
e464960fe5 rename column to model 2024-04-01 15:11:24 +03:00
Your Name
965695a693 add raspologenie and vde numbers 2024-03-31 23:33:26 +03:00
Your Name
b47e9391ba add bug 2024-03-27 09:45:57 +03:00
Your Name
5259dc5292 sss 2024-03-26 23:03:26 +03:00
Your Name
a6eea28071 add funce 2024-03-26 23:02:37 +03:00
56 changed files with 1546 additions and 180 deletions

13
.gitignore vendored
View File

@@ -2,13 +2,10 @@
.vscode
instance
venv/
__pychache__/
123
zabalans.csv
project.db
*.csv
*.db
c*.txt
migrations
__pycache__
.idea

BIN
VedomostMOL.xls Normal file

Binary file not shown.

BIN
VedomostMOL.xlsx Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

164
app.py
View File

@@ -8,7 +8,6 @@ import csv
import random
from urllib.parse import unquote
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
@@ -22,7 +21,13 @@ db.init_app(app)
migrate = Migrate(app, db)
@app.route("/", methods=['GET', 'POST'])
@app.route("/login", methods=['GET', 'POST'])
def login():
return render_template('login.html')
@app.route("/", methods=['GET', 'POST'])
def index():
results = []
results1 = []
@@ -46,7 +51,7 @@ def index():
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)
return render_template('index.html', aud=all_aud, results=results, res1=results1)
@@ -91,7 +96,7 @@ def searchonaud():
return render_template('searchonaud.html', aud=all_aud, res=res)
@app.route("/addaudtodb", methods=['GET', 'POST'])
@app.route("/addaudtodb", methods=['GET', 'POST'])
def addaudtodb():
if request.method == 'POST':
aud = request.form.get('auditory')
@@ -114,25 +119,38 @@ def addoborudtodb():
@app.route('/all')
def alloborud():
return render_template('all.html')
result = db.session.query(Oboruds).order_by(Oboruds.invNumber).all()
res = []
@app.route('/getall')
def getall():
oborud = db.session.query(Oboruds).order_by(Oboruds.invNumber).all()
for ob in result:
if ob.aud_id is not None:
aud = db.session.query(Auditory).filter_by(id=ob.aud_id).first()
res.append([ob.invNumber, ob.nazvanie, aud.audnazvanie])
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:
res.append([ob.invNumber, ob.nazvanie])
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 render_template('all.html', res=res)
@app.route('/updateduplicate', methods=['GET', 'POST'])
def updateduplicate():
if request.method == 'POST':
aud = request.form.get('auditory_dubl')
return jsonify(results)
@app.route('/vneaud', methods=['GET', 'POST'])
@@ -143,12 +161,12 @@ def vneaud():
ak = db.session.query(Oboruds).all()
for dt in data:
res.append([dt.invNumber, dt.nazvanie, dt.typeBalanse])
res.append([dt.invNumber, dt.nazvanie])
return render_template('vneaud.html', res=res, kolvo=len(data), all_kol=len(ak))
@app.route('/zametki', methods=['GET', 'POST'])
@app.route('/zametki', methods=['GET', 'POST'])
def zametki():
zam = db.session.query(Zametki).filter(Zametki.rmdt == None).all()
if request.method == 'POST':
@@ -171,7 +189,7 @@ def js2():
return jsonify({'success': True}), 200, {'ContentType': 'application/json'}
@app.route('/zamsearch', methods=['GET', 'POST'])
@app.route('/zamsearch', methods=['GET', 'POST'])
def zamsearch():
p = request.form.get('srch')
@@ -179,42 +197,61 @@ def zamsearch():
Zametki.txtzam.contains(p)).ll()
zam = []
for item in searchedZam:
zam.append([item.txtzam, item.created_date])
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':
if request.method == 'POST':
query_string = request.data.decode()
print(query_string)
un_query_string = unquote(unquote(query_string)).split(',')
print(un_query_string)
ob = db.session.query(Oboruds).filter_by(invNumber=un_query_string[0]).first()
ob.raspologenie=un_query_string[2]
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()
with app.app_context():
while len(db.session.query(Oboruds).filter(Oboruds.aud_id is None).all()) > 0:
audid = random.choice(db.session.query(Auditory).all())
oborud = random.choice(db.session.query(Oboruds).filter(Oboruds.aud_id is None).all())
oborud.aud_id = audid.id
db.session.commit()
def createdb():
@@ -256,13 +293,52 @@ def createdb():
for row in csv_reader:
db.session.add(
Oboruds(invNumber=row[0], nazvanie=row[1], typeBalanse='баланс'))
db.session.commit()
def write2excell():
wb = xlrd.open_workbook("VedIsh.xls")
sheet = wb.sheet_by_index(0)
newFile = copy(wb)
newSheet = newFile.get_sheet(0)
invNomerColum = 6
column_index = 1
for row_idx in range(sheet.nrows):
cell_value = sheet.cell(row_idx, column_index)
if cell_value:
tmp_inv_number = str(cell_value).split(':')[1]
try:
a = tmp_inv_number[1:-1]
inv_number = int(tmp_inv_number[1:-1])
with app.app_context():
auditory_obj = db.session.query(Auditory).join(Oboruds, Oboruds.aud_id == Auditory.id).filter(
Oboruds.invNumber == inv_number).first()
print(auditory_obj.audnazvanie)
# cur.execute("SELECT aud.audnazvanie FROM oboruds AS ob JOIN auditory AS aud ON ob.aud_id = aud.id WHERE ob.invNumber = ?", (inv_number,))
except:
pass
"""
else:
#newSheet.write(row_idx, invNomerColum, "Нет инв номера")
pass
newFile.save("Ved31.xls")
"""
if __name__ == '__main__':
#write2excell()
#ranomraspr()
#createdb()
app.run(debug=True, host='0.0.0.0', port='3800')
app.run(debug=True, host='0.0.0.0', port='3800')

5
backend/create_new_db.py Normal file
View File

@@ -0,0 +1,5 @@
from backend.models import Base
from backend.database import engine
Base.metadata.drop_all(bind=engine) # Опционально, если вдруг есть
Base.metadata.create_all(bind=engine)

15
backend/database.py Normal file
View File

@@ -0,0 +1,15 @@
# backend/database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
SQLALCHEMY_DATABASE_URL = "sqlite:///./app.db" # или PostgreSQL URL
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()

37
backend/main.py Normal file
View File

@@ -0,0 +1,37 @@
# backend/main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from backend.routers.equipment_types import equipment_types
from backend.routers.auditories import auditories
from backend.routers.oboruds import oboruds
from backend.routers.components import components
from backend.routers.rashodniki import consumables
from backend.routers.zametki import zametki
app = FastAPI()
# Для фронтенда Vue.js
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # заменить на ['http://localhost:5173'] для безопасности
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/ping")
def ping():
return {"message": "pong"}
# Подключение роутов
app.include_router(equipment_types)
app.include_router(auditories)
app.include_router(oboruds)
app.include_router(components)
app.include_router(consumables)
app.include_router(zametki)

69
backend/migrate_data.py Normal file
View File

@@ -0,0 +1,69 @@
import sys
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
from backend.database import SessionLocal as NewSession
from backend import models
OLD_DB_URL = "sqlite:///./backend/old_app.db"
old_engine = create_engine(OLD_DB_URL, connect_args={"check_same_thread": False})
OldSession = sessionmaker(bind=old_engine)
old_db = OldSession()
new_db = NewSession()
def log(msg: str):
print(f"[INFO] {msg}", file=sys.stderr)
def migrate():
log("Запуск переноса данных из old_app.db → app.db")
# Тип оборудования по умолчанию
log("Добавление типа оборудования по умолчанию: 'Неизвестно'")
default_type = models.EquipmentType(name="Неизвестно")
new_db.add(default_type)
new_db.commit()
# Перенос аудиторий
log("Перенос аудиторий...")
auditory_map = {}
aud_rows = old_db.execute(text("SELECT id, audnazvanie FROM auditory")).fetchall()
for aud in aud_rows:
new_aud = models.Auditory(audnazvanie=aud.audnazvanie)
new_db.add(new_aud)
new_db.flush()
auditory_map[aud.id] = new_aud.id
log(f" → перенесено: {len(aud_rows)}")
# Перенос оборудования
log("Перенос оборудования...")
ob_rows = old_db.execute(text("SELECT * FROM oboruds")).fetchall()
for ob in ob_rows:
new_ob = models.Oboruds(
invNumber=ob.invNumber,
nazvanie=ob.nazvanie,
raspologenie=ob.raspologenie,
numberppasu=ob.numberppasu,
kolichestvo=ob.kolichestvo,
aud_id=auditory_map.get(ob.aud_id),
type_id=default_type.id
)
new_db.add(new_ob)
log(f" → перенесено: {len(ob_rows)}")
# Перенос заметок
log("Перенос заметок...")
z_rows = old_db.execute(text("SELECT * FROM zametki")).fetchall()
for z in z_rows:
new_z = models.Zametki(
txtzam=z.txtzam,
created_date=z.created_date,
rmdt=z.rmdt
)
new_db.add(new_z)
log(f" → перенесено: {len(z_rows)}")
new_db.commit()
log("✅ Перенос завершён успешно.")
if __name__ == "__main__":
migrate()

82
backend/models.py Normal file
View File

@@ -0,0 +1,82 @@
# backend/models.py
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
from sqlalchemy.orm import relationship, declarative_base
import datetime
from flask_sqlalchemy import SQLAlchemy
Base = declarative_base()
db = SQLAlchemy()
class Auditory(Base):
__tablename__ = 'auditories'
id = Column(Integer, primary_key=True)
audnazvanie = Column(String)
oboruds = relationship("Oboruds", back_populates="auditory")
class EquipmentType(Base):
__tablename__ = 'equipment_types'
id = Column(Integer, primary_key=True)
name = Column(String, unique=True, nullable=False)
oboruds = relationship("Oboruds", back_populates="type")
class Oboruds(Base):
__tablename__ = 'oboruds'
id = Column(Integer, primary_key=True)
invNumber = Column(Integer)
nazvanie = Column(String(500))
raspologenie = Column(String(200))
numberppasu = Column(String(100))
kolichestvo = Column(Integer)
aud_id = Column(Integer, ForeignKey("auditories.id"))
auditory = relationship("Auditory", back_populates="oboruds")
type_id = Column(Integer, ForeignKey("equipment_types.id"))
type = relationship("EquipmentType", back_populates="oboruds")
components = relationship("Component", back_populates="oborud")
consumables = relationship("Consumable", back_populates="oborud")
class Component(Base):
__tablename__ = 'components'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
description = Column(String)
oborud_id = Column(Integer, ForeignKey("oboruds.id"))
oborud = relationship("Oboruds", back_populates="components")
class Consumable(Base):
__tablename__ = 'consumables'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
description = Column(String)
oborud_id = Column(Integer, ForeignKey("oboruds.id"))
oborud = relationship("Oboruds", back_populates="consumables")
class Zametki(Base):
__tablename__ = 'zametki'
id = Column(Integer, primary_key=True)
txtzam = Column(String(10000))
created_date = Column(DateTime, default=datetime.datetime.utcnow)
rmdt = Column(DateTime)

BIN
backend/requirements.txt Normal file

Binary file not shown.

View File

@@ -0,0 +1,18 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from .. import models, schemas, database
auditories = APIRouter(prefix="/auditories", tags=["auditories"])
@auditories.post("/", response_model=schemas.AuditoryRead)
def create_auditory(item: schemas.AuditoryCreate, db: Session = Depends(database.get_db)):
obj = models.Auditory(**item.dict())
db.add(obj)
db.commit()
db.refresh(obj)
return obj
@auditories.get("/", response_model=list[schemas.AuditoryRead])
def list_auditories(db: Session = Depends(database.get_db)):
return db.query(models.Auditory).all()

View File

@@ -0,0 +1,18 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from .. import models, schemas, database
components = APIRouter(prefix="/components", tags=["components"])
@components.post("/", response_model=schemas.ComponentRead)
def create_component(item: schemas.ComponentCreate, db: Session = Depends(database.get_db)):
obj = models.Component(**item.dict())
db.add(obj)
db.commit()
db.refresh(obj)
return obj
@components.get("/", response_model=list[schemas.ComponentRead])
def list_components(db: Session = Depends(database.get_db)):
return db.query(models.Component).all()

View File

@@ -0,0 +1,17 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from .. import models, schemas, database
equipment_types = APIRouter(prefix="/equipment-types", tags=["equipment_types"])
@equipment_types.post("/", response_model=schemas.EquipmentTypeRead)
def create_equipment_type(item: schemas.EquipmentTypeCreate, db: Session = Depends(database.get_db)):
obj = models.EquipmentType(**item.dict())
db.add(obj)
db.commit()
db.refresh(obj)
return obj
@equipment_types.get("/", response_model=list[schemas.EquipmentTypeRead])
def list_equipment_types(db: Session = Depends(database.get_db)):
return db.query(models.EquipmentType).all()

View File

@@ -0,0 +1,24 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from .. import models, schemas, database
oboruds = APIRouter(prefix="/oboruds", tags=["oboruds"])
@oboruds.post("/", response_model=schemas.OborudRead)
def create_oborud(item: schemas.OborudCreate, db: Session = Depends(database.get_db)):
obj = models.Oboruds(**item.dict())
db.add(obj)
db.commit()
db.refresh(obj)
return obj
@oboruds.get("/", response_model=list[schemas.OborudRead])
def list_oboruds(db: Session = Depends(database.get_db)):
return db.query(models.Oboruds).all()
@oboruds.get("/{oborud_id}", response_model=schemas.OborudRead)
def get_oborud(oborud_id: int, db: Session = Depends(database.get_db)):
obj = db.query(models.Oboruds).filter(models.Oboruds.id == oborud_id).first()
if not obj:
raise HTTPException(status_code=404, detail="Oborud not found")
return obj

View File

@@ -0,0 +1,17 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from .. import models, schemas, database
consumables = APIRouter(prefix="/consumables", tags=["consumables"])
@consumables.post("/", response_model=schemas.ConsumableRead)
def create_consumable(item: schemas.ConsumableCreate, db: Session = Depends(database.get_db)):
obj = models.Consumable(**item.dict())
db.add(obj)
db.commit()
db.refresh(obj)
return obj
@consumables.get("/", response_model=list[schemas.ConsumableRead])
def list_consumables(db: Session = Depends(database.get_db)):
return db.query(models.Consumable).all()

View File

@@ -0,0 +1,17 @@
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from .. import models, schemas, database
zametki = APIRouter(prefix="/zametki", tags=["zametki"])
@zametki.post("/", response_model=schemas.ZametkaRead)
def create_zametka(item: schemas.ZametkaCreate, db: Session = Depends(database.get_db)):
obj = models.Zametki(**item.dict())
db.add(obj)
db.commit()
db.refresh(obj)
return obj
@zametki.get("/", response_model=list[schemas.ZametkaRead])
def list_zametki(db: Session = Depends(database.get_db)):
return db.query(models.Zametki).all()

102
backend/schemas.py Normal file
View File

@@ -0,0 +1,102 @@
# backend/schemas.py
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
# === Equipment Type ===
class EquipmentTypeBase(BaseModel):
name: str
class EquipmentTypeCreate(EquipmentTypeBase):
pass
class EquipmentTypeRead(EquipmentTypeBase):
id: int
class Config:
orm_mode = True
# === Component ===
class ComponentBase(BaseModel):
name: str
description: Optional[str] = None
class ComponentCreate(ComponentBase):
oborud_id: int
class ComponentRead(ComponentBase):
id: int
class Config:
orm_mode = True
# === Consumable ===
class ConsumableBase(BaseModel):
name: str
description: Optional[str] = None
class ConsumableCreate(ConsumableBase):
oborud_id: int
class ConsumableRead(ConsumableBase):
id: int
class Config:
orm_mode = True
# === Oborud ===
class OborudBase(BaseModel):
invNumber: Optional[int]
nazvanie: str
raspologenie: Optional[str] = None
numberppasu: Optional[str] = None
kolichestvo: Optional[int] = None
aud_id: int
type_id: int
class OborudCreate(OborudBase):
pass
class OborudRead(OborudBase):
id: int
type: EquipmentTypeRead
components: List[ComponentRead] = []
consumables: List[ConsumableRead] = []
class Config:
orm_mode = True
# === Auditory ===
class AuditoryBase(BaseModel):
audnazvanie: str
class AuditoryCreate(AuditoryBase):
pass
class AuditoryRead(AuditoryBase):
id: int
class Config:
orm_mode = True
# === Zametka ===
class ZametkaBase(BaseModel):
txtzam: str
rmdt: Optional[datetime] = None
class ZametkaCreate(ZametkaBase):
pass
class ZametkaRead(ZametkaBase):
id: int
created_date: datetime
class Config:
orm_mode = True

View File

@@ -0,0 +1,32 @@
"""empty message
Revision ID: 10da3140ab2e
Revises: 4eacd6dcd461
Create Date: 2024-04-05 01:25:48.931573
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '10da3140ab2e'
down_revision = '4eacd6dcd461'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('kolichestvo', sa.Integer(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.drop_column('kolichestvo')
# ### end Alembic commands ###

View File

@@ -0,0 +1,54 @@
"""empty message
Revision ID: 4eacd6dcd461
Revises: c208cbc25232
Create Date: 2024-04-03 23:25:42.271936
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '4eacd6dcd461'
down_revision = 'c208cbc25232'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('numberved', sa.String(length=100), nullable=True))
batch_op.add_column(sa.Column('numberppasu', sa.String(length=100), nullable=True))
batch_op.add_column(sa.Column('balancenumber', sa.Integer(), nullable=True))
batch_op.alter_column('nazvanie',
existing_type=sa.TEXT(length=500),
type_=sa.String(length=500),
existing_nullable=True)
batch_op.alter_column('raspologenie',
existing_type=sa.TEXT(length=200),
type_=sa.String(length=200),
existing_nullable=True)
batch_op.drop_column('buhnumberpp')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('buhnumberpp', sa.VARCHAR(length=100), nullable=True))
batch_op.alter_column('raspologenie',
existing_type=sa.String(length=200),
type_=sa.TEXT(length=200),
existing_nullable=True)
batch_op.alter_column('nazvanie',
existing_type=sa.String(length=500),
type_=sa.TEXT(length=500),
existing_nullable=True)
batch_op.drop_column('balancenumber')
batch_op.drop_column('numberppasu')
batch_op.drop_column('numberved')
# ### end Alembic commands ###

View File

@@ -0,0 +1,34 @@
"""empty message
Revision ID: 6fc3d1adb061
Revises: be7c94c549e5
Create Date: 2024-04-02 16:32:23.180273
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '6fc3d1adb061'
down_revision = 'be7c94c549e5'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('buhnumberpp', sa.String(length=100), nullable=True))
batch_op.add_column(sa.Column('kolichestvo', sa.Integer(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.drop_column('kolichestvo')
batch_op.drop_column('buhnumberpp')
# ### end Alembic commands ###

View File

@@ -0,0 +1,32 @@
"""empty message
Revision ID: 885bdd7b5161
Revises: be7c94c549e5
Create Date: 2024-04-02 23:03:59.401369
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '885bdd7b5161'
down_revision = 'be7c94c549e5'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('kolichestvo', sa.Integer(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.drop_column('kolichestvo')
# ### end Alembic commands ###

View File

@@ -0,0 +1,54 @@
"""empty message
Revision ID: 8e5efc4de919
Revises: c208cbc25232
Create Date: 2024-04-03 22:36:46.208266
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '8e5efc4de919'
down_revision = 'c208cbc25232'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('numberved', sa.String(length=100), nullable=True))
batch_op.add_column(sa.Column('numberppasu', sa.String(length=100), nullable=True))
batch_op.add_column(sa.Column('balancenumber', sa.Integer(), nullable=True))
batch_op.alter_column('nazvanie',
existing_type=sa.TEXT(length=500),
type_=sa.String(length=500),
existing_nullable=True)
batch_op.alter_column('raspologenie',
existing_type=sa.TEXT(length=200),
type_=sa.String(length=200),
existing_nullable=True)
batch_op.drop_column('buhnumberpp')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('buhnumberpp', sa.TEXT(length=100), nullable=True))
batch_op.alter_column('raspologenie',
existing_type=sa.String(length=200),
type_=sa.TEXT(length=200),
existing_nullable=True)
batch_op.alter_column('nazvanie',
existing_type=sa.String(length=500),
type_=sa.TEXT(length=500),
existing_nullable=True)
batch_op.drop_column('balancenumber')
batch_op.drop_column('numberppasu')
batch_op.drop_column('numberved')
# ### end Alembic commands ###

View File

@@ -0,0 +1,34 @@
"""empty message
Revision ID: be7c94c549e5
Revises: 8e838956713f
Create Date: 2024-04-01 15:09:52.082987
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'be7c94c549e5'
down_revision = '8e838956713f'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('balancenumber', sa.String(length=30), nullable=True))
batch_op.drop_column('typeBalanse')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('oboruds', schema=None) as batch_op:
batch_op.add_column(sa.Column('typeBalanse', sa.VARCHAR(length=30), nullable=True))
batch_op.drop_column('balancenumber')
# ### end Alembic commands ###

View File

@@ -0,0 +1,24 @@
"""empty message
Revision ID: c208cbc25232
Revises: 6fc3d1adb061, 885bdd7b5161
Create Date: 2024-04-03 22:11:15.008480
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'c208cbc25232'
down_revision = ('6fc3d1adb061', '885bdd7b5161')
branch_labels = None
depends_on = None
def upgrade():
pass
def downgrade():
pass

View File

@@ -0,0 +1,24 @@
"""empty message
Revision ID: d4a8e4c9e65a
Revises: 10da3140ab2e, 8e5efc4de919
Create Date: 2024-05-06 08:27:39.088982
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'd4a8e4c9e65a'
down_revision = ('10da3140ab2e', '8e5efc4de919')
branch_labels = None
depends_on = None
def upgrade():
pass
def downgrade():
pass

View File

@@ -1,32 +1,76 @@
# backend/models.py
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
from sqlalchemy.orm import relationship, declarative_base
import datetime
db = SQLAlchemy()
Base = declarative_base()
class Auditory(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
audnazvanie=db.Column(db.String)
oboruds = db.relationship('Oboruds')
class Auditory(Base):
__tablename__ = 'auditories'
class Oboruds(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
invNumber=db.Column(db.Integer)
nazvanie=db.Column(db.String(500))
typeBalanse = db.Column(db.String(30))
raspologenie = db.Column(db.String(200))
numberved = db.Column(db.String(100))
aud_id = db.Column(db.Integer, db.ForeignKey(Auditory.id))
id = Column(Integer, primary_key=True)
audnazvanie = Column(String)
oboruds = relationship("Oboruds", back_populates="auditory")
class EquipmentType(Base):
__tablename__ = 'equipment_types'
class Zametki(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
txtzam=db.Column(db.String(10000))
created_date = db.Column(db.DateTime, default=datetime.datetime.utcnow)
rmdt = db.Column(db.DateTime)
id = Column(Integer, primary_key=True)
name = Column(String, unique=True, nullable=False)
oboruds = relationship("Oboruds", back_populates="type")
class Oboruds(Base):
__tablename__ = 'oboruds'
id = Column(Integer, primary_key=True)
invNumber = Column(Integer)
nazvanie = Column(String(500))
raspologenie = Column(String(200))
numberppasu = Column(String(100))
kolichestvo = Column(Integer)
aud_id = Column(Integer, ForeignKey("auditories.id"))
auditory = relationship("Auditory", back_populates="oboruds")
type_id = Column(Integer, ForeignKey("equipment_types.id"))
type = relationship("EquipmentType", back_populates="oboruds")
components = relationship("Component", back_populates="oborud")
consumables = relationship("Consumable", back_populates="oborud")
class Component(Base):
__tablename__ = 'components'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
description = Column(String)
oborud_id = Column(Integer, ForeignKey("oboruds.id"))
oborud = relationship("Oboruds", back_populates="components")
class Consumable(Base):
__tablename__ = 'consumables'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
description = Column(String)
oborud_id = Column(Integer, ForeignKey("oboruds.id"))
oborud = relationship("Oboruds", back_populates="consumables")
class Zametki(Base):
__tablename__ = 'zametki'
id = Column(Integer, primary_key=True)
txtzam = Column(String(10000))
created_date = Column(DateTime, default=datetime.datetime.utcnow)
rmdt = Column(DateTime)

Binary file not shown.

6
serve.py Normal file
View File

@@ -0,0 +1,6 @@
from waitress import serve
from app import app
if __name__ == '__main__':
serve(app, port='3800')

View File

@@ -8,7 +8,7 @@ body {
min-width: 580px;
}
.row{
.row {
text-align: center;
@@ -24,7 +24,7 @@ body {
header {
text-align: center;
background-color: #6A90B6;
padding: 2px;
}
@@ -35,7 +35,7 @@ a:hover {
color: #041322;
}
a{
a {
color: #041322;
@@ -54,7 +54,7 @@ button {
.card {
width: 200px;
/*width: 200px; */
margin: 10px;
border-radius: 15px;
border-color: #E07D54;
@@ -67,42 +67,62 @@ h5 {
}
.hidden-column{
display: none;
.hidden-column {
display: none;
}
nav{
nav {
width:100%;
width: 100%;
}
.table{
table {
word-break: break-all;
border-collapse: separate !important;
}
.aud{
.table td {
font-size: 14px;
padding: 0;
max-width: 10rem;
word-break: break-all;
border-collapse: separate !important;
}
.aud {
width: 110px;
}
.inv{
.inv {
width: 400px;
}
.rasp{
max-width: 200px;
.rasp {
width: 200px;
word-break: break-word;
white-space: nowrap;
}
#modal_matcenn{
#modal_matcenn {
margin-left: 20px;
}
.datatable {
background-color: whitesmoke;
}
.datatable th:nth-child(7) {
width: 200px;
}
@media print {
*{
* {
font-family: "Times New Roman", Times, serif;
}
@@ -110,7 +130,7 @@ nav{
margin: 0;
padding: 0;
background-color: transparent;
}
@@ -130,29 +150,30 @@ nav{
width: 100%;
}
.no-print {
display: none;
}
}
table.rs-table-bordered{
border:1px solid #000000;
margin-top:20px;
table.rs-table-bordered {
border: 1px solid #000000;
margin-top: 20px;
font-size: 14pt;
}
table.rs-table-bordered > thead > tr > th{
border:1px solid #000000;
}
table.rs-table-bordered > thead > tr > th {
border: 1px solid #000000;
padding: 2px;
font-size: 14pt;
}
table.rs-table-bordered > tbody > tr > td{
border:1px solid #000000;
table.rs-table-bordered > tbody > tr > td {
border: 1px solid #000000;
padding: 10px;
font-size: 14pt;
}
}

282
static/js/allmatc.js Normal file
View File

@@ -0,0 +1,282 @@
function clearTable() {
var table = document.getElementById("alldatatable");
var rowCount = table.rows.length;
// Iterate through each row and remove it
for (var i = rowCount - 1; i > 0; i--) {
table.deleteRow(i);
}
}
function getAllData() {
clearTable();
let tableBody = document.getElementById('alldatatable').getElementsByTagName("tbody")[0];
i = 0;
$.getJSON("/getall", function (data) {
$.each(data, function (index, item) {
let newRow = tableBody.insertRow(tableBody.rows.length);
let cell1 = newRow.insertCell(0);
let cell2 = newRow.insertCell(1);
let cell3 = newRow.insertCell(2);
let cell4 = newRow.insertCell(3);
let cell5 = newRow.insertCell(4);
let cell6 = newRow.insertCell(5);
let cell7 = newRow.insertCell(6);
let cell8 = newRow.insertCell(7);
i++;
cell1.innerText = i;
cell2.innerText = item.numberved;
cell3.innerText = item.invNumber;
cell4.innerText = item.nazvanie;
cell5.innerText = item.kolichestvo;
cell6.innerText = item.balancenumber;
cell7.innerText = item.aud;
cell8.innerText = item.raspologenie;
$(newRow).data('itemData', i);
$(newRow).on("click", function () {
let vednumbertxt = newRow.cells[1].innerText;
let invnomertxt = newRow.cells[2].innerText;
let nazvanietxt = newRow.cells[3].innerText;
let kolvotxt = newRow.cells[4].innerText;
let schettxt = newRow.cells[5].innerText;
let raspologtxt = newRow.cells[7].innerText;
$('#getmodal').modal('show');
let vedomost = document.getElementById('modal_vednumber')
let invnom = document.getElementById('modal_invnom')
let matcen = document.getElementById('modal_matcenn')
let kolvo = document.getElementById('modal_kolvo')
let balancenumber = document.getElementById('modal_balance')
let rasp = document.getElementById('modal_rapolog')
invnom.innerText = invnomertxt
matcen.innerText = nazvanietxt.substring(0, 20)
if (vednumbertxt.length > 0) {
vedomost.value = vednumbertxt;
}
if (kolvotxt.length > 0) {
kolvo.value = kolvotxt;
}
if (schettxt.length > 0) {
balancenumber.value = schettxt;
}
if (raspologtxt.length > 0) {
rasp.value = raspologtxt;
}
});
});
});
}
$(document).ready(function () {
getAllData();
});
$('#modalclose').click(function () {
let vednumber = document.getElementById('modal_vednumber')
let kolvo = document.getElementById('modal_kolvo')
let balancenumber = document.getElementById('modal_balance')
let matcen = document.getElementById('modal_matcenn')
let rasp = document.getElementById('modal_rapolog')
vednumber.value = '';
kolvo.value = '';
balancenumber.value = '';
matcen.value = '';
rasp.value = '';
$('#getmodal').modal('hide')
})
$('#modalsavetodb').click(function () {
let invnom = document.getElementById('modal_invnom')
let vednumber = document.getElementById('modal_vednumber')
let kolvo = document.getElementById('modal_kolvo')
let balancenumber = document.getElementById('modal_balance')
let matcen = document.getElementById('modal_matcenn')
let rasp = document.getElementById('modal_rapolog')
let nazv = document.getElementById('modal_nazvanie')
let changeddata = new Array()
changeddata[0] = invnom.text;
changeddata[1] = vednumber.value;
changeddata[2] = kolvo.value;
changeddata[3] = balancenumber.value;
changeddata[4] = rasp.value;
let sendData = changeddata.join(',')
console.log(sendData)
$.ajax({
url: "/addraspved",
type: "POST",
contentType: "application/json;charset=utf-8",
dataType: "json",
data: sendData,
success: function () {
$('#getmodal').modal('hide')
vednumber.value = '';
kolvo.value = '';
balancenumber.value = '';
matcen.value = '';
rasp.value = '';
changeddata = [];
window.location.reload();
},
})
})
$('#addoborud').click(function () {
$('#addmodal').modal('show');
})
$('#modal2savetodb').click(function () {
let invnomer = document.getElementById('modal2_invnom')
let vednumber = document.getElementById('modal2_vednumber')
let kolvo = document.getElementById('modal2_kolvo')
let balancenumber = document.getElementById('modal2_balance')
let matcen = document.getElementById('modal2_matcenn')
let rasp = document.getElementById('modal2_rapolog')
let nazv = document.getElementById('modal2_nazvanie')
let changeddata = new Array()
changeddata[0] = invnomer.value;
changeddata[1] = vednumber.value;
changeddata[2] = kolvo.value;
changeddata[3] = balancenumber.value;
changeddata[4] = rasp.value;
changeddata[5] = nazv.value;
let sendData = changeddata.join(',')
console.log(sendData)
$.ajax({
url: "/addoborudasu",
type: "POST",
contentType: "application/json;charset=utf-8",
dataType: "json",
data: sendData,
success: function () {
vednumber.value = '';
invnomer.value = '';
nazvanie.value = '';
kolvo.value = '';
balancenumber.value = '';
matcen.value = '';
rasp.value = '';
$('#addmodal').modal('hide')
window.location.reload()
},
})
})
$('#modal2close').click(function () {
let vednumber = document.getElementById('modal2_vednumber')
let invnomer = document.getElementById('modal2_invnom')
let nazvanie = document.getElementById('modal2_nazvanie')
let kolvo = document.getElementById('modal2_kolvo')
let balancenumber = document.getElementById('modal2_balance')
let matcen = document.getElementById('modal2_matcenn')
let rasp = document.getElementById('modal2_rapolog')
vednumber.value = '';
invnomer.value = '';
nazvanie.value = '';
kolvo.value = '';
balancenumber.value = '';
matcen.value = '';
rasp.value = '';
$('#addmodal').modal('hide')
})
$('#modal2').on('hidden.bs.modal', function () {
location.reload();
})
$(document).ready(function () {
// Слушаем событие клика по заголовкам таблицы
$('#alldatatable thead th').on('click', function () {
var columnIndex = $(this).index(); // Индекс колонки
var sortColumn = $(this).text().toLowerCase(); // Текст заголовка колонки
// Сортируем таблицу по выбранной колонке
$('#alldatatable tbody tr').sort(function (a, b) {
var valA;
var valB;
if (isNaN(parseFloat($(a).find('td:eq(' + columnIndex + ')').text()))) {
// если это текстовая колонка, то сортируем по алфавиту
valA = $(a).find('td:eq(' + columnIndex + ')').text().toLowerCase();
valB = $(b).find('td:eq(' + columnIndex + ')').text().toLowerCase();
} else {
// если это числовая колонка, то сортируем по числовому значению
valA = parseFloat($(a).find('td:eq(' + columnIndex + ')').text());
valB = parseFloat($(b).find('td:eq(' + columnIndex + ')').text());
}
if (valA < valB) return -1;
if (valA > valB) return 1;
return 0;
}).appendTo('#alldatatable tbody');
// Обновляем классы для активной колонки
$('#alldatatable thead th').removeClass('active');
$(this).addClass('active');
});
});

35
static/js/allmatcen.js Normal file
View File

@@ -0,0 +1,35 @@
function getData(){
const audid = document.getElementById('auditory')
$.ajax({
url: "/getall",
type: "get",
contentType: 'application/json',
dataType: 'json',
success: function(response){
var data = response;
const table = document.getElementById('datatable')
table.innerHTML = ''
var headTable = '<tr> <td >Номер в Инв. вед</td> <td id="invnomer">Инв. номер</td><td>Название</td><td class="no-print aud">Аудитория</td> <td >Расположение</td> <td id="proverka"class="hidden-column"> Проверено</td> </tr>'
table.innerHTML += headTable
var tr =""
data.forEach(element => {
tr += '<tr onclick="tableclick(this)">'
tr += '<td>' + element.num_ved + '</td>'
tr += '<td clas="inv">' + element.inv_number + '</td>'
tr += '<td>' + element.oboruds_id + '</td>'
tr += '<td class="no-print">' + element.auditory_name + '</td>'
tr += '<td class="rasp">' +element.raspolog + '</td>'
tr += '<td>' + '\n' + '</td>'
tr += '</tr>'
});
table.innerHTML += tr
}
})
}

View File

@@ -16,9 +16,9 @@ function getData(){
var data = response;
const table = document.getElementById('datatable')
table.innerHTML = ''
var headTable = '<tr> <td >Номер в Инв. вед</td> <td id="invnomer">Инв. номер</td><td>Название</td><td class="no-print aud">Аудитория</td> <td >Расположение</td> <td id="proverka"class="hidden-column"> Проверено</td> </tr>'
table.innerHTML += headTable
var tr =""
@@ -33,7 +33,7 @@ function getData(){
tr += '</tr>'
});
table.innerHTML += tr
table.innerHTML = headTable + tr
}
})
}

View File

@@ -2,39 +2,146 @@
{% block content %}
<div class="row">
<div class="card col-md-10 col-10">
<div class="card-body">
<form>
<h3 class=" no-print card-title"> Все мат. ценности </h3>
<button id="printallbutton"> Печать </button>
<table class="table pagebreak" col-md-10>
<thead>
<tr>
<th scope="col">Инв. номер</th>
<th scope="col">Название</th>
<th scope="col">Аудитория</th>
</tr>
</thead>
{% for item in res: %}
<tr>
<td> <input type="hidden" name="invnomer" value="{{ item[0] }}"> {{ item[0] }} </td>
<td> {{ item[1] }} </td>
<!-- Modal -->
<div class="modal fade" id="getmodal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body" id="textarea">
<td>
{{ item[2] }}
</td>
</tr>
{% endfor %}
</table>
</form>
<div class="row">
<a id="modal_invnom"> </a><a id="modal_matcenn"></a>
</div>
<div class="row">
№ из ведомости
<input type="text" class="form-control" id ='modal_vednumber' placeholder="Номер из ведомости">
</div>
<div class="row">
Количество
<input type="text" class="form-control" id ='modal_kolvo' placeholder="Количество">
</div>
<div class="row">
Балансовый счёт
<input type="text" class="form-control" id ='modal_balance' placeholder="Балансовый счёт">
</div>
<div class="row">
Расположение
<input type="text" class="form-control" id ='modal_rapolog' placeholder="Введите расположение">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" id="modalclose">Закрыть</button>
<button type="button" class="btn btn-primary" id="modalsavetodb" >Сохранить изменения</button>
</div>
</div>
</div>
</div>
</div>
<!-- Modal2 -->
<div class="modal fade" id="addmodal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body" id="textarea">
<div class="row">
<a id="modal_invnom"> </a><a id="modal2_matcenn"></a>
</div>
<div class="row">
№ из ведомости
<input type="text" class="form-control" id ='modal2_vednumber' placeholder="Номер из ведомости">
<div class="row">
Инвентарный номер
<input type="text" class="form-control" id ='modal2_invnom' placeholder="Инвентарный номер">
</div>
</div>
<div class="row">
Название
<input type="text" class="form-control" id ='modal2_nazvanie' placeholder="Название">
</div>
<div class="row">
Количество
<input type="text" class="form-control" id ='modal2_kolvo' placeholder="Количество">
</div>
<div class="row">
Балансовый счёт
<input type="text" class="form-control" id ='modal2_balance' placeholder="Балансовый счёт">
</div>
<div class="row">
Расположение
<input type="text" class="form-control" id ='modal2_rapolog' placeholder="Введите расположение">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" id="modal2close">Закрыть</button>
<button type="button" class="btn btn-primary" id="modal2savetodb" >Сохранить изменения</button>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<h3 id ='123' class=" no-print"> Все мат. ценности </h3>
</div>
<div class="row col-12">
<button class="button" id="printallbutton"> Печать </button>
</div>
<div class="row col-12">
<button class="button" id="addoborud"> Добавить </button>
</div>
<div class="row">
<div class="card col-md-11 table-responsive">
<table id="alldatatable" class="alldatable table pagebreak" >
<thead>
<tr>
<th scope="col"><br>п/п <br>АСУ</th>
<th scope="col">№ п/п <br>вед</th>
<th scope="col">Инв. номер</th>
<th scope="col">Название</th>
<th scope="col">Кол-во</th>
<th scope="col">Счёт</th>
<th scope="col">Ауд - я</th>
<th scope="col">Расположение</th>
</tr>
</thead>
<tr>
</tr>
</table>
</div>
</div>
<script src="{{url_for('static', filename='js/allmatc.js') }}"></script>
{% endblock %}

View File

@@ -9,4 +9,5 @@
<script src="{{url_for('static', filename='js/zametki.js') }}"></script>
<script src="{{url_for('static', filename='js/searchonaud.js') }}"></script>
<script src="{{url_for('static', filename='js/print.js') }}"></script>
<script src="{{url_for('static', filename='js/modal.js') }}"></script>
<script src="{{url_for('static', filename='js/modal.js') }}"></script>
<script src="{{url_for('static', filename='js/allmatc.js') }}"></script>

62
templates/login.html Normal file
View File

@@ -0,0 +1,62 @@
{% extends 'base.html' %}
{% block content %}
<div class="row">
<div class="card col-4" >
<div class="card-body">
<form class="form-horizontal">
<fieldset>
<!-- Form Name -->
<legend>Авторизация</legend>
<!-- Text input-->
<div class="form-group">
<label control-label" for="logininput">Логин</label>
<div>
<input id="logininput" name="logininput" type="text" placeholder="Введите логин" class="form-control input-md">
</div>
</div>
<!-- Password input-->
<div class="form-group">
<label class="control-label" for="passwordinput">Пароль</label>
<input id="passwordinput" name="passwordinput" type="password" placeholder="Введите пароль" class="form-control input-md">
</div>
</div>
<div class="row">
<button id="btn_login" name="btn_login" class="btn btn-primary">Войти</button>
</div>
</fieldset>
</form>
</div>
</div>
</div>
{% endblock %}

View File

@@ -3,72 +3,98 @@
{% block content %}
<!-- Modal -->
<div class="modal fade" id="getmodal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body" id="textarea">
<input type="text" class="form-control" id ='vednumber' placeholder="Номер из веломости">
<input type="text" class="form-control" id ='rapolog' placeholder="Введите расположение">
<!-- Modal -->
<div class="modal fade" id="getmodal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body" id="textarea">
<input type="text" class="form-control" id='vednumber' placeholder="Номер из веломости">
<input type="text" class="form-control" id='rapolog' placeholder="Введите расположение">
<div class="row">
<a id="modal_invnom"> </a><a id="modal_matcenn"></a>
</div>
<form method="POST" action="/addraspved">
<div class="row">
№ из ведомости
<input type="text" class="form-control" name="modal_vednumber" id='modal_vednumber'
placeholder="Номер из ведомости">
</div>
<div class="row">
Расположение
<input type="text" class="form-control" name="modal_rapolog" id='modal_rapolog'
placeholder="Введите расположение">
</div>
</form>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" id="modalclose">Закрыть
</button>
<button type="button" class="btn btn-primary" id="modalsavetodb">Сохранить изменения</button>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" id="modalclose">Закрыть</button>
<button type="button" class="btn btn-primary" id="modalsavetodb" >Сохранить изменения</button>
</div>
</div>
</div>
</div>
<div class="row no-print">
<div class="card col-md-10 col-10">
<div class="card-body">
<select name="auditory" id="auditory">
{% for item in aud: %}
<option name="optauditory" value="{{item.id}}">{{ item.audnazvanie }}</option>
{% endfor %}
</select>
<select name="auditory" id="auditory">
<button id="searchbutton"> Найти </button>
<button id="printbutton"> Печать </button>
{% for item in aud: %}
<option name="optauditory" value="{{ item.id }}">{{ item.audnazvanie }}</option>
{% endfor %}
</select>
<button id="searchbutton"> Найти</button>
<button id="printbutton"> Печать</button>
</div>
</div>
</div>
<div class="row">
<div class="card col-md-10 col-10">
<div class="card-body">
<h3 class="card-title no-print"> Поаудиторно </h3>
<table class="table" id="datatable" col-md-10>
<td >Номер в Инв. вед</td>
<td >Инв. номер</td>
<td >Название</td>
<td class="no-print">Аудитория</td>
<td >Расположение</td>
<div class="card-body">
<h3 class="card-title no-print"> Поаудиторно </h3>
{% for item in res: %}
<td> <input type="hidden" name="invnomer" value="{{ item[0] }}"> {{ item[0] }} </td>
<td> {{ item[1] }} </td>
<td class="no-print"> {{item[2]}} </td>
<td id="proverka"> Проверено </td>
{% endfor %}
</table>
</div>
<table class="table " id="datatable">
<th>Номер в Инв. вед</th>
<th>Инв. номер</th>
<th>Название</th>
<th class="no-print">Аудитория</th>
<th>Расположение</th>
{% for item in res %}
<td><input type="hidden" name="invnomer" value="{{ item[0] }}"> {{ item[0] }} </td>
<td> {{ item[1] }} </td>
<td class="no-print"> {{ item[2] }} </td>
<td id="proverka"> Проверено</td>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{%endblock%}
{% endblock %}