Py-detect / src /app /case-store.service.ts
Oviya
casedetailspage-update
6f093ab
import { Injectable } from '@angular/core';
export interface LegalInfo {
witnessStatements: string;
confessions: string;
evidence: File[]; // Assuming you're collecting file(s) as evidence
}
export interface PoliceCase {
// Optional metadata used by your UI
caseId?: string;
firRef?: string;
occurredFrom?: string;
occurredTo?: string;
jurisdiction?: string;
sceneType?: string;
dateTime?: string;
status?: 'Open' | 'Under Investigation' | 'Closed';
crime: string;
police: {
name: string;
station: string;
address: string;
pincode: string;
dutyPerson: string;
modeOfCrime: string;
information?: string;
};
accused: {
name: string;
age: string | number;
gender: string;
address: string;
occupation?: string;
};
legal: LegalInfo; // Add the legal property here
victimName?: string;
caseCategory?: string;
reportedBy?: string;
lastUpdated?: string;
verifiedBy?: string;
}
@Injectable({ providedIn: 'root' })
export class CaseStoreService {
private readonly storageKey = 'py_detect_police_cases';
private cases: PoliceCase[] = [];
constructor() {
this.load();
}
/** Create (newest first) */
private getNextCaseId(): string {
const max = this.cases
.map(c => c.caseId)
.map(id => parseInt((id || '').replace('CASE-', ''), 10))
.filter(n => !isNaN(n))
.reduce((a, b) => Math.max(a, b), 0);
return `CASE-${(max + 1).toString().padStart(3, '0')}`;
}
addPoliceCase(c: PoliceCase): void {
if (!c.caseId) {
c.caseId = this.getNextCaseId();
}
c.lastUpdated = new Date().toISOString();
c.verifiedBy = c.verifiedBy || '';
this.cases.unshift(c);
this.save();
}
/** Read */
getPoliceCases(): PoliceCase[] {
return this.cases;
}
/** Update by array index */
updatePoliceCaseAt(index: number, updated: PoliceCase): void {
if (index >= 0 && index < this.cases.length) {
updated.lastUpdated = new Date().toISOString();
this.cases[index] = updated;
this.save();
}
}
/** Delete by array index */
deletePoliceCaseAt(index: number): void {
if (index >= 0 && index < this.cases.length) {
this.cases.splice(index, 1);
this.save();
}
}
/**
* Convenience: map Info page reactive-form value to PoliceCase and store it.
* Call with the whole this.form.value from InfopageComponent.
*/
addFromInfoForm(formValue: any): void {
const crime = (formValue && formValue.crime) || {};
const suspect = (formValue && formValue.suspect) || {};
const notes = (formValue && formValue.notes) || {};
const legal = (formValue && formValue.legal) || {};
const mapped: PoliceCase = {
caseId: crime.caseId || '',
firRef: crime['FIR / Ref #'] || formValue['FIR / Ref #'] || '',
occurredFrom: crime['Occurred From'] || formValue['Occurred From'] || '',
occurredTo: crime['Occurred To'] || formValue['Occurred To'] || '',
jurisdiction: crime['Jurisdiction / PS'] || formValue['Jurisdiction / PS'] || '',
sceneType: crime['Scene Type'] || formValue['Scene Type'] || '',
dateTime: crime.dateTime || '',
status: notes.status || 'Open',
crime: crime.crimeType || 'Unknown',
police: {
name: notes.officerInCharge || '—',
station: '—',
address: crime.location || '—',
pincode: '',
dutyPerson: notes.officerInCharge || '—',
modeOfCrime: crime.crimeType || '—',
information: notes.initialFindings || ''
},
accused: {
name: suspect.fullName || '—',
age: suspect.age || '—',
gender: suspect.gender || '—',
address: suspect.address || '—',
occupation: suspect.alias || ''
},
legal: {
witnessStatements: legal.witnessStatements || '',
confessions: legal.confessions || '',
evidence: legal.evidence || []
},
victimName: crime.victimName || formValue['Victim Name'] || '',
caseCategory: crime.caseCategory || formValue['Case Category'] || '',
reportedBy: crime.reportedBy || formValue['Reported By'] || '',
lastUpdated: new Date().toISOString(),
verifiedBy: formValue.verifiedBy || '',
};
this.addPoliceCase(mapped);
}
/** Persist to localStorage (safe to keep; remove if not needed) */
private save(): void {
try { localStorage.setItem(this.storageKey, JSON.stringify(this.cases)); } catch { }
}
/** Load from localStorage */
private load(): void {
try {
const raw = localStorage.getItem(this.storageKey);
this.cases = raw ? (JSON.parse(raw) as PoliceCase[]) : [];
} catch {
this.cases = [];
}
}
}