1234
This commit is contained in:
121
app/pages/add_new_data.py
Normal file
121
app/pages/add_new_data.py
Normal file
@@ -0,0 +1,121 @@
|
||||
import flet as ft
|
||||
from designer import color, Button, Text, DataPicer, DataGrid, DownList, Field, Loger,Observer
|
||||
from user_data import User_data
|
||||
import pydantic as pd
|
||||
import datetime
|
||||
import json
|
||||
|
||||
class Add_new_data(ft.View):
|
||||
def __init__(self, page: ft.Page):
|
||||
self.data_grid = DataGrid(page=page)
|
||||
self.creation_time = datetime.datetime.today()
|
||||
super().__init__(
|
||||
route="/add_new_data",
|
||||
bgcolor=color[2],
|
||||
controls=[
|
||||
ft.Column(
|
||||
controls=[
|
||||
ft.Container(
|
||||
padding=ft.padding.all(20),
|
||||
border_radius=ft.border_radius.all(10),
|
||||
height=70,
|
||||
expand=True,
|
||||
bgcolor=color[3],
|
||||
content=ft.Row(
|
||||
expand=True,
|
||||
controls=[
|
||||
Button(text="профиль"),
|
||||
Button(text="мои данные"),
|
||||
Button(text="заполнить данные"),
|
||||
]
|
||||
)
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Row(
|
||||
scroll=True,
|
||||
controls=[
|
||||
ft.Column(
|
||||
controls=[
|
||||
self.data_grid,
|
||||
Button(text="+", on_click=self.data_grid.add_new_row),
|
||||
Button(text="сохранить", on_click=self.open_data_picer),
|
||||
]
|
||||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
def send_data_to_api(self, save_data, api_url: str):
|
||||
import requests
|
||||
headers = {'Content-Type': 'application/json'}
|
||||
response = requests.post(api_url, headers=headers, data=json.dumps(save_data))
|
||||
return response
|
||||
|
||||
def validdate(self, item, column):
|
||||
columns = {}
|
||||
count_void = 0
|
||||
icol = 1
|
||||
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
columns[column[icol]] = current_time
|
||||
icol += 1
|
||||
columns[column[icol]] = str(self.creation_time.strftime("%Y-%m-%d"))
|
||||
icol += 1
|
||||
columns[column[icol]] = User_data.name_poo
|
||||
icol += 1
|
||||
columns[column[icol]] = "test"
|
||||
icol += 1
|
||||
for cell in item.cells:
|
||||
print(f"{icol}")
|
||||
if isinstance(cell.content, DownList):
|
||||
if cell.content.view_text.value == "":
|
||||
Loger(text="строку с пустыми выподающими списками")
|
||||
break
|
||||
elif cell.content._id_ != -1:
|
||||
columns[column[icol]] = Observer.inn_manufacturing_enterprises["inn"][cell.content._id_]
|
||||
icol += 1
|
||||
columns[column[icol]] = cell.content.view_text.value
|
||||
else:
|
||||
columns[column[icol]] = cell.content.view_text.value
|
||||
elif isinstance(cell.content, Field):
|
||||
if cell.content.value == "":
|
||||
columns[column[icol]] = "0"
|
||||
else:
|
||||
columns[column[icol]] = cell.content.value
|
||||
icol += 1
|
||||
return columns
|
||||
|
||||
def handle_change(self, e):
|
||||
self.creation_time = e.control.value
|
||||
self.save_data()
|
||||
|
||||
def handle_dismissal(self, e):
|
||||
pass
|
||||
|
||||
def open_data_picer(self, e):
|
||||
self.page.open(
|
||||
DataPicer(creation_time=self.creation_time, handle_change=self.handle_change, handle_dismissal=self.handle_dismissal)
|
||||
)
|
||||
|
||||
def save_data(self):
|
||||
temp = self.data_grid.return_data()
|
||||
column = self.data_grid.column_name
|
||||
rows = []
|
||||
for item in temp:
|
||||
rows.append(self.validdate(item=item, column=column))
|
||||
print(f"{rows=}")
|
||||
table_name = "Сollection_form_opk"
|
||||
api_url = f'http://localhost:8001/api-data-base/insert_table'
|
||||
save_data_instance = {
|
||||
"data": rows
|
||||
}
|
||||
response = self.send_data_to_api(save_data_instance, api_url)
|
||||
|
||||
if response.status_code == 200:
|
||||
print("Данные успешно отправлены")
|
||||
else:
|
||||
print(f"Ошибка при отправке данных: {response.status_code}")
|
||||
20
app/pages/add_user_data.py
Normal file
20
app/pages/add_user_data.py
Normal file
@@ -0,0 +1,20 @@
|
||||
import flet as ft
|
||||
import designer as des
|
||||
|
||||
class Add_user_data(ft.View):
|
||||
def __init__(self,page:ft.Page,route:str=""):
|
||||
super().__init__(
|
||||
bgcolor=des.color[2],
|
||||
route=route,
|
||||
controls=[
|
||||
ft.Column(
|
||||
controls=[
|
||||
ft.Row(
|
||||
controls=[
|
||||
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
80
app/pages/login.py
Normal file
80
app/pages/login.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import flet as ft
|
||||
from designer import Field, color, Button, Loger, JsonJober
|
||||
import requests
|
||||
|
||||
class Login(ft.Column):
|
||||
def __init__(self, page: ft.Page = None):
|
||||
self.page = page
|
||||
self.login = Field(label="Login"),
|
||||
self.password = Field(label="Password", password=True)
|
||||
super().__init__(
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
expand=True,
|
||||
controls=[
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[
|
||||
ft.Text(color=color[1], size=42, value="Copp")
|
||||
]
|
||||
),
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[
|
||||
self.login[0]
|
||||
]
|
||||
),
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[
|
||||
self.password
|
||||
]
|
||||
),
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[
|
||||
Button(text="Enter", on_click=self.enter_go_to_next_page)
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
def Load_user_inf(self, response):
|
||||
from user_data import User_data as ud
|
||||
|
||||
if response is not None:
|
||||
# Используем .get() для безопасного доступа к ключам
|
||||
ud.id = response.get("id")
|
||||
ud.inn = response.get("inn") # Если ключ 'inn' отсутствует, будет None
|
||||
ud.name_poo = response.get("name_poo")
|
||||
ud.mail = response.get("mail")
|
||||
ud.suggestions = JsonJober.read_json(ud.path_json)
|
||||
print(f"{ud.id=}, {ud.inn=}, {ud.name_poo=}, {ud.mail=}")
|
||||
else:
|
||||
print("Ошибка: Пустой ответ от сервера")
|
||||
|
||||
def enter_go_to_next_page(self, e):
|
||||
url = "http://localhost:8000/api/api/login"
|
||||
data = {
|
||||
"login": self.login[0].value,
|
||||
"password": self.password.value
|
||||
}
|
||||
try:
|
||||
response = requests.post(url, json=data)
|
||||
if response.status_code == 200:
|
||||
# Получаем JSON-данные из ответа
|
||||
response_data = response.json() # Используем метод .json() для извлечения данных
|
||||
|
||||
# Проверяем сообщение в ответе
|
||||
if response_data.get("message") == "Авторизация успешна.":
|
||||
user = response_data.get("user") # Достаем пользователя из ответа
|
||||
if user.get("id") == 0:
|
||||
self.page.open(Loger(text="Неверные данные"))
|
||||
else:
|
||||
self.Load_user_inf(response=user)
|
||||
self.page.go("/user_info")
|
||||
elif response_data.get("message") == "Неверные данные":
|
||||
self.page.open(Loger(text="Неверные данные"))
|
||||
else:
|
||||
print("Ошибка:", response.status_code, response.text)
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Ошибка запроса: {e}")
|
||||
32
app/pages/my_data.py
Normal file
32
app/pages/my_data.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import flet as ft
|
||||
import designer as des
|
||||
|
||||
class My_data(ft.View):
|
||||
def __init__(self,page:ft.Page,route:str="/my_data"):
|
||||
super().__init__(
|
||||
bgcolor=des.color[2],
|
||||
route=route,
|
||||
controls=[
|
||||
ft.Column(
|
||||
|
||||
controls=[
|
||||
ft.Container(
|
||||
padding=ft.padding.all(20),
|
||||
border_radius=ft.border_radius.all(10),
|
||||
height=70,
|
||||
expand=True,
|
||||
bgcolor=des.color[3],
|
||||
content=ft.Row(
|
||||
expand=True,
|
||||
controls=[
|
||||
des.Button(text="профиль"),
|
||||
des.Button(text="мои данные",on_click = self.go_to_my_data),
|
||||
des.Button(text="заполнить данные", on_click=self.go_to_data),
|
||||
]
|
||||
)
|
||||
),
|
||||
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
5
app/pages/test.py
Normal file
5
app/pages/test.py
Normal file
@@ -0,0 +1,5 @@
|
||||
import flet as ft
|
||||
import designer as ds
|
||||
import requests
|
||||
from user_data import User_data as ud
|
||||
|
||||
48
app/pages/user_info.py
Normal file
48
app/pages/user_info.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import flet as ft
|
||||
from designer import color, Button,Text
|
||||
from user_data import User_data
|
||||
|
||||
class User_info(ft.View):
|
||||
def __init__(self, page:ft.Page):
|
||||
super().__init__(
|
||||
route="/user_info",
|
||||
bgcolor=color[2],
|
||||
controls=[
|
||||
ft.Column(
|
||||
controls=[
|
||||
ft.Container(
|
||||
padding=ft.padding.all(20),
|
||||
border_radius=ft.border_radius.all(10),
|
||||
height=70,
|
||||
expand=True,
|
||||
bgcolor=color[3],
|
||||
content=ft.Row(
|
||||
expand=True,
|
||||
controls=[
|
||||
Button(text="профиль"),
|
||||
Button(text="мои данные",on_click = self.go_to_my_data),
|
||||
Button(text="заполнить данные", on_click=self.go_to_data),
|
||||
]
|
||||
)
|
||||
),
|
||||
ft.Container(
|
||||
expand=True,
|
||||
content=ft.Column(
|
||||
controls=[
|
||||
ft.Row(controls=[Text(value="Имя ПОО"),Text(value=User_data.name_poo)]),
|
||||
ft.Row(controls=[Text(value="ИНН"),Text(value=User_data.inn)]),
|
||||
ft.Row(controls=[Text(value="Mail"),Text(value=User_data.mail)])
|
||||
]
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
def go_to_info(self,e):
|
||||
self.page.go("/user_info")
|
||||
def go_to_my_data(self,e):
|
||||
self.page.go("/my_data")
|
||||
def go_to_data(self,e):
|
||||
self.page.go("/add_new_data")
|
||||
|
||||
Reference in New Issue
Block a user