feat(portal): lead module, WHMCS sync report/contacts/mapping, service lifecycle email templates
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
3c7710f1de
commit
a443ec3bf6
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Integrations\Whmcs\Support;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Container\Attributes\Singleton;
|
||||
|
||||
#[Singleton]
|
||||
class SyncReport
|
||||
{
|
||||
/** @var array<int, array{entity: string, ref: string, whmcs_id: string, issue: string, detail: string}> */
|
||||
private array $notes = [];
|
||||
|
||||
private bool $batch = false;
|
||||
|
||||
public function note(string $entity, string $ref, int|string $whmcsId, string $issue, string $detail): void
|
||||
{
|
||||
$this->notes[] = ['entity' => $entity, 'ref' => $ref, 'whmcs_id' => (string) $whmcsId, 'issue' => $issue, 'detail' => $detail];
|
||||
}
|
||||
|
||||
public function beginBatch(): void
|
||||
{
|
||||
$this->batch = true;
|
||||
}
|
||||
|
||||
public function finishBatch(Command $command): void
|
||||
{
|
||||
$this->batch = false;
|
||||
$this->finish($command);
|
||||
}
|
||||
|
||||
public function finish(Command $command): void
|
||||
{
|
||||
if ($this->batch || $this->notes === []) {
|
||||
return;
|
||||
}
|
||||
|
||||
$summary = [];
|
||||
foreach ($this->notes as $note) {
|
||||
$key = $note['entity'] . ' / ' . $note['issue'];
|
||||
$summary[$key] = ($summary[$key] ?? 0) + 1;
|
||||
}
|
||||
ksort($summary);
|
||||
|
||||
$command->newLine();
|
||||
$command->warn('Ghi chú đồng bộ (' . count($this->notes) . ' mục):');
|
||||
$command->table(['Loại / vấn đề', 'Số lượng'], array_map(fn ($key, $count) => [$key, $count], array_keys($summary), $summary));
|
||||
$command->info('Chi tiết: ' . $this->writeCsv());
|
||||
|
||||
$this->notes = [];
|
||||
}
|
||||
|
||||
private function writeCsv(): string
|
||||
{
|
||||
$path = storage_path('logs/whmcs-sync-report-' . now()->format('Ymd-His-u') . '.csv');
|
||||
$handle = fopen($path, 'w');
|
||||
fwrite($handle, "\xEF\xBB\xBF");
|
||||
fputcsv($handle, ['entity', 'ref', 'whmcs_id', 'issue', 'detail']);
|
||||
foreach ($this->notes as $note) {
|
||||
fputcsv($handle, $note);
|
||||
}
|
||||
fclose($handle);
|
||||
|
||||
return $path;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user