first commit

This commit is contained in:
Guitaras_Fingerchpoker 2025-05-15 15:13:12 +03:00
commit cb72cb6ed6
353 changed files with 11821 additions and 0 deletions

Binary file not shown.

Binary file not shown.

BIN
.vs/Clienty/v17/.suo Normal file

Binary file not shown.

View File

@ -0,0 +1,157 @@
{
"Version": 1,
"WorkspaceRootPath": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\addedit.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\addedit.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\addedit.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\addedit.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\models\\gender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\models\\gender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 3,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "AddEdit.axaml",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml",
"RelativeDocumentMoniker": "Clienty\\AddEdit.axaml",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml",
"RelativeToolTip": "Clienty\\AddEdit.axaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
"WhenOpened": "2025-05-07T01:09:59.58Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "AddEdit.axaml.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml.cs",
"RelativeDocumentMoniker": "Clienty\\AddEdit.axaml.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml.cs",
"RelativeToolTip": "Clienty\\AddEdit.axaml.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB4AAAAQAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:09:59.021Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "Gender.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Gender.cs",
"RelativeDocumentMoniker": "Clienty\\Models\\Gender.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Gender.cs",
"RelativeToolTip": "Clienty\\Models\\Gender.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T00:51:41.31Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Client.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Client.cs",
"RelativeDocumentMoniker": "Clienty\\Models\\Client.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Client.cs",
"RelativeToolTip": "Clienty\\Models\\Client.cs",
"ViewState": "AgIAABQAAAAAAAAAAAAswA8AAAAdAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-02T23:50:33.285Z"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "Helper.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Helper.cs",
"RelativeDocumentMoniker": "Clienty\\Helper.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Helper.cs",
"RelativeToolTip": "Clienty\\Helper.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAAABgAAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-02T22:16:47.589Z"
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "MainWindow.axaml",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml",
"RelativeDocumentMoniker": "Clienty\\MainWindow.axaml",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml",
"RelativeToolTip": "Clienty\\MainWindow.axaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
"WhenOpened": "2025-04-26T17:09:12.47Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "MainWindow.axaml.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml.cs",
"RelativeDocumentMoniker": "Clienty\\MainWindow.axaml.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml.cs",
"RelativeToolTip": "Clienty\\MainWindow.axaml.cs",
"ViewState": "AgIAABcAAAAAAAAAAAAgwB8AAAAcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-26T17:09:08.505Z"
}
]
},
{
"DockedWidth": 73,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:1:0:{d212f56b-c48a-434c-a121-1c5d80b59b9f}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
}
]
}
]
}
]
}

View File

@ -0,0 +1,161 @@
{
"Version": 1,
"WorkspaceRootPath": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\addedit.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\addedit.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\models\\gender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\models\\gender.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\addedit.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\addedit.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
},
{
"AbsoluteMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|f:\\clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\clienty\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
"RelativeMoniker": "D:0:0:{2B1735C4-837F-441F-95C9-52D10387902A}|Clienty\\Clienty.csproj|solutionrelative:clienty\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 3,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "AddEdit.axaml",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml",
"RelativeDocumentMoniker": "Clienty\\AddEdit.axaml",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml",
"RelativeToolTip": "Clienty\\AddEdit.axaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
"WhenOpened": "2025-05-07T01:09:59.58Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "AddEdit.axaml.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml.cs",
"RelativeDocumentMoniker": "Clienty\\AddEdit.axaml.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\AddEdit.axaml.cs",
"RelativeToolTip": "Clienty\\AddEdit.axaml.cs",
"ViewState": "AgIAAA8AAAAAAAAAAADwvx4AAAAQAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T01:09:59.021Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Gender.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Gender.cs",
"RelativeDocumentMoniker": "Clienty\\Models\\Gender.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Gender.cs",
"RelativeToolTip": "Clienty\\Models\\Gender.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-07T00:51:41.31Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Client.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Client.cs",
"RelativeDocumentMoniker": "Clienty\\Models\\Client.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Models\\Client.cs",
"RelativeToolTip": "Clienty\\Models\\Client.cs",
"ViewState": "AgIAABQAAAAAAAAAAAAswA8AAAAdAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-02T23:50:33.285Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Helper.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Helper.cs",
"RelativeDocumentMoniker": "Clienty\\Helper.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\Helper.cs",
"RelativeToolTip": "Clienty\\Helper.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAAABgAAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-02T22:16:47.589Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "MainWindow.axaml",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml",
"RelativeDocumentMoniker": "Clienty\\MainWindow.axaml",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml",
"RelativeToolTip": "Clienty\\MainWindow.axaml",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
"WhenOpened": "2025-04-26T17:09:12.47Z"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "MainWindow.axaml.cs",
"DocumentMoniker": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml.cs",
"RelativeDocumentMoniker": "Clienty\\MainWindow.axaml.cs",
"ToolTip": "F:\\Clienty \u2014 \u043A\u043E\u043F\u0438\u044F\\Clienty\\MainWindow.axaml.cs",
"RelativeToolTip": "Clienty\\MainWindow.axaml.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAFkAAAAQAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-26T17:09:08.505Z",
"EditorCaption": ""
}
]
},
{
"DockedWidth": 73,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:1:0:{d212f56b-c48a-434c-a121-1c5d80b59b9f}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
}
]
}
]
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

25
Clienty.sln Normal file
View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.35906.104 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Clienty", "Clienty\Clienty.csproj", "{2B1735C4-837F-441F-95C9-52D10387902A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2B1735C4-837F-441F-95C9-52D10387902A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B1735C4-837F-441F-95C9-52D10387902A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B1735C4-837F-441F-95C9-52D10387902A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B1735C4-837F-441F-95C9-52D10387902A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A7858E6A-A55F-4D2B-BBCA-E599D6BA89DE}
EndGlobalSection
EndGlobal

129
Clienty/AddEdit.axaml Normal file
View File

@ -0,0 +1,129 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignWidth="400"
d:DesignHeight="500"
x:Class="Clienty.AddEdit"
x:CompileBindings="False"
Title="Addedit"
SizeToContent="WidthAndHeight"
MinWidth="400">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Main Form -->
<Grid Grid.Row="1"
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto"
ColumnDefinitions="Auto,*"
HorizontalAlignment="Center"
VerticalAlignment="Top">
<!-- First Name -->
<TextBlock Text="Имя:"
Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<TextBox Grid.Row="0" Grid.Column="1"
x:Name="FirstNameTextBox"
Text="{Binding Firstname}"
MinWidth="200"
Margin="0,0,0,10"/>
<!-- Last Name -->
<TextBlock Text="Фамилия:"
Grid.Row="1" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<TextBox Grid.Row="1" Grid.Column="1"
Text="{Binding Lastname}"
x:Name="LastNameTextBox"
MinWidth="200"
Margin="0,0,0,10"/>
<!-- Patronymic -->
<TextBlock Text="Отчество:"
Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<TextBox Grid.Row="2" Grid.Column="1"
Text="{Binding Patronymic}"
MinWidth="200"
x:Name="PatronymicTextBox"
Margin="0,0,0,10"/>
<!-- Birth Date -->
<TextBlock Text="Дата рождения:"
Grid.Row="3" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<DatePicker x:Name="BirthDateDataPicker"
Grid.Row="3" Grid.Column="1"
MinWidth="200"
Margin="0,0,0,10"/>
<!-- Registration Date -->
<TextBlock Text="Дата регистрации:"
Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<DatePicker x:Name="RegDateDataPicker"
Grid.Row="4" Grid.Column="1"
MinWidth="200"
Margin="0,0,0,10"/>
<!-- Gender -->
<TextBlock Text="Пол:"
Grid.Row="5" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<ComboBox x:Name="GenderCombobox"
Grid.Row="5" Grid.Column="1"
MinWidth="200"
DisplayMemberBinding="{Binding Name}"
Margin="0,0,0,10"/>
<!-- Email -->
<TextBlock Text="Почта:"
Grid.Row="6" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<TextBox Grid.Row="6" Grid.Column="1"
Text="{Binding Email}"
x:Name="EmailtextBox"
MinWidth="200"
Margin="0,0,0,10"/>
<!-- Phone -->
<TextBlock Text="Телефон:"
Grid.Row="7" Grid.Column="0"
VerticalAlignment="Center"
Margin="0,0,10,10"/>
<TextBox Grid.Row="7" Grid.Column="1"
Text="{Binding Phone}"
x:Name="PhoneTextBox"
MinWidth="200"
Margin="0,0,0,10"/>
</Grid>
<!-- Buttons -->
<StackPanel Grid.Row="2"
Orientation="Horizontal"
HorizontalAlignment="Center"
Spacing="10"
Margin="0,20,0,0">
<Button Content="Сохранить"
Width="120"
Click="Button_Click"/>
<Button Content="Отмена"
Width="120"
/>
</StackPanel>
</Grid>
</Window>

64
Clienty/AddEdit.axaml.cs Normal file
View File

@ -0,0 +1,64 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Clienty.Models;
using System;
using System.Linq;
using System.Numerics;
namespace Clienty;
public partial class AddEdit : Window
{
public AddEdit()
{
InitializeComponent();
GenderCombobox.ItemsSource = Helper.DBcontext.Genders.ToList();
int Index = -1;
}
private void Button_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
try
{
Client newClient = new Client();
// Assign new ID
newClient.Id = Helper.DBcontext.Clients.Count() + 1;
// Assign basic fields from input controls
newClient.Firstname = FirstNameTextBox.Text;
newClient.Lastname = LastNameTextBox.Text;
newClient.Patronymic = PatronymicTextBox.Text;
newClient.Email = EmailtextBox.Text;
newClient.Phone = PhoneTextBox.Text;
// Convert DatePicker to DateOnly
if (BirthDateDataPicker.SelectedDate.HasValue)
newClient.Birthday = DateOnly.FromDateTime(BirthDateDataPicker.SelectedDate.Value.DateTime);
// Convert DatePicker to DateTime (Registration Date)
if (RegDateDataPicker.SelectedDate.HasValue)
newClient.Registrationdate = RegDateDataPicker.SelectedDate.Value.DateTime;
else
newClient.Registrationdate = DateTime.Now; // fallback default
// Assign Gender
if (GenderCombobox.SelectedItem is Gender selectedGender)
newClient.Gendercode = selectedGender.Code;
// Save to DB
Helper.DBcontext.Clients.Add(newClient);
Helper.DBcontext.SaveChanges();
// Go back to main window
Close();
}
catch (Exception ex)
{
return;
}
}
}

10
Clienty/App.axaml Normal file
View File

@ -0,0 +1,10 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Clienty.App"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
<Application.Styles>
<FluentTheme />
</Application.Styles>
</Application>

24
Clienty/App.axaml.cs Normal file
View File

@ -0,0 +1,24 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
namespace Clienty
{
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow();
}
base.OnFrameworkInitializationCompleted();
}
}
}

28
Clienty/Clienty.csproj Normal file
View File

@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.10" />
<PackageReference Include="Avalonia.Desktop" Version="11.0.10" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.10" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.10" />
<PackageReference Include="MessageBox.Avalonia" Version="3.1.5" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,363 @@
using System;
using System.Collections.Generic;
using Clienty.Models;
using Microsoft.EntityFrameworkCore;
namespace Clienty.Context;
public partial class User19Context : DbContext
{
public User19Context()
{
}
public User19Context(DbContextOptions<User19Context> options)
: base(options)
{
}
public virtual DbSet<Client> Clients { get; set; }
public virtual DbSet<Clientservice> Clientservices { get; set; }
public virtual DbSet<Documentbyservice> Documentbyservices { get; set; }
public virtual DbSet<Gender> Genders { get; set; }
public virtual DbSet<Manufacturer> Manufacturers { get; set; }
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Productphoto> Productphotos { get; set; }
public virtual DbSet<Productsale> Productsales { get; set; }
public virtual DbSet<Service> Services { get; set; }
public virtual DbSet<Servicephoto> Servicephotos { get; set; }
public virtual DbSet<Tag> Tags { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.
=> optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5454;Password=oplwLVnn;Database=user19;Username=user19");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Client>(entity =>
{
entity.HasKey(e => e.Id).HasName("client_pkey");
entity.ToTable("client", "task16-09");
entity.HasIndex(e => e.Gendercode, "IX_client_gendercode");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Birthday).HasColumnName("birthday");
entity.Property(e => e.Email)
.HasMaxLength(255)
.HasColumnName("email");
entity.Property(e => e.Firstname)
.HasMaxLength(50)
.HasColumnName("firstname");
entity.Property(e => e.Gendercode)
.HasMaxLength(1)
.HasColumnName("gendercode");
entity.Property(e => e.Lastname)
.HasMaxLength(50)
.HasColumnName("lastname");
entity.Property(e => e.Patronymic)
.HasMaxLength(50)
.HasColumnName("patronymic");
entity.Property(e => e.Phone)
.HasMaxLength(20)
.HasColumnName("phone");
entity.Property(e => e.Photopath)
.HasMaxLength(1000)
.HasColumnName("photopath");
entity.Property(e => e.Registrationdate)
.HasColumnType("timestamp(6) without time zone")
.HasColumnName("registrationdate");
entity.HasOne(d => d.GendercodeNavigation).WithMany(p => p.Clients)
.HasForeignKey(d => d.Gendercode)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_client_gender");
entity.HasMany(d => d.Tags).WithMany(p => p.Clients)
.UsingEntity<Dictionary<string, object>>(
"Tagofclient",
r => r.HasOne<Tag>().WithMany()
.HasForeignKey("Tagid")
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("tagofclient_tag_fk"),
l => l.HasOne<Client>().WithMany()
.HasForeignKey("Clientid")
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_tagofclient_client"),
j =>
{
j.HasKey("Clientid", "Tagid").HasName("tagofclient_pkey");
j.ToTable("tagofclient", "task16-09");
j.HasIndex(new[] { "Tagid" }, "IX_tagofclient_tagid");
j.IndexerProperty<int>("Clientid").HasColumnName("clientid");
j.IndexerProperty<int>("Tagid").HasColumnName("tagid");
});
});
modelBuilder.Entity<Clientservice>(entity =>
{
entity.HasKey(e => e.Id).HasName("clientservice_pkey");
entity.ToTable("clientservice", "task16-09");
entity.HasIndex(e => e.Clientid, "IX_clientservice_clientid");
entity.HasIndex(e => e.Serviceid, "IX_clientservice_serviceid");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Clientid).HasColumnName("clientid");
entity.Property(e => e.Comment).HasColumnName("comment");
entity.Property(e => e.Serviceid).HasColumnName("serviceid");
entity.Property(e => e.Starttime)
.HasColumnType("timestamp(6) without time zone")
.HasColumnName("starttime");
entity.HasOne(d => d.Client).WithMany(p => p.Clientservices)
.HasForeignKey(d => d.Clientid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_clientservice_client");
entity.HasOne(d => d.Service).WithMany(p => p.Clientservices)
.HasForeignKey(d => d.Serviceid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("clientservice_service_fk");
});
modelBuilder.Entity<Documentbyservice>(entity =>
{
entity.HasKey(e => e.Id).HasName("documentbyservice_pkey");
entity.ToTable("documentbyservice", "task16-09");
entity.HasIndex(e => e.Clientserviceid, "IX_documentbyservice_clientserviceid");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Clientserviceid).HasColumnName("clientserviceid");
entity.Property(e => e.Documentpath)
.HasMaxLength(1000)
.HasColumnName("documentpath");
entity.HasOne(d => d.Clientservice).WithMany(p => p.Documentbyservices)
.HasForeignKey(d => d.Clientserviceid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_documentbyservice_clientservice");
});
modelBuilder.Entity<Gender>(entity =>
{
entity.HasKey(e => e.Code).HasName("gender_pkey");
entity.ToTable("gender", "task16-09");
entity.Property(e => e.Code)
.HasMaxLength(1)
.ValueGeneratedNever()
.HasColumnName("code");
entity.Property(e => e.Name)
.HasMaxLength(10)
.HasColumnName("name");
});
modelBuilder.Entity<Manufacturer>(entity =>
{
entity.HasKey(e => e.Id).HasName("manufacturer_pkey");
entity.ToTable("manufacturer", "task16-09");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Name)
.HasMaxLength(100)
.HasColumnName("name");
entity.Property(e => e.Startdate).HasColumnName("startdate");
});
modelBuilder.Entity<Product>(entity =>
{
entity.HasKey(e => e.Id).HasName("product_pkey");
entity.ToTable("product", "task16-09");
entity.HasIndex(e => e.Manufacturerid, "IX_product_manufacturerid");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Cost)
.HasPrecision(19, 4)
.HasColumnName("cost");
entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.Isactive).HasColumnName("isactive");
entity.Property(e => e.Mainimagepath)
.HasMaxLength(1000)
.HasColumnName("mainimagepath");
entity.Property(e => e.Manufacturerid).HasColumnName("manufacturerid");
entity.Property(e => e.Title)
.HasMaxLength(100)
.HasColumnName("title");
entity.HasOne(d => d.Manufacturer).WithMany(p => p.Products)
.HasForeignKey(d => d.Manufacturerid)
.HasConstraintName("fk_product_manufacturer");
entity.HasMany(d => d.Attachedproducts).WithMany(p => p.Mainproducts)
.UsingEntity<Dictionary<string, object>>(
"Attachedproduct",
r => r.HasOne<Product>().WithMany()
.HasForeignKey("Attachedproductid")
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_attachedproduct_product1"),
l => l.HasOne<Product>().WithMany()
.HasForeignKey("Mainproductid")
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_attachedproduct_product"),
j =>
{
j.HasKey("Mainproductid", "Attachedproductid").HasName("attachedproduct_pkey");
j.ToTable("attachedproduct", "task16-09");
j.HasIndex(new[] { "Attachedproductid" }, "IX_attachedproduct_attachedproductid");
j.IndexerProperty<int>("Mainproductid").HasColumnName("mainproductid");
j.IndexerProperty<int>("Attachedproductid").HasColumnName("attachedproductid");
});
entity.HasMany(d => d.Mainproducts).WithMany(p => p.Attachedproducts)
.UsingEntity<Dictionary<string, object>>(
"Attachedproduct",
r => r.HasOne<Product>().WithMany()
.HasForeignKey("Mainproductid")
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_attachedproduct_product"),
l => l.HasOne<Product>().WithMany()
.HasForeignKey("Attachedproductid")
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_attachedproduct_product1"),
j =>
{
j.HasKey("Mainproductid", "Attachedproductid").HasName("attachedproduct_pkey");
j.ToTable("attachedproduct", "task16-09");
j.HasIndex(new[] { "Attachedproductid" }, "IX_attachedproduct_attachedproductid");
j.IndexerProperty<int>("Mainproductid").HasColumnName("mainproductid");
j.IndexerProperty<int>("Attachedproductid").HasColumnName("attachedproductid");
});
});
modelBuilder.Entity<Productphoto>(entity =>
{
entity.HasKey(e => e.Id).HasName("productphoto_pkey");
entity.ToTable("productphoto", "task16-09");
entity.HasIndex(e => e.Productid, "IX_productphoto_productid");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Photopath)
.HasMaxLength(1000)
.HasColumnName("photopath");
entity.Property(e => e.Productid).HasColumnName("productid");
entity.HasOne(d => d.Product).WithMany(p => p.Productphotos)
.HasForeignKey(d => d.Productid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_productphoto_product");
});
modelBuilder.Entity<Productsale>(entity =>
{
entity.HasKey(e => e.Id).HasName("productsale_pkey");
entity.ToTable("productsale", "task16-09");
entity.HasIndex(e => e.Clientserviceid, "IX_productsale_clientserviceid");
entity.HasIndex(e => e.Productid, "IX_productsale_productid");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Clientserviceid).HasColumnName("clientserviceid");
entity.Property(e => e.Productid).HasColumnName("productid");
entity.Property(e => e.Quantity).HasColumnName("quantity");
entity.Property(e => e.Saledate)
.HasColumnType("timestamp(6) without time zone")
.HasColumnName("saledate");
entity.HasOne(d => d.Clientservice).WithMany(p => p.Productsales)
.HasForeignKey(d => d.Clientserviceid)
.HasConstraintName("fk_productsale_clientservice");
entity.HasOne(d => d.Product).WithMany(p => p.Productsales)
.HasForeignKey(d => d.Productid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_productsale_product");
});
modelBuilder.Entity<Service>(entity =>
{
entity.HasKey(e => e.Id).HasName("service_pkey");
entity.ToTable("service", "task16-09");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Cost)
.HasPrecision(19, 4)
.HasColumnName("cost");
entity.Property(e => e.Description).HasColumnName("description");
entity.Property(e => e.Discount).HasColumnName("discount");
entity.Property(e => e.Durationinseconds).HasColumnName("durationinseconds");
entity.Property(e => e.Mainimagepath)
.HasMaxLength(1000)
.HasColumnName("mainimagepath");
entity.Property(e => e.Title)
.HasMaxLength(100)
.HasColumnName("title");
});
modelBuilder.Entity<Servicephoto>(entity =>
{
entity.HasKey(e => e.Id).HasName("servicephoto_pkey");
entity.ToTable("servicephoto", "task16-09");
entity.HasIndex(e => e.Serviceid, "IX_servicephoto_serviceid");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Photopath)
.HasMaxLength(1000)
.HasColumnName("photopath");
entity.Property(e => e.Serviceid).HasColumnName("serviceid");
entity.HasOne(d => d.Service).WithMany(p => p.Servicephotos)
.HasForeignKey(d => d.Serviceid)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_servicephoto_service");
});
modelBuilder.Entity<Tag>(entity =>
{
entity.HasKey(e => e.Id).HasName("tag_pkey");
entity.ToTable("tag", "task16-09");
entity.Property(e => e.Id)
.ValueGeneratedNever()
.HasColumnName("id");
entity.Property(e => e.Color)
.HasMaxLength(8)
.IsFixedLength()
.HasColumnName("color");
entity.Property(e => e.Title)
.HasMaxLength(30)
.HasColumnName("title");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

27
Clienty/Helper.cs Normal file
View File

@ -0,0 +1,27 @@
using Clienty.Context;
using Clienty.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Clienty
{
public static class Helper
{
public static User19Context DBcontext = new User19Context();
public static List<Client> allClients
{
get => DBcontext.Clients.Include(a => a.GendercodeNavigation).ToList();
}
public static List<Client> ClientList = allClients;
//public static string Kolichestvo
//{
// get => $"{all}"
//}
}
}

65
Clienty/MainWindow.axaml Normal file
View File

@ -0,0 +1,65 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Clienty.MainWindow"
x:CompileBindings="False"
Title="Clienty">
<DockPanel>
<Grid ColumnDefinitions="*, *, *" DockPanel.Dock="Top">
<TextBox Watermark="Поиск" Margin="5" HorizontalAlignment="Stretch" Grid.Column="0" TextChanged="TextBox_TextChanged" Name="SearchClient" />
<ComboBox Margin="5" PlaceholderText="Пол:" HorizontalAlignment="Stretch" Grid.Column="1" SelectionChanged="ComboBox_SelectionChanged" Name="FiltrPoPolu">
</ComboBox>
<ComboBox PlaceholderText="Отсортировать по:" Grid.Column="2" SelectionChanged="ComboBox_SelectionChanged_1" Name="FiltVsyakoe" Margin="5" HorizontalAlignment="Stretch">
</ComboBox>
</Grid>
<Grid ColumnDefinitions="*, *, *, *" DockPanel.Dock="Bottom">
<Button Grid.Column="0" Margin="5" Name="Dobavit" Click="Button_Click" Content="Добавить клиента"/>
<TextBlock Name="Kolich" Margin="5" Grid.Column="1"/>
</Grid>
<Border BorderThickness="1" BorderBrush="">
<ListBox Name="Listbox">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Tag="{Binding Id}" DoubleTapped="Border_DoubleTapped" Background="#FFFFE1" BorderBrush="DarkOrange" BorderThickness="1" Margin="5">
<Grid ColumnDefinitions="350, 350">
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" >
<StackPanel Spacing="5" Orientation="Horizontal" Grid.Column="0">
<TextBlock Text="{Binding Firstname}" />
<TextBlock Text="{Binding Lastname}" />
<TextBlock Text="{Binding Patronymic}" />
</StackPanel>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Дата рождения:"/>
<TextBlock Text="{Binding Birthday}"/>
</StackPanel>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Дата регистрации:"/>
<TextBlock Text="{Binding Registrationdate }"/>
</StackPanel>
<StackPanel >
<TextBlock Text="{Binding Email }"/>
</StackPanel>
<StackPanel >
<TextBlock Text="{Binding Phone}"/>
</StackPanel>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Пол:"/>
<TextBlock Text="{Binding Gender}"/>
</StackPanel>
</StackPanel>
<Border Grid.Column="2" Width="100" Height="100" BorderBrush="DarkOrange" BorderThickness="2" >
<Image Source="{Binding Image}" />
</Border>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Border>
</DockPanel>
</Window>

114
Clienty/MainWindow.axaml.cs Normal file
View File

@ -0,0 +1,114 @@
using Avalonia.Controls;
using Clienty.Models;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Clienty
{
public partial class MainWindow : Window
{
List<Client> filteredClientList = new List<Client>();
public MainWindow()
{
InitializeComponent();
Listbox.ItemsSource = Helper.ClientList;
// Список для ComboBox "Пол"
List<string> polList = new List<string>
{
"По умолчанию",
"мужчины",
"женщины"
};
FiltrPoPolu.ItemsSource = polList;
// Список для ComboBox "Отсортировать по"
List<string> sortList = new List<string>
{
"в алфавитном порядке",
"по дате регистрации"
};
FiltVsyakoe.ItemsSource = sortList;
}
private void TextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e)
{
Change();
}
private void ComboBox_SelectionChanged(object? sender, Avalonia.Controls.SelectionChangedEventArgs e)
{
Change();
}
private void ComboBox_SelectionChanged_1(object? sender, Avalonia.Controls.SelectionChangedEventArgs e)
{
Change();
}
public void Change()
{
try
{
filteredClientList = Helper.ClientList;
// search
if (!string.IsNullOrEmpty(SearchClient.Text) || !string.IsNullOrWhiteSpace(SearchClient.Text))
{
var searchText = SearchClient.Text.ToLower().Trim();
filteredClientList = string.IsNullOrWhiteSpace(searchText)
? Helper.ClientList.ToList() // Если нет текста, показываем всех клиентов
: Helper.ClientList.Where(c =>
c.Firstname.ToLower().Contains(searchText) ||
c.Lastname.ToLower().Contains(searchText) ||
(c.Patronymic != null && c.Patronymic.ToLower().Contains(searchText)) ||
(c.Email != null && c.Email.ToLower().Contains(searchText)) ||
c.Phone.Contains(searchText)
).ToList();
}
// sort
switch (FiltVsyakoe.SelectedIndex)
{
case 0:
filteredClientList = filteredClientList.OrderBy(c => c.Lastname).ToList();
break;
case 1:
filteredClientList = filteredClientList.OrderBy(c => c.Registrationdate).ToList();
break;
}
// filter
if (FiltrPoPolu.SelectedIndex > 0)
{
var selectedGender = FiltrPoPolu.SelectedIndex > 0 && FiltrPoPolu.SelectedItem.ToString() == "мужчины" ? 1 : 2;
filteredClientList = filteredClientList.Where(c => c.Gendercode == selectedGender.ToString().ToCharArray()[0]).ToList();
}
Listbox.ItemsSource = filteredClientList;
}
catch
{
return;
}
//Kolich.Text =
}
private async void Button_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
await new AddEdit().ShowDialog(this);
Change();
}
private async void Border_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
{
//var clientId = int.Parse(((sender as Border).Tag as string));
//await new AddEdit(clientId).ShowDialog(this);
//Change();
}
}
}

53
Clienty/Models/Client.cs Normal file
View File

@ -0,0 +1,53 @@
using Avalonia.Media.Imaging;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Clienty.Models;
public partial class Client
{
public int Id { get; set; }
public string Firstname { get; set; } = null!;
public string Lastname { get; set; } = null!;
public string? Patronymic { get; set; }
public DateOnly? Birthday { get; set; }
public DateTime Registrationdate { get; set; }
public string? Email { get; set; }
public string Phone { get; set; } = null!;
public char Gendercode { get; set; }
public string Gender { get => Helper.DBcontext.Genders.ToList().FirstOrDefault(r => r.Code == Gendercode).Name; }
public string? Photopath { get; set; }
public Bitmap? Image
{
get
{
try
{
return new Bitmap(Environment.CurrentDirectory + "/" + Photopath);
}
catch
{
return null;
}
}
}
public virtual ICollection<Clientservice> Clientservices { get; set; } = new List<Clientservice>();
public virtual Gender GendercodeNavigation { get; set; } = null!;
public virtual ICollection<Tag> Tags { get; set; } = new List<Tag>();
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Clientservice
{
public int Id { get; set; }
public int Clientid { get; set; }
public int Serviceid { get; set; }
public DateTime Starttime { get; set; }
public string? Comment { get; set; }
public virtual Client Client { get; set; } = null!;
public virtual ICollection<Documentbyservice> Documentbyservices { get; set; } = new List<Documentbyservice>();
public virtual ICollection<Productsale> Productsales { get; set; } = new List<Productsale>();
public virtual Service Service { get; set; } = null!;
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Documentbyservice
{
public int Id { get; set; }
public int Clientserviceid { get; set; }
public string Documentpath { get; set; } = null!;
public virtual Clientservice Clientservice { get; set; } = null!;
}

13
Clienty/Models/Gender.cs Normal file
View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Gender
{
public char Code { get; set; }
public string? Name { get; set; }
public virtual ICollection<Client> Clients { get; set; } = new List<Client>();
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Manufacturer
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public DateOnly? Startdate { get; set; }
public virtual ICollection<Product> Products { get; set; } = new List<Product>();
}

31
Clienty/Models/Product.cs Normal file
View File

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Product
{
public int Id { get; set; }
public string Title { get; set; } = null!;
public decimal Cost { get; set; }
public string? Description { get; set; }
public string? Mainimagepath { get; set; }
public int Isactive { get; set; }
public int? Manufacturerid { get; set; }
public virtual Manufacturer? Manufacturer { get; set; }
public virtual ICollection<Productphoto> Productphotos { get; set; } = new List<Productphoto>();
public virtual ICollection<Productsale> Productsales { get; set; } = new List<Productsale>();
public virtual ICollection<Product> Attachedproducts { get; set; } = new List<Product>();
public virtual ICollection<Product> Mainproducts { get; set; } = new List<Product>();
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Productphoto
{
public int Id { get; set; }
public int Productid { get; set; }
public string Photopath { get; set; } = null!;
public virtual Product Product { get; set; } = null!;
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Productsale
{
public int Id { get; set; }
public DateTime Saledate { get; set; }
public int Productid { get; set; }
public int Quantity { get; set; }
public int? Clientserviceid { get; set; }
public virtual Clientservice? Clientservice { get; set; }
public virtual Product Product { get; set; } = null!;
}

25
Clienty/Models/Service.cs Normal file
View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Service
{
public int Id { get; set; }
public string Title { get; set; } = null!;
public decimal Cost { get; set; }
public int Durationinseconds { get; set; }
public string? Description { get; set; }
public double? Discount { get; set; }
public string? Mainimagepath { get; set; }
public virtual ICollection<Clientservice> Clientservices { get; set; } = new List<Clientservice>();
public virtual ICollection<Servicephoto> Servicephotos { get; set; } = new List<Servicephoto>();
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Servicephoto
{
public int Id { get; set; }
public int Serviceid { get; set; }
public string Photopath { get; set; } = null!;
public virtual Service Service { get; set; } = null!;
}

15
Clienty/Models/Tag.cs Normal file
View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Clienty.Models;
public partial class Tag
{
public int Id { get; set; }
public string Title { get; set; } = null!;
public string Color { get; set; } = null!;
public virtual ICollection<Client> Clients { get; set; } = new List<Client>();
}

22
Clienty/Program.cs Normal file
View File

@ -0,0 +1,22 @@
using System;
using Avalonia;
namespace Clienty
{
internal class Program
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace();
}
}

18
Clienty/app.manifest Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<!-- This manifest is used on Windows only.
Don't remove it as it might cause problems with window transparency and embedded controls.
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
<assemblyIdentity version="1.0.0.0" name="Clienty.Desktop"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
</assembly>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Reflection.NullabilityInfoContext.IsSupported": true,
"System.Runtime.InteropServices.BuiltInComInterop.IsSupported": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More