| @@ -123,24 +123,24 @@ const setting = { | |||
| breadcrumbs: false, | |||
| ability:['VIEW','LOGIN_LOG'] | |||
| }, | |||
| { | |||
| id: 'passwordPolicy', | |||
| title: 'Password Policy', | |||
| type: 'item', | |||
| url: '/passwordpolicy', | |||
| icon: icons.SafetyCertificateOutlined, | |||
| breadcrumbs: false, | |||
| ability:['MANAGE','SYSTEM_CONFIGURATION'] | |||
| }, | |||
| { | |||
| id: 'setting', | |||
| title: 'System Configuration', | |||
| type: 'item', | |||
| url: '/setting', | |||
| icon: icons.SettingOutlined, | |||
| breadcrumbs: false, | |||
| ability:['MANAGE','SYSTEM_CONFIGURATION'] | |||
| }, | |||
| // { | |||
| // id: 'passwordPolicy', | |||
| // title: 'Password Policy', | |||
| // type: 'item', | |||
| // url: '/passwordpolicy', | |||
| // icon: icons.SafetyCertificateOutlined, | |||
| // breadcrumbs: false, | |||
| // ability:['MANAGE','SYSTEM_CONFIGURATION'] | |||
| // }, | |||
| // { | |||
| // id: 'setting', | |||
| // title: 'System Configuration', | |||
| // type: 'item', | |||
| // url: '/setting', | |||
| // icon: icons.SettingOutlined, | |||
| // breadcrumbs: false, | |||
| // ability:['MANAGE','SYSTEM_CONFIGURATION'] | |||
| // }, | |||
| // { | |||
| // id: 'generateReminder', | |||
| // title: 'Generate Reminder', | |||
| @@ -562,6 +562,39 @@ const ClientForm = ({ refClientDetail, | |||
| <form> | |||
| <Grid container> | |||
| <Grid item xs={12} s={12} md={12} lg={5.5} sx={{mt:1, ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"flex-start"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3,mt:1, display: 'flex', alignItems: 'flex-start'}}> | |||
| <Typography variant="lionerSize" component="span"> | |||
| Client Code: <Typography sx={{ color: GENERAL_RED_COLOR }} component="span">*</Typography> | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6.5}> | |||
| <TextField | |||
| fullWidth | |||
| {...register("clientCode", | |||
| { | |||
| value: refClient.clientCode, | |||
| })} | |||
| id='clientCode' | |||
| required | |||
| inputProps={{maxLength: 255, style: {fontSize: '1.1rem'}}} | |||
| InputProps={{ | |||
| style: { minHeight:'42.5px', maxHeight: '50vh' }, | |||
| }} | |||
| multiline | |||
| maxRows={3} | |||
| error={!!errors.lastname} | |||
| helperText={errors.lastname} | |||
| disabled | |||
| autoComplete="off" | |||
| /> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} s={12} md={12} lg={5.5} sx={{mt:1, ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"flex-start"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| @@ -745,7 +778,7 @@ const ClientForm = ({ refClientDetail, | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={12} sm={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| {/* <Grid item xs={12} sm={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| @@ -769,7 +802,7 @@ const ClientForm = ({ refClientDetail, | |||
| /> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> */} | |||
| <Grid item xs={12} s={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}> | |||
| <Grid container alignItems={"flex-start"}> | |||
| @@ -780,6 +813,21 @@ const ClientForm = ({ refClientDetail, | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6.5}> | |||
| <TextField | |||
| fullWidth | |||
| inputProps={{maxLength: 50}} | |||
| size="small" | |||
| {...register("cm", | |||
| { | |||
| value: "N/A",//refClient.phone1, | |||
| })} | |||
| id='cm' | |||
| disabled | |||
| autoComplete="off" | |||
| /> | |||
| </Grid> | |||
| {/* <Grid item xs={7} s={7} md={7} lg={7}> | |||
| <Autocomplete | |||
| multiple | |||
| @@ -828,6 +876,21 @@ const ClientForm = ({ refClientDetail, | |||
| </Typography> | |||
| </Grid> | |||
| <Grid item xs={7} s={7} md={7} lg={6.5}> | |||
| <TextField | |||
| fullWidth | |||
| inputProps={{maxLength: 50}} | |||
| size="small" | |||
| {...register("cs", | |||
| { | |||
| value: "N/A",//refClient.phone1, | |||
| })} | |||
| id='cs' | |||
| disabled | |||
| autoComplete="off" | |||
| /> | |||
| </Grid> | |||
| {/* <Grid item xs={7} s={7} md={7} lg={7}> | |||
| <Autocomplete | |||
| multiple | |||
| @@ -182,7 +182,7 @@ const ClientPanel = () => { | |||
| <Grid container justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={3} sx={{mt:-1, mb: -2.25}} > | |||
| <Box sx={{ display: 'flex', alignItems: 'center'}}> | |||
| <Typography align="center" variant="h5" >{isNewRecord? "New Client" : "Maintain Client"}</Typography> | |||
| <Typography align="center" variant="h4" >{isNewRecord? "New Client" : "Maintain Client"}</Typography> | |||
| </Box> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -240,6 +240,17 @@ const ClientSearchForm = ({applySearch, setExpanded,expanded}) => { | |||
| <ThemeProvider theme={LIONER_FORM_THEME}> | |||
| {/*row 2*/} | |||
| <Grid container alignItems={"flex-start"} > | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}> | |||
| <InputLabel htmlFor="clientCode">Client Code</InputLabel> | |||
| <TextField | |||
| fullWidth | |||
| {...register("clientCode")} | |||
| inputProps={{maxLength: 500}} | |||
| id="clientCode" | |||
| autoComplete="off" | |||
| /> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}> | |||
| <InputLabel htmlFor="clientLastName">Client Last Name</InputLabel> | |||
| <TextField | |||
| @@ -87,6 +87,12 @@ export default function ClientTable({recordList, pageSize}) { | |||
| // // </div> | |||
| // ), | |||
| // }, | |||
| { | |||
| id: 'clientCode', | |||
| field: 'clientCode', | |||
| headerName: 'Client Code', | |||
| flex: 1.5, | |||
| }, | |||
| { | |||
| id: 'fullname', | |||
| field: 'fullname', | |||
| @@ -168,19 +174,19 @@ export default function ClientTable({recordList, pageSize}) { | |||
| ); | |||
| } | |||
| }, | |||
| { | |||
| id: 'phone2', | |||
| field: 'phone2', | |||
| headerName: '2nd Phone No.', | |||
| flex: 1, | |||
| renderCell: (params) => { | |||
| return ( | |||
| <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}> | |||
| {params.value} | |||
| </div> | |||
| ); | |||
| } | |||
| }, | |||
| // { | |||
| // id: 'phone2', | |||
| // field: 'phone2', | |||
| // headerName: '2nd Phone No.', | |||
| // flex: 1, | |||
| // renderCell: (params) => { | |||
| // return ( | |||
| // <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}> | |||
| // {params.value} | |||
| // </div> | |||
| // ); | |||
| // } | |||
| // }, | |||
| { | |||
| id: 'remarks', | |||
| field: 'remarks', | |||
| @@ -65,7 +65,7 @@ const LoginLogSearchPanel = () => { | |||
| <Grid container justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={3} sx={{mb: -2.25}} > | |||
| <Box sx={{ display: 'flex', alignItems: 'center'}}> | |||
| <Typography align="center" variant="h5" >Login Log</Typography> | |||
| <Typography align="center" variant="h4" >Login Log</Typography> | |||
| </Box> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -156,7 +156,7 @@ const PasswordPolicyPage = () => { | |||
| <Grid container rowSpacing={4.5} columnSpacing={2.75} justifyContent="center"> | |||
| <ThemeProvider theme={LIONER_FORM_THEME}> | |||
| <Grid item xs={12} sx={{mb: -2.25}}> | |||
| <Typography variant="h5">Password Policy</Typography> | |||
| <Typography variant="h4">Password Policy</Typography> | |||
| </Grid> | |||
| <Grid item xs={12} md={11} lg={10} > | |||
| <MainCard xs={12} md={12} lg={12} | |||
| @@ -169,7 +169,7 @@ const SettingPage = () => { | |||
| : | |||
| <Grid container rowSpacing={4.5} columnSpacing={2.75} justifyContent="center"> | |||
| <Grid item xs={12} sx={{mb: -2.25}}> | |||
| <Typography variant="h5">System Configuration</Typography> | |||
| <Typography variant="h4">System Configuration</Typography> | |||
| </Grid> | |||
| <Grid item xs={12} md={11} lg={10} > | |||
| <MainCard xs={12} md={12} lg={12} | |||
| @@ -177,16 +177,16 @@ const UserInformationCard = ({isCollectData, updateUserObject,userData, | |||
| content={false} | |||
| // sx={{height:'77.5vh'}} | |||
| > | |||
| <Typography variant="h5" sx={{mt: 1.5, ml: 3, mb: 1}}> | |||
| Information | |||
| </Typography> | |||
| {/*<Typography variant="h5" sx={{mt: 1.5, ml: 3, mb: 1}}> | |||
| </Typography>*/} | |||
| <form> | |||
| {/* <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb:1}}> | |||
| </Grid> */} | |||
| <Grid container> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 1}}> | |||
| <Grid item xs={12} s={12} md={12} lg={12} sx={{mt: 3, ml: 3, mr: 3, mb: 1}}> | |||
| <Grid container alignItems={"center"}> | |||
| <Grid item xs={4} s={4} md={4} lg={4} | |||
| sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> | |||
| @@ -196,7 +196,7 @@ const UserMaintainPage = () => { | |||
| <Grid container rowSpacing={3} columnSpacing={1.5}> | |||
| <ThemeProvider theme={LIONER_FORM_THEME}> | |||
| <Grid item xs={12} sx={{mt:-1, mb: -2.25}}> | |||
| <Typography variant="h5">{isNewRecord? "Create User" : "Maintain User"}</Typography> | |||
| <Typography variant="h4">{isNewRecord? "Create User" : "Maintain User"}</Typography> | |||
| </Grid> | |||
| {/*col 1*/} | |||
| <Grid item xs={12} md={12}/* lg={5}*/> | |||
| @@ -62,7 +62,7 @@ const UserSettingPage = () => { | |||
| <Grid container justifyContent="flex-start" alignItems="center"> | |||
| <Grid item xs={12} sx={{mb: -2.25}} > | |||
| <Box sx={{ display: 'flex', alignItems: 'center'}}> | |||
| <Typography align="center" variant="h5">View User</Typography> | |||
| <Typography align="center" variant="h4">View User</Typography> | |||
| </Box> | |||
| </Grid> | |||
| </Grid> | |||
| @@ -23,6 +23,7 @@ function PDF() { | |||
| const viewerRef = useRef(null); // Ref for the DOM element where PDF will render | |||
| const [pdfLoaded, setPdfLoaded] = useState(false); | |||
| const [viewerLoaded, setViewerLoaded] = useState(false); | |||
| const [isSaving, setIsSaving] = useState(false); | |||
| const [viewInstance,setViewInstance] = useState(); | |||
| const [adobeDCView,setAdobeDCView] = useState(); | |||
| const [pdfUrl, setPdfUrl] = useState(); | |||
| @@ -194,6 +195,7 @@ function PDF() { | |||
| const formData = new FormData(); | |||
| formData.append('file', filledPdfBlob, 'filled_form.pdf'); | |||
| formData.append('record', JSON.stringify(record)); | |||
| setIsSaving(true); | |||
| // Send the filled PDF to your Spring Boot backend's save endpoint | |||
| await axios.post(`${apiPath}${POST_PDF_PATH}`, formData, { | |||
| headers: { | |||
| @@ -201,6 +203,7 @@ function PDF() { | |||
| }, | |||
| }) | |||
| .then(response => { | |||
| setIsSaving(false); | |||
| console.log('PDF saved on server:', response.data); | |||
| setRecord({ | |||
| id: response.data.data.id, | |||
| @@ -264,6 +267,7 @@ function PDF() { | |||
| variant="contained" | |||
| color="cancel" | |||
| onClick={viewerLoaded ? handleBackClick : handleBack} | |||
| disabled={isSaving} | |||
| > | |||
| Back | |||
| </Button> | |||
| @@ -246,7 +246,7 @@ const PdfSearchForm = ({applySearch, setExpanded,expanded, clientId}) => { | |||
| </Grid> | |||
| </Grid> | |||
| <Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}> | |||
| {/* <Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}> | |||
| <InputLabel htmlFor="remarks">Remarks</InputLabel> | |||
| <TextField | |||
| fullWidth | |||
| @@ -255,7 +255,7 @@ const PdfSearchForm = ({applySearch, setExpanded,expanded, clientId}) => { | |||
| id="remarks" | |||
| autoComplete="off" | |||
| /> | |||
| </Grid> | |||
| </Grid> */} | |||
| </Grid> | |||
| @@ -117,6 +117,19 @@ export default function PdfTable({recordList}) { | |||
| </div> | |||
| ), | |||
| }, | |||
| { | |||
| id: 'version', | |||
| field: 'version', | |||
| headerName: 'Version', | |||
| flex: 0.5, | |||
| renderCell: (params) => { | |||
| return ( | |||
| <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}> | |||
| {params.value} | |||
| </div> | |||
| ); | |||
| } | |||
| }, | |||
| { | |||
| id: 'modified', | |||
| field: 'modified', | |||
| @@ -198,19 +211,19 @@ export default function PdfTable({recordList}) { | |||
| // ); | |||
| // } | |||
| // }, | |||
| { | |||
| id: 'remarks', | |||
| field: 'remarks', | |||
| headerName: 'Remarks', | |||
| flex: 2, | |||
| renderCell: (params) => { | |||
| return ( | |||
| <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}> | |||
| {params.value} | |||
| </div> | |||
| ); | |||
| } | |||
| }, | |||
| // { | |||
| // id: 'remarks', | |||
| // field: 'remarks', | |||
| // headerName: 'Remarks', | |||
| // flex: 2, | |||
| // renderCell: (params) => { | |||
| // return ( | |||
| // <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}> | |||
| // {params.value} | |||
| // </div> | |||
| // ); | |||
| // } | |||
| // }, | |||
| ]; | |||
| @@ -46,6 +46,19 @@ export function SelectTemplateWindow({ isWindowOpen, onNormalClose, onConfirmClo | |||
| const createNewForm = (templateId) => { | |||
| navigate(`/pdf/maintain/-${clientId}T${templateId}`); | |||
| }; | |||
| const generateColorFromKey = (key) => { | |||
| let hash = 0; | |||
| for (let i = 0; i < key.length; i++) { | |||
| hash += key.charCodeAt(i); | |||
| } | |||
| const baseHue = (hash * 37) % 360; // Multiply by a prime number for better distribution | |||
| const saturation = 120; // Higher saturation for more vibrant colors | |||
| const lightness = 30; // Lower lightness for darker colors | |||
| return `hsl(${baseHue}, ${saturation}%, ${lightness}%)`; | |||
| }; | |||
| return ( | |||
| <Dialog | |||
| @@ -75,8 +88,8 @@ export function SelectTemplateWindow({ isWindowOpen, onNormalClose, onConfirmClo | |||
| <div key={record.id} style={{ margin: '10px' }}> | |||
| <Button | |||
| variant="contained" | |||
| color="create" | |||
| sx={{mr: 1}} | |||
| //color="create" | |||
| sx={{backgroundColor: generateColorFromKey(record.name.split(' ')[0]), color: 'white', mr: 1}} | |||
| onClick={() => createNewForm(record.id)} | |||
| > | |||
| {record.name} | |||
| @@ -52,7 +52,7 @@ export const MODULE_COMBO = [ | |||
| export const USER_GROUP_COMBO = [ | |||
| // {id:0, key: 0, label: 'System Admin'}, | |||
| {id:1, key: 1, label: 'Case Officer'}, | |||
| {id:1, key: 1, label: 'Case Manager'}, | |||
| {id:2, key: 2, label: 'Administrator'}, | |||
| ]; | |||