{"id":206,"date":"2026-03-31T11:36:36","date_gmt":"2026-03-31T11:36:36","guid":{"rendered":"https:\/\/ph-portal.zyneventures.com\/?page_id=206"},"modified":"2026-03-31T11:36:36","modified_gmt":"2026-03-31T11:36:36","slug":"error-log","status":"publish","type":"page","link":"https:\/\/ph-portal.zyneventures.com\/index.php\/error-log\/","title":{"rendered":"Error Log"},"content":{"rendered":"<style>.kadence-column206_a426cd-82 > .kt-inside-inner-col,.kadence-column206_a426cd-82 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column206_a426cd-82 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column206_a426cd-82 > .kt-inside-inner-col{flex-direction:column;}.kadence-column206_a426cd-82 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column206_a426cd-82 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column206_a426cd-82{position:relative;}@media all and (max-width: 1024px){.kadence-column206_a426cd-82 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column206_a426cd-82 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column206_a426cd-82\"><div class=\"kt-inside-inner-col\"><style>.kb-row-layout-id206_dd9e37-f3 > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id206_dd9e37-f3 > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id206_dd9e37-f3 > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id206_dd9e37-f3 > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id206_dd9e37-f3 > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id206_dd9e37-f3 > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id206_dd9e37-f3 alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column206_04d33b-de > .kt-inside-inner-col,.kadence-column206_04d33b-de > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column206_04d33b-de > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column206_04d33b-de > .kt-inside-inner-col{flex-direction:column;}.kadence-column206_04d33b-de > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column206_04d33b-de > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column206_04d33b-de{position:relative;}@media all and (max-width: 1024px){.kadence-column206_04d33b-de > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column206_04d33b-de > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column206_04d33b-de\"><div class=\"kt-inside-inner-col\">\n<style>\n         :root {\n            --primary-blue: #0180FF;          \n            --hover-blue: #3499FF;\n            --text-dark: #212529;\n            --text-muted: #8D8C9C;\n            --border-color: #EFEFEF;\n            --success-green: #1E8E3E;\n            --error-red: #D93025;\n        }\n \n        body {\n            margin: 0;\n            font-family: 'Sora', sans-serif;\n            color: var(--text-dark);\n            line-height: 1.5;\n        }\n\n        @media (max-width: 768px) {\n            body {\n                padding-left: 15px;\n            }\n        }\n \n        \/* Header & Counters *\/\n        .header-container {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 25px;\n        }\n        .title-group { display: flex; align-items: center; gap: 10px; }\n        .title-group h2 {\n            margin: 0;\n            font-size: 21px;\n            font-weight: 500;\n            text-transform: uppercase;\n        }\n        .count { color: var(--text-muted); font-size: 16px; }\n \n        \/* Filter Grid *\/\n        .filter-section {\n            display: flex;\n            flex-direction: column;\n            gap: 20px;\n            margin-bottom: 25px;\n        }\n        .filter-row {\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n            gap: 20px;\n            width: 100%;\n        }\n        @media (max-width: 1024px) {\n            .filter-row {\n                grid-template-columns: repeat(2, 1fr);\n            }\n        }\n        @media (max-width: 600px) {\n            .filter-row {\n                grid-template-columns: 1fr;\n            }\n        }\n        .filter-group {\n            font-size: 14px;\n            color: #212529;\n        }\n        .filter-group label {\n            display: block;\n            margin-bottom: 5px;\n            font-weight: 400;\n        }\n        .filter-group input, .filter-group select {\n            width: 100%;\n            padding: 10px;\n            border: 1px solid #E0E0E0;\n            border-radius: 6px;\n            font-family: 'Sora';\n            font-size: 12px;\n            color: #8D8C9C;\n            font-weight: 400;\n            box-sizing: border-box;\n        }\n       \n        .filter-actions {\n            display: flex;\n            justify-content: flex-start;\n            gap: 10px;\n            margin-top: 10px;\n        }\n        .btn {\n            padding: 8px 25px;\n            border-radius: 6px;\n            font-size: 12px;\n            font-weight: 400;\n            cursor: pointer;\n            border: none;\n            transition: 0.2s;\n        }\n        .btn-clear { background: #D9DDEF; color: var(--text-dark); }\n        .btn-download { background: var(--primary-blue); color: white; }\n        .btn-filter { background: var(--primary-blue); color: white; }\n \n        \/* Table Styling *\/\n        .table-wrapper {\n            margin-top: 30px;\n            overflow-x: auto;\n            border: 1px solid var(--border-color);\n            border-radius: 6px;\n        }\n        table { \n            width: 100%; \n            border-collapse: collapse; \n            font-size: 12px; \n            text-align: left; \n            min-width: 1200px; \n        }\n        th {\n            background: #f5f5f5;\n            color: #212529;\n            font-weight: 500;\n            padding: 12px 10px;\n            border-bottom: 1px solid var(--border-color);\n            text-transform: uppercase;\n        }\n        td { \n            padding: 12px 10px; \n            border-bottom: 1px solid var(--border-color); \n            font-size: 12px;\n            font-weight: 400;\n            color: var(--text-muted); }\n       \n        .btn-reverse {\n            background: var(--primary-blue);\n            color: white;\n            border: none;\n            padding: 6px 12px;\n            border-radius: 4px;\n            cursor: pointer;\n            font-size: 12px;\n            white-space: nowrap;\n        }\n        .reverse-applied-text {\n            color: var(--text-muted);\n            font-size: 12px;\n            font-weight: 400;\n        }\n \n        \/* Modal \/ Popup Styling - Optimized for Scroll *\/\n        .modal-overlay {\n            display: none;\n            position: fixed;\n            top: 0; left: 0; width: 100%; height: 100%;\n            background: rgba(0,0,0,0.5);\n            z-index: 1000;\n            justify-content: center;\n            align-items: flex-start;\n            padding: 40px 20px;\n            overflow-y: auto;\n            box-sizing: border-box;\n        }\n        .modal-content {\n            background: white;\n            width: 100%;\n            max-width: 450px;\n            padding: 30px;\n            border-radius: 12px;\n            position: relative;\n            margin: auto;\n            box-shadow: 0 10px 25px rgba(0,0,0,0.2);\n        }\n        .modal-content h3 { margin-top: 0; font-size: 21px; margin-bottom: 25px; }\n        .modal-form-group { margin-bottom: 15px; }\n        .modal-form-group label { display: block; font-size: 12px; font-weight: 500; margin-bottom: 5px; }\n        .modal-form-group input {\n            width: 100%; \n            padding: 10px; \n            border: 1px solid #ddd; \n            border-radius: 6px;\n            background: #F1F3F4; \n            box-sizing: border-box; \n            font-family: 'Sora';\n        }\n        .modal-form-group input.editable { background: white; border: 1px solid var(--primary-blue); }\n        .modal-footer { display: flex; justify-content: flex-end; gap: 10px; margin-top: 25px; }\n \n        \/* Pagination Footer *\/\n        .pagination-footer {\n            margin-top: 30px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            color: var(--text-muted);\n            font-size: 12px;\n            flex-wrap: wrap;\n            gap: 15px;\n        }\n        .pagination-controls { display: flex; align-items: center; gap: 8px; }\n        .page-num {\n            cursor: pointer; \n            width: 32px; \n            height: 32px;\n            display: flex; \n            align-items: center; \n            justify-content: center;\n            border-radius: 50%; \n            font-weight: 500; \n            transition: 0.2s;\n        }\n        .page-num:hover { background: #f0f0f0; }\n        .page-num.active { background: var(--primary-blue); color: white; }\n        .dots { padding: 0 5px; }\n        .nav-btn { cursor: pointer; color: var(--text-dark); font-weight: 500; padding: 5px 10px; }\n        .nav-btn.disabled { color: #ccc; pointer-events: none; }\n \n        @media (max-width: 768px) {\n            .pagination-footer {\n                flex-direction: column;\n                align-items: center;\n            }\n            #entryInfo {\n                order: -1;\n                width: 100%;\n                text-align: center;\n            }\n        }\n\n        \/* Custom Date Picker *\/\n        .date-wrapper {\n            position: relative;\n        }\n        .date-wrapper input[type=\"text\"] {\n            width: 100%;\n            padding: 10px 36px 10px 10px;\n            border: 1px solid #E0E0E0;\n            border-radius: 6px;\n            font-family: 'Sora', sans-serif;\n            font-size: 12px;\n            color: var(--text-dark);\n            outline: none;\n            cursor: pointer;\n            background: #fff;\n            transition: border-color 0.2s;\n            user-select: none;\n            height: 38px;\n            box-sizing: border-box;\n        }\n        .date-wrapper input[type=\"text\"]:focus { border-color: var(--primary-blue); }\n        .date-wrapper input[type=\"text\"]::placeholder { color: #8D8C9C; }\n        .date-wrapper .cal-icon {\n            position: absolute;\n            right: 12px;\n            top: 50%;\n            transform: translateY(-50%);\n            pointer-events: none;\n            color: #8D8C9C;\n        }\n\n        \/* Custom Date Picker Dropdown *\/\n        .dp-dropdown {\n            display: none;\n            position: absolute;\n            top: calc(100% + 6px);\n            left: 0;\n            z-index: 2000;\n            background: #fff;\n            border: 1px solid #E0E0E0;\n            border-radius: 10px;\n            box-shadow: 0 8px 28px rgba(0,0,0,0.13);\n            flex-direction: row;\n            width: 680px;\n            max-width: calc(100vw - 24px);\n            overflow: hidden;\n        }\n        .dp-dropdown.open { display: flex; }\n        .dp-dropdown.align-right { left: auto; right: 0; }\n\n        .dp-backdrop {\n            display: none;\n            position: fixed;\n            inset: 0;\n            z-index: 1999;\n        }\n        .dp-backdrop.show { display: block; }\n\n        .dp-presets {\n            width: 100px;\n            background: #fff;\n            border-right: 1px solid #EFEFEF;\n            padding: 3px 0;\n            flex-shrink: 0;\n        }\n        .dp-preset-item {\n            padding: 8px 12px;\n            font-size: 12px;\n            color: var(--text-dark);\n            cursor: pointer;\n            transition: background 0.15s, color 0.15s;\n            white-space: nowrap;\n        }\n        .dp-preset-item:hover { background: #f4f6fb; }\n        .dp-preset-item.active {\n            background: var(--primary-blue);\n            color: #fff;\n            font-weight: 500;\n        }\n\n        .dp-calendars-wrap {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            padding: 8px 10px 8px;\n            min-width: 0;\n        }\n        .dp-months-row {\n            display: flex;\n            gap: 0;\n            flex: 1;\n        }\n        .dp-calendar {\n            flex: 1;\n            padding: 0 6px;\n            min-width: 0;\n        }\n        .dp-calendar + .dp-calendar {\n            border-left: 1px solid #EFEFEF;\n        }\n        .dp-cal-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 6px;\n        }\n        .dp-cal-title {\n            font-size: 13px;\n            font-weight: 500;\n            color: var(--text-dark);\n        }\n        .dp-nav-btn {\n            background: none;\n            border: none;\n            cursor: pointer;\n            color: #8D8C9C;\n            padding: 3px 7px;\n            border-radius: 4px;\n            font-size: 16px;\n            line-height: 1;\n            transition: background 0.15s, color 0.15s;\n        }\n        .dp-nav-btn:hover { background: #f0f4ff; color: var(--primary-blue); }\n        .dp-nav-btn.dp-nav-hidden { visibility: hidden; pointer-events: none; }\n        .dp-weekdays {\n            display: grid;\n            grid-template-columns: repeat(7, 1fr);\n            margin-bottom: 2px;\n        }\n        .dp-weekday {\n            text-align: center;\n            font-size: 11px;\n            font-weight: 500;\n            color: #8D8C9C;\n            padding: 2px 0;\n        }\n        .dp-days {\n            display: grid;\n            grid-template-columns: repeat(7, 1fr);\n            gap: 1px;\n        }\n        .dp-day {\n            text-align: center;\n            padding: 2px 0;\n            font-size: 11px;\n            border-radius: 50%;\n            cursor: pointer;\n            color: var(--text-dark);\n            transition: background 0.15s, color 0.15s;\n            aspect-ratio: 1;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n        .dp-day:hover { background: #e8f1ff; color: var(--primary-blue); }\n        .dp-day.today { font-weight: 700; color: var(--primary-blue); }\n        .dp-day.selected {\n            background: var(--primary-blue);\n            color: #fff !important;\n            font-weight: 600;\n        }\n        .dp-day.other-month { color: #ccc; }\n        .dp-day.other-month:hover { background: #f5f5f5; color: #aaa; }\n        .dp-footer {\n            display: flex;\n            justify-content: flex-end;\n            gap: 8px;\n            margin-top: 8px;\n            padding-top: 8px;\n            border-top: 1px solid #EFEFEF;\n        }\n        .dp-btn-clear {\n            padding: 6px 14px;\n            border-radius: 6px;\n            font-size: 12px;\n            font-family: 'Sora', sans-serif;\n            background: #F1F3F4;\n            color: #555;\n            border: none;\n            cursor: pointer;\n            font-weight: 400;\n        }\n        .dp-btn-clear:hover { background: #e2e4e7; }\n        .dp-btn-apply {\n            padding: 6px 14px;\n            border-radius: 6px;\n            font-size: 12px;\n            font-family: 'Sora', sans-serif;\n            background: var(--primary-blue);\n            color: #fff;\n            border: none;\n            cursor: pointer;\n            font-weight: 400;\n        }\n        .dp-btn-apply:hover { background: var(--hover-blue); }\n\n        @media (max-width: 750px) {\n            .dp-dropdown {\n                flex-direction: column;\n                min-width: 0;\n                width: calc(100vw - 32px);\n                left: 50%;\n                transform: translateX(-50%);\n                max-height: 85vh;\n                overflow-y: auto;\n            }\n            .dp-presets {\n                width: 100%;\n                border-right: none;\n                border-bottom: 1px solid #EFEFEF;\n                padding: 4px 0;\n                display: flex;\n                flex-wrap: wrap;\n            }\n            .dp-preset-item {\n                padding: 6px 10px;\n                font-size: 11px;\n                flex: 1 1 auto;\n                text-align: center;\n                min-width: 80px;\n            }\n            .dp-months-row { flex-direction: column; gap: 10px; }\n            .dp-calendar + .dp-calendar { border-left: none; border-top: 1px solid #EFEFEF; padding-top: 8px; }\n            .dp-calendars-wrap { padding: 6px 8px 8px; }\n            .dp-cal-header { margin-bottom: 6px; }\n            .dp-day { padding: 5px 0; font-size: 11px; }\n            .dp-footer { margin-top: 8px; padding-top: 8px; }\n        }\n        @media (max-width: 480px) {\n            .dp-dropdown {\n                position: fixed;\n                top: 50%;\n                left: 50% !important;\n                transform: translate(-50%, -50%) !important;\n                width: calc(100vw - 24px);\n                max-width: 400px;\n                max-height: 92vh;\n                overflow-y: auto;\n                z-index: 3000;\n            }\n            .dp-calendars-wrap { padding: 6px 6px 6px; }\n            .dp-day { font-size: 11px; padding: 4px 0; }\n            .dp-cal-title { font-size: 12px; }\n            .dp-footer { margin-top: 6px; padding-top: 6px; }\n            .dp-btn-clear, .dp-btn-apply { padding: 5px 10px; font-size: 11px; }\n        }\n    <\/style>\n \n \n<div class=\"header-container\">\n    <div class=\"title-group\">\n        <h2>List View All Error<\/h2>\n        <span class=\"count\" id=\"totalCount\">(0)<\/span>\n    <\/div>\n<\/div>\n \n<div class=\"filter-section\">\n    <div class=\"filter-row\">\n        <div class=\"filter-group\">\n            <label>Assigned to<\/label>\n            <select id=\"filterAssigned\"><option value=\"\">Select User<\/option><\/select>\n        <\/div>\n        <div class=\"filter-group\">\n            <label>File Name<\/label>\n            <select id=\"filterFile\"><option value=\"\">Select File<\/option><\/select>\n        <\/div>\n        <div class=\"filter-group\">\n            <label>Account<\/label>\n            <select id=\"filterAccount\"><option value=\"\">Select Account<\/option><\/select>\n        <\/div>\n        <div class=\"filter-group\">\n            <label>Entity<\/label>\n            <select id=\"filterEntity\"><option value=\"\">Select Entity<\/option><\/select>\n        <\/div>\n    <\/div>\n    <div class=\"filter-row\">\n        <div class=\"filter-group\">\n            <label>Category<\/label>\n            <select id=\"filterCategory\"><option value=\"\">Select Category<\/option><\/select>\n        <\/div>\n        <div class=\"filter-group\">\n            <label>Date Qc Submitted<\/label>\n            <div class=\"date-wrapper\" id=\"dpWrapperDate\">\n                <input type=\"text\" id=\"filterDate\" placeholder=\"Select Date\" readonly onclick=\"toggleDatePicker(event,'errdate')\">\n                <svg class=\"cal-icon\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n                    <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"\/>\n                    <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/>\n                    <line x1=\"8\"  y1=\"2\" x2=\"8\"  y2=\"6\"\/>\n                    <line x1=\"3\"  y1=\"10\" x2=\"21\" y2=\"10\"\/>\n                <\/svg>\n                <div class=\"dp-backdrop\" id=\"dpBackdropErrdate\" onclick=\"closeDatePicker('errdate')\"><\/div>\n                <div class=\"dp-dropdown\" id=\"dpDropdownErrdate\">\n                    <div class=\"dp-presets\">\n                        <div class=\"dp-preset-item active\" data-preset=\"today\"     onclick=\"selectPreset(event,'today','errdate')\">Today<\/div>\n                        <div class=\"dp-preset-item\"       data-preset=\"yesterday\"  onclick=\"selectPreset(event,'yesterday','errdate')\">Yesterday<\/div>\n                        <div class=\"dp-preset-item\"       data-preset=\"last7\"      onclick=\"selectPreset(event,'last7','errdate')\">Last 7 Days<\/div>\n                        <div class=\"dp-preset-item\"       data-preset=\"last30\"     onclick=\"selectPreset(event,'last30','errdate')\">Last 30 Days<\/div>\n                        <div class=\"dp-preset-item\"       data-preset=\"thisMonth\"  onclick=\"selectPreset(event,'thisMonth','errdate')\">This Month<\/div>\n                        <div class=\"dp-preset-item\"       data-preset=\"lastMonth\"  onclick=\"selectPreset(event,'lastMonth','errdate')\">Last Month<\/div>\n                    <\/div>\n                    <div class=\"dp-calendars-wrap\">\n                        <div class=\"dp-months-row\">\n                            <div class=\"dp-calendar\">\n                                <div class=\"dp-cal-header\">\n                                    <button class=\"dp-nav-btn\" onclick=\"dpChangeMonth(event,-1,'errdate')\">&#8249;<\/button>\n                                    <span class=\"dp-cal-title\" id=\"dpCalTitleErrdate\"><\/span>\n                                    <button class=\"dp-nav-btn dp-nav-hidden\">&#8250;<\/button>\n                                <\/div>\n                                <div class=\"dp-weekdays\">\n                                    <div class=\"dp-weekday\">Su<\/div><div class=\"dp-weekday\">Mo<\/div>\n                                    <div class=\"dp-weekday\">Tu<\/div><div class=\"dp-weekday\">We<\/div>\n                                    <div class=\"dp-weekday\">Th<\/div><div class=\"dp-weekday\">Fr<\/div>\n                                    <div class=\"dp-weekday\">Sa<\/div>\n                                <\/div>\n                                <div class=\"dp-days\" id=\"dpDaysErrdate\"><\/div>\n                            <\/div>\n                            <div class=\"dp-calendar\">\n                                <div class=\"dp-cal-header\">\n                                    <button class=\"dp-nav-btn dp-nav-hidden\">&#8249;<\/button>\n                                    <span class=\"dp-cal-title\" id=\"dpCalTitleErrdate2\"><\/span>\n                                    <button class=\"dp-nav-btn\" onclick=\"dpChangeMonth(event,1,'errdate')\">&#8250;<\/button>\n                                <\/div>\n                                <div class=\"dp-weekdays\">\n                                    <div class=\"dp-weekday\">Su<\/div><div class=\"dp-weekday\">Mo<\/div>\n                                    <div class=\"dp-weekday\">Tu<\/div><div class=\"dp-weekday\">We<\/div>\n                                    <div class=\"dp-weekday\">Th<\/div><div class=\"dp-weekday\">Fr<\/div>\n                                    <div class=\"dp-weekday\">Sa<\/div>\n                                <\/div>\n                                <div class=\"dp-days\" id=\"dpDaysErrdate2\"><\/div>\n                            <\/div>\n                        <\/div>\n                        <div class=\"dp-footer\">\n                            <button class=\"dp-btn-clear\" onclick=\"dpClear(event,'errdate')\">Clear<\/button>\n                            <button class=\"dp-btn-apply\" onclick=\"dpApply(event,'errdate')\">Apply<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"filter-group\">\n            <label>Per Page<\/label>\n            <select id=\"filterPerPage\">\n                <option value=\"10\">10<\/option>\n                <option value=\"25\" selected>25<\/option>\n                <option value=\"50\">50<\/option>\n            <\/select>\n        <\/div>\n        <div class=\"filter-group\">\n            <label>Type<\/label>\n            <select id=\"filterType\">\n                <option value=\"\">Select Type<\/option>\n                <option value=\"Minor\">Minor<\/option>\n                <option value=\"Critical\">Critical<\/option>\n            <\/select>\n        <\/div>\n    <\/div>\n    <div class=\"filter-actions\">\n        <button class=\"btn btn-clear\" onclick=\"resetFilters()\">Clear<\/button>\n        <button class=\"btn btn-download\" onclick=\"downloadCSV()\">Download CSV<\/button>\n        <button class=\"btn btn-filter\" onclick=\"fetchErrors(1)\">Filter<\/button>\n    <\/div>\n<\/div><br>\n \n<div class=\"table-wrapper\">\n    <table id=\"errorTable\">\n        <thead>\n            <tr>\n                <th>Work Assignment Date<\/th>\n                <th>File Name<\/th>\n                <th>Assigned To<\/th>\n                <th>Account<\/th>\n                <th>Category<\/th>\n                <th>Error Type<\/th>\n                <th>Error Count<\/th>\n                <th>Reversal Count<\/th>\n                <th>Mistake<\/th>\n                <th>Patient Account<\/th>\n                <th>Entity<\/th>\n                <th>DOS \/ (PSD)<\/th>\n                <th>Description<\/th>\n                <th>QC By<\/th>\n                <th>QC Date<\/th>\n                <th>Action<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody id=\"tableBody\"><\/tbody>\n    <\/table>\n<\/div>\n \n<div class=\"pagination-footer\">\n    <div class=\"pagination-controls\">\n        <span id=\"prevBtn\" class=\"nav-btn\">\u00ab Previous<\/span>\n        <div id=\"pageNumbers\" style=\"display:flex; gap:5px; align-items:center;\"><\/div>\n        <span id=\"nextBtn\" class=\"nav-btn\">Next \u00bb<\/span>\n    <\/div>\n    <div id=\"entryInfo\">Showing 0 to 0 of 0 entries<\/div>\n<\/div>\n \n<div class=\"modal-overlay\" id=\"reverseModal\">\n    <div class=\"modal-content\">\n        <h3>Reverse Hit<\/h3>\n        <form id=\"reverseForm\">\n            <div class=\"modal-form-group\">\n                <label>File Name<\/label>\n                <input type=\"text\" id=\"popFile\" readonly>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label>Error Minor(Mi)<\/label>\n                <input type=\"text\" id=\"popMinor\" readonly>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label>Critical Minor (Cr)<\/label>\n                <input type=\"text\" id=\"popCritical\" readonly>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label>Zero Tolerance Error (Zt)<\/label>\n                <input type=\"text\" id=\"popZt\" readonly>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label style=\"color:red\">Reverse Error Minor(RMi)*<\/label>\n                <input type=\"number\" id=\"popReverseMinor\" class=\"editable\" placeholder=\"Enter Reverse Error Minor\" required>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label style=\"color:red\">Reverse Critical Minor (RCr)*<\/label>\n                <input type=\"number\" id=\"popReverseCritical\" class=\"editable\" placeholder=\"Enter Reverse Critical Minor\" required>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label style=\"color:red\">Reverse Zero Tolerance Minor (RZt)*<\/label>\n                <input type=\"number\" id=\"popReverseZt\" class=\"editable\" placeholder=\"Enter Reverse Zero Tolerance Minor\" required>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label style=\"color:red\">Remarks*<\/label>\n                <input type=\"text\" id=\"popRemarks\" class=\"editable\" placeholder=\"Enter Remarks\" required>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label>Assign To<\/label>\n                <input type=\"text\" id=\"popAssign\" readonly>\n            <\/div>\n            <div class=\"modal-form-group\">\n                <label>QC By<\/label>\n                <input type=\"text\" id=\"popQc\" readonly>\n            <\/div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-clear\" onclick=\"closeModal()\">Close<\/button>\n                <button type=\"submit\" class=\"btn btn-filter\" style=\"width: 120px;\">Save<\/button>\n            <\/div>\n        <\/form>\n    <\/div>\n<\/div>\n \n<script>\n    const BASE_URL = 'https:\/\/api-ph-portal.zyneventures.com\/api\/v1';\n    const ENDPOINTS = {\n        ERRORS: `${BASE_URL}\/work_assignment_error\/all`,\n        FILES: `${BASE_URL}\/file\/table\/list`,\n        ACCOUNTS: `${BASE_URL}\/accountandbenchmark\/tableList`,\n        ENTITIES: `${BASE_URL}\/entity\/all`,\n        CATEGORIES: `${BASE_URL}\/category\/table\/list`,\n        USERS: `${BASE_URL}\/user\/table\/list`,\n        REVERSE_ADD: `${BASE_URL}\/work_assignment_error_reverse\/add`\n    };\n \n    let currentPage = 1;\n    let totalPages = 1;\n    let currentItem = null;\n    let currentRowId = null;\n    let allTableData = [];\n    const reversedIds = new Set(JSON.parse(localStorage.getItem('reversedWorkIds') || '[]'));\n \n    const getHeaders = () => ({\n        'Content-Type': 'application\/json',\n        'Authorization': `Bearer ${localStorage.getItem(\"TOKEN\")}`\n    });\n\n    const extractListData = (payload) => {\n        if (Array.isArray(payload?.data)) return payload.data;\n        if (Array.isArray(payload?.data?.data)) return payload.data.data;\n        if (Array.isArray(payload?.data?.data?.data)) return payload.data.data.data;\n        return [];\n    };\n\n    const extractPaginationInfo = (payload, fallbackLimit) => {\n        const directPages = Number(\n            payload?.pagination?.pages ||\n            payload?.data?.pagination?.pages ||\n            payload?.last_page ||\n            payload?.data?.last_page ||\n            0\n        );\n\n        const limit = Number(\n            payload?.pagination?.limit ||\n            payload?.data?.pagination?.limit ||\n            payload?.per_page ||\n            payload?.data?.per_page ||\n            payload?.data?.perPage ||\n            fallbackLimit\n        );\n\n        if (Number.isFinite(directPages) && directPages > 0) {\n            return { pages: directPages, limit: Number.isFinite(limit) && limit > 0 ? limit : fallbackLimit };\n        }\n\n        const total = Number(\n            payload?.pagination?.total ||\n            payload?.data?.pagination?.total ||\n            payload?.total ||\n            payload?.data?.total ||\n            0\n        );\n\n        const safeLimit = Number.isFinite(limit) && limit > 0 ? limit : fallbackLimit;\n        const derivedPages = total > 0 ? Math.ceil(total \/ safeLimit) : 1;\n\n        return { pages: Math.max(1, derivedPages), limit: safeLimit };\n    };\n\n    async function fetchAllPages(endpoint) {\n        const defaultLimit = 500;\n        const buildUrl = (page, limit = defaultLimit) => {\n            const url = new URL(endpoint);\n            url.searchParams.set('page', String(page));\n            url.searchParams.set('limit', String(limit));\n            return url.toString();\n        };\n\n        const firstRes = await fetch(buildUrl(1, defaultLimit), { headers: getHeaders() });\n        const firstJson = await firstRes.json();\n\n        let allItems = extractListData(firstJson);\n        const { pages, limit } = extractPaginationInfo(firstJson, defaultLimit);\n\n        if (pages > 1) {\n            const pageRequests = [];\n            for (let page = 2; page <= pages; page++) {\n                pageRequests.push(\n                    fetch(buildUrl(page, limit), { headers: getHeaders() })\n                        .then(r => r.json())\n                        .catch(() => null)\n                );\n            }\n\n            const otherPages = await Promise.all(pageRequests);\n            otherPages.forEach(pageData => {\n                if (pageData) allItems = allItems.concat(extractListData(pageData));\n            });\n        }\n\n        return allItems;\n    }\n \n    async function loadDropdowns() {\n        try {\n            const [files, accounts, entities, categories, users] = await Promise.all([\n                fetchAllPages(ENDPOINTS.FILES),\n                fetch(ENDPOINTS.ACCOUNTS, { headers: getHeaders() }).then(r => r.json()),\n                fetchAllPages(ENDPOINTS.ENTITIES),\n                fetchAllPages(ENDPOINTS.CATEGORIES),\n                fetchAllPages(ENDPOINTS.USERS)\n            ]);\n \n            const fill = (id, data, key, valKey = 'id') => {\n                const el = document.getElementById(id);\n                if (!data) return;\n                data.forEach(item => {\n                    const opt = document.createElement('option');\n                    opt.value = item[valKey] || item[key];\n                    opt.textContent = item[key];\n                    el.appendChild(opt);\n                });\n            };\n \n            if(Array.isArray(users) && users.length) fill('filterAssigned', users, 'name', 'id');\n            if(Array.isArray(files) && files.length) fill('filterFile', files, 'file_name', 'file_name');\n            if(Array.isArray(accounts) && accounts.length) fill('filterAccount', accounts, 'name', 'id');\n            if(Array.isArray(entities) && entities.length) fill('filterEntity', entities, 'entity');\n            if(Array.isArray(categories) && categories.length) fill('filterCategory', categories, 'category');\n \n        } catch (err) { console.error(\"Dropdown Load Error\", err); }\n    }\n \n    async function fetchErrors(page = 1) {\n        currentPage = page;\n        const params = new URLSearchParams({\n            page: page,\n            perPage: document.getElementById('filterPerPage').value,\n            user_id: document.getElementById('filterAssigned').value,\n            file_name: document.getElementById('filterFile').value,\n            account_id: document.getElementById('filterAccount').value,\n            entity_id: document.getElementById('filterEntity').value,\n            category_id: document.getElementById('filterCategory').value,\n            type: document.getElementById('filterType').value\n        });\n \n        try {\n            const res = await fetch(`${ENDPOINTS.ERRORS}?${params}`, { headers: getHeaders() });\n            const result = await res.json();\n            if (result.code === 200) {\n                renderTable(result.data.data);\n                renderPagination(result.data);\n            }\n        } catch (err) { console.error(\"Fetch Error:\", err); }\n    }\n \n    function renderTable(data) {\n        const tbody = document.getElementById('tableBody');\n        tbody.innerHTML = '';\n        allTableData = data || [];\n        if (!data || data.length === 0) {\n            tbody.innerHTML = '<tr><td colspan=\"16\" style=\"text-align:center;\">No data found<\/td><\/tr>';\n            return;\n        }\n        data.forEach(item => {\n            const rowId = item.work_assignment_id || item.id;\n            const actionCell = reversedIds.has(String(rowId))\n                ? `<span class=\"reverse-applied-text\">Reverse Hit Applied<\/span>`\n                : `<button class=\"btn-reverse\" onclick='openModal(${JSON.stringify(item)})'>Reverse Hit<\/button>`;\n            const row = `<tr>\n                <td>${item.assigned_date || '-'}<\/td>\n                <td>${item.file_name || '-'}<\/td>\n                <td>${item.assigned_to_name || '-'}<\/td>\n                <td>${item.account_name || '-'}<\/td>\n                <td>${item.category_name || '-'}<\/td>\n                <td>${item.error_type || '-'}<\/td>\n                <td>${item.error_count || 0}<\/td>\n                <td>${item.reversal_count || 0}<\/td>\n                <td>${item.mistake || '-'}<\/td>\n                <td>${item.patient_account || '-'}<\/td>\n                <td>${item.entity_name || '-'}<\/td>\n                <td>${item.dos_date || '-'}<\/td>\n                <td>${item.description || '-'}<\/td>\n                <td>${item.qc_by_name || '-'}<\/td>\n                <td>${item.qc_date || '-'}<\/td>\n                <td data-row-id=\"${rowId}\">${actionCell}<\/td>\n            <\/tr>`;\n            tbody.insertAdjacentHTML('beforeend', row);\n        });\n    }\n \n    function renderPagination(meta) {\n        document.getElementById('totalCount').textContent = `(${meta.total})`;\n        const container = document.getElementById('pageNumbers');\n        container.innerHTML = '';\n       \n        totalPages = meta.pages || Math.ceil(meta.total \/ meta.perPage);\n       \n        document.getElementById('prevBtn').onclick = () => fetchErrors(currentPage - 1);\n        document.getElementById('prevBtn').className = currentPage === 1 ? 'nav-btn disabled' : 'nav-btn';\n        document.getElementById('nextBtn').onclick = () => fetchErrors(currentPage + 1);\n        document.getElementById('nextBtn').className = currentPage === totalPages ? 'nav-btn disabled' : 'nav-btn';\n \n        let pages = [];\n        if (totalPages <= 5) {\n            for (let i = 1; i <= totalPages; i++) pages.push(i);\n        } else {\n            pages.push(1);\n            if (currentPage > 3) pages.push('...');\n           \n            let start = Math.max(2, currentPage - 1);\n            let end = Math.min(totalPages - 1, currentPage + 1);\n           \n            if (currentPage <= 2) end = 4;\n            if (currentPage >= totalPages - 1) start = totalPages - 3;\n \n            for (let i = start; i <= end; i++) {\n                if (!pages.includes(i)) pages.push(i);\n            }\n \n            if (currentPage < totalPages - 2) pages.push('...');\n            if (!pages.includes(totalPages)) pages.push(totalPages);\n        }\n \n        pages.forEach(p => {\n            if (p === '...') {\n                const span = document.createElement('span');\n                span.className = 'dots';\n                span.textContent = '...';\n                container.appendChild(span);\n            } else {\n                const span = document.createElement('span');\n                span.className = p === currentPage ? 'page-num active' : 'page-num';\n                span.textContent = p;\n                span.onclick = () => fetchErrors(p);\n                container.appendChild(span);\n            }\n        });\n \n        const start = meta.total === 0 ? 0 : ((currentPage - 1) * meta.perPage) + 1;\n        const end = Math.min(currentPage * meta.perPage, meta.total);\n        document.getElementById('entryInfo').textContent = `Showing ${start} to ${end} of ${meta.total} entries`;\n    }\n \n    function openModal(item) {\n        currentItem = item;\n        currentRowId = String(item.work_assignment_id || item.id);\n        document.getElementById('popFile').value = item.file_name || '';\n        document.getElementById('popMinor').value = item.error_type === 'Minor' ? item.error_count : 0;\n        document.getElementById('popCritical').value = item.error_type === 'Critical' ? item.error_count : 0;\n        document.getElementById('popZt').value = item.error_type === 'Zero_Tolerance' ? item.error_count : 0;\n        document.getElementById('popAssign').value = item.assigned_to_name || '';\n        document.getElementById('popQc').value = item.qc_by_name || '';\n        \/\/ Reset editable fields\n        document.getElementById('popReverseMinor').value = '';\n        document.getElementById('popReverseCritical').value = '';\n        document.getElementById('popReverseZt').value = '';\n        document.getElementById('popRemarks').value = '';\n       \n        document.getElementById('reverseModal').style.display = 'flex';\n        document.body.style.overflow = 'hidden';\n    }\n \n    function closeModal() {\n        document.getElementById('reverseModal').style.display = 'none';\n        document.body.style.overflow = 'auto';\n    }\n \n    function resetFilters() {\n        document.querySelectorAll('.filter-section input[type=\"text\"], .filter-section select').forEach(i => i.value = '');\n        document.getElementById('filterPerPage').value = '25';\n        dpState.errdate.selectedDate = null;\n        dpState.errdate.activePreset = null;\n        document.getElementById('filterDate').value = '';\n        fetchErrors(1);\n    }\n \n    \/\/ Reverse Hit form submit \u2192 POST API\n    document.getElementById('reverseForm').addEventListener('submit', async function(e) {\n        e.preventDefault();\n        if (!currentItem) return;\n\n        const saveBtn = this.querySelector('button[type=\"submit\"]');\n        const originalText = saveBtn.textContent;\n        saveBtn.textContent = 'Saving...';\n        saveBtn.disabled = true;\n\n        const payload = {\n            work_assignment_id: currentItem.work_assignment_id || currentItem.id,\n            submited_by: Number(localStorage.getItem(\"USER_ID\")) || 0,\n            remarks: document.getElementById('popRemarks').value,\n            reverse_minor_error: Number(document.getElementById('popReverseMinor').value) || 0,\n            reverse_critical_error: Number(document.getElementById('popReverseCritical').value) || 0,\n            rever_zero_tolerance: Number(document.getElementById('popReverseZt').value) || 0,\n            action_by: currentItem.action_by || currentItem.assigned_to || 0,\n            qc_by: currentItem.qc_by || 0\n        };\n\n        try {\n            const res = await fetch(ENDPOINTS.REVERSE_ADD, {\n                method: 'POST',\n                headers: getHeaders(),\n                body: JSON.stringify(payload)\n            });\n            const result = await res.json();\n            if (result.code === 200 || result.code === 201 || res.ok) {\n                \/\/ Persist to localStorage so state survives refresh\n                reversedIds.add(currentRowId);\n                localStorage.setItem('reversedWorkIds', JSON.stringify([...reversedIds]));\n                \/\/ Swap button \u2192 text in-place\n                const cell = document.querySelector(`td[data-row-id=\"${currentRowId}\"]`);\n                if (cell) {\n                    cell.innerHTML = `<span class=\"reverse-applied-text\">Reverse Hit Applied<\/span>`;\n                }\n                closeModal();\n            } else {\n                alert(result.message || 'Failed to save. Please try again.');\n            }\n        } catch (err) {\n            console.error('Reverse Add Error:', err);\n            alert('An error occurred. Please try again.');\n        } finally {\n            saveBtn.textContent = originalText;\n            saveBtn.disabled = false;\n        }\n    });\n\n    \/\/ Download CSV - exports currently visible table data\n    function downloadCSV() {\n        if (!allTableData || allTableData.length === 0) {\n            alert('No data available to download.');\n            return;\n        }\n        const headers = [\n            'Work Assignment Date', 'File Name', 'Assigned To', 'Account',\n            'Category', 'Error Type', 'Error Count', 'Reversal Count',\n            'Mistake', 'Patient Account', 'Entity', 'DOS \/ (PSD)',\n            'Description', 'QC By', 'QC Date'\n        ];\n        const fields = [\n            'assigned_date', 'file_name', 'assigned_to_name', 'account_name',\n            'category_name', 'error_type', 'error_count', 'reversal_count',\n            'mistake', 'patient_account', 'entity_name', 'dos_date',\n            'description', 'qc_by_name', 'qc_date'\n        ];\n        const escape = val => {\n            const str = (val === null || val === undefined) ? '' : String(val);\n            return str.includes(',') || str.includes('\"') || str.includes('\\n')\n                ? `\"${str.replace(\/\"\/g, '\"\"')}\"` : str;\n        };\n        const rows = [headers.join(',')];\n        allTableData.forEach(item => {\n            rows.push(fields.map(f => escape(item[f])).join(','));\n        });\n        const blob = new Blob([rows.join('\\n')], { type: 'text\/csv;charset=utf-8;' });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = `error_log_page${currentPage}_${new Date().toISOString().slice(0,10)}.csv`;\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n    }\n\n    \/\/ \u2500\u2500 CUSTOM DATE PICKER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const dpState = {\n        errdate: { viewYear: null, viewMonth: null, selectedDate: null, activePreset: 'today' }\n    };\n\n    const DP_IDS = {\n        errdate: { dropdown: 'dpDropdownErrdate', backdrop: 'dpBackdropErrdate', title: 'dpCalTitleErrdate', days: 'dpDaysErrdate', title2: 'dpCalTitleErrdate2', days2: 'dpDaysErrdate2', display: 'filterDate' }\n    };\n\n    const DP_MONTHS = ['January','February','March','April','May','June',\n                       'July','August','September','October','November','December'];\n\n    function dpToday() { const d = new Date(); d.setHours(0,0,0,0); return d; }\n\n    function dpFmtISO(d) {\n        if (!d) return '';\n        const dd = String(d.getDate()).padStart(2,'0');\n        const mm = String(d.getMonth()+1).padStart(2,'0');\n        return `${d.getFullYear()}-${mm}-${dd}`;\n    }\n\n    function dpSameDay(a, b) {\n        return a && b && a.getFullYear()===b.getFullYear() &&\n               a.getMonth()===b.getMonth() && a.getDate()===b.getDate();\n    }\n\n    function dpRenderCalendar(inst) {\n        const s = dpState[inst];\n        const ids = DP_IDS[inst];\n        let y2 = s.viewYear, m2 = s.viewMonth + 1;\n        if (m2 > 11) { m2 = 0; y2++; }\n        document.getElementById(ids.title).textContent  = `${DP_MONTHS[s.viewMonth]} ${s.viewYear}`;\n        document.getElementById(ids.title2).textContent = `${DP_MONTHS[m2]} ${y2}`;\n        document.getElementById(ids.days).innerHTML  = dpBuildDays(s.viewYear, s.viewMonth, s, inst);\n        document.getElementById(ids.days2).innerHTML = dpBuildDays(y2, m2, s, inst);\n    }\n\n    function dpBuildDays(year, month, s, inst) {\n        const today = dpToday();\n        const first = new Date(year, month, 1);\n        const startDay = first.getDay();\n        const daysInMonth = new Date(year, month + 1, 0).getDate();\n        let html = '';\n        for (let i = 0; i < startDay; i++) {\n            const prevDate = new Date(year, month, 0 - (startDay - i - 2));\n            html += `<div class=\"dp-day other-month\" onclick=\"dpPickDay(event,${prevDate.getFullYear()},${prevDate.getMonth()},${prevDate.getDate()},'${inst}')\">${prevDate.getDate()}<\/div>`;\n        }\n        for (let d = 1; d <= daysInMonth; d++) {\n            const cur = new Date(year, month, d);\n            let cls = 'dp-day';\n            if (dpSameDay(cur, today))          cls += ' today';\n            if (dpSameDay(cur, s.selectedDate)) cls += ' selected';\n            html += `<div class=\"${cls}\" onclick=\"dpPickDay(event,${year},${month},${d},'${inst}')\">${d}<\/div>`;\n        }\n        const filled = startDay + daysInMonth;\n        const rem = filled % 7 === 0 ? 0 : 7 - (filled % 7);\n        for (let d = 1; d <= rem; d++) {\n            html += `<div class=\"dp-day other-month\" onclick=\"dpPickDay(event,${year},${month + 1},${d},'${inst}')\">${d}<\/div>`;\n        }\n        return html;\n    }\n\n    function dpPickDay(e, y, m, d, inst) {\n        e.stopPropagation();\n        const s = dpState[inst];\n        s.selectedDate = new Date(y, m, d);\n        s.activePreset = null;\n        const capInst = inst.charAt(0).toUpperCase() + inst.slice(1);\n        document.querySelectorAll(`#dpDropdown${capInst} .dp-preset-item`).forEach(el => el.classList.remove('active'));\n        s.viewYear = y; s.viewMonth = m;\n        dpRenderCalendar(inst);\n    }\n\n    function dpChangeMonth(e, dir, inst) {\n        e.stopPropagation();\n        const s = dpState[inst];\n        s.viewMonth += dir;\n        if (s.viewMonth > 11) { s.viewMonth = 0; s.viewYear++; }\n        if (s.viewMonth < 0)  { s.viewMonth = 11; s.viewYear--; }\n        dpRenderCalendar(inst);\n    }\n\n    function selectPreset(e, preset, inst) {\n        e.stopPropagation();\n        const s = dpState[inst];\n        const today = dpToday();\n        s.activePreset = preset;\n        const dropId = DP_IDS[inst].dropdown;\n        document.querySelectorAll(`#${dropId} .dp-preset-item`).forEach(el =>\n            el.classList.toggle('active', el.dataset.preset === preset));\n        switch (preset) {\n            case 'today':     s.selectedDate = new Date(today); break;\n            case 'yesterday': { const y = new Date(today); y.setDate(y.getDate()-1); s.selectedDate = y; break; }\n            case 'last7':     { const y = new Date(today); y.setDate(y.getDate()-6); s.selectedDate = y; break; }\n            case 'last30':    { const y = new Date(today); y.setDate(y.getDate()-29); s.selectedDate = y; break; }\n            case 'thisMonth': s.selectedDate = new Date(today.getFullYear(), today.getMonth(), 1); break;\n            case 'lastMonth': s.selectedDate = new Date(today.getFullYear(), today.getMonth()-1, 1); break;\n        }\n        s.viewYear  = s.selectedDate.getFullYear();\n        s.viewMonth = s.selectedDate.getMonth();\n        dpRenderCalendar(inst);\n    }\n\n    function dpApply(e, inst) {\n        e.stopPropagation();\n        const s = dpState[inst];\n        document.getElementById(DP_IDS[inst].display).value = s.selectedDate ? dpFmtISO(s.selectedDate) : '';\n        closeDatePicker(inst);\n    }\n\n    function dpClear(e, inst) {\n        e.stopPropagation();\n        const s = dpState[inst];\n        s.selectedDate = null;\n        s.activePreset = null;\n        document.getElementById(DP_IDS[inst].display).value = '';\n        const dropId = DP_IDS[inst].dropdown;\n        document.querySelectorAll(`#${dropId} .dp-preset-item`).forEach(el => el.classList.remove('active'));\n        dpRenderCalendar(inst);\n        closeDatePicker(inst);\n    }\n\n    function toggleDatePicker(e, inst) {\n        e.stopPropagation();\n        const ids = DP_IDS[inst];\n        const dd = document.getElementById(ids.dropdown);\n        if (dd.classList.contains('open')) {\n            closeDatePicker(inst);\n        } else {\n            const s = dpState[inst];\n            const ref = s.selectedDate || dpToday();\n            s.viewYear  = ref.getFullYear();\n            s.viewMonth = ref.getMonth();\n            if (!s.selectedDate) {\n                s.activePreset = 'today';\n                document.querySelectorAll(`#${ids.dropdown} .dp-preset-item`).forEach(el =>\n                    el.classList.toggle('active', el.dataset.preset === 'today'));\n            }\n            dpRenderCalendar(inst);\n            dd.classList.add('open');\n            document.getElementById(ids.backdrop).classList.add('show');\n            requestAnimationFrame(() => {\n                const rect = dd.getBoundingClientRect();\n                if (rect.right > window.innerWidth - 8) {\n                    dd.classList.add('align-right');\n                } else {\n                    dd.classList.remove('align-right');\n                }\n            });\n        }\n    }\n\n    function closeDatePicker(inst) {\n        const ids = DP_IDS[inst];\n        document.getElementById(ids.dropdown).classList.remove('open');\n        document.getElementById(ids.backdrop).classList.remove('show');\n    }\n\n    document.addEventListener('click', function(e) {\n        const wrapEl = document.getElementById('dpWrapperDate');\n        if (wrapEl && !wrapEl.contains(e.target)) {\n            closeDatePicker('errdate');\n        }\n    });\n\n    loadDropdowns();\n    fetchErrors();\n<\/script>\n<\/div><\/div>\n\n<\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>List View All Error (0) Assigned to Select User File Name Select File Account Select Account Entity Select Entity Category Select Category Date Qc Submitted Today Yesterday Last 7 Days Last 30 Days This Month Last Month &#8249; &#8250; Su Mo Tu We Th Fr Sa &#8249; &#8250; Su Mo Tu We Th Fr Sa&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-206","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":1,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/206\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/206\/revisions\/207"}],"wp:attachment":[{"href":"https:\/\/ph-portal.zyneventures.com\/index.php\/wp-json\/wp\/v2\/media?parent=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}