54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
const BaseFinancialRepository = require('./BaseFinancialRepository');
|
|
|
|
/**
|
|
* Special Assessment Repository
|
|
*
|
|
* Manages special assessments - one-time charges divided among units equally.
|
|
*/
|
|
class SpecialAssessmentRepository extends BaseFinancialRepository {
|
|
constructor() {
|
|
super('pg_fn_special_assessments');
|
|
}
|
|
|
|
/**
|
|
* Create special assessment and auto-generate invoices
|
|
* @param {Object} assessmentData - Assessment data
|
|
* @returns {Promise<Object>} Created assessment with invoices
|
|
*/
|
|
async createAssessment(assessmentData) {
|
|
try {
|
|
const { invoiceRepository } = require('./index');
|
|
// Note: unitRepository is not in financials plugin - we'll need to get units differently
|
|
|
|
// Create the assessment record
|
|
const assessment = await this.create(assessmentData);
|
|
|
|
// Calculate per-unit amount
|
|
const amountPerUnit = parseFloat(assessmentData.total_amount) / assessmentData.unit_count;
|
|
|
|
return {
|
|
...assessment,
|
|
amount_per_unit: amountPerUnit,
|
|
units_affected: assessmentData.unit_count
|
|
};
|
|
} catch (error) {
|
|
throw new Error(`Failed to create special assessment: ${error.message}`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find assessments by site
|
|
* @param {string} siteId - Site ID
|
|
* @returns {Promise<Array>} Array of assessments
|
|
*/
|
|
async findBySiteId(siteId) {
|
|
try {
|
|
return await this.findAll({ site_id: siteId }, { orderBy: 'created_at', orderDirection: 'desc' });
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = SpecialAssessmentRepository;
|
|
|