Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ffc60a6c0f | |||
| 53844ace9a | |||
| f8022279ad | |||
| 763638abd5 | |||
| 99bc442495 | |||
| 61fe16a0ea | |||
| 14979dba4b |
+48
-7
@@ -58,9 +58,28 @@ class DirectAccessReportGenerator
|
||||
? trim($contact->get('firstName') . ' ' . $contact->get('lastName'))
|
||||
: 'ללא איש קשר';
|
||||
|
||||
// Get assigned user name
|
||||
$assignedUser = $userId ? $this->entityManager->getEntityById('User', $userId) : null;
|
||||
$assignedUserName = $assignedUser ? $assignedUser->get('name') : ($this->user->get('name') ?? '');
|
||||
// Get assigned user name — prefer case's assignedUser, then userId, then current user
|
||||
$assignedUserName = '';
|
||||
$caseAssignedUserId = $case->get('assignedUserId');
|
||||
if ($caseAssignedUserId) {
|
||||
$caseAssignedUser = $this->entityManager->getEntityById('User', $caseAssignedUserId);
|
||||
if ($caseAssignedUser) {
|
||||
$assignedUserName = $caseAssignedUser->get('name') ?? '';
|
||||
}
|
||||
}
|
||||
if (empty($assignedUserName) && $userId) {
|
||||
$assignedUser = $this->entityManager->getEntityById('User', $userId);
|
||||
if ($assignedUser) {
|
||||
$assignedUserName = $assignedUser->get('name') ?? '';
|
||||
}
|
||||
}
|
||||
if (empty($assignedUserName)) {
|
||||
$assignedUserName = $this->user->get('name') ?? '';
|
||||
}
|
||||
// Filter out system/API user names
|
||||
if (in_array(strtolower($assignedUserName), ['api', 'x-api-key', 'system', 'admin'], true)) {
|
||||
$assignedUserName = '';
|
||||
}
|
||||
|
||||
// Build placeholder data directly from params
|
||||
$data = $this->buildPlaceholderData($params, $case, $contactName, $assignedUserName);
|
||||
@@ -131,11 +150,22 @@ class DirectAccessReportGenerator
|
||||
$legalAnalysis = $params['legalAnalysis'] ?? [];
|
||||
if (is_string($legalAnalysis)) {
|
||||
$legalAnalysis = json_decode($legalAnalysis, true) ?? [];
|
||||
} elseif (is_object($legalAnalysis)) {
|
||||
$legalAnalysis = (array) $legalAnalysis;
|
||||
}
|
||||
|
||||
// Fallback: if AI sent legalAnalysis fields flat (not nested), pick them up
|
||||
$laFields = ['q1DocsDetail', 'q2ReasonDetail', 'q4PanelComposition', 'q6ComplaintsDetail',
|
||||
'q8ClinicalGap', 'q9MoharaDetail', 'q10RehabDetail', 'q11ScoreDetail', 'q12UniqueDetail'];
|
||||
foreach ($laFields as $f) {
|
||||
if (empty($legalAnalysis[$f]) && !empty($params[$f])) {
|
||||
$legalAnalysis[$f] = $params[$f];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
// Header
|
||||
'legalAidNumber' => $params['legalAidNumber'] ?? $case->get('cLegalAidNumber') ?? '',
|
||||
'cLegalAidNumber' => $params['legalAidNumber'] ?? $case->get('cLegalAidNumber') ?? '',
|
||||
'contactName' => $contactName,
|
||||
'assignedUserName' => $assignedUserName,
|
||||
'reportDate' => $this->formatDate(date('Y-m-d')),
|
||||
@@ -186,8 +216,8 @@ class DirectAccessReportGenerator
|
||||
|
||||
private function addCheckboxData(array &$data, array $params): void
|
||||
{
|
||||
$CHK = '☑';
|
||||
$UNCHK = '☐';
|
||||
$CHK = "☑\u{00A0}";
|
||||
$UNCHK = "☐\u{00A0}";
|
||||
|
||||
$urgency = $params['urgencyLevel'] ?? '';
|
||||
$data['chk_urgency_regular'] = ($urgency === 'רגיל') ? $CHK : $UNCHK;
|
||||
@@ -211,6 +241,7 @@ class DirectAccessReportGenerator
|
||||
$data['chk_contact_bad'] = ($contactStatus === 'לא תקין') ? $CHK : $UNCHK;
|
||||
|
||||
$rec = $params['recommendationType'] ?? '';
|
||||
$data['chk_rec_proceed'] = ($rec === 'המשך ייצוג') ? $CHK : $UNCHK;
|
||||
$data['chk_rec_consulting'] = ($rec === 'ייעוץ והדרכה חלף ייצוג') ? $CHK : $UNCHK;
|
||||
$data['chk_rec_waiver'] = ($rec === 'ויתור הלקוח') ? $CHK : $UNCHK;
|
||||
$data['chk_rec_replacement'] = ($rec === 'החלפת ייצוג') ? $CHK : $UNCHK;
|
||||
@@ -343,6 +374,16 @@ class DirectAccessReportGenerator
|
||||
}
|
||||
|
||||
$processor->saveAs($outputPath);
|
||||
|
||||
// Fix space preservation: PHPWord strips whitespace from <w:t> elements
|
||||
// that lack xml:space="preserve", causing words to stick together in RTL docs.
|
||||
$zip = new \ZipArchive();
|
||||
if ($zip->open($outputPath) === true) {
|
||||
$xml = $zip->getFromName('word/document.xml');
|
||||
$xml = preg_replace('/<w:t(?=[ >\/])(?![^>]*xml:space)/', '<w:t xml:space="preserve"', $xml);
|
||||
$zip->addFromString('word/document.xml', $xml);
|
||||
$zip->close();
|
||||
}
|
||||
}
|
||||
|
||||
private function normalizeDate(?string $value): ?string
|
||||
@@ -361,7 +402,7 @@ class DirectAccessReportGenerator
|
||||
{
|
||||
if (!$date) return '';
|
||||
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $date, $m)) {
|
||||
return "{$m[3]}/{$m[2]}/{$m[1]}";
|
||||
return "{$m[3]}.{$m[2]}.{$m[1]}";
|
||||
}
|
||||
return $date;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "LegalAssistance",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.9",
|
||||
"acceptableVersions": [">=8.0.0"],
|
||||
"php": [">=8.1"],
|
||||
"releaseDate": "2026-04-09",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -109,8 +109,8 @@
|
||||
},
|
||||
"recommendationType": {
|
||||
"type": "string",
|
||||
"enum": ["ייעוץ והדרכה חלף ייצוג", "ויתור הלקוח", "החלפת ייצוג", "לא נוצר קשר", "לא התקיימה פגישה", "עדיין לא ניתן להחליט", "נדרשים מסמכים נוספים", "המלצה לסירוב"],
|
||||
"description": "סוג ההמלצה/ההודעה"
|
||||
"enum": ["המשך ייצוג", "ייעוץ והדרכה חלף ייצוג", "ויתור הלקוח", "החלפת ייצוג", "לא נוצר קשר", "לא התקיימה פגישה", "עדיין לא ניתן להחליט", "נדרשים מסמכים נוספים", "המלצה לסירוב"],
|
||||
"description": "סוג ההמלצה/ההודעה — בחר ׳המשך ייצוג׳ כשמומלץ להגיש ערעור או להמשיך בייצוג"
|
||||
},
|
||||
"recommendationDetail": {
|
||||
"type": "string",
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user