added fatturato
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* mago_probe_saledoc2_cli.php - SOLO LETTURA. Riepilogo dei documenti di vendita PER TIPO
|
||||
* (n. documenti, imponibile totale, registro IVA, causale...) per capire quali sono fatture
|
||||
* e quali note di credito. Non scrive nulla nel database.
|
||||
*
|
||||
* Uso: php mago_probe_saledoc2_cli.php --from=2026-01-01 > probe_saledoc2.txt 2>&1
|
||||
*/
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
http_response_code(403);
|
||||
exit('Solo da riga di comando');
|
||||
}
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
$dirs = [__DIR__, dirname(__DIR__), dirname(__DIR__, 2), dirname(__DIR__, 3)];
|
||||
foreach ($dirs as $d) {
|
||||
if (file_exists($d . '/vendor/autoload.php')) {
|
||||
require_once $d . '/vendor/autoload.php';
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (class_exists('Dotenv\Dotenv')) {
|
||||
foreach ($dirs as $d) {
|
||||
if (file_exists($d . '/.env')) {
|
||||
Dotenv\Dotenv::createImmutable($d)->safeLoad();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
require_once __DIR__ . '/class/MagoClient.php';
|
||||
|
||||
$opts = getopt('', ['from::']);
|
||||
$from = $opts['from'] ?? date('Y') . '-01-01';
|
||||
|
||||
$mago = MagoClient::fromEnv();
|
||||
try {
|
||||
$mago->login();
|
||||
|
||||
// 1) tutte le testate del periodo, solo i campi utili
|
||||
$fields = [
|
||||
'SaleDocId',
|
||||
'DocumentType',
|
||||
'DocNo',
|
||||
'DocumentDate',
|
||||
'CustSupp',
|
||||
'TaxJournal',
|
||||
'InvoicingTaxJournal',
|
||||
'InvRsn',
|
||||
'ShippingReason',
|
||||
'EIDocumentType',
|
||||
'InvoiceFollows',
|
||||
'Issued',
|
||||
'Cancelled',
|
||||
'PostedToAccounting',
|
||||
'CorrectionDocument',
|
||||
'StubBook'
|
||||
];
|
||||
$docs = [];
|
||||
$minId = PHP_INT_MAX;
|
||||
foreach (
|
||||
$mago->iterate('MA_SaleDoc', [
|
||||
'filters' => [['key' => 'DocumentDate', 'value' => $from, 'operator' => '>=']],
|
||||
'fields' => $fields,
|
||||
]) as $r
|
||||
) {
|
||||
$id = (int)$r['SaleDocId'];
|
||||
$docs[$id] = $r;
|
||||
$minId = min($minId, $id);
|
||||
}
|
||||
echo "Documenti dal $from: " . count($docs) . PHP_EOL;
|
||||
|
||||
// 2) importi: leggo i totali con SaleDocId >= il più piccolo del periodo
|
||||
$tax = [];
|
||||
if ($docs) {
|
||||
foreach (
|
||||
$mago->iterate('MA_SaleDocSummary', [
|
||||
'filters' => [['key' => 'SaleDocId', 'value' => (string)$minId, 'operator' => '>=']],
|
||||
'fields' => ['SaleDocId', 'TaxableAmount', 'TotalAmount'],
|
||||
]) as $r
|
||||
) {
|
||||
$tax[(int)$r['SaleDocId']] = (float)$r['TaxableAmount'];
|
||||
}
|
||||
}
|
||||
echo "Totali letti: " . count($tax) . PHP_EOL;
|
||||
|
||||
// 3) riepilogo per tipo
|
||||
$sum = [];
|
||||
$add = function (&$arr, $v) {
|
||||
$v = (string)$v;
|
||||
if ($v === '') $v = '(vuoto)';
|
||||
$arr[$v] = ($arr[$v] ?? 0) + 1;
|
||||
};
|
||||
foreach ($docs as $id => $r) {
|
||||
$t = (string)$r['DocumentType'];
|
||||
if (!isset($sum[$t])) $sum[$t] = [
|
||||
'documenti' => 0,
|
||||
'imponibile' => 0.0,
|
||||
'senza_importo' => 0,
|
||||
'annullati' => 0,
|
||||
'in_contabilita' => 0,
|
||||
'TaxJournal' => [],
|
||||
'InvRsn' => [],
|
||||
'ShippingReason' => [],
|
||||
'EIDocumentType' => [],
|
||||
'StubBook' => [],
|
||||
'InvoiceFollows' => [],
|
||||
'esempi' => []
|
||||
];
|
||||
$s = &$sum[$t];
|
||||
$s['documenti']++;
|
||||
if (isset($tax[$id])) $s['imponibile'] += $tax[$id];
|
||||
else $s['senza_importo']++;
|
||||
if (!empty($r['Cancelled'])) $s['annullati']++;
|
||||
if (!empty($r['PostedToAccounting'])) $s['in_contabilita']++;
|
||||
$add($s['TaxJournal'], $r['TaxJournal'] ?? '');
|
||||
$add($s['InvRsn'], $r['InvRsn'] ?? '');
|
||||
$add($s['ShippingReason'], $r['ShippingReason'] ?? '');
|
||||
$add($s['EIDocumentType'], $r['EIDocumentType'] ?? '');
|
||||
$add($s['StubBook'], $r['StubBook'] ?? '');
|
||||
$add($s['InvoiceFollows'], !empty($r['InvoiceFollows']) ? 'si' : 'no');
|
||||
if (count($s['esempi']) < 4) $s['esempi'][] = $r['DocNo'] . ' del ' . substr((string)$r['DocumentDate'], 0, 10) . ' cliente ' . $r['CustSupp'] . ' imponibile ' . ($tax[$id] ?? '?');
|
||||
unset($s);
|
||||
}
|
||||
ksort($sum);
|
||||
foreach ($sum as &$s) {
|
||||
$s['imponibile'] = round($s['imponibile'], 2);
|
||||
foreach (['TaxJournal', 'InvRsn', 'ShippingReason', 'EIDocumentType', 'StubBook', 'InvoiceFollows'] as $k) arsort($s[$k]);
|
||||
}
|
||||
unset($s);
|
||||
|
||||
echo PHP_EOL . '=== Riepilogo per DocumentType ===' . PHP_EOL;
|
||||
echo json_encode($sum, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
|
||||
} catch (Throwable $e) {
|
||||
fwrite(STDERR, PHP_EOL . 'ERRORE: ' . $e->getMessage() . PHP_EOL);
|
||||
} finally {
|
||||
$mago->logoff();
|
||||
echo PHP_EOL . 'Logoff eseguito.' . PHP_EOL;
|
||||
}
|
||||
Reference in New Issue
Block a user