james.maes
|
c1d65736fb
|
chore(license): switch from AGPL v3 to Apache 2.0
Update LICENSE file, pom.xml license reference, checkstyle header
template, and README badge/references.
|
2026-03-29 15:39:20 -05:00 |
|
james.maes
|
1829473d1c
|
fix: address all audit findings (3 critical, 6 high, 6 medium)
Critical: email case normalization, null session NPE guard (4 files),
stale DealProduct read fix with in-memory sum tracking.
High: paginated CalculateLeadScores (500/batch), BulkAssignOwner
field default, AutoAssign JSON parsing via JsonUtils, consistent
getPossibleValueId() across 20+ files, GDPR exception logging,
EmailTemplatePreDeleteCustomizer test.
Medium: extracted CrmCurrencyUtils and CrmSessionUtils utilities,
batched DealProduct updates, lazy old stage load, dot-notation
field resolution in CalculateLeadScores.
373 tests, 0 failures, 90% coverage.
|
2026-03-29 11:53:57 -05:00 |
|
james.maes
|
e4abdcda94
|
test: add customizer tests, integration test, 90.2% coverage
- FormSubmissionAutoLinkCustomizerTest (3 tests)
- CrmIntegrationTest: full end-to-end lifecycle test covering contact,
company, form auto-link, activities, pipeline, deal stage progression,
products, audit log, and stage history
- 369 tests, 0 failures, 90.2% instruction coverage
|
2026-03-29 11:12:17 -05:00 |
|
james.maes
|
dc08d1ed48
|
feat: customizer tests, GDPR audit scrub, AutoAssign QQueryFilter
- Add dedicated test classes for ActivityLastDate, DealStageChange,
DealInit, DealProductRecalc customizers
- Implement GDPR audit log scrubbing with session bypass flag
- Improve AutoAssign criteriaJson evaluation
- 363 tests, 0 failures
|
2026-03-29 11:04:22 -05:00 |
|
james.maes
|
622218812b
|
feat: add FormSubmissionAutoLinkCustomizer
Auto-links contactId on form submission insert when a contact with
matching email already exists. Wired via postProduceActions.
|
2026-03-29 08:10:28 -05:00 |
|
james.maes
|
316e790691
|
fix: implement table customizers, PRE_DELETE guards, and process quality fixes
- Wire CrmAuditLogCustomizer on Contact/Company/Deal/Activity via postProduceActions
- Add ActivityLastDateCustomizer (updates lastActivityDate/lastContactedDate)
- Add DealStageChangeCustomizer (stage validation, weightedAmount, history)
- Add DealInitializationCustomizer (initial stageEnteredDate, weightedAmount)
- Add DealProductRecalculationCustomizer (totalAmount, parent deal amount)
- Add PRE_DELETE guards: ActivityType(system), PipelineStage(active deals),
Product(line items), EmailTemplate(active sequences)
- Add ConsentRecord append-only enforcement
- Add @ChildTable on Contact, Company; fix missing children on Deal, Activity
- Add FormSubmissionAutoLinkCustomizer
- Add sendWindow/timezone/businessDays to ProcessSequenceSteps
- Add dot-notation fieldPath and DAYS_AGO operators to CalculateLeadScores
- Update test assertions for new customizer behavior
|
2026-03-29 08:08:23 -05:00 |
|
james.maes
|
5d1797fde6
|
docs: expand README with complete integration guide
Add step-by-step instructions for consuming the QBit: Maven setup,
QInstance wiring, database schema, app navigation, seed data, multi-
tenant security, companion QBits, and complete working example.
|
2026-03-29 07:41:34 -05:00 |
|
CircleCI
|
1f29e30a86
|
Bump version to 0.1.0 [skip ci]
|
2026-03-29 12:36:55 +00:00 |
|
james.maes
|
02c1921bfb
|
chore: add .editorconfig to diverge develop from main
|
2026-03-29 07:20:22 -05:00 |
|