Skip to content

Commit 3b201fb

Browse files
authored
Merge pull request #114 from SRATRC/dev
Dev
2 parents ce40dc1 + fac436b commit 3b201fb

8 files changed

Lines changed: 250 additions & 1 deletion

admin/account/settlementBreakdown.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ document.addEventListener('DOMContentLoaded', () => {
222222
<th>Checkin Date</th>
223223
<th>Checkout Date</th>
224224
<th>RA Id</th>
225+
<th>Utsav Id</th>
225226
<th>Amount</th>
226227
<th>Received in bank on</th>
227228
<th>Settlement id</th>
@@ -246,6 +247,7 @@ document.addEventListener('DOMContentLoaded', () => {
246247
<td>${txn.checkin}</td>
247248
<td>${txn.checkout}</td>
248249
<td>${txn.shibir_comments}</td>
250+
<td>${txn.utsav_id}</td>
249251
<td>${txn.amount}</td>
250252
<td>${formatDateTime(txn.settlementDate)}</td>
251253
<td>${txn.settlement_id}</td>
@@ -371,6 +373,7 @@ document.addEventListener('DOMContentLoaded', () => {
371373
checkin: tx.checkin,
372374
checkout: tx.checkout,
373375
shibir_comments: tx.shibir_comments,
376+
utsav_id: tx.utsav_id,
374377
amount: tx.amount,
375378
settlementDate: tx.settlementDate,
376379
settlement_id: tx.settlement_id,
@@ -447,6 +450,7 @@ document.addEventListener('DOMContentLoaded', () => {
447450
'Checkin Date',
448451
'Checkout Date',
449452
'RA Id',
453+
'Utsav Id',
450454
'Amount',
451455
'Received in bank on',
452456
'Settlement id',
@@ -475,6 +479,7 @@ document.addEventListener('DOMContentLoaded', () => {
475479
tx.checkin,
476480
tx.checkout,
477481
tx.shibir_comments,
482+
tx.utsav_id,
478483
tx.amount,
479484
tx.settlementDate,
480485
tx.settlement_id,

admin/adhyayan/adhyayanBookingslist.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ <h1>Adhyayan Bookings <span id="shibirName"></span></h1>
6767
<th>Res Status</th>
6868
<th>Booking Status</th>
6969
<th>Transaction Status</th>
70+
<th>Admin Comments</th>
7071
<th>Booked By</th>
7172
<th>Action</th>
7273
</tr>

admin/adhyayan/adhyayanBookingslist.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ document.addEventListener('DOMContentLoaded', async function () {
5454
<td>${item.res_status || '-'}</td>
5555
<td>${item.status || '-'}</td>
5656
<td>${item.transaction_status || '-'}</td>
57+
<td>${item.comments || '-'}</td>
5758
<td>${item.bookedby || '-'}</td>
5859
<td>
5960
${
@@ -82,6 +83,7 @@ document.addEventListener('DOMContentLoaded', async function () {
8283
res_status: 'res_status',
8384
status: 'status',
8485
transaction_status: 'transaction status',
86+
comments: 'admin comments',
8587
bookedby: 'bookedby',
8688
action: 'action'
8789
});
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<script src="/style/js/roleCheck.js"></script>
2+
<script>
3+
checkRoleAccess(['adhyayanAdmin', 'superAdmin', 'adhyayanAdminRaj']);
4+
</script>
5+
6+
<!DOCTYPE html>
7+
<html lang="en">
8+
<head>
9+
<meta charset="UTF-8" />
10+
<title>Adhyayan Registration (Admin)</title>
11+
<link rel="stylesheet" href="../../style/css/styles.css" />
12+
</head>
13+
14+
<body>
15+
<div class="header">
16+
<div class="container">
17+
<div class="logout">
18+
<a href="javascript:void(0);" onclick="history.back()">Back</a>
19+
&nbsp; | &nbsp;
20+
<a href="javascript:void(0);" onclick="goToHome()">Home</a>
21+
&nbsp; | &nbsp;
22+
<a href="javascript:void(0);" onclick="logout()">Logout</a>
23+
</div>
24+
</div>
25+
</div>
26+
27+
<div class="middlecontent">
28+
<div class="container">
29+
<div class="whitesec">
30+
<div class="inner-padding">
31+
32+
<h1>Adhyayan Registration (Admin)</h1>
33+
34+
<form id="adhyayanRegistrationForm">
35+
36+
<div class="form-group">
37+
<label>Select Adhyayan</label>
38+
<select id="adhyayanSelect" class="form-control" required>
39+
<option value="">-- Select Adhyayan --</option>
40+
</select>
41+
</div>
42+
43+
<table class="table table-bordered">
44+
<thead>
45+
<tr>
46+
<th>#</th>
47+
<th>Mobile</th>
48+
<th>Name</th>
49+
<th>Card No</th>
50+
<th>Center</th>
51+
<th>Action</th>
52+
</tr>
53+
</thead>
54+
<tbody id="tableBody"></tbody>
55+
</table>
56+
57+
<div style="display:flex; gap:8px">
58+
<button type="button" id="addRowBtn" class="btn btn-secondary">+ Add Row</button>
59+
<button type="submit" class="btn btn-primary">Submit</button>
60+
</div>
61+
62+
</form>
63+
64+
</div>
65+
</div>
66+
</div>
67+
</div>
68+
69+
<script src="../../style/js/config.js"></script>
70+
<script src="./adhyayanRegistration.js"></script>
71+
</body>
72+
</html>
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
document.addEventListener('DOMContentLoaded', () => {
2+
const form = document.getElementById('adhyayanRegistrationForm');
3+
const adhyayanSelect = document.getElementById('adhyayanSelect');
4+
const tableBody = document.getElementById('tableBody');
5+
const addRowBtn = document.getElementById('addRowBtn');
6+
7+
let rowCounter = 0;
8+
9+
init();
10+
11+
async function init() {
12+
addRowBtn.disabled = true;
13+
addRowBtn.addEventListener('click', addRow);
14+
adhyayanSelect.addEventListener('change', onAdhyayanChange);
15+
form.addEventListener('submit', onSubmit);
16+
17+
await populateAdhyayanSelect();
18+
}
19+
20+
async function populateAdhyayanSelect() {
21+
const res = await fetch(`${CONFIG.basePath}/adhyayan/fetchALLAdhyayan`, {
22+
headers: authHeader()
23+
});
24+
const json = await res.json();
25+
26+
adhyayanSelect.innerHTML =
27+
`<option value="">-- Select Adhyayan --</option>`;
28+
29+
json.data.forEach(a => {
30+
const opt = document.createElement('option');
31+
opt.value = a.id;
32+
opt.textContent = a.name;
33+
adhyayanSelect.appendChild(opt);
34+
});
35+
36+
// ✅ AUTO-SELECT FROM QUERY PARAM
37+
const params = new URLSearchParams(window.location.search);
38+
const shibirIdFromUrl = params.get('shibir_id');
39+
40+
if (shibirIdFromUrl) {
41+
adhyayanSelect.value = shibirIdFromUrl;
42+
43+
// if ID exists in dropdown, trigger change
44+
if (adhyayanSelect.value === shibirIdFromUrl) {
45+
onAdhyayanChange();
46+
}
47+
}
48+
}
49+
50+
function onAdhyayanChange() {
51+
addRowBtn.disabled = !adhyayanSelect.value;
52+
tableBody.innerHTML = '';
53+
rowCounter = 0;
54+
}
55+
56+
function addRow() {
57+
rowCounter++;
58+
59+
const tr = document.createElement('tr');
60+
tr.innerHTML = `
61+
<td>${rowCounter}</td>
62+
<td><input data-f="mobno" class="form-control" placeholder="Mobile"></td>
63+
<td><input data-f="name" class="form-control" disabled></td>
64+
<td><input data-f="cardno" class="form-control" disabled></td>
65+
<td><input data-f="center" class="form-control" disabled></td>
66+
<td>
67+
<button type="button" class="btn btn-danger">Remove</button>
68+
</td>
69+
`;
70+
71+
tr.querySelector('.btn-danger').onclick = () => {
72+
tr.remove();
73+
renumber();
74+
};
75+
76+
attachMobileLookup(tr);
77+
tableBody.appendChild(tr);
78+
}
79+
80+
function attachMobileLookup(tr) {
81+
tr.querySelector('[data-f="mobno"]').addEventListener('blur', async e => {
82+
const mob = e.target.value.trim();
83+
if (mob.length < 10) return;
84+
85+
try {
86+
const res = await fetch(
87+
`${CONFIG.basePath}/card/by-mobile/${mob}`,
88+
{ headers: authHeader() }
89+
);
90+
const json = await res.json();
91+
92+
if (json.data) {
93+
tr.querySelector('[data-f="name"]').value = json.data.issuedto || '';
94+
tr.querySelector('[data-f="cardno"]').value = json.data.cardno || '';
95+
tr.querySelector('[data-f="center"]').value = json.data.center || '';
96+
}
97+
} catch {
98+
console.warn('Mobile lookup failed');
99+
}
100+
});
101+
}
102+
103+
function renumber() {
104+
[...tableBody.children].forEach(
105+
(tr, i) => (tr.children[0].textContent = i + 1)
106+
);
107+
}
108+
109+
function collectRows() {
110+
const rows = [];
111+
112+
tableBody.querySelectorAll('tr').forEach(tr => {
113+
const cardno = tr.querySelector('[data-f="cardno"]').value;
114+
if (cardno) rows.push(cardno);
115+
});
116+
117+
return rows;
118+
}
119+
120+
async function onSubmit(e) {
121+
e.preventDefault();
122+
123+
const mumukshus = collectRows();
124+
if (!mumukshus.length) {
125+
alert('Please add at least one valid Mumukshu');
126+
return;
127+
}
128+
129+
const res = await fetch(`${CONFIG.basePath}/adhyayan/booking/admin`, {
130+
method: 'POST',
131+
headers: authHeader(),
132+
body: JSON.stringify({
133+
shibir_ids: [adhyayanSelect.value],
134+
mumukshus
135+
})
136+
});
137+
138+
139+
const json = await res.json();
140+
141+
if (res.ok) {
142+
alert('Adhyayan registrations completed');
143+
window.location.href =
144+
`/admin/adhyayan/adhyayanBookingslist.html?shibir_id=${adhyayanSelect.value}`;
145+
} else {
146+
alert(json.message || 'Failed to register');
147+
}
148+
}
149+
150+
function authHeader() {
151+
return {
152+
'Content-Type': 'application/json',
153+
Authorization: `Bearer ${sessionStorage.getItem('token')}`
154+
};
155+
}
156+
});

admin/adhyayan/adhyayanReport.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ <h1>Adhyayan Report</h1>
139139
<th>Feedback Form Link</th>
140140
<th>Feedbacks Received</th>
141141
<th>Feedback Summary</th>
142+
<th>Register for Mumukshu</th>
142143
<th>Status</th>
143144
<th>Action</th>
144145
</tr>

admin/adhyayan/adhyayanReport.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,17 @@ for (let i = 1; i <= 9; i++) {
122122
Click to Open
123123
</span>
124124
</td>
125+
</td>
126+
<td style="text-align:center;">
127+
${
128+
JSON.parse(sessionStorage.getItem('roles') || '[]').includes('adhyayanAdminReadOnly')
129+
? '-'
130+
: `<a href="/admin/adhyayan/adhyayanRegistration.html?shibir_id=${item.id}">
131+
<button class="btn btn-secondary btn-sm">Open Form</button>
132+
</a>`
133+
}
134+
</td>
135+
125136
<td style="text-align:center;">${item.status}</td>
126137
<td style="text-align:center;">
127138
${

admin/utsav/utsavBookingslist.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ function renderFilteredTable(){
103103
<th>Car Number</th>
104104
<th>Volunteering</th>
105105
<th>Mumukshu Comments</th>
106+
<th>Admin Comments</th>
106107
<th>Mobile</th>
107108
<th>Gender</th>
108109
<th>Center</th>
@@ -126,7 +127,7 @@ function renderFilteredTable(){
126127
${!JSON.parse(sessionStorage.getItem('roles')||'[]').includes('utsavAdminReadOnly')?`<span class="edit-room" data-bookingid="${item.bookingid}" data-cardno="${item.cardno}" data-name="${item.issuedto}" data-roomno="${item.roomno||''}" style="cursor:pointer;color:blue;margin-left:5px;">✎</span>`:''}</td>
127128
<td>${formatDateTime(item.createdAt)}</td>
128129
<td>${item.arrival}</td><td>${item.carno}</td><td>${item.volunteer}</td>
129-
<td>${item.other}</td><td>${item.mobno}</td><td>${item.gender}</td>
130+
<td>${item.other}</td><td>${item.comments}</td><td>${item.mobno}</td><td>${item.gender}</td>
130131
<td>${item.center}</td><td>${item.res_status}</td>
131132
<td>${item.status}</td><td>${item.transaction_status}</td><td>${item.bookedby}</td>
132133
<td>${!JSON.parse(sessionStorage.getItem('roles')||'[]').includes('utsavAdminReadOnly')?`<a href="#" class="update-status-link" data-bookingid="${item.bookingid}" data-utsavid="${item.utsavid}" data-status="${item.status}">Update Booking Status</a>`:'-'}</td>

0 commit comments

Comments
 (0)