first commit

This commit is contained in:
Dongho Kim
2025-05-21 15:00:13 +00:00
commit da3ac0e469
39 changed files with 16602 additions and 0 deletions

35
webapp/Component.js Normal file
View File

@ -0,0 +1,35 @@
/**
* eslint-disable @sap/ui5-jsdocs/no-jsdoc
*/
sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/Device",
"restaurant/z00124ss25restaurant/model/models"
],
function (UIComponent, Device, models) {
"use strict";
return UIComponent.extend("restaurant.z00124ss25restaurant.Component", {
metadata: {
manifest: "json"
},
/**
* The component is initialized by UI5 automatically during the startup of the app and calls the init method once.
* @public
* @override
*/
init: function () {
// call the base component's init function
UIComponent.prototype.init.apply(this, arguments);
// enable routing
this.getRouter().initialize();
// set the device model
this.setModel(models.createDeviceModel(), "device");
}
});
}
);

View File

@ -0,0 +1,14 @@
sap.ui.define(
[
"sap/ui/core/mvc/Controller"
],
function(BaseController) {
"use strict";
return BaseController.extend("restaurant.z00124ss25restaurant.controller.App", {
onInit: function() {
}
});
}
);

View File

@ -0,0 +1,392 @@
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/m/MessageBox",
"sap/ui/model/Filter",
"sap/ui/model/FilterOperator"
], function (Controller, MessageBox, Filter, FilterOperator) {
"use strict";
return Controller.extend("restaurant.z00124ss25restaurant.controller.managerReservation", {
onInit: function () {
var oDataForChart = {
totalReservations: 0,
totalRevenue: "35,918.29",
monthlyData: [
{ Month: "Jan", Count: 20, Revenue: 5000 },
{ Month: "Feb", Count: 30, Revenue: 7000 },
{ Month: "Mar", Count: 25, Revenue: 6000 },
{ Month: "Apr", Count: 15, Revenue: 3500 },
{ Month: "May", Count: 10, Revenue: 2000 },
{ Month: "Jun", Count: 20, Revenue: 7500 }
]
};
var oDashboardModel = new sap.ui.model.json.JSONModel(oDataForChart);
this.getView().setModel(oDashboardModel, "dashboard");
this._loadReservationCount();
},
_padAndEncodeId: function (id) {
id = id.toString(); // Ensure it's a string
if (id.length === 9) {
return id;
}
var padding = 9 - id.length;
return "%20".repeat(padding) + id;
},
onModelRefresh: function () {
var oTable = this.byId("reservationTable");
oTable.getBinding().refresh(true);
},
formatDimensions: function (sWidth, sHeight, sDepth, sUnit) {
if (sWidth && sHeight && sDepth && sUnit) {
return sWidth + "x" + sHeight + "x" + sDepth + " " + (sUnit.toLowerCase());
}
return null;
},
initBindingEventHandler: function () {
const oBusyIndicator = this.oBusyIndicator;
const oTable = this.getTable();
const oBinding = oTable.getBinding();
oBinding.attachDataRequested(function () {
oTable.setNoData(oBusyIndicator);
});
oBinding.attachDataReceived(function () {
oTable.setNoData(null); //Use default again ("No Data" in case no data is available)
});
},
_resetForm: function () {
this.byId("decoration").setSelectedKey("");
this.byId("location").setSelectedKey("");
this.byId("numofseats").setValue(1);
},
onCreateTable: function () {
var iNumberOfSeats = this.byId("numofseats").getValue();
var sDecoration = this.byId("decoration").getSelectedKey();
var sLocation = this.byId("location").getSelectedKey();
if (!iNumberOfSeats) {
MessageBox.error("Please enter number of seats");
return;
}
if (!sDecoration) {
MessageBox.error("Please select a decoration for the table");
return;
}
if (!sLocation) {
MessageBox.error("Please select a location for the table");
return;
}
var oPayload = {
NumberOfSeats: iNumberOfSeats,
Location: sLocation,
Decoration: sDecoration
};
var oModel = this.getOwnerComponent().getModel();
// Show busy indicator
this.getView().setBusy(true);
var endPoint = "/tablePos";
oModel.create(endPoint, oPayload, {
success: function (oData, oResponse) {
this.getView().setBusy(false);
MessageBox.success("Table created successfully", {
onClose: this._resetForm.bind(this)
});
}.bind(this),
error: function (oError) {
this.getView().setBusy(false);
// Extract error message from backend response
var sErrorMessage = "Error creating Table";
try {
if (oError.responseText) {
var oErrorResponse = JSON.parse(oError.responseText);
sErrorMessage = oErrorResponse.error.message.value ||
(oErrorResponse.error.innererror &&
oErrorResponse.error.innererror.errordetails &&
oErrorResponse.error.innererror.errordetails.length > 0 ?
oErrorResponse.error.innererror.errordetails[0].message :
sErrorMessage);
}
} catch (e) {
// Use default error message if parsing fails
console.error("Error parsing error response:", e);
}
// Log detailed error information for debugging
console.error("Error status:", oError.statusCode);
console.error("Error message:", sErrorMessage);
console.error("Request URL:", oError.request ? oError.request.requestUri : "unknown");
console.error("Full error object:", oError);
MessageBox.error(sErrorMessage);
// Test with a different endpoint if this fails
if (oError.statusCode === 404) {
console.log("Trying alternative endpoint format...");
this._tryAlternativeEndpoint(oPayload);
}
}.bind(this)
});
},
onEditTable: function (oEvent) {
const oContext = oEvent.getSource().getBindingContext();
if (!oContext) return;
const oData = oContext.getObject();
// Create dialog only once
if (!this._oEditDialog) {
this._oEditDialog = new sap.m.Dialog({
title: "Edit Table",
contentWidth: "400px",
content: new sap.ui.layout.form.SimpleForm({
editable: true,
content: [
new sap.m.Label({ text: "Table ID" }),
new sap.m.Input({ value: "{/TableId}", enabled: false }),
new sap.m.Label({ text: "Decoration" }),
new sap.m.Input({ value: "{/Decoration}" }),
new sap.m.Label({ text: "Location" }),
new sap.m.Input({ value: "{/Location}" }),
new sap.m.Label({ text: "Seats" }),
new sap.m.StepInput({ value: "{/NumberOfSeats}", min: 1, max: 12 })
]
}),
buttons: [
new sap.m.Button({
text: "Save",
type: "Emphasized",
press: function () {
var oDialogModel = this._oEditDialog.getModel();
var oUpdatedData = oDialogModel.getData();
var oModel = this.getView().getModel();
var endPoint = "/tablePos('" + this._padAndEncodeId(oUpdatedData.TableId.trim()) + "')";
var oPayload = {
Decoration: oUpdatedData.Decoration,
Location: oUpdatedData.Location,
NumberOfSeats: oUpdatedData.NumberOfSeats
};
this.getView().setBusy(true);
oModel.update(endPoint, oPayload, {
success: function () {
this.getView().setBusy(false);
sap.m.MessageToast.show("Table updated successfully!");
this._oEditDialog.close();
this._oEditDialog.destroy();
this._oEditDialog = null;
}.bind(this),
error: function (oError) {
this.getView().setBusy(false);
sap.m.MessageBox.error("Failed to update table.");
console.error(oError);
}.bind(this)
});
}.bind(this)
}),
new sap.m.Button({
text: "Delete",
type: "Reject",
press: function () {
sap.m.MessageBox.confirm("Are you sure you want to delete this table?", {
onClose: function (sAction) {
if (sAction === sap.m.MessageBox.Action.OK) {
this._deleteTable();
}
}.bind(this)
});
}.bind(this)
}),
new sap.m.Button({
text: "Cancel",
press: function () {
this._oEditDialog.close();
}.bind(this)
})
],
afterClose: function () {
if (this._oEditDialog) {
this._oEditDialog.destroy();
this._oEditDialog = null;
}
}.bind(this)
});
}
// Bind a JSON model copy to dialog to avoid direct changes before save
const oTableData = Object.assign({}, oData);
const oDialogModel = new sap.ui.model.json.JSONModel(oTableData);
this._oEditDialog.setModel(oDialogModel);
this._oEditDialog.bindElement("/");
this._oEditDialog.open();
},
_deleteTable: function () {
var oDialogModel = this._oEditDialog.getModel();
var oData = oDialogModel.getData();
var oModel = this.getView().getModel();
var sPath = "/tablePos('" + this._padAndEncodeId(oData.TableId.trim()) + "')";
this.getView().setBusy(true);
oModel.remove(sPath, {
success: function () {
this.getView().setBusy(false);
sap.m.MessageToast.show("Table deleted successfully!");
this._oEditDialog.close();
}.bind(this),
error: function (oError) {
this.getView().setBusy(false);
sap.m.MessageBox.error("Failed to delete table.");
console.error(oError);
}.bind(this)
});
},
onSearchLiveChange: function (oEvent) {
// Get the search query
var sQuery = oEvent.getParameter("newValue");
var oTable = this.byId("reservationTable");
var oBinding = oTable.getBinding("rows");
// Apply filters
if (sQuery && sQuery.length > 0) {
var aFilters = [
new Filter("ReservationName", FilterOperator.Contains, sQuery)
];
oBinding.filter(new Filter({
filters: aFilters,
and: false
}));
} else {
// Clear filters if search field is empty
oBinding.filter([]);
}
},
onModelRefresh: function () {
var oModel = this.getView().getModel();
oModel.refresh(true); // Hard refresh from the server
},
/**
* Formats a date to show only year, month, and day (YYYY-MM-DD)
* @param {object} oDate - Date object or date string
* @returns {string} Formatted date string
*/
formatDate: function (oDate) {
if (!oDate) {
return "";
}
// Convert string to date object if needed
var dateObj = (typeof oDate === "string") ? new Date(oDate) : oDate;
if (isNaN(dateObj.getTime())) {
return "";
}
// Format as YYYY-MM-DD
var year = dateObj.getFullYear();
var month = String(dateObj.getMonth() + 1).padStart(2, '0');
var day = String(dateObj.getDate()).padStart(2, '0');
return year + "-" + month + "-" + day;
},
/**
* Formats a time to show in HH:MM:SS format
* @param {object} oTime - Time object, date object, or time string
* @returns {string} Formatted time string
*/
formatTime: function (oTime) {
if (!oTime) {
return "";
}
// Handle OData Edm.Time object which contains ms property
if (oTime && typeof oTime === "object" && oTime.ms !== undefined && oTime.__edmType === "Edm.Time") {
// Calculate hours, minutes, seconds from milliseconds
var totalSeconds = Math.floor(oTime.ms / 1000);
var hours = Math.floor(totalSeconds / 3600);
var minutes = Math.floor((totalSeconds % 3600) / 60);
var seconds = totalSeconds % 60;
// Format as HH:MM:SS
return String(hours).padStart(2, '0') + ":" +
String(minutes).padStart(2, '0') + ":" +
String(seconds).padStart(2, '0');
}
var timeObj;
// Handle other input types
if (typeof oTime === "string") {
// Try parsing as time string (like "14:30:00")
if (oTime.indexOf(":") !== -1) {
var parts = oTime.split(":");
timeObj = new Date();
timeObj.setHours(parseInt(parts[0], 10));
timeObj.setMinutes(parts.length > 1 ? parseInt(parts[1], 10) : 0);
timeObj.setSeconds(parts.length > 2 ? parseInt(parts[2], 10) : 0);
} else {
// Try parsing as date string
timeObj = new Date(oTime);
}
} else if (oTime instanceof Date) {
timeObj = oTime;
} else {
return ""; // Unsupported format
}
if (isNaN(timeObj.getTime())) {
return "";
}
// Format as HH:MM:SS
var hours = String(timeObj.getHours()).padStart(2, '0');
var minutes = String(timeObj.getMinutes()).padStart(2, '0');
var seconds = String(timeObj.getSeconds()).padStart(2, '0');
return hours + ":" + minutes + ":" + seconds;
},
_loadReservationCount: function () {
var oODataModel = this.getOwnerComponent().getModel();
// Show busy indicator
var oDashboardModel = this.getView().getModel("dashboard");
// Read count directly from the $count endpoint
oODataModel.read("/reservationPos/$count", {
success: function (count) {
// count is a number (integer)
oDashboardModel.setProperty("/totalReservations", count);
},
error: function (oError) {
console.error("Failed to fetch reservation count", oError);
}
});
}
});
});

View File

@ -0,0 +1,266 @@
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/m/MessageBox",
"sap/ui/core/format/DateFormat",
], function (Controller, MessageBox, DateFormat) {
"use strict";
return Controller.extend("restaurant.z00124ss25restaurant.controller.tablePos", {
onInit: function () {
// Initialize your controller logic here
var oDatePicker = this.byId("booked-date");
oDatePicker.setDateValue(new Date());
// Set default time value (e.g., 18:00 for dinner)
var oTimePicker = this.byId("booked-time");
var oDefaultTime = new Date();
oDefaultTime.setHours(18, 0, 0);
oTimePicker.setDateValue(oDefaultTime);
// Set default booking period (120 minutes = 2 hours)
this.byId("booked-period").setValue("120");
},
_padAndEncodeId: function (id) {
id = id.toString(); // Ensure it's a string
if (id.length === 9) {
return id;
}
var padding = 9 - id.length;
return "%20".repeat(padding) + id;
},
handleChange: function (oEvent) {
// Handle date selection change if needed
var oDatePicker = oEvent.getSource();
var oSelectedDate = oDatePicker.getDateValue();
// Additional validation could go here
// For example, prevent past dates
if (oSelectedDate && oSelectedDate < new Date()) {
MessageBox.warning("Please select a future date for your reservation");
oDatePicker.setDateValue(new Date());
}
},
onSaveReservation: function () {
// Get values from the form
var sReservationName = this.byId("res-name").getValue();
var iNumGuests = parseInt(this.byId("num-guests").getValue(), 10);
var oBookedTime = this.byId("booked-time").getDateValue();
var oBookedDate = this.byId("booked-date").getDateValue();
var sBookedPeriod = this.byId("booked-period").getValue();
var sComments = this.byId("comments").getValue();
// Get the selected TableId from the Select control
var oTableSelect = this.byId("table-id");
var oSelectedItem = oTableSelect.getSelectedItem();
var sSelectedTableId = oSelectedItem ? oSelectedItem.getKey().trim() : null;
// Minimal validation for required fields
if (!sReservationName) {
MessageBox.error("Please enter a reservation name");
return;
}
if (!oBookedDate) {
MessageBox.error("Please select a date for your reservation");
return;
}
if (!oBookedTime) {
MessageBox.error("Please select a time for your reservation");
return;
}
if (!sBookedPeriod) {
MessageBox.error("Please enter a booking period");
return;
}
if (!sSelectedTableId) {
MessageBox.error("Please select a table");
return;
}
// Format time for backend (HHMMSS format for ABAP TIMS)
var sFormattedTime = this._formatTimeForABAP(oBookedTime);
// Combine date and time into a single date object
const oCombinedDateTime = new Date(
oBookedDate.getFullYear(),
oBookedDate.getMonth(),
oBookedDate.getDate(),
oBookedTime.getHours(),
oBookedTime.getMinutes(),
oBookedTime.getSeconds()
);
// Format using DateTimeOffset type
const oDateTimeFormat = DateFormat.getDateTimeInstance({
pattern: "yyyy-MM-dd'T'HH:mm:ss",
UTC: true // Use UTC to avoid timezone issues
});
const sFormattedDateTime = oDateTimeFormat.format(oCombinedDateTime);
// Create payload for OData service - matching your table structure
var oPayload = {
NumOfGuests: iNumGuests,
ReservationName: sReservationName,
CommentSection: sComments || "",
BookedDate: sFormattedDateTime,
BookedTime: sFormattedTime,
BookedPeriod: parseInt(sBookedPeriod, 10) || 0
// Created_by and other administrative fields will be handled by the backend
};
// Get the OData model
var oModel = this.getOwnerComponent().getModel();
// Show busy indicator
this.getView().setBusy(true);
// FIX: Correct the endpoint format based on your OData service structure
// Get the full service path from the model
var sServiceUrl = oModel.sServiceUrl;
console.log("Service URL:", sServiceUrl);
// Try different path formats - the correct format depends on your OData service definition
// Option 1: Original path from your code, but with proper formatting
console.log(sSelectedTableId);
var encoded = this._padAndEncodeId(sSelectedTableId);
var endPoint = "/tablePos('" + encoded + "')/to_rese";
oModel.create(endPoint, oPayload, {
success: function (oData, oResponse) {
this.getView().setBusy(false);
MessageBox.success("Reservation created successfully", {
onClose: this._resetForm.bind(this)
});
}.bind(this),
error: function (oError) {
this.getView().setBusy(false);
// Extract error message from backend response
var sErrorMessage = "Error creating reservation";
try {
if (oError.responseText) {
var oErrorResponse = JSON.parse(oError.responseText);
sErrorMessage = oErrorResponse.error.message.value ||
(oErrorResponse.error.innererror &&
oErrorResponse.error.innererror.errordetails &&
oErrorResponse.error.innererror.errordetails.length > 0 ?
oErrorResponse.error.innererror.errordetails[0].message :
sErrorMessage);
}
} catch (e) {
// Use default error message if parsing fails
console.error("Error parsing error response:", e);
}
// Log detailed error information for debugging
console.error("Error status:", oError.statusCode);
console.error("Error message:", sErrorMessage);
console.error("Request URL:", oError.request ? oError.request.requestUri : "unknown");
console.error("Full error object:", oError);
MessageBox.error(sErrorMessage);
// Test with a different endpoint if this fails
if (oError.statusCode === 404) {
console.log("Trying alternative endpoint format...");
this._tryAlternativeEndpoint(oPayload);
}
}.bind(this)
});
},
onCancelPress: function () {
// Ask for confirmation before resetting
MessageBox.confirm("Are you sure you want to cancel? All entered data will be lost.", {
title: "Confirmation",
actions: [MessageBox.Action.YES, MessageBox.Action.NO],
emphasizedAction: MessageBox.Action.YES,
onClose: function (sAction) {
if (sAction === MessageBox.Action.YES) {
this._resetForm();
}
}.bind(this)
});
},
onTableItemChange: function (oEvent) {
var oSelectedItem = oEvent.getParameter("selectedItem");
if (oSelectedItem) {
var sSelectedItemId = oSelectedItem.getKey();
var sSelectedItemText = oSelectedItem.getText();
console.log("Selected Item ID:", sSelectedItemId);
console.log("Selected Item Text:", sSelectedItemText);
// Perform further actions based on the selected item
}
},
_resetForm: function () {
this.byId("res-name").setValue("");
this.byId("num-guests").setValue(1);
this.byId("booked-date").setDateValue(new Date());
// Reset time to default (6:00 PM)
var oDefaultTime = new Date();
oDefaultTime.setHours(18, 0, 0);
this.byId("booked-time").setDateValue(oDefaultTime);
this.byId("booked-period").setValue("120");
this.byId("comments").setValue("");
},
_formatDateForAbapDats: function (oDate) {
var oType = new TypeDateTime();
if (!oDate) return null;
// Use UI5's built-in ISO date formatting
const oDateFormat = DateFormat.getDateInstance({
pattern: "yyyy-MM-dd",
UTC: true // Critical for ABAP compatibility
});
return oDateFormat.format(oDate);
},
_formatTimeForABAP: function (oTime) {
if (!oTime) {
return "PT00H00M00S";
}
var oTimeFormat = sap.ui.core.format.DateFormat.getTimeInstance({ pattern: "HH:mm:ss" });
var oTimeFormatString = "PT" + oTimeFormat.format(oTime);
oTimeFormatString = oTimeFormatString.replace(":", "H");
// Replace the next colon with 'M'
oTimeFormatString = oTimeFormatString.replace(":", "M");
// Add 'S' at the end to mark seconds
oTimeFormatString = oTimeFormatString + "S";
console.log(oTimeFormatString);
return oTimeFormatString;
},
onManagerPress: function () {
console.log("yes you clicked the button of manager");
let man_id = prompt("Please enter manager id:");
if (man_id != "z00124") {
alert("You are not manager or typed it wrong try again");
} else {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("RouteManagerReservation"); // make sure this route is defined in your manifest.json
// visible="{= ${isManager} }" // do it when it is implemented
}
}
});
});

35
webapp/css/style.css Normal file
View File

@ -0,0 +1,35 @@
/* Enter your custom styles here */
.dashboardCardReservation,
.dashboardCardRevenue {
padding: 1.5rem !important;
}
.dashboardCardReservation {
background-color: #b5f488e1; /* blue background */
padding: 1rem;
border-radius: 8px;
color: white; /* text color */
box-shadow: 0 2px 4px #ffffff26;
width: 50%;
height: auto;
}
.dashboardCardRevenue {
background-color: #67befcce; /* blue background */
padding: 1rem;
border-radius: 8px;
color: white; /* text color */
box-shadow: 0 2px 4px #ffffff26;
width: 50%;
height: auto;
}
.dashboardCardFontLarge {
font-size: 1.4rem !important; /* or any size you want */
font-weight: bold; /* optional */
height:auto;
}
.dashboardCardFontSmall{
font-size: 0.7rem !important; /* or any size you want */
font-weight: bold; /* optional */
height: auto;
}

View File

@ -0,0 +1,11 @@
# This is the resource bundle for restaurant.z00124ss25restaurant
#Texts for manifest.json
#XTIT: Application name
appTitle=Restaurant Management
#YDES: Application description
appDescription=restaurant application
#XTIT: Main view title
title=Restaurant

35
webapp/index copy.html Normal file
View File

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>restaurant</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"restaurant.z00124ss25restaurant": "./"
}'
data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="restaurant.z00124ss25restaurant"
data-id="container"
data-settings='{"id" : "restaurant.z00124ss25restaurant"}'
data-handle-validation="true"
></div>
</body>
</html>

35
webapp/index.html Normal file
View File

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>restaurant</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"restaurant.z00124ss25restaurant": "./"
}'
data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="restaurant.z00124ss25restaurant"
data-id="container"
data-settings='{"id" : "restaurant.z00124ss25restaurant"}'
data-handle-validation="true"
></div>
</body>
</html>

View File

@ -0,0 +1,273 @@
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_COMMON',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="Common"/>
</edmx:Reference>
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_UI',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="UI"/>
</edmx:Reference>
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_COMMUNICATION',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="com.sap.vocabularies.Communication.v1" Alias="Communication"/>
</edmx:Reference>
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_PERSONALDATA',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="com.sap.vocabularies.PersonalData.v1" Alias="PersonalData"/>
</edmx:Reference>
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_VALIDATION',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="Org.OData.Validation.V1" Alias="Validation"/>
</edmx:Reference>
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_ANALYTICS',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="com.sap.vocabularies.Analytics.v1" Alias="Analytics"/>
</edmx:Reference>
<edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_HTML5',Version='0001',SAP__Origin='')/$value">
<edmx:Include Namespace="com.sap.vocabularies.HTML5.v1" Alias="HTML5"/>
</edmx:Reference>
<edmx:Reference Uri="../../../sap/z_00_124_ss25_res_srv/$metadata">
<edmx:Include Namespace="Z_00_124_SS25_RES_SRV" Alias="SAP"/>
</edmx:Reference>
<edmx:DataServices>
<Schema Namespace="z_00_124_ss25_res_srv_van.v1" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType">
<Annotation Term="UI.HeaderFacets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="ID" String="HeaderFacet"/>
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Fieldgroup:HeaderItems"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.Facets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="ID" String="tableid"/>
<PropertyValue Property="Target" AnnotationPath="@UI.Identification"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.FieldGroup" Qualifier="Fieldgroup:HeaderItems">
<Record>
<PropertyValue Property="Data">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Table Id"/>
<PropertyValue Property="Value" Path="TableId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Reservation Id"/>
<PropertyValue Property="Value" Path="ReservationId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="ReservationName"/>
<PropertyValue Property="Value" Path="ReservationName"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.HeaderInfo">
<Record>
<PropertyValue Property="TypeName" String="Reservation Document"/>
<PropertyValue Property="TypeNamePlural" String="Reservation Documents"/>
<PropertyValue Property="Title">
<Record Type="UI.DataFieldWithNavigationPath">
<PropertyValue Property="Label" String="Reservation Documents"/>
<PropertyValue Property="Value" Path="ReservationId"/>
<PropertyValue Property="Target" String="">
<Annotation Term="Core.Messages">
<Collection>
<Record>
<PropertyValue Property="message" String="ERROR: Invalid Path"/>
<PropertyValue Property="severity" String="error"/>
</Record>
</Collection>
</Annotation>
</PropertyValue>
</Record>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.Identification">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Table Id"/>
<PropertyValue Property="Value" Path="TableId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Reservation Id"/>
<PropertyValue Property="Value" Path="ReservationId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Number of Guests"/>
<PropertyValue Property="Value" Path="NumOfGuests"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="ReservationName"/>
<PropertyValue Property="Value" Path="ReservationName"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="CommentSection"/>
<PropertyValue Property="Value" Path="CommentSection"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="BookedTime"/>
<PropertyValue Property="Value" Path="BookedTime"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="BookedDate"/>
<PropertyValue Property="Value" Path="BookedDate"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="BookedPeriod"/>
<PropertyValue Property="Value" Path="BookedPeriod"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.LineItem">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Table Id"/>
<PropertyValue Property="Value" Path="TableId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Reservation Id"/>
<PropertyValue Property="Value" Path="ReservationId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Number of Guests"/>
<PropertyValue Property="Value" Path="NumOfGuests"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="ReservationName"/>
<PropertyValue Property="Value" Path="ReservationName"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="CommentSection"/>
<PropertyValue Property="Value" Path="CommentSection"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="BookedTime"/>
<PropertyValue Property="Value" Path="BookedTime"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="BookedDate"/>
<PropertyValue Property="Value" Path="BookedDate"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="BookedPeriod"/>
<PropertyValue Property="Value" Path="BookedPeriod"/>
</Record>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.tablePosType">
<Annotation Term="UI.HeaderFacets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="ID" String="HeaderFacet"/>
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Fieldgroup:HeaderItems"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.Facets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Label" String="Overview"/>
<PropertyValue Property="ID" String="TableID"/>
<PropertyValue Property="Target" AnnotationPath="@UI.Identification"/>
</Record>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Label" String="Positions"/>
<PropertyValue Property="ID" String="positions"/>
<PropertyValue Property="Target" AnnotationPath="to_rese/@UI.LineItem"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.FieldGroup" Qualifier="Fieldgroup:HeaderItems">
<Record>
<PropertyValue Property="Data">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Billing
Document"/>
<PropertyValue Property="Value" Path="TableId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Decoration"/>
<PropertyValue Property="Value" Path="Decoration"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.HeaderInfo">
<Record>
<PropertyValue Property="TypeName" String="Table Document"/>
<PropertyValue Property="TypeNamePlural" String="Table Documents"/>
<PropertyValue Property="Title">
<Record Type="UI.DataFieldWithNavigationPath">
<PropertyValue Property="Label" String="Table Document Details"/>
<PropertyValue Property="Value" Path="TableId"/>
<PropertyValue Property="Target" String="">
<Annotation Term="Core.Messages">
<Collection>
<Record>
<PropertyValue Property="message" String="ERROR: Invalid Path"/>
<PropertyValue Property="severity" String="error"/>
</Record>
</Collection>
</Annotation>
</PropertyValue>
</Record>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.Identification">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Table ID"/>
<PropertyValue Property="Value" Path="TableId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Decoration"/>
<PropertyValue Property="Value" Path="Decoration"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Location"/>
<PropertyValue Property="Value" Path="Location"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="NumberOfSeats"/>
<PropertyValue Property="Value" Path="NumberOfSeats"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.LineItem">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Table ID"/>
<PropertyValue Property="Value" Path="TableId"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Decoration"/>
<PropertyValue Property="Value" Path="Decoration"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="Location"/>
<PropertyValue Property="Value" Path="Location"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Label" String="NumberOfSeats"/>
<PropertyValue Property="Value" Path="NumberOfSeats"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.SelectionFields">
<Collection>
<PropertyPath>TableId</PropertyPath>
<PropertyPath>Decoration</PropertyPath>
<PropertyPath>Location</PropertyPath>
</Collection>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>

View File

@ -0,0 +1,562 @@
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:sap="http://www.sap.com/Protocols/SAPData">
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_AGGREGATION',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="Org.OData.Aggregation.V1" Alias="Aggregation"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_ANALYTICS',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.Analytics.v1" Alias="Analytics"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_CAPABILITIES',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="Org.OData.Capabilities.V1" Alias="Capabilities"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_CODELIST',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.CodeList.v1" Alias="SAP__CodeList"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_COMMON',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="Common"/>
<edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="SAP__common"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_COMMUNICATION',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.Communication.v1" Alias="Communication"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_CORE',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="Org.OData.Core.V1" Alias="SAP__core"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_MEASURES',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="Org.OData.Measures.V1" Alias="Measures"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_PDF',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.PDF.v1" Alias="SAP__PDF"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_PERSONALDATA',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.PersonalData.v1" Alias="PersonalData"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_UI',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="UI"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_VALIDATION',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="Org.OData.Validation.V1" Alias="Validation"/>
</edmx:Reference>
<edmx:Reference Uri="./sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName='SAP__SELF',Version='0001',SAP__Origin='')/$value" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Include Namespace="com.sap.vocabularies.PDF.v1" Alias="SAP__PDF"/>
</edmx:Reference>
<edmx:DataServices m:DataServiceVersion="2.0">
<Schema Namespace="cds_z00124ss25_restaurant" xml:lang="en" sap:schema-version="1" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<Annotation Term="Core.SchemaVersion" String="1.0.0" xmlns="http://docs.oasis-open.org/odata/ns/edm"/>
<EntityType Name="reservationPosType" sap:label="Consumsion datadefiniton of Reservation" sap:content-version="1">
<Key>
<PropertyRef Name="ReservationId"/>
<PropertyRef Name="TableId"/>
</Key>
<Property Name="ReservationId" Type="Edm.Guid" Nullable="false" sap:label="UUID" sap:quickinfo="16 Byte UUID in 16 Bytes (Raw Format)" sap:creatable="false" sap:updatable="false"/>
<Property Name="TableId" Type="Edm.String" Nullable="false" MaxLength="10" sap:display-format="UpperCase" sap:label="Tablee ID" sap:quickinfo="Tablee data element" sap:creatable="false" sap:updatable="false" sap:value-list="standard"/>
<Property Name="NumOfGuests" Type="Edm.Int16"/>
<Property Name="ReservationName" Type="Edm.String" MaxLength="30"/>
<Property Name="CommentSection" Type="Edm.String" MaxLength="50"/>
<Property Name="BookedDate" Type="Edm.DateTime" Precision="0" sap:display-format="Date"/>
<Property Name="BookedTime" Type="Edm.Time" Precision="0"/>
<Property Name="BookedPeriod" Type="Edm.Int16"/>
<NavigationProperty Name="to_tabe" Relationship="cds_z00124ss25_restaurant.assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" FromRole="ToRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" ToRole="FromRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987"/>
</EntityType>
<EntityType Name="tablePosType" sap:label="Table Consumption Data Defitnion" sap:content-version="1">
<Key>
<PropertyRef Name="TableId"/>
</Key>
<Property Name="TableId" Type="Edm.String" Nullable="false" MaxLength="10" sap:display-format="UpperCase" sap:label="Tablee ID" sap:quickinfo="Tablee data element" sap:creatable="false" sap:updatable="false"/>
<Property Name="Decoration" Type="Edm.String" MaxLength="10" sap:display-format="UpperCase" sap:label="Decoration Value" sap:quickinfo="Deco Element" sap:value-list="fixed-values"/>
<Property Name="Location" Type="Edm.String" MaxLength="10" sap:display-format="UpperCase" sap:label="Location Domain" sap:quickinfo="Location Element" sap:value-list="fixed-values"/>
<Property Name="NumberOfSeats" Type="Edm.Int16"/>
<NavigationProperty Name="to_rese" Relationship="cds_z00124ss25_restaurant.assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" FromRole="FromRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" ToRole="ToRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987"/>
</EntityType>
<EntityType Name="Z_00_124_SS25_DECOType" sap:label="Decoration Datdefiinition" sap:value-list="true" sap:content-version="1">
<Key>
<PropertyRef Name="Decoration"/>
</Key>
<Property Name="Decoration" Type="Edm.String" Nullable="false" MaxLength="10" sap:display-format="UpperCase" sap:label="Decoration Value" sap:quickinfo="Deco Element"/>
</EntityType>
<EntityType Name="Z_00_124_SS25_LOCType" sap:label="Location Data Definition" sap:value-list="true" sap:content-version="1">
<Key>
<PropertyRef Name="Location"/>
</Key>
<Property Name="Location" Type="Edm.String" Nullable="false" MaxLength="10" sap:display-format="UpperCase" sap:label="Location Domain" sap:quickinfo="Location Element"/>
</EntityType>
<EntityType Name="SAP__Currency" sap:content-version="1">
<Key>
<PropertyRef Name="CurrencyCode"/>
</Key>
<Property Name="CurrencyCode" Type="Edm.String" Nullable="false" MaxLength="5" sap:label="Currency" sap:semantics="currency-code"/>
<Property Name="ISOCode" Type="Edm.String" Nullable="false" MaxLength="3" sap:label="ISO code"/>
<Property Name="Text" Type="Edm.String" Nullable="false" MaxLength="15" sap:label="Short text"/>
<Property Name="DecimalPlaces" Type="Edm.Byte" Nullable="false" sap:label="Decimals"/>
</EntityType>
<EntityType Name="SAP__UnitOfMeasure" sap:content-version="1">
<Key>
<PropertyRef Name="UnitCode"/>
</Key>
<Property Name="UnitCode" Type="Edm.String" Nullable="false" MaxLength="3" sap:label="Internal UoM" sap:semantics="unit-of-measure"/>
<Property Name="ISOCode" Type="Edm.String" Nullable="false" MaxLength="3" sap:label="ISO Code"/>
<Property Name="ExternalCode" Type="Edm.String" Nullable="false" MaxLength="3" sap:label="Commercial"/>
<Property Name="Text" Type="Edm.String" Nullable="false" MaxLength="30" sap:label="Measurement Unit Txt"/>
<Property Name="DecimalPlaces" Type="Edm.Int16" sap:label="Decimal Places"/>
</EntityType>
<EntityType Name="SAP__DocumentDescription" sap:content-version="1">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="Edm.Guid" Nullable="false" sap:label="UUID"/>
<Property Name="CreatedBy" Type="Edm.String" Nullable="false" MaxLength="12"/>
<Property Name="CreatedAt" Type="Edm.DateTime" Nullable="false" Precision="0" sap:label="Time Stamp"/>
<Property Name="FileName" Type="Edm.String" Nullable="false" MaxLength="256"/>
<Property Name="Title" Type="Edm.String" Nullable="false" MaxLength="256"/>
<NavigationProperty Name="Format" Relationship="cds_z00124ss25_restaurant.to_format" FromRole="FromRole_to_format" ToRole="ToRole_to_format"/>
<NavigationProperty Name="TableColumns" Relationship="cds_z00124ss25_restaurant.to_tablecolumns" FromRole="FromRole_to_tablecolumns" ToRole="ToRole_to_tablecolumns"/>
<NavigationProperty Name="CoverPage" Relationship="cds_z00124ss25_restaurant.to_coverpage" FromRole="FromRole_to_coverpage" ToRole="ToRole_to_coverpage"/>
<NavigationProperty Name="Signature" Relationship="cds_z00124ss25_restaurant.to_signature" FromRole="FromRole_to_signature" ToRole="ToRole_to_signature"/>
<NavigationProperty Name="PDFStandard" Relationship="cds_z00124ss25_restaurant.to_pdfstandard" FromRole="FromRole_to_pdfstandard" ToRole="ToRole_to_pdfstandard"/>
</EntityType>
<EntityType Name="SAP__Format" sap:content-version="1">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="FitToPage" Type="cds_z00124ss25_restaurant.SAP__FitToPage" Nullable="false"/>
<Property Name="Id" Type="Edm.Guid" Nullable="false" sap:label="UUID" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="FontSize" Type="Edm.Int32" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Orientation" Type="Edm.String" Nullable="false" MaxLength="10" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="PaperSize" Type="Edm.String" Nullable="false" MaxLength="10" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="BorderSize" Type="Edm.Int32" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="MarginSize" Type="Edm.Int32" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="FontName" Type="Edm.String" Nullable="false" MaxLength="255" sap:label="Font Name" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="SAP__PDFStandard" sap:content-version="1">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="Edm.Guid" Nullable="false" sap:label="UUID" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="UsePDFAConformance" Type="Edm.Boolean" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="DoEnableAccessibility" Type="Edm.Boolean" Nullable="false" sap:label="Indicator" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="SAP__TableColumns" sap:content-version="1">
<Key>
<PropertyRef Name="Id"/>
<PropertyRef Name="Name"/>
<PropertyRef Name="Header"/>
</Key>
<Property Name="Id" Type="Edm.Guid" Nullable="false" sap:label="UUID" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="256" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Header" Type="Edm.String" Nullable="false" MaxLength="256" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="HorizontalAlignment" Type="Edm.String" Nullable="false" MaxLength="10" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="SAP__CoverPage" sap:content-version="1">
<Key>
<PropertyRef Name="Title"/>
<PropertyRef Name="Id"/>
<PropertyRef Name="Name"/>
</Key>
<Property Name="Title" Type="Edm.String" Nullable="false" MaxLength="256" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Id" Type="Edm.Guid" Nullable="false" sap:label="UUID" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="256" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Value" Type="Edm.String" Nullable="false" MaxLength="256" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="SAP__Signature" sap:content-version="1">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="Edm.Guid" Nullable="false" sap:label="UUID" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="DoSign" Type="Edm.Boolean" Nullable="false" sap:label="Indicator" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Reason" Type="Edm.String" Nullable="false" MaxLength="256" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="SAP__ValueHelp" sap:content-version="1">
<Key>
<PropertyRef Name="VALUEHELP"/>
</Key>
<Property Name="VALUEHELP" Type="Edm.String" Nullable="false"/>
<Property Name="FIELD_VALUE" Type="Edm.String" Nullable="false" MaxLength="10"/>
<Property Name="DESCRIPTION" Type="Edm.String"/>
</EntityType>
<ComplexType Name="SAP__FitToPage">
<Property Name="ErrorRecoveryBehavior" Type="Edm.String" Nullable="false" MaxLength="8" sap:label="Error behavior" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="IsEnabled" Type="Edm.Boolean" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="MinimumFontSize" Type="Edm.Int32" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</ComplexType>
<Association Name="assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" sap:content-version="1">
<End Type="cds_z00124ss25_restaurant.tablePosType" Multiplicity="1" Role="FromRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987">
<OnDelete Action="Cascade"/>
</End>
<End Type="cds_z00124ss25_restaurant.reservationPosType" Multiplicity="*" Role="ToRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987"/>
<ReferentialConstraint>
<Principal Role="FromRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987">
<PropertyRef Name="TableId"/>
</Principal>
<Dependent Role="ToRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987">
<PropertyRef Name="TableId"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="to_format" sap:content-version="1">
<End Type="cds_z00124ss25_restaurant.SAP__DocumentDescription" Multiplicity="1" Role="FromRole_to_format"/>
<End Type="cds_z00124ss25_restaurant.SAP__Format" Multiplicity="1" Role="ToRole_to_format"/>
<ReferentialConstraint>
<Principal Role="FromRole_to_format">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="ToRole_to_format">
<PropertyRef Name="Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="to_tablecolumns" sap:content-version="1">
<End Type="cds_z00124ss25_restaurant.SAP__DocumentDescription" Multiplicity="1" Role="FromRole_to_tablecolumns"/>
<End Type="cds_z00124ss25_restaurant.SAP__TableColumns" Multiplicity="*" Role="ToRole_to_tablecolumns"/>
<ReferentialConstraint>
<Principal Role="FromRole_to_tablecolumns">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="ToRole_to_tablecolumns">
<PropertyRef Name="Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="to_coverpage" sap:content-version="1">
<End Type="cds_z00124ss25_restaurant.SAP__DocumentDescription" Multiplicity="1" Role="FromRole_to_coverpage"/>
<End Type="cds_z00124ss25_restaurant.SAP__CoverPage" Multiplicity="*" Role="ToRole_to_coverpage"/>
<ReferentialConstraint>
<Principal Role="FromRole_to_coverpage">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="ToRole_to_coverpage">
<PropertyRef Name="Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="to_signature" sap:content-version="1">
<End Type="cds_z00124ss25_restaurant.SAP__DocumentDescription" Multiplicity="1" Role="FromRole_to_signature"/>
<End Type="cds_z00124ss25_restaurant.SAP__Signature" Multiplicity="1" Role="ToRole_to_signature"/>
<ReferentialConstraint>
<Principal Role="FromRole_to_signature">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="ToRole_to_signature">
<PropertyRef Name="Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="to_pdfstandard" sap:content-version="1">
<End Type="cds_z00124ss25_restaurant.SAP__DocumentDescription" Multiplicity="1" Role="FromRole_to_pdfstandard"/>
<End Type="cds_z00124ss25_restaurant.SAP__PDFStandard" Multiplicity="1" Role="ToRole_to_pdfstandard"/>
<ReferentialConstraint>
<Principal Role="FromRole_to_pdfstandard">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="ToRole_to_pdfstandard">
<PropertyRef Name="Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<EntityContainer Name="cds_z00124ss25_restaurant_Entities" m:IsDefaultEntityContainer="true" sap:message-scope-supported="true" sap:supported-formats="atom json xlsx pdf">
<EntitySet Name="SAP__Currencies" EntityType="cds_z00124ss25_restaurant.SAP__Currency" sap:content-version="1"/>
<EntitySet Name="SAP__UnitsOfMeasure" EntityType="cds_z00124ss25_restaurant.SAP__UnitOfMeasure" sap:content-version="1"/>
<EntitySet Name="SAP__MyDocumentDescriptions" EntityType="cds_z00124ss25_restaurant.SAP__DocumentDescription" sap:content-version="1"/>
<EntitySet Name="SAP__FormatSet" EntityType="cds_z00124ss25_restaurant.SAP__Format" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:addressable="false" sap:content-version="1"/>
<EntitySet Name="SAP__PDFStandardSet" EntityType="cds_z00124ss25_restaurant.SAP__PDFStandard" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:addressable="false" sap:content-version="1"/>
<EntitySet Name="SAP__TableColumnsSet" EntityType="cds_z00124ss25_restaurant.SAP__TableColumns" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:addressable="false" sap:content-version="1"/>
<EntitySet Name="SAP__CoverPageSet" EntityType="cds_z00124ss25_restaurant.SAP__CoverPage" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:addressable="false" sap:content-version="1"/>
<EntitySet Name="SAP__SignatureSet" EntityType="cds_z00124ss25_restaurant.SAP__Signature" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:addressable="false" sap:content-version="1"/>
<EntitySet Name="SAP__ValueHelpSet" EntityType="cds_z00124ss25_restaurant.SAP__ValueHelp" sap:content-version="1"/>
<EntitySet Name="reservationPos" EntityType="cds_z00124ss25_restaurant.reservationPosType" sap:content-version="1"/>
<EntitySet Name="tablePos" EntityType="cds_z00124ss25_restaurant.tablePosType" sap:content-version="1"/>
<EntitySet Name="Z_00_124_SS25_DECO" EntityType="cds_z00124ss25_restaurant.Z_00_124_SS25_DECOType" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1"/>
<EntitySet Name="Z_00_124_SS25_LOC" EntityType="cds_z00124ss25_restaurant.Z_00_124_SS25_LOCType" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1"/>
<AssociationSet Name="assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" Association="cds_z00124ss25_restaurant.assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="tablePos" Role="FromRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987"/>
<End EntitySet="reservationPos" Role="ToRole_assoc_C5BBE7D3C6BD80AD3FA4BAAEFF61E987"/>
</AssociationSet>
<AssociationSet Name="to_formatSet" Association="cds_z00124ss25_restaurant.to_format" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="SAP__MyDocumentDescriptions" Role="FromRole_to_format"/>
<End EntitySet="SAP__FormatSet" Role="ToRole_to_format"/>
</AssociationSet>
<AssociationSet Name="to_pdfstandardSet" Association="cds_z00124ss25_restaurant.to_pdfstandard" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="SAP__MyDocumentDescriptions" Role="FromRole_to_pdfstandard"/>
<End EntitySet="SAP__PDFStandardSet" Role="ToRole_to_pdfstandard"/>
</AssociationSet>
<AssociationSet Name="to_tablecolumnsSet" Association="cds_z00124ss25_restaurant.to_tablecolumns" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="SAP__MyDocumentDescriptions" Role="FromRole_to_tablecolumns"/>
<End EntitySet="SAP__TableColumnsSet" Role="ToRole_to_tablecolumns"/>
</AssociationSet>
<AssociationSet Name="to_signatureSet" Association="cds_z00124ss25_restaurant.to_signature" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="SAP__MyDocumentDescriptions" Role="FromRole_to_signature"/>
<End EntitySet="SAP__SignatureSet" Role="ToRole_to_signature"/>
</AssociationSet>
<AssociationSet Name="to_coverpageSet" Association="cds_z00124ss25_restaurant.to_coverpage" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="SAP__MyDocumentDescriptions" Role="FromRole_to_coverpage"/>
<End EntitySet="SAP__CoverPageSet" Role="ToRole_to_coverpage"/>
</AssociationSet>
</EntityContainer>
<Annotations Target="cds_z00124ss25_restaurant.tablePosType/Decoration" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.ValueList">
<Record>
<PropertyValue Property="Label" String="Decoration Value"/>
<PropertyValue Property="CollectionPath" String="Z_00_124_SS25_DECO"/>
<PropertyValue Property="SearchSupported" Bool="false"/>
<PropertyValue Property="Parameters">
<Collection>
<Record Type="Common.ValueListParameterInOut">
<PropertyValue Property="LocalDataProperty" PropertyPath="Decoration"/>
<PropertyValue Property="ValueListProperty" String="Decoration"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="Common.ValueListWithFixedValues"/>
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.tablePosType/Location" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.ValueList">
<Record>
<PropertyValue Property="Label" String="Location Domain"/>
<PropertyValue Property="CollectionPath" String="Z_00_124_SS25_LOC"/>
<PropertyValue Property="SearchSupported" Bool="false"/>
<PropertyValue Property="Parameters">
<Collection>
<Record Type="Common.ValueListParameterInOut">
<PropertyValue Property="LocalDataProperty" PropertyPath="Location"/>
<PropertyValue Property="ValueListProperty" String="Location"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="Common.ValueListWithFixedValues"/>
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.cds_z00124ss25_restaurant_Entities" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.ApplyMultiUnitBehaviorForSortingAndFiltering" Bool="true"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.tablePosType/to_rese" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.Composition"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType/BookedDate" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType/BookedPeriod" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType/BookedTime" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType/CommentSection" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType/NumOfGuests" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.reservationPosType/ReservationName" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.tablePosType/NumberOfSeats" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/Mandatory"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.cds_z00124ss25_restaurant_Entities/reservationPos" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Capabilities.NavigationRestrictions">
<Record>
<PropertyValue Property="RestrictedProperties">
<Collection>
<Record>
<PropertyValue Property="NavigationProperty" NavigationPropertyPath="to_tabe"/>
<PropertyValue Property="InsertRestrictions">
<Record>
<PropertyValue Property="Insertable" Bool="false"/>
</Record>
</PropertyValue>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="SAP__core.OptimisticConcurrency">
<Collection/>
</Annotation>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.cds_z00124ss25_restaurant_Entities/tablePos" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Capabilities.NavigationRestrictions">
<Record>
<PropertyValue Property="RestrictedProperties">
<Collection>
<Record>
<PropertyValue Property="NavigationProperty" NavigationPropertyPath="to_rese"/>
<PropertyValue Property="InsertRestrictions">
<Record>
<PropertyValue Property="Insertable" Bool="true"/>
</Record>
</PropertyValue>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="SAP__core.OptimisticConcurrency">
<Collection/>
</Annotation>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.cds_z00124ss25_restaurant_Entities" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="Org.OData.Capabilities.V1.BatchSupport">
<Record Type="Org.OData.Capabilities.V1.BatchSupportType">
<PropertyValue Property="ReferencesAcrossChangeSetsSupported" Bool="true"/>
</Record>
</Annotation>
<Annotation Term="SAP__CodeList.CurrencyCodes">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__Currencies"/>
</Record>
</Annotation>
<Annotation Term="SAP__CodeList.UnitsOfMeasure">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__UnitsOfMeasure"/>
</Record>
</Annotation>
<Annotation Term="SAP__PDF.Features">
<Record>
<PropertyValue Property="DocumentDescriptionReference" String="./$metadata"/>
<PropertyValue Property="DocumentDescriptionCollection" String="SAP__MyDocumentDescriptions"/>
<PropertyValue Property="ArchiveFormat" Bool="true"/>
<PropertyValue Property="CoverPage" Bool="true"/>
<PropertyValue Property="Signature" Bool="true"/>
<PropertyValue Property="FitToPage" Bool="true"/>
<PropertyValue Property="FontName" Bool="true"/>
<PropertyValue Property="FontSize" Bool="true"/>
<PropertyValue Property="Margin" Bool="true"/>
<PropertyValue Property="Border" Bool="true"/>
<PropertyValue Property="ResultSizeDefault" Int="20000"/>
<PropertyValue Property="ResultSizeMaximum" Int="20000"/>
</Record>
</Annotation>
<Annotation Term="SAP__CodeList.SAP__DocumentDescription">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__MyDocumentDescriptions"/>
</Record>
</Annotation>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__Currency/CurrencyCode" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.Text" Path="Text"/>
<Annotation Term="SAP__common.UnitSpecificScale" Path="DecimalPlaces"/>
<Annotation Term="SAP__CodeList.StandardCode" Path="ISOCode"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__UnitOfMeasure/UnitCode" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.Text" Path="Text"/>
<Annotation Term="SAP__common.UnitSpecificScale" Path="DecimalPlaces"/>
<Annotation Term="SAP__CodeList.StandardCode" Path="ISOCode"/>
<Annotation Term="SAP__CodeList.ExternalCode" Path="ExternalCode"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__UnitOfMeasure" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__core.AlternateKeys">
<Collection>
<Record>
<PropertyValue Property="Key">
<Collection>
<Record>
<PropertyValue Property="Name" Path="ExternalCode"/>
<PropertyValue Property="Alias" String="ExternalCode"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__DocumentDescription/CreatedBy" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__core.Computed"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__DocumentDescription/CreatedAt" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__core.Computed"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__DocumentDescription" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__capabilties.InsertRestrictions">
<Record>
<PropertyValue Property="Insertable" Bool="false"/>
</Record>
</Annotation>
<Annotation Term="SAP__capabilties.UpdateRestrictions">
<Record>
<PropertyValue Property="Updatable" Bool="false"/>
<PropertyValue Property="QueryOptions">
<Record>
<PropertyValue Property="SelectSupported" Bool="true"/>
</Record>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="SAP__capabilties.DeleteRestrictions">
<Record>
<PropertyValue Property="Deletable" Bool="false"/>
</Record>
</Annotation>
<Annotation Term="SAP__capabilties.FilterRestrictions">
<Record>
<PropertyValue Property="FilterExpressionRestrictions">
<Collection>
<Record>
<PropertyValue Property="Property" PropertyPath="Format/Orientation"/>
<PropertyValue Property="AllowedExpressions" String="Multivalue"/>
</Record>
<Record>
<PropertyValue Property="Property" PropertyPath="Format/PaperSize"/>
<PropertyValue Property="AllowedExpressions" String="Multivalue"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__Format/FitToPage/ErrorRecoveryBehavior" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.ValueListReferences">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="../../../../SAP__ValueHelpSet?$filter=VALUEHELP%20eq%20%27ErrorRecoveryBehaviour%27"/>
</Record>
</Annotation>
<Annotation Term="SAP__common.ValueListWithFixedValues"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__Format/FontName" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.ValueListReferences">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__ValueHelpSet?$filter=VALUEHELP%20eq%20%27FontName%27"/>
</Record>
</Annotation>
<Annotation Term="SAP__common.ValueListWithFixedValues"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__Format/PaperSize" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.ValueListReferences">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__ValueHelpSet?$filter=VALUEHELP%20eq%20%27PaperSize%27"/>
</Record>
</Annotation>
<Annotation Term="SAP__common.ValueListWithFixedValues"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__Format/Orientation" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.ValueListReferences">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__ValueHelpSet?$filter=VALUEHELP%20eq%20%27FontName%27"/>
</Record>
</Annotation>
<Annotation Term="SAP__common.ValueListWithFixedValues"/>
</Annotations>
<Annotations Target="cds_z00124ss25_restaurant.SAP__TableColumns/HorizontalAlignment" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="SAP__common.ValueListReferences">
<Record>
<PropertyValue Property="Url" String="./$metadata"/>
<PropertyValue Property="CollectionPath" String="SAP__ValueHelpSet?$filter=VALUEHELP%20eq%20%27HorizontalAlignment%27"/>
</Record>
</Annotation>
<Annotation Term="SAP__common.ValueListWithFixedValues"/>
</Annotations>
<atom:link rel="self" href="https://s40lp1.ucc.cit.tum.de/sap/opu/odata/sap/Z_00_124_SS25_RES_SRV/$metadata" xmlns:atom="http://www.w3.org/2005/Atom"/>
<atom:link rel="latest-version" href="https://s40lp1.ucc.cit.tum.de/sap/opu/odata/sap/Z_00_124_SS25_RES_SRV/$metadata" xmlns:atom="http://www.w3.org/2005/Atom"/>
</Schema>
</edmx:DataServices>
</edmx:Edmx>

138
webapp/manifest.json Normal file
View File

@ -0,0 +1,138 @@
{
"_version": "1.48.0",
"sap.app": {
"id": "restaurant.z00124ss25restaurant",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "0.0.1"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"resources": "resources.json",
"sourceTemplate": {
"id": "@sap/generator-fiori:basic",
"version": "1.17.5",
"toolsId": "22070856-1a55-41ca-a0d3-83e61f57c569"
},
"dataSources": {
"Z_00_124_SS25_RES_SRV_VAN": {
"uri": "/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Annotations(TechnicalName='Z_00_124_SS25_RES_SRV_VAN',Version='0001')/$value/",
"type": "ODataAnnotation",
"settings": {
"localUri": "localService/mainService/Z_00_124_SS25_RES_SRV_VAN.xml"
}
},
"mainService": {
"uri": "/sap/opu/odata/sap/Z_00_124_SS25_RES_SRV/",
"type": "OData",
"settings": {
"annotations": [
"Z_00_124_SS25_RES_SRV_VAN"
],
"localUri": "localService/mainService/metadata.xml",
"odataVersion": "2.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"flexEnabled": false,
"dependencies": {
"minUI5Version": "1.108.33",
"libs": {
"sap.m": {},
"sap.ui.core": {}
}
},
"contentDensities": {
"compact": true,
"cozy": true
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "restaurant.z00124ss25restaurant.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"preload": true,
"settings": {}
}
},
"resources": {
"css": [
{
"uri": "css/style.css"
}
]
},
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"async": true,
"viewPath": "restaurant.z00124ss25restaurant.view",
"controlAggregation": "pages",
"controlId": "app",
"clearControlAggregation": false
},
"routes": [
{
"name": "RoutetablePos",
"pattern": ":?query:",
"target": [
"TargettablePos"
]
},
{
"name": "RouteManagerReservation",
"pattern": "list",
"target": [
"TargetManagerReservation"
]
}
],
"targets": {
"TargettablePos": {
"viewType": "XML",
"transition": "slide",
"clearControlAggregation": false,
"viewId": "tablePos",
"viewName": "tablePos"
},
"TargetManagerReservation": {
"viewType": "XML",
"transition": "slide",
"clearControlAggregation": false,
"viewId": "manager",
"viewName": "manager"
}
}
},
"rootView": {
"viewName": "restaurant.z00124ss25restaurant.view.App",
"type": "XML",
"async": true,
"id": "App"
}
}
}

20
webapp/model/models.js Normal file
View File

@ -0,0 +1,20 @@
sap.ui.define([
"sap/ui/model/json/JSONModel",
"sap/ui/Device"
],
function (JSONModel, Device) {
"use strict";
return {
/**
* Provides runtime information for the device the UI5 app is running on as a JSONModel.
* @returns {sap.ui.model.json.JSONModel} The device model.
*/
createDeviceModel: function () {
var oModel = new JSONModel(Device);
oModel.setDefaultBindingMode("OneWay");
return oModel;
}
};
});

View File

@ -0,0 +1,13 @@
sap.ui.define([
"sap/ui/test/Opa5",
"./arrangements/Startup",
"./NavigationJourney"
], function (Opa5, Startup) {
"use strict";
Opa5.extendConfig({
arrangements: new Startup(),
viewNamespace: "restaurant.z00124ss25restaurant.view.",
autoWait: true
});
});

View File

@ -0,0 +1,23 @@
/*global QUnit*/
sap.ui.define([
"sap/ui/test/opaQunit",
"./pages/App",
"./pages/tablePos"
], function (opaTest) {
"use strict";
QUnit.module("Navigation Journey");
opaTest("Should see the initial page of the app", function (Given, When, Then) {
// Arrangements
Given.iStartMyApp();
// Assertions
Then.onTheAppPage.iShouldSeeTheApp();
Then.onTheViewPage.iShouldSeeThePageView();
//Cleanup
Then.iTeardownMyApp();
});
});

View File

@ -0,0 +1,25 @@
sap.ui.define([
"sap/ui/test/Opa5"
], function (Opa5) {
"use strict";
return Opa5.extend("integration.arrangements.Startup", {
iStartMyApp: function (oOptionsParameter) {
var oOptions = oOptionsParameter || {};
// start the app with a minimal delay to make tests fast but still async to discover basic timing issues
oOptions.delay = oOptions.delay || 50;
// start the app UI component
this.iStartMyUIComponent({
componentConfig: {
name: "restaurant.z00124ss25restaurant",
async: true
},
hash: oOptions.hash,
autoWait: oOptions.autoWait
});
}
});
});

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Integration tests for Basic Template</title>
<script
id="sap-ui-bootstrap"
src="../../resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"restaurant.z00124ss25restaurant": "../../",
"integration": "./"
}'
data-sap-ui-animation="false"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-preload="async"
data-sap-ui-oninit="module:integration/opaTests.qunit">
</script>
<link rel="stylesheet" type="text/css" href="../../resources/sap/ui/thirdparty/qunit-2.css">
<script src="../../resources/sap/ui/thirdparty/qunit-2.js"></script>
<script src="../../resources/sap/ui/qunit/qunit-junit.js"></script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>

View File

@ -0,0 +1,7 @@
/* global QUnit */
sap.ui.require(["restaurant/z00124ss25restaurant/test/integration/AllJourneys"
], function () {
QUnit.config.autostart = false;
QUnit.start();
});

View File

@ -0,0 +1,28 @@
sap.ui.define([
"sap/ui/test/Opa5"
], function (Opa5) {
"use strict";
var sViewName = "App";
Opa5.createPageObjects({
onTheAppPage: {
actions: {},
assertions: {
iShouldSeeTheApp: function () {
return this.waitFor({
id: "app",
viewName: sViewName,
success: function () {
Opa5.assert.ok(true, "The " + sViewName + " view is displayed");
},
errorMessage: "Did not find the " + sViewName + " view"
});
}
}
}
});
});

View File

@ -0,0 +1,28 @@
sap.ui.define([
"sap/ui/test/Opa5"
], function (Opa5) {
"use strict";
var sViewName = "tablePos";
Opa5.createPageObjects({
onTheViewPage: {
actions: {},
assertions: {
iShouldSeeThePageView: function () {
return this.waitFor({
id: "page",
viewName: sViewName,
success: function () {
Opa5.assert.ok(true, "The " + sViewName + " view is displayed");
},
errorMessage: "Did not find the " + sViewName + " view"
});
}
}
}
});
});

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<head>
<title>QUnit test suite</title>
<script src="../resources/sap/ui/qunit/qunit-redirect.js"></script>
<script src="testsuite.qunit.js" data-sap-ui-testsuite></script>
</head>
<body></body>
</html>

View File

@ -0,0 +1,16 @@
/* global window, parent, location */
// eslint-disable-next-line fiori-custom/sap-no-global-define
window.suite = function() {
"use strict";
// eslint-disable-next-line
var oSuite = new parent.jsUnitTestSuite(),
sContextPath = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);
oSuite.addTestPage(sContextPath + 'unit/unitTests.qunit.html');
oSuite.addTestPage(sContextPath + 'integration/opaTests.qunit.html');
return oSuite;
};

View File

@ -0,0 +1,5 @@
sap.ui.define([
"restaurant/z00124ss25restaurant/test/unit/controller/tablePos.controller"
], function () {
"use strict";
});

View File

@ -0,0 +1,16 @@
/*global QUnit*/
sap.ui.define([
"restaurant/z00124ss25restaurant/controller/tablePos.controller"
], function (Controller) {
"use strict";
QUnit.module("tablePos Controller");
QUnit.test("I should test the tablePos controller", function (assert) {
var oAppController = new Controller();
oAppController.onInit();
assert.ok(oAppController);
});
});

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Unit tests for restaurant.z00124ss25restaurant</title>
<script
id="sap-ui-bootstrap"
src="../../resources/sap-ui-core.js"
data-sap-ui-resourceroots='{
"restaurant/z00124ss25restaurant": "../../",
"unit": "."
}'
data-sap-ui-async="true"
data-sap-ui-oninit="module:unit/unitTests.qunit">
</script>
<link rel="stylesheet" type="text/css" href="../../resources/sap/ui/thirdparty/qunit-2.css">
<script src="../../resources/sap/ui/thirdparty/qunit-2.js"></script>
<script src="../../resources/sap/ui/qunit/qunit-junit.js"></script>
<script src="../../resources/sap/ui/qunit/qunit-coverage.js"></script>
<script src="../../resources/sap/ui/thirdparty/sinon.js"></script>
<script src="../../resources/sap/ui/thirdparty/sinon-qunit.js"></script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>

View File

@ -0,0 +1,12 @@
/* global QUnit */
QUnit.config.autostart = false;
sap.ui.getCore().attachInit(function () {
"use strict";
sap.ui.require([
"restaurant/z00124ss25restaurant/test/unit/AllTests"
], function () {
QUnit.start();
});
});

13
webapp/utils/Utils.js Normal file
View File

@ -0,0 +1,13 @@
sap.ui.define([], function () {
"use strict";
return {
padAndEncodeId: function (id) {
return encodeURIComponent(id.padStart(9, "%20"));
},
exampleUtility: function () {
return "Hello from utility!";
}
};
});

7
webapp/view/App.view.xml Normal file
View File

@ -0,0 +1,7 @@
<mvc:View controllerName="restaurant.z00124ss25restaurant.controller.App"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:mvc="sap.ui.core.mvc" displayBlock="true"
xmlns="sap.m">
<App id="app">
</App>
</mvc:View>

View File

@ -0,0 +1,149 @@
<core:FragmentDefinition
xmlns="sap.m"
xmlns:f="sap.ui.layout.form"
xmlns:core="sap.ui.core"
xmlns:gantt="sap.gantt"
xmlns:table="sap.ui.table"
>
<f:SimpleForm
id="tableForm"
editable="true"
layout="ResponsiveGridLayout"
labelSpanXL="4"
labelSpanL="4"
labelSpanM="4"
labelSpanS="12"
adjustLabelSpan="false"
emptySpanXL="0"
emptySpanL="0"
emptySpanM="0"
emptySpanS="0"
columnsXL="1"
columnsL="1"
columnsM="1"
singleContainerFullSize="false"
class="sapUiContentPadding"
>
<f:content>
<core:Title text="Table Management" />
<Label
text="Decoration"
design="Bold"
required="true"
/>
<Select
id="decoration"
items="{
path: '/Z_00_124_SS25_DECO'
}"
change=".onTableChange"
>
<core:Item
key="{Decoration}"
text="{Decoration}"
/>
</Select>
<Label
text="Location"
design="Bold"
required="true"
labelFor="location"
/>
<Select
id="location"
items="{
path: '/Z_00_124_SS25_LOC'
}"
change=".onTableChange"
>
<core:Item
key="{Location}"
text="{Location}"
/>
</Select>
<Label
text="Number of Seats"
design="Bold"
required="true"
/>
<StepInput
id="numofseats"
required="true"
min="1"
max="12"
step="1"
value="1"
/>
<!-- Buttons section -->
<HBox justifyContent="End">
<Button
text="Save"
type="Emphasized"
press=".onCreateTable"
/>
<Button
text="Cancel"
press=".onCancelPress"
class="sapUiSmallMarginBegin"
/>
</HBox>
</f:content>
</f:SimpleForm>
<Panel
headerText="Existing Tables"
expandable="true"
expanded="true"
class="sapUiMediumMarginTop"
>
<Table
id="tableList"
items="{ path: '/tablePos' }"
>
<columns>
<Column>
<Text text="Table ID" />
</Column>
<Column>
<Text text="Decoration" />
</Column>
<Column>
<Text text="Location" />
</Column>
<Column>
<Text text="Seats Count" />
</Column>
<Column>
<Text text="Actions" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{TableId}" />
<Text text="{Decoration}" />
<Text text="{Location}" />
<Text text="{NumberOfSeats}" />
<Button
icon="sap-icon://edit"
tooltip="Edit"
type="Transparent"
press=".onEditTable"
/>
</cells>
</ColumnListItem>
</items>
</Table>
</Panel>
<!-- <Panel
headerText="Existing Tables"
expandable="true"
expanded="true"
class="sapUiMediumMarginTop"
>
</Panel> -->
</core:FragmentDefinition>

View File

@ -0,0 +1,91 @@
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:viz="sap.viz.ui5.controls"
xmlns:viz.data="sap.viz.ui5.data"
xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds"
>
<VBox
class="sapUiContentPadding"
width="100%"
spacing="Large"
height="auto"
>
<!-- Heading -->
<Title
text="Dashboard"
class="sapUiMediumMarginBottom"
/>
<!-- Summary Cards -->
<HBox
justifyContent="SpaceAround"
width="100%"
class="sapUiSmallMarginBottom"
height="auto"
>
<!-- Enhanced VBox with proper height and padding -->
<VBox alignItems="Center" class="dashboardCardReservation" height="200px" justifyContent="SpaceAround">
<ObjectStatus
text="Reservations"
state="Success"
icon="sap-icon://appointment"
class="dashboardCardFontSmall"
/>
<ObjectNumber
number="{dashboard>/totalReservations}"
unit="Total"
class="dashboardCardFontLarge"
emphasized="true"
/>
<HBox height="10px" /> <!-- Spacer -->
</VBox>
<!-- Enhanced VBox with proper height and padding -->
<VBox alignItems="Center" class="dashboardCardRevenue" height="200px" justifyContent="SpaceAround">
<ObjectStatus
text="Revenue"
state="Information"
icon="sap-icon://lead"
class="dashboardCardFontSmall"
/>
<ObjectNumber
number="{dashboard>/totalRevenue}"
unit="EUR"
class="dashboardCardFontLarge"
emphasized="true"
/>
<HBox height="10px" /> <!-- Spacer -->
</VBox>
</HBox>
<!-- Combined Column + Line Chart -->
<viz:VizFrame
id="idComboChart"
width="100%"
height="400px"
uiConfig="{applicationSet:'fiori'}"
vizType="dual_combination"
vizProperties="{ title: {text : 'Overall Status', visible : true}}"
>
<viz:dataset>
<viz.data:FlattenedDataset
data="{dashboard>/monthlyData}"
>
<viz.data:dimensions>
<viz.data:DimensionDefinition name="Month" value="{dashboard>Month}" />
</viz.data:dimensions>
<viz.data:measures>
<viz.data:MeasureDefinition name="Reservations" value="{dashboard>Count}" />
<viz.data:MeasureDefinition name="Revenue" value="{dashboard>Revenue}" />
</viz.data:measures>
</viz.data:FlattenedDataset>
</viz:dataset>
<viz:feeds>
<viz.feeds:FeedItem uid="valueAxis" type="Measure" values="Reservations" />
<viz.feeds:FeedItem uid="valueAxis2" type="Measure" values="Revenue" />
<viz.feeds:FeedItem uid="categoryAxis" type="Dimension" values="Month" />
</viz:feeds>
</viz:VizFrame>
</VBox>
</core:FragmentDefinition>

View File

@ -0,0 +1,125 @@
<core:FragmentDefinition
xmlns="sap.ui.table"
xmlns:m="sap.m"
xmlns:core="sap.ui.core"
>
<Table
id="reservationTable"
selectionMode="MultiToggle"
enableSelectAll="false"
rows="{
path: '/reservationPos',
parameters: {operationMode: 'Server'}
}"
threshold="15"
enableBusyIndicator="true"
ariaLabelledBy="title"
width="100%"
>
<noData>
<m:BusyIndicator class="sapUiMediumMargin" />
</noData>
<extension>
<m:OverflowToolbar style="Clear">
<!-- Left section with title -->
<m:Title
id="title"
text="Reservation Lists"
/>
<!-- Creates space that pushes the following items to the right -->
<m:ToolbarSpacer />
<!-- Right section with controls -->
<m:HBox alignItems="Center" justifyContent="End">
<m:items>
<m:Button
icon="sap-icon://refresh"
tooltip="Reinitialize Model"
press="onModelRefresh"
class="sapUiSmallMarginEnd"
/>
<m:SearchField
id="reservationSearchField"
width="15rem"
placeholder="Search"
liveChange="onSearchLiveChange"
search="onSearch"
showSearchButton="true"
/>
</m:items>
</m:HBox>
</m:OverflowToolbar>
</extension>
<columns>
<Column
sortProperty="ReservationId"
filterProperty="ReservationId"
autoResizable="true"
>
<m:Label text="Reservation Name" />
<template>
<m:Text
text="{ReservationName}"
wrapping="false"
/>
</template>
</Column>
<Column
sortProperty="NumOfGuests"
filterProperty="NumOfGuests"
autoResizable="true"
>
<m:Label text="Number of Guests" />
<template>
<m:Text
text="{NumOfGuests}"
wrapping="false"
/>
</template>
</Column>
<Column
sortProperty="BookedDate"
filterProperty="BookedDate"
autoResizable="true"
>
<m:Label text="Booked Date" />
<template>
<m:Text
text="{path: 'BookedDate', formatter: '.formatDate'}"
wrapping="false"
/>
</template>
</Column>
<Column
sortProperty="BookedTime"
filterProperty="BookedTime"
autoResizable="true"
>
<m:Label text="Booked Time" />
<template>
<m:Text
text="{path: 'BookedTime', formatter: '.formatTime'}"
/>
</template>
</Column>
<Column
sortProperty="BookedPeriod"
filterProperty="BookedPeriod"
autoResizable="true"
>
<m:Label text="Booked Period" />
<template>
<m:Text
text="{BookedPeriod}"
wrapping="false"
/>
</template>
</Column>
</columns>
</Table>
</core:FragmentDefinition>

View File

@ -0,0 +1,70 @@
<mvc:View
controllerName="restaurant.z00124ss25restaurant.controller.manager"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
xmlns:core="sap.ui.core"
displayBlock="true"
>
<Page
title="Restaurant Management"
enableScrolling="false"
class="sapUiContentPadding"
>
<content>
<IconTabBar
id="idIconTabBar"
expanded="{device>/isNoPhone}"
class="sapUiResponsiveContentPadding"
stretchContentHeight="true"
applyContentPadding="false"
backgroundDesign="Transparent"
headerBackgroundDesign="Transparent"
selectedKey="tabDashboard"
select="onTabSelect"
>
<items>
<!-- Dashboard Tab -->
<IconTabFilter
id="tabDashboard"
key="dashboard"
text="Dashboard"
icon="sap-icon://bbyd-dashboard"
>
<!-- Fragment placeholder - will be loaded in controller -->
<core:Fragment
fragmentName="restaurant.z00124ss25restaurant.view.fragments.ViewDashboard"
type="XML"
/>
</IconTabFilter>
<!-- View Reservation Tab -->
<IconTabFilter
id="tabViewReservation"
key="viewReservation"
text="View Reservation"
icon="sap-icon://list"
>
<!-- Fragment placeholder - will be loaded in controller -->
<core:Fragment
fragmentName="restaurant.z00124ss25restaurant.view.fragments.viewReservation"
type="XML"
/>
</IconTabFilter>
<!-- Create Table Tab -->
<IconTabFilter
id="tabCreateTable"
key="createTable"
text="Table Management"
icon="sap-icon://action-settings"
>
<!-- Fragment placeholder - will be loaded in controller -->
<core:Fragment
fragmentName="restaurant.z00124ss25restaurant.view.fragments.CreateTable"
type="XML"
/>
</IconTabFilter>
</items>
</IconTabBar>
</content>
</Page>
</mvc:View>

View File

@ -0,0 +1,164 @@
<mvc:View
controllerName="restaurant.z00124ss25restaurant.controller.tablePos"
xmlns:mvc="sap.ui.core.mvc"
displayBlock="true"
xmlns="sap.m"
xmlns:f="sap.ui.layout.form"
xmlns:core="sap.ui.core"
xmlns:l="sap.ui.layout"
>
<Page
id="page"
title="{i18n>title}"
>
<headerContent>
<Button
icon="sap-icon://employee"
text="Manager"
type="Transparent"
press="onManagerPress"
/>
</headerContent>
<content>
<f:SimpleForm
id="reservationForm"
editable="true"
layout="ResponsiveGridLayout"
labelSpanXL="4"
labelSpanL="4"
labelSpanM="4"
labelSpanS="12"
adjustLabelSpan="false"
emptySpanXL="0"
emptySpanL="0"
emptySpanM="0"
emptySpanS="0"
columnsXL="1"
columnsL="1"
columnsM="1"
singleContainerFullSize="false"
class="sapUiContentPadding"
>
<f:content>
<core:Title text="Reservation Details" />
<Label
text="Reservation Name"
design="Bold"
required="true"
/>
<Input
id="res-name"
required="true"
placeholder="Enter name for reservation"
maxLength="50"
/>
<Label
text="Number of Guests"
design="Bold"
required="true"
/>
<StepInput
id="num-guests"
required="true"
min="1"
max="12"
step="1"
value="1"
/>
<Label
text="Reservation Date"
labelFor="booked-date"
design="Bold"
/>
<DatePicker
id="booked-date"
class="sapUiSmallMarginBottom"
/>
<Label
text="Reservation Time"
labelFor="booked-time"
design="Bold"
required="true"
/>
<TimePicker
id="booked-time"
valueFormat="HH:mm"
displayFormat="HH:mm"
placeholder="Enter Time"
required="true"
minutesStep="15"
change="handleDateTimeChange"
/>
<Label
text="Available Tables"
design="Bold"
required="true"
/>
<Select
id="table-id"
items="{
path: '/tablePos'
}"
change=".onTableChange"
>
<core:Item
key="{TableId}"
text="{NumberOfSeats} - {Location} - {Decoration}"
/>
</Select>
<Label
text="Booked Period (minutes)"
design="Bold"
required="true"
/>
<StepInput
id="booked-period"
required="true"
min="30"
max="240"
step="15"
value="120"
/>
<Label text="Comments" />
<TextArea
id="comments"
rows="4"
width="100%"
growing="true"
growingMaxLines="10"
placeholder="Enter any special requests or additional information"
/>
</f:content>
</f:SimpleForm>
<l:Grid
defaultSpan="L12 M12 S12"
class="sapUiContentPadding"
>
<HBox
justifyContent="End"
width="100%"
>
<Button
text="Save Reservation"
type="Emphasized"
class="sapUiSmallMarginEnd"
press="onSaveReservation"
/>
<Button
text="Cancel"
type="Reject"
press="onCancelPress"
/>
</HBox>
</l:Grid>
</content>
</Page>
</mvc:View>