122 lines
4.6 KiB
Python
122 lines
4.6 KiB
Python
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}")
|