{{-- «حسابداری» (slice 9; PRD پ۸ «صف ارسال به حسابداری», §4 «حسابداری», §8-ج; flows س۳, م۱۲): the push (switch, address, a test), the two keys — a new key is drawn ONCE, in the answer to its press — and the queue as a LIST of cards (it reads at 375 without sideways scrolling): the state in words («رسید» only for what the accounting accepted), the receiver's reason for a refusal, the body that was sent, and «ارسال دوباره» on the head event. every control is a plain form: it works without a script. --}} @extends('layouts.mz') @section('title', 'حسابداری') @section('credit', '1') @section('nav') @include('panel._nav') @endsection @section('content')

حسابداری

هر معاملهٔ تأییدشده، هر ابطال، هر سند دستی و هر مشتری تازه یا کد حساب تازه یک «رخداد» می‌سازد که به ترتیب شماره می‌خورد. حسابداری شما رخدادها را یا از ما می‌گیرد (ارسال امضاشده) یا خودش می‌خواند (رابط خواندن)؛ هر دو از همین یک صف‌اند و هیچ رخدادی جا نمی‌ماند.

@if ($newKey !== null)

{{ $newKey['kind'] === 'read' ? 'کلید تازهٔ رابط خواندن' : 'کلید تازهٔ امضا' }}

این کلید فقط همین یک بار نشان داده می‌شود. همین حالا آن را در تنظیمات حسابداری خود بگذارید؛ ما فقط {{ $newKey['kind'] === 'read' ? 'اثر آن را' : 'نسخهٔ رمزگذاری‌شدهٔ آن را' }} نگه می‌داریم و دیگر نمی‌توانیم نشانش بدهیم. کلید پیشین از همین لحظه پذیرفته نیست.

{{ $newKey['value'] }}

برداشتم، برگرد به حسابداری
@endif @if (session('mz.accounting_warning')) @endif

صف رخدادها

ارسال
{{ $push ? 'روشن' : 'خاموش' }}
رسیده
{{ \App\Support\Display::number($counts['sent']) }} رخداد
نرسیده
{{ \App\Support\Display::number($counts['waiting']) }} رخداد
@if ($health !== null)

ارسال روی رخداد {{ \App\Support\Display::number($health['seq']) }} ایستاده است: {{ $health['error'] }} رخدادهای بعدی پس از آن فرستاده می‌شوند. اگر نشانی یا حسابداری را درست کرده‌اید، «ارسال دوباره» را روی همان رخداد بزنید.

@endif
{{-- the push: switch + address, all or nothing; on needs an address and a signing key (App\Accounting\AccountingSettings) --}}
@csrf

ارسال به حسابداری

@if (session('mz.accounting_saved'))

{{ session('mz.accounting_saved') }}

@endif @if ($errors->accounting->any()) @endif

روشن که باشد، هر رخداد با امضای «کلید امضا» به نشانی زیر فرستاده می‌شود، به ترتیب و یکی‌یکی. اگر حسابداری نپذیرد، ۱، ۵، ۱۵ و ۶۰ دقیقه بعد و سپس هر ۶ ساعت دوباره فرستاده می‌شود و هیچ رخدادی پیش از آن نمی‌رود. هر رخداد شناسهٔ یکتای خودش را دارد، پس ارسال دوباره در حسابداری دو بار ثبت نمی‌شود.

@if ($errors->accounting->has('push'))

{{ $errors->accounting->first('push') }}

@endif
accounting->has('url')) aria-invalid="true" @endif> فقط https و نشانی عمومی، مثل https://books.example.com/mazanneh. خالی یعنی جایی فرستاده نمی‌شود. @if ($errors->accounting->has('url'))

{{ $errors->accounting->first('url') }}

@endif
@csrf

ارسال آزمایشی

یک رخداد آزمایشی با نوع ping و امضای واقعی به نشانی ذخیره‌شده می‌رود و پاسخ حسابداری همین‌جا گفته می‌شود. در صف نمی‌رود و با ارسال خاموش هم کار می‌کند.

{{-- the two keys: made by the system, shown once, «ساخت دوباره» revokes the old one at once --}}

کلیدها

کلیدها را مظنه می‌سازد و فقط یک بار نشان می‌دهد. اگر کلیدی گم شد یا لو رفت، «ساخت دوباره» را بزنید؛ کلید پیشین همان لحظه از کار می‌افتد و باید کلید تازه را در حسابداری بگذارید.

@foreach (['sign' => ['کلید امضا', 'حسابداری با آن امضای هر رخداد را می‌سنجد: سرآیند X-Mazanneh-Signature برابر است با sha256= و HMAC-SHA256 این کلید روی «X-Mazanneh-Timestamp» + «.» + بدنهٔ خام.'], 'read' => ['کلید رابط خواندن', 'حسابداری‌ای که خودش رخدادها را می‌خواند، این کلید را در سرآیند Authorization به شکل «Bearer کلید» می‌فرستد.']] as $kind => [$title, $hint])

{{ $title }}

{{ $hint }}

{{ $keys[$kind] !== null ? 'ساخته‌شده در ' . \App\Support\Display::date($keys[$kind]) . ' ساعت ' . \App\Support\Display::clock($keys[$kind]) : 'هنوز ساخته نشده است.' }}

@csrf
@endforeach

رابط خواندن

رخدادها به ترتیب شماره، از پس از شماره‌ای که می‌دهید (برای شروع ۰). پاسخ «next» را برای درخواست بعد بفرستید؛ «has_more» می‌گوید هنوز رخداد هست. بی کلید پاسخ ۴۰۱ و با کلید نادرست ۴۰۳ است.

GET {{ $apiUrl }}?after=0 Authorization: Bearer mz_…

رخدادها

@if ($rows === [] && $page->onFirstPage())

هنوز رخدادی نیست. نخستین معاملهٔ تأییدشده، سند دستی یا مشتری تازه اینجا می‌آید.

@elseif ($rows === [])

این صفحه ردیفی ندارد؛ صف کوتاه‌تر از این است.

@else
    @foreach ($rows as $row)
  1. {{ $row['word'] }}

    {{ $row['when'] }}

    {{-- slice 15ب: the customer and the summary's pieces, one line split by drawn rules (debt 50) --}} @if ($row['customer'] !== null){{ $row['customer'] }}@endif @foreach ($row['summary'] instanceof \App\Support\Meta ? $row['summary']->parts() : array_filter([(string) $row['summary']]) as $piece){{ $piece }}@endforeach

    @if ($row['detail'] !== null)

    {{ $row['detail'] }}

    @endif
    بدنهٔ رخداد
    {{ $row['json'] }}
    @if ($row['resendable'])
    @csrf
    @endif
  2. @endforeach
@if ($page->hasPages())
@if ($page->previousPageUrl())رخدادهای تازه‌تر@endif @if ($page->nextPageUrl())رخدادهای قدیمی‌تر@endif
@endif @endif
@endsection