Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
91380c05a8 | |||
be09ed2f30 | |||
476f91f7cf | |||
![]() |
f0c738362a | ||
0d236677d4 | |||
252eac442e | |||
8793f9736a |
39 changed files with 1028 additions and 201 deletions
99
README.md
Normal file
99
README.md
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
# 🍸 Saufen - The Fabulous Drink Inventory System 🏳️🌈
|
||||||
|
|
||||||
|
*Because every fabulous party needs a fabulous drink management system!*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✨ What's This Fabulousness All About? ✨
|
||||||
|
|
||||||
|
Welcome to **Saufen** (German for "drinking" - because we're fancy like that! 💅), the most fabulous drink inventory management system that ever graced the internet!
|
||||||
|
|
||||||
|
This isn't just any boring inventory system - oh no, honey! This is where **gay excellence meets drink management** in the most spectacular way possible. We're talking about tracking your favorite cocktails, managing your bar stock, and making sure you never run out of the good stuff when the party gets started! 🎉
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎭 The Main Characters (What This Bad Bitch Does) 🎭
|
||||||
|
|
||||||
|
### 🍹 **Drink Type Management**
|
||||||
|
- Add all your favorite drinks with fabulous names and descriptions
|
||||||
|
- Set your desired stock levels (because running out of tequila is a CRIME!)
|
||||||
|
- Track current inventory like the organized queen you are
|
||||||
|
|
||||||
|
### 📋 **Order Management**
|
||||||
|
- Create fabulous orders when your stock gets low
|
||||||
|
- Track order status from "new" to "delivered" (the journey of a true icon!)
|
||||||
|
- Never let your bar run dry again!
|
||||||
|
|
||||||
|
### 🚨 **Low Stock Alerts**
|
||||||
|
- Get dramatic alerts when your favorite drinks are running low
|
||||||
|
- Because we all know that empty vodka bottle is a tragedy waiting to happen!
|
||||||
|
|
||||||
|
### 🎨 **Fabulous Fun Facts**
|
||||||
|
- Learn amazing drink trivia while managing your inventory
|
||||||
|
- Did you know the Cosmopolitan became popular thanks to 'Sex and the City'? ICONIC!
|
||||||
|
- Random fabulous facts appear on every page because education is fierce! 💅
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌈 Why This Project is Absolutely Everything 🌈
|
||||||
|
|
||||||
|
This project was born from the simple truth that **every fabulous party needs fabulous organization**. Whether you're running a gay bar, hosting the party of the century, or just want to keep track of your personal drink collection, Saufen has got your back!
|
||||||
|
|
||||||
|
It's built with love, fabulousness, and the understanding that sometimes you need to know exactly how many bottles of champagne you have before the drag show starts! 🎭
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎪 The Vibe We're Going For 🎪
|
||||||
|
|
||||||
|
Imagine if **RuPaul's Drag Race** and **Bar Rescue** had a beautiful baby, and that baby was obsessed with organization and fabulousness. That's Saufen!
|
||||||
|
|
||||||
|
We're talking:
|
||||||
|
- ✨ Rainbow aesthetics
|
||||||
|
- 💅 Fabulous drink facts
|
||||||
|
- 🎭 Dramatic low stock alerts
|
||||||
|
- 🍸 Comprehensive drink management
|
||||||
|
- 🏳️🌈 LGBTQ+ friendly vibes throughout
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎊 How to Get This Party Started 🎊
|
||||||
|
|
||||||
|
1. **Clone this fabulous repository**
|
||||||
|
2. **Install the dependencies** (because even queens need their tools!)
|
||||||
|
3. **Set up your database** (where all the magic happens)
|
||||||
|
4. **Start adding your drinks** (the fun part!)
|
||||||
|
5. **Let the fabulousness begin!** 🎉
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏆 What Makes This Project Special 🏆
|
||||||
|
|
||||||
|
- **Gay Excellence**: Built with love for the LGBTQ+ community
|
||||||
|
- **Fabulous Design**: Because boring interfaces are so last season
|
||||||
|
- **Smart Alerts**: Never run out of your favorite drinks again
|
||||||
|
- **Fun Facts**: Learn while you manage (education is fierce!)
|
||||||
|
- **Easy to Use**: So easy, even your straight friends can figure it out! 😘
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎭 The Story Behind the Name 🎭
|
||||||
|
|
||||||
|
"Saufen" is German for "drinking" - because we're international queens who appreciate a good cultural reference! Plus, it sounds fabulous when you say it with the right accent. Try it: "Saufen" - see? Fabulous!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌟 Special Thanks 🌟
|
||||||
|
|
||||||
|
This project was created with love, fabulousness, and the understanding that every good party needs good organization. Shoutout to all the fabulous people who inspired this project and to everyone who believes that drink management can be both functional AND fabulous!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎪 Final Thoughts 🎪
|
||||||
|
|
||||||
|
Remember, darlings: **Life is too short for bad drinks and bad organization**. With Saufen, you get the best of both worlds - fabulous drink management and fabulous vibes!
|
||||||
|
|
||||||
|
Now go forth and slay that inventory management! 💅✨
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Built with love, fabulousness, and the understanding that every queen needs her tools!* 🏳️🌈✨
|
|
@ -10,11 +10,11 @@ import './styles/modes.css';
|
||||||
import './styles/emoji-footprint.css';
|
import './styles/emoji-footprint.css';
|
||||||
|
|
||||||
// Import modules
|
// Import modules
|
||||||
import './theme.js';
|
import './javascript/theme.js';
|
||||||
import './emoji-footprint.js';
|
import './javascript/emoji-footprint.js';
|
||||||
import './modes.js';
|
import './javascript/modes.js';
|
||||||
import { initNumberInputs } from './numberInputs.js';
|
import { initNumberInputs } from './javascript/numberInputs.js';
|
||||||
import { initRadioState } from './radioState.js';
|
import { initRadioState } from './javascript/radioState.js';
|
||||||
|
|
||||||
// Initialize everything when DOM is ready
|
// Initialize everything when DOM is ready
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
|
@ -1,7 +1,19 @@
|
||||||
// Bonkers mode functionality
|
// Bonkers mode functionality
|
||||||
|
function setEmojiLevelClass(mode) {
|
||||||
|
document.body.classList.remove('emoji-normal', 'emoji-enhanced', 'emoji-bonkers');
|
||||||
|
if (mode === 'bonkers') {
|
||||||
|
document.body.classList.add('emoji-bonkers');
|
||||||
|
} else if (mode === 'enhanced') {
|
||||||
|
document.body.classList.add('emoji-enhanced');
|
||||||
|
} else {
|
||||||
|
document.body.classList.add('emoji-normal');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function initBonkersMode() {
|
function initBonkersMode() {
|
||||||
// Check if we're in bonkers mode
|
// Check if we're in bonkers mode
|
||||||
const currentMode = document.documentElement.getAttribute('data-website-mode');
|
const currentMode = document.documentElement.getAttribute('data-website-mode');
|
||||||
|
setEmojiLevelClass(currentMode);
|
||||||
|
|
||||||
if (currentMode === 'bonkers') {
|
if (currentMode === 'bonkers') {
|
||||||
// Apply bonkers mode immediately
|
// Apply bonkers mode immediately
|
||||||
|
@ -48,7 +60,7 @@ function createExtraSparkles() {
|
||||||
// Continue creating extra sparkles while in bonkers mode
|
// Continue creating extra sparkles while in bonkers mode
|
||||||
const newMode = document.documentElement.getAttribute('data-website-mode');
|
const newMode = document.documentElement.getAttribute('data-website-mode');
|
||||||
if (newMode === 'bonkers') {
|
if (newMode === 'bonkers') {
|
||||||
setTimeout(() => createExtraSparkles(), 150);
|
setTimeout(() => createExtraSparkles(), 75);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +72,8 @@ function createSlayEffects() {
|
||||||
// Create floating "SLAY" text effects
|
// Create floating "SLAY" text effects
|
||||||
const slayWords = [
|
const slayWords = [
|
||||||
'SLAY', 'QUEEN', 'FABULOUS', 'ICONIC', 'LEGENDARY', 'STUNNING', 'GORGEOUS', 'FLAWLESS',
|
'SLAY', 'QUEEN', 'FABULOUS', 'ICONIC', 'LEGENDARY', 'STUNNING', 'GORGEOUS', 'FLAWLESS',
|
||||||
'DAZZLING', 'RADIANT', 'BREATHTAKING', 'EXQUISITE', 'DIVINE'
|
'DAZZLING', 'RADIANT', 'BREATHTAKING', 'EXQUISITE', 'DIVINE', 'HOT', 'SEXY', 'SMOOTH',
|
||||||
|
'xoxo',
|
||||||
];
|
];
|
||||||
const slayElement = document.createElement('div');
|
const slayElement = document.createElement('div');
|
||||||
slayElement.className = 'slay-text';
|
slayElement.className = 'slay-text';
|
||||||
|
@ -78,7 +91,7 @@ function createSlayEffects() {
|
||||||
// Continue creating slay effects while in bonkers mode
|
// Continue creating slay effects while in bonkers mode
|
||||||
const newMode = document.documentElement.getAttribute('data-website-mode');
|
const newMode = document.documentElement.getAttribute('data-website-mode');
|
||||||
if (newMode === 'bonkers') {
|
if (newMode === 'bonkers') {
|
||||||
setTimeout(() => createSlayEffects(), 800);
|
setTimeout(() => createSlayEffects(), 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +105,7 @@ function watchModeChanges() {
|
||||||
|
|
||||||
if (newMode === 'bonkers') {
|
if (newMode === 'bonkers') {
|
||||||
document.body.classList.add('bonkers-mode');
|
document.body.classList.add('bonkers-mode');
|
||||||
|
setEmojiLevelClass(newMode);
|
||||||
|
|
||||||
// Start the fabulous effects
|
// Start the fabulous effects
|
||||||
createExtraSparkles();
|
createExtraSparkles();
|
||||||
|
@ -100,6 +114,7 @@ function watchModeChanges() {
|
||||||
console.log('🌈✨ Switched to bonkers mode! ✨🌈');
|
console.log('🌈✨ Switched to bonkers mode! ✨🌈');
|
||||||
} else {
|
} else {
|
||||||
document.body.classList.remove('bonkers-mode');
|
document.body.classList.remove('bonkers-mode');
|
||||||
|
setEmojiLevelClass(newMode);
|
||||||
console.log(`😴 Switched to ${newMode} mode`);
|
console.log(`😴 Switched to ${newMode} mode`);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -118,3 +118,62 @@
|
||||||
--bs-warning-bg-subtle: #3E3D1C;
|
--bs-warning-bg-subtle: #3E3D1C;
|
||||||
--bs-danger-bg-subtle: #520E0E;
|
--bs-danger-bg-subtle: #520E0E;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* === EMOJI LEVELS === */
|
||||||
|
.emoji-normal .emoji-normal { display: inline; }
|
||||||
|
.emoji-normal .emoji-enhanced,
|
||||||
|
.emoji-normal .emoji-bonkers { display: none; }
|
||||||
|
|
||||||
|
.emoji-enhanced .emoji-enhanced { display: inline; }
|
||||||
|
.emoji-enhanced .emoji-normal,
|
||||||
|
.emoji-enhanced .emoji-bonkers { display: none; }
|
||||||
|
|
||||||
|
.emoji-bonkers .emoji-bonkers { display: inline; }
|
||||||
|
.emoji-bonkers .emoji-normal,
|
||||||
|
.emoji-bonkers .emoji-enhanced { display: none; }
|
||||||
|
/*
|
||||||
|
* =================================================================================================
|
||||||
|
* 🌈 RAINBOW PRIDE ELEMENTS 🌈
|
||||||
|
*
|
||||||
|
* Fabulous rainbow-themed elements to celebrate diversity and pride!
|
||||||
|
* =================================================================================================
|
||||||
|
*/
|
||||||
|
.bg-rainbow {
|
||||||
|
background: linear-gradient(
|
||||||
|
to right,
|
||||||
|
#FF5757, /* Red */
|
||||||
|
#FFBD59, /* Orange */
|
||||||
|
#F9F871, /* Yellow */
|
||||||
|
#CFFF50, /* Green */
|
||||||
|
#00F5D4, /* Teal */
|
||||||
|
#00A9E0, /* Blue */
|
||||||
|
#A328D6 /* Purple */
|
||||||
|
);
|
||||||
|
color: white;
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
||||||
|
font-weight: bold;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fun-fact {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
line-height: 1.6;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add a subtle rainbow border to the fun facts card */
|
||||||
|
.card:has(.fun-fact) {
|
||||||
|
border-width: 2px;
|
||||||
|
border-style: solid;
|
||||||
|
border-image: linear-gradient(
|
||||||
|
to right,
|
||||||
|
#FF5757, /* Red */
|
||||||
|
#FFBD59, /* Orange */
|
||||||
|
#F9F871, /* Yellow */
|
||||||
|
#CFFF50, /* Green */
|
||||||
|
#00F5D4, /* Teal */
|
||||||
|
#00A9E0, /* Blue */
|
||||||
|
#A328D6 /* Purple */
|
||||||
|
) 1;
|
||||||
|
box-shadow: 0 4px 15px rgba(163, 40, 214, 0.2);
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
"symfony/flex": "^2.7.1",
|
"symfony/flex": "^2.7.1",
|
||||||
"symfony/form": "7.3.*",
|
"symfony/form": "7.3.*",
|
||||||
"symfony/framework-bundle": "7.3.*",
|
"symfony/framework-bundle": "7.3.*",
|
||||||
|
"symfony/monolog-bundle": "^3.10",
|
||||||
"symfony/runtime": "7.3.*",
|
"symfony/runtime": "7.3.*",
|
||||||
"symfony/security-csrf": "7.3.*",
|
"symfony/security-csrf": "7.3.*",
|
||||||
"symfony/twig-bundle": "7.3.*",
|
"symfony/twig-bundle": "7.3.*",
|
||||||
|
|
264
composer.lock
generated
264
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "1fe9f53b59a2962c86116a6fed3b749e",
|
"content-hash": "ff70516970cc999b1ffcfbb3ec084ee4",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "composer/semver",
|
"name": "composer/semver",
|
||||||
|
@ -1304,6 +1304,109 @@
|
||||||
},
|
},
|
||||||
"time": "2025-01-24T11:45:48+00:00"
|
"time": "2025-01-24T11:45:48+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "monolog/monolog",
|
||||||
|
"version": "3.9.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/Seldaek/monolog.git",
|
||||||
|
"reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
|
||||||
|
"reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.1",
|
||||||
|
"psr/log": "^2.0 || ^3.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"psr/log-implementation": "3.0.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"aws/aws-sdk-php": "^3.0",
|
||||||
|
"doctrine/couchdb": "~1.0@dev",
|
||||||
|
"elasticsearch/elasticsearch": "^7 || ^8",
|
||||||
|
"ext-json": "*",
|
||||||
|
"graylog2/gelf-php": "^1.4.2 || ^2.0",
|
||||||
|
"guzzlehttp/guzzle": "^7.4.5",
|
||||||
|
"guzzlehttp/psr7": "^2.2",
|
||||||
|
"mongodb/mongodb": "^1.8",
|
||||||
|
"php-amqplib/php-amqplib": "~2.4 || ^3",
|
||||||
|
"php-console/php-console": "^3.1.8",
|
||||||
|
"phpstan/phpstan": "^2",
|
||||||
|
"phpstan/phpstan-deprecation-rules": "^2",
|
||||||
|
"phpstan/phpstan-strict-rules": "^2",
|
||||||
|
"phpunit/phpunit": "^10.5.17 || ^11.0.7",
|
||||||
|
"predis/predis": "^1.1 || ^2",
|
||||||
|
"rollbar/rollbar": "^4.0",
|
||||||
|
"ruflin/elastica": "^7 || ^8",
|
||||||
|
"symfony/mailer": "^5.4 || ^6",
|
||||||
|
"symfony/mime": "^5.4 || ^6"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
|
||||||
|
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
|
||||||
|
"elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
|
||||||
|
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
|
||||||
|
"ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
|
||||||
|
"ext-mbstring": "Allow to work properly with unicode symbols",
|
||||||
|
"ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
|
||||||
|
"ext-openssl": "Required to send log messages using SSL",
|
||||||
|
"ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
|
||||||
|
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
|
||||||
|
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
|
||||||
|
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
|
||||||
|
"rollbar/rollbar": "Allow sending log messages to Rollbar",
|
||||||
|
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Monolog\\": "src/Monolog"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Jordi Boggiano",
|
||||||
|
"email": "j.boggiano@seld.be",
|
||||||
|
"homepage": "https://seld.be"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
|
||||||
|
"homepage": "https://github.com/Seldaek/monolog",
|
||||||
|
"keywords": [
|
||||||
|
"log",
|
||||||
|
"logging",
|
||||||
|
"psr-3"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/Seldaek/monolog/issues",
|
||||||
|
"source": "https://github.com/Seldaek/monolog/tree/3.9.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Seldaek",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-03-24T10:02:05+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/cache",
|
"name": "psr/cache",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
|
@ -3432,6 +3535,165 @@
|
||||||
],
|
],
|
||||||
"time": "2025-05-29T07:47:32+00:00"
|
"time": "2025-05-29T07:47:32+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/monolog-bridge",
|
||||||
|
"version": "v7.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/monolog-bridge.git",
|
||||||
|
"reference": "1b188c8abbbef25b111da878797514b7a8d33990"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/1b188c8abbbef25b111da878797514b7a8d33990",
|
||||||
|
"reference": "1b188c8abbbef25b111da878797514b7a8d33990",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"monolog/monolog": "^3",
|
||||||
|
"php": ">=8.2",
|
||||||
|
"symfony/http-kernel": "^6.4|^7.0",
|
||||||
|
"symfony/service-contracts": "^2.5|^3"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/console": "<6.4",
|
||||||
|
"symfony/http-foundation": "<6.4",
|
||||||
|
"symfony/security-core": "<6.4"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"symfony/console": "^6.4|^7.0",
|
||||||
|
"symfony/http-client": "^6.4|^7.0",
|
||||||
|
"symfony/mailer": "^6.4|^7.0",
|
||||||
|
"symfony/messenger": "^6.4|^7.0",
|
||||||
|
"symfony/mime": "^6.4|^7.0",
|
||||||
|
"symfony/security-core": "^6.4|^7.0",
|
||||||
|
"symfony/var-dumper": "^6.4|^7.0"
|
||||||
|
},
|
||||||
|
"type": "symfony-bridge",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Bridge\\Monolog\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Provides integration for Monolog with various Symfony components",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/monolog-bridge/tree/v7.3.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-03-21T12:17:46+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/monolog-bundle",
|
||||||
|
"version": "v3.10.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/monolog-bundle.git",
|
||||||
|
"reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181",
|
||||||
|
"reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"monolog/monolog": "^1.25.1 || ^2.0 || ^3.0",
|
||||||
|
"php": ">=7.2.5",
|
||||||
|
"symfony/config": "^5.4 || ^6.0 || ^7.0",
|
||||||
|
"symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
|
||||||
|
"symfony/http-kernel": "^5.4 || ^6.0 || ^7.0",
|
||||||
|
"symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"symfony/console": "^5.4 || ^6.0 || ^7.0",
|
||||||
|
"symfony/phpunit-bridge": "^6.3 || ^7.0",
|
||||||
|
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
|
||||||
|
},
|
||||||
|
"type": "symfony-bundle",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Bundle\\MonologBundle\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony MonologBundle",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"log",
|
||||||
|
"logging"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/symfony/monolog-bundle/issues",
|
||||||
|
"source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-11-06T17:08:13+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/options-resolver",
|
"name": "symfony/options-resolver",
|
||||||
"version": "v7.3.0",
|
"version": "v7.3.0",
|
||||||
|
|
|
@ -9,6 +9,7 @@ use Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle;
|
||||||
use Symfony\Bundle\MakerBundle\MakerBundle;
|
use Symfony\Bundle\MakerBundle\MakerBundle;
|
||||||
use Symfony\Bundle\WebProfilerBundle\WebProfilerBundle;
|
use Symfony\Bundle\WebProfilerBundle\WebProfilerBundle;
|
||||||
use Twig\Extra\TwigExtraBundle\TwigExtraBundle;
|
use Twig\Extra\TwigExtraBundle\TwigExtraBundle;
|
||||||
|
use Symfony\Bundle\MonologBundle\MonologBundle;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
FrameworkBundle::class => [
|
FrameworkBundle::class => [
|
||||||
|
@ -33,4 +34,7 @@ return [
|
||||||
TwigExtraBundle::class => [
|
TwigExtraBundle::class => [
|
||||||
'all' => true,
|
'all' => true,
|
||||||
],
|
],
|
||||||
|
MonologBundle::class => [
|
||||||
|
'all' => true,
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
97
config/packages/monolog.php
Normal file
97
config/packages/monolog.php
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||||
|
|
||||||
|
return static function (ContainerConfigurator $containerConfigurator): void {
|
||||||
|
$containerConfigurator->extension('monolog', [
|
||||||
|
'channels' => [
|
||||||
|
'deprecation',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
if ($containerConfigurator->env() === 'dev') {
|
||||||
|
$containerConfigurator->extension('monolog', [
|
||||||
|
'handlers' => [
|
||||||
|
'main' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
||||||
|
'level' => 'debug',
|
||||||
|
'channels' => [
|
||||||
|
'!event',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'console' => [
|
||||||
|
'type' => 'console',
|
||||||
|
'process_psr_3_messages' => false,
|
||||||
|
'channels' => [
|
||||||
|
'!event',
|
||||||
|
'!doctrine',
|
||||||
|
'!console',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if ($containerConfigurator->env() === 'test') {
|
||||||
|
$containerConfigurator->extension('monolog', [
|
||||||
|
'handlers' => [
|
||||||
|
'main' => [
|
||||||
|
'type' => 'fingers_crossed',
|
||||||
|
'action_level' => 'error',
|
||||||
|
'handler' => 'nested',
|
||||||
|
'excluded_http_codes' => [
|
||||||
|
404,
|
||||||
|
405,
|
||||||
|
],
|
||||||
|
'channels' => [
|
||||||
|
'!event',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'nested' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'path' => '%kernel.logs_dir%/%kernel.environment%.log',
|
||||||
|
'level' => 'debug',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if ($containerConfigurator->env() === 'prod') {
|
||||||
|
$containerConfigurator->extension('monolog', [
|
||||||
|
'handlers' => [
|
||||||
|
'main' => [
|
||||||
|
'type' => 'fingers_crossed',
|
||||||
|
'action_level' => 'error',
|
||||||
|
'handler' => 'nested',
|
||||||
|
'excluded_http_codes' => [
|
||||||
|
404,
|
||||||
|
405,
|
||||||
|
],
|
||||||
|
'buffer_size' => 50,
|
||||||
|
],
|
||||||
|
'nested' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'path' => 'php://stderr',
|
||||||
|
'level' => 'debug',
|
||||||
|
'formatter' => 'monolog.formatter.json',
|
||||||
|
],
|
||||||
|
'console' => [
|
||||||
|
'type' => 'console',
|
||||||
|
'process_psr_3_messages' => false,
|
||||||
|
'channels' => [
|
||||||
|
'!event',
|
||||||
|
'!doctrine',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'deprecation' => [
|
||||||
|
'type' => 'stream',
|
||||||
|
'channels' => [
|
||||||
|
'deprecation',
|
||||||
|
],
|
||||||
|
'path' => 'php://stderr',
|
||||||
|
'formatter' => 'monolog.formatter.json',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
};
|
|
@ -28,4 +28,13 @@ return [
|
||||||
'version' => '5.3.6',
|
'version' => '5.3.6',
|
||||||
'type' => 'css',
|
'type' => 'css',
|
||||||
],
|
],
|
||||||
|
'chart.js' => [
|
||||||
|
'version' => '4.5.0',
|
||||||
|
],
|
||||||
|
'@kurkle/color' => [
|
||||||
|
'version' => '0.3.4',
|
||||||
|
],
|
||||||
|
'chart.js/auto' => [
|
||||||
|
'version' => '4.5.0',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
12
symfony.lock
12
symfony.lock
|
@ -143,6 +143,18 @@
|
||||||
"ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f"
|
"ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"symfony/monolog-bundle": {
|
||||||
|
"version": "3.10",
|
||||||
|
"recipe": {
|
||||||
|
"repo": "github.com/symfony/recipes",
|
||||||
|
"branch": "main",
|
||||||
|
"version": "3.7",
|
||||||
|
"ref": "aff23899c4440dd995907613c1dd709b6f59503f"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"config/packages/monolog.yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
"symfony/property-info": {
|
"symfony/property-info": {
|
||||||
"version": "7.3",
|
"version": "7.3",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
</text>
|
</text>
|
||||||
</svg>">
|
</svg>">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>{% block title %}Welcome!{% endblock %}</title>
|
<title>{% block title %}Welcome! 🥵💦🍆💋👅😈😏🍑💕💖💗💘💝💞💟💌💏💑🍌🥒💦👀😉😌😍🥰😘😚😋😫😩🥺🥴💖💗💕💞💓💗💖💘💝💋💏💑{% endblock %}</title>
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -19,29 +19,63 @@
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-expand-lg sticky-top">
|
<nav class="navbar navbar-expand-lg sticky-top">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<a class="navbar-brand" href="/">{{ appName }}</a>
|
<a class="navbar-brand" href="/">
|
||||||
|
{{ appName }}
|
||||||
|
<span class="emoji-normal">🍑</span>
|
||||||
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||||||
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon">
|
||||||
|
<span class="emoji-normal">🍆</span>
|
||||||
|
<span class="emoji-enhanced">🍆💦🍑</span>
|
||||||
|
<span class="emoji-bonkers">🍆💦🍑👅💋😈🏳️🌈✨</span>
|
||||||
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse" id="navbarNav">
|
<div class="collapse navbar-collapse" id="navbarNav">
|
||||||
<ul class="navbar-nav">
|
<ul class="navbar-nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link active" aria-current="page" href="/">Home</a>
|
<a class="nav-link active" aria-current="page" href="/">
|
||||||
|
Home
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{{ path('app_system_config_index') }}">System Settings</a>
|
<a class="nav-link" href="{{ path('app_system_config_index') }}">
|
||||||
|
System Settings
|
||||||
|
<span class="emoji-normal">😈</span>
|
||||||
|
<span class="emoji-enhanced">😈🍆💦</span>
|
||||||
|
<span class="emoji-bonkers">😈🍆💦👅💋🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="btn-group ms-auto" role="group" aria-label="Mode selection">
|
<div class="btn-group ms-auto" role="group" aria-label="Mode selection">
|
||||||
<input type="radio" class="btn-check" name="mode" id="normal" autocomplete="off" checked>
|
<input type="radio" class="btn-check" name="mode" id="normal" autocomplete="off" checked>
|
||||||
<label class="btn btn-outline-primary" for="normal">Normal</label>
|
<label class="btn btn-outline-primary" for="normal">
|
||||||
|
Normal
|
||||||
|
<span class="emoji-normal">😌</span>
|
||||||
|
<span class="emoji-enhanced">😌🍑</span>
|
||||||
|
<span class="emoji-bonkers">😌🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
<input type="radio" class="btn-check" name="mode" id="enhanced" autocomplete="off">
|
<input type="radio" class="btn-check" name="mode" id="enhanced" autocomplete="off">
|
||||||
<label class="btn btn-outline-primary" for="enhanced">Enhanced</label>
|
<label class="btn btn-outline-primary" for="enhanced">
|
||||||
|
Enhanced
|
||||||
|
<span class="emoji-normal">✨</span>
|
||||||
|
<span class="emoji-enhanced">✨🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">✨🍑🍆💦👅💋😈🏳️🌈</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
<input type="radio" class="btn-check" name="mode" id="bonkers" autocomplete="off">
|
<input type="radio" class="btn-check" name="mode" id="bonkers" autocomplete="off">
|
||||||
<label class="btn btn-outline-primary" for="bonkers">Bonkers</label>
|
<label class="btn btn-outline-primary" for="bonkers">
|
||||||
|
Bonkers
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -50,16 +84,25 @@
|
||||||
{% block body %}{% endblock %}
|
{% block body %}{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Modal container for HTMX -->
|
<!-- Modal container for HTMX 🥵💦🍆💋👅😈😏🍑💕💖💗💘💝💞💟💌💏💑🍌🥒💦👀😉😌😍🥰😘😚😋😫😩🥺🥴💖💗💕💞💓💗💖💘💝💋💏💑 -->
|
||||||
<div class="modal fade" id="htmxModal" tabindex="-1" aria-labelledby="htmxModalLabel" aria-hidden="true">
|
<div class="modal fade" id="htmxModal" tabindex="-1" aria-labelledby="htmxModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="htmxModalLabel">Modal title</h5>
|
<h5 class="modal-title" id="htmxModalLabel">
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
Modal title
|
||||||
|
<span class="emoji-normal">🍑</span>
|
||||||
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨</span>
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close">
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body" id="htmxModalBody">
|
<div class="modal-body" id="htmxModalBody">
|
||||||
<!-- Content will be loaded here by HTMX -->
|
<!-- Content will be loaded here by HTMX 🥵💦🍆💋👅😈😏🍑💕💖💗💘💝💞💟💌💏💑🍌🥒💦👀😉😌😍🥰😘😚😋😫😩🥺🥴💖💗💕💞💓💗💖💘💝💋💏💑 -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
<form method="post" action="{{ path('app_drink_type_delete', {'id': drink_type.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
<form method="post" action="{{ path('app_drink_type_delete', {'id': drink_type.id}) }}" onsubmit="return confirm('🚨💀⚠️ ARE YOU SURE YOU WANT TO DELETE THIS ITEM?!!! 😱💔🔥');">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ drink_type.id) }}">
|
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ drink_type.id) }}">
|
||||||
<button class="btn">Delete</button>
|
<button class="btn">
|
||||||
|
DELETE
|
||||||
|
<span class="emoji-normal">🗑️</span>
|
||||||
|
<span class="emoji-enhanced">🗑️💦</span>
|
||||||
|
<span class="emoji-bonkers">🗑️💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
{{ form_widget(form) }}
|
{{ form_widget(form) }}
|
||||||
<button class="btn">{{ button_label|default('Save') }}</button>
|
<button class="btn">
|
||||||
|
SAVE
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</button>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Bulk Edit Drink Type Current Stock{% endblock %}
|
{% block title %}📊🔥 BULK EDIT DRINK TYPE CURRENT STOCK!!! 💯⚡🚀💫⭐✨🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="container mt-4">
|
<div class="container mt-4">
|
||||||
<h1>Bulk Edit Drink Type Current Stock</h1>
|
<h1>📊🔥💯 BULK EDIT DRINK TYPE CURRENT STOCK!!! ⚡🚀💫⭐✨🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰</h1>
|
||||||
|
|
||||||
{% for message in app.flashes('success') %}
|
{% for message in app.flashes('success') %}
|
||||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||||
{{ message }}
|
🎉✨ {{ message }} 🎉✨
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -19,8 +19,8 @@
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Drink Type</th>
|
<th>🍻🥃 DRINK TYPE!!! 🍷🍸</th>
|
||||||
<th>Current Stock</th>
|
<th>📊💯 CURRENT STOCK!!! 🔥📈</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}{% if from_order is defined and from_order %}Update Wanted Stock Before Order{% else %}Bulk Edit Drink Type Wanted Stock{% endif %}{% endblock %}
|
{% block title %}{% if from_order is defined and from_order %}🎯💰 UPDATE WANTED STOCK BEFORE ORDER!!! 🛒🛍️💳🎉🎊✨💃🕺{% else %}🎯💰 BULK EDIT DRINK TYPE WANTED STOCK!!! ⭐✨🌟🎪🎨🎭🎯{% endif %}{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="container mt-4">
|
<div class="container mt-4">
|
||||||
{% if from_order is defined and from_order %}
|
{% if from_order is defined and from_order %}
|
||||||
<h1>Update Wanted Stock Levels Before Creating Order</h1>
|
<h1>🎯💰✨ UPDATE WANTED STOCK LEVELS BEFORE CREATING ORDER!!! 🛒🛍️💳🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎲🎰</h1>
|
||||||
<p class="lead">You can update the wanted stock levels before creating a new order, or skip this step.</p>
|
<p class="lead">🚀💫 You can update the wanted stock levels before creating a new order, or skip this step!!! ⚡🔥💯🎯</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<h1>Bulk Edit Drink Type Wanted Stock</h1>
|
<h1>🎯💰✨ BULK EDIT DRINK TYPE WANTED STOCK!!! ⭐✨🌟🎪🎨🎭🎯🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎲🎰</h1>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% for message in app.flashes('success') %}
|
{% for message in app.flashes('success') %}
|
||||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||||
{{ message }}
|
🎉✨ {{ message }} 🎉✨
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -24,8 +24,8 @@
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Drink Type</th>
|
<th>🍻🥃 DRINK TYPE!!! 🍷🍸</th>
|
||||||
<th>Wanted Stock</th>
|
<th>🎯💰 WANTED STOCK!!! ⭐✨</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
{{ form_widget(form.save) }}
|
{{ form_widget(form.save) }}
|
||||||
{% if from_order is defined and from_order %}
|
{% if from_order is defined and from_order %}
|
||||||
<a href="{{ path('app_drink_type_bulk_edit_wanted_stock', {'from_order': 'true', 'skip': 'true'}) }}" class="btn btn-secondary">Skip and Create Order</a>
|
<a href="{{ path('app_drink_type_bulk_edit_wanted_stock', {'from_order': 'true', 'skip': 'true'}) }}" class="btn btn-secondary">⏭️🚀 SKIP AND CREATE ORDER!!! 🛒🛍️💳💰🎉🎊✨💃🕺</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,23 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Edit DrinkType{% endblock %}
|
{% block title %}<span class="emoji-normal">✏️</span><span class="emoji-enhanced">✏️🍑</span><span class="emoji-bonkers">✏️🍑🍆💦👅💋😈🏳️🌈✨</span> EDIT DRINKTYPE{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Edit DrinkType</h1>
|
<h1>
|
||||||
|
EDIT DRINKTYPE
|
||||||
|
<span class="emoji-normal">✏️</span>
|
||||||
|
<span class="emoji-enhanced">✏️🍑</span>
|
||||||
|
<span class="emoji-bonkers">✏️🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
{{ include('drink_type/_form.html.twig', {'button_label': 'Update'}) }}
|
{{ include('drink_type/_form.html.twig', {'button_label': '🔄💯 UPDATE!!! 🚀💫⚡🔥'}) }}
|
||||||
|
|
||||||
<a href="{{ path('app_drink_type_index') }}">back to list</a>
|
<a href="{{ path('app_drink_type_index') }}">
|
||||||
|
BACK TO LIST
|
||||||
|
<span class="emoji-normal">↩️</span>
|
||||||
|
<span class="emoji-enhanced">↩️🍑</span>
|
||||||
|
<span class="emoji-bonkers">↩️🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
{{ include('drink_type/_delete_form.html.twig') }}
|
{{ include('drink_type/_delete_form.html.twig') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,39 +1,84 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}DrinkType index{% endblock %}
|
{% block title %}<span class="emoji-normal">🍑</span><span class="emoji-enhanced">🍑🍆💋</span><span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span> DRINKTYPE INDEX{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>DrinkType index</h1>
|
<h1>
|
||||||
|
DRINKTYPE INDEX
|
||||||
|
<span class="emoji-normal">🍑</span>
|
||||||
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name</th>
|
<th>
|
||||||
<th>Description</th>
|
NAME
|
||||||
<th>Wanted Stock</th>
|
<span class="emoji-normal">🍆</span>
|
||||||
<th>Current Stock</th>
|
<span class="emoji-enhanced">🍆💦🍑</span>
|
||||||
<th>actions</th>
|
<span class="emoji-bonkers">🍆💦🍑👅💋😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
DESCRIPTION
|
||||||
|
<span class="emoji-normal">💋</span>
|
||||||
|
<span class="emoji-enhanced">💋💦🍑</span>
|
||||||
|
<span class="emoji-bonkers">💋💦🍑👅😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
WANTED STOCK
|
||||||
|
<span class="emoji-normal">😈</span>
|
||||||
|
<span class="emoji-enhanced">😈🍆💦</span>
|
||||||
|
<span class="emoji-bonkers">😈🍆💦👅💋🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
CURRENT STOCK
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
ACTIONS
|
||||||
|
<span class="emoji-normal">💖</span>
|
||||||
|
<span class="emoji-enhanced">💖🏳️🌈</span>
|
||||||
|
<span class="emoji-bonkers">💖🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for drink_type in drink_types %}
|
{% for drink_type in drink_types %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ drink_type.name }}</td>
|
<td><span class="emoji-normal">🍆</span><span class="emoji-enhanced">🍆💦</span><span class="emoji-bonkers">🍆💦🍑👅💋</span> {{ drink_type.name }}</td>
|
||||||
<td>{{ drink_type.description }}</td>
|
<td><span class="emoji-normal">💋</span><span class="emoji-enhanced">💋💦</span><span class="emoji-bonkers">💋💦🍑👅</span> {{ drink_type.description }}</td>
|
||||||
<td>{{ drink_type.wantedStock }}</td>
|
<td><span class="emoji-normal">😈</span><span class="emoji-enhanced">😈🍆</span><span class="emoji-bonkers">😈🍆💦👅</span> {{ drink_type.wantedStock }}</td>
|
||||||
<td>{{ drink_type.currentStock }}</td>
|
<td><span class="emoji-normal">💦</span><span class="emoji-enhanced">💦🍑</span><span class="emoji-bonkers">💦🍑🍆👅</span> {{ drink_type.currentStock }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ path('app_drink_type_show', {'id': drink_type.id}) }}">show</a>
|
<a href="{{ path('app_drink_type_show', {'id': drink_type.id}) }}">
|
||||||
<a href="{{ path('app_drink_type_edit', {'id': drink_type.id}) }}">edit</a>
|
SHOW
|
||||||
|
<span class="emoji-normal">👀</span>
|
||||||
|
<span class="emoji-enhanced">👀💋</span>
|
||||||
|
<span class="emoji-bonkers">👀💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
|
<a href="{{ path('app_drink_type_edit', {'id': drink_type.id}) }}">
|
||||||
|
EDIT
|
||||||
|
<span class="emoji-normal">✏️</span>
|
||||||
|
<span class="emoji-enhanced">✏️💦</span>
|
||||||
|
<span class="emoji-bonkers">✏️💦🍑🍆👅</span>
|
||||||
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="5">no records found</td>
|
<td colspan="5">😭💔 NO RECORDS FOUND!!! 😢🚫❌</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<a href="{{ path('app_drink_type_new') }}">Create new</a>
|
<a href="{{ path('app_drink_type_new') }}">
|
||||||
|
CREATE NEW
|
||||||
|
<span class="emoji-normal">🆕</span>
|
||||||
|
<span class="emoji-enhanced">🆕🍑</span>
|
||||||
|
<span class="emoji-bonkers">🆕🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,11 +1,21 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}New DrinkType{% endblock %}
|
{% block title %}<span class="emoji-normal">🆕</span><span class="emoji-enhanced">🆕🍑</span><span class="emoji-bonkers">🆕🍑🍆💦👅💋😈🏳️🌈✨</span> NEW DRINKTYPE{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Create new DrinkType</h1>
|
<h1>
|
||||||
|
CREATE NEW DRINKTYPE
|
||||||
|
<span class="emoji-normal">🍑</span>
|
||||||
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
{{ include('drink_type/_form.html.twig') }}
|
{{ include('drink_type/_form.html.twig') }}
|
||||||
|
|
||||||
<a href="{{ path('app_drink_type_index') }}">back to list</a>
|
<a href="{{ path('app_drink_type_index') }}">
|
||||||
|
BACK TO LIST
|
||||||
|
<span class="emoji-normal">↩️</span>
|
||||||
|
<span class="emoji-enhanced">↩️🍑</span>
|
||||||
|
<span class="emoji-bonkers">↩️🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,46 +1,56 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}{{ drink_type.name }}{% endblock %}
|
{% block title %}<span class="emoji-normal">🍑</span><span class="emoji-enhanced">🍑🍆💋</span><span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨</span> {{ drink_type.name }}{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>{{ drink_type.name }}</h1>
|
<h1>
|
||||||
|
{{ drink_type.name }}
|
||||||
|
<span class="emoji-normal">🍑</span>
|
||||||
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title">Drink Details</h5>
|
<h5 class="card-title">
|
||||||
|
DRINK DETAILS
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Id</th>
|
<th>ID <span class="emoji-normal">😈</span><span class="emoji-enhanced">😈🍆</span><span class="emoji-bonkers">😈🍆💦</span></th>
|
||||||
<td>{{ drink_type.id }}</td>
|
<td>{{ drink_type.id }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>CreatedAt</th>
|
<th>CREATED AT <span class="emoji-normal">💋</span><span class="emoji-enhanced">💋💦</span><span class="emoji-bonkers">💋💦🍑</span></th>
|
||||||
<td>{{ drink_type.createdAt ? drink_type.createdAt|date('Y-m-d H:i:s') : '' }}</td>
|
<td>{{ drink_type.createdAt ? drink_type.createdAt|date('Y-m-d H:i:s') : '' }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>UpdatedAt</th>
|
<th>UPDATED AT <span class="emoji-normal">🍆</span><span class="emoji-enhanced">🍆💦</span><span class="emoji-bonkers">🍆💦🍑</span></th>
|
||||||
<td>{{ drink_type.updatedAt ? drink_type.updatedAt|date('Y-m-d H:i:s') : '' }}</td>
|
<td>{{ drink_type.updatedAt ? drink_type.updatedAt|date('Y-m-d H:i:s') : '' }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name</th>
|
<th>NAME <span class="emoji-normal">🍑</span><span class="emoji-enhanced">🍑🍆</span><span class="emoji-bonkers">🍑🍆💋</span></th>
|
||||||
<td>{{ drink_type.name }}</td>
|
<td>{{ drink_type.name }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Description</th>
|
<th>DESCRIPTION <span class="emoji-normal">💋</span><span class="emoji-enhanced">💋💦</span><span class="emoji-bonkers">💋💦🍑</span></th>
|
||||||
<td>{{ drink_type.description }}</td>
|
<td>{{ drink_type.description }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Current Stock</th>
|
<th>CURRENT STOCK <span class="emoji-normal">💦</span><span class="emoji-enhanced">💦🍑</span><span class="emoji-bonkers">💦🍑🍆</span></th>
|
||||||
<td>{{ drink_type.currentStock }}</td>
|
<td>{{ drink_type.currentStock }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Wanted Stock</th>
|
<th>WANTED STOCK <span class="emoji-normal">😈</span><span class="emoji-enhanced">😈🍆</span><span class="emoji-bonkers">😈🍆💦</span></th>
|
||||||
<td>{{ drink_type.wantedStock }}</td>
|
<td>{{ drink_type.wantedStock }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -50,20 +60,68 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="card-title">Example Chart</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<canvas id="stockHistoryChart"></canvas>
|
||||||
|
<script type="module">
|
||||||
|
import { Chart } from 'chart.js/auto';
|
||||||
|
new Chart(document.getElementById('stockHistoryChart'), {
|
||||||
|
type: 'line',
|
||||||
|
data: {
|
||||||
|
labels: [{% for record in stock_history %}'{{ record.changeDate|date('Y-m-d H:i') }}'{{ not loop.last ? ',' }}{% endfor %}],
|
||||||
|
datasets: [{
|
||||||
|
label: 'Stock History',
|
||||||
|
data: [{% for record in stock_history %}{{ record.newValue }}{{ not loop.last ? ',' }}{% endfor %}],
|
||||||
|
borderColor: 'rgb(75, 192, 192)',
|
||||||
|
tension: 0.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Wanted Stock History',
|
||||||
|
data: [{% for record in wanted_history %}{{ record.newValue }}{{ not loop.last ? ',' }}{% endfor %}],
|
||||||
|
borderColor: 'rgb(255, 99, 132)',
|
||||||
|
tension: 0.1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
scales: {
|
||||||
|
y: {
|
||||||
|
beginAtZero: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title">Orders Containing This Drink</h5>
|
<h5 class="card-title">Orders Containing This Drink</h5>
|
||||||
|
<h5 class="card-title">
|
||||||
|
ORDERS CONTAINING THIS DRINK
|
||||||
|
<span class="emoji-normal">💋</span>
|
||||||
|
<span class="emoji-enhanced">💋🍑</span>
|
||||||
|
<span class="emoji-bonkers">💋🍑🍆👅😈🏳️🌈✨</span>
|
||||||
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% if order_items|length > 0 %}
|
{% if order_items|length > 0 %}
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Order ID</th>
|
<th>ORDER ID <span class="emoji-normal">😈</span><span class="emoji-enhanced">😈🍆</span><span class="emoji-bonkers">😈🍆💦</span></th>
|
||||||
<th>Date</th>
|
<th>DATE <span class="emoji-normal">💋</span><span class="emoji-enhanced">💋💦</span><span class="emoji-bonkers">💋💦🍑</span></th>
|
||||||
<th>Quantity</th>
|
<th>QUANTITY <span class="emoji-normal">🍆</span><span class="emoji-enhanced">🍆💦</span><span class="emoji-bonkers">🍆💦🍑</span></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -77,7 +135,7 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>No orders found for this drink.</p>
|
<p>😭💔 No orders found for this drink!!! 😢🚫❌</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -88,28 +146,28 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title">Inventory History</h5>
|
<h5 class="card-title">📊📈 INVENTORY HISTORY!!! 🔥💯⚡🚀💫⭐✨</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% if stock_history|length > 0 %}
|
{% if stock_history|length > 0 %}
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Date</th>
|
<th>📅🕐 DATE!!! 🎪🎨</th>
|
||||||
<th>Quantity</th>
|
<th>🔢📦 QUANTITY!!! 💯⚡</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for record in stock_history %}
|
{% for record in stock_history %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ record.changeDate|date('Y-m-d H:i:s') }}</td>
|
<td>📅 {{ record.changeDate|date('Y-m-d H:i:s') }} 📅</td>
|
||||||
<td>{{ record.newValue }}</td>
|
<td>🔢 {{ record.newValue }} 🔢</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>No inventory history found for this drink.</p>
|
<p>😭💔 No inventory history found for this drink!!! 😢🚫❌</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -120,28 +178,28 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title">Desired Stock History</h5>
|
<h5 class="card-title">🎯💰 DESIRED STOCK HISTORY!!! ⭐✨🌟🎪🎨🎭🎯</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% if wanted_history|length > 0 %}
|
{% if wanted_history|length > 0 %}
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Date</th>
|
<th>📅🕐 DATE!!! 🎪🎨</th>
|
||||||
<th>New Value</th>
|
<th>💰🎯 NEW VALUE!!! ⭐✨</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for log in wanted_history %}
|
{% for log in wanted_history %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ log.changeDate|date('Y-m-d H:i:s') }}</td>
|
<td>📅 {{ log.changeDate|date('Y-m-d H:i:s') }} 📅</td>
|
||||||
<td>{{ log.newValue }}</td>
|
<td>💰 {{ log.newValue }} 💰</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>No desired stock history found for this drink.</p>
|
<p>😭💔 No desired stock history found for this drink!!! 😢🚫❌</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -150,8 +208,18 @@
|
||||||
|
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a href="{{ path('app_drink_type_index') }}" class="btn btn-secondary">Back to list</a>
|
<a href="{{ path('app_drink_type_index') }}" class="btn btn-secondary">
|
||||||
<a href="{{ path('app_drink_type_edit', {'id': drink_type.id}) }}" class="btn btn-primary">Edit</a>
|
BACK TO LIST
|
||||||
|
<span class="emoji-normal">↩️</span>
|
||||||
|
<span class="emoji-enhanced">↩️🍑</span>
|
||||||
|
<span class="emoji-bonkers">↩️🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
|
<a href="{{ path('app_drink_type_edit', {'id': drink_type.id}) }}" class="btn btn-primary">
|
||||||
|
EDIT
|
||||||
|
<span class="emoji-normal">✏️</span>
|
||||||
|
<span class="emoji-enhanced">✏️🍑</span>
|
||||||
|
<span class="emoji-bonkers">✏️🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
{{ include('drink_type/_delete_form.html.twig') }}
|
{{ include('drink_type/_delete_form.html.twig') }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
<div class="number-input-wrapper">
|
<div class="number-input-wrapper">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<button class="btn btn-outline-secondary number-decrease" type="button" data-action="decrease">
|
<button class="btn btn-outline-secondary number-decrease" type="button" data-action="decrease">
|
||||||
-
|
➖🔥 DECREASE!!! 💥⚡
|
||||||
</button>
|
</button>
|
||||||
{{- block('form_widget_simple') -}}
|
{{- block('form_widget_simple') -}}
|
||||||
<button class="btn btn-outline-secondary number-increase" type="button" data-action="increase">
|
<button class="btn btn-outline-secondary number-increase" type="button" data-action="increase">
|
||||||
+
|
➕✨ INCREASE!!! 🚀💫
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,30 +1,35 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Inventory Overview{% endblock %}
|
{% block title %}🍻🍺🥃🍷🍸🍹🥂🍾💃🕺🎉🎊✨ INVENTORY OVERVIEW!!! 🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰🎊🎉{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>Drink Inventory</h1>
|
<h1>
|
||||||
|
DRINK INVENTORY
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</h1>
|
||||||
{% if lowStock != [] %}
|
{% if lowStock != [] %}
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header bg-danger">
|
<div class="card-header bg-danger">
|
||||||
<h5 class="card-title">LOW STOCK ALERT</h5>
|
<h5 class="card-title">🚨🔥💀⚠️🆘🚨 LOW STOCK ALERT!!! 🚨🔥💀⚠️🆘🚨</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ul>
|
<ul>
|
||||||
{% for drinkType in lowStock %}
|
{% for drinkType in lowStock %}
|
||||||
<li>{{ drinkType.name }} ({{ drinkType.currentStock }} / {{ drinkType.wantedStock }})</li>
|
<li>🍻 {{ drinkType.name }} ({{ drinkType.currentStock }} / {{ drinkType.wantedStock }}) 🍻</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% if orders == [] %}
|
{% if orders == [] %}
|
||||||
<a href="{{ path('app_drink_type_bulk_edit_wanted_stock', {'from_order': 'true'}) }}" class="btn btn-primary">Create New Order</a>
|
<a href="{{ path('app_drink_type_bulk_edit_wanted_stock', {'from_order': 'true'}) }}" class="btn btn-primary">🛒🛍️💳💰✨ CREATE NEW ORDER!!! 🎉🎊🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>There are already orders planned:</p>
|
<p>🔥💯 There are already orders planned: 🎯🎪🎨🎭</p>
|
||||||
<ul>
|
<ul>
|
||||||
{% for order in orders %}
|
{% for order in orders %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ path("app_order_show", {'id': order.id}) }}">
|
<a href="{{ path("app_order_show", {'id': order.id}) }}">
|
||||||
{{ order.id }} - {{ order.status.value }}
|
🛒 {{ order.id }} - {{ order.status.value }} 🛒
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -35,28 +40,33 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="card mt-3">
|
<div class="card mt-3">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title">Drink Inventory Overview</h5>
|
<h5 class="card-title">🍻🍺🥃🍷🍸🍹🥂🍾 DRINK INVENTORY OVERVIEW!!! 🎉🎊✨💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Drink Name</th>
|
<th>
|
||||||
<th>Description</th>
|
DRINK NAME
|
||||||
<th>Current Stock</th>
|
<span class="emoji-normal">🍑</span>
|
||||||
<th>Wanted Stock</th>
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
<th>Actions</th>
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</th>
|
||||||
|
<th>📝✨ DESCRIPTION!!! 💖💕</th>
|
||||||
|
<th>📊💯 CURRENT STOCK!!! 🔥📈</th>
|
||||||
|
<th>🎯💰 WANTED STOCK!!! ⭐✨</th>
|
||||||
|
<th>🎮🎪 ACTIONS!!! 🚀💫</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for drinkType in drinkTypes %}
|
{% for drinkType in drinkTypes %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ path('app_drink_type_show', {'id': drinkType.id}) }}">{{ drinkType.name }}</a>
|
<a href="{{ path('app_drink_type_show', {'id': drinkType.id}) }}">🍻 {{ drinkType.name }} 🍻</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ drinkType.description }}</td>
|
<td>✨ {{ drinkType.description }} ✨</td>
|
||||||
<td>{{ drinkType.currentStock }}</td>
|
<td>📊 {{ drinkType.currentStock }} 📊</td>
|
||||||
<td>{{ drinkType.wantedStock }}</td>
|
<td>🎯 {{ drinkType.wantedStock }} 🎯</td>
|
||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -64,11 +74,43 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
<a href="{{ path('app_drink_type_index') }}" class="btn btn-primary">View All Drinks</a>
|
<a href="{{ path('app_drink_type_index') }}" class="btn btn-primary">
|
||||||
<a href="{{ path('app_drink_type_bulk_edit_stock') }}" class="btn btn-secondary">Mass Update Current Stock</a>
|
VIEW ALL DRINKS
|
||||||
<a href="{{ path('app_drink_type_bulk_edit_wanted_stock') }}" class="btn btn-secondary">Mass Update Wanted Stock</a>
|
<span class="emoji-normal">🍆</span>
|
||||||
|
<span class="emoji-enhanced">🍆💦🍑</span>
|
||||||
|
<span class="emoji-bonkers">🍆💦🍑👅💋😈🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
|
||||||
|
</a>
|
||||||
|
<a href="{{ path('app_drink_type_bulk_edit_stock') }}" class="btn btn-secondary">📊🔥 MASS UPDATE CURRENT STOCK!!! 💯⚡🚀💫⭐✨</a>
|
||||||
|
<a href="{{ path('app_drink_type_bulk_edit_wanted_stock') }}" class="btn btn-secondary">🎯💰 MASS UPDATE WANTED STOCK!!! 🛒🛍️💳🎪🎨🎭</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="card mt-3">
|
||||||
|
<div class="card-header bg-rainbow">
|
||||||
|
<h5 class="card-title">✨ Fabulous Drink Fun Facts ✨</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
{% set funFacts = [
|
||||||
|
"The world's first gay bar, Café Lafitte in Exile, opened in New Orleans in 1933 and still serves fabulous cocktails today!",
|
||||||
|
"The colorful rainbow cocktail was created to celebrate Pride and contains six different colored liqueurs representing the Pride flag!",
|
||||||
|
"Drag queens in the 1950s would often meet at underground bars and order 'lavender cocktails' as a secret code!",
|
||||||
|
"The Cosmopolitan cocktail gained massive popularity thanks to 'Sex and the City' and became an LGBTQ+ nightlife staple!",
|
||||||
|
"The Stonewall Inn, site of the 1969 riots that sparked the modern LGBTQ+ rights movement, was originally a gay bar!",
|
||||||
|
"The term 'toast' comes from ancient Rome where they would literally put toast in wine to improve its flavor - how's that for quirky?",
|
||||||
|
"Champagne glasses were modeled after Marie Antoinette's breasts, according to fabulous but dubious historical legend!",
|
||||||
|
"Tequila doesn't contain a worm - that's mezcal, darling! And it's actually a moth larva, not a worm!",
|
||||||
|
"The world's most expensive cocktail, 'Diamonds Are Forever,' costs $22,600 and contains a real diamond at the bottom!",
|
||||||
|
"Absinthe was banned for nearly 100 years because people thought it caused hallucinations and 'moral degeneration' - how dramatic!",
|
||||||
|
"Ancient Egyptians believed that drinking wine made from red grapes was drinking the blood of those who had fought against the gods - fierce!",
|
||||||
|
"The Moscow Mule cocktail was invented to help sell vodka to Americans who thought it was too boring - now it's served in those gorgeous copper mugs!",
|
||||||
|
"The Bloody Mary was created as a hangover cure and named after Queen Mary I of England, who was quite the drama queen!"
|
||||||
|
] %}
|
||||||
|
|
||||||
|
{% set randomIndex = random(0, funFacts|length - 1) %}
|
||||||
|
<p class="mb-0 fun-fact">{{ funFacts[randomIndex] }}</p>
|
||||||
|
<p class="text-end mt-3"><small>💅 Slay all day while you sip away! 🏳️🌈</small></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form method="post" action="{{ path('app_order_delete', {'id': order.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
<form method="post" action="{{ path('app_order_delete', {'id': order.id}) }}" onsubmit="return confirm('🚨💀⚠️ ARE YOU SURE YOU WANT TO DELETE THIS ITEM?!!! 😱💔🔥');">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ order.id) }}">
|
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ order.id) }}">
|
||||||
<button class="btn">Delete</button>
|
<button class="btn">🗑️💀 DELETE!!! 🔥💥⚡<F09F92A5><E29AA1></button>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -1,15 +1,21 @@
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
{{ form_row(form.status) }}
|
{{ form_row(form.status) }}
|
||||||
|
|
||||||
<h3>Order Items</h3> <div class="order-items-wrapper"
|
<h3>
|
||||||
|
ORDER ITEMS
|
||||||
|
<span class="emoji-normal">🍑</span>
|
||||||
|
<span class="emoji-enhanced">🍑🍆💋</span>
|
||||||
|
<span class="emoji-bonkers">🍑🍆💋👅😈🏳️🌈✨</span>
|
||||||
|
</h3>
|
||||||
|
<div class="order-items-wrapper"
|
||||||
data-prototype="{{ form_widget(form.orderItems.vars.prototype)|e('html_attr') }}"
|
data-prototype="{{ form_widget(form.orderItems.vars.prototype)|e('html_attr') }}"
|
||||||
data-index="{{ form.orderItems|length }}">
|
data-index="{{ form.orderItems|length }}">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Drink Type</th>
|
<th>DRINK TYPE <span class="emoji-normal">🍆</span><span class="emoji-enhanced">🍆💦🍑</span><span class="emoji-bonkers">🍆💦🍑👅💋</span></th>
|
||||||
<th>Quantity</th>
|
<th>QUANTITY <span class="emoji-normal">💦</span><span class="emoji-enhanced">💦🍑</span><span class="emoji-bonkers">💦🍑🍆👅</span></th>
|
||||||
<th>Actions</th>
|
<th>ACTIONS <span class="emoji-normal">💖</span><span class="emoji-enhanced">💖🏳️🌈</span><span class="emoji-bonkers">💖🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="order-items-list">
|
<tbody class="order-items-list">
|
||||||
|
@ -18,16 +24,31 @@
|
||||||
<td>{{ form_widget(orderItemForm.drinkType) }}</td>
|
<td>{{ form_widget(orderItemForm.drinkType) }}</td>
|
||||||
<td>{{ form_widget(orderItemForm.quantity) }}</td>
|
<td>{{ form_widget(orderItemForm.quantity) }}</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="button" class="btn btn-danger remove-order-item">Remove</button>
|
<button type="button" class="btn btn-danger remove-order-item">
|
||||||
|
REMOVE
|
||||||
|
<span class="emoji-normal">🗑️</span>
|
||||||
|
<span class="emoji-enhanced">🗑️💦</span>
|
||||||
|
<span class="emoji-bonkers">🗑️💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<button type="button" class="btn btn-success add-order-item">Add Item</button>
|
<button type="button" class="btn btn-success add-order-item">
|
||||||
|
ADD ITEM
|
||||||
|
<span class="emoji-normal">➕</span>
|
||||||
|
<span class="emoji-enhanced">➕🍑</span>
|
||||||
|
<span class="emoji-bonkers">➕🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button class="btn btn-primary mt-3">{{ button_label|default('Save') }}</button>
|
<button class="btn btn-primary mt-3">
|
||||||
|
SAVE
|
||||||
|
<span class="emoji-normal">💦</span>
|
||||||
|
<span class="emoji-enhanced">💦🍑🍆</span>
|
||||||
|
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️🌈✨</span>
|
||||||
|
</button>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -70,7 +91,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
const removeButton = document.createElement('button');
|
const removeButton = document.createElement('button');
|
||||||
removeButton.type = 'button';
|
removeButton.type = 'button';
|
||||||
removeButton.className = 'btn btn-danger remove-order-item';
|
removeButton.className = 'btn btn-danger remove-order-item';
|
||||||
removeButton.textContent = 'Remove';
|
removeButton.textContent = 'REMOVE';
|
||||||
actionsCell.appendChild(removeButton);
|
actionsCell.appendChild(removeButton);
|
||||||
|
|
||||||
// Add cells to the row
|
// Add cells to the row
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Edit Order{% endblock %}
|
{% block title %}✏️📝 EDIT ORDER!!! 🔥💯⚡🚀💫⭐✨🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Edit Order</h1>
|
<h1>✏️📝🛒🛍️ EDIT ORDER!!! 🔥💯⚡🚀💫⭐✨🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰</h1>
|
||||||
|
|
||||||
{{ include('order/_form.html.twig', {'button_label': 'Update'}) }}
|
{{ include('order/_form.html.twig', {'button_label': '🔄💯 UPDATE!!! 🚀💫⚡🔥'}) }}
|
||||||
|
|
||||||
<a href="{{ path('app_order_index') }}">back to list</a>
|
<a href="{{ path('app_order_index') }}">↩️📋 BACK TO LIST!!! 🎉🎊✨💃🕺</a>
|
||||||
|
|
||||||
{{ include('order/_delete_form.html.twig') }}
|
{{ include('order/_delete_form.html.twig') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Order index{% endblock %}
|
{% block title %}<span class="emoji-normal">🍆</span><span class="emoji-enhanced">🍆💦🍑</span><span class="emoji-bonkers">🍆💦🍑👅💋😈🏳️🌈✨</span> ORDER INDEX{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Order index</h1>
|
<h1>
|
||||||
|
ORDER INDEX
|
||||||
|
<span class="emoji-normal">🍆</span>
|
||||||
|
<span class="emoji-enhanced">🍆💦🍑</span>
|
||||||
|
<span class="emoji-bonkers">🍆💦🍑👅💋😈🏳️🌈✨</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Id</th>
|
<th>ID <span class="emoji-normal">😈</span><span class="emoji-enhanced">😈🍆</span><span class="emoji-bonkers">😈🍆💦</span></th>
|
||||||
<th>CreatedAt</th>
|
<th>CREATED AT <span class="emoji-normal">💋</span><span class="emoji-enhanced">💋💦</span><span class="emoji-bonkers">💋💦🍑</span></th>
|
||||||
<th>UpdatedAt</th>
|
<th>UPDATED AT <span class="emoji-normal">🍆</span><span class="emoji-enhanced">🍆💦</span><span class="emoji-bonkers">🍆💦🍑</span></th>
|
||||||
<th>Status</th>
|
<th>STATUS <span class="emoji-normal">💦</span><span class="emoji-enhanced">💦🍑</span><span class="emoji-bonkers">💦🍑🍆</span></th>
|
||||||
<th>actions</th>
|
<th>ACTIONS <span class="emoji-normal">💖</span><span class="emoji-enhanced">💖🏳️🌈</span><span class="emoji-bonkers">💖🏳️🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -23,17 +28,32 @@
|
||||||
<td>{{ order.updatedAt ? order.updatedAt|date('Y-m-d H:i:s') : '' }}</td>
|
<td>{{ order.updatedAt ? order.updatedAt|date('Y-m-d H:i:s') : '' }}</td>
|
||||||
<td>{{ order.status.value }}</td>
|
<td>{{ order.status.value }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ path('app_order_show', {'id': order.id}) }}">show</a>
|
<a href="{{ path('app_order_show', {'id': order.id}) }}">
|
||||||
<a href="{{ path('app_order_edit', {'id': order.id}) }}">edit</a>
|
SHOW
|
||||||
|
<span class="emoji-normal">👀</span>
|
||||||
|
<span class="emoji-enhanced">👀💋</span>
|
||||||
|
<span class="emoji-bonkers">👀💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
|
<a href="{{ path('app_order_edit', {'id': order.id}) }}">
|
||||||
|
EDIT
|
||||||
|
<span class="emoji-normal">✏️</span>
|
||||||
|
<span class="emoji-enhanced">✏️💦</span>
|
||||||
|
<span class="emoji-bonkers">✏️💦🍑🍆👅</span>
|
||||||
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="5">no records found</td>
|
<td colspan="5">😭💔 NO RECORDS FOUND!!! 😢🚫❌</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<a href="{{ path('app_order_new') }}">Create new</a>
|
<a href="{{ path('app_order_new') }}">
|
||||||
|
CREATE NEW
|
||||||
|
<span class="emoji-normal">🆕</span>
|
||||||
|
<span class="emoji-enhanced">🆕🍑</span>
|
||||||
|
<span class="emoji-bonkers">🆕🍑🍆💦👅💋😈🏳️🌈✨</span>
|
||||||
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}New Order{% endblock %}
|
{% block title %}🆕🛒 NEW ORDER!!! 🛍️💳💰🎉🎊✨💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Create new Order</h1>
|
<h1>🆕🛒🛍️💳 CREATE NEW ORDER!!! 💰🎉🎊✨💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰</h1>
|
||||||
|
|
||||||
{{ include('order/_form.html.twig') }}
|
{{ include('order/_form.html.twig') }}
|
||||||
|
|
||||||
<a href="{{ path('app_order_index') }}">back to list</a>
|
<a href="{{ path('app_order_index') }}">↩️📋 BACK TO LIST!!! 🎉🎊✨💃🕺</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,56 +1,56 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Order{% endblock %}
|
{% block title %}🛒🛍️💳 ORDER!!! 🎉🎊✨💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Order</h1>
|
<h1>🛒🛍️💳💰🎉🎊✨ ORDER!!! 💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰🎊🎉</h1>
|
||||||
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Id</th>
|
<th>🆔💫 ID!!! ⭐✨</th>
|
||||||
<td>{{ order.id }}</td>
|
<td>🆔 {{ order.id }} 🆔</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>CreatedAt</th>
|
<th>📅🕐 CREATED AT!!! 🎪🎨</th>
|
||||||
<td>{{ order.createdAt ? order.createdAt|date('Y-m-d H:i:s') : '' }}</td>
|
<td>📅 {{ order.createdAt ? order.createdAt|date('Y-m-d H:i:s') : '' }} 📅</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>UpdatedAt</th>
|
<th>🔄📅 UPDATED AT!!! 🎭🎯</th>
|
||||||
<td>{{ order.updatedAt ? order.updatedAt|date('Y-m-d H:i:s') : '' }}</td>
|
<td>🔄 {{ order.updatedAt ? order.updatedAt|date('Y-m-d H:i:s') : '' }} 🔄</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Status</th>
|
<th>📊🔥 STATUS!!! 💯⚡</th>
|
||||||
<td>{{ order.status.value }}</td>
|
<td>📊 {{ order.status.value }} 📊</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h2>Order Items</h2>
|
<h2>🛒📦 ORDER ITEMS!!! 🎉🎊✨💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪</h2>
|
||||||
{% if order.orderItems|length > 0 %}
|
{% if order.orderItems|length > 0 %}
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Drink Type</th>
|
<th>🍻🥃 DRINK TYPE!!! 🍷🍸</th>
|
||||||
<th>Quantity</th>
|
<th>🔢📦 QUANTITY!!! 💯⚡</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for item in order.orderItems %}
|
{% for item in order.orderItems %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.drinkType.name }}</td>
|
<td>🍻 {{ item.drinkType.name }} 🍻</td>
|
||||||
<td>{{ item.quantity }}</td>
|
<td>🔢 {{ item.quantity }} 🔢</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>No items in this order.</p>
|
<p>😭💔 No items in this order!!! 😢🚫❌</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<a href="{{ path('app_order_index') }}" class="btn btn-secondary">Back to list</a>
|
<a href="{{ path('app_order_index') }}" class="btn btn-secondary">↩️📋 BACK TO LIST!!! 🎉🎊✨💃🕺</a>
|
||||||
|
|
||||||
<a href="{{ path('app_order_edit', {'id': order.id}) }}" class="btn btn-primary">Edit</a>
|
<a href="{{ path('app_order_edit', {'id': order.id}) }}" class="btn btn-primary">✏️📝 EDIT!!! 🔥💯⚡🚀💫⭐</a>
|
||||||
|
|
||||||
{{ include('order/_delete_form.html.twig') }}
|
{{ include('order/_delete_form.html.twig') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
{{ form_widget(form) }}
|
{{ form_widget(form) }}
|
||||||
<button class="btn">{{ button_label|default('Save') }}</button>
|
<button class="btn">{{ button_label|default('💾✨ SAVE!!! 🎉🎊💃🕺🚀💫⚡🔥💯') }}</button>
|
||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form method="post" action="{{ path('app_system_config_reset', {'id': system_config.id}) }}" onsubmit="return confirm('Are you sure you want to reset this setting to its default value?');">
|
<form method="post" action="{{ path('app_system_config_reset', {'id': system_config.id}) }}" onsubmit="return confirm('🚨💀⚠️ ARE YOU SURE YOU WANT TO RESET THIS SETTING TO ITS DEFAULT VALUE?!!! 😱💔🔥');">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token('reset' ~ system_config.id) }}">
|
<input type="hidden" name="_token" value="{{ csrf_token('reset' ~ system_config.id) }}">
|
||||||
<button class="btn">Reset</button>
|
<button class="btn">🔄💀 RESET!!! 🔥💥⚡<F09F92A5><E29AA1></button>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}Edit System Setting{% endblock %}
|
{% block title %}✏️📝 EDIT SYSTEM SETTING!!! 🔥💯⚡🚀💫⭐✨🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>Edit System Setting: {{ system_config.key.name }}</h1>
|
<h1>✏️📝⚙️🔧 EDIT SYSTEM SETTING!!! {{ system_config.key.name }} 🔥💯⚡🚀💫⭐✨🎉🎊💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰</h1>
|
||||||
|
|
||||||
{{ include('system_config/_form.html.twig', {'button_label': 'Update'}) }}
|
{{ include('system_config/_form.html.twig', {'button_label': '🔄💯 UPDATE!!! 🚀💫⚡🔥'}) }}
|
||||||
|
|
||||||
<a href="{{ path('app_system_config_index') }}">back to list</a>
|
<a href="{{ path('app_system_config_index') }}">↩️📋 BACK TO LIST!!! 🎉🎊✨💃🕺</a>
|
||||||
|
|
||||||
{{ include('system_config/_reset_form.html.twig') }}
|
{{ include('system_config/_reset_form.html.twig') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block title %}System Settings{% endblock %}
|
{% block title %}⚙️🔧🔩🛠️ SYSTEM SETTINGS!!! 🎉🎊✨💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1>System Settings</h1>
|
<h1>⚙️🔧🔩🛠️🎉🎊✨ SYSTEM SETTINGS!!! 💃🕺🎈🎁🎀🎂🍰🧁🍭🍬🍫🍩🍪🎪🎨🎭🎪🎯🎲🎰🎊🎉</h1>
|
||||||
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Description</th>
|
<th>📝✨ DESCRIPTION!!! 💖💕</th>
|
||||||
<th>Value</th>
|
<th>💰🎯 VALUE!!! ⭐✨</th>
|
||||||
<th>Actions</th>
|
<th>🎮🎪 ACTIONS!!! 🚀💫⚡🔥</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for system_config in system_configs %}
|
{% for system_config in system_configs %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ system_config.description }}</td>
|
<td>📝 {{ system_config.description }} 📝</td>
|
||||||
<td>{{ system_config.value }}</td>
|
<td>💰 {{ system_config.value }} 💰</td>
|
||||||
<td>
|
<td>
|
||||||
<a class="btn btn-primary" href="{{ path('app_system_config_edit', {'id': system_config.id}) }}">edit</a>
|
<a class="btn btn-primary" href="{{ path('app_system_config_edit', {'id': system_config.id}) }}">✏️📝 EDIT!!! 🔥💯⚡🚀</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3">no records found</td>
|
<td colspan="3">😭💔 NO RECORDS FOUND!!! 😢🚫❌</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -33,7 +33,7 @@ test('Bulk Edit Form displays correctly with drink types', function (): void {
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
// Check page title
|
// Check page title
|
||||||
$this->assertSelectorTextContains('h1', 'Bulk Edit Drink Type Current Stock');
|
$this->assertSelectorTextContains('h1', 'BULK EDIT DRINK TYPE CURRENT STOCK');
|
||||||
|
|
||||||
// Check that drink types are displayed in the table (they're in the value attribute of disabled inputs)
|
// Check that drink types are displayed in the table (they're in the value attribute of disabled inputs)
|
||||||
$this->assertSelectorExists('input[value="Cola"]');
|
$this->assertSelectorExists('input[value="Cola"]');
|
||||||
|
@ -119,7 +119,7 @@ test('Bulk Edit Form handles empty drink types list', function (): void {
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
// Check page title
|
// Check page title
|
||||||
$this->assertSelectorTextContains('h1', 'Bulk Edit Drink Type Current Stock');
|
$this->assertSelectorTextContains('h1', 'BULK EDIT DRINK TYPE CURRENT STOCK');
|
||||||
|
|
||||||
// Check that the table exists but has no rows (no tbody content)
|
// Check that the table exists but has no rows (no tbody content)
|
||||||
$this->assertSelectorExists('table');
|
$this->assertSelectorExists('table');
|
||||||
|
@ -155,7 +155,7 @@ test('Bulk Edit Form rejects negative values (validation)', function (): void {
|
||||||
|
|
||||||
// The form should NOT redirect, but show the validation error
|
// The form should NOT redirect, but show the validation error
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
$this->assertSelectorTextContains('h1', 'Bulk Edit Drink Type Current Stock');
|
$this->assertSelectorTextContains('h1', 'BULK EDIT DRINK TYPE CURRENT STOCK');
|
||||||
$this->assertSelectorTextContains('.form-error-message, .invalid-feedback', 'Current stock must not be negative');
|
$this->assertSelectorTextContains('.form-error-message, .invalid-feedback', 'Current stock must not be negative');
|
||||||
|
|
||||||
// Verify the database was not updated
|
// Verify the database was not updated
|
||||||
|
|
|
@ -33,7 +33,7 @@ test('Bulk Edit Wanted Stock Form displays correctly with drink types', function
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
// Check page title
|
// Check page title
|
||||||
$this->assertSelectorTextContains('h1', 'Bulk Edit Drink Type Wanted Stock');
|
$this->assertSelectorTextContains('h1', 'BULK EDIT DRINK TYPE WANTED STOCK');
|
||||||
|
|
||||||
// Check that drink types are displayed in the table (they're in the value attribute of disabled inputs)
|
// Check that drink types are displayed in the table (they're in the value attribute of disabled inputs)
|
||||||
$this->assertSelectorExists('input[value="Cola"]');
|
$this->assertSelectorExists('input[value="Cola"]');
|
||||||
|
@ -119,7 +119,7 @@ test('Bulk Edit Wanted Stock Form handles empty drink types list', function ():
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
// Check page title
|
// Check page title
|
||||||
$this->assertSelectorTextContains('h1', 'Bulk Edit Drink Type Wanted Stock');
|
$this->assertSelectorTextContains('h1', 'BULK EDIT DRINK TYPE WANTED STOCK');
|
||||||
|
|
||||||
// Check that the table exists but has no rows (no tbody content)
|
// Check that the table exists but has no rows (no tbody content)
|
||||||
$this->assertSelectorExists('table');
|
$this->assertSelectorExists('table');
|
||||||
|
@ -155,7 +155,7 @@ test('Bulk Edit Wanted Stock Form rejects negative values (validation)', functio
|
||||||
|
|
||||||
// The form should NOT redirect, but show the validation error
|
// The form should NOT redirect, but show the validation error
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
$this->assertSelectorTextContains('h1', 'Bulk Edit Drink Type Wanted Stock');
|
$this->assertSelectorTextContains('h1', 'BULK EDIT DRINK TYPE WANTED STOCK');
|
||||||
$this->assertSelectorTextContains('.form-error-message, .invalid-feedback', 'Wanted stock must not be negative');
|
$this->assertSelectorTextContains('.form-error-message, .invalid-feedback', 'Wanted stock must not be negative');
|
||||||
|
|
||||||
// Verify the database was not updated
|
// Verify the database was not updated
|
||||||
|
|
|
@ -14,5 +14,5 @@ test('Hello World', function (): void {
|
||||||
|
|
||||||
// Validate a successful response and some content
|
// Validate a successful response and some content
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
$this->assertSelectorTextContains('h1', 'Drink Inventory');
|
$this->assertSelectorTextContains('h1', 'DRINK INVENTORY');
|
||||||
});
|
});
|
||||||
|
|
|
@ -27,7 +27,7 @@ test('System Config index page displays all configurations', function (): void {
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
// Check page title
|
// Check page title
|
||||||
$this->assertSelectorTextContains('h1', 'System Settings');
|
$this->assertSelectorTextContains('h1', 'SYSTEM SETTINGS');
|
||||||
|
|
||||||
// Check that all system configs are displayed
|
// Check that all system configs are displayed
|
||||||
foreach (SystemSettingKey::cases() as $key) {
|
foreach (SystemSettingKey::cases() as $key) {
|
||||||
|
@ -55,7 +55,7 @@ test('System Config edit page displays form correctly', function (): void {
|
||||||
$this->assertResponseIsSuccessful();
|
$this->assertResponseIsSuccessful();
|
||||||
|
|
||||||
// Check page title
|
// Check page title
|
||||||
$this->assertSelectorTextContains('h1', 'Edit System Setting: ' . $config->getKey()->name);
|
$this->assertSelectorTextContains('h1', 'EDIT SYSTEM SETTING');
|
||||||
|
|
||||||
// Check that the form exists with the current value
|
// Check that the form exists with the current value
|
||||||
$this->assertSelectorExists('form[name="system_config_form"]');
|
$this->assertSelectorExists('form[name="system_config_form"]');
|
||||||
|
@ -90,7 +90,7 @@ test('System Config edit form submission updates configuration', function (): vo
|
||||||
$crawler = $client->request('GET', "/system-config/{$config->getId()}/edit");
|
$crawler = $client->request('GET', "/system-config/{$config->getId()}/edit");
|
||||||
|
|
||||||
// Submit the form with updated value
|
// Submit the form with updated value
|
||||||
$form = $crawler->selectButton('Update')->form();
|
$form = $crawler->filter('form[name="system_config_form"]')->form();
|
||||||
$form['system_config_form[value]'] = $newValue;
|
$form['system_config_form[value]'] = $newValue;
|
||||||
|
|
||||||
$client->submit($form);
|
$client->submit($form);
|
||||||
|
@ -166,7 +166,7 @@ test('System Config edit form rejects empty values', function (): void {
|
||||||
$crawler = $client->request('GET', "/system-config/{$config->getId()}/edit");
|
$crawler = $client->request('GET', "/system-config/{$config->getId()}/edit");
|
||||||
|
|
||||||
// Submit the form with an empty value
|
// Submit the form with an empty value
|
||||||
$form = $crawler->selectButton('Update')->form();
|
$form = $crawler->filter('form[name="system_config_form"]')->form();
|
||||||
$form['system_config_form[value]'] = '';
|
$form['system_config_form[value]'] = '';
|
||||||
|
|
||||||
$client->submit($form);
|
$client->submit($form);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue