128 lines
3.8 KiB
PHP
128 lines
3.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace External\PompoBundle\Util\Incomaker;
|
|
|
|
use External\PompoBundle\Util\Configuration;
|
|
use KupShop\IncomakerBundle\Util\XMLElements\ContactXMLElement;
|
|
use Query\Operator;
|
|
|
|
class PompoContactXMLElement extends ContactXMLElement
|
|
{
|
|
private Configuration $configuration;
|
|
|
|
public function __construct(Configuration $configuration)
|
|
{
|
|
$this->configuration = $configuration;
|
|
}
|
|
|
|
protected function getUsers(): array
|
|
{
|
|
$users = parent::getUsers();
|
|
|
|
// nafetchovat dodatecna data pro pompo
|
|
if ($this->configuration->isPompo()) {
|
|
$this->fetchUsersCards($users);
|
|
$this->fetchUsersChildren($users);
|
|
$this->fetchUserDRSId($users);
|
|
}
|
|
|
|
return $users;
|
|
}
|
|
|
|
protected function getCustomFields(array &$user)
|
|
{
|
|
$customFields = parent::getCustomFields($user);
|
|
|
|
foreach ($user['cards'] ?? [] as $i => $card) {
|
|
$customFields['card_code_'.$i] = ['key' => 'card', 'group' => 'card'.$i, 'value' => $card['code']];
|
|
$customFields['card_isActive_'.$i] = ['key' => 'isActive', 'group' => 'card'.$i, 'value' => $card['active']];
|
|
}
|
|
|
|
foreach ($user['children'] ?? [] as $i => $child) {
|
|
try {
|
|
$birthdate = (new \DateTime($child['date_birth']))->format('Y-m-d');
|
|
} catch (\Throwable $e) {
|
|
$birthdate = '';
|
|
}
|
|
|
|
$customFields['child_name_'.$i] = ['key' => 'name', 'group' => 'child'.$i, 'value' => $child['name']];
|
|
$customFields['child_birthday_'.$i] = ['key' => 'birthday', 'group' => 'child'.$i, 'value' => $birthdate];
|
|
$customFields['child_gender_'.$i] = ['key' => 'gender', 'group' => 'child'.$i, 'value' => $child['gender']];
|
|
}
|
|
|
|
$customFields['pompoId'] = ['key' => 'pompoId', 'value' => $user['pompoId'] ?? null];
|
|
|
|
unset($user['cards'], $user['children'], $user['pompoId']);
|
|
|
|
return $customFields;
|
|
}
|
|
|
|
/**
|
|
* Nafetchuje deti k uzivatelum.
|
|
*/
|
|
private function fetchUsersChildren(array &$users): void
|
|
{
|
|
$userIds = array_map(function ($x) { return $x['id']; }, $users);
|
|
|
|
$qb = sqlQueryBuilder()
|
|
->select('id_user, name, gender, date_birth')
|
|
->from('users_family')
|
|
->where(Operator::inIntArray($userIds, 'id_user'));
|
|
|
|
$children = [];
|
|
foreach ($qb->execute() as $item) {
|
|
$children[$item['id_user']][] = $item;
|
|
}
|
|
|
|
foreach ($users as &$user) {
|
|
$user['children'] = $children[$user['id']] ?? [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Nafetchuje zakaznicke karty k uzivatelum.
|
|
*/
|
|
private function fetchUsersCards(array &$users): void
|
|
{
|
|
$userIds = array_map(function ($x) { return $x['id']; }, $users);
|
|
|
|
$qb = sqlQueryBuilder()
|
|
->select('id_user, code, active')
|
|
->from('user_cards')
|
|
->where(Operator::inIntArray($userIds, 'id_user'));
|
|
|
|
$cards = [];
|
|
foreach ($qb->execute() as $item) {
|
|
$cards[$item['id_user']][] = $item;
|
|
}
|
|
|
|
foreach ($users as &$user) {
|
|
$user['cards'] = $cards[$user['id']] ?? [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Nafetchuje cislo zakaznika (id_drs).
|
|
*/
|
|
private function fetchUserDRSId(array &$users): void
|
|
{
|
|
$userIds = array_map(function ($x) { return $x['id']; }, $users);
|
|
|
|
$qb = sqlQueryBuilder()
|
|
->select('id_drs, id_user')
|
|
->from('drs_users')
|
|
->where(Operator::inIntArray($userIds, 'id_user'));
|
|
|
|
$pompoIds = [];
|
|
foreach ($qb->execute() as $item) {
|
|
$pompoIds[$item['id_user']] = $item['id_drs'];
|
|
}
|
|
|
|
foreach ($users as &$user) {
|
|
$user['pompoId'] = $pompoIds[$user['id']] ?? null;
|
|
}
|
|
}
|
|
}
|