import { Tabs } from '@kobalte/core/tabs'; import { useNavigate } from '@solidjs/router'; import dayjs from 'dayjs'; import { FaSolidThumbsUp } from 'solid-icons/fa'; import { FiLogOut } from 'solid-icons/fi'; import { VsRefresh } from 'solid-icons/vs'; import { createEffect, createSignal, onMount } from 'solid-js'; import { Show } from 'solid-js/web'; import { Box, Button, Clickable, Column, Combobox, Input, Link, Logo, Modal, ModalButton, Padding, Page, Row } from '../../components/index.ts'; import { _additional, _additionalAmountList, _additionalCodeList, _additionalFeeList, _additionalUnitList, _amountList, _applicationNo, _approvedDate, _assessedDate, _assessor, _assessorid, _codeList, _date, _feeList, _floorArea, _location, _name, _optn, _signatureApprover, _signatureAssessor, _totalUnits, _type, _units, } from '../../stores/pdfinfo.ts'; import { checkConnection, createPdfElectrical, createPdfOccupancy, getApi, getApiMulti, postApi, statusPopsApi, voidPopsApi, saveNewName, saveNewPassword } from '../../utils/functions/index.ts'; import './Assessor.sass'; import { FaSolidUserGear } from 'solid-icons/fa' const PESO = import.meta.env.VITE_PESO export default () => { const navigate = useNavigate() const [totalOp, setTotalOp] = createSignal(0) const [assessor, setAssessor] = createSignal('') const [dateOp, setDateOp] = createSignal('') const [location, setLocation] = createSignal('') const [type, setType] = createSignal('') const [applicationId, setApplicationId] = createSignal(0) const [applicationListElectrical, setApplicationListElectrical] = createSignal([]) const [nameListElectrical, setNameListElectrical] = createSignal([]) const [applicationListOccupancy, setApplicationListOccupancy] = createSignal([]) const [nameListOccupancy, setNameListOccupancy] = createSignal([]) const [applicationListBuilding, setApplicationListBuilding] = createSignal([]) const [nameListBuilding, setNameListBuilding] = createSignal([]) const [errorMessage, setErrorMessage] = createSignal('') const [connected, setConnected] = createSignal(true) const [printed, setPrinted] = createSignal(false) const [printedApplication, setPrintedApplication] = createSignal('') const [openConfig, setOpenConfig] = createSignal(false) const [configEncPassword, setConfigEncPassword] = createSignal('') const [configNewName, setConfigNewName] = createSignal('') const [configPassword, setConfigPassword] = createSignal('') const [configNewPassword, setConfigNewPassword] = createSignal('') const [configNewEncPassword, setConfigNewEncPassword] = createSignal('') const [configError, setConfigError] = createSignal('') const [configNotification, setConfigNotification] = createSignal(false) const [isBuilding, setIsBuilding] = createSignal(false) const [isOccupancy, setIsOccupancy] = createSignal(false) const [isElectrical, setIsElectrical] = createSignal(false) const [employeeId, setEmployeeId] = createSignal(0) const [employeeName, setEmployeeName] = createSignal('') const [filter, setFilter] = createSignal('') const listType = ['Print', 'Reprint', 'Reprint and Void'] const [selectedType, setSelectedType] = createSignal('Print') const [voidError, setVoidError] = createSignal(false) let bldgadditional = false const checkAccess = async (access: string) => { const response = await getApi('check-access', access, employeeId()) const result = response if (result > 0) return true else return false } const getPrintDetails = async (division: string, id: number) => { let response if (selectedType() === 'Print') response = await getApiMulti(`get-printdetails-${division}`, id) else response = await getApiMulti(`get-reprintdetails-${division}`, id) const applicationno = response.result const date = response.result2 const location = response.result3 const name = response.result8 const type = `${response.result4} - ${response.result5}` const assessor = response.result7 const units = response.result6 let totalUnits = 0 let floorArea = 0 if (division === 'occupancy') { totalUnits = response.result9 floorArea = response.result10 _totalUnits.set(totalUnits) _floorArea.set(floorArea) } _optn.set(`M${applicationno.split('-')[0]}${applicationno.split('-')[1]}`) _applicationNo.set(applicationno) _date.set(dayjs(date).format('MMMM DD, YYYY')) _name.set(name) _location.set(location) _type.set(type) _assessor.set(assessor) _assessorid.set(employeeId()) _units.set(units) } const getPrintDetailsFees = async (division: string, id: number) => { let response if (selectedType() === 'Print') response = await getApiMulti(`get-printdetailsfees-${division}`, id) else response = await getApiMulti(`get-reprintdetailsfees-${division}`, id) const feeList = response.result const accountCodeList = response.result2 const amountList = response.result3 _feeList.set(feeList) _codeList.set(accountCodeList) _amountList.set(amountList) _additional.set(false) if (division === 'occupancy' && bldgadditional) { const response = await getApiMulti('get-printdetailsfees-bldgadditional', id) const feeList = response.result const accountCodeList = response.result2 const amountList = response.result3 const unitList = response.result4 _additional.set(true) _additionalFeeList.set(feeList) _additionalCodeList.set(accountCodeList) _additionalAmountList.set(amountList) _additionalUnitList.set(unitList) } } // const calculateAmounts = () => { // const amounts: string[] = amountList() // let gflguList: number[] = [] // let gfdpwhList: number[] = [] // let tfboList: number[] = [] // for (let i = 0; i < amounts.length; i++) { // const gflgu = parseFloat(amounts[i]) * 0.8 // const gfdpwh = parseFloat(amounts[i]) * 0.05 // const tfbo = parseFloat(amounts[i]) * 0.15 // const roundedGflgu = parseFloat(gflgu.toFixed(2)) // const roundedGfdpwh = parseFloat(gfdpwh.toFixed(2)) // const roundedTfbo = parseFloat(tfbo.toFixed(2)) // gflguList.push(roundedGflgu) // gfdpwhList.push(roundedGfdpwh) // tfboList.push(roundedTfbo) // } // setGflgu(gflguList) // setGfdpwh(gfdpwhList) // setTfbo(tfboList) // } const closeNotification = async () => { setPrinted(false) await checkDivision() if (isBuilding()) await getListForPrinting('building') if (isOccupancy()) await getListForPrinting('occupancy') if (isElectrical()) await getListForPrinting('electrical') } const checkDivision = async () => { const building = await checkAccess('BUILDING ORDER OF PAYMENT') setIsBuilding(building) const occupancy = await checkAccess('OCCUPANCY ORDER OF PAYMENT') setIsOccupancy(occupancy) const electrical = await checkAccess('ELECTRICAL ASSESSMENT') setIsElectrical(electrical) } const getopdetails = async (division: string, applicationNo: string) => { // let op = [] // if (division === 'building') op = await getApiMulti('get-opdetails-building', applicationNo) // if (division === 'occupancy') op = await getApiMulti('get-opdetails-occupancy', applicationNo) // if (division === 'electrical') op = await getApiMulti('get-opdetails-electrical', applicationNo) let additionalResult if (selectedType() === 'Print') { additionalResult = await getApi('check-bldgadditional-printing', applicationNo) } else additionalResult = await getApi('check-bldgadditional-reprinting', applicationNo) bldgadditional = additionalResult > 0 const op = await getApiMulti(`get-opdetails-${division}`, applicationNo) setLocation(op.result[0]) setType(op.result2[0]) setAssessor(op.result3[0]) setTotalOp(calculateTotal(op.result4)) setDateOp(dayjs(op.result5[0]).format('MMMM DD, YYYY')) setApplicationId(op.result6[0]) // setAssessorId(op.result12[0]) // setDescriptionList(op.result8) // setAmountList(op.result9) // setDateOpList(op.result10) // calculateAmounts() getPrintDetails(division, op.result6[0]) getPrintDetailsFees(division, op.result6[0]) getSignatureImage(employeeId()) const approversignId = await geteSignId(276) getApprovedDate(approversignId, applicationNo) // const assessorId = await getEmployeeId(op.result7[0]) // const assessorsignId = await geteSignId(assessorId) getAssessedDate(division, op.result6[0]) } const calculateTotal = (list: number[]) => { const total = list.map((item) => parseFloat(item.toString())).reduce((acc, curr) => acc + curr, 0) return total } const getListForPrinting = async (division: string) => { try { let response: any if (selectedType() === 'Print') response = await getApiMulti(`get-listopprinting-${division}`) else response = await getApiMulti(`get-listopreprinting-${division}`) if (filter() !== '' && filter().trim().length !== 0) { const filteredApplications = response.result.filter((item: string) => item.includes(filter())) const filteredIndices = response.result.map((item: string, index: number) => (item.includes(filter()) ? index : -1)).filter((index: number) => index !== -1) const filteredNames = filteredIndices.map((index: number) => response.result2[index]) if (division === 'electrical') { setApplicationListElectrical(filteredApplications) setNameListElectrical(filteredNames) } else if (division === 'occupancy') { setApplicationListOccupancy(filteredApplications) setNameListOccupancy(filteredNames) } else { setApplicationListBuilding(filteredApplications) setNameListBuilding(filteredNames) } return } if (division === 'electrical') { setApplicationListElectrical(response.result) setNameListElectrical(response.result2) } else if (division === 'occupancy') { setApplicationListOccupancy(response.result) setNameListOccupancy(response.result2) } else { setApplicationListBuilding(response.result) setNameListBuilding(response.result2) } } catch (error) { console.error(error) } } const removeEmployee = () => { sessionStorage.removeItem('id') sessionStorage.removeItem('name') } const checkLogged = async () => { const idStore = sessionStorage.getItem('id') const nameStore = sessionStorage.getItem('name') setEmployeeId(parseInt(idStore!, 10)) setEmployeeName(nameStore!) if (employeeId() === 0 || employeeId().toString() === 'NaN') { removeEmployee() navigate('/', { replace: true }) return false } return true } const printHandler = async (division: string, application: string) => { let updateOrderofpayment: boolean = false setConnected(await checkConnection()) if (connected() === false) { setErrorMessage('No Connection on Server') return } if (division === 'electrical') { await setNewStatus(division, 'ELECTRICAL ORDER OF PAYMENT PRINTED', '171', 'ELECOPPRINTED', 1) await setNewStatus(division, 'ELECTRICAL ORDERPAYMENT RELEASED', '97', 'ELECRELEASED', 1) await setNewStatus(division, 'FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0) await updateDocflow(division, application, 'FOR ELECTRICAL ORDER OF PAYMENT PRINTING') } else if (division === 'occupancy') { await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT PRINTED', '173', 'OCCOPPRINTED', 1) await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT RELEASED', '174', 'OCCOPRELEASED', 1) await setNewStatus(division, 'ORDER OF PAYMENT RELEASE FOR BUREAU OF FIRE', '24', 'OCOOPRELEASE', 0) await updateDocflow(division, application, 'APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT') } updateOrderofpayment = await updateOp(division) if (updateOrderofpayment) { postTransaction(application) setPrintedApplication(application) setPrinted(true) if (division === 'electrical') { createPdfElectrical() } else if (division === 'occupancy') { createPdfOccupancy() } else console.log('building') } } const rePrintHandler = async (division: string, application: string) => { // let updateOrderofpayment: boolean = false setConnected(await checkConnection()) if (connected() === false) { setErrorMessage('No Connection on Server') return } if (selectedType().includes("Void")) { const status = await statusPopsOp(application) const message = status.message if (message.includes('No record')) { setVoidError(true) setErrorMessage("No record found on Pops") return } else { const pops_paid = message.pops_paid const epay_paid = message.epay_paid if (pops_paid || epay_paid) { setVoidError(true) setErrorMessage("Already Paid") return } } if (division === 'electrical') { await setNewStatus(division, 'ELECTRICAL ORDER OF PAYMENT REPRINTED', '175', 'ELECOPREPRINTED', 1) await setNewStatus(division, 'ELECTRICAL ORDERPAYMENT RELEASED', '97', 'ELECRELEASED', 1) await setNewStatus(division, 'FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0) await updateDocflow(division, application, 'FOR ELECTRICAL ORDER OF PAYMENT PRINTING') } else if (division === 'occupancy') { await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT REPRINTED', '176', 'OCCOPREPRINTED', 1) await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT RELEASED', '174', 'OCCOPRELEASED', 1) await setNewStatus(division, 'ORDER OF PAYMENT RELEASE FOR BUREAU OF FIRE', '24', 'OCOOPRELEASE', 0) await updateDocflow(division, application, 'APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT') } await voidPopsOp(application) await postTransaction(application) } setPrintedApplication(application) setPrinted(true) if (division === 'electrical') { createPdfElectrical() } else if (division === 'occupancy') { createPdfOccupancy() } else console.log('building') } const updateOp = async (division: string) => { const post = await postApi(`update-opprinted-${division}`, { data: parseInt(applicationId().toString(), 10), }) return post } const setNewStatus = async (division: string, status: string, tag: string, tagword: string, approved: number) => { const today = new Date() const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') const statusid = parseInt(applicationId().toString(), 10) const post = await postApi(`post-newstatus-${division}`, { data: statusid, data2: formattedDate, data3: status, data4: tag, data5: tagword, data6: parseInt(approved.toString(), 10), data7: parseInt(employeeId().toString(), 10), }) return post } const updateDocflow = async (division: string, application: string, status: string) => { await postApi(`update-docflow-${division}`, { data: status, data2: application, }) } const getSignatureImage = async (id: number) => { try { const response = await getApi('get-signatureimage', id) const image = response _signatureAssessor.set(image) const response2 = await getApi('get-signatureimage', 276) const image2 = response2 _signatureApprover.set(image2) return true } catch { return false } } const geteSignId = async (id: number) => { try { const response = await getApi('get-esignid', id) const result = response return result } catch { return 0 } } const postTransaction = async (application: string) => { const id = await geteSignId(employeeId()) const today = new Date() const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') await postApi('post-esigntransaction', { data: parseInt(id, 10), data2: application, data3: formatedDate, }) } const getApprovedDate = async (id: number, application: string) => { const response = await getApi('get-signeddate', id, application) _approvedDate.set(response) } const getAssessedDate = async (division: string, id: number) => { const response = await getApi(`get-signeddateassessed-${division}`, id) _assessedDate.set(response) } // const getEmployeeId = async (name: string) => { // try { // const response = await ofetch(API + 'get-employeeid/' + name, { parseResponse: JSON.parse }) // const result = response.result // return parseInt(result) // } catch (error) { // return 0 // } // } const refresh = async () => { if (isBuilding()) await getListForPrinting('building') if (isOccupancy()) await getListForPrinting('occupancy') if (isElectrical()) await getListForPrinting('electrical') } const logout = () => { removeEmployee() navigate('/') } // const gotoProfile = () => { // sessionStorage.setItem('name', employeeName()) // navigate('/profile') // } const voidPopsOp = async (application: string) => { const response = await voidPopsApi(application) if (response.includes('Error')) return false return true } const statusPopsOp = async (application: string) => { const response = await statusPopsApi(application) return response } const saveConfig = async () => { if (configNewName() !== '') await saveNewName(parseInt(employeeId()), configNewName()) if (configNewPassword() !== '') await saveNewPassword(parseInt(employeeId()), configNewEncPassword()) setConfigNotification(true) } onMount(async () => { const logged = await checkLogged() if (logged) { setSelectedType('Print') await checkDivision() if (isBuilding()) await getListForPrinting('building') if (isOccupancy()) await getListForPrinting('occupancy') if (isElectrical()) await getListForPrinting('electrical') } }) createEffect(async () => { if (filter() !== '') { if (isBuilding()) await getListForPrinting('building') if (isOccupancy()) await getListForPrinting('occupancy') if (isElectrical()) await getListForPrinting('electrical') } else if (filter() === '') { if (isBuilding()) await getListForPrinting('building') if (isOccupancy()) await getListForPrinting('occupancy') if (isElectrical()) await getListForPrinting('electrical') } }) return ( <>

OCBO e-Sign

{employeeName()} setOpenConfig(true)}> Config Logout
Building Occupancy Electrical

List of Ready to Approve and Sign Building Order of Payments

{/* */} {applicationListBuilding().map((item: string, index: number) => ( ))}
Application Number Name Show Details
{item} {nameListBuilding()[index]} { await getopdetails('building', item) }} > {item} Click anywhere to cancel

List of Ready to Print in Occupancy Order of Payments

{/* */} {applicationListOccupancy().map((item: string, index: number) => ( ))}
Application Number Name Show Details
{item} {nameListOccupancy()[index]} { await getopdetails('occupancy', item) }} > {item} Click anywhere to cancel

List of Ready to Print in Electrical Order of Payments

{/* */} {applicationListElectrical().map((item: string, index: number) => ( ))}
Application Number Name Show Details
{item} {nameListElectrical()[index]} { await getopdetails('electrical', item) }} > {item} Click anywhere to cancel
Printed

{printedApplication()}

Click anywhere to proceed
setConnected(true)}>

Connection Error

{errorMessage()}

Click anywhere to close
setVoidError(false)}>

Invalid Application Void

{errorMessage()}

Click anywhere to close
Name: {employeeName()}
Encrypted Password: {configEncPassword()}
Change Displayed Name Leave blank to remain unchanged.
Change Password New Encrypted Password: {configNewEncPassword()}
{configError()}
) }