first commit
BIN
.vs/Demo2/DesignTimeBuild/.dtbcache.v2
Normal file
BIN
.vs/Demo2/v17/.futdcache.v2
Normal file
BIN
.vs/Demo2/v17/.suo
Normal file
BIN
.vs/Demo2/v17/.wsuo
Normal file
179
.vs/Demo2/v17/DocumentLayout.backup.json
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\prdb\\Desktop\\Demo2-master\\",
|
||||||
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\editwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\editwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\service.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\service.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\tag.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\tag.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\editwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\editwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\manufacturer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\manufacturer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\publicactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\publicactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\app.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\app.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 149,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": 4,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 1,
|
||||||
|
"Title": "Service.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Service.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Service.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Service.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Service.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T12:40:42.844Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 2,
|
||||||
|
"Title": "Tag.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Tag.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Tag.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Tag.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Tag.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAXAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T11:15:03.27Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 3,
|
||||||
|
"Title": "MainWindow.axaml.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\MainWindow.axaml.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\MainWindow.axaml.cs",
|
||||||
|
"ViewState": "AgIAAGcAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T09:28:53.068Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 4,
|
||||||
|
"Title": "EditWindow.axaml.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\EditWindow.axaml.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\EditWindow.axaml.cs",
|
||||||
|
"ViewState": "AgIAADsAAAAAAAAAAAAswM8AAAAJAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T08:05:37.296Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 0,
|
||||||
|
"Title": "EditWindow.axaml",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\EditWindow.axaml",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml",
|
||||||
|
"RelativeToolTip": "Demo2\\EditWindow.axaml",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||||
|
"WhenOpened": "2024-09-19T08:05:35.845Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 6,
|
||||||
|
"Title": "Manufacturer.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T10:32:33.459Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 5,
|
||||||
|
"Title": "MainWindow.axaml",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\MainWindow.axaml",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml",
|
||||||
|
"RelativeToolTip": "Demo2\\MainWindow.axaml",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||||
|
"WhenOpened": "2024-09-19T08:05:18.181Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 8,
|
||||||
|
"Title": "Client.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Client.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Client.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Client.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Client.cs",
|
||||||
|
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-18T12:02:16.09Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 7,
|
||||||
|
"Title": "PublicActions.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\PublicActions.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\PublicActions.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\PublicActions.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\PublicActions.cs",
|
||||||
|
"ViewState": "AQIAAAwAAAAAAAAAAAAAABsAAAANAAAA",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-17T10:32:36.054Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 9,
|
||||||
|
"Title": "App.axaml",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\App.axaml",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\App.axaml",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\App.axaml",
|
||||||
|
"RelativeToolTip": "Demo2\\App.axaml",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||||
|
"WhenOpened": "2024-09-17T10:13:55.602Z"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
179
.vs/Demo2/v17/DocumentLayout.json
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\prdb\\Desktop\\Demo2-master\\",
|
||||||
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\editwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\editwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\service.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\service.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\tag.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\tag.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\mainwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\editwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\editwindow.axaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\mainwindow.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\manufacturer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\manufacturer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\publicactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\publicactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\models\\client.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|c:\\users\\prdb\\desktop\\demo2-master\\demo2\\app.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}",
|
||||||
|
"RelativeMoniker": "D:0:0:{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}|Demo2\\Demo2.csproj|solutionrelative:demo2\\app.axaml||{6D5344A2-2FCD-49DE-A09D-6A14FD1B1224}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 149,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": 4,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 1,
|
||||||
|
"Title": "Service.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Service.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Service.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Service.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Service.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T12:40:42.844Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 2,
|
||||||
|
"Title": "Tag.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Tag.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Tag.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Tag.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Tag.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAXAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T11:15:03.27Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 3,
|
||||||
|
"Title": "MainWindow.axaml.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\MainWindow.axaml.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\MainWindow.axaml.cs",
|
||||||
|
"ViewState": "AgIAAGcAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T09:28:53.068Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 4,
|
||||||
|
"Title": "EditWindow.axaml.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\EditWindow.axaml.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\EditWindow.axaml.cs",
|
||||||
|
"ViewState": "AgIAADsAAAAAAAAAAAAswM8AAAAJAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T08:05:37.296Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 0,
|
||||||
|
"Title": "EditWindow.axaml",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\EditWindow.axaml",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\EditWindow.axaml",
|
||||||
|
"RelativeToolTip": "Demo2\\EditWindow.axaml",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||||
|
"WhenOpened": "2024-09-19T08:05:35.845Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 6,
|
||||||
|
"Title": "Manufacturer.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Manufacturer.cs",
|
||||||
|
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-19T10:32:33.459Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 5,
|
||||||
|
"Title": "MainWindow.axaml",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\MainWindow.axaml",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\MainWindow.axaml",
|
||||||
|
"RelativeToolTip": "Demo2\\MainWindow.axaml",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||||
|
"WhenOpened": "2024-09-19T08:05:18.181Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 8,
|
||||||
|
"Title": "Client.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Client.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\Models\\Client.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\Models\\Client.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\Models\\Client.cs",
|
||||||
|
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-18T12:02:16.09Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 7,
|
||||||
|
"Title": "PublicActions.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\PublicActions.cs",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\PublicActions.cs",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\PublicActions.cs",
|
||||||
|
"RelativeToolTip": "Demo2\\PublicActions.cs",
|
||||||
|
"ViewState": "AQIAAAwAAAAAAAAAAAAAABsAAAANAAAA",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2024-09-17T10:32:36.054Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 9,
|
||||||
|
"Title": "App.axaml",
|
||||||
|
"DocumentMoniker": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\App.axaml",
|
||||||
|
"RelativeDocumentMoniker": "Demo2\\App.axaml",
|
||||||
|
"ToolTip": "C:\\Users\\prdb\\Desktop\\Demo2-master\\Demo2\\App.axaml",
|
||||||
|
"RelativeToolTip": "Demo2\\App.axaml",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||||
|
"WhenOpened": "2024-09-17T10:13:55.602Z"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
.vs/Proj/v17/.wsuo
Normal file
27
.vs/Proj/v17/DocumentLayout.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\prdb\\Desktop\\IsayProj\\",
|
||||||
|
"Documents": [],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": -1,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
.vs/ProjectEvaluation/demo2.metadata.v9.bin
Normal file
BIN
.vs/ProjectEvaluation/demo2.projects.v9.bin
Normal file
BIN
.vs/ProjectEvaluation/demo2.strings.v9.bin
Normal file
8
.vs/VSWorkspaceState.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"ExpandedNodes": [
|
||||||
|
"",
|
||||||
|
"\\Demo2"
|
||||||
|
],
|
||||||
|
"SelectedNode": "\\Demo2.sln",
|
||||||
|
"PreviewInSolutionExplorer": false
|
||||||
|
}
|
BIN
.vs/slnx.sqlite
Normal file
25
Demo2.sln
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.9.34622.214
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo2", "Demo2\Demo2.csproj", "{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D5E14A68-7DB7-4ACC-95DB-DC123E29717F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {6D4B8EDB-F940-415F-8B97-BDB961394BE0}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
25
Demo2/App.axaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<Application xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
x:Class="Demo2.App"
|
||||||
|
RequestedThemeVariant="Default">
|
||||||
|
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
|
||||||
|
|
||||||
|
<Application.Styles>
|
||||||
|
<FluentTheme />
|
||||||
|
<StyleInclude Source="avares://Avalonia.Controls.ColorPicker/Themes/Simple/Simple.xaml" />
|
||||||
|
<Style Selector="ComboBox">
|
||||||
|
<Setter Property="Margin" Value="5"/>
|
||||||
|
<Setter Property="Background" Value="#ffffe1"/>
|
||||||
|
</Style>
|
||||||
|
<Style Selector="Button">
|
||||||
|
<Setter Property="Margin" Value="5"/>
|
||||||
|
<Setter Property="Background" Value="#ff9c1a"/>
|
||||||
|
</Style>
|
||||||
|
<Style Selector="TextBox">
|
||||||
|
<Setter Property="Margin" Value="5"/>
|
||||||
|
<Setter Property="Background" Value="#ffffe1"/>
|
||||||
|
</Style>
|
||||||
|
</Application.Styles>
|
||||||
|
|
||||||
|
|
||||||
|
</Application>
|
24
Demo2/App.axaml.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
|
|
||||||
|
namespace Demo2
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
342
Demo2/Context/Context.cs
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Demo2.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Demo2.Context;
|
||||||
|
|
||||||
|
public partial class Context : DbContext
|
||||||
|
{
|
||||||
|
public Context()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Context(DbContextOptions<Context> 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 http://go.microsoft.com/fwlink/?LinkId=723263.
|
||||||
|
=> optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5454;Database=user19;Username=user19;Password=oplwLVnn");
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
modelBuilder.Entity<Client>(entity =>
|
||||||
|
{
|
||||||
|
entity.HasKey(e => e.Id).HasName("client_pkey");
|
||||||
|
|
||||||
|
entity.ToTable("client", "task16-09");
|
||||||
|
|
||||||
|
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.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.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("fk_clientservice_service");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity<Documentbyservice>(entity =>
|
||||||
|
{
|
||||||
|
entity.HasKey(e => e.Id).HasName("documentbyservice_pkey");
|
||||||
|
|
||||||
|
entity.ToTable("documentbyservice", "task16-09");
|
||||||
|
|
||||||
|
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.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.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.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.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.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.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);
|
||||||
|
}
|
25
Demo2/Demo2.csproj
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Avalonia" Version="11.0.6" />
|
||||||
|
<PackageReference Include="Avalonia.Desktop" Version="11.0.6" />
|
||||||
|
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.6" />
|
||||||
|
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.6" />
|
||||||
|
<!--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.6" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.20" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.20">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.18" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
67
Demo2/EditWindow.axaml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<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="1920" d:DesignHeight="1080"
|
||||||
|
MinHeight="360"
|
||||||
|
MinWidth="570"
|
||||||
|
x:Class="Demo2.EditWindow"
|
||||||
|
Title="EditWindow">
|
||||||
|
<DockPanel>
|
||||||
|
<Grid DockPanel.Dock="Bottom">
|
||||||
|
<Button Content="Готово" Click="Comfirm"/>
|
||||||
|
<Button HorizontalAlignment="Right" Content="Добавить Тег" Click="AddTag"/>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Grid ColumnDefinitions="2*, 4*">
|
||||||
|
<Grid ColumnDefinitions="*,*,*,*" RowDefinitions="*,*,*,*">
|
||||||
|
<Border BorderBrush="Black" BorderThickness="2" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Grid.RowSpan="2" >
|
||||||
|
<Image Name="Image"/>
|
||||||
|
</Border>
|
||||||
|
<Button Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" Name="ImageButton" Content="Добавить картинку" Click="AddImage" DockPanel.Dock="Bottom"/>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Column="2" ColumnDefinitions="1*, 4*" RowDefinitions="*,*,*,*,*,*,*,*,1.5*">
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="0" Text="Id:"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="1" Text="Фамилия"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="2" Text="Имя"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="3" Text="Отчество"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="4" Text="Email"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="5" Text="Телефон"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="6" Text="Дата рождения"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="7" Text="Пол"/>
|
||||||
|
<TextBlock Grid.Column="0" Grid.Row="8" Text="Тэги пользователя"/>
|
||||||
|
<TextBlock Grid.Column="1" Grid.Row="0" Name="Id" HorizontalAlignment="Stretch"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="1" Name="Lastname" Watermark="Фамилия клиента" HorizontalAlignment="Stretch" TextChanged="TextBox_TextChanged"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="2" Name="Firstname" Watermark="Имя клиента" HorizontalAlignment="Stretch" TextChanged="TextBox_TextChanged"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="3" Name="Patronim" Watermark="Отчество клиента" HorizontalAlignment="Stretch" TextChanged="TextBox_TextChanged"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="4" Name="Email" Watermark="Почта клиента" HorizontalAlignment="Stretch"/>
|
||||||
|
<TextBox Grid.Column="1" Grid.Row="5" Name="Phone" Watermark="Телефон клиента" HorizontalAlignment="Stretch" TextChanged="TextBox_TextChanged_1"/>
|
||||||
|
<DatePicker HorizontalAlignment="Stretch" Background="#ffffe1" VerticalAlignment="Stretch" Grid.Column="1" Grid.Row="6" Name="BDay" />
|
||||||
|
<ComboBox Grid.Column="1" Grid.Row="7" Name="Gender" />
|
||||||
|
<Grid Grid.Column="1" Grid.Row="8" ColumnDefinitions="5*, *">
|
||||||
|
<ListBox Grid.Column="0" DockPanel.Dock="Top" Name="Extra" ScrollViewer.HorizontalScrollBarVisibility="Visible">
|
||||||
|
<ListBox.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<VirtualizingStackPanel Orientation="Horizontal" />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ListBox.ItemsPanel>
|
||||||
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Border Background="{Binding Color}" CornerRadius="3">
|
||||||
|
<TextBlock HorizontalAlignment="Center" Background="{Binding Color}" VerticalAlignment="Center" Text="{Binding Title}"/>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListBox.ItemTemplate>
|
||||||
|
</ListBox>
|
||||||
|
<Border Grid.Column="1">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="Шаблон Тега"/>
|
||||||
|
<TextBox Name="TagName"/>
|
||||||
|
<ColorPicker Name="ColorPic"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</DockPanel>
|
||||||
|
</Window>
|
212
Demo2/EditWindow.axaml.cs
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
|
using System.IO;
|
||||||
|
using System;
|
||||||
|
using Avalonia.Media.Imaging;
|
||||||
|
using Demo2.Models;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Demo2.Context;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace Demo2;
|
||||||
|
|
||||||
|
public partial class EditWindow : Window
|
||||||
|
{
|
||||||
|
int index = -1;
|
||||||
|
string checklastname = "";
|
||||||
|
string checkname = "";
|
||||||
|
string checkpat = "";
|
||||||
|
string checkphpone = "";
|
||||||
|
public string FileToCopy = "";
|
||||||
|
public string FileName = "";
|
||||||
|
public string OldFile = "";
|
||||||
|
List<Models.Tag> tags = new List<Models.Tag>();
|
||||||
|
List<Models.Tag> showntags = new List<Models.Tag>();
|
||||||
|
public EditWindow()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Gender.ItemsSource = PublicActions.PublicContext.Genders.Select(g => g.Name);
|
||||||
|
Id.Text = (PublicActions.PublicContext.Clients.OrderBy(c => c.Id).LastOrDefault().Id + 1).ToString();
|
||||||
|
}
|
||||||
|
public EditWindow(int i)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
ImageButton.Content = "如戾龛螯 赅痱桧牦";
|
||||||
|
Gender.ItemsSource = PublicActions.PublicContext.Genders.Select(g => g.Name);
|
||||||
|
index = i;
|
||||||
|
Client client = PublicActions.Clients.ToList().FirstOrDefault(c => c.Id == i);
|
||||||
|
showntags = client.Tags.ToList();
|
||||||
|
Extra.ItemsSource = client.Tags;
|
||||||
|
Id.Text = client.Id.ToString();
|
||||||
|
Lastname.Text = client.Lastname;
|
||||||
|
Firstname.Text = client.Firstname;
|
||||||
|
Patronim.Text = client.Patronymic;
|
||||||
|
Email.Text = client.Email;
|
||||||
|
Phone.Text = client.Phone;
|
||||||
|
BDay.SelectedDate = DateTimeOffset.Parse(client.Birthday.ToString());
|
||||||
|
Gender.SelectedIndex = PublicActions.PublicContext.Genders.ToList().IndexOf(PublicActions.PublicContext.Genders.ToList().First(g => g.Code == client.Gendercode));
|
||||||
|
OldFile = client.Photopath;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Image.Source = new Bitmap(Environment.CurrentDirectory + "/" + OldFile);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Image.Source = new Bitmap(Environment.CurrentDirectory + "/ClientsPhotos/stock_photo.png");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private async void AddImage(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
OpenFileDialog openFileDialog = new OpenFileDialog();
|
||||||
|
var TopLevel = await openFileDialog.ShowAsync(this);
|
||||||
|
FileToCopy = string.Join("", TopLevel);
|
||||||
|
if (FileToCopy != "")
|
||||||
|
{
|
||||||
|
int pos = FileToCopy.LastIndexOf('.');
|
||||||
|
string str = FileToCopy.Substring(pos, FileToCopy.Length - pos);
|
||||||
|
Image.Source = new Bitmap(FileToCopy);
|
||||||
|
FileName = Guid.NewGuid().ToString() + str;
|
||||||
|
}
|
||||||
|
ImageButton.Content = "如戾龛螯 赅痱桧牦";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Comfirm(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Lastname.Text) || string.IsNullOrEmpty(Firstname.Text)
|
||||||
|
|| string.IsNullOrEmpty(Patronim.Text) || string.IsNullOrEmpty(Email.Text)
|
||||||
|
|| string.IsNullOrEmpty(Phone.Text) || Gender.SelectedIndex == null || !BDay.SelectedDate.HasValue || !Email.Text.Contains("@"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (index == -1)
|
||||||
|
{
|
||||||
|
if (PublicActions.PublicContext.Clients.ToList().Where(t => t.Phone == Phone.Text).Count() != 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Client client = new Client()
|
||||||
|
{
|
||||||
|
Id = PublicActions.PublicContext.Clients.OrderBy(c => c.Id).LastOrDefault().Id + 1,
|
||||||
|
Lastname = Lastname.Text,
|
||||||
|
Firstname = Firstname.Text,
|
||||||
|
Patronymic = Patronim.Text,
|
||||||
|
Email = Email.Text,
|
||||||
|
Phone = Phone.Text,
|
||||||
|
Birthday = DateOnly.FromDateTime(BDay.SelectedDate.Value.Date),
|
||||||
|
Gendercode = PublicActions.PublicContext.Genders.ToList().FirstOrDefault(g => g.Name == PublicActions.PublicContext.Genders.Select(g => g.Name).ToList()[Gender.SelectedIndex]).Code,
|
||||||
|
Photopath = $"ClientsPhotos/{FileName}"
|
||||||
|
};
|
||||||
|
PublicActions.PublicContext.Clients.Add(client);
|
||||||
|
if (FileToCopy != "")
|
||||||
|
{
|
||||||
|
File.Copy(FileToCopy, $"{Environment.CurrentDirectory}/ClientsPhotos/{FileName}");
|
||||||
|
}
|
||||||
|
PublicActions.PublicContext.SaveChanges();
|
||||||
|
|
||||||
|
foreach (Models.Tag tag in tags)
|
||||||
|
{
|
||||||
|
using (var context = new Context.Context())
|
||||||
|
{
|
||||||
|
var a = context.Clients.Include(z => z.Tags).FirstOrDefault(c => c.Id == index);
|
||||||
|
if (context.Tags.OrderBy(t => t.Id).LastOrDefault() == null)
|
||||||
|
{
|
||||||
|
tag.Id = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tag.Id = context.Tags.OrderBy(t => t.Id).LastOrDefault().Id + 1;
|
||||||
|
}
|
||||||
|
a.Tags.Add(new Models.Tag() { Id = tag.Id, Title = tag.Title, Color = tag.Color });
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Client client = PublicActions.Clients.ToList().FirstOrDefault(c => c.Id == index);
|
||||||
|
client.Lastname = Lastname.Text;
|
||||||
|
client.Firstname = Firstname.Text;
|
||||||
|
client.Patronymic = Patronim.Text;
|
||||||
|
client.Email = Email.Text;
|
||||||
|
client.Phone = Phone.Text;
|
||||||
|
client.Birthday = DateOnly.FromDateTime(BDay.SelectedDate.Value.Date);
|
||||||
|
client.Gendercode = PublicActions.PublicContext.Genders.ToList().FirstOrDefault(g => g.Name == PublicActions.PublicContext.Genders.Select(g => g.Name).ToList()[Gender.SelectedIndex]).Code;
|
||||||
|
if (FileToCopy != "")
|
||||||
|
{
|
||||||
|
client.Photopath = $"ClientsPhotos/{FileName}";
|
||||||
|
File.Copy(FileToCopy, $"{Environment.CurrentDirectory}/ClientsPhotos/{FileName}");
|
||||||
|
//FileInfo file = new FileInfo(OldFile);
|
||||||
|
//file.Delete();
|
||||||
|
}
|
||||||
|
PublicActions.PublicContext.Clients.Update(client);
|
||||||
|
PublicActions.PublicContext.SaveChanges();
|
||||||
|
foreach (Models.Tag tag in tags)
|
||||||
|
{
|
||||||
|
using (var context = new Context.Context())
|
||||||
|
{
|
||||||
|
var a = context.Clients.Include(z => z.Tags).FirstOrDefault(c => c.Id == index);
|
||||||
|
if (context.Tags.OrderBy(t => t.Id).LastOrDefault() == null)
|
||||||
|
{
|
||||||
|
tag.Id = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tag.Id = context.Tags.OrderBy(t => t.Id).LastOrDefault().Id + 1;
|
||||||
|
}
|
||||||
|
a.Tags.Add(new Models.Tag() { Id = tag.Id, Title = tag.Title, Color = tag.Color });
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new MainWindow().Show();
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddTag(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
string a = string.Join("", ColorPic.Color.ToString().Skip(3));
|
||||||
|
tags.Add(new Models.Tag() { Color = "#" + a, Title = TagName.Text, Id = 2 });
|
||||||
|
showntags.Add(new Models.Tag() { Color = "#" + a, Title = TagName.Text, Id = 2 });
|
||||||
|
TagName.Text = "";
|
||||||
|
Extra.ItemsSource = showntags;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!Regex.IsMatch((sender as TextBox).Text, @"^[a-zA-Z -]+$") || (sender as TextBox).Text.Count() > 50)
|
||||||
|
{
|
||||||
|
switch ((sender as TextBox).Name.ToString())
|
||||||
|
{
|
||||||
|
case "Lastname": (sender as TextBox).Text = checklastname; break;
|
||||||
|
case "Firstname": (sender as TextBox).Text = checkname; break;
|
||||||
|
case "Patronim": (sender as TextBox).Text = checkpat; break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch ((sender as TextBox).Name.ToString())
|
||||||
|
{
|
||||||
|
case "Lastname": checklastname = (sender as TextBox).Text; break;
|
||||||
|
case "Firstname": checkname = (sender as TextBox).Text; break;
|
||||||
|
case "Patronim": checkpat = (sender as TextBox).Text; break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TextBox_TextChanged_1(object? sender, Avalonia.Controls.TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!Regex.IsMatch((sender as TextBox).Text, @"^[1-9+() -]+$") )
|
||||||
|
{
|
||||||
|
(sender as TextBox).Text = checkphpone;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
checkphpone = (sender as TextBox).Text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
90
Demo2/MainWindow.axaml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<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="1920" d:DesignHeight="1080"
|
||||||
|
WindowStartupLocation="CenterScreen"
|
||||||
|
WindowState="Maximized"
|
||||||
|
MinHeight="305"
|
||||||
|
MinWidth="600"
|
||||||
|
x:Class="Demo2.MainWindow"
|
||||||
|
Title="Demo2">
|
||||||
|
<DockPanel>
|
||||||
|
<TextBox DockPanel.Dock="Top" TextChanged="TextBox_TextChanged"/>
|
||||||
|
<Grid ColumnDefinitions="*,*,*" DockPanel.Dock="Top">
|
||||||
|
<Button HorizontalAlignment="Stretch" Content="Добавить клиента" Click="Button_Click_1"/>
|
||||||
|
<ComboBox SelectionChanged="SFSchanged" Name="filtr" Grid.Column="1" HorizontalAlignment="Stretch">
|
||||||
|
</ComboBox>
|
||||||
|
<ComboBox Name="sort" SelectionChanged="SFSchanged" Grid.Column="2" HorizontalAlignment="Stretch">
|
||||||
|
<ComboBoxItem>Без сортировки</ComboBoxItem>
|
||||||
|
<ComboBoxItem>По фамилии </ComboBoxItem>
|
||||||
|
<ComboBoxItem>По дате последнего посещения</ComboBoxItem>
|
||||||
|
<ComboBoxItem>По количеству посещений</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="*,*,*" DockPanel.Dock="Bottom">
|
||||||
|
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Name="show"/>
|
||||||
|
<Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Content="Удалить выбранный элемент" IsVisible="False" Name="DeleteButton" Click="Delete"/>
|
||||||
|
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||||
|
<ComboBox Name="Amount" SelectionChanged="ShownAmounChanged">
|
||||||
|
<ComboBoxItem>10</ComboBoxItem>
|
||||||
|
<ComboBoxItem>50</ComboBoxItem>
|
||||||
|
<ComboBoxItem>200</ComboBoxItem>
|
||||||
|
<ComboBoxItem>Все</ComboBoxItem>
|
||||||
|
</ComboBox>
|
||||||
|
<Button Name="Back" Content="Влево" Click="PageButton"/>
|
||||||
|
<Button Name="Forward" Content="Вправо" Click="PageButton"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
<ListBox SelectionMode="Single" SelectionChanged="ListBox_SelectionChanged_1" Name="ClientsList" Margin="5">
|
||||||
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Border Tag="{Binding Id}" DoubleTapped="Border_DoubleTapped" Background="#ffffe1" BorderBrush="Black" BorderThickness="2" CornerRadius="1.68">
|
||||||
|
<Grid ColumnDefinitions="1*, 1*, 7*, 3*">
|
||||||
|
<TextBlock Grid.Column="1" Text="{Binding Id}" VerticalAlignment="Center"/>
|
||||||
|
<StackPanel VerticalAlignment="Center" Grid.Column="2">
|
||||||
|
<StackPanel Spacing="5" Orientation="Horizontal">
|
||||||
|
<TextBlock Text="{Binding Firstname}"/>
|
||||||
|
<TextBlock Text="{Binding Lastname}"/>
|
||||||
|
<TextBlock Text="{Binding Patronymic}"/>
|
||||||
|
</StackPanel>
|
||||||
|
<TextBlock Text="{Binding Gender}"/>
|
||||||
|
<TextBlock Text="{Binding Birthday, StringFormat='Родился(-лась) {0}.'}"/>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock Text="Телефон:"/>
|
||||||
|
<TextBlock Text="{Binding Phone}"/>
|
||||||
|
<TextBlock Text="Почта:"/>
|
||||||
|
<TextBlock Text="{Binding Email}"/>
|
||||||
|
</StackPanel>
|
||||||
|
<TextBlock Text="{Binding Registrationdate, StringFormat='Зарегестрировался(-лась) {0}.'}"/>
|
||||||
|
<StackPanel Spacing="5" Orientation="Horizontal">
|
||||||
|
<TextBlock Text="{Binding LastService, StringFormat='Последнее посещение {0}.'}"/>
|
||||||
|
<TextBlock Text="{Binding Amount, StringFormat='Всего посещений {0}.'}"/>
|
||||||
|
</StackPanel>
|
||||||
|
<ListBox ItemsSource="{Binding Tags}" ScrollViewer.HorizontalScrollBarVisibility="Visible">
|
||||||
|
<ListBox.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<VirtualizingStackPanel Orientation="Horizontal" />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ListBox.ItemsPanel>
|
||||||
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Border Background="{Binding Color}" CornerRadius="10">
|
||||||
|
<TextBlock Margin="5" HorizontalAlignment="Center" Background="{Binding Color}" VerticalAlignment="Center" Text="{Binding Title}"/>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListBox.ItemTemplate>
|
||||||
|
</ListBox>
|
||||||
|
</StackPanel>
|
||||||
|
<Grid Grid.Column="3" ColumnDefinitions="*,*,*,*" RowDefinitions="*,*,*,*">
|
||||||
|
<Border Grid.Column="1" Grid.ColumnSpan="2" Margin="15" Grid.Row="1" Grid.RowSpan="2" BorderBrush="Black" BorderThickness="2" >
|
||||||
|
<Image Source="{Binding Image}"/>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListBox.ItemTemplate>
|
||||||
|
</ListBox>
|
||||||
|
</DockPanel>
|
||||||
|
</Window>
|
128
Demo2/MainWindow.axaml.cs
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Demo2.Models;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Demo2
|
||||||
|
{
|
||||||
|
public partial class MainWindow : Window
|
||||||
|
{
|
||||||
|
int page = 0;
|
||||||
|
int shownAmount;
|
||||||
|
int f = 0;
|
||||||
|
int s = 0;
|
||||||
|
string sr = "";
|
||||||
|
public MainWindow()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
filtr.ItemsSource = PublicActions.Genders;
|
||||||
|
Amount.SelectedIndex = 0;
|
||||||
|
filtr.SelectedIndex = 0;
|
||||||
|
sort.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
public void ChangePage()
|
||||||
|
{
|
||||||
|
ClientsList.ItemsSource = PublicActions.Clients.ToList().Skip(page * shownAmount).Take(shownAmount);
|
||||||
|
show.Text = PublicActions.ShowmClientAmount;
|
||||||
|
if (page == 0)
|
||||||
|
{
|
||||||
|
Back.IsEnabled = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Back.IsEnabled = true;
|
||||||
|
}
|
||||||
|
if ((page + 1) * shownAmount > PublicActions.Clients.Count - 1)
|
||||||
|
{
|
||||||
|
Forward.IsEnabled = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Forward.IsEnabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PageButton(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Button button = sender as Button;
|
||||||
|
if (button.Name == "Back")
|
||||||
|
{
|
||||||
|
page--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
page++;
|
||||||
|
}
|
||||||
|
ChangePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShownAmounChanged(object? sender, Avalonia.Controls.SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
switch ((sender as ComboBox).SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0: shownAmount = 10; break;
|
||||||
|
case 1: shownAmount = 50; break;
|
||||||
|
case 2: shownAmount = 200; break;
|
||||||
|
}
|
||||||
|
page = 0;
|
||||||
|
ChangePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SFSchanged(object? sender, Avalonia.Controls.SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if ((sender as ComboBox).Name == "filtr")
|
||||||
|
{
|
||||||
|
f = (sender as ComboBox).SelectedIndex;
|
||||||
|
}
|
||||||
|
else if ((sender as ComboBox).Name == "sort")
|
||||||
|
{
|
||||||
|
s = (sender as ComboBox).SelectedIndex;
|
||||||
|
}
|
||||||
|
page = 0;
|
||||||
|
PublicActions.ClientsActions(s, f, sr);
|
||||||
|
ChangePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
sr = (sender as TextBox).Text;
|
||||||
|
page = 0;
|
||||||
|
PublicActions.ClientsActions(s, f, sr);
|
||||||
|
ChangePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click_1(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
new EditWindow().Show();
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Border_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
|
||||||
|
{
|
||||||
|
new EditWindow(Int32.Parse((sender as Border).Tag.ToString())).Show();
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ListBox_SelectionChanged_1(object? sender, Avalonia.Controls.SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (ClientsList.SelectedIndex != -1)
|
||||||
|
{
|
||||||
|
DeleteButton.IsVisible = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeleteButton.IsVisible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Delete(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
PublicActions.PublicContext.Clients.Remove(ClientsList.SelectedItem as Client);
|
||||||
|
PublicActions.PublicContext.SaveChanges();
|
||||||
|
page = 0;
|
||||||
|
f = 0;
|
||||||
|
s = 0;
|
||||||
|
PublicActions.ClientsActions(s, f, sr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
593
Demo2/Migrations/20250410221017_InitialCreate2.Designer.cs
generated
Normal file
@ -0,0 +1,593 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Demo2.Context;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Demo2.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(Context.Context))]
|
||||||
|
[Migration("20250410221017_InitialCreate2")]
|
||||||
|
partial class InitialCreate2
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "7.0.20")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("Attachedproduct", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Mainproductid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("mainproductid");
|
||||||
|
|
||||||
|
b.Property<int>("Attachedproductid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("attachedproductid");
|
||||||
|
|
||||||
|
b.HasKey("Mainproductid", "Attachedproductid")
|
||||||
|
.HasName("attachedproduct_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Attachedproductid");
|
||||||
|
|
||||||
|
b.ToTable("attachedproduct", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Client", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateOnly?>("Birthday")
|
||||||
|
.HasColumnType("date")
|
||||||
|
.HasColumnName("birthday");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.HasMaxLength(255)
|
||||||
|
.HasColumnType("character varying(255)")
|
||||||
|
.HasColumnName("email");
|
||||||
|
|
||||||
|
b.Property<string>("Firstname")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("character varying(50)")
|
||||||
|
.HasColumnName("firstname");
|
||||||
|
|
||||||
|
b.Property<char>("Gendercode")
|
||||||
|
.HasMaxLength(1)
|
||||||
|
.HasColumnType("character(1)")
|
||||||
|
.HasColumnName("gendercode");
|
||||||
|
|
||||||
|
b.Property<string>("Lastname")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("character varying(50)")
|
||||||
|
.HasColumnName("lastname");
|
||||||
|
|
||||||
|
b.Property<string>("Patronymic")
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("character varying(50)")
|
||||||
|
.HasColumnName("patronymic");
|
||||||
|
|
||||||
|
b.Property<string>("Phone")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(20)
|
||||||
|
.HasColumnType("character varying(20)")
|
||||||
|
.HasColumnName("phone");
|
||||||
|
|
||||||
|
b.Property<string>("Photopath")
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("photopath");
|
||||||
|
|
||||||
|
b.Property<DateTime>("Registrationdate")
|
||||||
|
.HasColumnType("timestamp(6) without time zone")
|
||||||
|
.HasColumnName("registrationdate");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("client_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Gendercode");
|
||||||
|
|
||||||
|
b.ToTable("client", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Clientservice", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("Clientid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientid");
|
||||||
|
|
||||||
|
b.Property<string>("Comment")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("comment");
|
||||||
|
|
||||||
|
b.Property<int>("Serviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("serviceid");
|
||||||
|
|
||||||
|
b.Property<DateTime>("Starttime")
|
||||||
|
.HasColumnType("timestamp(6) without time zone")
|
||||||
|
.HasColumnName("starttime");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("clientservice_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Clientid");
|
||||||
|
|
||||||
|
b.HasIndex("Serviceid");
|
||||||
|
|
||||||
|
b.ToTable("clientservice", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Documentbyservice", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("Clientserviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientserviceid");
|
||||||
|
|
||||||
|
b.Property<string>("Documentpath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("documentpath");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("documentbyservice_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Clientserviceid");
|
||||||
|
|
||||||
|
b.ToTable("documentbyservice", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Gender", b =>
|
||||||
|
{
|
||||||
|
b.Property<char>("Code")
|
||||||
|
.HasMaxLength(1)
|
||||||
|
.HasColumnType("character(1)")
|
||||||
|
.HasColumnName("code");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasMaxLength(10)
|
||||||
|
.HasColumnType("character varying(10)")
|
||||||
|
.HasColumnName("name");
|
||||||
|
|
||||||
|
b.HasKey("Code")
|
||||||
|
.HasName("gender_pkey");
|
||||||
|
|
||||||
|
b.ToTable("gender", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Manufacturer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("character varying(100)")
|
||||||
|
.HasColumnName("name");
|
||||||
|
|
||||||
|
b.Property<DateOnly?>("Startdate")
|
||||||
|
.HasColumnType("date")
|
||||||
|
.HasColumnName("startdate");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("manufacturer_pkey");
|
||||||
|
|
||||||
|
b.ToTable("manufacturer", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Product", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<decimal>("Cost")
|
||||||
|
.HasPrecision(19, 4)
|
||||||
|
.HasColumnType("numeric(19,4)")
|
||||||
|
.HasColumnName("cost");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("description");
|
||||||
|
|
||||||
|
b.Property<int>("Isactive")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("isactive");
|
||||||
|
|
||||||
|
b.Property<string>("Mainimagepath")
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("mainimagepath");
|
||||||
|
|
||||||
|
b.Property<int?>("Manufacturerid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("manufacturerid");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("character varying(100)")
|
||||||
|
.HasColumnName("title");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("product_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Manufacturerid");
|
||||||
|
|
||||||
|
b.ToTable("product", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productphoto", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Photopath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("photopath");
|
||||||
|
|
||||||
|
b.Property<int>("Productid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("productid");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("productphoto_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Productid");
|
||||||
|
|
||||||
|
b.ToTable("productphoto", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productsale", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int?>("Clientserviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientserviceid");
|
||||||
|
|
||||||
|
b.Property<int>("Productid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("productid");
|
||||||
|
|
||||||
|
b.Property<int>("Quantity")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("quantity");
|
||||||
|
|
||||||
|
b.Property<DateTime>("Saledate")
|
||||||
|
.HasColumnType("timestamp(6) without time zone")
|
||||||
|
.HasColumnName("saledate");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("productsale_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Clientserviceid");
|
||||||
|
|
||||||
|
b.HasIndex("Productid");
|
||||||
|
|
||||||
|
b.ToTable("productsale", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Service", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<decimal>("Cost")
|
||||||
|
.HasPrecision(19, 4)
|
||||||
|
.HasColumnType("numeric(19,4)")
|
||||||
|
.HasColumnName("cost");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("description");
|
||||||
|
|
||||||
|
b.Property<double?>("Discount")
|
||||||
|
.HasColumnType("double precision")
|
||||||
|
.HasColumnName("discount");
|
||||||
|
|
||||||
|
b.Property<int>("Durationinseconds")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("durationinseconds");
|
||||||
|
|
||||||
|
b.Property<string>("Mainimagepath")
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("mainimagepath");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("character varying(100)")
|
||||||
|
.HasColumnName("title");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("service_pkey");
|
||||||
|
|
||||||
|
b.ToTable("service", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Servicephoto", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Photopath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("photopath");
|
||||||
|
|
||||||
|
b.Property<int>("Serviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("serviceid");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("servicephoto_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Serviceid");
|
||||||
|
|
||||||
|
b.ToTable("servicephoto", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Tag", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
b.Property<string>("Color")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(8)
|
||||||
|
.HasColumnType("character(8)")
|
||||||
|
.HasColumnName("color")
|
||||||
|
.IsFixedLength();
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(30)
|
||||||
|
.HasColumnType("character varying(30)")
|
||||||
|
.HasColumnName("title");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("tag_pkey");
|
||||||
|
|
||||||
|
b.ToTable("tag", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Tagofclient", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Clientid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientid");
|
||||||
|
|
||||||
|
b.Property<int>("Tagid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("tagid");
|
||||||
|
|
||||||
|
b.HasKey("Clientid", "Tagid")
|
||||||
|
.HasName("tagofclient_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Tagid");
|
||||||
|
|
||||||
|
b.ToTable("tagofclient", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Attachedproduct", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Product", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Attachedproductid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_attachedproduct_product1");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Product", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Mainproductid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_attachedproduct_product");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Client", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Gender", "GendercodeNavigation")
|
||||||
|
.WithMany("Clients")
|
||||||
|
.HasForeignKey("Gendercode")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_client_gender");
|
||||||
|
|
||||||
|
b.Navigation("GendercodeNavigation");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Clientservice", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Client", "Client")
|
||||||
|
.WithMany("Clientservices")
|
||||||
|
.HasForeignKey("Clientid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_clientservice_client");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Service", "Service")
|
||||||
|
.WithMany("Clientservices")
|
||||||
|
.HasForeignKey("Serviceid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_clientservice_service");
|
||||||
|
|
||||||
|
b.Navigation("Client");
|
||||||
|
|
||||||
|
b.Navigation("Service");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Documentbyservice", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Clientservice", "Clientservice")
|
||||||
|
.WithMany("Documentbyservices")
|
||||||
|
.HasForeignKey("Clientserviceid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_documentbyservice_clientservice");
|
||||||
|
|
||||||
|
b.Navigation("Clientservice");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Product", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Manufacturer", "Manufacturer")
|
||||||
|
.WithMany("Products")
|
||||||
|
.HasForeignKey("Manufacturerid")
|
||||||
|
.HasConstraintName("fk_product_manufacturer");
|
||||||
|
|
||||||
|
b.Navigation("Manufacturer");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productphoto", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Product", "Product")
|
||||||
|
.WithMany("Productphotos")
|
||||||
|
.HasForeignKey("Productid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_productphoto_product");
|
||||||
|
|
||||||
|
b.Navigation("Product");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productsale", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Clientservice", "Clientservice")
|
||||||
|
.WithMany("Productsales")
|
||||||
|
.HasForeignKey("Clientserviceid")
|
||||||
|
.HasConstraintName("fk_productsale_clientservice");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Product", "Product")
|
||||||
|
.WithMany("Productsales")
|
||||||
|
.HasForeignKey("Productid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_productsale_product");
|
||||||
|
|
||||||
|
b.Navigation("Clientservice");
|
||||||
|
|
||||||
|
b.Navigation("Product");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Servicephoto", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Service", "Service")
|
||||||
|
.WithMany("Servicephotos")
|
||||||
|
.HasForeignKey("Serviceid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_servicephoto_service");
|
||||||
|
|
||||||
|
b.Navigation("Service");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Tagofclient", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Client", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Clientid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_tagofclient_client");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Tag", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Tagid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("tagofclient_tag_fk");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Client", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Clientservices");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Clientservice", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Documentbyservices");
|
||||||
|
|
||||||
|
b.Navigation("Productsales");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Gender", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Clients");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Manufacturer", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Products");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Product", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Productphotos");
|
||||||
|
|
||||||
|
b.Navigation("Productsales");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Service", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Clientservices");
|
||||||
|
|
||||||
|
b.Navigation("Servicephotos");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
426
Demo2/Migrations/20250410221017_InitialCreate2.cs
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Demo2.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class InitialCreate2 : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.EnsureSchema(
|
||||||
|
name: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "gender",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
code = table.Column<char>(type: "character(1)", maxLength: 1, nullable: false),
|
||||||
|
name = table.Column<string>(type: "character varying(10)", maxLength: 10, nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("gender_pkey", x => x.code);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "manufacturer",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
name = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false),
|
||||||
|
startdate = table.Column<DateOnly>(type: "date", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("manufacturer_pkey", x => x.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "service",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
title = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false),
|
||||||
|
cost = table.Column<decimal>(type: "numeric(19,4)", precision: 19, scale: 4, nullable: false),
|
||||||
|
durationinseconds = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
description = table.Column<string>(type: "text", nullable: true),
|
||||||
|
discount = table.Column<double>(type: "double precision", nullable: true),
|
||||||
|
mainimagepath = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("service_pkey", x => x.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "tag",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
title = table.Column<string>(type: "character varying(30)", maxLength: 30, nullable: false),
|
||||||
|
color = table.Column<string>(type: "character(8)", fixedLength: true, maxLength: 8, nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("tag_pkey", x => x.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "client",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
firstname = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: false),
|
||||||
|
lastname = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: false),
|
||||||
|
patronymic = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true),
|
||||||
|
birthday = table.Column<DateOnly>(type: "date", nullable: true),
|
||||||
|
registrationdate = table.Column<DateTime>(type: "timestamp(6) without time zone", nullable: false),
|
||||||
|
email = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
||||||
|
phone = table.Column<string>(type: "character varying(20)", maxLength: 20, nullable: false),
|
||||||
|
gendercode = table.Column<char>(type: "character(1)", maxLength: 1, nullable: false),
|
||||||
|
photopath = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("client_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_client_gender",
|
||||||
|
column: x => x.gendercode,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "gender",
|
||||||
|
principalColumn: "code");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "product",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
title = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false),
|
||||||
|
cost = table.Column<decimal>(type: "numeric(19,4)", precision: 19, scale: 4, nullable: false),
|
||||||
|
description = table.Column<string>(type: "text", nullable: true),
|
||||||
|
mainimagepath = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: true),
|
||||||
|
isactive = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
manufacturerid = table.Column<int>(type: "integer", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("product_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_product_manufacturer",
|
||||||
|
column: x => x.manufacturerid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "manufacturer",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "servicephoto",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
serviceid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
photopath = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("servicephoto_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_servicephoto_service",
|
||||||
|
column: x => x.serviceid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "service",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "clientservice",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
clientid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
serviceid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
starttime = table.Column<DateTime>(type: "timestamp(6) without time zone", nullable: false),
|
||||||
|
comment = table.Column<string>(type: "text", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("clientservice_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_clientservice_client",
|
||||||
|
column: x => x.clientid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "client",
|
||||||
|
principalColumn: "id");
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_clientservice_service",
|
||||||
|
column: x => x.serviceid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "service",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "tagofclient",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
clientid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
tagid = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("tagofclient_pkey", x => new { x.clientid, x.tagid });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_tagofclient_client",
|
||||||
|
column: x => x.clientid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "client",
|
||||||
|
principalColumn: "id");
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "tagofclient_tag_fk",
|
||||||
|
column: x => x.tagid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "tag",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "attachedproduct",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
mainproductid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
attachedproductid = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("attachedproduct_pkey", x => new { x.mainproductid, x.attachedproductid });
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_attachedproduct_product",
|
||||||
|
column: x => x.mainproductid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "product",
|
||||||
|
principalColumn: "id");
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_attachedproduct_product1",
|
||||||
|
column: x => x.attachedproductid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "product",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "productphoto",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
productid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
photopath = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("productphoto_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_productphoto_product",
|
||||||
|
column: x => x.productid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "product",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "documentbyservice",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
clientserviceid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
documentpath = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("documentbyservice_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_documentbyservice_clientservice",
|
||||||
|
column: x => x.clientserviceid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "clientservice",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "productsale",
|
||||||
|
schema: "task16-09",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
id = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
saledate = table.Column<DateTime>(type: "timestamp(6) without time zone", nullable: false),
|
||||||
|
productid = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
quantity = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
clientserviceid = table.Column<int>(type: "integer", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("productsale_pkey", x => x.id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_productsale_clientservice",
|
||||||
|
column: x => x.clientserviceid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "clientservice",
|
||||||
|
principalColumn: "id");
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "fk_productsale_product",
|
||||||
|
column: x => x.productid,
|
||||||
|
principalSchema: "task16-09",
|
||||||
|
principalTable: "product",
|
||||||
|
principalColumn: "id");
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_attachedproduct_attachedproductid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "attachedproduct",
|
||||||
|
column: "attachedproductid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_client_gendercode",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "client",
|
||||||
|
column: "gendercode");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_clientservice_clientid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "clientservice",
|
||||||
|
column: "clientid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_clientservice_serviceid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "clientservice",
|
||||||
|
column: "serviceid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_documentbyservice_clientserviceid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "documentbyservice",
|
||||||
|
column: "clientserviceid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_product_manufacturerid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "product",
|
||||||
|
column: "manufacturerid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_productphoto_productid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "productphoto",
|
||||||
|
column: "productid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_productsale_clientserviceid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "productsale",
|
||||||
|
column: "clientserviceid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_productsale_productid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "productsale",
|
||||||
|
column: "productid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_servicephoto_serviceid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "servicephoto",
|
||||||
|
column: "serviceid");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_tagofclient_tagid",
|
||||||
|
schema: "task16-09",
|
||||||
|
table: "tagofclient",
|
||||||
|
column: "tagid");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "attachedproduct",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "documentbyservice",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "productphoto",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "productsale",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "servicephoto",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "tagofclient",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "clientservice",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "product",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "tag",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "client",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "service",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "manufacturer",
|
||||||
|
schema: "task16-09");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "gender",
|
||||||
|
schema: "task16-09");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
590
Demo2/Migrations/IsajkinContextModelSnapshot.cs
Normal file
@ -0,0 +1,590 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Demo2.Context;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace Demo2.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(Context.Context))]
|
||||||
|
partial class IsajkinContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "7.0.20")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("Attachedproduct", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Mainproductid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("mainproductid");
|
||||||
|
|
||||||
|
b.Property<int>("Attachedproductid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("attachedproductid");
|
||||||
|
|
||||||
|
b.HasKey("Mainproductid", "Attachedproductid")
|
||||||
|
.HasName("attachedproduct_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Attachedproductid");
|
||||||
|
|
||||||
|
b.ToTable("attachedproduct", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Client", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateOnly?>("Birthday")
|
||||||
|
.HasColumnType("date")
|
||||||
|
.HasColumnName("birthday");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.HasMaxLength(255)
|
||||||
|
.HasColumnType("character varying(255)")
|
||||||
|
.HasColumnName("email");
|
||||||
|
|
||||||
|
b.Property<string>("Firstname")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("character varying(50)")
|
||||||
|
.HasColumnName("firstname");
|
||||||
|
|
||||||
|
b.Property<char>("Gendercode")
|
||||||
|
.HasMaxLength(1)
|
||||||
|
.HasColumnType("character(1)")
|
||||||
|
.HasColumnName("gendercode");
|
||||||
|
|
||||||
|
b.Property<string>("Lastname")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("character varying(50)")
|
||||||
|
.HasColumnName("lastname");
|
||||||
|
|
||||||
|
b.Property<string>("Patronymic")
|
||||||
|
.HasMaxLength(50)
|
||||||
|
.HasColumnType("character varying(50)")
|
||||||
|
.HasColumnName("patronymic");
|
||||||
|
|
||||||
|
b.Property<string>("Phone")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(20)
|
||||||
|
.HasColumnType("character varying(20)")
|
||||||
|
.HasColumnName("phone");
|
||||||
|
|
||||||
|
b.Property<string>("Photopath")
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("photopath");
|
||||||
|
|
||||||
|
b.Property<DateTime>("Registrationdate")
|
||||||
|
.HasColumnType("timestamp(6) without time zone")
|
||||||
|
.HasColumnName("registrationdate");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("client_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Gendercode");
|
||||||
|
|
||||||
|
b.ToTable("client", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Clientservice", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("Clientid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientid");
|
||||||
|
|
||||||
|
b.Property<string>("Comment")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("comment");
|
||||||
|
|
||||||
|
b.Property<int>("Serviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("serviceid");
|
||||||
|
|
||||||
|
b.Property<DateTime>("Starttime")
|
||||||
|
.HasColumnType("timestamp(6) without time zone")
|
||||||
|
.HasColumnName("starttime");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("clientservice_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Clientid");
|
||||||
|
|
||||||
|
b.HasIndex("Serviceid");
|
||||||
|
|
||||||
|
b.ToTable("clientservice", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Documentbyservice", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("Clientserviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientserviceid");
|
||||||
|
|
||||||
|
b.Property<string>("Documentpath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("documentpath");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("documentbyservice_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Clientserviceid");
|
||||||
|
|
||||||
|
b.ToTable("documentbyservice", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Gender", b =>
|
||||||
|
{
|
||||||
|
b.Property<char>("Code")
|
||||||
|
.HasMaxLength(1)
|
||||||
|
.HasColumnType("character(1)")
|
||||||
|
.HasColumnName("code");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasMaxLength(10)
|
||||||
|
.HasColumnType("character varying(10)")
|
||||||
|
.HasColumnName("name");
|
||||||
|
|
||||||
|
b.HasKey("Code")
|
||||||
|
.HasName("gender_pkey");
|
||||||
|
|
||||||
|
b.ToTable("gender", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Manufacturer", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("character varying(100)")
|
||||||
|
.HasColumnName("name");
|
||||||
|
|
||||||
|
b.Property<DateOnly?>("Startdate")
|
||||||
|
.HasColumnType("date")
|
||||||
|
.HasColumnName("startdate");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("manufacturer_pkey");
|
||||||
|
|
||||||
|
b.ToTable("manufacturer", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Product", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<decimal>("Cost")
|
||||||
|
.HasPrecision(19, 4)
|
||||||
|
.HasColumnType("numeric(19,4)")
|
||||||
|
.HasColumnName("cost");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("description");
|
||||||
|
|
||||||
|
b.Property<int>("Isactive")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("isactive");
|
||||||
|
|
||||||
|
b.Property<string>("Mainimagepath")
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("mainimagepath");
|
||||||
|
|
||||||
|
b.Property<int?>("Manufacturerid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("manufacturerid");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("character varying(100)")
|
||||||
|
.HasColumnName("title");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("product_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Manufacturerid");
|
||||||
|
|
||||||
|
b.ToTable("product", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productphoto", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Photopath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("photopath");
|
||||||
|
|
||||||
|
b.Property<int>("Productid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("productid");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("productphoto_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Productid");
|
||||||
|
|
||||||
|
b.ToTable("productphoto", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productsale", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int?>("Clientserviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientserviceid");
|
||||||
|
|
||||||
|
b.Property<int>("Productid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("productid");
|
||||||
|
|
||||||
|
b.Property<int>("Quantity")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("quantity");
|
||||||
|
|
||||||
|
b.Property<DateTime>("Saledate")
|
||||||
|
.HasColumnType("timestamp(6) without time zone")
|
||||||
|
.HasColumnName("saledate");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("productsale_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Clientserviceid");
|
||||||
|
|
||||||
|
b.HasIndex("Productid");
|
||||||
|
|
||||||
|
b.ToTable("productsale", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Service", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<decimal>("Cost")
|
||||||
|
.HasPrecision(19, 4)
|
||||||
|
.HasColumnType("numeric(19,4)")
|
||||||
|
.HasColumnName("cost");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.HasColumnType("text")
|
||||||
|
.HasColumnName("description");
|
||||||
|
|
||||||
|
b.Property<double?>("Discount")
|
||||||
|
.HasColumnType("double precision")
|
||||||
|
.HasColumnName("discount");
|
||||||
|
|
||||||
|
b.Property<int>("Durationinseconds")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("durationinseconds");
|
||||||
|
|
||||||
|
b.Property<string>("Mainimagepath")
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("mainimagepath");
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100)
|
||||||
|
.HasColumnType("character varying(100)")
|
||||||
|
.HasColumnName("title");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("service_pkey");
|
||||||
|
|
||||||
|
b.ToTable("service", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Servicephoto", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Photopath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(1000)
|
||||||
|
.HasColumnType("character varying(1000)")
|
||||||
|
.HasColumnName("photopath");
|
||||||
|
|
||||||
|
b.Property<int>("Serviceid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("serviceid");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("servicephoto_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Serviceid");
|
||||||
|
|
||||||
|
b.ToTable("servicephoto", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Tag", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
b.Property<string>("Color")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(8)
|
||||||
|
.HasColumnType("character(8)")
|
||||||
|
.HasColumnName("color")
|
||||||
|
.IsFixedLength();
|
||||||
|
|
||||||
|
b.Property<string>("Title")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(30)
|
||||||
|
.HasColumnType("character varying(30)")
|
||||||
|
.HasColumnName("title");
|
||||||
|
|
||||||
|
b.HasKey("Id")
|
||||||
|
.HasName("tag_pkey");
|
||||||
|
|
||||||
|
b.ToTable("tag", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Tagofclient", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Clientid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("clientid");
|
||||||
|
|
||||||
|
b.Property<int>("Tagid")
|
||||||
|
.HasColumnType("integer")
|
||||||
|
.HasColumnName("tagid");
|
||||||
|
|
||||||
|
b.HasKey("Clientid", "Tagid")
|
||||||
|
.HasName("tagofclient_pkey");
|
||||||
|
|
||||||
|
b.HasIndex("Tagid");
|
||||||
|
|
||||||
|
b.ToTable("tagofclient", "task16-09");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Attachedproduct", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Product", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Attachedproductid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_attachedproduct_product1");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Product", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Mainproductid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_attachedproduct_product");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Client", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Gender", "GendercodeNavigation")
|
||||||
|
.WithMany("Clients")
|
||||||
|
.HasForeignKey("Gendercode")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_client_gender");
|
||||||
|
|
||||||
|
b.Navigation("GendercodeNavigation");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Clientservice", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Client", "Client")
|
||||||
|
.WithMany("Clientservices")
|
||||||
|
.HasForeignKey("Clientid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_clientservice_client");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Service", "Service")
|
||||||
|
.WithMany("Clientservices")
|
||||||
|
.HasForeignKey("Serviceid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_clientservice_service");
|
||||||
|
|
||||||
|
b.Navigation("Client");
|
||||||
|
|
||||||
|
b.Navigation("Service");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Documentbyservice", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Clientservice", "Clientservice")
|
||||||
|
.WithMany("Documentbyservices")
|
||||||
|
.HasForeignKey("Clientserviceid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_documentbyservice_clientservice");
|
||||||
|
|
||||||
|
b.Navigation("Clientservice");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Product", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Manufacturer", "Manufacturer")
|
||||||
|
.WithMany("Products")
|
||||||
|
.HasForeignKey("Manufacturerid")
|
||||||
|
.HasConstraintName("fk_product_manufacturer");
|
||||||
|
|
||||||
|
b.Navigation("Manufacturer");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productphoto", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Product", "Product")
|
||||||
|
.WithMany("Productphotos")
|
||||||
|
.HasForeignKey("Productid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_productphoto_product");
|
||||||
|
|
||||||
|
b.Navigation("Product");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Productsale", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Clientservice", "Clientservice")
|
||||||
|
.WithMany("Productsales")
|
||||||
|
.HasForeignKey("Clientserviceid")
|
||||||
|
.HasConstraintName("fk_productsale_clientservice");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Product", "Product")
|
||||||
|
.WithMany("Productsales")
|
||||||
|
.HasForeignKey("Productid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_productsale_product");
|
||||||
|
|
||||||
|
b.Navigation("Clientservice");
|
||||||
|
|
||||||
|
b.Navigation("Product");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Servicephoto", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Service", "Service")
|
||||||
|
.WithMany("Servicephotos")
|
||||||
|
.HasForeignKey("Serviceid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_servicephoto_service");
|
||||||
|
|
||||||
|
b.Navigation("Service");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Tagofclient", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Demo2.Models.Client", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Clientid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("fk_tagofclient_client");
|
||||||
|
|
||||||
|
b.HasOne("Demo2.Models.Tag", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("Tagid")
|
||||||
|
.IsRequired()
|
||||||
|
.HasConstraintName("tagofclient_tag_fk");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Client", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Clientservices");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Clientservice", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Documentbyservices");
|
||||||
|
|
||||||
|
b.Navigation("Productsales");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Gender", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Clients");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Manufacturer", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Products");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Product", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Productphotos");
|
||||||
|
|
||||||
|
b.Navigation("Productsales");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Demo2.Models.Service", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Clientservices");
|
||||||
|
|
||||||
|
b.Navigation("Servicephotos");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
70
Demo2/Models/Client.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using Avalonia.Media.Imaging;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
namespace Demo2.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 => PublicActions.PublicContext.Genders.ToList().FirstOrDefault(g => g.Code == Gendercode).Name; }
|
||||||
|
|
||||||
|
public string? Photopath { get; set; }
|
||||||
|
|
||||||
|
public Bitmap Image
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new Bitmap($"{Environment.CurrentDirectory}\\{Photopath}");
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return new Bitmap($"{Environment.CurrentDirectory}\\ClientsPhotos\\stock_photo.png");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Amount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return PublicActions.PublicContext.Clientservices.Where(sc => sc.Clientid == Id).Count();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string LastService
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (PublicActions.PublicContext.Clientservices.Where(sc => sc.Clientid == Id).Count() != 0)
|
||||||
|
return PublicActions.PublicContext.Clientservices.Where(sc => sc.Clientid == Id).Select(d => d.Starttime).Max().ToString();
|
||||||
|
else
|
||||||
|
return "Нет";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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>();
|
||||||
|
}
|
25
Demo2/Models/Clientservice.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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!;
|
||||||
|
}
|
15
Demo2/Models/Documentbyservice.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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
Demo2/Models/Gender.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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>();
|
||||||
|
}
|
15
Demo2/Models/Manufacturer.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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
Demo2/Models/Product.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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>();
|
||||||
|
}
|
15
Demo2/Models/Productphoto.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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!;
|
||||||
|
}
|
21
Demo2/Models/Productsale.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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
Demo2/Models/Service.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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>();
|
||||||
|
}
|
15
Demo2/Models/Servicephoto.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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
Demo2/Models/Tag.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Demo2.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
Demo2/Program.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Demo2
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
57
Demo2/PublicActions.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
using Demo2.Context;
|
||||||
|
using Demo2.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using SkiaSharp;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Numerics;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Demo2
|
||||||
|
{
|
||||||
|
public static class PublicActions
|
||||||
|
{
|
||||||
|
public static Context.Context PublicContext = new Context.Context();
|
||||||
|
public static List<Client> Clients = PublicContext.Clients.Include(x=>x.Tags).ToList();
|
||||||
|
public static List<String> Genders = new List<string>() { "Все типы" }.Concat(PublicContext.Genders.ToList().Select(g => g.Name).ToList()).ToList();
|
||||||
|
public static string ShowmClientAmount = $"{Clients.Count}/{PublicContext.Clients.ToList().Count()}";
|
||||||
|
public static void ClientsActions(int s, int f, string srch)
|
||||||
|
{
|
||||||
|
Clients.Clear();
|
||||||
|
Clients = PublicContext.Clients.Include(x => x.Tags).ToList();
|
||||||
|
|
||||||
|
switch (s)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Clients = Clients.OrderBy(c => c.Id).ToList();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
Clients = Clients.OrderBy(c => c.Lastname).ToList();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
Clients = Clients.OrderByDescending(c => c.Amount).ToList();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
Clients = Clients.Where(s => s.LastService != "Нет").OrderByDescending(c => DateTime.Parse(c.LastService)).ToList().Concat(Clients.Where(s => s.LastService == "Нет")).ToList();
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (f != 0)
|
||||||
|
{
|
||||||
|
Clients = Clients.Where(c => c.Gendercode == PublicContext.Genders.ToList().FirstOrDefault(g => g.Name == Genders[f]).Code).ToList();
|
||||||
|
}
|
||||||
|
List<string> words = srch.Split(' ').ToList();
|
||||||
|
foreach (string word in words)
|
||||||
|
{
|
||||||
|
Clients = Clients.Where(c => c.Firstname.ToLower().Contains(word.ToLower()) || c.Lastname.ToLower().Contains(word.ToLower()) || c.Patronymic.ToLower().Contains(word.ToLower()) ||
|
||||||
|
c.Phone.ToLower().Contains(word.ToLower()) || c.Email.ToLower().Contains(word.ToLower())).ToList();
|
||||||
|
}
|
||||||
|
ShowmClientAmount = $"{Clients.Count}/{PublicContext.Clients.ToList().Count()}";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
18
Demo2/app.manifest
Normal 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="Demo2.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>
|
BIN
Demo2/bin/Debug/net8.0/Avalonia.Base.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Controls.DataGrid.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Controls.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.DesignerSupport.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Desktop.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Diagnostics.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Dialogs.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Fonts.Inter.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.FreeDesktop.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Markup.Xaml.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Markup.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Metal.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.MicroCom.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Native.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.OpenGL.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Remote.Protocol.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Skia.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Themes.Fluent.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Themes.Simple.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.Win32.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.X11.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/Avalonia.dll
Normal file
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/1.jpg
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/10.jpg
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/11.jpg
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/12.jpg
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/13.jpg
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/14.jpg
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/15.jpg
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/16.jpg
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/17.jpg
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/18.jpg
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/19.jpg
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/2.jpg
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/20.jpg
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/21.jpg
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/22.jpg
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/23.jpg
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/24.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/25.jpg
Normal file
After Width: | Height: | Size: 6.6 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/26.jpg
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/27.jpg
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/28.jpg
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/29.jpg
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/3.jpg
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/30.jpg
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/31.jpg
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/32.jpg
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/33.jpg
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/34.jpg
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/35.jpg
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/36.jpg
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/37.jpg
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/38.jpg
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
Demo2/bin/Debug/net8.0/ClientsPhotos/39.jpg
Normal file
After Width: | Height: | Size: 5.4 KiB |