Skip to content

Commit 4f3ecdf

Browse files
authored
CM-840: synchronization of basic data about payments (#50)
* CM-840: added document for opensearch payroll * CM-840: fixed content type for payment cycle document * CM-840: fixed content type for payment cycle document * CM-840: added ndjson dashboard data with new payroll indexes
1 parent c9b5c7b commit 4f3ecdf

File tree

2 files changed

+183
-0
lines changed

2 files changed

+183
-0
lines changed

payroll/documents.py

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
from django.apps import apps
2+
3+
# Check if the 'opensearch_reports' app is in INSTALLED_APPS
4+
if 'opensearch_reports' in apps.app_configs:
5+
from django_opensearch_dsl import Document, fields as opensearch_fields
6+
from django_opensearch_dsl.registries import registry
7+
from payroll.models import Payroll, BenefitConsumption, PayrollBenefitConsumption
8+
from payment_cycle.models import PaymentCycle
9+
from contribution_plan.models import PaymentPlan
10+
from individual.models import Individual
11+
12+
@registry.register_document
13+
class PayrollDocument(Document):
14+
name = opensearch_fields.KeywordField()
15+
status = opensearch_fields.KeywordField()
16+
payment_method = opensearch_fields.DateField()
17+
date_created = opensearch_fields.DateField()
18+
payment_plan = opensearch_fields.ObjectField(properties={
19+
'code': opensearch_fields.KeywordField(),
20+
'name': opensearch_fields.KeywordField(),
21+
})
22+
payment_cycle = opensearch_fields.ObjectField(properties={
23+
'code': opensearch_fields.KeywordField(),
24+
'status': opensearch_fields.KeywordField(),
25+
'start_date': opensearch_fields.DateField(),
26+
'end_date': opensearch_fields.DateField(),
27+
})
28+
29+
class Index:
30+
name = 'payroll'
31+
settings = {
32+
'number_of_shards': 1,
33+
'number_of_replicas': 0
34+
}
35+
auto_refresh = True
36+
37+
class Django:
38+
model = Payroll
39+
fields = [
40+
'id'
41+
]
42+
related_models = [PaymentPlan, PaymentCycle]
43+
queryset_pagination = 5000
44+
45+
def get_instances_from_related(self, related_instance):
46+
if isinstance(related_instance, PaymentPlan):
47+
return related_instance.payroll_set.all()
48+
elif isinstance(related_instance, PaymentCycle):
49+
return related_instance.payroll_set.all()
50+
51+
52+
@registry.register_document
53+
class BenefitConsumptionDocument(Document):
54+
photo = opensearch_fields.KeywordField()
55+
code = opensearch_fields.KeywordField()
56+
date_due = opensearch_fields.DateField()
57+
date_created = opensearch_fields.DateField()
58+
receipt = opensearch_fields.KeywordField()
59+
amount = opensearch_fields.KeywordField()
60+
type = opensearch_fields.KeywordField()
61+
status = opensearch_fields.KeywordField()
62+
json_ext = opensearch_fields.ObjectField()
63+
individual = opensearch_fields.ObjectField(properties={
64+
'first_name': opensearch_fields.KeywordField(),
65+
'last_name': opensearch_fields.KeywordField(),
66+
'dob': opensearch_fields.DateField(),
67+
})
68+
69+
class Index:
70+
name = 'benefit_consumption'
71+
settings = {
72+
'number_of_shards': 1,
73+
'number_of_replicas': 0
74+
}
75+
auto_refresh = True
76+
77+
class Django:
78+
model = BenefitConsumption
79+
related_models = [Individual]
80+
fields = [
81+
'id'
82+
]
83+
queryset_pagination = 5000
84+
85+
def get_instances_from_related(self, related_instance):
86+
if isinstance(related_instance, Individual):
87+
return related_instance.benefit_consumption_set.all()
88+
89+
90+
@registry.register_document
91+
class PayrollBenefitConsumptionDocument(Document):
92+
payroll = opensearch_fields.ObjectField(properties={
93+
'name': opensearch_fields.KeywordField(),
94+
'status': opensearch_fields.KeywordField(),
95+
'payment_method': opensearch_fields.DateField(),
96+
'date_created': opensearch_fields.DateField(),
97+
'payment_plan': opensearch_fields.ObjectField(properties={
98+
'code': opensearch_fields.KeywordField(),
99+
'name': opensearch_fields.KeywordField(),
100+
}),
101+
'payment_cycle': opensearch_fields.ObjectField(properties={
102+
'code': opensearch_fields.KeywordField(),
103+
'status': opensearch_fields.KeywordField(),
104+
'start_date': opensearch_fields.DateField(),
105+
'end_date': opensearch_fields.DateField(),
106+
})
107+
})
108+
benefit = opensearch_fields.ObjectField(properties={
109+
'code': opensearch_fields.KeywordField(),
110+
'status': opensearch_fields.KeywordField(),
111+
'type': opensearch_fields.KeywordField(),
112+
'receipt': opensearch_fields.KeywordField(),
113+
'amount': opensearch_fields.KeywordField(),
114+
'photo': opensearch_fields.KeywordField(),
115+
'date_due': opensearch_fields.DateField(),
116+
'individual': opensearch_fields.ObjectField(properties={
117+
'first_name': opensearch_fields.KeywordField(),
118+
'last_name': opensearch_fields.KeywordField(),
119+
'dob': opensearch_fields.DateField(),
120+
})
121+
})
122+
123+
class Index:
124+
name = 'payroll_benefit_consumption'
125+
settings = {
126+
'number_of_shards': 1,
127+
'number_of_replicas': 0
128+
}
129+
auto_refresh = True
130+
131+
class Django:
132+
model = PayrollBenefitConsumption
133+
related_models = [Payroll, BenefitConsumption]
134+
fields = [
135+
'id'
136+
]
137+
queryset_pagination = 5000
138+
139+
def get_instances_from_related(self, related_instance):
140+
if isinstance(related_instance, Payroll):
141+
return PayrollBenefitConsumption.objects.filter(payroll=related_instance)
142+
elif isinstance(related_instance, BenefitConsumption):
143+
return PayrollBenefitConsumption.objects.filter(benefit=related_instance)

0 commit comments

Comments
 (0)