Mahdee Rajon
File "IntegrationPaymentDTO.php"
Full Path: /var/www/html/back/app/DTO/IntegrationPaymentDTO.php
File size: 7.92 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\DTO;
use App\Domain\Payment\Enums\PaymentStatusEnum;
use App\Domain\Payment\Enums\PaymentTypeEnum;
use Illuminate\Support\Facades\Log;
class IntegrationPaymentDTO
{
private int $modelId;
private int $userId;
private string $organizationId;
private string $counterpartyId;
private string $accountId;
private string $name;
private string $status;
private string $paymentType;
private string $paymentDate;
private float $amount;
private string $id;
private string $actualDate;
private string $comment;
private const PAYMENT_TYPE_MAPPING = [
'ОплатаПоставщику' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ВозвратПокупателю' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеНалога' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'РасчетыПоКредитамИЗаймам' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ВозвратЗайма' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION,
'ВозвратКредита' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION,
'ВыдачаЗаймаКонтрагенту' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПрочиеРасчетыСКонтрагентами' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПереводНаДругойСчет' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'Депозит' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'СнятиеНаличных' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеПодотчетномуЛицу' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеЗП' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'КомиссияБанка' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеНалогаЗаТретьихЛиц' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ВыплатыСамозанятым' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеПоИсполнительномуЛистуРаботника' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'УдалитьВыплатаСамозанятому' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПеречислениеДепонентов' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПеречислениеДивидендов' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ВыдачаЗаймаРаботнику' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ЛичныеСредстваПредпринимателя' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПрочееСписание' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеЗаработнойПлатыРаботнику' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ПеречислениеСотрудникуПоДоговоруПодряда' => PaymentTypeEnum::PAYMENT_TYPE_PAYMENT,
'ОплатаПокупателя' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВозвратОтПоставщика' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПолучениеЗайма' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПолучениеКредита' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВозвратЗаймаКонтрагентом' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВозвратОтПодотчетногоЛица' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВозвратНалога' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ОплатаОтФакторинговойКомпании' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПереводСДругогоСчета' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВзносНаличными' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'Инкассация' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПриобретениеИностраннойВалюты' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПоступленияОтПродажиИностраннойВалюты' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПоступленияОтПродажПоПлатежнымКартамИБанковскимКредитам' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВозвратЗаймаРаботником' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ВзносВУставныйКапитал' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
'ПрочееПоступление' => PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C,
];
public function __construct(
int $modelId,
int $userId,
string $organizationId,
string $counterpartyId,
string $accountId,
string $name,
string $status,
string $paymentType,
string $paymentDate,
float $amount,
string $id,
string $actualDate,
string $comment,
)
{
$this->modelId = $modelId;
$this->userId = $userId;
$this->organizationId = $organizationId;
$this->counterpartyId = $counterpartyId;
$this->accountId = $accountId;
$this->name = $name;
$this->status = $status;
$this->paymentType = $this->normalizePaymentType($paymentType);
$this->paymentDate = $paymentDate;
$this->amount = $amount;
$this->id = $id;
$this->actualDate = $actualDate;
$this->comment = $comment;
}
private function normalizePaymentType(string $externalPaymentType): string
{
if (array_key_exists($externalPaymentType, self::PAYMENT_TYPE_MAPPING)) {
$mappedValue = self::PAYMENT_TYPE_MAPPING[$externalPaymentType];
return $mappedValue->value;
}
return 'UNKNOWN';
}
public static function fromArray($modelId, array $data): self
{
return new self(
$modelId ?? 0,
1,
$data['organization_id'] ?? 0,
$data['counterparty_id'] ?? 0,
$data['account_id'] ?? 0,
$data['appointment'] ?? 'Платеж из 1с',
'sent',
$data['type'] ?? '',
$data['date'] ?? '',
$data['amount'] ?? 0.0,
$data['id'] ?? '',
$data['payment_date'] ?? '',
$data['comment'] ?? '',
);
}
public function toArray($account, $counterpartyId, $organizationId): array
{
if ($this->paymentType == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C->value) {
$status = PaymentStatusEnum::STATUS_RECEIVED;
}
if ($this->paymentType == PaymentTypeEnum::PAYMENT_TYPE_MOVING->value) {
$status = PaymentStatusEnum::STATUS_PAID;
}
if ($this->paymentType == PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value) {
$status = PaymentStatusEnum::STATUS_ISSUED;
}
if ($this->paymentType == PaymentTypeEnum::PAYMENT_TYPE_PAYMENT->value) {
$status = PaymentStatusEnum::STATUS_PAID;
}
return [
'model_id' => $this->modelId,
'user_id' => $this->userId,
'organization_id' => $organizationId,
'counterparty_id' => $counterpartyId,
'account_id' => $account->id,
'name' => $this->name,
'status' => $status ?? $this->status,
'payment_type' => $this->paymentType,
'payment_date' => $this->paymentDate,
'amount' => $this->amount,
'external_id' => $this->id,
'actual_date' => $this->actualDate,
'purpose_of_payment_1c' => $this->name,
'note_1c' => $this->comment,
'account_debit_1c' => $account->name,
];
}
}