Compare commits
No commits in common. "b11fcdb236cdbaa2a555b3c8cde51eb4b66c66d0" and "38acaf262aaa48adf488003d82eca5c14ce32ef2" have entirely different histories.
b11fcdb236
...
38acaf262a
10 changed files with 30 additions and 157 deletions
|
|
@ -12,16 +12,16 @@ import (
|
||||||
// "errors"
|
// "errors"
|
||||||
// "os"
|
// "os"
|
||||||
|
|
||||||
"github.com/gin-contrib/cors"
|
// "github.com/gin-contrib/cors"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DEV
|
// DEV
|
||||||
var connection string = "root:superuser@tcp(localhost:3306)/iips"
|
// var connection string = "root:superuser@tcp(localhost:3306)/iips"
|
||||||
|
|
||||||
// SERVER
|
// SERVER
|
||||||
// var connection string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips"
|
var connection string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
connect()
|
connect()
|
||||||
|
|
@ -37,23 +37,24 @@ func connect() {
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
router := gin.Default()
|
router := gin.Default()
|
||||||
router.Use(cors.Default())
|
// router.Use(cors.Default())
|
||||||
|
|
||||||
//DEV
|
//DEV
|
||||||
router.Use(cors.New(cors.Config{
|
// router.Use(cors.New(cors.Config{
|
||||||
AllowOrigins: []string{"http://localhost:5173"},
|
// AllowOrigins: []string{"http://localhost:5173"},
|
||||||
AllowMethods: []string{"GET", "POST"},
|
// // AllowAllOrigins: true,
|
||||||
AllowHeaders: []string{"Origin", "OCBO-ShieldConnection"},
|
// AllowMethods: []string{"GET", "POST"},
|
||||||
ExposeHeaders: []string{"Content-Length"},
|
// AllowHeaders: []string{"Origin", "OCBO-ShieldConnection"},
|
||||||
AllowCredentials: true,
|
// ExposeHeaders: []string{"Content-Length"},
|
||||||
}))
|
// AllowCredentials: true,
|
||||||
|
// }))
|
||||||
|
|
||||||
//SERVER
|
//SERVER
|
||||||
// router.Use(cors.New(cors.Config{
|
// router.Use(cors.New(cors.Config{
|
||||||
// // AllowOrigins: []string{"http://192.168.7.160:8080/esign"},
|
// // AllowOrigins: []string{"http://192.168.7.160:8080/esign"},
|
||||||
// AllowAllOrigins: true,
|
// AllowAllOrigins: true,
|
||||||
// AllowMethods: []string{"GET", "POST", "OPTIONS"},
|
// AllowMethods: []string{"GET", "POST"},
|
||||||
// AllowHeaders: []string{"Origin"},
|
// AllowHeaders: []string{"Origin", "OCBO-ShieldConnection"},
|
||||||
// ExposeHeaders: []string{"Content-Length"},
|
// ExposeHeaders: []string{"Content-Length"},
|
||||||
// AllowCredentials: true,
|
// AllowCredentials: true,
|
||||||
// }))
|
// }))
|
||||||
|
|
@ -100,7 +101,7 @@ func connect() {
|
||||||
array2 := []string{}
|
array2 := []string{}
|
||||||
|
|
||||||
results, err := db.Query(`SELECT IFNULL(e.electricalno, '') AS result, IF(c.firstName IS NULL OR c.firstName = '', c.lastName, CONCAT(c.firstName, ' ', IF(c.middleInitial IS NULL OR c.middleInitial = '', '', CONCAT(c.middleInitial, '. ')), c.lastName) ) AS result2
|
results, err := db.Query(`SELECT IFNULL(e.electricalno, '') AS result, IF(c.firstName IS NULL OR c.firstName = '', c.lastName, CONCAT(c.firstName, ' ', IF(c.middleInitial IS NULL OR c.middleInitial = '', '', CONCAT(c.middleInitial, '. ')), c.lastName) ) AS result2
|
||||||
FROM iips.electrical e JOIN iips.customer c ON e.customerid = c.customerid JOIN iips.ref_elec_occupancy ec ON e.ref_elec_occupancyid = ec.ref_elec_occupancyid JOIN iips.electricaldocflowtxn ed ON e.electricalid = ed.electricalid JOIN (SELECT electricalid, MAX(electricaldocflowtxnid) AS latest_electricaldocflowtxnid FROM electricaldocflowtxn GROUP BY electricalid) latest_doc ON ed.electricalid = latest_doc.electricalid AND ed.electricaldocflowtxnid = latest_doc.latest_electricaldocflowtxnid WHERE remarks = ? AND is_approve = 0 ORDER BY ed.txndate DESC`, "FOR ELECTRICAL ORDER OF PAYMENT APPROVAL")
|
FROM iips.electrical e JOIN iips.customer c ON e.customerid = c.customerid JOIN iips.ref_elec_occupancy ec ON e.ref_elec_occupancyid = ec.ref_elec_occupancyid JOIN iips.electricaldocflowtxn ed ON e.electricalid = ed.electricalid JOIN (SELECT electricalid, MAX(electricaldocflowtxnid) AS latest_electricaldocflowtxnid FROM electricaldocflowtxn GROUP BY electricalid) latest_doc ON ed.electricalid = latest_doc.electricalid AND ed.electricaldocflowtxnid = latest_doc.latest_electricaldocflowtxnid WHERE remarks = ? AND is_approve = 0 ORDER BY e.electricalno ASC`, "FOR ELECTRICAL ORDER OF PAYMENT APPROVAL")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.AbortWithError(http.StatusBadRequest, err)
|
c.AbortWithError(http.StatusBadRequest, err)
|
||||||
c.String(http.StatusBadRequest, err.Error())
|
c.String(http.StatusBadRequest, err.Error())
|
||||||
|
|
@ -725,17 +726,6 @@ func connect() {
|
||||||
"result": result,
|
"result": result,
|
||||||
})
|
})
|
||||||
|
|
||||||
case "get-esignid":
|
|
||||||
err := db.QueryRow("SELECT IFNULL(esignid, 0) AS result FROM esign WHERE employeeid = ?", data).Scan(&result)
|
|
||||||
if err != nil {
|
|
||||||
c.AbortWithError(http.StatusBadRequest, err)
|
|
||||||
c.String(http.StatusBadRequest, err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
|
||||||
"result": result,
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -763,17 +753,6 @@ func connect() {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"result": result,
|
"result": result,
|
||||||
})
|
})
|
||||||
|
|
||||||
case "get-signeddate":
|
|
||||||
err := db.QueryRow("SELECT IFNULL(date_signed, '') AS result FROM esign_transactions WHERE esignid = ? AND referenceNo = ?", data, data2).Scan(&result)
|
|
||||||
if err != nil {
|
|
||||||
c.AbortWithError(http.StatusBadRequest, err)
|
|
||||||
c.String(http.StatusBadRequest, err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
|
||||||
"result": result,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -948,47 +927,5 @@ func connect() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.POST("/api/post-esigntransaction", func(c *gin.Context) {
|
|
||||||
type UpdateOpData struct {
|
|
||||||
Data int `json:"data"`
|
|
||||||
Data2 string `json:"data2"`
|
|
||||||
Data3 string `json:"data3"`
|
|
||||||
}
|
|
||||||
var updateOpData UpdateOpData
|
|
||||||
if err := c.ShouldBindJSON(&updateOpData); err != nil {
|
|
||||||
c.String(http.StatusBadRequest, "Invalid request body")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.Writer.Header().Set("X-XSS-Protection", "1; mode=block")
|
|
||||||
c.Writer.Header().Set("X-Content-Type-Options", "nosniff")
|
|
||||||
c.Writer.Header().Set("X-DNS-Prefetch-Control", "off")
|
|
||||||
c.Writer.Header().Set("X-Frame-Options", "DENY")
|
|
||||||
c.Writer.Header().Set("X-Download-Options", "noopen")
|
|
||||||
c.Writer.Header().Set("Referrer-Policy", "no-referrer")
|
|
||||||
|
|
||||||
dbpost, err := db.Prepare("INSERT INTO esign_transactions (esign_transactionsid, esignid, referenceNo, date_signed) VALUES (NULL, ?, ?, ?)")
|
|
||||||
if err != nil {
|
|
||||||
panic(err.Error())
|
|
||||||
}
|
|
||||||
defer dbpost.Close()
|
|
||||||
|
|
||||||
exec, err := dbpost.Exec(updateOpData.Data, updateOpData.Data2, updateOpData.Data3)
|
|
||||||
if err != nil {
|
|
||||||
panic(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
affect, err := exec.RowsAffected()
|
|
||||||
if err != nil {
|
|
||||||
panic(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
if affect > 0 {
|
|
||||||
c.String(http.StatusOK, "Success on Saving eSign transaction")
|
|
||||||
} else {
|
|
||||||
c.String(http.StatusInternalServerError, "Failed on Saving eSign transaction")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
router.Run(":4320")
|
router.Run(":4320")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 371 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 87 KiB |
|
|
@ -7,7 +7,6 @@ interface Props {
|
||||||
value: string
|
value: string
|
||||||
onChange: Setter<string>
|
onChange: Setter<string>
|
||||||
onKeyDown?: (event: KeyboardEvent) => void
|
onKeyDown?: (event: KeyboardEvent) => void
|
||||||
isPassword?: boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default (props: Props) => {
|
export default (props: Props) => {
|
||||||
|
|
@ -17,7 +16,7 @@ export default (props: Props) => {
|
||||||
<Show when={props.label}>
|
<Show when={props.label}>
|
||||||
<TextField.Label class="text-field__label">{props.label}</TextField.Label>
|
<TextField.Label class="text-field__label">{props.label}</TextField.Label>
|
||||||
</Show>
|
</Show>
|
||||||
<TextField.Input class="text-field__input" type={props.isPassword ? 'password' : 'text'} />
|
<TextField.Input class="text-field__input" />
|
||||||
</TextField>
|
</TextField>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import { checkConnection, createPdf } from '../../utils/functions'
|
||||||
import { FaSolidThumbsUp } from 'solid-icons/fa'
|
import { FaSolidThumbsUp } from 'solid-icons/fa'
|
||||||
import { _employeeName, _employeeId } from '../../stores/employee'
|
import { _employeeName, _employeeId } 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 } from '../../stores/pdfinfo'
|
import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList, _signature, _assessorid } from '../../stores/pdfinfo'
|
||||||
|
|
||||||
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
|
||||||
|
|
@ -209,7 +209,6 @@ export default () => {
|
||||||
updateOrderofpayment = await updateOp()
|
updateOrderofpayment = await updateOp()
|
||||||
|
|
||||||
if (updateOrderofpayment) {
|
if (updateOrderofpayment) {
|
||||||
postTransaction(application)
|
|
||||||
setPrintedApplication(application)
|
setPrintedApplication(application)
|
||||||
setPrinted(true)
|
setPrinted(true)
|
||||||
createPdf()
|
createPdf()
|
||||||
|
|
@ -249,50 +248,13 @@ export default () => {
|
||||||
try {
|
try {
|
||||||
const response = await ofetch(API + 'get-signatureimage/' + id, { parseResponse: JSON.parse })
|
const response = await ofetch(API + 'get-signatureimage/' + id, { parseResponse: JSON.parse })
|
||||||
const image = response.result
|
const image = response.result
|
||||||
_signatureAssessor.set(image)
|
_signature.set(image)
|
||||||
|
|
||||||
const response2 = await ofetch(API + 'get-signatureimage/' + 276, { parseResponse: JSON.parse })
|
|
||||||
const image2 = response2.result
|
|
||||||
_signatureApprover.set(image2)
|
|
||||||
return true
|
return true
|
||||||
} catch {
|
} catch {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const geteSignId = async () => {
|
|
||||||
try {
|
|
||||||
const response = await ofetch(API + 'get-esignid/' + employeeId(), { parseResponse: JSON.parse })
|
|
||||||
const result = response.result
|
|
||||||
return result
|
|
||||||
} catch {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const postTransaction = async (application: string) => {
|
|
||||||
const id = await geteSignId()
|
|
||||||
const today = new Date()
|
|
||||||
const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss')
|
|
||||||
|
|
||||||
await ofetch(API + 'post-esigntransaction', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { data: parseInt(id), data2: application, data3: formatedDate },
|
|
||||||
})
|
|
||||||
|
|
||||||
getApprovedDate(id, application)
|
|
||||||
}
|
|
||||||
|
|
||||||
const getApprovedDate = async (id: number, application: string) => {
|
|
||||||
try {
|
|
||||||
const response = await ofetch(API + `get-signeddate/${id}/${application}`, { parseResponse: JSON.parse })
|
|
||||||
const result = response.result
|
|
||||||
_approvedDate.set(result)
|
|
||||||
} catch (error) {
|
|
||||||
_approvedDate.set('')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const logout = async () => {
|
const logout = async () => {
|
||||||
removeEmployee()
|
removeEmployee()
|
||||||
navigate('/')
|
navigate('/')
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,6 @@ export default () => {
|
||||||
</Show>
|
</Show>
|
||||||
<h4>Password</h4>
|
<h4>Password</h4>
|
||||||
<Input
|
<Input
|
||||||
isPassword
|
|
||||||
value={password()}
|
value={password()}
|
||||||
onChange={setPassword}
|
onChange={setPassword}
|
||||||
onKeyDown={(event: KeyboardEvent) => {
|
onKeyDown={(event: KeyboardEvent) => {
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,6 @@ export default () => {
|
||||||
if (updateOrderofpayment) {
|
if (updateOrderofpayment) {
|
||||||
setApprovedApplication(application)
|
setApprovedApplication(application)
|
||||||
setApproved(true)
|
setApproved(true)
|
||||||
postTransaction()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -192,26 +191,6 @@ export default () => {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
const geteSignId = async () => {
|
|
||||||
try {
|
|
||||||
const response = await ofetch(API + 'get-esignid/' + ID, { parseResponse: JSON.parse })
|
|
||||||
const result = response.result
|
|
||||||
return result
|
|
||||||
} catch {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const postTransaction = async () => {
|
|
||||||
const id = await geteSignId()
|
|
||||||
const today = new Date()
|
|
||||||
const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss')
|
|
||||||
await ofetch(API + 'post-esigntransaction', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { data: parseInt(id), data2: approvedApplication(), data3: formatedDate },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const logout = async () => {
|
const logout = async () => {
|
||||||
removeEmployee()
|
removeEmployee()
|
||||||
navigate('/')
|
navigate('/')
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ export default () => {
|
||||||
|
|
||||||
<Show when={allow() === 2}>
|
<Show when={allow() === 2}>
|
||||||
<h4>Password</h4>
|
<h4>Password</h4>
|
||||||
<Input isPassword value={password()} onChange={setPassword}></Input>
|
<Input value={password()} onChange={setPassword}></Input>
|
||||||
<h4>Upload Signature</h4>
|
<h4>Upload Signature</h4>
|
||||||
<FileField class="filefield" maxFiles={1} onFileAccept={(data) => setFile(data)} accept=".jpg, .jpeg, .png, .webp, .avif">
|
<FileField class="filefield" maxFiles={1} onFileAccept={(data) => setFile(data)} accept=".jpg, .jpeg, .png, .webp, .avif">
|
||||||
<FileField.Dropzone class="filefield__dropzone">Drag and drop or click to upload file</FileField.Dropzone>
|
<FileField.Dropzone class="filefield__dropzone">Drag and drop or click to upload file</FileField.Dropzone>
|
||||||
|
|
@ -242,7 +242,7 @@ export default () => {
|
||||||
<span class="approver-name">{APPROVERNAME}</span>
|
<span class="approver-name">{APPROVERNAME}</span>
|
||||||
|
|
||||||
<h4>Password</h4>
|
<h4>Password</h4>
|
||||||
<Input isPassword value={password()} onChange={setPassword}></Input>
|
<Input value={password()} onChange={setPassword}></Input>
|
||||||
|
|
||||||
<Show when={allow() === 2}>
|
<Show when={allow() === 2}>
|
||||||
<h4>Upload Signature</h4>
|
<h4>Upload Signature</h4>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,4 @@ export const _feeList = atom<string[]>([])
|
||||||
export const _codeList = atom<string[]>([])
|
export const _codeList = atom<string[]>([])
|
||||||
export const _amountList = atom<string[]>([])
|
export const _amountList = atom<string[]>([])
|
||||||
|
|
||||||
export const _signatureAssessor = atom('')
|
export const _signature = atom('')
|
||||||
export const _signatureApprover = atom('')
|
|
||||||
|
|
||||||
export const _approvedDate = atom('')
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import jsPDF from 'jspdf'
|
import jsPDF from 'jspdf'
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import jspdfBarcode from 'jspdf-barcode'
|
import jspdfBarcode from 'jspdf-barcode'
|
||||||
import { _optn, _applicationNo, _date, _name, _type, _location, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate } from '../../stores/pdfinfo'
|
import { _optn, _applicationNo, _date, _name, _type, _location, _assessor, _feeList, _codeList, _amountList, _signature, _assessorid } from '../../stores/pdfinfo'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import QRCode from 'qrcode'
|
import QRCode from 'qrcode'
|
||||||
|
|
@ -22,7 +22,7 @@ export default async () => {
|
||||||
const CODES = _codeList.get()
|
const CODES = _codeList.get()
|
||||||
const AMOUNTS = _amountList.get()
|
const AMOUNTS = _amountList.get()
|
||||||
const ASSESSORID = _assessorid.get()
|
const ASSESSORID = _assessorid.get()
|
||||||
const APPROVERID = 276
|
const APPROVERID = 176
|
||||||
|
|
||||||
const doc = new jsPDF({
|
const doc = new jsPDF({
|
||||||
orientation: 'l',
|
orientation: 'l',
|
||||||
|
|
@ -48,17 +48,17 @@ export default async () => {
|
||||||
const pageWidth = doc.internal.pageSize.getWidth()
|
const pageWidth = doc.internal.pageSize.getWidth()
|
||||||
|
|
||||||
const lungsod = new Image()
|
const lungsod = new Image()
|
||||||
lungsod.src = 'lungsod.png'
|
lungsod.src = 'src/assets/images/lungsod.png'
|
||||||
|
|
||||||
const ocbo = new Image()
|
const ocbo = new Image()
|
||||||
ocbo.src = 'ocbologo.png'
|
ocbo.src = 'src/assets/images/ocbologo.png'
|
||||||
|
|
||||||
jspdfBarcode(doc, APPLICATION, {
|
jspdfBarcode(doc, APPLICATION, {
|
||||||
fontSize: 32,
|
fontSize: 32,
|
||||||
textColor: '#000000',
|
textColor: '#000000',
|
||||||
x: pageWidth - 35,
|
x: pageWidth - 35,
|
||||||
y: 40,
|
y: 40,
|
||||||
textOptions: { align: 'center' },
|
textOptions: { align: 'center' }, // optional text options
|
||||||
})
|
})
|
||||||
|
|
||||||
const generateQR = async (text: string) => {
|
const generateQR = async (text: string) => {
|
||||||
|
|
@ -229,17 +229,17 @@ export default async () => {
|
||||||
const note = doc.splitTextToSize('Note: The 72 Hours Transaction Policy of the City Mayor, shall commence upon submission of the Bureau of Fire Protection clearance/certificate and other requirement stated in the notice to comply to be issued by this office.', 185)
|
const note = doc.splitTextToSize('Note: The 72 Hours Transaction Policy of the City Mayor, shall commence upon submission of the Bureau of Fire Protection clearance/certificate and other requirement stated in the notice to comply to be issued by this office.', 185)
|
||||||
doc.text(note, 16, 144)
|
doc.text(note, 16, 144)
|
||||||
|
|
||||||
doc.addImage(_signatureAssessor.get(), 'PNG', 30, 110, 10, 5.9, 'signatureAssessor', 'NONE', 0)
|
doc.addImage(_signature.get(), 'PNG', 30, 110, 10, 5.9, 'signature', 'NONE', 0)
|
||||||
doc.setFont('arial', 'normal')
|
doc.setFont('arial', 'normal')
|
||||||
doc.setFontSize(4)
|
doc.setFontSize(4)
|
||||||
doc.text('Digitally signed by :', 30, 118)
|
doc.text('Digitally signed by :', 30, 118)
|
||||||
doc.text(ASSESSOR, 30, 120)
|
doc.text(ASSESSOR, 30, 120)
|
||||||
doc.text('Date: ' + dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), 30, 122)
|
doc.text('Date: ' + dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), 30, 122)
|
||||||
|
|
||||||
doc.addImage(_signatureApprover.get(), 'PNG', 156, 110, 41.4, 5.9, 'signatureApprover', 'NONE', 0)
|
doc.addImage(_signature.get(), 'PNG', 156, 110, 10, 5.9, 'signature', 'NONE', 0)
|
||||||
doc.text('Digitally signed by :', 156, 118)
|
doc.text('Digitally signed by :', 156, 118)
|
||||||
doc.text(APPROVER, 156, 120)
|
doc.text(APPROVER, 156, 120)
|
||||||
doc.text('Date: ' + dayjs(_approvedDate.get()).format('YYYY-MM-DD HH:mm:ss'), 156, 122)
|
doc.text('Date: ' + dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), 156, 122)
|
||||||
|
|
||||||
doc.addImage(assessorQr, 'PNG', 16, 110, 14, 14, 'assessorQr', 'NONE', 0)
|
doc.addImage(assessorQr, 'PNG', 16, 110, 14, 14, 'assessorQr', 'NONE', 0)
|
||||||
doc.addImage(approverQr, 'PNG', 142, 110, 14, 14, 'approverQr', 'NONE', 0)
|
doc.addImage(approverQr, 'PNG', 142, 110, 14, 14, 'approverQr', 'NONE', 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue