Refactor DocumentSignaturesTab to DocumentSignaturesPage + fix count bug
Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
@@ -51,6 +51,7 @@ type (
|
||||
|
||||
DocumentVersionSignaturesWithPeople []*DocumentVersionSignatureWithPeople
|
||||
)
|
||||
|
||||
func (pvs DocumentVersionSignature) CursorKey(orderBy DocumentVersionSignatureOrderField) page.CursorKey {
|
||||
switch orderBy {
|
||||
case DocumentVersionSignatureOrderFieldCreatedAt:
|
||||
@@ -447,3 +448,36 @@ SELECT EXISTS (
|
||||
|
||||
return signed, nil
|
||||
}
|
||||
|
||||
func (dvs *DocumentVersionSignatures) CountByDocumentVersionID(
|
||||
ctx context.Context,
|
||||
conn pg.Conn,
|
||||
scope Scoper,
|
||||
documentVersionID gid.GID,
|
||||
filter *DocumentVersionSignatureFilter,
|
||||
) (int, error) {
|
||||
q := `
|
||||
SELECT
|
||||
COUNT(id)
|
||||
FROM
|
||||
document_version_signatures
|
||||
WHERE
|
||||
%s
|
||||
AND document_version_id = @document_version_id
|
||||
AND %s
|
||||
`
|
||||
|
||||
q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment())
|
||||
|
||||
args := pgx.NamedArgs{"document_version_id": documentVersionID}
|
||||
maps.Copy(args, scope.SQLArguments())
|
||||
maps.Copy(args, filter.SQLArguments())
|
||||
|
||||
row := conn.QueryRow(ctx, q, args)
|
||||
var count int
|
||||
if err := row.Scan(&count); err != nil {
|
||||
return 0, fmt.Errorf("cannot scan count: %w", err)
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
@@ -20,29 +20,55 @@ import (
|
||||
|
||||
type (
|
||||
DocumentVersionSignatureFilter struct {
|
||||
states DocumentVersionSignatureStates
|
||||
states DocumentVersionSignatureStates
|
||||
activeContract *bool
|
||||
}
|
||||
)
|
||||
|
||||
func NewDocumentVersionSignatureFilter(states []DocumentVersionSignatureState) *DocumentVersionSignatureFilter {
|
||||
func NewDocumentVersionSignatureFilter(states []DocumentVersionSignatureState, activeContract *bool) *DocumentVersionSignatureFilter {
|
||||
return &DocumentVersionSignatureFilter{
|
||||
states: DocumentVersionSignatureStates(states),
|
||||
states: DocumentVersionSignatureStates(states),
|
||||
activeContract: activeContract,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *DocumentVersionSignatureFilter) SQLArguments() pgx.StrictNamedArgs {
|
||||
return pgx.StrictNamedArgs{
|
||||
"states": f.states,
|
||||
"states": f.states,
|
||||
"active_contract": f.activeContract,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *DocumentVersionSignatureFilter) SQLFragment() string {
|
||||
return `
|
||||
(
|
||||
CASE
|
||||
WHEN @states::policy_version_signature_state[] IS NOT NULL THEN
|
||||
state = ANY(@states::policy_version_signature_state[])
|
||||
ELSE TRUE
|
||||
END
|
||||
CASE
|
||||
WHEN @states::policy_version_signature_state[] IS NOT NULL THEN
|
||||
state = ANY(@states::policy_version_signature_state[])
|
||||
ELSE TRUE
|
||||
END
|
||||
AND
|
||||
CASE
|
||||
WHEN @active_contract::boolean IS NULL
|
||||
THEN TRUE
|
||||
ELSE EXISTS (
|
||||
SELECT 1
|
||||
FROM peoples p
|
||||
WHERE p.id = signed_by
|
||||
AND (
|
||||
(
|
||||
@active_contract::boolean = TRUE
|
||||
AND (
|
||||
p.contract_end_date IS NULL OR p.contract_end_date > NOW()
|
||||
)
|
||||
) OR (
|
||||
@active_contract::boolean = FALSE
|
||||
AND (
|
||||
p.contract_end_date IS NOT NULL AND p.contract_end_date <= NOW()
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
END
|
||||
)`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user