Skip to content

Commit fc1fd38

Browse files
committed
Enhance IPEX integration: Add PDF call list management options and improve invoice processing logic
1 parent f3b3c10 commit fc1fd38

6 files changed

Lines changed: 139 additions & 36 deletions

README.cs.md

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,28 @@
11
# abraflexi-ipex (Česky)
22

3-
Tento dokument popisuje českou dokumentaci k integraci IPEX ↔ AbraFlexi se zaměřením na logiku minimální fakturace.
3+
Tento dokument popisuje českou### Tok zpracování
4+
5+
1. Z IPEX API se vytvoří měsíční (postpaid) objednávky.
6+
2. Najdou se připravené objednávky s daným produktem.
7+
3. Seskupí se podle zákazníka a sečte se `sumCelkem`.
8+
4. Pokud součet > limit → vytvoří se faktura, připojí výpis hovorů, objednávky se označí jako hotové.
9+
5. Jinak objednávky zůstavají připravené pro pozdější navýšení.
10+
11+
## Řízení PDF seznamů hovorů
12+
13+
Při vytváření objednávek a zpracování prepaid hovorů se automaticky generují PDF seznamy hovorů, které se:
14+
15+
- **Připojují k objednávkám** v AbraFlexi jako přílohy
16+
- **Odesílají emailem** zákazníkům na jejich kontaktní adresu
17+
18+
Toto chování lze řídit pomocí proměnných prostředí:
19+
20+
- `ATTACH_CALL_LIST_PDF=false` – zakáže připojování PDF k objednávkám/fakturám
21+
- `SEND_CALL_LIST_EMAIL=false` – zakáže odesílání emailů zákazníkům
22+
23+
**Optimalizace:** PDF se generuje pouze pokud bude použito. Pokud jsou obě možnosti zakázané, PDF se vůbec negeneruje, což šetří čas a systémové prostředky.
24+
25+
Výchozí hodnoty jsou `true` pro zachování kompatibility se stávajícím chováním.ntaci k integraci IPEX ↔ AbraFlexi se zaměřením na logiku minimální fakturace.
426

527
## Logika minimální fakturace (Invoicing Threshold)
628

@@ -18,6 +40,8 @@ Aby se nevystavovaly zbytečně malé faktury, integrace používá konfigurovat
1840

1941
### Používané proměnné prostředí
2042

43+
#### Základní konfigurace
44+
2145
- `ABRAFLEXI_MINIMAL_INVOICING` – limit pro fakturaci
2246
- `ABRAFLEXI_PRODUCT` – kód produktu, který musí být v objednávce přítomen
2347
- `ABRAFLEXI_ORDERTYPE` – typ objednávkového dokladu
@@ -26,6 +50,21 @@ Aby se nevystavovaly zbytečně malé faktury, integrace používá konfigurovat
2650
- `ABRAFLEXI_SEND` – zda označit fakturu k odeslání e‑mailem
2751
- `ABRAFLEXI_CREATE_EMPTY_ORDERS` – vytváření prázdných (nulových) objednávek
2852

53+
#### Řízení PDF a emailů
54+
55+
- `ATTACH_CALL_LIST_PDF` – povolit/zakázat připojování PDF seznamu hovorů k objednávkám/fakturám (true/false, výchozí: true)
56+
- `SEND_CALL_LIST_EMAIL` – povolit/zakázat odesílání PDF emailem zákazníkům (true/false, výchozí: true)
57+
58+
**Poznámka:** PDF se generuje pouze pokud bude použito - tj. alespoň jedna z možností (`ATTACH_CALL_LIST_PDF` nebo `SEND_CALL_LIST_EMAIL`) je povolena.
59+
60+
#### Časové nastavení
61+
62+
- `MONTH_OFFSET` – posun měsíce pro zpracování (záporné hodnoty pro minulé měsíce, např. -1 pro minulý měsíc)
63+
64+
#### Výstup
65+
66+
- `RESULT_FILE` – cesta k souboru pro uložení výsledků zpracování
67+
2968
### Hraniční situace
3069

3170
- Součet přesně rovný limitu → nevystaví se (protože podmínka je `>`)

multiflexi/abraflexi-ipex-postpaid-invoices.multiflexi.app.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@
127127
"description": "Month offset for processing (negative values for past months, e.g. -1 for last month)",
128128
"defval": -1,
129129
"required": false
130+
},
131+
"ATTACH_CALL_LIST_PDF": {
132+
"type": "bool",
133+
"description": "Enable attaching PDF call list to invoices in AbraFlexi",
134+
"defval": "True",
135+
"required": false
136+
},
137+
"SEND_CALL_LIST_EMAIL": {
138+
"type": "bool",
139+
"description": "Enable sending call list PDF by email to customers",
140+
"defval": "True",
141+
"required": false
130142
}
131143
},
132144
"multiflexi": "1.20.0"

multiflexi/abraflexi-ipex-postpaid-orders.multiflexi.app.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@
127127
"description": "Month offset for processing (negative values for past months, e.g. -1 for last month)",
128128
"defval": -1,
129129
"required": false
130+
},
131+
"ATTACH_CALL_LIST_PDF": {
132+
"type": "bool",
133+
"description": "Enable attaching PDF call list to orders in AbraFlexi",
134+
"defval": "True",
135+
"required": false
136+
},
137+
"SEND_CALL_LIST_EMAIL": {
138+
"type": "bool",
139+
"description": "Enable sending call list PDF by email to customers",
140+
"defval": "True",
141+
"required": false
130142
}
131143
},
132144
"multiflexi": "1.20.0"

multiflexi/abraflexi-ipex-prepaid.multiflexi.app.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@
112112
"description": "Month offset for processing (negative values for past months, e.g. -1 for last month)",
113113
"defval": -1,
114114
"required": false
115+
},
116+
"SEND_CALL_LIST_EMAIL": {
117+
"type": "bool",
118+
"description": "Enable sending call list PDF by email to customers",
119+
"defval": "True",
120+
"required": false
115121
}
116122
},
117123
"multiflexi": "1.10.2.0"

src/AbraFlexiIpex/Ipex.php

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -717,20 +717,38 @@ public function createOrder(array $invoiceRaw)
717717
$order->sync() ? 'success' : 'error',
718718
);
719719

720-
$pdfCallLog = $this->pdfCallLog((int) $invoiceRaw['customerId'], $order->getDataValue('nazFirmy'));
721-
722-
$callLogFilename = sys_get_temp_dir().'/'.str_replace(
723-
[' ', ':'],
724-
['_', '-'],
725-
\Ease\Functions::rip($order->getDataValue('popis')),
726-
).'.pdf';
727-
728-
file_put_contents($callLogFilename, $pdfCallLog);
729-
\AbraFlexi\Priloha::addAttachmentFromFile($order, $callLogFilename);
720+
// Check what actions are enabled for call list processing
721+
$attachPdfToOrder = strtolower(\Ease\Shared::cfg('ATTACH_CALL_LIST_PDF', 'true')) === 'true';
722+
$sendByEmail = strtolower(\Ease\Shared::cfg('SEND_CALL_LIST_EMAIL', 'true')) === 'true';
723+
724+
// Generate PDF only if it will be used (attached to order OR sent by email)
725+
$shouldGeneratePdf = $attachPdfToOrder || $sendByEmail;
726+
727+
if ($shouldGeneratePdf) {
728+
$pdfCallLog = $this->pdfCallLog((int) $invoiceRaw['customerId'], $order->getDataValue('nazFirmy'));
729+
730+
$callLogFilename = sys_get_temp_dir().'/'.str_replace(
731+
[' ', ':'],
732+
['_', '-'],
733+
\Ease\Functions::rip($order->getDataValue('popis')),
734+
).'.pdf';
735+
736+
file_put_contents($callLogFilename, $pdfCallLog);
737+
738+
// Attach to order only if enabled
739+
if ($attachPdfToOrder) {
740+
\AbraFlexi\Priloha::addAttachmentFromFile($order, $callLogFilename);
741+
}
730742

731-
$this->sendCallListByMail($order, $callLogFilename);
743+
// Send by email only if enabled
744+
if ($sendByEmail) {
745+
$this->sendCallListByMail($order, $callLogFilename);
746+
}
732747

733-
unlink($callLogFilename);
748+
unlink($callLogFilename);
749+
} else {
750+
$this->addStatusMessage('PDF call list generation skipped (not needed for attachment or email)', 'info');
751+
}
734752
} else {
735753
$order->addStatusMessage($this->counter.$invoiceRaw['customerName'].' 0,-', 'debug');
736754
}

src/VoIPPrepaidCalls.php

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -84,41 +84,57 @@
8484
['style' => 'font-size: small'],
8585
));
8686

87-
$mpdfTmpDir = sys_get_temp_dir().'/mpdf';
87+
// Check if email sending is enabled - only generate PDF if it will be sent
88+
$sendByEmail = strtolower(Shared::cfg('SEND_CALL_LIST_EMAIL', 'true')) === 'true';
8889

89-
if (!file_exists($mpdfTmpDir)) {
90-
mkdir($mpdfTmpDir);
91-
}
90+
$mailSent = false;
9291

93-
$html2pdf = new \Mpdf\Mpdf([
94-
'default_font_size' => 8,
95-
'default_font' => 'dejavusans',
96-
'tempDir' => $mpdfTmpDir,
97-
]);
98-
$html2pdf->setDefaultFont('Helvetica');
99-
$html2pdf->writeHTML((string) $report);
100-
$pdfFilename = $mpdfTmpDir.'/'.$invoiceRaw['customerId'].'_'._('Calls').'_'.$startDate->format('Y-m-d').'_'.$now->format('Y-m-d').'.pdf';
101-
102-
$html2pdf->Output($pdfFilename, \Mpdf\Output\Destination::FILE);
103-
104-
$postman = new Mailer(
105-
$email,
106-
_('Prepaid Calls listing').' '.$range,
107-
_('Prepaid Calls for last month'),
108-
);
109-
$postman->addFile($pdfFilename, 'application/pdf');
92+
if ($sendByEmail) {
93+
$mpdfTmpDir = sys_get_temp_dir().'/mpdf';
94+
95+
if (!file_exists($mpdfTmpDir)) {
96+
mkdir($mpdfTmpDir);
97+
}
11098

111-
unlink($pdfFilename);
99+
$html2pdf = new \Mpdf\Mpdf([
100+
'default_font_size' => 8,
101+
'default_font' => 'dejavusans',
102+
'tempDir' => $mpdfTmpDir,
103+
]);
104+
$html2pdf->setDefaultFont('Helvetica');
105+
$html2pdf->writeHTML((string) $report);
106+
$pdfFilename = $mpdfTmpDir.'/'.$invoiceRaw['customerId'].'_'._('Calls').'_'.$startDate->format('Y-m-d').'_'.$now->format('Y-m-d').'.pdf';
107+
108+
$html2pdf->Output($pdfFilename, \Mpdf\Output\Destination::FILE);
109+
110+
if ($sendByEmail) {
111+
$postman = new Mailer(
112+
$email,
113+
_('Prepaid Calls listing').' '.$range,
114+
_('Prepaid Calls for last month'),
115+
);
116+
$postman->addFile($pdfFilename, 'application/pdf');
117+
$mailSent = $postman->send();
118+
}
119+
120+
unlink($pdfFilename);
121+
} else {
122+
$grabber->addStatusMessage('PDF call list generation skipped (email sending disabled)', 'info');
123+
}
112124

113-
$jsonReportData[$adresar->getRecordCode()]['mail'] = $postman->send();
125+
$jsonReportData[$adresar->getRecordCode()]['mail'] = $mailSent;
114126
$jsonReportData[$adresar->getRecordCode()]['period'] = $range;
115127
$jsonReportData[$adresar->getRecordCode()]['totalAmount'] = $totalAmount;
116128
$jsonReportData[$adresar->getRecordCode()]['callsCount'] = \count($calls);
129+
$jsonReportData[$adresar->getRecordCode()]['pdfGenerated'] = $sendByEmail;
130+
$jsonReportData[$adresar->getRecordCode()]['emailSent'] = $sendByEmail && $mailSent;
117131
} else {
118132
$jsonReportData[$adresar->getRecordCode()]['mail'] = false;
119133
$jsonReportData[$adresar->getRecordCode()]['period'] = null;
120134
$jsonReportData[$adresar->getRecordCode()]['totalAmount'] = null;
121135
$jsonReportData[$adresar->getRecordCode()]['callsCount'] = 0;
136+
$jsonReportData[$adresar->getRecordCode()]['pdfGenerated'] = false;
137+
$jsonReportData[$adresar->getRecordCode()]['emailSent'] = false;
122138
$grabber->addStatusMessage(
123139
$invoiceRaw['customerName'].' without extID',
124140
'warning',

0 commit comments

Comments
 (0)