MAIN
Dashboard DONE Schools DONE Students DONE Academic DONE 80%
OPERATIONS
Library DONE + AI Transport PENDING Hostel PENDING Funds NEW Accounting NEW HR & Payroll PENDING
GOVERNANCE
Donor Portal PENDING Student Portal SEPARATE EMIS Forms PENDING Audit Trail PENDING Admin Roles PENDING
0
Total Books
0
Available
0
Issued Books
0
Overdue + Fine
12
Categories

Add New Book

OPAC - Student Search

📚 8 Columns Issue Form

📖 Book Stock

BarcodeCodeTitleAuthorCategoryQtyAvailShelfCost N$Action

📋 Issue Register

ADM NoStudentBook CodeTitleIssue DateDue DateReturn DateStatusFine N$Action
AI Manual - Library
Books, Issue, Fine Guide
👋 Library Module

Manage books, barcode, issue/return, fine N$5/day.

Steps:
1 Add Book - Code BAR-001, Title, Author, ISBN, Category (12 types), Qty, Shelf A-12, Cost N$
2 Issue Book - 8 Columns: ADM No, Student Name, Book Code, Title, Issue Date, Due Date (+14 days), Return Date, Status Issued/Returned/Overdue/Lost
3 Fine: Overdue days × N$5 = Fine, Lost = Book Price

KPIs: Total Books, Available, Issued, Overdue Fine N$, Categories 12.

Ask me! 👇
📘 How Library Works?
📚 Issue Return
💰 Fine N$5
📊 Barcode
🔍 OPAC Search
📚 Full ERP
');}function exportExcel(){let rows=[['Barcode','Code','Title','Author','Category','Qty','Avail','Shelf','Cost N$']];books.forEach(b=>rows.push([b.barcode,b.code,b.title,b.author,b.cat,b.qty,b.avail,b.shelf,b.price]));let csv=rows.map(r=>r.join(',')).join('\n');let blob=new Blob([csv],{type:'text/csv'});let a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='library_books.csv';a.click();}function exportCSV(){exportExcel();}async function loadExisting(){try{let r=await fetch('library.php?api=get_all&code=ORAL.PROSPER');let d=await r.json();if(d.erp_library){books=d.erp_library;}if(d.erp_library_issues){issues=d.erp_library_issues;}renderAll();}catch(e){renderAll();}}loadExisting();renderAll();document.getElementById('iIssue').valueAsDate=new Date();let due=new Date();due.setDate(due.getDate()+14);document.getElementById('iDue').valueAsDate=due; // AI function toggleAI(){let p=document.getElementById('aiPanel');p.style.display=p.style.display==='flex'?'none':'flex';} function askAI(q){document.getElementById('aiInput').value=q;sendAI();} function sendAI(){let input=document.getElementById('aiInput');let q=input.value.trim();if(!q)return;addMsg(q,'user');input.value='';setTimeout(()=>{let ans=getAIAnswer(q);addMsg(ans,'bot');},300);} function addMsg(text,who){let body=document.getElementById('aiBody');let div=document.createElement('div');div.className='ai-msg ai-'+(who==='bot'?'bot':'user');div.innerHTML=text;body.appendChild(div);body.scrollTop=body.scrollHeight;} function getAIAnswer(q){ q=q.toLowerCase(); if(q.includes('how')){return `📘 How Library Works:

STEP 1: Add New Book - 8 fields
Book Code BAR-001 (unique), Title, Author, ISBN, Category (12 categories: Grade 4-7 Natural Science, Grade 8-9 Physical Science, NSSCO Biology etc), Qty, Shelf No A-12, Cost N$ -> Save Book -> Barcode auto BAR+timestamp

STEP 2: Issue Book - 8 Columns
1 ADM No (student ID), 2 Student Name, 3 Book Code, 4 Title, 5 Issue Date (today), 6 Due Date (today+14 days), 7 Return Date, 8 Status Issued/Returned/Overdue/Lost -> Save
When Issued: Available qty -1
When Returned: Available +1

STEP 3: Fine
Overdue days × N$5 = Fine. Lost = Book Price N$

Search OPAC: Search by Title/Author/Code filters Book Stock table instantly`;} if(q.includes('issue')){return `📚 Issue / Return:

Issue Date = When student takes book
Due Date = Issue +14 days (auto set)
Return Date = When actually returned

Status:
• Issued - Book with student - Avail decreases
• Returned - Book back - Avail increases
• Overdue - Return Date > Due Date - Fine N$5/day
• Lost - Student lost - Fine = Book Cost N$

Example: Physical Science Gr10 BAR-001 issued to Uttam ADM2026001 on 2026-05-01 due 2026-05-15`;} if(q.includes('fine')){return `💰 Fine N$5 per day:

Calculation: Fine = Overdue Days × 5

Example: Due 2026-05-15, Return 2026-05-20 = 5 days overdue = N$25 fine

Button Calc Fine shows overdue days instantly

If Lost: Fine = Book Price (e.g., N$150)

KPIs show Total Overdue Fine N$ sum of all fines`;} if(q.includes('barcode')){return `📊 Barcode:

When you add book, system generates barcode BAR+timestamp e.g., BAR1001

Code BAR-001 is your manual code, Barcode is system unique

Print Barcode button opens print window with *CODE* in barcode font style

Use for scanning in future - Student portal Library shows Issued to You`;} if(q.includes('opac') || q.includes('search')){return `🔍 OPAC - Online Public Access Catalog:

OPAC is student search - Search box filters Book Stock instantly by Title/Author/Code

Student Portal -> Library tab shows only books issued to that student

Teacher view shows all books stock + issue register`;} if(q.includes('full') || q.includes('erp')){return `📚 FULL ERP:

MAIN: Dashboard, Schools, Students, Academic

OPERATIONS: Library (You are here), Transport, Hostel, Funds, Accounting, HR

GOVERNANCE: Donor Portal, Student Portal, EMIS, Audit, Admin

Library links to Student Portal - Students see their issued books`;} return `🤖 Library AI:
You asked "${q}"

Library: Add Book (Code, Title, Author, ISBN, Category, Qty, Shelf, Cost) -> Issue (ADM, Book Code, Issue/Due/Return, Status) -> Fine auto N$5/day

Ask: How library works, Issue return, Fine, Barcode, OPAC`; }