panclas 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ recursive-include panclas *
panclas-3.0.0/PKG-INFO ADDED
@@ -0,0 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: panclas
3
+ Version: 3.0.0
4
+ Author: OlegMagistr
5
+ Author-email: oreg227@gmail.com
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.12
10
+ Description-Content-Type: text/markdown
11
+ Dynamic: author
12
+ Dynamic: author-email
13
+ Dynamic: classifier
14
+ Dynamic: description-content-type
15
+ Dynamic: requires-python
File without changes
File without changes
@@ -0,0 +1,32 @@
1
+ import database_creatorplus as dc
2
+ import flet as ft
3
+
4
+ db = dc.Database("base")
5
+
6
+ db.Table.create(db,"users",
7
+ [
8
+ "ID", "role","full_name", "login", "password",],
9
+ [
10
+ "INTEGER PRIMARY KEY AUTOINCREMENT","TEXT","TEXT","TEXT","TEXT"
11
+ ]
12
+ )
13
+ db.Table.create(db,"products",
14
+ [
15
+ "ID", "article", "name", "unit", "price", "supplier", "manufacturer", "category",
16
+ "discount", "count", "description", "image_path"
17
+ ],
18
+ [
19
+ "INTEGER PRIMARY KEY AUTOINCREMENT","TEXT","TEXT","TEXT","TEXT",
20
+ "TEXT","TEXT","TEXT","TEXT","TEXT","TEXT","TEXT",
21
+ ]
22
+ )
23
+ db.Table.create(db,"pick",["ID", "pick"],["INTEGER PRIMARY KEY AUTOINCREMENT","TEXT"])
24
+
25
+ db.Table.create(db,"orders",
26
+ [
27
+ "ID", "number_order", "article", "date_order", "date_delivery", "pick", "client", "code", "status",
28
+ ],
29
+ [
30
+ "INTEGER PRIMARY KEY AUTOINCREMENT","TEXT","TEXT","TEXT","TEXT","TEXT","TEXT","TEXT","TEXT"
31
+ ]
32
+ )
@@ -0,0 +1,270 @@
1
+ import database_creatorplus as dc
2
+ import flet as ft
3
+ import pandas as pd
4
+
5
+ db = dc.Database("base")
6
+
7
+ def import_data(path,table_name):
8
+ data = pd.read_excel(path)
9
+ for data in data.values:
10
+ db.Table.write(db,table_name,*data)
11
+
12
+ def main(page:ft.Page):
13
+ page.title = "Приложение"
14
+ login = ft.TextField(label='enter login',width=500)
15
+ password = ft.TextField(label='enter password',width=500)
16
+ error = ft.Text()
17
+ tovar_field = [ft.TextField(label=i) for i in db.Info.getColumns(db,"products")]
18
+ zakaz_field = [ft.TextField(label=i) for i in db.Info.getColumns(db,"orders")]
19
+ id_update = 0
20
+ user_role = 0 # 0 - гость авторизованный клиент, 1 - менеджер, 2 - админ
21
+
22
+ def get_columns(data):
23
+ nonlocal user_role
24
+ list = [ft.DataColumn(ft.Text(i)) for i in data]
25
+ if user_role != 1:
26
+ list.append(ft.DataColumn(ft.Text("del")))
27
+ list.append(ft.DataColumn(ft.Text("update")))
28
+ return list
29
+
30
+ def get_rows(data):
31
+ nonlocal user_role
32
+ list = []
33
+ for row in data:
34
+ list2 = []
35
+ for cell in row:
36
+ list2.append(ft.DataCell(ft.Text(cell)))
37
+ if user_role != 1:
38
+ list2.append(ft.DataCell(ft.ElevatedButton("del",
39
+ on_click=lambda e,a = row[0]:[
40
+ db.Table.delete(db,"orders",f"ID = {a}"),
41
+ route_change("/zakaz")
42
+ ]
43
+ )))
44
+ list2.append(ft.DataCell(ft.ElevatedButton("update",
45
+ on_click=lambda e,a = row[0],i = zakaz_field:
46
+ update(a,i,"orders")
47
+ )))
48
+ list.append(ft.DataRow(list2))
49
+ return list
50
+
51
+ def update(id, list, table_name):
52
+ nonlocal id_update
53
+ data = db.Table.get(db,table_name,request=f"WHERE ID = {id}")
54
+ for i, field in enumerate(list):
55
+ field.value = data[0][i]
56
+ id_update = id
57
+ page.update()
58
+
59
+ def authorization(e):
60
+ nonlocal user_role
61
+ log = db.Table.get(db,"users","role, login, password",f"WHERE login = '{login.value}' and password = '{password.value}'")
62
+ if log != [] and log[0][0] == "Администратор":
63
+ user_role = 2
64
+ page.go("/tovar_admin")
65
+ elif log != [] and log[0][0] == "Авторизированный клиент":
66
+ page.go("/tovar_guest_user")
67
+ elif log != [] and log[0][0] == "Менеджер":
68
+ user_role = 1
69
+ page.go("/tovar_meneger")
70
+ else: error.value = "Неверное имя пользователя или пароль"
71
+ page.update()
72
+
73
+ def search_tovar(e):
74
+ search = db.Table.get(db,"products",request=f"WHERE LOWER(name || ' ' || price || ' ' || supplier || ' ' || category) LIKE LOWER('%{e.control.value}%')")
75
+ card_tovar_list.controls.clear()
76
+ card_tovar_list.controls = (tovar_card(search))
77
+ page.update()
78
+
79
+ def update_searh(e):
80
+ card_tovar_list.controls.clear()
81
+ card_tovar_list.controls = (tovar_card(db.Table.get(db,"products")))
82
+ route_change("/tovar_admin")
83
+
84
+ def tovar_card(data_):
85
+ nonlocal user_role
86
+
87
+ cards = []
88
+
89
+ for data in data_:
90
+
91
+ bg_color = None
92
+ if int(data[9]) == 0:
93
+ bg_color = ft.colors.BLUE_100 # Голубой для отсутствующих товаров
94
+ elif int(data[8]) > 15:
95
+ bg_color = ft.colors.GREEN_800 # #2E8B57
96
+ row = ft.Row(
97
+ [
98
+ # Фото товара
99
+ ft.Column(
100
+ [
101
+ ft.Image(src=f"import\\{"picture.png" if data[11] == "nan" else data[11]}", width=150, height=150, fit=ft.ImageFit.CONTAIN),
102
+ ],
103
+ alignment=ft.MainAxisAlignment.CENTER
104
+ ),
105
+
106
+ # Категория | Наименование
107
+ ft.Column(
108
+ [
109
+ ft.Row([ft.Text(f"{data[7]} | ", color=ft.colors.GREY_600),
110
+ ft.Text(data[2])]),
111
+ ft.Text(f"Описание товара: {data[10]}"),
112
+ ft.Text(f"Производитель: {data[6]}"),
113
+ ft.Text(f"Поставщик: {data[5]}"),
114
+ ft.Text(f"Цена: {data[4]}"),
115
+ ft.Text(f"Единица измерения: {data[3]}"),
116
+ ft.Text(f"Количество на складе: {data[9]}"),
117
+ ],
118
+ alignment=ft.MainAxisAlignment.START,
119
+ width=400
120
+ ),
121
+
122
+ # Действующая скидка
123
+ ft.Column(
124
+ [
125
+ ft.Text("Действующая скидка:"),
126
+ ft.Text(f"{data[8]}%", size=16, weight=ft.FontWeight.BOLD, color=ft.colors.GREEN),
127
+ ft.ElevatedButton("del", on_click=lambda e: [
128
+ db.Table.delete(db,"products",f"ID = {data[0]}"),
129
+ route_change("/tovar")
130
+ ]) if user_role == 2 else ft.Text()
131
+ ]
132
+ )
133
+ ],
134
+ spacing=8
135
+ )
136
+ card = ft.Card(
137
+ content=ft.Container(
138
+ width=100,
139
+ padding=20,
140
+ bgcolor=bg_color,
141
+ content=row, on_click =lambda e,a = data[0],i = tovar_field:update(a,i,"products") if user_role == 2 else None
142
+ ),
143
+ margin=10
144
+ )
145
+ cards.append(card)
146
+
147
+ return cards
148
+
149
+ card_tovar_list = ft.ListView(tovar_card(db.Table.get(db,"products")),auto_scroll=True,width=800,height=800)
150
+
151
+ def route_change(route):
152
+ page.views.clear()
153
+ nonlocal id_update, user_role
154
+ for i in zakaz_field[1:]:
155
+ i.value = ""
156
+
157
+ for i in tovar_field[1:]:
158
+ i.value = ""
159
+
160
+ if page.route == "/log":
161
+ error.value = ""
162
+ login.value = ""
163
+ password.value = ""
164
+ user_role = 0
165
+ page.views.append(
166
+ ft.View(route="/log",
167
+ controls=[
168
+ login,password,
169
+ error,
170
+ ft.Row([
171
+ ft.ElevatedButton("Войти", on_click=authorization),
172
+ ft.ElevatedButton("Гость", on_click=lambda e: page.go("/tovar_guest_user"))
173
+ ],alignment=ft.MainAxisAlignment.CENTER
174
+ ),
175
+ ],
176
+ vertical_alignment=ft.MainAxisAlignment.CENTER,
177
+ horizontal_alignment=ft.CrossAxisAlignment.CENTER)
178
+ )
179
+ elif page.route == "/tovar_guest_user":
180
+ page.views.append(
181
+ ft.View(route="/tovar",
182
+ controls=[ft.Row([card_tovar_list,
183
+ ft.Column([
184
+ ft.ElevatedButton("back",on_click=lambda e: page.go("/log")),
185
+ ])
186
+ ])
187
+ ],
188
+ vertical_alignment=ft.MainAxisAlignment.CENTER,
189
+ horizontal_alignment=ft.CrossAxisAlignment.CENTER)
190
+ )
191
+ elif page.route == "/tovar_meneger":
192
+ page.views.append(
193
+ ft.View(route="/tovar_meneger",
194
+ controls=[ft.Row([card_tovar_list,
195
+ ft.Column([
196
+ ft.ElevatedButton("Заказы",on_click=lambda e: page.go("/zakaz_meneger")),
197
+ ft.ElevatedButton("back",on_click=lambda e: page.go("/log"))
198
+ ])
199
+ ])
200
+ ],
201
+ vertical_alignment=ft.MainAxisAlignment.CENTER,
202
+ horizontal_alignment=ft.CrossAxisAlignment.CENTER)
203
+ )
204
+ elif page.route == "/tovar_admin":
205
+ page.views.append(
206
+ ft.View(route="/tovar_admin",
207
+ controls=[ft.Row([card_tovar_list,
208
+ ft.Column([
209
+ ft.TextField(label = "Поиск",on_change=search_tovar),
210
+ *tovar_field[1:],
211
+ ft.ElevatedButton("Заказы",on_click=lambda e: page.go("/zakaz_admin")),
212
+ ft.ElevatedButton("add",on_click=lambda e: [
213
+ db.Table.write(db,"products",*[str(i.value) for i in tovar_field[1:]]),
214
+ route_change("/tovar_admin")
215
+ ]),
216
+ ft.ElevatedButton("update",on_click=lambda e: [
217
+ db.Table.update(db, "products",f"ID = {id_update}",*[str(i.value) for i in tovar_field[1:]]),
218
+ update_searh(e)
219
+ ]),
220
+ ft.ElevatedButton("back",on_click=lambda e: page.go("/log")),
221
+ ])
222
+ ])
223
+ ],
224
+ vertical_alignment=ft.MainAxisAlignment.CENTER,
225
+ horizontal_alignment=ft.CrossAxisAlignment.CENTER)
226
+ )
227
+ elif page.route == "/zakaz_admin":
228
+ page.views.append(
229
+ ft.View(route="/zakaz_admin",
230
+ controls=[ft.Row([ft.DataTable(get_columns(db.Info.getColumns(db,"orders")),get_rows(db.Table.get(db,"orders"))),
231
+ ft.Column(
232
+ [
233
+ *zakaz_field,
234
+ ft.ElevatedButton("back",on_click=lambda e: page.go("/tovar_admin")),
235
+ ft.ElevatedButton("add",on_click=lambda e: [
236
+ db.Table.write(db,"orders",*[str(i.value) for i in zakaz_field]),
237
+ route_change("/zakaz")
238
+ ]),
239
+ ft.ElevatedButton("update",on_click=lambda e: [
240
+ db.Table.update(db, "orders",f"ID = {id_update}",*[str(i.value) for i in zakaz_field]),
241
+ route_change("/tovar")
242
+ ])
243
+ ])
244
+ ]),
245
+
246
+ ],
247
+ vertical_alignment=ft.MainAxisAlignment.CENTER,
248
+ horizontal_alignment=ft.CrossAxisAlignment.CENTER)
249
+ )
250
+ elif page.route == "/zakaz_meneger":
251
+ page.views.append(
252
+ ft.View(route="/zakaz_meneger",
253
+ controls=[ft.Row([ft.DataTable(get_columns(db.Info.getColumns(db,"orders")),get_rows(db.Table.get(db,"orders"))),
254
+ ft.Column(
255
+ [
256
+ ft.ElevatedButton("back",on_click=lambda e: page.go("/tovar_meneger")),
257
+ ])
258
+ ]),
259
+
260
+ ],
261
+ vertical_alignment=ft.MainAxisAlignment.CENTER,
262
+ horizontal_alignment=ft.CrossAxisAlignment.CENTER)
263
+ )
264
+ page.update()
265
+
266
+ page.on_route_change = route_change
267
+
268
+ page.go("/log")
269
+
270
+ ft.app(main)
@@ -0,0 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: panclas
3
+ Version: 3.0.0
4
+ Author: OlegMagistr
5
+ Author-email: oreg227@gmail.com
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.12
10
+ Description-Content-Type: text/markdown
11
+ Dynamic: author
12
+ Dynamic: author-email
13
+ Dynamic: classifier
14
+ Dynamic: description-content-type
15
+ Dynamic: requires-python
@@ -0,0 +1,11 @@
1
+ MANIFEST.in
2
+ README.md
3
+ setup.cfg
4
+ setup.py
5
+ panclas/__init__.py
6
+ panclas/database.py
7
+ panclas/main.py
8
+ panclas.egg-info/PKG-INFO
9
+ panclas.egg-info/SOURCES.txt
10
+ panclas.egg-info/dependency_links.txt
11
+ panclas.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ panclas
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
panclas-3.0.0/setup.py ADDED
@@ -0,0 +1,21 @@
1
+ import setuptools
2
+ with open('README.md', 'r', encoding='utf-8') as fh:
3
+ long_description = fh.read()
4
+
5
+ setuptools.setup(
6
+ name='panclas',
7
+ version='3.0.0',
8
+ author='OlegMagistr',
9
+ author_email='oreg227@gmail.com',
10
+ description='',
11
+ long_description=long_description,
12
+ long_description_content_type='text/markdown',
13
+ packages=['panclas'],
14
+ include_package_data=True,
15
+ classifiers=[
16
+ "Programming Language :: Python :: 3",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Operating System :: OS Independent",
19
+ ],
20
+ python_requires='>=3.12',
21
+ )