Skip to content

Commit

Permalink
Fix completed items report + minors
Browse files Browse the repository at this point in the history
  • Loading branch information
a-menshchikov committed Jun 13, 2024
1 parent b33a497 commit d39ea82
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 33 deletions.
2 changes: 1 addition & 1 deletion shared/homeless/src/Admin/ClientAdmin.php
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ public function getContractStatusFilter(ProxyQueryInterface $queryBuilder, strin

$queryBuilder->leftJoin('c1.status', 's1');
$queryBuilder->andWhere('s1.id IN (:statuses)');
$queryBuilder->setParameter('statuses', array_values($data->getValue()->toArray()));
$queryBuilder->setParameter('statuses', $data->getValue()->toArray());

return true;
}
Expand Down
12 changes: 12 additions & 0 deletions shared/homeless/src/Entity/ContractStatus.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ class ContractStatus extends BaseEntity
* SyncId статуса "В процессе выполнения"
*/
public const int IN_PROCESS = 1;
/**
* SyncId статуса "Не выполнен по причине отказа клиента"
*/
public const int REJECTED_CLIENT_REFUSAL = 5;
/**
* SyncId статуса "Не выполнен по другим причинам"
*/
public const int REJECTED_OTHER = 6;
/**
* SyncId статуса "Не выполнен по причине неявки клиента"
*/
public const int REJECTED_CLIENT_NON_APPEARANCE = 8;

#[ORM\Column(type: 'string', nullable: true)]
private ?string $name = null;
Expand Down
4 changes: 2 additions & 2 deletions shared/homeless/src/Repository/CertificateTypeRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ public function getAvailableForCertificate(Certificate $certificate): array
$queryBuilder = $this->createQueryBuilder('t')
->orderBy('t.sort', 'ASC')
->where('t.syncId IN (:types)')
->setParameter('types', array_values([
->setParameter('types', [
CertificateType::REGISTRATION,
CertificateType::TRAVEL,
]))
])
;

if (!$certificate->getClient()->hasRegistrationDocument()) {
Expand Down
92 changes: 62 additions & 30 deletions shared/homeless/src/Service/ReportService.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

namespace App\Service;

use App\Entity\ContractStatus;
use Doctrine\DBAL\ArrayParameterType;
use Doctrine\DBAL\Driver\Exception as DBALDriverException;
use Doctrine\DBAL\Exception as DBALException;
use Doctrine\ORM\EntityManagerInterface;
Expand Down Expand Up @@ -120,19 +122,19 @@ public function getClients(
AND c.created_at >= :createClientdateFrom
AND c.created_at <= :createClientFromTo
');
$stmt->bindValue(':createServicedateFrom', $createServicedateFrom ? date('Y-m-d', strtotime($createServicedateFrom)) : '1960-01-01');
$stmt->bindValue(':createServiceFromTo', $createServiceFromTo ? date('Y-m-d', strtotime($createServiceFromTo)) : date('Y-m-d'));
$stmt->bindValue(':createClientdateFrom', $createClientdateFrom ? date('Y-m-d', strtotime($createClientdateFrom)) : '1960-01-01');
$stmt->bindValue(':createClientFromTo', $createClientFromTo ? date('Y-m-d', strtotime($createClientFromTo)) : date('Y-m-d'));
$stmt->bindValue('createServicedateFrom', $createServicedateFrom ? date('Y-m-d', strtotime($createServicedateFrom)) : '1960-01-01');
$stmt->bindValue('createServiceFromTo', $createServiceFromTo ? date('Y-m-d', strtotime($createServiceFromTo)) : date('Y-m-d'));
$stmt->bindValue('createClientdateFrom', $createClientdateFrom ? date('Y-m-d', strtotime($createClientdateFrom)) : '1960-01-01');
$stmt->bindValue('createClientFromTo', $createClientFromTo ? date('Y-m-d', strtotime($createClientFromTo)) : date('Y-m-d'));
} else {
$stmt = $this->entityManager->getConnection()->prepare('
SELECT c.id
FROM client c
WHERE c.created_at >= :createClientdateFrom
AND c.created_at <= :createClientFromTo
');
$stmt->bindValue(':createClientdateFrom', $createClientdateFrom ? date('Y-m-d', strtotime($createClientdateFrom)) : '1960-01-01');
$stmt->bindValue(':createClientFromTo', $createClientFromTo ? date('Y-m-d', strtotime($createClientFromTo)) : date('Y-m-d'));
$stmt->bindValue('createClientdateFrom', $createClientdateFrom ? date('Y-m-d', strtotime($createClientdateFrom)) : '1960-01-01');
$stmt->bindValue('createClientFromTo', $createClientFromTo ? date('Y-m-d', strtotime($createClientFromTo)) : date('Y-m-d'));
}

return $stmt->executeQuery()->fetchAllAssociative();
Expand Down Expand Up @@ -166,10 +168,10 @@ private function oneOffServices(
GROUP BY st.id
ORDER BY st.sort
');
$stmt->bindValue(':dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue(':dateTo', $dateTo ?: date('Y-m-d'));
$stmt->bindValue('dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue('dateTo', $dateTo ?: date('Y-m-d'));
if ($userId) {
$stmt->bindValue(':userId', $userId);
$stmt->bindValue('userId', $userId);
}

return $stmt->executeQuery()->fetchAllNumeric();
Expand All @@ -189,7 +191,40 @@ private function completedItems(
'сколько раз она была предоставлена',
'скольким людям она была предоставлена',
]]);
$stmt = $this->entityManager->getConnection()->prepare('
$excludeStatuses = [
ContractStatus::IN_PROCESS,
ContractStatus::REJECTED_CLIENT_REFUSAL,
ContractStatus::REJECTED_OTHER,
ContractStatus::REJECTED_CLIENT_NON_APPEARANCE,
];

if ($userId) {
return $this->entityManager->getConnection()->executeQuery('
SELECT cit.name,
COUNT(DISTINCT i.id) all_count,
COUNT(DISTINCT c.client_id) client_count
FROM contract_item i
JOIN contract c
ON i.contract_id = c.id
JOIN contract_item_type cit
ON i.type_id = cit.id
WHERE c.status_id NOT IN (:excludeStatuses)
AND i.date >= :dateFrom
AND i.date <= :dateTo
AND ((i.created_by_id IS NOT NULL AND i.created_by_id = :userId) OR (i.created_by_id IS NULL AND c.created_by_id = :userId))
GROUP BY i.type_id
ORDER BY cit.sort
', [
'excludeStatuses' => $excludeStatuses,
'dateFrom' => $dateFrom ?: '1960-01-01',
'dateTo' => $dateTo ?: date('Y-m-d'),
'userId' => $userId,
], [
'excludeStatuses' => ArrayParameterType::INTEGER,
])->fetchAllNumeric();
}

return $this->entityManager->getConnection()->executeQuery('
SELECT cit.name,
COUNT(DISTINCT i.id) all_count,
COUNT(DISTINCT c.client_id) client_count
Expand All @@ -198,19 +233,16 @@ private function completedItems(
ON i.contract_id = c.id
JOIN contract_item_type cit
ON i.type_id = cit.id
WHERE i.date >= :dateFrom
WHERE c.status_id NOT IN (:excludeStatuses)
AND i.date >= :dateFrom
AND i.date <= :dateTo
'.($userId ? 'AND ((i.created_by_id IS NOT NULL AND i.created_by_id = :userId) OR (i.created_by_id IS NULL AND c.created_by_id = :userId))' : '').'
GROUP BY i.type_id
ORDER BY cit.sort
');
$stmt->bindValue(':dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue(':dateTo', $dateTo ?: date('Y-m-d'));
if ($userId) {
$stmt->bindValue(':userId', $userId);
}

return $stmt->executeQuery()->fetchAllNumeric();
', [
'excludeStatuses' => $excludeStatuses,
'dateFrom' => $dateFrom ?: '1960-01-01',
'dateTo' => $dateTo ?: date('Y-m-d'),
])->fetchAllNumeric();
}

/**
Expand Down Expand Up @@ -267,10 +299,10 @@ private function outgoing(
GROUP BY con.id, h.id
ORDER BY h.date_to DESC
');
$stmt->bindValue(':dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue(':dateTo', $dateTo ?: date('Y-m-d'));
$stmt->bindValue('dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue('dateTo', $dateTo ?: date('Y-m-d'));
if ($userId) {
$stmt->bindValue(':userId', $userId);
$stmt->bindValue('userId', $userId);
}

return $stmt->executeQuery()->fetchAllNumeric();
Expand Down Expand Up @@ -324,10 +356,10 @@ private function resultsOfSupport(
GROUP BY con.id
ORDER BY con.date_to DESC
');
$stmt->bindValue(':dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue(':dateTo', $dateTo ?: date('Y-m-d'));
$stmt->bindValue('dateFrom', $dateFrom ?: '1960-01-01');
$stmt->bindValue('dateTo', $dateTo ?: date('Y-m-d'));
if ($userId) {
$stmt->bindValue(':userId', $userId);
$stmt->bindValue('userId', $userId);
}

return $stmt->executeQuery()->fetchAllNumeric();
Expand Down Expand Up @@ -374,7 +406,7 @@ private function accompanying(mixed $userId): array
ORDER BY con.date_to DESC
');
if ($userId) {
$stmt->bindValue(':userId', $userId);
$stmt->bindValue('userId', $userId);
}

return $stmt->executeQuery()->fetchAllNumeric();
Expand Down Expand Up @@ -407,10 +439,10 @@ private function averageCompletedItems(
GROUP BY cit.name
ORDER BY cit.name
');
$stmt->bindValue(':dateFrom', $dateFrom ?: '2000-01-01');
$stmt->bindValue(':dateTo', $dateTo ?: date('Y-m-d'));
$stmt->bindValue('dateFrom', $dateFrom ?: '2000-01-01');
$stmt->bindValue('dateTo', $dateTo ?: date('Y-m-d'));
if ($userId) {
$stmt->bindValue(':userId', $userId);
$stmt->bindValue('userId', $userId);
}

return $stmt->executeQuery()->fetchAllNumeric();
Expand Down

0 comments on commit d39ea82

Please sign in to comment.