Updated main page

This commit is contained in:
Patrick Alvin Alcala 2025-11-07 18:27:47 +08:00
parent 41ede28a1c
commit e751d39505

View file

@ -5,12 +5,13 @@ import { Tabs } from '@kobalte/core/tabs'
import { ofetch } from 'ofetch' import { ofetch } from 'ofetch'
import { onMount, createSignal } from 'solid-js' import { onMount, createSignal } from 'solid-js'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { checkConnection, getApi, getApiMulti } from '../../utils/functions' import { checkConnection, getApi, getApiMulti, postApi } from '../../utils/functions'
import { FaSolidThumbsUp } from 'solid-icons/fa' import { FaSolidThumbsUp } from 'solid-icons/fa'
import { _employeeName } from '../../stores/employee' import { _employeeName } from '../../stores/employee'
import { useNavigate } from '@solidjs/router' import { useNavigate } from '@solidjs/router'
import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate } from '../../stores/pdfinfo' import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate } from '../../stores/pdfinfo'
import { VsRefresh } from 'solid-icons/vs' import { VsRefresh } from 'solid-icons/vs'
import { BiRegularErrorAlt } from 'solid-icons/bi'
const API = import.meta.env.VITE_BACKEND const API = import.meta.env.VITE_BACKEND
const PESO = import.meta.env.VITE_PESO const PESO = import.meta.env.VITE_PESO
@ -21,7 +22,7 @@ const PUBLICIP = import.meta.env.VITE_PUBLICIP
export default () => { export default () => {
const navigate = useNavigate() const navigate = useNavigate()
const [totalOp, setTotalOp] = createSignal(0) const [totalOp, setTotalOp] = createSignal('')
const [assessor, setAssessor] = createSignal('') const [assessor, setAssessor] = createSignal('')
const [dateOp, setDateOp] = createSignal('') const [dateOp, setDateOp] = createSignal('')
const [location, setLocation] = createSignal('') const [location, setLocation] = createSignal('')
@ -50,6 +51,8 @@ export default () => {
const [employeeId, setEmployeeId] = createSignal(0) const [employeeId, setEmployeeId] = createSignal(0)
const [employeeName, setEmployeeName] = createSignal('') const [employeeName, setEmployeeName] = createSignal('')
const [apology, setApology] = createSignal(false)
const getListForApproval = async () => { const getListForApproval = async () => {
const responseE = await getApiMulti('get-listopapproval-electrical') const responseE = await getApiMulti('get-listopapproval-electrical')
setApplicationListElectrical(responseE.result) setApplicationListElectrical(responseE.result)
@ -98,23 +101,24 @@ export default () => {
} }
const getopdetails = async (division: string, applicationNo: string) => { const getopdetails = async (division: string, applicationNo: string) => {
let op
if (division === 'electrical') { if (division === 'electrical') {
const op = await getApiMulti('get-opdetails-electrical', applicationNo) op = await getApiMulti('get-opdetails-electrical', applicationNo)
setAssessor(op.result7[0])
setLocation(op.result5[0])
setType(op.result6[0])
setDateOp(dayjs(op.result10[0]).format('MMMM DD, YYYY'))
setApplicationId(op.result11[0])
setTotalOp(calculateTotal(op.result9))
} else if (division === 'occupancy') { } else if (division === 'occupancy') {
const op = await getApiMulti('get-opdetails-occupancy', applicationNo) op = await getApiMulti('get-opdetails-occupancy', applicationNo)
setAssessor(op.result7[0])
setLocation(op.result5[0])
setType(op.result6[0])
setDateOp(dayjs(op.result10[0]).format('MMMM DD, YYYY'))
setApplicationId(op.result11[0])
setTotalOp(calculateTotal(op.result9))
} }
setLocation(op.result[0])
setType(op.result2[0])
setAssessor(op.result3[0])
const total = calculateTotal(op.result4)
const formattedTotal = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
}).format(total)
setTotalOp(formattedTotal)
setDateOp(dayjs(op.result5[0]).format('MMMM DD, YYYY'))
setApplicationId(op.result6[0])
} }
const calculateTotal = (list: number[]) => { const calculateTotal = (list: number[]) => {
@ -163,15 +167,15 @@ export default () => {
} }
if (division === 'electrical') { if (division === 'electrical') {
signed = await setNewStatus('ELECTRICAL ORDER OF PAYMENT APPROVED AND SIGNED', '170', 'ELECOPAPPROVEDSIGNED', 1) signed = await setNewStatus(division, 'ELECTRICAL ORDER OF PAYMENT APPROVED AND SIGNED', '170', 'ELECOPAPPROVEDSIGNED', 1)
const approvedid = await getIdByApplication(application) const approvedid = await getIdByApplication(division, application)
updateDocflow(approvedid, 'FOR ELECTRICAL ORDER OF PAYMENT APPROVAL') updateDocflow(division, approvedid, 'FOR ELECTRICAL ORDER OF PAYMENT APPROVAL')
if (!signed) return if (!signed) return
forprinting = await setNewStatus('FOR ELECTRICAL ORDER OF PAYMENT PRINTING', '95', 'ELECOPPRINT', 0) forprinting = await setNewStatus(division, 'FOR ELECTRICAL ORDER OF PAYMENT PRINTING', '95', 'ELECOPPRINT', 0)
if (!forprinting) return if (!forprinting) return
updateOrderofpayment = await updateOp() updateOrderofpayment = await updateOp(division)
if (updateOrderofpayment) { if (updateOrderofpayment) {
postTransaction() postTransaction()
@ -180,43 +184,42 @@ export default () => {
setApproved(true) setApproved(true)
} }
} else if (division === 'occupancy') { } else if (division === 'occupancy') {
signed = await setNewStatus('OCCUPANCY ORDER OF PAYMENT APPROVED AND SIGNED', '172', 'OCCOPAPPROVEDSIGNED', 1) signed = await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT APPROVED AND SIGNED', '172', 'OCCOPAPPROVEDSIGNED', 1)
const approvedid = await getIdByApplication(application) const approvedid = await getIdByApplication(division, application)
updateDocflow(approvedid, 'FOR OCCUPANCY RECOMMENDING APPROVAL') updateDocflow(division, approvedid, 'FOR OCCUPANCY RECOMMENDING APPROVAL')
if (!signed) return if (!signed) return
forprinting = await setNewStatus('APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT', '23', 'OCORDEROFPAYMENT', 0) forprinting = await setNewStatus(division, 'APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT', '23', 'OCORDEROFPAYMENT', 0)
if (!forprinting) return if (!forprinting) return
updateOrderofpayment = await updateOp() updateOrderofpayment = await updateOp(division)
if (updateOrderofpayment) {
postTransaction()
postPops(division, application)
setApprovedApplication(application)
setApproved(true)
}
} }
} }
const setNewStatus = async (status: string, tag: string, tagword: string, approved: number) => { const setNewStatus = async (division: string, status: string, tag: string, tagword: string, approved: number) => {
const today = new Date() const today = new Date()
const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss')
const statusid = parseInt(applicationId().toString()) const statusid = parseInt(applicationId().toString())
try { if (division === 'electrical') {
await ofetch(API + 'post-newstatus-electrical', { return await postApi('post-newstatus-electrical', { data: statusid, data2: formattedDate, data3: status, data4: tag, data5: tagword, data6: parseInt(approved.toString()), data7: parseInt(ID) })
method: 'POST', } else {
body: { data: statusid, data2: formattedDate, data3: status, data4: tag, data5: tagword, data6: parseInt(approved.toString()), data7: parseInt(ID) }, return await postApi('post-newstatus-occupancy', { data: statusid, data2: formattedDate, data3: status, data4: tag, data5: tagword, data6: parseInt(approved.toString()), data7: parseInt(ID) })
})
return true
} catch {
return false
} }
} }
const updateOp = async () => { const updateOp = async (division: string) => {
try { if (division === 'electrical') {
await ofetch(API + 'update-opapproved-electrical', { return await postApi('update-opapproved-electrical', { data: parseInt(applicationId().toString()) })
method: 'POST', } else {
body: { data: parseInt(applicationId().toString()) }, return await postApi('update-opapproved-occupancy', { data: parseInt(applicationId().toString()) })
})
return true
} catch {
return false
} }
} }
@ -338,20 +341,22 @@ export default () => {
}) })
} }
const updateDocflow = async (electricalid: number, status: string) => { const updateDocflow = async (division: string, applicationid: number, status: string) => {
await ofetch(API + 'update-docflow-electrical', { if (division === 'electrical') {
method: 'POST', await postApi('update-docflow-electrical', { data: parseInt(applicationid.toString()), data2: status })
body: { data: parseInt(electricalid.toString()), data2: status }, } else if (division === 'occupancy') {
}) await postApi('update-docflow-occupancy', { data: parseInt(applicationid.toString()), data2: status })
}
} }
const getIdByApplication = async (applicationNo: string) => { const getIdByApplication = async (division: string, applicationNo: string) => {
try { let response
const response = await getApi('get-idbyapplication-electrical', applicationNo) if (division === 'electrical') {
return parseInt(response) response = await getApi('get-idbyapplication-electrical', applicationNo)
} catch { } else if (division === 'occupancy') {
return 0 response = await getApi('get-idbyapplication-occupancy', applicationNo)
} }
return parseInt(response)
} }
const refresh = async (division: string) => { const refresh = async (division: string) => {
@ -451,7 +456,7 @@ export default () => {
</Padding> </Padding>
<Row> <Row>
<table class="table"> <table class="table__disabled">
<thead> <thead>
<tr> <tr>
<th>Application Number</th> <th>Application Number</th>
@ -466,13 +471,15 @@ export default () => {
<td>{nameListOccupancy()[index]}</td> <td>{nameListOccupancy()[index]}</td>
<td> <td>
<ModalButton <Button
class="modal" // class="modal"
label="Show Details" label="Show Details"
design="bo-link" design="bo-link"
background="#121e2acc" background="#121e2acc"
color="#ffffffec" color="#ffffffec"
function={async () => { onClick={async () => {
setApology(true)
setErrorMessage('Modification of Occupancy Printing has not yet finished')
await getopdetails('occupancy', item) await getopdetails('occupancy', item)
}} }}
> >
@ -508,7 +515,7 @@ export default () => {
<section class="modal__row"> <section class="modal__row">
<span class="modal__row__label">Total Fee:</span> <span class="modal__row__label">Total Fee:</span>
<span class="modal__row__detail__price"> <span class="modal__row__detail__price">
{PESO} {totalOp().toFixed(2)} {PESO} {totalOp()}
</span> </span>
</section> </section>
</Padding> </Padding>
@ -518,7 +525,7 @@ export default () => {
<span class="modal__cancel">Click anywhere to cancel</span> <span class="modal__cancel">Click anywhere to cancel</span>
</Row> </Row>
</Padding> </Padding>
</ModalButton> </Button>
</td> </td>
</tr> </tr>
))} ))}
@ -595,7 +602,7 @@ export default () => {
<section class="modal__row"> <section class="modal__row">
<span class="modal__row__label">Total Fee:</span> <span class="modal__row__label">Total Fee:</span>
<span class="modal__row__detail__price"> <span class="modal__row__detail__price">
{PESO} {totalOp().toFixed(2)} {PESO} {totalOp()}
</span> </span>
</section> </section>
</Padding> </Padding>
@ -683,6 +690,35 @@ export default () => {
</Padding> </Padding>
</Modal> </Modal>
</div> </div>
<div onClick={() => setApology(false)}>
<Modal trigger={apology()} background="#562020ff" color="#ffebebe6" opacity={0.8}>
<Padding top={1} bottom={1} left={4} right={4}>
<Column>
<Row gap={2}>
<BiRegularErrorAlt size={90} color="#ffebebe6" />
<Box curved thickness={3} color="#ffebebe6" padding="1rem">
<h2>Delayed Release of Feature</h2>
</Box>
</Row>
<Row>
<h3>{errorMessage()}</h3>
</Row>
<Row>
<Column gap={0.5}>
<span>Occupancy Approval is delayed until Occupancy Printing is complete</span>
</Column>
</Row>
<Row>
<span class="close-text">Click anywhere to close</span>
</Row>
</Column>
</Padding>
</Modal>
</div>
</> </>
) )
} }