diff --git a/Backend/src/main/java/com/ebdapo/backend/restcontroller/BetaeubungsmittelBuchungController.java b/Backend/src/main/java/com/ebdapo/backend/restcontroller/BetaeubungsmittelBuchungController.java index 2f5fbfa81dd952c90197670ca6b42b12768260a3..5cd918c4ed19ab53e829b640c9eca1a2e472de98 100644 --- a/Backend/src/main/java/com/ebdapo/backend/restcontroller/BetaeubungsmittelBuchungController.java +++ b/Backend/src/main/java/com/ebdapo/backend/restcontroller/BetaeubungsmittelBuchungController.java @@ -138,7 +138,7 @@ public class BetaeubungsmittelBuchungController { Zugang zugang = new Zugang(); zugang.setId(UUID.randomUUID().toString()); zugang.setMenge(btDetails.getMenge()); - zugang.setDatum(new Date()); + zugang.setDatum(btDetails.getDatum()); zugang.setPruefdatum(btDetails.getPruefdatum()); Betaeubungsmittel btm = btmRepo.findById(btDetails.getBtm()).orElseThrow(InvalidInputException::new); @@ -163,7 +163,7 @@ public class BetaeubungsmittelBuchungController { abgang.setId(UUID.randomUUID().toString()); abgang.setMenge(btDetails.getMenge()); - abgang.setDatum(new Date()); + abgang.setDatum(btDetails.getDatum()); abgang.setPruefdatum(btDetails.getPruefdatum()); Betaeubungsmittel btm = btmRepo.findById(btDetails.getBtm()).orElseThrow(InvalidInputException::new); diff --git a/frontend/.eslintcache b/frontend/.eslintcache index 2241b5f46c289387e38965723d06ab9ecdd73f0d..65ea59bb1b495ecc76a9167591dc89f8768647b4 100644 --- a/frontend/.eslintcache +++ b/frontend/.eslintcache @@ -1 +1 @@ -[{"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\index.js":"1","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\App.js":"2","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\startseite\\Startseite.js":"3","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BTMBuch.js":"4","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\ApothekeEinstellungen.js":"5","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\startseite\\Login.js":"6","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekeBtmList.js":"7","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekenDetails.js":"8","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\headers\\Header.js":"9","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\headers\\StatusHeader.js":"10","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\user\\UserDetails.js":"11","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\PersonalTabelle.js":"12","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BuchungTabelle.js":"13","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeuesBtmModal.js":"14","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeueBuchungModal.js":"15","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\ApothekeRegisterModal.js":"16","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\useForm.js":"17","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\ArztTabelle.js":"18","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\LieferantTabelle.js":"19","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\BtmTabelle.js":"20","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\UserDetailsUpdateModal.js":"21","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\ArztAddModal.js":"22","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\ArztEditModal.js":"23","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\DeleteModal.js":"24","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\LieferantAddModal.js":"25","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\BtmAddModal.js":"26","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\PersonalAddModal.js":"27","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\BtmEditModal.js":"28","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\LieferantEditModal.js":"29","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\PersonalEditModal.js":"30"},{"size":280,"mtime":1607458621577,"results":"31","hashOfConfig":"32"},{"size":1054,"mtime":1608034053680,"results":"33","hashOfConfig":"32"},{"size":291,"mtime":1607935571160,"results":"34","hashOfConfig":"32"},{"size":2326,"mtime":1607978292805,"results":"35","hashOfConfig":"32"},{"size":4058,"mtime":1607978292787,"results":"36","hashOfConfig":"32"},{"size":2301,"mtime":1607987828930,"results":"37","hashOfConfig":"32"},{"size":1876,"mtime":1607987828926,"results":"38","hashOfConfig":"32"},{"size":1695,"mtime":1608034153361,"results":"39","hashOfConfig":"32"},{"size":206,"mtime":1607935571155,"results":"40","hashOfConfig":"32"},{"size":542,"mtime":1607935571157,"results":"41","hashOfConfig":"32"},{"size":1647,"mtime":1607978292842,"results":"42","hashOfConfig":"32"},{"size":4203,"mtime":1607978292800,"results":"43","hashOfConfig":"32"},{"size":2685,"mtime":1607935571150,"results":"44","hashOfConfig":"32"},{"size":4879,"mtime":1607935571155,"results":"45","hashOfConfig":"32"},{"size":10483,"mtime":1607935571153,"results":"46","hashOfConfig":"32"},{"size":9371,"mtime":1608033848209,"results":"47","hashOfConfig":"32"},{"size":716,"mtime":1607458621580,"results":"48","hashOfConfig":"32"},{"size":3969,"mtime":1607978292788,"results":"49","hashOfConfig":"32"},{"size":4253,"mtime":1607978292796,"results":"50","hashOfConfig":"32"},{"size":3950,"mtime":1607978292792,"results":"51","hashOfConfig":"32"},{"size":7659,"mtime":1607978292838,"results":"52","hashOfConfig":"32"},{"size":3186,"mtime":1607978292807,"results":"53","hashOfConfig":"32"},{"size":3524,"mtime":1607978292809,"results":"54","hashOfConfig":"32"},{"size":1120,"mtime":1607978292819,"results":"55","hashOfConfig":"32"},{"size":3227,"mtime":1607978292822,"results":"56","hashOfConfig":"32"},{"size":4523,"mtime":1607978292813,"results":"57","hashOfConfig":"32"},{"size":5148,"mtime":1607978292832,"results":"58","hashOfConfig":"32"},{"size":5656,"mtime":1607978292815,"results":"59","hashOfConfig":"32"},{"size":3550,"mtime":1607978292826,"results":"60","hashOfConfig":"32"},{"size":6408,"mtime":1607978292835,"results":"61","hashOfConfig":"32"},{"filePath":"62","messages":"63","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},"1d2vijs",{"filePath":"65","messages":"66","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"69","messages":"70","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"71","usedDeprecatedRules":"64"},{"filePath":"72","messages":"73","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"74","usedDeprecatedRules":"64"},{"filePath":"75","messages":"76","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"77","usedDeprecatedRules":"64"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"80","usedDeprecatedRules":"64"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"89","usedDeprecatedRules":"64"},{"filePath":"90","messages":"91","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"92","usedDeprecatedRules":"64"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"99","usedDeprecatedRules":"64"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"102","messages":"103","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"104","messages":"105","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"106","usedDeprecatedRules":"64"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"109","usedDeprecatedRules":"64"},{"filePath":"110","messages":"111","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"112","usedDeprecatedRules":"64"},{"filePath":"113","messages":"114","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"117","messages":"118","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"119","messages":"120","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"121","messages":"122","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"123","messages":"124","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"125","messages":"126","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"127","usedDeprecatedRules":"64"},{"filePath":"128","messages":"129","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"130","usedDeprecatedRules":"64"},{"filePath":"131","messages":"132","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},{"filePath":"133","messages":"134","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"64"},"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\index.js",[],["135","136"],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\App.js",["137"],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\startseite\\Startseite.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BTMBuch.js",["138"],"import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport Header from '../headers/Header'\r\nimport StatusHeader from '../headers/StatusHeader'\r\nimport ApothekenDetails from '../apotheke/ApothekenDetails';\r\nimport UserDetails from '../../user/UserDetails';\r\nimport ApothekeBtmList from '../apotheke/ApothekeBtmList';\r\nimport {Row, Col} from 'react-bootstrap';\r\nimport './BTMBuch.scss'\r\n \r\nfunction BTMBuch (props) {\r\n const { apoId } = useParams();\r\n\r\n const [user, setUser] = useState({});\r\n const [isLoggedIn, setLoggedIn] = useState(false);\r\n const [aktiveRolle, setAktiveRolle] = useState('');\r\n\r\n const getUserDetails = async event => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/benutzer/me`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n\r\n if(response.status === 200) {\r\n let u = await response.json();\r\n console.log(JSON.stringify(u))\r\n setUser(u);\r\n setAktiveRolle(u.rolle);\r\n setLoggedIn(true);\r\n }else if(response.status === 403) {\r\n props.history.push('/forbidden');\r\n }else if(response.status === 400){\r\n props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getUserDetails();\r\n }, [])\r\n\r\n //this obj is passed to each child, each child can add functions to this object and call functions from this object\r\n let apothekeRefFunctions = {}\r\n \r\n return(\r\n <React.Fragment>\r\n {aktiveRolle.toLowerCase() !== 'benutzer' ?<StatusHeader aktiveRolle={aktiveRolle}/> : null}\r\n <Header />\r\n <Row className=\"details-list\">\r\n <Col><ApothekenDetails {...props} apothekeRefFunctions={apothekeRefFunctions} apothekeId={apoId}/></Col>\r\n <Col>{isLoggedIn ? <UserDetails {...props} user={user} setUser={setUser} aktiveRolle={aktiveRolle} setAktiveRolle={setAktiveRolle}/> : null }</Col>\r\n </Row> \r\n <ApothekeBtmList apothekeId={apoId} user={user} apothekeRefFunctions={apothekeRefFunctions} {...props}/> \r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default BTMBuch;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\ApothekeEinstellungen.js",["139"],"import React, { useState, Fragment, useEffect } from 'react';\r\nimport { ListGroup, Button, Row, Col } from 'react-bootstrap';\r\nimport { useParams } from 'react-router-dom';\r\n\r\nimport Header from '../../headers/Header';\r\nimport StatusHeader from '../../headers/StatusHeader';\r\nimport ArztTabelle from './tabellen/ArztTabelle';\r\nimport BtmTabelle from './tabellen/BtmTabelle';\r\nimport LieferantTabelle from './tabellen/LieferantTabelle';\r\nimport PersonalTabelle from './tabellen/PersonalTabelle';\r\n\r\nimport './ApothekeEinstellungen.scss'\r\n\r\nfunction ApothekeEinstellungen(props) {\r\n const { apoId } = useParams()\r\n\r\n const [apotheke, setApotheke] = useState({ anschrift: {} })\r\n const [activeMenuItem, setActiveMenuItem] = useState('personal');\r\n const [user, setUser] = useState(null);\r\n\r\n\r\n const getCurrentApotheke = async () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\")\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setApotheke(data))\r\n .catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n })\r\n }\r\n\r\n const getUserData = async () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/benutzer/me`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n })\r\n .then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then(data => setUser(data)\r\n ).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n\r\n const renderContent = () => {\r\n if (activeMenuItem === 'personal') {\r\n return <PersonalTabelle {...props} />;\r\n } else if (activeMenuItem === 'btm') {\r\n return <BtmTabelle {...props} />;\r\n } else if (activeMenuItem === 'aerzte') {\r\n return <ArztTabelle {...props} />\r\n } else if (activeMenuItem === 'lieferanten') {\r\n return <LieferantTabelle {...props} />\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getUserData();\r\n getCurrentApotheke();\r\n }, []);\r\n\r\n return (\r\n <Fragment>\r\n <StatusHeader aktiveRolle=\"admin\" />\r\n <Header />\r\n <div className=\"main-content\">\r\n <Row>\r\n <Col sm={4}>\r\n <ul>\r\n <li>Name: {apotheke.name}</li>\r\n <li>E-Mail: {apotheke.email}</li>\r\n <li>Anschrift: {apotheke.anschrift.strasse} {apotheke.anschrift.nummer} ({apotheke.anschrift.plz} {apotheke.anschrift.ort})</li>\r\n </ul>\r\n <Button>Angaben bearbeiten</Button>\r\n </Col>\r\n </Row>\r\n <Row style={{ marginTop: '3em' }}>\r\n <Col sm={3}>\r\n <ListGroup as=\"ul\" className=\"menu-list\">\r\n <ListGroup.Item as=\"li\" onClick={() => setActiveMenuItem('personal')} active={activeMenuItem === 'personal'}>Pharmazeutisches Personal</ListGroup.Item>\r\n <ListGroup.Item as=\"li\" onClick={() => setActiveMenuItem('btm')} active={activeMenuItem === 'btm'}>Betäubungsmittel</ListGroup.Item>\r\n <ListGroup.Item as=\"li\" onClick={() => setActiveMenuItem('aerzte')} active={activeMenuItem === 'aerzte'}>Ärzte</ListGroup.Item>\r\n <ListGroup.Item as=\"li\" onClick={() => setActiveMenuItem('lieferanten')} active={activeMenuItem === 'lieferanten'}>Lieferanten</ListGroup.Item>\r\n </ListGroup>\r\n </Col>\r\n <Col sm={8}>\r\n {user ? renderContent() : null}\r\n </Col>\r\n </Row>\r\n </div>\r\n\r\n\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default ApothekeEinstellungen;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\startseite\\Login.js",["140"],"import React, { useState } from 'react';\r\nimport {Row, Col, Button, Form,} from 'react-bootstrap';\r\nimport { useForm } from \"react-hook-form\";\r\nimport ApothekeRegisterModal from '../../modals/ApothekeRegisterModal';\r\nimport './Startseite.scss'\r\n\r\n\r\nfunction Login(props) {\r\n const [neuesApoRegisterModal, setNeuesApoRegisterModal] = useState(false);\r\n const {handleSubmit} = useForm();\r\n const [user, setUser] = useState({username:'', password:''});\r\n \r\n const login = async event => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/login`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n username: user.username,\r\n password: user.password\r\n })\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n\r\n if(response && response.status === 200){\r\n const data = await response.json();\r\n window.sessionStorage.setItem(\"edbapo-jwt\", data.jwt)\r\n props.history.push(`/apotheke/${data.apothekeId}`);\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"login\">\r\n <b style={{fontSize:'20pt'}}>Login:</b>\r\n <Form onSubmit={handleSubmit(login)} >\r\n <Form.Row>\r\n <Col>\r\n <Form.Control onChange={e => setUser({...user, username: e.target.value})} placeholder=\"Benutzername\" />\r\n <Form.Control onChange={e => setUser({...user, password: e.target.value})} placeholder=\"Passwort\" />\r\n <Button variant=\"primary\" type=\"submit\">Login</Button> \r\n <Button variant=\"primary\" show={neuesApoRegisterModal} onClick={() => setNeuesApoRegisterModal(true)}>Neue Apotheke registrieren</Button>\r\n <ApothekeRegisterModal\r\n show={neuesApoRegisterModal}\r\n {...props}\r\n onHide={() => setNeuesApoRegisterModal(false)} ></ApothekeRegisterModal>\r\n </Col>\r\n </Form.Row>\r\n </Form>\r\n </div>\r\n )\r\n}\r\nexport default Login;","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekeBtmList.js",["141","142"],"import React, { useState, useEffect } from \"react\";\r\nimport { useParams } from 'react-router-dom';\r\nimport BuchungTabelle from \"../btmbuch/BuchungTabelle\";\r\n\r\nfunction ApothekeBtmList(props) {\r\n\r\n const { apoId } = useParams();\r\n const [btms, setBtms] = useState([]);\r\n const [input, setInput] = useState(\"\");\r\n\r\n const getBtms = async () => {\r\n const response = await fetch(\r\n `http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btmbuchung`,\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Authorization:\r\n \"Bearer \" + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }\r\n ).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n\r\n if (response.status === 200) {\r\n setBtms(await response.json());\r\n } else if (response.status === 403) {\r\n props.history.push(\"/forbidden\");\r\n } else if (response.status === 400) {\r\n props.history.push(\"/badrequest\");\r\n }\r\n };\r\n\r\n //wird aufgerufen von NeuesBtmModal wenn ein neues BTM hinzugefügt wurde\r\n props.apothekeRefFunctions.updateBtmList = getBtms;\r\n\r\n useEffect(() => {\r\n getBtms();\r\n }, []);\r\n\r\n return (\r\n <div className=\"btm-buchung-wrapper\">\r\n <input\r\n id=\"searchBtmField\"\r\n type=\"text\"\r\n placeholder=\"Betäubungsmittel suchen\"\r\n onChange={(event) => {\r\n setInput(event.target.value);\r\n }}\r\n value={input}\r\n />\r\n {btms\r\n .filter((val) => {\r\n if (input === \"\") {\r\n console.log(\"namen der Liste\", val.btm.name);\r\n return val;\r\n } else if (val.btm.name.toLowerCase().includes(input.toLowerCase())){\r\n return val;\r\n }\r\n })\r\n .map((btm, key) => (\r\n <BuchungTabelle {...props} btm={btm} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ApothekeBtmList;\r\n\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekenDetails.js",["143","144"],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\headers\\Header.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\headers\\StatusHeader.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\user\\UserDetails.js",["145","146","147"],"import React, {useState} from 'react'\r\nimport { Button, Col, Row, Form } from 'react-bootstrap';\r\nimport { Settings } from '@material-ui/icons';\r\nimport UserDetailsUpdateModal from '../modals/UserDetailsUpdateModal';\r\n\r\nfunction UserDetails(props) {\r\n //eslint disable-next-line\r\n const {rolle, vorname, name, nutzername, aktiv} = props.user;\r\n const [showUserSettings, setShowUserSettings] = useState(false);\r\n\r\n var allRoles = {\r\n ADMIN : { 0: \"Admin\", 1 : \"Pruefer\", 2: \"Benutzer\"},\r\n PRUEFER : { 0 : \"Pruefer\", 1: \"Benutzer\"},\r\n BENUTZER : { 0: \"Benutzer\"}\r\n }\r\n\r\n const logout = () => {\r\n window.sessionStorage.removeItem(\"edbapo-jwt\")\r\n props.history.push('/');\r\n }\r\n\r\n return(\r\n <Row>\r\n <UserDetailsUpdateModal {...props} loggedInUser={props.user} show={showUserSettings} onHide={() => setShowUserSettings(false)}/>\r\n\r\n <Col><b>Nutzername:</b> {nutzername}</Col>\r\n <Col>\r\n <Form.Control as=\"select\" onChange={(event) => props.setAktiveRolle(event.target.value.toUpperCase())}>\r\n {Object.keys(allRoles[rolle]).map( role => <option key={allRoles[rolle][role]} value={allRoles[rolle][role]}>{allRoles[rolle][role]}</option>)}\r\n </Form.Control>\r\n </Col>\r\n <Col>\r\n <Button onClick={() => setShowUserSettings(true)}>\r\n <Settings />\r\n Einstellungen\r\n </Button>\r\n </Col>\r\n <Col>\r\n <Button onClick={logout}>Logout</Button>\r\n </Col>\r\n </Row>\r\n )\r\n}\r\n\r\nexport default UserDetails;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\PersonalTabelle.js",["148"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\n\r\nimport PersonalAddModal from '../../../../modals/PersonalAddModal';\r\nimport PersonalEditModal from '../../../../modals/PersonalEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nfunction PersonalTabelle(props) {\r\n const { apoId } = useParams();\r\n const [personal, setPersonal] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedUser, setSelectedUser] = useState(null);\r\n const [showPersonalAddModal, setShowPersonalAddModal] = useState(false);\r\n const [showPersonalEditModal, setShowPersonalEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n\r\n\r\n const getPersonalData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setPersonal(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteUser = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer/${selectedUser.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res && res.status === 200) {\r\n getPersonalData();\r\n enqueueSnackbar('Benutzer erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const del = user => {\r\n setSelectedUser(user);\r\n setShowDeleteModal(true);\r\n }\r\n const edit = user => {\r\n setSelectedUser(user);\r\n setShowPersonalEditModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getPersonalData()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <PersonalAddModal {...props} show={showPersonalAddModal} onHide={() => setShowPersonalAddModal(false)} updatePersonalData={getPersonalData}/>\r\n {selectedUser ? <PersonalEditModal {...props} user={selectedUser} show={showPersonalEditModal} onHide={() => setShowPersonalEditModal(false)} updatePersonalData={getPersonalData}/> : null}\r\n <DeleteModal {...props} headertext={'Benutzer löschen'}\r\n maintext={'Möchtest du diesen Benutzer wirklich löschen?'} onSubmit={deleteUser} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Nutzername</th>\r\n <th>Nachname</th>\r\n <th>Vorname</th>\r\n <th>Aktiv</th>\r\n <th>Rolle</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowPersonalAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {personal.map(user =>\r\n <tr key={user.id}>\r\n <td>{user.nutzername}</td>\r\n <td>{user.name}</td>\r\n <td>{user.vorname}</td>\r\n <td>{user.aktiv ? 'ja' : 'nein'}</td>\r\n <td>{user.rolle}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(user)}><Edit /></Button>\r\n <Button onClick={() => del(user)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default PersonalTabelle;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BuchungTabelle.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeuesBtmModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeueBuchungModal.js",["149","150"],"import React, { useState, useEffect } from 'react';\r\nimport { Modal, Button, Form, Row, Col } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nfunction NeueBuchungModal(props) {\r\n \r\n const { enqueueSnackbar } = useSnackbar();\r\n const [typ, setTyp] = useState('');\r\n const [lieferanten, setLieferanten] = useState([]);\r\n const [aerzte, setAerzte] = useState([]);\r\n const [empfaenger, setEmpfaenger] = useState([]);\r\n\r\n const sendNewBuchungAnfrage = async (buchungData) => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/btmbuchung`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n body: JSON.stringify(buchungData)\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n\r\n if (response && response.status === 201) {\r\n const data = await response.json();\r\n // console.log(data);\r\n hideModal();\r\n enqueueSnackbar('Buchung erfolgreich angelegt', { variant:'success', autoHideDuration: 3000} );\r\n props.apothekeRefFunctions.updateBtmList();\r\n } else {\r\n //SHOW ERROR\r\n console.log(response);\r\n }\r\n }\r\n\r\n const createNewBuchung = event => {\r\n event.preventDefault();\r\n if (typ.toLowerCase() === 'zugang') {\r\n let { anforderungsschein, btmMenge, lieferant, pruefdatum } = event.target;\r\n let buchungData = {\r\n benutzer: props.user.id,\r\n btm: props.btm.btm.id,\r\n menge: btmMenge.value,\r\n typ: 'ZUGANG',\r\n lieferant: lieferant.value,\r\n anforderungsschein: anforderungsschein.value,\r\n pruefdatum: pruefdatum.value\r\n }\r\n sendNewBuchungAnfrage(buchungData);\r\n } else if (typ.toLowerCase() === 'abgang') {\r\n let { btmMenge, rezept, empfaenger, arzt, pruefdatum } = event.target;\r\n let buchungData = {\r\n benutzer: props.user.id,\r\n btm: props.btm.btm.id,\r\n menge: btmMenge.value,\r\n typ: 'ABGANG',\r\n empfaenger: empfaenger.value,\r\n arzt: arzt.value,\r\n rezept: rezept.value,\r\n pruefdatum: pruefdatum.value\r\n }\r\n sendNewBuchungAnfrage(buchungData);\r\n }\r\n }\r\n\r\n const hideModal = () => {\r\n setTyp('');\r\n props.onHide();\r\n }\r\n\r\n\r\n const loadLieferanten = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/lieferant`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n if (response.status === 200) {\r\n setLieferanten(await response.json());\r\n console.log(lieferanten);\r\n } else if (response.status === 403) {\r\n // props.history.push('/forbidden');\r\n } else if (response.status === 400) {\r\n // props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n const loadAerzte = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/arzt`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n if (response.status === 200) {\r\n setAerzte(await response.json());\r\n } else if (response.status === 403) {\r\n // props.history.push('/forbidden');\r\n } else if (response.status === 400) {\r\n // props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n const loadEmpfaenger = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/empfaenger`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n if (response.status === 200) {\r\n setEmpfaenger(await response.json());\r\n } else if (response.status === 403) {\r\n // props.history.push('/forbidden');\r\n } else if (response.status === 400) {\r\n // props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n loadLieferanten();\r\n loadAerzte();\r\n loadEmpfaenger();\r\n }, []);\r\n\r\n const renderZugang = () => {\r\n return (\r\n <React.Fragment>\r\n <Form.Group as={Row} controlId=\"anforderungsschein\">\r\n <Form.Label column sm=\"2\">\r\n Anforderungsschein\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"anforderungsschein\" type=\"text\" required />\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"lieferant\">\r\n <Form.Label column sm=\"2\">\r\n Lieferant\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"lieferant\" required as=\"select\">\r\n {lieferanten.map(l => <option key={l.id} value={l.id}>{l.name}</option>)}\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n </React.Fragment>)\r\n }\r\n\r\n const renderAbgang = () => {\r\n return (\r\n <React.Fragment>\r\n <Form.Group as={Row} controlId=\"empfaenger\">\r\n <Form.Label column sm=\"2\">\r\n Empfaenger\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"empfaenger\" required as=\"select\">\r\n {empfaenger.map(e => <option key={e.id} value={e.id}>{e.name}</option>)}\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"arzt\">\r\n <Form.Label column sm=\"2\">\r\n Arzt\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"arzt\" required as=\"select\">\r\n {aerzte.map(a => <option key={a.id} value={a.id}>{a.name}</option>)}\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"rezept\">\r\n <Form.Label column sm=\"2\">\r\n Rezept\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"rezept\" type=\"text\" required />\r\n </Col>\r\n </Form.Group>\r\n </React.Fragment>)\r\n }\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n size=\"lg\"\r\n aria-labelledby=\"contained-modal-title-vcenter\"\r\n centered\r\n onExiting={hideModal}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title id=\"contained-modal-title-vcenter\">\r\n Betäubungsmittel-Buchung hinzufügen\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Form onSubmit={createNewBuchung}>\r\n <Modal.Body>\r\n <Form.Group as={Row} controlId=\"Typ\">\r\n <Col sm={{ span: 10, offset: 2 }}>\r\n <Row sm={6}>\r\n <Form.Check required\r\n type=\"radio\"\r\n label=\"Zugang\"\r\n name=\"TypRadio\"\r\n id=\"ZugangRadio\"\r\n onClick={() => setTyp('zugang')}\r\n />\r\n <Form.Check required\r\n type=\"radio\"\r\n label=\"Abgang\"\r\n name=\"TypRadio\"\r\n id=\"AbgangRadio\"\r\n onClick={() => setTyp('abgang')}\r\n />\r\n </Row>\r\n </Col>\r\n </Form.Group>\r\n\r\n <Form.Group as={Row} controlId=\"btmMenge\">\r\n <Form.Label column sm=\"2\">\r\n Menge\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"btmMenge\" type=\"number\" min=\"1\" defaultValue=\"0\" />\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"pruefdatum\">\r\n <Form.Label column sm=\"2\">\r\n Prüfdatum\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"pruefdatum\" type=\"date\" defaultValue={new Date()} />\r\n </Col>\r\n </Form.Group>\r\n\r\n {typ.toLowerCase() === 'zugang' ? renderZugang() : null}\r\n {typ.toLowerCase() === 'abgang' ? renderAbgang() : null}\r\n\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"danger\" onClick={hideModal}>Close</Button>\r\n <Button variant=\"primary\" type=\"submit\">Bestätigen</Button>\r\n </Modal.Footer>\r\n </Form>\r\n\r\n\r\n\r\n </Modal>\r\n )\r\n\r\n}\r\n\r\nexport default NeueBuchungModal;","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\ApothekeRegisterModal.js",["151","152","153","154","155","156","157"],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\useForm.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\ArztTabelle.js",["158"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport ArztAddModal from '../../../../modals/ArztAddModal';\r\nimport ArztEditModal from '../../../../modals/ArztEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\n\r\nfunction ArztTabelle(props) {\r\n const { apoId } = useParams();\r\n const [aerzte, setAerzte] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedArzt, setSelectedArzt] = useState(null);\r\n const [showArztAddModal, setShowArztAddModal] = useState(false);\r\n const [showArztEditModal, setShowArztEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n const getArztData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/arzt`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setAerzte(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteArzt = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/arzt/${selectedArzt.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n getArztData()\r\n enqueueSnackbar('Arzt erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const edit = arzt => {\r\n setSelectedArzt(arzt);\r\n setShowArztEditModal(true);\r\n }\r\n\r\n const del = arzt => {\r\n setSelectedArzt(arzt);\r\n setShowDeleteModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getArztData();\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <ArztAddModal {...props} show={showArztAddModal} onHide={() => setShowArztAddModal(false)} updateArztData={getArztData} />\r\n {selectedArzt ? <ArztEditModal {...props} arzt={selectedArzt} show={showArztEditModal} onHide={() => setShowArztEditModal(false)} updateArztData={getArztData} /> : null}\r\n <DeleteModal {...props} headertext={'Arzt löschen'}\r\n maintext={'Möchtest du diesen Arzt wirklich löschen?'} onSubmit={deleteArzt} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Strasse</th>\r\n <th>Ort</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowArztAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {aerzte.map(arzt =>\r\n <tr key={arzt.id}>\r\n <td>{arzt.name}</td>\r\n <td>{arzt.anschrift.strasse} {arzt.anschrift.nummer}</td>\r\n <td>{arzt.anschrift.plz} {arzt.anschrift.ort}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(arzt)}><Edit /></Button>\r\n <Button onClick={() => del(arzt)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default ArztTabelle;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\LieferantTabelle.js",["159"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport LieferantAddModal from '../../../../modals/LieferantAddModal';\r\nimport LieferantEditModal from '../../../../modals/LieferantEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\n\r\nfunction LieferantTabelle(props) {\r\n const { apoId } = useParams();\r\n const [lieferanten, setLieferanten] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedLieferant, setSelectedLieferant] = useState(null);\r\n const [showLieferantAddModal, setShowLieferantAddModal] = useState(false);\r\n const [showLieferantEditModal, setShowLieferantEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n const getLieferantData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/lieferant`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setLieferanten(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteLieferant = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/lieferant/${selectedLieferant.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n getLieferantData()\r\n enqueueSnackbar('Lieferant erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const edit = lieferant => {\r\n setSelectedLieferant(lieferant);\r\n setShowLieferantEditModal(true);\r\n }\r\n\r\n const del = lieferant => {\r\n setSelectedLieferant(lieferant);\r\n setShowDeleteModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getLieferantData()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <LieferantAddModal {...props} show={showLieferantAddModal} onHide={() => setShowLieferantAddModal(false)} updateLieferantData={getLieferantData} />\r\n {selectedLieferant ? <LieferantEditModal {...props} lieferant={selectedLieferant} show={showLieferantEditModal} onHide={() => setShowLieferantEditModal(false)} updateLieferantData={getLieferantData} /> : null}\r\n <DeleteModal {...props} headertext={'Lieferant löschen'}\r\n maintext={'Möchtest du diesen Lieferant wirklich löschen?'} onSubmit={deleteLieferant} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Strasse</th>\r\n <th>Ort</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowLieferantAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {lieferanten.map(lieferant =>\r\n <tr key={lieferant.id}>\r\n <td>{lieferant.name}</td>\r\n <td>{lieferant.anschrift.strasse} {lieferant.anschrift.nummer}</td>\r\n <td>{lieferant.anschrift.plz} {lieferant.anschrift.ort}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(lieferant)}><Edit /></Button>\r\n <Button onClick={() => del(lieferant)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default LieferantTabelle;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\BtmTabelle.js",["160"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport BtmAddModal from '../../../../modals/BtmAddModal';\r\nimport BtmEditModal from '../../../../modals/BtmEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\n\r\nfunction BtmTabelle(props) {\r\n const { apoId } = useParams();\r\n const [btmListe, setBtmListe] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedBtm, setSelectedBtm] = useState(null);\r\n const [showBtmAddModal, setShowBtmAddModal] = useState(false);\r\n const [showBtmEditModal, setShowBtmEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n const getBtmData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btm`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setBtmListe(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteBtm = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btm/${selectedBtm.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n getBtmData()\r\n enqueueSnackbar('Btm erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const edit = btm => {\r\n setSelectedBtm(btm);\r\n setShowBtmEditModal(true);\r\n }\r\n\r\n const del = btm => {\r\n setSelectedBtm(btm);\r\n setShowDeleteModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getBtmData()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <BtmAddModal {...props} show={showBtmAddModal} onHide={() => setShowBtmAddModal(false)} updateBtmData={getBtmData} />\r\n {selectedBtm ? <BtmEditModal {...props} btm={selectedBtm} show={showBtmEditModal} onHide={() => setShowBtmEditModal(false)} updateBtmData={getBtmData} /> : null}\r\n <DeleteModal {...props} headertext={'Btm löschen'}\r\n maintext={'Möchtest du diesen Btm wirklich löschen?'} onSubmit={deleteBtm} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Darreichungsform</th>\r\n <th>Einheit</th>\r\n <th>Menge</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowBtmAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {btmListe.map(btm =>\r\n <tr key={btm.id}>\r\n <td>{btm.name}</td>\r\n <td>{btm.darreichungsform}</td>\r\n <td>{btm.einheit}</td>\r\n <td>{btm.menge}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(btm)}><Edit /></Button>\r\n <Button onClick={() => del(btm)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default BtmTabelle;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\UserDetailsUpdateModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\ArztAddModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\ArztEditModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\DeleteModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\LieferantAddModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\BtmAddModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\PersonalAddModal.js",["161"],"import React, { useState, useEffect } from 'react';\r\nimport { Modal, Col, Button, Form } from 'react-bootstrap';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nfunction PersonalAddModal(props) {\r\n\r\n const { apoId } = useParams();\r\n\r\n const [nutzernameVergeben, setNutzernameVergeben] = useState(false);\r\n\r\n //for password checking\r\n const [passwordConfirmInvalid, setPasswordConfirmInvalid] = useState(false);\r\n const [newPasswordVal, setNewPasswordVal] = useState('');\r\n const [passwordConfirmVal, setPasswordConfirmVal] = useState('');\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n let roles = [\"ADMIN\", \"PRUEFER\", \"BENUTZER\"];\r\n\r\n const createNewUser = async event => {\r\n event.preventDefault();\r\n let { username, vorname, nachname, neuesPasswort, rolle } = event.target;\r\n\r\n let body = {\r\n name: nachname.value,\r\n nutzername: username.value,\r\n vorname: vorname.value,\r\n aktiv: true,\r\n rolle: rolle.value,\r\n passwort: neuesPasswort.value\r\n }\r\n\r\n console.log(body)\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n body: JSON.stringify(body)\r\n }).then((res) => {\r\n if (res.status === 201) {\r\n props.onHide();\r\n props.updateUserList();\r\n enqueueSnackbar('Benutzer erstellt', { variant: 'success', autoHideDuration: 3000 });\r\n } else if (res.status === 400) {\r\n enqueueSnackbar('Ein Fehler ist aufgetaucht', { variant: 'error', autoHideDuration: 3000 });\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n return;\r\n });\r\n }\r\n\r\n const checkIfUserNameIsTaken = async event => {\r\n let newUsername = event.target.value;\r\n if (newUsername.length < 4) {\r\n //if shorter than 4 its invalid\r\n setNutzernameVergeben(true);\r\n return;\r\n }\r\n\r\n await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer/${newUsername}/checkUsername`, {\r\n method: 'POST',\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n setNutzernameVergeben(false);\r\n } else if (res.status === 400) {\r\n setNutzernameVergeben(true);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n return;\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n setPasswordConfirmInvalid(newPasswordVal !== passwordConfirmVal);\r\n }, [newPasswordVal, passwordConfirmVal]);\r\n\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n size=\"lg\"\r\n aria-labelledby=\"contained-modal-title-vcenter\"\r\n centered\r\n onExiting={props.onHide}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title id=\"contained-modal-title-vcenter\">\r\n Benutzer Einstellungen\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Form onSubmit={createNewUser}>\r\n <Modal.Body>\r\n <Form.Row>\r\n <Form.Group as={Col} controlId=\"username\">\r\n <Form.Label>Benutzername</Form.Label>\r\n <Form.Control name=\"username\" required onChange={checkIfUserNameIsTaken}\r\n isInvalid={nutzernameVergeben} type=\"text\" />\r\n </Form.Group>\r\n </Form.Row>\r\n\r\n <Form.Row>\r\n <Form.Group as={Col} sm={4} controlId=\"vorname\">\r\n <Form.Label>Vorname</Form.Label>\r\n <Form.Control name=\"vorname\" required type=\"text\" />\r\n </Form.Group>\r\n\r\n <Form.Group as={Col} sm={8} controlId=\"nachname\">\r\n <Form.Label>Nachname</Form.Label>\r\n <Form.Control name=\"nachname\" required type=\"text\" />\r\n </Form.Group>\r\n </Form.Row>\r\n\r\n <Form.Row>\r\n <Form.Group as={Col} controlId=\"neuesPasswort\">\r\n <Form.Label>Neues Passwort</Form.Label>\r\n <Form.Control required minlength={5} onChange={event => setNewPasswordVal(event.target.value)} name=\"neuesPasswort\" type=\"password\" />\r\n </Form.Group>\r\n <Form.Group as={Col} controlId=\"neuesPasswortConfirm\">\r\n <Form.Label>Neues Passwort bestätigen</Form.Label>\r\n <Form.Control required minlength={5} onChange={event => setPasswordConfirmVal(event.target.value)} isInvalid={passwordConfirmInvalid} name=\"neuesPasswortConfirm\" type=\"password\" />\r\n </Form.Group>\r\n </Form.Row>\r\n <Form.Row>\r\n <Form.Group as={Col} sm={4} controlId=\"rolle\">\r\n <Form.Label>Rolle</Form.Label>\r\n <Form.Control required name=\"rolle\" required as=\"select\" >\r\n {roles.map(r => <option key={r} value={r}>{r}</option>)}\r\n </Form.Control>\r\n </Form.Group>\r\n </Form.Row>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button autofocus variant=\"\" onClick={props.onHide}>Abbrechen</Button>\r\n <Button variant=\"primary\" type=\"submit\" >Bestätigen</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n )\r\n}\r\n\r\nexport default PersonalAddModal;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\BtmEditModal.js",["162","163","164"],"import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { Modal, Col, Button, Form, Alert, Row } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\nimport { responsiveFontSizes } from '@material-ui/core';\r\n\r\nfunction BtmEditModal(props) {\r\n\r\n const { apoId } = useParams();\r\n\r\n const darreichungsformen = {\r\n 'Tbl': { einheiten: ['Stueck'] },\r\n 'Trp': { einheiten: ['ml'] },\r\n 'Sup': { einheiten: ['Stueck'] },\r\n 'RTA': { einheiten: ['Stueck'] },\r\n 'RKA': { einheiten: ['Stueck'] },\r\n 'Ampullen': { einheiten: ['Stueck'] },\r\n 'Rezeptursubstanz': { einheiten: ['mg', 'g'] },\r\n 'HKP': { einheiten: ['Stueck'] },\r\n 'Pfl': { einheiten: ['Stueck'] }\r\n };\r\n\r\n let { id, darreichungsform, einheit, name, menge } = props.btm;\r\n // console.log(props.btm)\r\n\r\n const [activeDarreichungsform, setActiveDarreichungsform] = useState(darreichungsform);\r\n const [activeEinheit, setActiveEinheit] = useState(einheit);\r\n const [einheiten, setEinheiten] = useState(darreichungsformen[darreichungsform].einheiten);\r\n\r\n const [showError, setShowError] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n\r\n const updateDetails = async event => {\r\n event.preventDefault();\r\n let { name, darreichungsform, einheit, menge } = event.target;\r\n let body = {\r\n name: name.value,\r\n darreichungsform: darreichungsform.value,\r\n einheit: einheit.value,\r\n menge: menge.value\r\n }\r\n console.log(body)\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btm/${id}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n body: JSON.stringify(body)\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n hide();\r\n props.updateBtmData();\r\n enqueueSnackbar('Benutzer aktualisiert', { variant: 'success', autoHideDuration: 3000 });\r\n } else if (res.status === 400) {\r\n enqueueSnackbar('Ein Fehler ist aufgetaucht', { variant: 'error', autoHideDuration: 3000 });\r\n } else if (responsiveFontSizes.status === 403) {\r\n enqueueSnackbar('Falsches Passwort', { variant: 'error', autoHideDuration: 3000 });\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n return;\r\n });\r\n\r\n \r\n }\r\n\r\n useEffect(() => {\r\n setActiveDarreichungsform(props.btm.darreichungsform);\r\n setActiveEinheit(props.btm.einheit);\r\n setEinheiten(darreichungsformen[props.btm.darreichungsform].einheiten)\r\n console.log(activeDarreichungsform, activeEinheit, einheiten)\r\n }, [props.btm])\r\n\r\n const hide = () => {\r\n setActiveDarreichungsform(props.btm.darreichungsform);\r\n setActiveEinheit(props.btm.einheit);\r\n setEinheiten(darreichungsformen[props.btm.darreichungsform].einheiten)\r\n props.onHide();\r\n }\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n size=\"lg\"\r\n aria-labelledby=\"contained-modal-title-vcenter\"\r\n centered\r\n onExiting={hide}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title id=\"contained-modal-title-vcenter\">\r\n Betäubungsmittel bearbeiten\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Form onSubmit={updateDetails}>\r\n {showError ? <Alert variant=\"danger\">{errorMessage}</Alert> : null}\r\n <Modal.Body>\r\n <Form.Group as={Row} controlId=\"name\">\r\n <Form.Label column sm=\"2\">\r\n Name\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={name} name=\"name\" required type=\"text\" />\r\n </Col>\r\n </Form.Group>\r\n\r\n <Form.Group as={Row} controlId=\"menge\">\r\n <Form.Label column sm=\"2\">\r\n Menge\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={menge} name=\"menge\" type=\"number\" min=\"0\" />\r\n </Col>\r\n </Form.Group>\r\n\r\n\r\n <Form.Group as={Row} controlId=\"darreichungsform\">\r\n <Form.Label column sm=\"2\">\r\n Darreichungsform\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={darreichungsform} onChange={event => {\r\n setActiveDarreichungsform(event.target.value)\r\n setEinheiten(darreichungsformen[event.target.value].einheiten)\r\n }} name=\"darreichungsform\" required as=\"select\">\r\n {\r\n darreichungsformen ? Object.keys(darreichungsformen).map(df => <option kef={df} value={df}>{df}</option>) : null\r\n }\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n\r\n <Form.Group as={Row} controlId=\"einheit\">\r\n <Form.Label column sm=\"2\">\r\n Einheit\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={einheit} name=\"einheit\" required as=\"select\">\r\n {\r\n einheiten ? Object.keys(einheiten).map(e => <option key={einheiten[e]} value={einheiten[e]}>{einheiten[e]}</option>) : null\r\n }\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"\" onClick={props.onHide}>Abbrechen</Button>\r\n <Button variant=\"primary\" type=\"submit\">Bestätigen</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n )\r\n\r\n\r\n}\r\n\r\nexport default BtmEditModal;\r\n","C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\LieferantEditModal.js",[],"C:\\Users\\Public\\EDB\\EDB-Apo\\frontend\\src\\modals\\PersonalEditModal.js",[],{"ruleId":"165","replacedBy":"166"},{"ruleId":"167","replacedBy":"168"},{"ruleId":"169","severity":1,"message":"170","line":3,"column":50,"nodeType":"171","messageId":"172","endLine":3,"endColumn":54},{"ruleId":"173","severity":1,"message":"174","line":44,"column":6,"nodeType":"175","endLine":44,"endColumn":8,"suggestions":"176"},{"ruleId":"173","severity":1,"message":"177","line":81,"column":6,"nodeType":"175","endLine":81,"endColumn":8,"suggestions":"178"},{"ruleId":"169","severity":1,"message":"179","line":2,"column":9,"nodeType":"171","messageId":"172","endLine":2,"endColumn":12},{"ruleId":"173","severity":1,"message":"180","line":40,"column":6,"nodeType":"175","endLine":40,"endColumn":8,"suggestions":"181"},{"ruleId":"182","severity":1,"message":"183","line":54,"column":23,"nodeType":"184","messageId":"185","endLine":54,"endColumn":25},{"ruleId":"169","severity":1,"message":"186","line":2,"column":10,"nodeType":"171","messageId":"172","endLine":2,"endColumn":19},{"ruleId":"173","severity":1,"message":"187","line":37,"column":6,"nodeType":"175","endLine":37,"endColumn":8,"suggestions":"188"},{"ruleId":"169","severity":1,"message":"189","line":8,"column":18,"nodeType":"171","messageId":"172","endLine":8,"endColumn":25},{"ruleId":"169","severity":1,"message":"190","line":8,"column":27,"nodeType":"171","messageId":"172","endLine":8,"endColumn":31},{"ruleId":"169","severity":1,"message":"191","line":8,"column":45,"nodeType":"171","messageId":"172","endLine":8,"endColumn":50},{"ruleId":"173","severity":1,"message":"192","line":73,"column":6,"nodeType":"175","endLine":73,"endColumn":8,"suggestions":"193"},{"ruleId":"169","severity":1,"message":"194","line":28,"column":19,"nodeType":"171","messageId":"172","endLine":28,"endColumn":23},{"ruleId":"173","severity":1,"message":"195","line":143,"column":8,"nodeType":"175","endLine":143,"endColumn":10,"suggestions":"196"},{"ruleId":"169","severity":1,"message":"197","line":1,"column":17,"nodeType":"171","messageId":"172","endLine":1,"endColumn":26},{"ruleId":"169","severity":1,"message":"186","line":2,"column":10,"nodeType":"171","messageId":"172","endLine":2,"endColumn":19},{"ruleId":"169","severity":1,"message":"179","line":4,"column":31,"nodeType":"171","messageId":"172","endLine":4,"endColumn":34},{"ruleId":"169","severity":1,"message":"198","line":137,"column":9,"nodeType":"171","messageId":"172","endLine":137,"endColumn":15},{"ruleId":"199","severity":1,"message":"200","line":300,"column":32,"nodeType":"201","messageId":"202","endLine":300,"endColumn":34},{"ruleId":"199","severity":1,"message":"200","line":301,"column":35,"nodeType":"201","messageId":"202","endLine":301,"endColumn":37},{"ruleId":"199","severity":1,"message":"200","line":311,"column":32,"nodeType":"201","messageId":"202","endLine":311,"endColumn":34},{"ruleId":"173","severity":1,"message":"203","line":72,"column":6,"nodeType":"175","endLine":72,"endColumn":8,"suggestions":"204"},{"ruleId":"173","severity":1,"message":"205","line":72,"column":6,"nodeType":"175","endLine":72,"endColumn":8,"suggestions":"206"},{"ruleId":"173","severity":1,"message":"207","line":72,"column":6,"nodeType":"175","endLine":72,"endColumn":8,"suggestions":"208"},{"ruleId":"209","severity":1,"message":"210","line":131,"column":51,"nodeType":"211","endLine":131,"endColumn":59},{"ruleId":"169","severity":1,"message":"212","line":30,"column":21,"nodeType":"171","messageId":"172","endLine":30,"endColumn":33},{"ruleId":"169","severity":1,"message":"213","line":31,"column":24,"nodeType":"171","messageId":"172","endLine":31,"endColumn":39},{"ruleId":"173","severity":1,"message":"214","line":75,"column":6,"nodeType":"175","endLine":75,"endColumn":17,"suggestions":"215"},"no-native-reassign",["216"],"no-negated-in-lhs",["217"],"no-unused-vars","'Link' is defined but never used.","Identifier","unusedVar","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'getUserDetails'. Either include it or remove the dependency array.","ArrayExpression",["218"],"React Hook useEffect has missing dependencies: 'getCurrentApotheke' and 'getUserData'. Either include them or remove the dependency array.",["219"],"'Row' is defined but never used.","React Hook useEffect has a missing dependency: 'getBtms'. Either include it or remove the dependency array.",["220"],"array-callback-return","Array.prototype.filter() expects a value to be returned at the end of arrow function.","ArrowFunctionExpression","expectedAtEnd","'useParams' is defined but never used.","React Hook useEffect has a missing dependency: 'getApothekeData'. Either include it or remove the dependency array.",["221"],"'vorname' is assigned a value but never used.","'name' is assigned a value but never used.","'aktiv' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'getPersonalData'. Either include it or remove the dependency array.",["222"],"'data' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'loadAerzte', 'loadEmpfaenger', and 'loadLieferanten'. Either include them or remove the dependency array.",["223"],"'useEffect' is defined but never used.","'cancel' is assigned a value but never used.","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","React Hook useEffect has a missing dependency: 'getArztData'. Either include it or remove the dependency array.",["224"],"React Hook useEffect has a missing dependency: 'getLieferantData'. Either include it or remove the dependency array.",["225"],"React Hook useEffect has a missing dependency: 'getBtmData'. Either include it or remove the dependency array.",["226"],"react/jsx-no-duplicate-props","No duplicate props allowed","JSXAttribute","'setShowError' is assigned a value but never used.","'setErrorMessage' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'activeDarreichungsform', 'activeEinheit', 'darreichungsformen', and 'einheiten'. Either include them or remove the dependency array.",["227"],"no-global-assign","no-unsafe-negation",{"desc":"228","fix":"229"},{"desc":"230","fix":"231"},{"desc":"232","fix":"233"},{"desc":"234","fix":"235"},{"desc":"236","fix":"237"},{"desc":"238","fix":"239"},{"desc":"240","fix":"241"},{"desc":"242","fix":"243"},{"desc":"244","fix":"245"},{"desc":"246","fix":"247"},"Update the dependencies array to be: [getUserDetails]",{"range":"248","text":"249"},"Update the dependencies array to be: [getCurrentApotheke, getUserData]",{"range":"250","text":"251"},"Update the dependencies array to be: [getBtms]",{"range":"252","text":"253"},"Update the dependencies array to be: [getApothekeData]",{"range":"254","text":"255"},"Update the dependencies array to be: [getPersonalData]",{"range":"256","text":"257"},"Update the dependencies array to be: [loadAerzte, loadEmpfaenger, loadLieferanten]",{"range":"258","text":"259"},"Update the dependencies array to be: [getArztData]",{"range":"260","text":"261"},"Update the dependencies array to be: [getLieferantData]",{"range":"262","text":"263"},"Update the dependencies array to be: [getBtmData]",{"range":"264","text":"265"},"Update the dependencies array to be: [activeDarreichungsform, activeEinheit, darreichungsformen, einheiten, props.btm]",{"range":"266","text":"267"},[1478,1480],"[getUserDetails]",[2550,2552],"[getCurrentApotheke, getUserData]",[1141,1143],"[getBtms]",[1118,1120],"[getApothekeData]",[2410,2412],"[getPersonalData]",[5207,5209],"[loadAerzte, loadEmpfaenger, loadLieferanten]",[2331,2333],"[getArztData]",[2475,2477],"[getLieferantData]",[2310,2312],"[getBtmData]",[2744,2755],"[activeDarreichungsform, activeEinheit, darreichungsformen, einheiten, props.btm]"] \ No newline at end of file +[{"D:\\dev\\EDB-Apo\\frontend\\src\\index.js":"1","D:\\dev\\EDB-Apo\\frontend\\src\\App.js":"2","D:\\dev\\EDB-Apo\\frontend\\src\\components\\startseite\\Startseite.js":"3","D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BTMBuch.js":"4","D:\\dev\\EDB-Apo\\frontend\\src\\components\\startseite\\Login.js":"5","D:\\dev\\EDB-Apo\\frontend\\src\\components\\headers\\Header.js":"6","D:\\dev\\EDB-Apo\\frontend\\src\\components\\headers\\StatusHeader.js":"7","D:\\dev\\EDB-Apo\\frontend\\src\\user\\UserDetails.js":"8","D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeuesBtmModal.js":"9","D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BuchungTabelle.js":"10","D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeueBuchungModal.js":"11","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\ApothekeEinstellungen.js":"12","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekenDetails.js":"13","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekeBtmList.js":"14","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\PersonalTabelle.js":"15","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\ArztTabelle.js":"16","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\LieferantTabelle.js":"17","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\BtmTabelle.js":"18","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\PersonalAddModal.js":"19","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\DeleteModal.js":"20","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\PersonalEditModal.js":"21","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\BtmAddModal.js":"22","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\LieferantEditModal.js":"23","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\BtmEditModal.js":"24","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\ArztEditModal.js":"25","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\LieferantAddModal.js":"26","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\ArztAddModal.js":"27","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\ApothekeEditModal.js":"28","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\UserDetailsUpdateModal.js":"29"},{"size":280,"mtime":1607716944341,"results":"30","hashOfConfig":"31"},{"size":1054,"mtime":1607969714775,"results":"32","hashOfConfig":"31"},{"size":291,"mtime":1607953306893,"results":"33","hashOfConfig":"31"},{"size":2326,"mtime":1607969714791,"results":"34","hashOfConfig":"31"},{"size":1808,"mtime":1607953306893,"results":"35","hashOfConfig":"31"},{"size":206,"mtime":1607953306892,"results":"36","hashOfConfig":"31"},{"size":542,"mtime":1607953306893,"results":"37","hashOfConfig":"31"},{"size":1647,"mtime":1607969714791,"results":"38","hashOfConfig":"31"},{"size":4879,"mtime":1607953306892,"results":"39","hashOfConfig":"31"},{"size":2685,"mtime":1607953306892,"results":"40","hashOfConfig":"31"},{"size":10483,"mtime":1607953306892,"results":"41","hashOfConfig":"31"},{"size":4915,"mtime":1608028382242,"results":"42","hashOfConfig":"31"},{"size":1688,"mtime":1607969714791,"results":"43","hashOfConfig":"31"},{"size":1941,"mtime":1607969714791,"results":"44","hashOfConfig":"31"},{"size":4203,"mtime":1607961925919,"results":"45","hashOfConfig":"31"},{"size":3969,"mtime":1607961881960,"results":"46","hashOfConfig":"31"},{"size":4253,"mtime":1607961900285,"results":"47","hashOfConfig":"31"},{"size":3950,"mtime":1607961867240,"results":"48","hashOfConfig":"31"},{"size":5146,"mtime":1608027242688,"results":"49","hashOfConfig":"31"},{"size":1120,"mtime":1607953306894,"results":"50","hashOfConfig":"31"},{"size":6405,"mtime":1608027242688,"results":"51","hashOfConfig":"31"},{"size":4523,"mtime":1607962038625,"results":"52","hashOfConfig":"31"},{"size":3548,"mtime":1608027242688,"results":"53","hashOfConfig":"31"},{"size":5656,"mtime":1607962116356,"results":"54","hashOfConfig":"31"},{"size":3517,"mtime":1608027242688,"results":"55","hashOfConfig":"31"},{"size":3218,"mtime":1608027242688,"results":"56","hashOfConfig":"31"},{"size":3180,"mtime":1608027239646,"results":"57","hashOfConfig":"31"},{"size":3085,"mtime":1608027489589,"results":"58","hashOfConfig":"31"},{"size":7659,"mtime":1607969714791,"results":"59","hashOfConfig":"31"},{"filePath":"60","messages":"61","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},"19g8awo",{"filePath":"63","messages":"64","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"65","usedDeprecatedRules":"62"},{"filePath":"66","messages":"67","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"68","messages":"69","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"70","usedDeprecatedRules":"62"},{"filePath":"71","messages":"72","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"73","usedDeprecatedRules":"62"},{"filePath":"74","messages":"75","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"80","usedDeprecatedRules":"62"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"87","usedDeprecatedRules":"62"},{"filePath":"88","messages":"89","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"90","messages":"91","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"92","usedDeprecatedRules":"62"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"95","usedDeprecatedRules":"62"},{"filePath":"96","messages":"97","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"98","usedDeprecatedRules":"62"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"101","usedDeprecatedRules":"62"},{"filePath":"102","messages":"103","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"104","usedDeprecatedRules":"62"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"107","usedDeprecatedRules":"62"},{"filePath":"108","messages":"109","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"110","usedDeprecatedRules":"62"},{"filePath":"111","messages":"112","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"113","messages":"114","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"117","messages":"118","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"119","messages":"120","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"121","usedDeprecatedRules":"62"},{"filePath":"122","messages":"123","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"124","messages":"125","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"126","messages":"127","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"128","messages":"129","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"130","messages":"131","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},"D:\\dev\\EDB-Apo\\frontend\\src\\index.js",[],["132","133"],"D:\\dev\\EDB-Apo\\frontend\\src\\App.js",["134"],"import React from 'react';\r\nimport './App.scss';\r\nimport { BrowserRouter as Router, Switch, Route, Link } from \"react-router-dom\";\r\nimport Startseite from './components/startseite/Startseite';\r\nimport BTMBuch from './components/btmbuch/BTMBuch';\r\nimport ApothekeEinstellungen from './components/apotheke/einstellungen/ApothekeEinstellungen';\r\nimport { SnackbarProvider } from 'notistack';\r\nrequire('dotenv').config()\r\n\r\n// library.add(fab, faCheckSquare, faBookMedical)\r\n\r\nfunction App() {\r\n return (\r\n <React.Fragment>\r\n <SnackbarProvider maxSnack={10} anchorOrigin={{vertical:'bottom', horizontal:'center'}}>\r\n <Router>\r\n <Switch>\r\n <Route path=\"/\" exact component={Startseite} />\r\n <Route path=\"/login\" exact component={Startseite} />\r\n <Route path=\"/apotheke/:apoId\" exact component={BTMBuch} />\r\n <Route path=\"/apotheke/:apoId/einstellungen\" exact component={ApothekeEinstellungen} />\r\n </Switch>\r\n </Router>\r\n </SnackbarProvider>\r\n </React.Fragment>);\r\n}\r\n\r\nexport default App;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\startseite\\Startseite.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BTMBuch.js",["135"],"import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport Header from '../headers/Header'\r\nimport StatusHeader from '../headers/StatusHeader'\r\nimport ApothekenDetails from '../apotheke/ApothekenDetails';\r\nimport UserDetails from '../../user/UserDetails';\r\nimport ApothekeBtmList from '../apotheke/ApothekeBtmList';\r\nimport {Row, Col} from 'react-bootstrap';\r\nimport './BTMBuch.scss'\r\n \r\nfunction BTMBuch (props) {\r\n const { apoId } = useParams();\r\n\r\n const [user, setUser] = useState({});\r\n const [isLoggedIn, setLoggedIn] = useState(false);\r\n const [aktiveRolle, setAktiveRolle] = useState('');\r\n\r\n const getUserDetails = async event => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/benutzer/me`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n\r\n if(response.status === 200) {\r\n let u = await response.json();\r\n console.log(JSON.stringify(u))\r\n setUser(u);\r\n setAktiveRolle(u.rolle);\r\n setLoggedIn(true);\r\n }else if(response.status === 403) {\r\n props.history.push('/forbidden');\r\n }else if(response.status === 400){\r\n props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getUserDetails();\r\n }, [])\r\n\r\n //this obj is passed to each child, each child can add functions to this object and call functions from this object\r\n let apothekeRefFunctions = {}\r\n \r\n return(\r\n <React.Fragment>\r\n {aktiveRolle.toLowerCase() !== 'benutzer' ?<StatusHeader aktiveRolle={aktiveRolle}/> : null}\r\n <Header />\r\n <Row className=\"details-list\">\r\n <Col><ApothekenDetails {...props} apothekeRefFunctions={apothekeRefFunctions} apothekeId={apoId}/></Col>\r\n <Col>{isLoggedIn ? <UserDetails {...props} user={user} setUser={setUser} aktiveRolle={aktiveRolle} setAktiveRolle={setAktiveRolle}/> : null }</Col>\r\n </Row> \r\n <ApothekeBtmList apothekeId={apoId} user={user} apothekeRefFunctions={apothekeRefFunctions} {...props}/> \r\n </React.Fragment>\r\n )\r\n}\r\n\r\nexport default BTMBuch;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\startseite\\Login.js",["136"],"import React, { useState } from 'react';\r\nimport {Row, Col, Button, Form,} from 'react-bootstrap';\r\nimport { useForm } from \"react-hook-form\";\r\nimport './Startseite.scss'\r\n\r\n\r\nfunction Login(props) {\r\n const {handleSubmit} = useForm();\r\n const [user, setUser] = useState({username:'', password:''});\r\n \r\n const login = async event => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/login`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n username: user.username,\r\n password: user.password\r\n })\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n\r\n if(response && response.status === 200){\r\n const data = await response.json();\r\n window.sessionStorage.setItem(\"edbapo-jwt\", data.jwt)\r\n props.history.push(`/apotheke/${data.apothekeId}`);\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"login\">\r\n <b style={{fontSize:'20pt'}}>Login:</b>\r\n <Form onSubmit={handleSubmit(login)} >\r\n <Form.Row>\r\n <Col>\r\n <Form.Control onChange={e => setUser({...user, username: e.target.value})} placeholder=\"Benutzername\" />\r\n <Form.Control onChange={e => setUser({...user, password: e.target.value})} placeholder=\"Passwort\" />\r\n <Button variant=\"primary\" type=\"submit\">Login</Button>\r\n <Button variant=\"primary\" >Neue Apotheke registrieren</Button>\r\n </Col>\r\n </Form.Row>\r\n </Form>\r\n </div>\r\n )\r\n}\r\nexport default Login;","D:\\dev\\EDB-Apo\\frontend\\src\\components\\headers\\Header.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\components\\headers\\StatusHeader.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\user\\UserDetails.js",["137","138","139"],"import React, {useState} from 'react'\r\nimport { Button, Col, Row, Form } from 'react-bootstrap';\r\nimport { Settings } from '@material-ui/icons';\r\nimport UserDetailsUpdateModal from '../modals/UserDetailsUpdateModal';\r\n\r\nfunction UserDetails(props) {\r\n //eslint disable-next-line\r\n const {rolle, vorname, name, nutzername, aktiv} = props.user;\r\n const [showUserSettings, setShowUserSettings] = useState(false);\r\n\r\n var allRoles = {\r\n ADMIN : { 0: \"Admin\", 1 : \"Pruefer\", 2: \"Benutzer\"},\r\n PRUEFER : { 0 : \"Pruefer\", 1: \"Benutzer\"},\r\n BENUTZER : { 0: \"Benutzer\"}\r\n }\r\n\r\n const logout = () => {\r\n window.sessionStorage.removeItem(\"edbapo-jwt\")\r\n props.history.push('/');\r\n }\r\n\r\n return(\r\n <Row>\r\n <UserDetailsUpdateModal {...props} loggedInUser={props.user} show={showUserSettings} onHide={() => setShowUserSettings(false)}/>\r\n\r\n <Col><b>Nutzername:</b> {nutzername}</Col>\r\n <Col>\r\n <Form.Control as=\"select\" onChange={(event) => props.setAktiveRolle(event.target.value.toUpperCase())}>\r\n {Object.keys(allRoles[rolle]).map( role => <option key={allRoles[rolle][role]} value={allRoles[rolle][role]}>{allRoles[rolle][role]}</option>)}\r\n </Form.Control>\r\n </Col>\r\n <Col>\r\n <Button onClick={() => setShowUserSettings(true)}>\r\n <Settings />\r\n Einstellungen\r\n </Button>\r\n </Col>\r\n <Col>\r\n <Button onClick={logout}>Logout</Button>\r\n </Col>\r\n </Row>\r\n )\r\n}\r\n\r\nexport default UserDetails;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeuesBtmModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\BuchungTabelle.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\components\\btmbuch\\NeueBuchungModal.js",["140","141"],"import React, { useState, useEffect } from 'react';\r\nimport { Modal, Button, Form, Row, Col } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nfunction NeueBuchungModal(props) {\r\n \r\n const { enqueueSnackbar } = useSnackbar();\r\n const [typ, setTyp] = useState('');\r\n const [lieferanten, setLieferanten] = useState([]);\r\n const [aerzte, setAerzte] = useState([]);\r\n const [empfaenger, setEmpfaenger] = useState([]);\r\n\r\n const sendNewBuchungAnfrage = async (buchungData) => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/btmbuchung`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n body: JSON.stringify(buchungData)\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n\r\n if (response && response.status === 201) {\r\n const data = await response.json();\r\n // console.log(data);\r\n hideModal();\r\n enqueueSnackbar('Buchung erfolgreich angelegt', { variant:'success', autoHideDuration: 3000} );\r\n props.apothekeRefFunctions.updateBtmList();\r\n } else {\r\n //SHOW ERROR\r\n console.log(response);\r\n }\r\n }\r\n\r\n const createNewBuchung = event => {\r\n event.preventDefault();\r\n if (typ.toLowerCase() === 'zugang') {\r\n let { anforderungsschein, btmMenge, lieferant, pruefdatum } = event.target;\r\n let buchungData = {\r\n benutzer: props.user.id,\r\n btm: props.btm.btm.id,\r\n menge: btmMenge.value,\r\n typ: 'ZUGANG',\r\n lieferant: lieferant.value,\r\n anforderungsschein: anforderungsschein.value,\r\n pruefdatum: pruefdatum.value\r\n }\r\n sendNewBuchungAnfrage(buchungData);\r\n } else if (typ.toLowerCase() === 'abgang') {\r\n let { btmMenge, rezept, empfaenger, arzt, pruefdatum } = event.target;\r\n let buchungData = {\r\n benutzer: props.user.id,\r\n btm: props.btm.btm.id,\r\n menge: btmMenge.value,\r\n typ: 'ABGANG',\r\n empfaenger: empfaenger.value,\r\n arzt: arzt.value,\r\n rezept: rezept.value,\r\n pruefdatum: pruefdatum.value\r\n }\r\n sendNewBuchungAnfrage(buchungData);\r\n }\r\n }\r\n\r\n const hideModal = () => {\r\n setTyp('');\r\n props.onHide();\r\n }\r\n\r\n\r\n const loadLieferanten = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/lieferant`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n if (response.status === 200) {\r\n setLieferanten(await response.json());\r\n console.log(lieferanten);\r\n } else if (response.status === 403) {\r\n // props.history.push('/forbidden');\r\n } else if (response.status === 400) {\r\n // props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n const loadAerzte = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/arzt`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n if (response.status === 200) {\r\n setAerzte(await response.json());\r\n } else if (response.status === 403) {\r\n // props.history.push('/forbidden');\r\n } else if (response.status === 400) {\r\n // props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n const loadEmpfaenger = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${props.apothekeId}/empfaenger`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n\r\n if (response.status === 200) {\r\n setEmpfaenger(await response.json());\r\n } else if (response.status === 403) {\r\n // props.history.push('/forbidden');\r\n } else if (response.status === 400) {\r\n // props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n loadLieferanten();\r\n loadAerzte();\r\n loadEmpfaenger();\r\n }, []);\r\n\r\n const renderZugang = () => {\r\n return (\r\n <React.Fragment>\r\n <Form.Group as={Row} controlId=\"anforderungsschein\">\r\n <Form.Label column sm=\"2\">\r\n Anforderungsschein\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"anforderungsschein\" type=\"text\" required />\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"lieferant\">\r\n <Form.Label column sm=\"2\">\r\n Lieferant\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"lieferant\" required as=\"select\">\r\n {lieferanten.map(l => <option key={l.id} value={l.id}>{l.name}</option>)}\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n </React.Fragment>)\r\n }\r\n\r\n const renderAbgang = () => {\r\n return (\r\n <React.Fragment>\r\n <Form.Group as={Row} controlId=\"empfaenger\">\r\n <Form.Label column sm=\"2\">\r\n Empfaenger\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"empfaenger\" required as=\"select\">\r\n {empfaenger.map(e => <option key={e.id} value={e.id}>{e.name}</option>)}\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"arzt\">\r\n <Form.Label column sm=\"2\">\r\n Arzt\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"arzt\" required as=\"select\">\r\n {aerzte.map(a => <option key={a.id} value={a.id}>{a.name}</option>)}\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"rezept\">\r\n <Form.Label column sm=\"2\">\r\n Rezept\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"rezept\" type=\"text\" required />\r\n </Col>\r\n </Form.Group>\r\n </React.Fragment>)\r\n }\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n size=\"lg\"\r\n aria-labelledby=\"contained-modal-title-vcenter\"\r\n centered\r\n onExiting={hideModal}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title id=\"contained-modal-title-vcenter\">\r\n Betäubungsmittel-Buchung hinzufügen\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Form onSubmit={createNewBuchung}>\r\n <Modal.Body>\r\n <Form.Group as={Row} controlId=\"Typ\">\r\n <Col sm={{ span: 10, offset: 2 }}>\r\n <Row sm={6}>\r\n <Form.Check required\r\n type=\"radio\"\r\n label=\"Zugang\"\r\n name=\"TypRadio\"\r\n id=\"ZugangRadio\"\r\n onClick={() => setTyp('zugang')}\r\n />\r\n <Form.Check required\r\n type=\"radio\"\r\n label=\"Abgang\"\r\n name=\"TypRadio\"\r\n id=\"AbgangRadio\"\r\n onClick={() => setTyp('abgang')}\r\n />\r\n </Row>\r\n </Col>\r\n </Form.Group>\r\n\r\n <Form.Group as={Row} controlId=\"btmMenge\">\r\n <Form.Label column sm=\"2\">\r\n Menge\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"btmMenge\" type=\"number\" min=\"1\" defaultValue=\"0\" />\r\n </Col>\r\n </Form.Group>\r\n <Form.Group as={Row} controlId=\"pruefdatum\">\r\n <Form.Label column sm=\"2\">\r\n Prüfdatum\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control name=\"pruefdatum\" type=\"date\" defaultValue={new Date()} />\r\n </Col>\r\n </Form.Group>\r\n\r\n {typ.toLowerCase() === 'zugang' ? renderZugang() : null}\r\n {typ.toLowerCase() === 'abgang' ? renderAbgang() : null}\r\n\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"danger\" onClick={hideModal}>Close</Button>\r\n <Button variant=\"primary\" type=\"submit\">Bestätigen</Button>\r\n </Modal.Footer>\r\n </Form>\r\n\r\n\r\n\r\n </Modal>\r\n )\r\n\r\n}\r\n\r\nexport default NeueBuchungModal;","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\ApothekeEinstellungen.js",["142"],"D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekenDetails.js",["143"],"import React, { useEffect, useState } from \"react\";\r\nimport { useParams } from 'react-router-dom';\r\nimport { Button } from \"react-bootstrap\";\r\nimport NeuesBtmModal from '../btmbuch/NeuesBtmModal';\r\nimport '../../App.scss'\r\n\r\nfunction ApothekenDetails(props) {\r\n\r\n const { apoId } = useParams();\r\n const[apotheke, setApotheke] = useState({anschrift:{}});\r\n const[neuesBtmModalShow, setneuesBtmModalShow] = useState(false);\r\n\r\n\r\n const getApothekeData = async () => {\r\n const response = await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n\r\n if(response.status === 200){\r\n setApotheke(await response.json());\r\n }else if(response.status === 403) {\r\n props.history.push('/forbidden');\r\n }else if(response.status === 400){\r\n props.history.push('/badrequest');\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n getApothekeData();\r\n }, [])\r\n\r\n return(\r\n <div className=\"apo-details\">\r\n <ul>\r\n <li>Name: {apotheke.name}</li>\r\n <li>E-Mail: {apotheke.email}</li> \r\n </ul>\r\n <Button>Apotheke Einstellungen</Button>\r\n <Button onClick={() => setneuesBtmModalShow(true)} style={{marginLeft:'1em'}}>Neues Betäubungsmittel anlegen</Button>\r\n <NeuesBtmModal show={neuesBtmModalShow} {...props} onHide={() => setneuesBtmModalShow(false)} /> \r\n </div>\r\n )\r\n}\r\nexport default ApothekenDetails;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\ApothekeBtmList.js",["144","145"],"import React, { useState, useEffect } from \"react\";\r\nimport { useParams } from 'react-router-dom';\r\nimport BuchungTabelle from \"../btmbuch/BuchungTabelle\";\r\n\r\nfunction ApothekeBtmList(props) {\r\n\r\n const { apoId } = useParams();\r\n const [btms, setBtms] = useState([]);\r\n const [input, setInput] = useState(\"\");\r\n\r\n const getBtms = async () => {\r\n const response = await fetch(\r\n `http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btmbuchung`,\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Authorization:\r\n \"Bearer \" + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }\r\n ).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n\r\n if (response.status === 200) {\r\n setBtms(await response.json());\r\n } else if (response.status === 403) {\r\n props.history.push(\"/forbidden\");\r\n } else if (response.status === 400) {\r\n props.history.push(\"/badrequest\");\r\n }\r\n };\r\n\r\n //wird aufgerufen von NeuesBtmModal wenn ein neues BTM hinzugefügt wurde\r\n props.apothekeRefFunctions.updateBtmList = getBtms;\r\n\r\n useEffect(() => {\r\n getBtms();\r\n }, []);\r\n\r\n return (\r\n <div className=\"btm-buchung-wrapper\">\r\n <input\r\n id=\"searchBtmField\"\r\n type=\"text\"\r\n placeholder=\"Betäubungsmittel suchen\"\r\n onChange={(event) => {\r\n setInput(event.target.value);\r\n }}\r\n value={input}\r\n />\r\n {btms\r\n .filter((val) => {\r\n if (input === \"\") {\r\n console.log(\"namen der Liste\", val.btm.name);\r\n return val;\r\n } else if (val.btm.name.toLowerCase().includes(input.toLowerCase())){\r\n return val;\r\n }\r\n })\r\n .map((btm, key) => (\r\n <BuchungTabelle {...props} btm={btm} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ApothekeBtmList;\r\n\r\n/*{btms.map(btm => <BuchungTabelle {...props} btm={btm} /> )}*/\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\PersonalTabelle.js",["146"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\n\r\nimport PersonalAddModal from '../../../../modals/PersonalAddModal';\r\nimport PersonalEditModal from '../../../../modals/PersonalEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nfunction PersonalTabelle(props) {\r\n const { apoId } = useParams();\r\n const [personal, setPersonal] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedUser, setSelectedUser] = useState(null);\r\n const [showPersonalAddModal, setShowPersonalAddModal] = useState(false);\r\n const [showPersonalEditModal, setShowPersonalEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n\r\n\r\n const getPersonalData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setPersonal(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteUser = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer/${selectedUser.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res && res.status === 200) {\r\n getPersonalData();\r\n enqueueSnackbar('Benutzer erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const del = user => {\r\n setSelectedUser(user);\r\n setShowDeleteModal(true);\r\n }\r\n const edit = user => {\r\n setSelectedUser(user);\r\n setShowPersonalEditModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getPersonalData()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <PersonalAddModal {...props} show={showPersonalAddModal} onHide={() => setShowPersonalAddModal(false)} updatePersonalData={getPersonalData}/>\r\n {selectedUser ? <PersonalEditModal {...props} user={selectedUser} show={showPersonalEditModal} onHide={() => setShowPersonalEditModal(false)} updatePersonalData={getPersonalData}/> : null}\r\n <DeleteModal {...props} headertext={'Benutzer löschen'}\r\n maintext={'Möchtest du diesen Benutzer wirklich löschen?'} onSubmit={deleteUser} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Nutzername</th>\r\n <th>Nachname</th>\r\n <th>Vorname</th>\r\n <th>Aktiv</th>\r\n <th>Rolle</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowPersonalAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {personal.map(user =>\r\n <tr key={user.id}>\r\n <td>{user.nutzername}</td>\r\n <td>{user.name}</td>\r\n <td>{user.vorname}</td>\r\n <td>{user.aktiv ? 'ja' : 'nein'}</td>\r\n <td>{user.rolle}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(user)}><Edit /></Button>\r\n <Button onClick={() => del(user)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default PersonalTabelle;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\ArztTabelle.js",["147"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport ArztAddModal from '../../../../modals/ArztAddModal';\r\nimport ArztEditModal from '../../../../modals/ArztEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\n\r\nfunction ArztTabelle(props) {\r\n const { apoId } = useParams();\r\n const [aerzte, setAerzte] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedArzt, setSelectedArzt] = useState(null);\r\n const [showArztAddModal, setShowArztAddModal] = useState(false);\r\n const [showArztEditModal, setShowArztEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n const getArztData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/arzt`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setAerzte(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteArzt = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/arzt/${selectedArzt.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n getArztData()\r\n enqueueSnackbar('Arzt erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const edit = arzt => {\r\n setSelectedArzt(arzt);\r\n setShowArztEditModal(true);\r\n }\r\n\r\n const del = arzt => {\r\n setSelectedArzt(arzt);\r\n setShowDeleteModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getArztData();\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <ArztAddModal {...props} show={showArztAddModal} onHide={() => setShowArztAddModal(false)} updateArztData={getArztData} />\r\n {selectedArzt ? <ArztEditModal {...props} arzt={selectedArzt} show={showArztEditModal} onHide={() => setShowArztEditModal(false)} updateArztData={getArztData} /> : null}\r\n <DeleteModal {...props} headertext={'Arzt löschen'}\r\n maintext={'Möchtest du diesen Arzt wirklich löschen?'} onSubmit={deleteArzt} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Strasse</th>\r\n <th>Ort</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowArztAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {aerzte.map(arzt =>\r\n <tr key={arzt.id}>\r\n <td>{arzt.name}</td>\r\n <td>{arzt.anschrift.strasse} {arzt.anschrift.nummer}</td>\r\n <td>{arzt.anschrift.plz} {arzt.anschrift.ort}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(arzt)}><Edit /></Button>\r\n <Button onClick={() => del(arzt)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default ArztTabelle;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\LieferantTabelle.js",["148"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport LieferantAddModal from '../../../../modals/LieferantAddModal';\r\nimport LieferantEditModal from '../../../../modals/LieferantEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\n\r\nfunction LieferantTabelle(props) {\r\n const { apoId } = useParams();\r\n const [lieferanten, setLieferanten] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedLieferant, setSelectedLieferant] = useState(null);\r\n const [showLieferantAddModal, setShowLieferantAddModal] = useState(false);\r\n const [showLieferantEditModal, setShowLieferantEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n const getLieferantData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/lieferant`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setLieferanten(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteLieferant = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/lieferant/${selectedLieferant.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n getLieferantData()\r\n enqueueSnackbar('Lieferant erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const edit = lieferant => {\r\n setSelectedLieferant(lieferant);\r\n setShowLieferantEditModal(true);\r\n }\r\n\r\n const del = lieferant => {\r\n setSelectedLieferant(lieferant);\r\n setShowDeleteModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getLieferantData()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <LieferantAddModal {...props} show={showLieferantAddModal} onHide={() => setShowLieferantAddModal(false)} updateLieferantData={getLieferantData} />\r\n {selectedLieferant ? <LieferantEditModal {...props} lieferant={selectedLieferant} show={showLieferantEditModal} onHide={() => setShowLieferantEditModal(false)} updateLieferantData={getLieferantData} /> : null}\r\n <DeleteModal {...props} headertext={'Lieferant löschen'}\r\n maintext={'Möchtest du diesen Lieferant wirklich löschen?'} onSubmit={deleteLieferant} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Strasse</th>\r\n <th>Ort</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowLieferantAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {lieferanten.map(lieferant =>\r\n <tr key={lieferant.id}>\r\n <td>{lieferant.name}</td>\r\n <td>{lieferant.anschrift.strasse} {lieferant.anschrift.nummer}</td>\r\n <td>{lieferant.anschrift.plz} {lieferant.anschrift.ort}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(lieferant)}><Edit /></Button>\r\n <Button onClick={() => del(lieferant)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default LieferantTabelle;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\components\\apotheke\\einstellungen\\tabellen\\BtmTabelle.js",["149"],"import React, { Fragment, useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { AddBox, Edit, DeleteForever } from '@material-ui/icons';\r\nimport { Table, Button } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport BtmAddModal from '../../../../modals/BtmAddModal';\r\nimport BtmEditModal from '../../../../modals/BtmEditModal';\r\nimport DeleteModal from '../../../../modals/DeleteModal';\r\n\r\nfunction BtmTabelle(props) {\r\n const { apoId } = useParams();\r\n const [btmListe, setBtmListe] = useState([]);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [selectedBtm, setSelectedBtm] = useState(null);\r\n const [showBtmAddModal, setShowBtmAddModal] = useState(false);\r\n const [showBtmEditModal, setShowBtmEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n\r\n const getBtmData = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btm`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n }\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n return res.json()\r\n } else if (res.status === 403) {\r\n props.history.push('forbidden');\r\n } else if (res.status === 400) {\r\n props.history.push('badrequest');\r\n }\r\n }).then((data) => setBtmListe(data)).catch((err) => {\r\n //SHOW ERROR\r\n return;\r\n });\r\n }\r\n\r\n const deleteBtm = () => {\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btm/${selectedBtm.id}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n getBtmData()\r\n enqueueSnackbar('Btm erfolgreich gelöscht', { variant: 'success', autoHideDuration: 3000 });\r\n } else {\r\n //SHOW ERROR\r\n console.log(res);\r\n }\r\n }).catch((err) => {\r\n //SHOW ERROR\r\n console.log(err);\r\n });\r\n }\r\n\r\n const edit = btm => {\r\n setSelectedBtm(btm);\r\n setShowBtmEditModal(true);\r\n }\r\n\r\n const del = btm => {\r\n setSelectedBtm(btm);\r\n setShowDeleteModal(true);\r\n }\r\n\r\n useEffect(() => {\r\n getBtmData()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <BtmAddModal {...props} show={showBtmAddModal} onHide={() => setShowBtmAddModal(false)} updateBtmData={getBtmData} />\r\n {selectedBtm ? <BtmEditModal {...props} btm={selectedBtm} show={showBtmEditModal} onHide={() => setShowBtmEditModal(false)} updateBtmData={getBtmData} /> : null}\r\n <DeleteModal {...props} headertext={'Btm löschen'}\r\n maintext={'Möchtest du diesen Btm wirklich löschen?'} onSubmit={deleteBtm} subtext={'Dieser Vorgang kann nicht rückgängig gemacht werden'}\r\n show={showDeleteModal} onHide={() => setShowDeleteModal(false)} />\r\n <Table striped bordered hover>\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Darreichungsform</th>\r\n <th>Einheit</th>\r\n <th>Menge</th>\r\n <th style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => setShowBtmAddModal(true)} >Hinzufügen <AddBox /></Button>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {btmListe.map(btm =>\r\n <tr key={btm.id}>\r\n <td>{btm.name}</td>\r\n <td>{btm.darreichungsform}</td>\r\n <td>{btm.einheit}</td>\r\n <td>{btm.menge}</td>\r\n <td style={{ textAlign: 'center', verticalAlign: 'middle' }}>\r\n <Button onClick={() => edit(btm)}><Edit /></Button>\r\n <Button onClick={() => del(btm)}><DeleteForever /></Button>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </Table>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default BtmTabelle;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\PersonalAddModal.js",["150"],"import React, { useState, useEffect } from 'react';\r\nimport { Modal, Col, Button, Form } from 'react-bootstrap';\r\nimport { useParams } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nfunction PersonalAddModal(props) {\r\n\r\n const { apoId } = useParams();\r\n\r\n const [nutzernameVergeben, setNutzernameVergeben] = useState(false);\r\n\r\n //for password checking\r\n const [passwordConfirmInvalid, setPasswordConfirmInvalid] = useState(false);\r\n const [newPasswordVal, setNewPasswordVal] = useState('');\r\n const [passwordConfirmVal, setPasswordConfirmVal] = useState('');\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n let roles = [\"ADMIN\", \"PRUEFER\", \"BENUTZER\"];\r\n\r\n const createNewUser = async event => {\r\n event.preventDefault();\r\n let { username, vorname, nachname, neuesPasswort, rolle } = event.target;\r\n\r\n let body = {\r\n name: nachname.value,\r\n nutzername: username.value,\r\n vorname: vorname.value,\r\n aktiv: true,\r\n rolle: rolle.value,\r\n passwort: neuesPasswort.value\r\n }\r\n\r\n console.log(body)\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n body: JSON.stringify(body)\r\n }).then((res) => {\r\n if (res.status === 201) {\r\n props.onHide();\r\n props.updateUserList();\r\n enqueueSnackbar('Benutzer erstellt', { variant: 'success', autoHideDuration: 3000 });\r\n } else if (res.status === 400) {\r\n enqueueSnackbar('Ein Fehler ist aufgetaucht', { variant: 'error', autoHideDuration: 3000 });\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n return;\r\n });\r\n }\r\n\r\n const checkIfUserNameIsTaken = async event => {\r\n let newUsername = event.target.value;\r\n if (newUsername.length < 4) {\r\n //if shorter than 4 its invalid\r\n setNutzernameVergeben(true);\r\n return;\r\n }\r\n\r\n await fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/benutzer/${newUsername}/checkUsername`, {\r\n method: 'POST',\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n setNutzernameVergeben(false);\r\n } else if (res.status === 400) {\r\n setNutzernameVergeben(true);\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n return;\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n setPasswordConfirmInvalid(newPasswordVal !== passwordConfirmVal);\r\n }, [newPasswordVal, passwordConfirmVal]);\r\n\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n size=\"lg\"\r\n aria-labelledby=\"contained-modal-title-vcenter\"\r\n centered\r\n onExiting={props.onHide}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title id=\"contained-modal-title-vcenter\">\r\n Personal hinzufügen\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Form onSubmit={createNewUser}>\r\n <Modal.Body>\r\n <Form.Row>\r\n <Form.Group as={Col} controlId=\"username\">\r\n <Form.Label>Benutzername</Form.Label>\r\n <Form.Control name=\"username\" required onChange={checkIfUserNameIsTaken}\r\n isInvalid={nutzernameVergeben} type=\"text\" />\r\n </Form.Group>\r\n </Form.Row>\r\n\r\n <Form.Row>\r\n <Form.Group as={Col} sm={4} controlId=\"vorname\">\r\n <Form.Label>Vorname</Form.Label>\r\n <Form.Control name=\"vorname\" required type=\"text\" />\r\n </Form.Group>\r\n\r\n <Form.Group as={Col} sm={8} controlId=\"nachname\">\r\n <Form.Label>Nachname</Form.Label>\r\n <Form.Control name=\"nachname\" required type=\"text\" />\r\n </Form.Group>\r\n </Form.Row>\r\n\r\n <Form.Row>\r\n <Form.Group as={Col} controlId=\"neuesPasswort\">\r\n <Form.Label>Neues Passwort</Form.Label>\r\n <Form.Control required minlength={5} onChange={event => setNewPasswordVal(event.target.value)} name=\"neuesPasswort\" type=\"password\" />\r\n </Form.Group>\r\n <Form.Group as={Col} controlId=\"neuesPasswortConfirm\">\r\n <Form.Label>Neues Passwort bestätigen</Form.Label>\r\n <Form.Control required minlength={5} onChange={event => setPasswordConfirmVal(event.target.value)} isInvalid={passwordConfirmInvalid} name=\"neuesPasswortConfirm\" type=\"password\" />\r\n </Form.Group>\r\n </Form.Row>\r\n <Form.Row>\r\n <Form.Group as={Col} sm={4} controlId=\"rolle\">\r\n <Form.Label>Rolle</Form.Label>\r\n <Form.Control required name=\"rolle\" required as=\"select\" >\r\n {roles.map(r => <option key={r} value={r}>{r}</option>)}\r\n </Form.Control>\r\n </Form.Group>\r\n </Form.Row>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button autofocus variant=\"\" onClick={props.onHide}>Abbrechen</Button>\r\n <Button variant=\"primary\" type=\"submit\" >Bestätigen</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n )\r\n}\r\n\r\nexport default PersonalAddModal;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\DeleteModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\PersonalEditModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\BtmAddModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\LieferantEditModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\BtmEditModal.js",["151","152","153"],"import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { Modal, Col, Button, Form, Alert, Row } from 'react-bootstrap';\r\nimport { useSnackbar } from 'notistack';\r\nimport { responsiveFontSizes } from '@material-ui/core';\r\n\r\nfunction BtmEditModal(props) {\r\n\r\n const { apoId } = useParams();\r\n\r\n const darreichungsformen = {\r\n 'Tbl': { einheiten: ['Stueck'] },\r\n 'Trp': { einheiten: ['ml'] },\r\n 'Sup': { einheiten: ['Stueck'] },\r\n 'RTA': { einheiten: ['Stueck'] },\r\n 'RKA': { einheiten: ['Stueck'] },\r\n 'Ampullen': { einheiten: ['Stueck'] },\r\n 'Rezeptursubstanz': { einheiten: ['mg', 'g'] },\r\n 'HKP': { einheiten: ['Stueck'] },\r\n 'Pfl': { einheiten: ['Stueck'] }\r\n };\r\n\r\n let { id, darreichungsform, einheit, name, menge } = props.btm;\r\n // console.log(props.btm)\r\n\r\n const [activeDarreichungsform, setActiveDarreichungsform] = useState(darreichungsform);\r\n const [activeEinheit, setActiveEinheit] = useState(einheit);\r\n const [einheiten, setEinheiten] = useState(darreichungsformen[darreichungsform].einheiten);\r\n\r\n const [showError, setShowError] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n\r\n const updateDetails = async event => {\r\n event.preventDefault();\r\n let { name, darreichungsform, einheit, menge } = event.target;\r\n let body = {\r\n name: name.value,\r\n darreichungsform: darreichungsform.value,\r\n einheit: einheit.value,\r\n menge: menge.value\r\n }\r\n console.log(body)\r\n fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}/btm/${id}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + window.sessionStorage.getItem(\"edbapo-jwt\"),\r\n },\r\n body: JSON.stringify(body)\r\n }).then((res) => {\r\n if (res.status === 200) {\r\n hide();\r\n props.updateBtmData();\r\n enqueueSnackbar('Benutzer aktualisiert', { variant: 'success', autoHideDuration: 3000 });\r\n } else if (res.status === 400) {\r\n enqueueSnackbar('Ein Fehler ist aufgetaucht', { variant: 'error', autoHideDuration: 3000 });\r\n } else if (responsiveFontSizes.status === 403) {\r\n enqueueSnackbar('Falsches Passwort', { variant: 'error', autoHideDuration: 3000 });\r\n }\r\n }).catch((err) => {\r\n console.log(err);\r\n return;\r\n });\r\n\r\n \r\n }\r\n\r\n useEffect(() => {\r\n setActiveDarreichungsform(props.btm.darreichungsform);\r\n setActiveEinheit(props.btm.einheit);\r\n setEinheiten(darreichungsformen[props.btm.darreichungsform].einheiten)\r\n console.log(activeDarreichungsform, activeEinheit, einheiten)\r\n }, [props.btm])\r\n\r\n const hide = () => {\r\n setActiveDarreichungsform(props.btm.darreichungsform);\r\n setActiveEinheit(props.btm.einheit);\r\n setEinheiten(darreichungsformen[props.btm.darreichungsform].einheiten)\r\n props.onHide();\r\n }\r\n\r\n return (\r\n <Modal\r\n {...props}\r\n size=\"lg\"\r\n aria-labelledby=\"contained-modal-title-vcenter\"\r\n centered\r\n onExiting={hide}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title id=\"contained-modal-title-vcenter\">\r\n Betäubungsmittel bearbeiten\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Form onSubmit={updateDetails}>\r\n {showError ? <Alert variant=\"danger\">{errorMessage}</Alert> : null}\r\n <Modal.Body>\r\n <Form.Group as={Row} controlId=\"name\">\r\n <Form.Label column sm=\"2\">\r\n Name\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={name} name=\"name\" required type=\"text\" />\r\n </Col>\r\n </Form.Group>\r\n\r\n <Form.Group as={Row} controlId=\"menge\">\r\n <Form.Label column sm=\"2\">\r\n Menge\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={menge} name=\"menge\" type=\"number\" min=\"0\" />\r\n </Col>\r\n </Form.Group>\r\n\r\n\r\n <Form.Group as={Row} controlId=\"darreichungsform\">\r\n <Form.Label column sm=\"2\">\r\n Darreichungsform\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={darreichungsform} onChange={event => {\r\n setActiveDarreichungsform(event.target.value)\r\n setEinheiten(darreichungsformen[event.target.value].einheiten)\r\n }} name=\"darreichungsform\" required as=\"select\">\r\n {\r\n darreichungsformen ? Object.keys(darreichungsformen).map(df => <option kef={df} value={df}>{df}</option>) : null\r\n }\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n\r\n <Form.Group as={Row} controlId=\"einheit\">\r\n <Form.Label column sm=\"2\">\r\n Einheit\r\n </Form.Label>\r\n <Col sm=\"10\">\r\n <Form.Control defaultValue={einheit} name=\"einheit\" required as=\"select\">\r\n {\r\n einheiten ? Object.keys(einheiten).map(e => <option key={einheiten[e]} value={einheiten[e]}>{einheiten[e]}</option>) : null\r\n }\r\n </Form.Control>\r\n </Col>\r\n </Form.Group>\r\n\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"\" onClick={props.onHide}>Abbrechen</Button>\r\n <Button variant=\"primary\" type=\"submit\">Bestätigen</Button>\r\n </Modal.Footer>\r\n </Form>\r\n </Modal>\r\n )\r\n\r\n\r\n}\r\n\r\nexport default BtmEditModal;\r\n","D:\\dev\\EDB-Apo\\frontend\\src\\modals\\ArztEditModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\LieferantAddModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\ArztAddModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\ApothekeEditModal.js",[],"D:\\dev\\EDB-Apo\\frontend\\src\\modals\\UserDetailsUpdateModal.js",[],{"ruleId":"154","replacedBy":"155"},{"ruleId":"156","replacedBy":"157"},{"ruleId":"158","severity":1,"message":"159","line":3,"column":50,"nodeType":"160","messageId":"161","endLine":3,"endColumn":54},{"ruleId":"162","severity":1,"message":"163","line":44,"column":6,"nodeType":"164","endLine":44,"endColumn":8,"suggestions":"165"},{"ruleId":"158","severity":1,"message":"166","line":2,"column":9,"nodeType":"160","messageId":"161","endLine":2,"endColumn":12},{"ruleId":"158","severity":1,"message":"167","line":8,"column":18,"nodeType":"160","messageId":"161","endLine":8,"endColumn":25},{"ruleId":"158","severity":1,"message":"168","line":8,"column":27,"nodeType":"160","messageId":"161","endLine":8,"endColumn":31},{"ruleId":"158","severity":1,"message":"169","line":8,"column":45,"nodeType":"160","messageId":"161","endLine":8,"endColumn":50},{"ruleId":"158","severity":1,"message":"170","line":28,"column":19,"nodeType":"160","messageId":"161","endLine":28,"endColumn":23},{"ruleId":"162","severity":1,"message":"171","line":143,"column":8,"nodeType":"164","endLine":143,"endColumn":10,"suggestions":"172"},{"ruleId":"162","severity":1,"message":"173","line":89,"column":6,"nodeType":"164","endLine":89,"endColumn":8,"suggestions":"174"},{"ruleId":"162","severity":1,"message":"175","line":36,"column":6,"nodeType":"164","endLine":36,"endColumn":8,"suggestions":"176"},{"ruleId":"162","severity":1,"message":"177","line":40,"column":6,"nodeType":"164","endLine":40,"endColumn":8,"suggestions":"178"},{"ruleId":"179","severity":1,"message":"180","line":54,"column":23,"nodeType":"181","messageId":"182","endLine":54,"endColumn":25},{"ruleId":"162","severity":1,"message":"183","line":73,"column":6,"nodeType":"164","endLine":73,"endColumn":8,"suggestions":"184"},{"ruleId":"162","severity":1,"message":"185","line":72,"column":6,"nodeType":"164","endLine":72,"endColumn":8,"suggestions":"186"},{"ruleId":"162","severity":1,"message":"187","line":72,"column":6,"nodeType":"164","endLine":72,"endColumn":8,"suggestions":"188"},{"ruleId":"162","severity":1,"message":"189","line":72,"column":6,"nodeType":"164","endLine":72,"endColumn":8,"suggestions":"190"},{"ruleId":"191","severity":1,"message":"192","line":131,"column":51,"nodeType":"193","endLine":131,"endColumn":59},{"ruleId":"158","severity":1,"message":"194","line":30,"column":21,"nodeType":"160","messageId":"161","endLine":30,"endColumn":33},{"ruleId":"158","severity":1,"message":"195","line":31,"column":24,"nodeType":"160","messageId":"161","endLine":31,"endColumn":39},{"ruleId":"162","severity":1,"message":"196","line":75,"column":6,"nodeType":"164","endLine":75,"endColumn":17,"suggestions":"197"},"no-native-reassign",["198"],"no-negated-in-lhs",["199"],"no-unused-vars","'Link' is defined but never used.","Identifier","unusedVar","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'getUserDetails'. Either include it or remove the dependency array.","ArrayExpression",["200"],"'Row' is defined but never used.","'vorname' is assigned a value but never used.","'name' is assigned a value but never used.","'aktiv' is assigned a value but never used.","'data' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'loadAerzte', 'loadEmpfaenger', and 'loadLieferanten'. Either include them or remove the dependency array.",["201"],"React Hook useEffect has missing dependencies: 'getCurrentApotheke' and 'getUserData'. Either include them or remove the dependency array.",["202"],"React Hook useEffect has a missing dependency: 'getApothekeData'. Either include it or remove the dependency array.",["203"],"React Hook useEffect has a missing dependency: 'getBtms'. Either include it or remove the dependency array.",["204"],"array-callback-return","Array.prototype.filter() expects a value to be returned at the end of arrow function.","ArrowFunctionExpression","expectedAtEnd","React Hook useEffect has a missing dependency: 'getPersonalData'. Either include it or remove the dependency array.",["205"],"React Hook useEffect has a missing dependency: 'getArztData'. Either include it or remove the dependency array.",["206"],"React Hook useEffect has a missing dependency: 'getLieferantData'. Either include it or remove the dependency array.",["207"],"React Hook useEffect has a missing dependency: 'getBtmData'. Either include it or remove the dependency array.",["208"],"react/jsx-no-duplicate-props","No duplicate props allowed","JSXAttribute","'setShowError' is assigned a value but never used.","'setErrorMessage' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'activeDarreichungsform', 'activeEinheit', 'darreichungsformen', and 'einheiten'. Either include them or remove the dependency array.",["209"],"no-global-assign","no-unsafe-negation",{"desc":"210","fix":"211"},{"desc":"212","fix":"213"},{"desc":"214","fix":"215"},{"desc":"216","fix":"217"},{"desc":"218","fix":"219"},{"desc":"220","fix":"221"},{"desc":"222","fix":"223"},{"desc":"224","fix":"225"},{"desc":"226","fix":"227"},{"desc":"228","fix":"229"},"Update the dependencies array to be: [getUserDetails]",{"range":"230","text":"231"},"Update the dependencies array to be: [loadAerzte, loadEmpfaenger, loadLieferanten]",{"range":"232","text":"233"},"Update the dependencies array to be: [getCurrentApotheke, getUserData]",{"range":"234","text":"235"},"Update the dependencies array to be: [getApothekeData]",{"range":"236","text":"237"},"Update the dependencies array to be: [getBtms]",{"range":"238","text":"239"},"Update the dependencies array to be: [getPersonalData]",{"range":"240","text":"241"},"Update the dependencies array to be: [getArztData]",{"range":"242","text":"243"},"Update the dependencies array to be: [getLieferantData]",{"range":"244","text":"245"},"Update the dependencies array to be: [getBtmData]",{"range":"246","text":"247"},"Update the dependencies array to be: [activeDarreichungsform, activeEinheit, darreichungsformen, einheiten, props.btm]",{"range":"248","text":"249"},[1478,1480],"[getUserDetails]",[5207,5209],"[loadAerzte, loadEmpfaenger, loadLieferanten]",[2921,2923],"[getCurrentApotheke, getUserData]",[1140,1142],"[getApothekeData]",[1141,1143],"[getBtms]",[2410,2412],"[getPersonalData]",[2331,2333],"[getArztData]",[2475,2477],"[getLieferantData]",[2310,2312],"[getBtmData]",[2744,2755],"[activeDarreichungsform, activeEinheit, darreichungsformen, einheiten, props.btm]"] diff --git a/frontend/src/components/apotheke/einstellungen/ApothekeEinstellungen.js b/frontend/src/components/apotheke/einstellungen/ApothekeEinstellungen.js index d5456d52cac30647637c3c11617289a69d07563b..c391901be576197be7680c4994c92a7a75fd41dd 100644 --- a/frontend/src/components/apotheke/einstellungen/ApothekeEinstellungen.js +++ b/frontend/src/components/apotheke/einstellungen/ApothekeEinstellungen.js @@ -4,10 +4,12 @@ import { useParams } from 'react-router-dom'; import Header from '../../headers/Header'; import StatusHeader from '../../headers/StatusHeader'; +import UserDetails from '../../../user/UserDetails'; import ArztTabelle from './tabellen/ArztTabelle'; import BtmTabelle from './tabellen/BtmTabelle'; import LieferantTabelle from './tabellen/LieferantTabelle'; import PersonalTabelle from './tabellen/PersonalTabelle'; +import ApothekeEditModal from '../../../modals/ApothekeEditModal'; import './ApothekeEinstellungen.scss' @@ -16,10 +18,13 @@ function ApothekeEinstellungen(props) { const [apotheke, setApotheke] = useState({ anschrift: {} }) const [activeMenuItem, setActiveMenuItem] = useState('personal'); - const [user, setUser] = useState(null); + const [loggedIn, setLoggedIn] = useState(false); + const [aktiveRolle, setAktiveRolle] = useState(''); + const [user, setUser] = useState({}); + const [showApothekeEditModal, setShowApothekeEditModal] = useState(false); - const getCurrentApotheke = async () => { + const getCurrentApotheke = () => { fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}`, { method: 'GET', headers: { @@ -40,7 +45,7 @@ function ApothekeEinstellungen(props) { }) } - const getUserData = async () => { + const getUserData = () => { fetch(`http://${process.env.REACT_APP_BACKEND_URL}/benutzer/me`, { method: 'GET', headers: { @@ -55,8 +60,11 @@ function ApothekeEinstellungen(props) { } else if (res.status === 400) { props.history.push('badrequest'); } - }).then(data => setUser(data) - ).catch((err) => { + }).then((data) => { + setUser(data); + setAktiveRolle(data.rolle) + setLoggedIn(true) + }).catch((err) => { //SHOW ERROR return; }); @@ -82,8 +90,14 @@ function ApothekeEinstellungen(props) { return ( <Fragment> - <StatusHeader aktiveRolle="admin" /> + <ApothekeEditModal {...props} show={showApothekeEditModal} onHide={() => setShowApothekeEditModal(false)} apotheke={apotheke} updateApothekeData={getCurrentApotheke} /> + <StatusHeader aktiveRolle={aktiveRolle} /> <Header /> + <Row className="details-list"> + <Col md={{ span: 6, offset: 6 }}> + {loggedIn ? <UserDetails {...props} user={user} setUser={setUser} aktiveRolle={aktiveRolle} setAktiveRolle={setAktiveRolle} /> : null} + </Col> + </Row> <div className="main-content"> <Row> <Col sm={4}> @@ -92,7 +106,7 @@ function ApothekeEinstellungen(props) { <li>E-Mail: {apotheke.email}</li> <li>Anschrift: {apotheke.anschrift.strasse} {apotheke.anschrift.nummer} ({apotheke.anschrift.plz} {apotheke.anschrift.ort})</li> </ul> - <Button>Angaben bearbeiten</Button> + <Button onClick={() => setShowApothekeEditModal(true)}>Angaben bearbeiten</Button> </Col> </Row> <Row style={{ marginTop: '3em' }}> diff --git a/frontend/src/modals/ApothekeEditModal.js b/frontend/src/modals/ApothekeEditModal.js index a5f8bb34588bd38771d334cee251cd4a097fd90f..75651557d256c69d91ba81e137c9d9adcd111764 100644 --- a/frontend/src/modals/ApothekeEditModal.js +++ b/frontend/src/modals/ApothekeEditModal.js @@ -1,131 +1,84 @@ import React from 'react'; +import { useParams } from 'react-router-dom'; import { Modal, Button, Form, Row, Col } from 'react-bootstrap'; +import { useSnackbar } from 'notistack'; -class ApothekeEditModal extends React.Component { - constructor(props) { - super(props); - this.state = {apotheke: props.apotheke}; - this.handleChangeName = this.handleChangeName.bind(this); - this.handleChangeEmail = this.handleChangeEmail.bind(this); - this.handleChangeStrasse = this.handleChangeStrasse.bind(this); - this.handleChangeNummer = this.handleChangeNummer.bind(this); - this.handleChangePlz = this.handleChangePlz.bind(this); - this.handleChangeOrt = this.handleChangeOrt.bind(this); - this.handleSubmit = this.handleSubmit.bind(this); - } - - handleChangeName(event) { - this.setState(prevState => ({ - apotheke: { - ...prevState.apotheke, - name: event.target.value - } - })) - } - - handleChangeEmail(event) { - this.setState(prevState => ({ - apotheke: { - ...prevState.apotheke, - email: event.target.value - } - })) - } +function ApothekeEditModal(props) { + const { apoId } = useParams(); + const { enqueueSnackbar } = useSnackbar(); - handleChangeStrasse(event) { - this.setState(prevState => ({ - apotheke: { - ...prevState.apotheke, - anschrift: { - ...prevState.apotheke.anschrift, - strasse: event.target.value - } + const updateApothekeDetails = event => { + event.preventDefault(); + let { name, email, strasse, nummer, plz, ort } = event.target; + let body = { + name: name.value, + email: email.value, + anschrift: { + strasse: strasse.value, + nummer: nummer.value, + plz: plz.value, + ort: ort.value } - })) - } - - handleChangeNummer(event) { - this.setState(prevState => ({ - apotheke: { - ...prevState.apotheke, - anschrift: { - ...prevState.apotheke.anschrift, - nummer: event.target.value - } + }; + fetch(`http://${process.env.REACT_APP_BACKEND_URL}/apotheke/${apoId}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + window.sessionStorage.getItem("edbapo-jwt") + }, + body: JSON.stringify(body) + }).then((res) => { + if (res.status === 200) { + props.onHide(); + props.updateApothekeData(); + enqueueSnackbar('Apotheke aktualisiert', { variant: 'success', autoHideDuration: 3000 }); + } else if (res.status === 400) { + enqueueSnackbar('Ein Fehler ist aufgetaucht', { variant: 'error', autoHideDuration: 3000 }); } - })) + }).catch((err) => { + console.log(err) + }); } - handleChangePlz(event) { - this.setState(prevState => ({ - apotheke: { - ...prevState.apotheke, - anschrift: { - ...prevState.apotheke.anschrift, - plz: event.target.value - } - } - })) - } - - handleChangeOrt(event) { - this.setState(prevState => ({ - apotheke: { - ...prevState.apotheke, - anschrift: { - ...prevState.apotheke.anschrift, - ort: event.target.value - } - } - })) - } - - handleSubmit() { - console.log("save changes"); - //put apotheke.then status = 200 -> refresh data - this.props.onHide(); - } - - render() { - return ( - <Modal show={this.props.show} onHide={this.props.onHide} centered backdrop="static"> - <Modal.Header closeButton> - <Modal.Title>Modal heading</Modal.Title> - </Modal.Header> + return ( + <Modal show={props.show} onHide={props.onHide} centered backdrop="static"> + <Modal.Header closeButton> + <Modal.Title>Apotheke bearbeiten</Modal.Title> + </Modal.Header> + <Form onSubmit={updateApothekeDetails}> <Modal.Body> - <Form onSubmit={this.handleSubmit}> - <Form.Group> - <Form.Control type="text" placeholder="Name der Apotheke" name="name" value={this.state.apotheke.name} onChange={this.handleChangeName}/> - </Form.Group> - <Form.Group> - <Form.Control type="email" placeholder="E-Mail der Apotheke" value={this.state.apotheke.email} onChange={this.handleChangeEmail} /> - </Form.Group> - <Form.Group as={Row}> - <Col sm={9}> - <Form.Control type="text" placeholder="Straße" value={this.state.apotheke.anschrift.strasse} onChange={this.handleChangeStrasse} /> - </Col> - <Col> - <Form.Control type="number" placeholder="Nummer" value={this.state.apotheke.anschrift.nummer} onChange={this.handleChangeNummer} /> - </Col> - </Form.Group> - <Form.Group as={Row}> - <Col> - <Form.Control type="text" placeholder="PLZ" value={this.state.apotheke.anschrift.plz} onChange={this.handleChangePlz} /> - </Col> - <Col sm={9}> - <Form.Control type="text" placeholder="Ort" value={this.state.apotheke.anschrift.ort} onChange={this.handleChangeOrt} /> - </Col> - </Form.Group> - </Form> + <Form.Group> + <Form.Control type="text" placeholder="Name der Apotheke" name="name" defaultValue={props.apotheke.name} /> + </Form.Group> + <Form.Group> + <Form.Control type="email" placeholder="E-Mail der Apotheke" name="email" defaultValue={props.apotheke.email} /> + </Form.Group> + <Form.Group as={Row}> + <Col sm={9}> + <Form.Control type="text" placeholder="Straße" name="strasse" defaultValue={props.apotheke.anschrift.strasse} /> + </Col> + <Col> + <Form.Control type="text" placeholder="Nummer" name="nummer" defaultValue={props.apotheke.anschrift.nummer} /> + </Col> + </Form.Group> + <Form.Group as={Row}> + <Col> + <Form.Control type="text" placeholder="PLZ" name="plz" defaultValue={props.apotheke.anschrift.plz} /> + </Col> + <Col sm={9}> + <Form.Control type="text" placeholder="Ort" name="ort" defaultValue={props.apotheke.anschrift.ort} /> + </Col> + </Form.Group> </Modal.Body> <Modal.Footer> - <Button variant="secondary" onClick={this.props.onHide}>Cancel</Button> - <Button variant="primary" type="Submit" onClick={this.handleSubmit}>Ändern</Button> + <Button variant="secondary" onClick={props.onHide}>Abbrechen</Button> + <Button variant="primary" type="Submit">Bearbeiten</Button> </Modal.Footer> - </Modal> - ) - } - + </Form> + </Modal > + ) + + } export default ApothekeEditModal; diff --git a/frontend/src/modals/ArztAddModal.js b/frontend/src/modals/ArztAddModal.js index 3bdb2e47ad01aca4200ececf6b6d091e802072b2..5f0ef996bd6362feb0e834c146013ef03e8bc8ce 100644 --- a/frontend/src/modals/ArztAddModal.js +++ b/frontend/src/modals/ArztAddModal.js @@ -55,7 +55,7 @@ function ArztAddModal(props) { > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> - Benutzer Einstellungen + Arzt hinzufügen </Modal.Title> </Modal.Header> <Form onSubmit={updateDetails}> diff --git a/frontend/src/modals/ArztEditModal.js b/frontend/src/modals/ArztEditModal.js index 9f829f743a0548da94d841c3685145ed8eb6a00c..e0ce1b7f6991cfd4809d7852c9a16cf649dca29c 100644 --- a/frontend/src/modals/ArztEditModal.js +++ b/frontend/src/modals/ArztEditModal.js @@ -60,7 +60,7 @@ function ArztEditModal(props) { > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> - Benutzer Einstellungen + Arzt bearbeiten </Modal.Title> </Modal.Header> <Form onSubmit={updateDetails}> diff --git a/frontend/src/modals/LieferantAddModal.js b/frontend/src/modals/LieferantAddModal.js index 8f51e77b521469447807ca11747e21d406785dd1..817e18d81cafed02ec29c24bef67540a6d689a81 100644 --- a/frontend/src/modals/LieferantAddModal.js +++ b/frontend/src/modals/LieferantAddModal.js @@ -41,8 +41,6 @@ function NeuesLieferantenModal(props) { console.log(err); return; }); - - } return ( @@ -55,7 +53,7 @@ function NeuesLieferantenModal(props) { > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> - Benutzer Einstellungen + Liefernat hinzufügen </Modal.Title> </Modal.Header> <Form onSubmit={updateDetails}> diff --git a/frontend/src/modals/LieferantEditModal.js b/frontend/src/modals/LieferantEditModal.js index 1835a76b2b5c9c425e158f62d9faea35f908a2e7..0bcdafb9bc1d55984dc9ee0bd0d3a4ccb17d41a3 100644 --- a/frontend/src/modals/LieferantEditModal.js +++ b/frontend/src/modals/LieferantEditModal.js @@ -57,7 +57,7 @@ function LieferantUpdateModal(props) { > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> - Benutzer Einstellungen + Lieferant bearbeiten </Modal.Title> </Modal.Header> <Form onSubmit={updateDetails}> diff --git a/frontend/src/modals/PersonalAddModal.js b/frontend/src/modals/PersonalAddModal.js index 298240eb6a286ffe9893608072b15f1e4c013775..d0c68596bd12c3fa723fc8c80b7fb26c9d417c02 100644 --- a/frontend/src/modals/PersonalAddModal.js +++ b/frontend/src/modals/PersonalAddModal.js @@ -90,7 +90,7 @@ function PersonalAddModal(props) { > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> - Benutzer Einstellungen + Personal hinzufügen </Modal.Title> </Modal.Header> <Form onSubmit={createNewUser}> diff --git a/frontend/src/modals/PersonalEditModal.js b/frontend/src/modals/PersonalEditModal.js index 06b56c590680e810dac867a74ea04483da9ce56d..3752bc48a1ad5b9009fa3b76771aa247fe13e5a3 100644 --- a/frontend/src/modals/PersonalEditModal.js +++ b/frontend/src/modals/PersonalEditModal.js @@ -101,7 +101,7 @@ function PersonalUpdateModal(props) { > <Modal.Header closeButton> <Modal.Title id="contained-modal-title-vcenter"> - Benutzer Einstellungen + Personal bearbeiten </Modal.Title> </Modal.Header> <Form onSubmit={updateDetails}>