misc
This commit is contained in:
@ -85,43 +85,46 @@ function ConfirmationModal({ isOpen, onClose, onConfirm, subscribedPublishers, a
|
|||||||
return (
|
return (
|
||||||
<div className="fixed inset-0 flex items-center justify-center z-50">
|
<div className="fixed inset-0 flex items-center justify-center z-50">
|
||||||
<div className="absolute inset-0 bg-black opacity-50" onClick={onClose}></div>
|
<div className="absolute inset-0 bg-black opacity-50" onClick={onClose}></div>
|
||||||
<div className="bg-white p-6 rounded-lg shadow-lg z-10">
|
<div className="bg-white p-6 rounded-lg shadow-lg z-10 max-h-screen overflow-y-auto">
|
||||||
<h2 className="text-lg font-semibold mb-4">Можете да изпратите заявка за заместник до следните групи:</h2>
|
<h2 className="text-lg font-semibold mb-4">Можете да изпратите заявка за заместник до следните групи:</h2>
|
||||||
<div className="mb-4">
|
<div className="space-y-1">
|
||||||
<label className="block mb-2">
|
<div className="flex items-center mb-2">
|
||||||
<div className="flex items-center mb-2">
|
<input id="subscribedPublishersCheckbox"
|
||||||
<input
|
type="checkbox"
|
||||||
type="checkbox"
|
className="mr-2 leading-tight"
|
||||||
className="mr-2 leading-tight"
|
checked={selectedGroups.includes('subscribedPublishers')}
|
||||||
checked={selectedGroups.includes('subscribedPublishers')}
|
onChange={() => handleToggleGroup('subscribedPublishers')}
|
||||||
onChange={() => handleToggleGroup('subscribedPublishers')}
|
/>
|
||||||
/>
|
<label htmlFor="subscribedPublishersCheckbox" className="text-sm font-medium">Абонирани:</label>
|
||||||
<span className="text-sm font-medium">Абонирани:</span>
|
</div>
|
||||||
</div>
|
<div className="overflow-y-auto max-h-64">
|
||||||
<div className="flex flex-wrap">
|
<label className="block mb-2">
|
||||||
{subscribedPublishers.map(pub => (
|
<div className="flex flex-wrap">
|
||||||
<span key={pub.id} className="bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">{pub.name}</span>
|
{subscribedPublishers.map(pub => (
|
||||||
))}
|
<span key={pub.id} className="bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">{pub.name}</span>
|
||||||
</div>
|
))}
|
||||||
</label>
|
</div>
|
||||||
</div>
|
</label>
|
||||||
<div className="mb-4">
|
</div>
|
||||||
<label className="block mb-2">
|
<div className="flex items-center mb-2">
|
||||||
<div className="flex items-center mb-2">
|
<input id="availablePublishersCheckbox"
|
||||||
<input
|
type="checkbox"
|
||||||
type="checkbox"
|
className="mr-2 leading-tight"
|
||||||
className="mr-2 leading-tight"
|
checked={selectedGroups.includes('availablePublishers')}
|
||||||
checked={selectedGroups.includes('availablePublishers')}
|
onChange={() => handleToggleGroup('availablePublishers')}
|
||||||
onChange={() => handleToggleGroup('availablePublishers')}
|
/>
|
||||||
/>
|
<label htmlFor="availablePublishersCheckbox" className="text-sm font-medium">На разположение :</label>
|
||||||
<span className="text-sm font-medium">На разположение :</span>
|
</div>
|
||||||
</div>
|
<div className="overflow-y-auto max-h-64">
|
||||||
<div className="flex flex-wrap">
|
<label className="block mb-2">
|
||||||
{availablePublishers.map(pub => (
|
|
||||||
<span key={pub.id} className="bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">{pub.name}</span>
|
<div className="flex flex-wrap">
|
||||||
))}
|
{availablePublishers.map(pub => (
|
||||||
</div>
|
<span key={pub.id} className="bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2">{pub.name}</span>
|
||||||
</label>
|
))}
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="text-right">
|
<div className="text-right">
|
||||||
<button
|
<button
|
||||||
|
@ -142,7 +142,7 @@ export default function Sidebar({ isSidebarOpen, toggleSidebar }) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<button onClick={toggleSidebar}
|
<button onClick={toggleSidebar}
|
||||||
className="fixed top-1 left-4 z-40 m- text-xl bg-white border border-gray-200 p-2 rounded-full shadow-lg focus:outline-none"
|
className="fixed top-1 left-5 z-40 m- text-xl bg-white border border-gray-200 px-3 py-2.5 rounded-full shadow-lg focus:outline-none"
|
||||||
style={{ transform: isSidebarOpen ? `translateX(${sidebarWidth - 64}px)` : 'translateX(-20px)' }}>☰</button>
|
style={{ transform: isSidebarOpen ? `translateX(${sidebarWidth - 64}px)` : 'translateX(-20px)' }}>☰</button>
|
||||||
<aside id="sidenav" ref={sidebarRef}
|
<aside id="sidenav" ref={sidebarRef}
|
||||||
className="px-2 fixed top-0 left-0 z-30 h-screen overflow-y-auto bg-white border-r dark:bg-gray-900 dark:border-gray-700 transition-all duration-300 sm:translate-x-0 w-64"
|
className="px-2 fixed top-0 left-0 z-30 h-screen overflow-y-auto bg-white border-r dark:bg-gray-900 dark:border-gray-700 transition-all duration-300 sm:translate-x-0 w-64"
|
||||||
|
@ -131,9 +131,10 @@ export default function SignIn({ csrfToken }) {
|
|||||||
|
|
||||||
// This gets called on every request
|
// This gets called on every request
|
||||||
export async function getServerSideProps(context) {
|
export async function getServerSideProps(context) {
|
||||||
|
const csrfToken = await getCsrfToken(context);
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
csrfToken: await getCsrfToken(context),
|
...(csrfToken ? { csrfToken } : {}),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ export default function IndexPage({ initialItems, initialUserId }: IProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<ProtectedRoute deniedMessage="">
|
<ProtectedRoute allowedRoles={[UserRole.ADMIN, UserRole.POWERUSER, UserRole.USER, UserRole.EXTERNAL]} deniedMessage="">
|
||||||
<h1 className="pt-2 pb-1 text-xl font-bold text-center">Графика на {userName}</h1>
|
<h1 className="pt-2 pb-1 text-xl font-bold text-center">Графика на {userName}</h1>
|
||||||
<ProtectedRoute allowedRoles={[UserRole.ADMIN]} deniedMessage="">
|
<ProtectedRoute allowedRoles={[UserRole.ADMIN]} deniedMessage="">
|
||||||
<PublisherSearchBox selectedId={userId} infoText="" onChange={handleUserSelection} />
|
<PublisherSearchBox selectedId={userId} infoText="" onChange={handleUserSelection} />
|
||||||
|
36
prisma/administrative_scripts/fix_availability_time_DHT
Normal file
36
prisma/administrative_scripts/fix_availability_time_DHT
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
UPDATE `Availability`
|
||||||
|
SET
|
||||||
|
`startTime` = ADDTIME(`startTime`, '01:00:00'),
|
||||||
|
`endTime` = ADDTIME(`endTime`, '01:00:00'),
|
||||||
|
`name` = CONCAT(`name`, ' (DHT)')
|
||||||
|
WHERE
|
||||||
|
`startTime` LIKE '%05:00%' -- this is 9:00; -4 hours difference, where -3 is expected
|
||||||
|
OR `startTime` LIKE '%06:30%' -- this is 10:30; -4 hours difference, where -3 is expected
|
||||||
|
OR `startTime` LIKE '%08:00%' -- this is 12:00; -4 hours difference, where -3 is expected
|
||||||
|
OR `startTime` LIKE '%09:30%' -- this is 13:30 UTC
|
||||||
|
OR `startTime` LIKE '%11:00%' -- this is 15:00 UTC
|
||||||
|
OR `startTime` LIKE '%12:30%' -- this is 16:30 UTC
|
||||||
|
OR `startTime` LIKE '%14:00%' -- this is 18:00 UTC
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
p.id,
|
||||||
|
p.firstName,
|
||||||
|
p.lastName,
|
||||||
|
a.id,
|
||||||
|
name,
|
||||||
|
dayofweek,
|
||||||
|
startTime,
|
||||||
|
endTime,
|
||||||
|
dayOfMonth,
|
||||||
|
weekOfMonth,
|
||||||
|
isFromPreviousAssignment,
|
||||||
|
isFromPreviousMonth,
|
||||||
|
endDate,
|
||||||
|
repeatWeekly,
|
||||||
|
dateOfEntry,
|
||||||
|
parentAvailabilityId
|
||||||
|
FROM
|
||||||
|
`Availability` a
|
||||||
|
left join Publisher p on p.id = publisherId
|
||||||
|
WHERE
|
||||||
|
name LIKE '%(DHT)%'
|
Reference in New Issue
Block a user