ApiLogicServer 15.0.37__py3-none-any.whl → 15.0.40__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- api_logic_server_cli/api_logic_server.py +2 -2
- api_logic_server_cli/api_logic_server_info.yaml +2 -2
- api_logic_server_cli/genai/genai_svcs.py +4 -3
- api_logic_server_cli/prototypes/base/.copilot-instructions.md +10 -0
- api_logic_server_cli/prototypes/base/.vscode/.copilot-instructions.md +178 -0
- api_logic_server_cli/prototypes/base/README_PROJECT.md +43 -0
- api_logic_server_cli/prototypes/base/api_logic_server_run.py +20 -8
- api_logic_server_cli/prototypes/base/docs/training/react_map.prompt.md +13 -0
- api_logic_server_cli/prototypes/base/docs/training/react_tree.prompt.md +10 -0
- api_logic_server_cli/prototypes/base/integration/mcp/readme-mcp.md +9 -0
- api_logic_server_cli/prototypes/base/logic/logic_discovery/readme_logic_discovery.md +9 -0
- api_logic_server_cli/prototypes/base/logic/logic_discovery/use_case.py +27 -0
- api_logic_server_cli/prototypes/base/logic/{readme_declare_logic.md → readme_logic.md} +70 -1
- api_logic_server_cli/prototypes/base/readme.md +30 -5
- api_logic_server_cli/prototypes/base/security/readme_security.md +17 -0
- api_logic_server_cli/prototypes/manager/.copilot-instructions.md +13 -0
- api_logic_server_cli/prototypes/manager/.vscode/.copilot-instructions.md +58 -0
- api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace +2 -2
- api_logic_server_cli/prototypes/manager/README.md +13 -1
- api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -3
- api_logic_server_cli/prototypes/nw/api/api_discovery/authentication_expose_api_models.py +53 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/auto_discovery.py +27 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/count_orders_by_month.html +76 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/count_orders_by_month.sql +1 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/dashboard_services.py +143 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/mcp_discovery.py +97 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/new_service.py +21 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/newer_service.py +21 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/number_of_sales_per_category.html +76 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/number_of_sales_per_category.sql +1 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/ontimize_api.py +495 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/sales_by_category.html +76 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/sales_by_category.sql +1 -0
- api_logic_server_cli/prototypes/nw/api/api_discovery/system.py +77 -0
- api_logic_server_cli/prototypes/nw/database/database_discovery/graphics_services.py +173 -0
- api_logic_server_cli/prototypes/nw/ui/admin/home.js +5 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/DEPARTMENT_TREE_VIEW.md +66 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/README.md +21 -4
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/package.json +4 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/public/index.html +3 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/App.js +8 -1
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/CustomLayout.js +20 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Department.js +511 -24
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/DepartmentTree.js +147 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Employee.js +230 -18
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/LandingPage.js +264 -0
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/Supplier.js +359 -121
- api_logic_server_cli/prototypes/nw/ui/reference_react_app/src/index.js +1 -0
- {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.40.dist-info}/METADATA +1 -1
- {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.40.dist-info}/RECORD +54 -25
- api_logic_server_cli/prototypes/base/docs/training/admin_app_unused.md +0 -156
- {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.40.dist-info}/WHEEL +0 -0
- {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.40.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.40.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.0.37.dist-info → apilogicserver-15.0.40.dist-info}/top_level.txt +0 -0
|
@@ -1,143 +1,381 @@
|
|
|
1
1
|
// begin MANDATORY imports (always generated EXACTLY)
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { List,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
2
|
+
import React, { useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { List, Datagrid, TextField } from 'react-admin';
|
|
4
|
+
import { SimpleShowLayout, TextInput, SimpleForm, Show, Edit, Create } from 'react-admin';
|
|
5
|
+
import { Filter, Pagination, Labeled } from 'react-admin';
|
|
6
|
+
import { EditButton, DeleteButton, ShowButton } from 'react-admin';
|
|
7
|
+
import { Grid, Typography, Box, Divider, Button, ToggleButton, ToggleButtonGroup, Paper, Card, CardContent } from '@mui/material';
|
|
8
|
+
import { useListContext } from 'react-admin';
|
|
9
|
+
import { Link, useNavigate } from 'react-router-dom';
|
|
10
|
+
import ViewListIcon from '@mui/icons-material/ViewList';
|
|
11
|
+
import MapIcon from '@mui/icons-material/Map';
|
|
12
|
+
import LocationOnIcon from '@mui/icons-material/LocationOn';
|
|
13
|
+
import BusinessIcon from '@mui/icons-material/Business';
|
|
14
|
+
import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet';
|
|
15
|
+
import L from 'leaflet';
|
|
12
16
|
// end mandatory imports
|
|
13
17
|
|
|
18
|
+
// Fix for default markers in react-leaflet
|
|
19
|
+
delete L.Icon.Default.prototype._getIconUrl;
|
|
20
|
+
L.Icon.Default.mergeOptions({
|
|
21
|
+
iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png',
|
|
22
|
+
iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png',
|
|
23
|
+
shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// Custom red marker icon for suppliers
|
|
27
|
+
const supplierIcon = new L.Icon({
|
|
28
|
+
iconUrl: 'https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-red.png',
|
|
29
|
+
shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',
|
|
30
|
+
iconSize: [25, 41],
|
|
31
|
+
iconAnchor: [12, 41],
|
|
32
|
+
popupAnchor: [1, -34],
|
|
33
|
+
shadowSize: [41, 41]
|
|
34
|
+
});
|
|
35
|
+
|
|
14
36
|
const SupplierFilter = (props) => (
|
|
15
37
|
<Filter {...props}>
|
|
16
38
|
<TextInput label="Search by Company Name" source="CompanyName" alwaysOn />
|
|
17
39
|
</Filter>
|
|
18
40
|
);
|
|
19
41
|
|
|
20
|
-
//
|
|
21
|
-
|
|
42
|
+
// Professional World Map using Leaflet.js with real geography
|
|
43
|
+
const SupplierMapView = () => {
|
|
44
|
+
const { data: suppliers = [] } = useListContext();
|
|
45
|
+
const navigate = useNavigate();
|
|
46
|
+
|
|
47
|
+
// Country coordinates for mapping
|
|
48
|
+
const countryCoordinates = {
|
|
49
|
+
'USA': [39.8283, -98.5795],
|
|
50
|
+
'Canada': [56.1304, -106.3468],
|
|
51
|
+
'Mexico': [23.6345, -102.5528],
|
|
52
|
+
'UK': [55.3781, -3.4360],
|
|
53
|
+
'Germany': [51.1657, 10.4515],
|
|
54
|
+
'France': [46.2276, 2.2137],
|
|
55
|
+
'Italy': [41.8719, 12.5674],
|
|
56
|
+
'Spain': [40.4637, -3.7492],
|
|
57
|
+
'Netherlands': [52.1326, 5.2913],
|
|
58
|
+
'Norway': [60.4720, 8.4689],
|
|
59
|
+
'Sweden': [60.1282, 18.6435],
|
|
60
|
+
'Denmark': [56.2639, 9.5018],
|
|
61
|
+
'Finland': [61.9241, 25.7482],
|
|
62
|
+
'Australia': [-25.2744, 133.7751],
|
|
63
|
+
'Japan': [36.2048, 138.2529],
|
|
64
|
+
'Brazil': [-14.2350, -51.9253],
|
|
65
|
+
'Singapore': [1.3521, 103.8198],
|
|
66
|
+
'Argentina': [-38.4161, -63.6167],
|
|
67
|
+
'China': [35.8617, 104.1954],
|
|
68
|
+
'India': [20.5937, 78.9629],
|
|
69
|
+
'Unknown': [0, 0]
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Get coordinates for a supplier based on country
|
|
73
|
+
const getSupplierCoordinates = (supplier) => {
|
|
74
|
+
const baseCoords = countryCoordinates[supplier.Country] || countryCoordinates['Unknown'];
|
|
75
|
+
// Add small random offset to avoid overlapping markers
|
|
76
|
+
const latOffset = (Math.random() - 0.5) * 2; // ±1 degree
|
|
77
|
+
const lngOffset = (Math.random() - 0.5) * 2; // ±1 degree
|
|
78
|
+
return [baseCoords[0] + latOffset, baseCoords[1] + lngOffset];
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const handleSupplierClick = (supplier) => {
|
|
82
|
+
navigate(`/Supplier/${supplier.Id}/show`);
|
|
83
|
+
};
|
|
84
|
+
|
|
22
85
|
return (
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
86
|
+
<div style={{ width: '100%', height: '700px', position: 'relative' }}>
|
|
87
|
+
<MapContainer
|
|
88
|
+
center={[20, 0]}
|
|
89
|
+
zoom={2}
|
|
90
|
+
style={{ height: '100%', width: '100%' }}
|
|
91
|
+
scrollWheelZoom={true}
|
|
92
|
+
>
|
|
93
|
+
<TileLayer
|
|
94
|
+
attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
|
95
|
+
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
|
|
96
|
+
/>
|
|
97
|
+
|
|
98
|
+
{suppliers.map((supplier) => {
|
|
99
|
+
const coordinates = getSupplierCoordinates(supplier);
|
|
100
|
+
return (
|
|
101
|
+
<Marker
|
|
102
|
+
key={supplier.Id}
|
|
103
|
+
position={coordinates}
|
|
104
|
+
icon={supplierIcon}
|
|
105
|
+
eventHandlers={{
|
|
106
|
+
click: () => handleSupplierClick(supplier)
|
|
107
|
+
}}
|
|
108
|
+
>
|
|
109
|
+
<Popup>
|
|
110
|
+
<div style={{ textAlign: 'center' }}>
|
|
111
|
+
<strong>{supplier.CompanyName}</strong><br/>
|
|
112
|
+
{supplier.City}, {supplier.Country}<br/>
|
|
113
|
+
<small>Contact: {supplier.ContactName}</small><br/>
|
|
114
|
+
<button
|
|
115
|
+
onClick={() => handleSupplierClick(supplier)}
|
|
116
|
+
style={{
|
|
117
|
+
marginTop: '8px',
|
|
118
|
+
padding: '4px 8px',
|
|
119
|
+
backgroundColor: '#4f46e5',
|
|
120
|
+
color: 'white',
|
|
121
|
+
border: 'none',
|
|
122
|
+
borderRadius: '4px',
|
|
123
|
+
cursor: 'pointer'
|
|
124
|
+
}}
|
|
125
|
+
>
|
|
126
|
+
View Details
|
|
127
|
+
</button>
|
|
128
|
+
</div>
|
|
129
|
+
</Popup>
|
|
130
|
+
</Marker>
|
|
131
|
+
);
|
|
132
|
+
})}
|
|
133
|
+
</MapContainer>
|
|
134
|
+
|
|
135
|
+
{/* Map Info Panel */}
|
|
136
|
+
<div style={{
|
|
137
|
+
position: 'absolute',
|
|
138
|
+
top: '15px',
|
|
139
|
+
left: '15px',
|
|
140
|
+
backgroundColor: 'rgba(255, 255, 255, 0.95)',
|
|
141
|
+
padding: '16px',
|
|
142
|
+
borderRadius: '8px',
|
|
143
|
+
border: '1px solid #d1d5db',
|
|
144
|
+
boxShadow: '0 4px 12px rgba(0,0,0,0.3)',
|
|
145
|
+
zIndex: 1000,
|
|
146
|
+
minWidth: '250px'
|
|
147
|
+
}}>
|
|
148
|
+
<div style={{ marginBottom: '12px', fontWeight: 'bold', fontSize: '15px', color: '#1f2937' }}>
|
|
149
|
+
🌍 Global Supplier Map
|
|
150
|
+
</div>
|
|
151
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: '10px', marginBottom: '10px' }}>
|
|
152
|
+
<div style={{
|
|
153
|
+
width: '20px',
|
|
154
|
+
height: '30px',
|
|
155
|
+
background: 'url("https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-red.png") no-repeat center',
|
|
156
|
+
backgroundSize: 'contain'
|
|
157
|
+
}}></div>
|
|
158
|
+
<span style={{ fontSize: '14px', color: '#374151' }}>Suppliers ({suppliers.length} total)</span>
|
|
159
|
+
</div>
|
|
160
|
+
<div style={{ fontSize: '12px', color: '#6b7280', lineHeight: '1.4' }}>
|
|
161
|
+
• Click red markers to view supplier details<br/>
|
|
162
|
+
• Drag map to explore different regions<br/>
|
|
163
|
+
• Use mouse wheel or zoom controls to zoom<br/>
|
|
164
|
+
• Real world geography with accurate positioning
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
38
168
|
);
|
|
39
169
|
};
|
|
40
170
|
|
|
41
|
-
|
|
42
|
-
|
|
171
|
+
export const SupplierList = (props) => {
|
|
172
|
+
const [view, setView] = useState('list');
|
|
173
|
+
|
|
174
|
+
const handleViewChange = (event, newView) => {
|
|
175
|
+
if (newView !== null) {
|
|
176
|
+
setView(newView);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
43
180
|
return (
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
181
|
+
<div>
|
|
182
|
+
{/* View Toggle */}
|
|
183
|
+
<Box sx={{ mb: 2, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
|
184
|
+
<Typography variant="h4" component="h1">
|
|
185
|
+
Suppliers
|
|
48
186
|
</Typography>
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
</
|
|
60
|
-
<
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
187
|
+
<ToggleButtonGroup
|
|
188
|
+
value={view}
|
|
189
|
+
exclusive
|
|
190
|
+
onChange={handleViewChange}
|
|
191
|
+
aria-label="view mode"
|
|
192
|
+
size="small"
|
|
193
|
+
>
|
|
194
|
+
<ToggleButton value="list" aria-label="list view">
|
|
195
|
+
<ViewListIcon sx={{ mr: 1 }} />
|
|
196
|
+
List
|
|
197
|
+
</ToggleButton>
|
|
198
|
+
<ToggleButton value="map" aria-label="map view">
|
|
199
|
+
<MapIcon sx={{ mr: 1 }} />
|
|
200
|
+
Map
|
|
201
|
+
</ToggleButton>
|
|
202
|
+
</ToggleButtonGroup>
|
|
203
|
+
</Box>
|
|
204
|
+
|
|
205
|
+
{view === 'list' ? (
|
|
206
|
+
<List {...props} filters={<SupplierFilter />} pagination={<Pagination />}>
|
|
207
|
+
<Datagrid>
|
|
208
|
+
<TextField source="Id" />
|
|
209
|
+
<TextField source="CompanyName" />
|
|
210
|
+
<TextField source="ContactName" />
|
|
211
|
+
<TextField source="ContactTitle" />
|
|
212
|
+
<TextField source="Address" />
|
|
213
|
+
<TextField source="City" />
|
|
214
|
+
<TextField source="Region" />
|
|
215
|
+
<TextField source="PostalCode" />
|
|
216
|
+
<TextField source="Country" />
|
|
217
|
+
<TextField source="Phone" />
|
|
218
|
+
<TextField source="Fax" />
|
|
219
|
+
<TextField source="HomePage" />
|
|
220
|
+
<ShowButton />
|
|
221
|
+
<EditButton />
|
|
222
|
+
</Datagrid>
|
|
223
|
+
</List>
|
|
224
|
+
) : (
|
|
225
|
+
<List {...props} filters={<SupplierFilter />} pagination={false}>
|
|
226
|
+
<SupplierMapView />
|
|
227
|
+
</List>
|
|
228
|
+
)}
|
|
229
|
+
</div>
|
|
69
230
|
);
|
|
70
231
|
};
|
|
71
232
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
233
|
+
export const SupplierShow = (props) => (
|
|
234
|
+
<Show {...props}>
|
|
235
|
+
<SimpleShowLayout>
|
|
236
|
+
<Grid container spacing={2}>
|
|
237
|
+
<Grid item xs={12} md={6}>
|
|
238
|
+
<Paper sx={{ p: 2, mb: 2 }}>
|
|
239
|
+
<Typography variant="h6" gutterBottom>
|
|
240
|
+
<BusinessIcon sx={{ mr: 1, verticalAlign: 'middle' }} />
|
|
241
|
+
Company Information
|
|
242
|
+
</Typography>
|
|
243
|
+
<Divider sx={{ mb: 2 }} />
|
|
244
|
+
<Grid container spacing={2}>
|
|
245
|
+
<Grid item xs={12}>
|
|
246
|
+
<Labeled>
|
|
247
|
+
<TextField source="CompanyName" />
|
|
248
|
+
</Labeled>
|
|
249
|
+
</Grid>
|
|
250
|
+
<Grid item xs={12} sm={6}>
|
|
251
|
+
<Labeled>
|
|
252
|
+
<TextField source="ContactName" />
|
|
253
|
+
</Labeled>
|
|
254
|
+
</Grid>
|
|
255
|
+
<Grid item xs={12} sm={6}>
|
|
256
|
+
<Labeled>
|
|
257
|
+
<TextField source="ContactTitle" />
|
|
258
|
+
</Labeled>
|
|
259
|
+
</Grid>
|
|
260
|
+
</Grid>
|
|
261
|
+
</Paper>
|
|
99
262
|
</Grid>
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
263
|
+
|
|
264
|
+
<Grid item xs={12} md={6}>
|
|
265
|
+
<Paper sx={{ p: 2, mb: 2 }}>
|
|
266
|
+
<Typography variant="h6" gutterBottom>
|
|
267
|
+
<LocationOnIcon sx={{ mr: 1, verticalAlign: 'middle' }} />
|
|
268
|
+
Address Information
|
|
269
|
+
</Typography>
|
|
270
|
+
<Divider sx={{ mb: 2 }} />
|
|
271
|
+
<Grid container spacing={2}>
|
|
272
|
+
<Grid item xs={12}>
|
|
273
|
+
<Labeled>
|
|
274
|
+
<TextField source="Address" />
|
|
275
|
+
</Labeled>
|
|
276
|
+
</Grid>
|
|
277
|
+
<Grid item xs={12} sm={6}>
|
|
278
|
+
<Labeled>
|
|
279
|
+
<TextField source="City" />
|
|
280
|
+
</Labeled>
|
|
281
|
+
</Grid>
|
|
282
|
+
<Grid item xs={12} sm={6}>
|
|
283
|
+
<Labeled>
|
|
284
|
+
<TextField source="Region" />
|
|
285
|
+
</Labeled>
|
|
286
|
+
</Grid>
|
|
287
|
+
<Grid item xs={12} sm={6}>
|
|
288
|
+
<Labeled>
|
|
289
|
+
<TextField source="PostalCode" />
|
|
290
|
+
</Labeled>
|
|
291
|
+
</Grid>
|
|
292
|
+
<Grid item xs={12} sm={6}>
|
|
293
|
+
<Labeled>
|
|
294
|
+
<TextField source="Country" />
|
|
295
|
+
</Labeled>
|
|
296
|
+
</Grid>
|
|
297
|
+
</Grid>
|
|
298
|
+
</Paper>
|
|
299
|
+
</Grid>
|
|
300
|
+
|
|
301
|
+
<Grid item xs={12}>
|
|
302
|
+
<Paper sx={{ p: 2 }}>
|
|
303
|
+
<Typography variant="h6" gutterBottom>
|
|
304
|
+
Contact Information
|
|
305
|
+
</Typography>
|
|
306
|
+
<Divider sx={{ mb: 2 }} />
|
|
307
|
+
<Grid container spacing={2}>
|
|
308
|
+
<Grid item xs={12} sm={4}>
|
|
309
|
+
<Labeled>
|
|
310
|
+
<TextField source="Phone" />
|
|
311
|
+
</Labeled>
|
|
312
|
+
</Grid>
|
|
313
|
+
<Grid item xs={12} sm={4}>
|
|
314
|
+
<Labeled>
|
|
315
|
+
<TextField source="Fax" />
|
|
316
|
+
</Labeled>
|
|
317
|
+
</Grid>
|
|
318
|
+
<Grid item xs={12} sm={4}>
|
|
319
|
+
<Labeled>
|
|
320
|
+
<TextField source="HomePage" />
|
|
321
|
+
</Labeled>
|
|
322
|
+
</Grid>
|
|
323
|
+
</Grid>
|
|
324
|
+
</Paper>
|
|
325
|
+
</Grid>
|
|
326
|
+
</Grid>
|
|
327
|
+
</SimpleShowLayout>
|
|
328
|
+
</Show>
|
|
329
|
+
);
|
|
104
330
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
<Grid container spacing={3} sx={{ mb: 2 }}>
|
|
114
|
-
<Grid item xs={12} sm={6} md={4}>
|
|
115
|
-
<TextInput source="CompanyName" label="Company Name" fullWidth />
|
|
116
|
-
</Grid>
|
|
117
|
-
<Grid item xs={12} sm={6} md={4}>
|
|
118
|
-
<TextInput source="ContactName" label="Contact Name" fullWidth />
|
|
119
|
-
</Grid>
|
|
120
|
-
<Grid item xs={12} sm={6} md={4}>
|
|
121
|
-
<TextInput source="ContactTitle" label="Contact Title" fullWidth />
|
|
122
|
-
</Grid>
|
|
123
|
-
<Grid item xs={12} sm={6} md={4}>
|
|
124
|
-
<TextInput source="Address" label="Address" fullWidth />
|
|
125
|
-
</Grid>
|
|
126
|
-
<Grid item xs={12} sm={6} md={4}>
|
|
127
|
-
<TextInput source="City" label="City" fullWidth />
|
|
128
|
-
</Grid>
|
|
129
|
-
<Grid item xs={12} sm={6} md={4}>
|
|
130
|
-
<TextInput source="Country" label="Country" fullWidth />
|
|
131
|
-
</Grid>
|
|
331
|
+
export const SupplierEdit = (props) => (
|
|
332
|
+
<Edit {...props}>
|
|
333
|
+
<SimpleForm>
|
|
334
|
+
<Grid container spacing={2}>
|
|
335
|
+
<Grid item xs={12} md={6}>
|
|
336
|
+
<TextInput source="CompanyName" fullWidth />
|
|
337
|
+
<TextInput source="ContactName" fullWidth />
|
|
338
|
+
<TextInput source="ContactTitle" fullWidth />
|
|
132
339
|
</Grid>
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
340
|
+
<Grid item xs={12} md={6}>
|
|
341
|
+
<TextInput source="Address" fullWidth />
|
|
342
|
+
<TextInput source="City" fullWidth />
|
|
343
|
+
<TextInput source="Region" fullWidth />
|
|
344
|
+
<TextInput source="PostalCode" fullWidth />
|
|
345
|
+
<TextInput source="Country" fullWidth />
|
|
346
|
+
</Grid>
|
|
347
|
+
<Grid item xs={12}>
|
|
348
|
+
<TextInput source="Phone" fullWidth />
|
|
349
|
+
<TextInput source="Fax" fullWidth />
|
|
350
|
+
<TextInput source="HomePage" fullWidth />
|
|
351
|
+
</Grid>
|
|
352
|
+
</Grid>
|
|
353
|
+
</SimpleForm>
|
|
354
|
+
</Edit>
|
|
355
|
+
);
|
|
137
356
|
|
|
138
|
-
export
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
357
|
+
export const SupplierCreate = (props) => (
|
|
358
|
+
<Create {...props}>
|
|
359
|
+
<SimpleForm>
|
|
360
|
+
<Grid container spacing={2}>
|
|
361
|
+
<Grid item xs={12} md={6}>
|
|
362
|
+
<TextInput source="CompanyName" fullWidth />
|
|
363
|
+
<TextInput source="ContactName" fullWidth />
|
|
364
|
+
<TextInput source="ContactTitle" fullWidth />
|
|
365
|
+
</Grid>
|
|
366
|
+
<Grid item xs={12} md={6}>
|
|
367
|
+
<TextInput source="Address" fullWidth />
|
|
368
|
+
<TextInput source="City" fullWidth />
|
|
369
|
+
<TextInput source="Region" fullWidth />
|
|
370
|
+
<TextInput source="PostalCode" fullWidth />
|
|
371
|
+
<TextInput source="Country" fullWidth />
|
|
372
|
+
</Grid>
|
|
373
|
+
<Grid item xs={12}>
|
|
374
|
+
<TextInput source="Phone" fullWidth />
|
|
375
|
+
<TextInput source="Fax" fullWidth />
|
|
376
|
+
<TextInput source="HomePage" fullWidth />
|
|
377
|
+
</Grid>
|
|
378
|
+
</Grid>
|
|
379
|
+
</SimpleForm>
|
|
380
|
+
</Create>
|
|
381
|
+
);
|