Преглед на файлове

update offline mode

CR013B2
Alex Cheung преди 3 месеца
родител
ревизия
b1c5f43aba
променени са 14 файла, в които са добавени 313 реда и са изтрити 218 реда
  1. +2
    -2
      src/components/FiDataGrid.js
  2. +25
    -22
      src/pages/Proof/Reply_GLD/ApplicationDetails.js
  3. +151
    -142
      src/pages/PublicNotice/Details_GLD/ApplicationDetailCard.js
  4. +7
    -0
      src/pages/PublicNotice/Details_GLD/GazetteDetailCard.js
  5. +5
    -1
      src/pages/PublicNotice/Details_GLD/index.js
  6. +59
    -49
      src/pages/PublicNotice/Details_Public/ApplicationDetailCard.js
  7. +12
    -1
      src/pages/PublicNotice/ListPanel/BaseGrid.js
  8. +10
    -0
      src/pages/PublicNotice/ListPanel/SearchPublicNoticeTable.js
  9. +10
    -0
      src/pages/PublicNotice/Search_GLD/DataGrid.js
  10. +15
    -1
      src/pages/PublicNotice/Search_GLD/SearchForm.js
  11. +1
    -0
      src/translations/en.json
  12. +1
    -0
      src/translations/zh-CN.json
  13. +1
    -0
      src/translations/zh-HK.json
  14. +14
    -0
      src/utils/statusUtils/PublicNoteStatusUtils.js

+ 2
- 2
src/components/FiDataGrid.js Целия файл

@@ -57,9 +57,9 @@ export function FiDataGrid({ rows, columns, sx, autoHeight,
if(applySearch!=undefined){
if (Object.keys(getSearchCriteria(window.location.pathname)).length>0){
const localStorageSearchCriteria = getSearchCriteria(window.location.pathname)
console.log(localStorageSearchCriteria)
// console.log(localStorageSearchCriteria)
if(localStorageSearchCriteria.start!=undefined){
console.log(localStorageSearchCriteria)
// console.log(localStorageSearchCriteria)
setPage(localStorageSearchCriteria.start/pageSize);
}
}


+ 25
- 22
src/pages/Proof/Reply_GLD/ApplicationDetails.js Целия файл

@@ -38,7 +38,6 @@ const ApplicationDetailCard = ({

useEffect(() => {
if (formData) {
console.log(formData)
setData(formData);
}
}, [formData]);
@@ -134,29 +133,33 @@ const ApplicationDetailCard = ({
alignItems="center"
>
Public Notice: Proofreading Reply
<Button
component="span"
variant="contained"
size="large"
disabled={!showProofBtn||onDownload}
onClick={genProof}
>
<Typography variant="h5">Proof Slip</Typography>
</Button>
{
isGranted(["MAINTAIN_PROOF"]) ? <Button
component="span"
variant="contained"
size="large"
color="error"
disabled={showCancelBtn}
onClick={doCancel}
>
<Typography variant="h5">Cancel</Typography>
</Button> : <></>
{data.appMode != "offline"?
<>
<Button
component="span"
variant="contained"
size="large"
disabled={!showProofBtn||onDownload}
onClick={genProof}
>
<Typography variant="h5">Proof Slip</Typography>
</Button>
{
isGranted(["MAINTAIN_PROOF"]) ? <Button
component="span"
variant="contained"
size="large"
color="error"
disabled={showCancelBtn}
onClick={doCancel}
>
<Typography variant="h5">Cancel</Typography>
</Button> : <></>
}
</>
:null
}


</Stack>

</Typography>


+ 151
- 142
src/pages/PublicNotice/Details_GLD/ApplicationDetailCard.js Целия файл

@@ -55,6 +55,7 @@ const ApplicationDetailCard = (
const [paymentMeans, setPaymentMeans] = useState(ComboData.paymentMeans[0]);
const [oldPaymentMeans, setOldPaymentMeans] = useState("");
const [isPaymentMeansPopUp, setIsPaymentMeansPopUp] = useState(false);
const [mode, setMode] = useState("");

const { register, handleSubmit } = useForm()
const intl = useIntl();
@@ -88,6 +89,9 @@ const ApplicationDetailCard = (
setVerified(applicationDetailData.userData.verifiedBy ? true : false)
setfileDetail(applicationDetailData.fileDetail);
setProofId(applicationDetailData.proofId);
if (applicationDetailData.data.mode != null){
setMode(applicationDetailData.data.mode);
}
if (applicationDetailData.data.status == 'submitted'||applicationDetailData.data.status == 'reviewed'||applicationDetailData.data.status == 'confirmed'){
setShowPaymentMeans(true)
if (applicationDetailData.data.paymentMethod!=null){
@@ -236,161 +240,118 @@ const ApplicationDetailCard = (
>
{verified && currentApplicationDetailData.status !== "notAccepted" ?
isGrantedAny("MAINTAIN_APPLICATION") ?
<Grid container spacing={4} direction="row">
<Grid item xs={12} md={4} >
<Stack
direction="row"
justifyContent="flex-start"
alignItems="center"
spacing={2}
mb={2}
>
{currentApplicationDetailData.status === "reviewed" && isGranted("MAINTAIN_PROOF") ?
<Button
// size="large"
variant="contained"
onClick={() => { onProofClick() }}
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}>
<EditNoteIcon />
<Typography ml={1} variant="h5"> Create Proof</Typography>
</Button> :
null
}
</Stack>
</Grid>
<Grid item xs={12} md={8} >
<Stack
direction="row"
justifyContent="flex-start"
alignItems="center"
spacing={2}
mb={2}
>
{
!(orgDetail?.creditor) && currentApplicationDetailData.creditor && currentApplicationDetailData.status === "published" ?
<>
<div>
{mode != "offline"?
<Grid container spacing={4} direction="row">
<Grid item xs={12} md={4} >
<Stack
direction="row"
justifyContent="flex-start"
alignItems="center"
spacing={2}
mb={2}
>
{currentApplicationDetailData.status === "reviewed" && isGranted("MAINTAIN_PROOF") ?
<Button
// size="large"
variant="contained"
onClick={paidClick()}
onClick={() => { onProofClick() }}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
alignItems: 'end'
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Paid</Typography>
</Button>
</>
:
<></>
}
{currentApplicationDetailData.status === "submitted" || currentApplicationDetailData.status == "reviewed" ?
<>
<Button
// size="large"
variant="contained"
onClick={reSubmitClick()}
color="orange"
>
<ReplayIcon />
<Typography ml={1} variant="h5"> Re-Submit</Typography>
</Button>
<EditNoteIcon />
<Typography ml={1} variant="h5"> Create Proof</Typography>
</Button> :
null
}
</Stack>
</Grid>
<Grid item xs={12} md={8} >
<Stack
direction="row"
justifyContent="flex-start"
alignItems="center"
spacing={2}
mb={2}
>
{
proofId == null || proofId == 0?
<Button
// size="large"
variant="contained"
onClick={notAcceptedClick()}
color="error"
sx={{
textTransform: 'capitalize',
alignItems: 'end',
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Not Accept</Typography>
</Button>
:
null
!(orgDetail?.creditor) && currentApplicationDetailData.creditor && currentApplicationDetailData.status === "published" ?
<>
<Button
variant="contained"
onClick={paidClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Paid</Typography>
</Button>
</>
:
<></>
}
</> :
(currentApplicationDetailData.status == "confirmed" && currentApplicationDetailData.creditor == 1) ?
<>
<Button
// size="large"
variant="contained"
onClick={doPublish()}
disabled={setCompleteDisable()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#52b202'
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Publish</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={withdrawnClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
</Button>
</>
:
(currentApplicationDetailData.status == "confirmed" && currentApplicationDetailData.creditor == 0) ?
{currentApplicationDetailData.status === "submitted" || currentApplicationDetailData.status == "reviewed" ?
<>
<Button
// size="large"
variant="contained"
onClick={withdrawnClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
onClick={reSubmitClick()}
color="orange"
>
<ReplayIcon />
<Typography ml={1} variant="h5"> Re-Submit</Typography>
</Button>
</>
:
(
(currentApplicationDetailData.status == "paid" && currentApplicationDetailData.creditor == 0) ?
<>
{
proofId == null || proofId == 0?
<Button
// size="large"
variant="contained"
onClick={revokeClick()}
disabled={currentApplicationDetailData.paymentMethod == "online" || currentApplicationDetailData.paymentMethod == null}
onClick={notAcceptedClick()}
color="error"
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>

<ReplayIcon />
<Typography ml={1} variant="h5">Revoke Payment</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={complatedClick()}
disabled={setCompleteDisable()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#52b202'
}}>

<DoneIcon />
<Typography ml={1} variant="h5">Publish</Typography>
<CloseIcon />
<Typography ml={1} variant="h5">Not Accept</Typography>
</Button>
:
null
}
</> :
(currentApplicationDetailData.status == "confirmed" && currentApplicationDetailData.creditor == 1) ?
<>
<Button
// size="large"
variant="contained"
onClick={doPublish()}
disabled={setCompleteDisable()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#52b202'
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Publish</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={withdrawnClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
</Button>
</>
:
(currentApplicationDetailData.status == "confirmed" && currentApplicationDetailData.creditor == 0) ?
<>
<Button
// size="large"
variant="contained"
@@ -403,13 +364,61 @@ const ApplicationDetailCard = (
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
</Button>
</> : null
)

}
</Stack>
</Grid>
</Grid>
</>
:
(
(currentApplicationDetailData.status == "paid" && currentApplicationDetailData.creditor == 0) ?
<>
<Button
// size="large"
variant="contained"
onClick={revokeClick()}
disabled={currentApplicationDetailData.paymentMethod == "online" || currentApplicationDetailData.paymentMethod == null}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<ReplayIcon />
<Typography ml={1} variant="h5">Revoke Payment</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={complatedClick()}
disabled={setCompleteDisable()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#52b202'
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Publish</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={withdrawnClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
</Button>
</> : null
)
}
</Stack>
</Grid>
</Grid>
:null
}
</div>
: null
: null
}


+ 7
- 0
src/pages/PublicNotice/Details_GLD/GazetteDetailCard.js Целия файл

@@ -35,6 +35,7 @@ const GazetteDetailCard = (
const [currentStatus, setCurrentStatus] = useState({});
const [sysType, setSysType] = useState(null);
const [careOf, setCareOf] = useState("");
const [mode, setMode] = useState("");

const [isWarningPopUp, setIsWarningPopUp] = useState(false);
const [warningText, setWarningText] = useState("");
@@ -55,6 +56,9 @@ const GazetteDetailCard = (
setSysType(applicationDetailData.userData.sysType)
setCareOf(applicationDetailData.data.careOf)
setGroupTitle(applicationDetailData.data.groupTitle)
if (applicationDetailData.data.mode != null){
setMode(applicationDetailData.data.mode);
}
}
}, [applicationDetailData]);

@@ -99,6 +103,7 @@ const GazetteDetailCard = (
spacing={2}
mb={2}
>
{mode != "offline"?
<Button
// size="large"
variant="contained"
@@ -111,6 +116,8 @@ const GazetteDetailCard = (
<EditNoteIcon />
<Typography variant="h5" ml={1}> Gen Gazette Code</Typography>
</Button>
:null
}
</Stack>
</Grid>
</Grid>


+ 5
- 1
src/pages/PublicNotice/Details_GLD/index.js Целия файл

@@ -63,6 +63,7 @@ const PublicNoticeDetail_GLD = () => {
const [issueNum, setIssueNum] = useState("");
const [groupNo, setGroupNo] = useState("");
// const [groupTitle, setGroupTitle] = useState("");
const [mode, setMode] = useState("");

//statusWindow
const [open, setOpen] = useState(false);
@@ -88,7 +89,7 @@ const PublicNoticeDetail_GLD = () => {
backgroundPosition: 'right'
}

const title = groupNo != null ? (appNo + ", " + gazetteIssue + ", " + issueNum + " , " + groupNo) : (appNo + ", " + gazetteIssue + ", " + issueNum)
const title = groupNo != null ? (appNo + ", " + gazetteIssue + ", " + issueNum + " , " + groupNo +" "+ mode) : (appNo + ", " + gazetteIssue + ", " + issueNum+" "+ mode)

useEffect(() => {
loadApplicationDetail();
@@ -122,6 +123,9 @@ const PublicNoticeDetail_GLD = () => {
setIssueNum(" No. " + gazetteIssueDetail.issueNo);
setIssueDate(DateUtils.dateFormat(gazetteIssueDetail.issueDate, "D MMM YYYY (ddd)"));
setGroupNo(response.data.data.groupNo);
if (response.data.data.mode != null){
setMode("("+response.data.data.mode+")");
}
setLoading(false);
}
})


+ 59
- 49
src/pages/PublicNotice/Details_Public/ApplicationDetailCard.js Целия файл

@@ -62,6 +62,7 @@ const ApplicationDetailCard = (
const [issueNum, setIssueNum] = useState("");
const [issueDate, setIssueDate] = useState("");
const [onDownload, setOnDownload] = useState(false);
const [mode, setMode] = useState("");
const { register,
// getValues
@@ -79,6 +80,9 @@ const ApplicationDetailCard = (
setIssueNum(applicationDetailData.gazetteIssueDetail.volume + "/" + applicationDetailData.gazetteIssueDetail.issueYear
+ " No. " + applicationDetailData.gazetteIssueDetail.issueNo);
setIssueDate(DateUtils.dateFormat(applicationDetailData.gazetteIssueDetail.issueDate, "D MMM YYYY (ddd)"));
if (applicationDetailData.data.mode != null){
setMode(applicationDetailData.data.mode);
}
}
}, [applicationDetailData]);

@@ -183,62 +187,68 @@ const ApplicationDetailCard = (
border={false}
content={false}
>
<Grid container spacing={1} direction="row">
<Grid item xs={12}>
<Stack
direction="row"
justifyContent="space-between"
alignItems="center"
spacing={2}
mb={2}
>
<ThemeProvider theme={PNSPS_BUTTON_THEME}>
{
currentApplicationDetailData.status == "confirmed" ?
{mode != "offline"?
<div>
<Grid container spacing={1} direction="row">
<Grid item xs={12}>
<Stack
direction="row"
justifyContent="space-between"
alignItems="center"
spacing={2}
mb={2}
>
<ThemeProvider theme={PNSPS_BUTTON_THEME}>
{
currentApplicationDetailData.status == "confirmed" ?
<Button
variant="contained"
color="create"
onClick={() => { checkExprityDate(true) }}
disabled={currentApplicationDetailData.status == "rejected"
|| currentApplicationDetailData.status == "cancelled"
|| currentApplicationDetailData.status == "paid"
|| currentApplicationDetailData.creditor
|| currentApplicationDetailData.paymentMethod != "online"
}
startIcon={<EditNoteIcon />}
aria-label={intl.formatMessage({ id: 'payFor' })}
>
<FormattedMessage id="payFor" />
</Button>
: null
}
<Button
variant="contained"
color="create"
onClick={() => { checkExprityDate(true) }}
onClick={cancelledClick()}
color="edit"
disabled={currentApplicationDetailData.status == "rejected"
|| currentApplicationDetailData.status == "cancelled"
|| currentApplicationDetailData.status == "paid"
|| currentApplicationDetailData.creditor
|| currentApplicationDetailData.paymentMethod != "online"
|| currentApplicationDetailData.status == "withdrawn"
|| currentApplicationDetailData.status == "completed"
|| currentApplicationDetailData.status == "notAccepted"
|| currentApplicationDetailData.status == "resubmit"
|| (!currentApplicationDetailData.creditor
&& currentApplicationDetailData.status == "paid")
|| (currentApplicationDetailData.creditor
&& currentApplicationDetailData.status == "confirmed")
|| (currentApplicationDetailData.creditor
&& currentApplicationDetailData.status == "published")
}
startIcon={<EditNoteIcon />}
aria-label={intl.formatMessage({ id: 'payFor' })}
title={intl.formatMessage({ id: 'cancelApp' })}
startIcon={<CloseIcon />}
aria-label={intl.formatMessage({ id: 'cancelApp' })}
>
<FormattedMessage id="payFor" />
<FormattedMessage id="cancelApp" />
</Button>
: null
}
<Button
variant="contained"
onClick={cancelledClick()}
color="edit"
disabled={currentApplicationDetailData.status == "rejected"
|| currentApplicationDetailData.status == "cancelled"
|| currentApplicationDetailData.status == "withdrawn"
|| currentApplicationDetailData.status == "completed"
|| currentApplicationDetailData.status == "notAccepted"
|| currentApplicationDetailData.status == "resubmit"
|| (!currentApplicationDetailData.creditor
&& currentApplicationDetailData.status == "paid")
|| (currentApplicationDetailData.creditor
&& currentApplicationDetailData.status == "confirmed")
|| (currentApplicationDetailData.creditor
&& currentApplicationDetailData.status == "published")
}
title={intl.formatMessage({ id: 'cancelApp' })}
startIcon={<CloseIcon />}
aria-label={intl.formatMessage({ id: 'cancelApp' })}
>
<FormattedMessage id="cancelApp" />
</Button>
</ThemeProvider>
</Stack>
</Grid>
</Grid>
</ThemeProvider>
</Stack>
</Grid>
</Grid>
</div>
:null
}
<Typography variant="h4" sx={{ mb: 2, borderBottom: "1px solid black" }}>
<FormattedMessage id="publicNoticeDetailTitle" />
</Typography>


+ 12
- 1
src/pages/PublicNotice/ListPanel/BaseGrid.js Целия файл

@@ -13,8 +13,9 @@ import {
isDummyLoggedIn,
} from "utils/Utils";
import {useTheme} from "@emotion/react";
import {getStatusIntl} from "utils/statusUtils/PublicNoteStatusUtils";
import {getStatusIntl,getModeEng} from "utils/statusUtils/PublicNoteStatusUtils";
import {FormattedMessage, useIntl} from "react-intl";

// ==============================|| EVENT TABLE ||============================== //

export default function BaseGrid({setCount, url}) {
@@ -36,6 +37,16 @@ export default function BaseGrid({setCount, url}) {
width: isMdOrLg ? 'auto' : 160,
flex: isMdOrLg ? 1 : undefined,
},
{
id: 'mode',
field: 'mode',
headerName: intl.formatMessage({ id: 'applicationMode' }),
width: isMdOrLg ? 'auto' : 100,
flex: isMdOrLg ? 1 : undefined,
renderCell: (params) => {
return [getModeEng(params)]
},
},
{
id: 'created',
field: 'created',


+ 10
- 0
src/pages/PublicNotice/ListPanel/SearchPublicNoticeTable.js Целия файл

@@ -42,6 +42,16 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea
width: isMdOrLg ? 'auto' : 160,
flex: isMdOrLg ? 1 : undefined,
},
{
id: 'mode',
field: 'mode',
headerName: intl.formatMessage({ id: 'applicationMode' }),
width: isMdOrLg ? 'auto' : 100,
flex: isMdOrLg ? 1 : undefined,
renderCell: (params) => {
return [StatusUtils.getModeEng(params)]
},
},
{
id: 'created',
field: 'created',


+ 10
- 0
src/pages/PublicNotice/Search_GLD/DataGrid.js Целия файл

@@ -64,6 +64,16 @@ export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnRea
return clickableLink('/application/' + params.id, params.row.appNo);
},
},
{
id: 'mode',
field: 'mode',
headerName: 'Mode',
sortable: false,
width: 100,
renderCell: (params) => {
return [StatusUtils.getModeEng(params)]
},
},
{
id: 'status',
field: 'status',


+ 15
- 1
src/pages/PublicNotice/Search_GLD/SearchForm.js Целия файл

@@ -89,6 +89,7 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss
issueId: issueSelected?.id,
groupNo: data.groupNo,
gazettGroup: groupSelected?.code,
mode: data.mode,
start:0,
limit:10
};
@@ -126,7 +127,8 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss
reset({
appNo:"",
contact:"",
groupNo:""
groupNo:"",
mode:""
});
localStorage.setItem('searchCriteria',"")
}
@@ -418,6 +420,18 @@ const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria, iss
}}
/>
</Grid>
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: marginBottom }}>
<TextField
fullWidth
{...register("mode")}
id='mode'
label="Mode"
defaultValue={searchCriteria.mode}
InputLabelProps={{
shrink: true
}}
/>
</Grid>

</Grid>



+ 1
- 0
src/translations/en.json Целия файл

@@ -368,6 +368,7 @@
"withdrawn": "Withdrawn",
"searchApplyRecord": "Search application records",
"applicationId": "Application No.",
"applicationMode": "Mode",
"submitDate": "Submit Date",
"submitDateFrom": "Submit Date (From)",
"submitDateTo": "Submit Date (To)",


+ 1
- 0
src/translations/zh-CN.json Целия файл

@@ -401,6 +401,7 @@
"withdrawn": "已撤销",
"searchApplyRecord": "搜寻申请记录",
"applicationId": "申请编号",
"applicationMode": "方式",
"submitDate": "提交日期",
"submitDateFrom": "提交日期 (从)",
"submitDateTo": "提交日期 (到)",


+ 1
- 0
src/translations/zh-HK.json Целия файл

@@ -402,6 +402,7 @@
"withdrawn": "已撤銷",
"searchApplyRecord": "搜尋申請記錄",
"applicationId": "申請編號",
"applicationMode": "方式",
"submitDate": "提交日期",
"submitDateFrom": "提交日期 (從)",
"submitDateTo": "提交日期 (到)",


+ 14
- 0
src/utils/statusUtils/PublicNoteStatusUtils.js Целия файл

@@ -102,3 +102,17 @@ export function getStatusByTextIntl(status, creditor, intl) {
return getStatusTag({ text: status })
}
}

export function getModeEng(params) {
return getModeByTextEng(params.row.mode);
}
export function getModeByTextEng(mode) {
switch (mode) {
case "offline":
return "Offline"
case "online":
return "Online"
default:
return ""
}
}

Зареждане…
Отказ
Запис