Skip to content

Commit 9569bc6

Browse files
delcroipsniedzielskiJan
authored
MERGING develop into release/24.04 (#53)
* 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 * CM-853: added document related to bill entity * CM-853: fixed payroll related instance * CM-853: added benefit relation into quersyet to fetch attachment by payroll * CM-853: changed object type to nested type * CM-853: added invoice report/synch data --------- Co-authored-by: sniedzielski <[email protected]> Co-authored-by: sniedzielski <[email protected]> Co-authored-by: Jan <[email protected]>
1 parent 06adb4c commit 9569bc6

File tree

2 files changed

+266
-0
lines changed

2 files changed

+266
-0
lines changed

payroll/documents.py

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
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 (
8+
Payroll,
9+
PayrollBenefitConsumption,
10+
BenefitConsumption,
11+
BenefitAttachment
12+
)
13+
from payment_cycle.models import PaymentCycle
14+
from contribution_plan.models import PaymentPlan
15+
from individual.models import Individual
16+
from invoice.models import Bill
17+
18+
@registry.register_document
19+
class PayrollDocument(Document):
20+
name = opensearch_fields.KeywordField()
21+
status = opensearch_fields.KeywordField()
22+
payment_method = opensearch_fields.KeywordField()
23+
date_created = opensearch_fields.DateField()
24+
payment_plan = opensearch_fields.ObjectField(properties={
25+
'code': opensearch_fields.KeywordField(),
26+
'name': opensearch_fields.KeywordField(),
27+
})
28+
payment_cycle = opensearch_fields.ObjectField(properties={
29+
'code': opensearch_fields.KeywordField(),
30+
'status': opensearch_fields.KeywordField(),
31+
'start_date': opensearch_fields.DateField(),
32+
'end_date': opensearch_fields.DateField(),
33+
})
34+
35+
class Index:
36+
name = 'payroll'
37+
settings = {
38+
'number_of_shards': 1,
39+
'number_of_replicas': 0
40+
}
41+
auto_refresh = True
42+
43+
class Django:
44+
model = Payroll
45+
fields = [
46+
'id'
47+
]
48+
related_models = [PaymentPlan, PaymentCycle]
49+
queryset_pagination = 5000
50+
51+
def get_instances_from_related(self, related_instance):
52+
if isinstance(related_instance, PaymentPlan):
53+
return related_instance.payroll_set.all()
54+
elif isinstance(related_instance, PaymentCycle):
55+
return related_instance.payroll_set.all()
56+
57+
58+
@registry.register_document
59+
class BenefitConsumptionDocument(Document):
60+
photo = opensearch_fields.KeywordField()
61+
code = opensearch_fields.KeywordField()
62+
date_due = opensearch_fields.DateField()
63+
date_created = opensearch_fields.DateField()
64+
receipt = opensearch_fields.KeywordField()
65+
amount = opensearch_fields.KeywordField()
66+
type = opensearch_fields.KeywordField()
67+
status = opensearch_fields.KeywordField()
68+
json_ext = opensearch_fields.ObjectField()
69+
individual = opensearch_fields.ObjectField(properties={
70+
'first_name': opensearch_fields.KeywordField(),
71+
'last_name': opensearch_fields.KeywordField(),
72+
'dob': opensearch_fields.DateField(),
73+
})
74+
75+
class Index:
76+
name = 'benefit_consumption'
77+
settings = {
78+
'number_of_shards': 1,
79+
'number_of_replicas': 0
80+
}
81+
auto_refresh = True
82+
83+
class Django:
84+
model = BenefitConsumption
85+
related_models = [Individual]
86+
fields = [
87+
'id'
88+
]
89+
queryset_pagination = 5000
90+
91+
def get_instances_from_related(self, related_instance):
92+
if isinstance(related_instance, Individual):
93+
return related_instance.benefit_consumption_set.all()
94+
95+
96+
@registry.register_document
97+
class PayrollBenefitConsumptionDocument(Document):
98+
payroll = opensearch_fields.ObjectField(properties={
99+
'name': opensearch_fields.KeywordField(),
100+
'status': opensearch_fields.KeywordField(),
101+
'payment_method': opensearch_fields.KeywordField(),
102+
'date_created': opensearch_fields.DateField(),
103+
'payment_plan': opensearch_fields.ObjectField(properties={
104+
'code': opensearch_fields.KeywordField(),
105+
'name': opensearch_fields.KeywordField(),
106+
}),
107+
'payment_cycle': opensearch_fields.ObjectField(properties={
108+
'code': opensearch_fields.KeywordField(),
109+
'status': opensearch_fields.KeywordField(),
110+
'start_date': opensearch_fields.DateField(),
111+
'end_date': opensearch_fields.DateField(),
112+
})
113+
})
114+
benefit = opensearch_fields.ObjectField(properties={
115+
'code': opensearch_fields.KeywordField(),
116+
'status': opensearch_fields.KeywordField(),
117+
'type': opensearch_fields.KeywordField(),
118+
'receipt': opensearch_fields.KeywordField(),
119+
'amount': opensearch_fields.KeywordField(),
120+
'photo': opensearch_fields.KeywordField(),
121+
'date_due': opensearch_fields.DateField(),
122+
'individual': opensearch_fields.ObjectField(properties={
123+
'first_name': opensearch_fields.KeywordField(),
124+
'last_name': opensearch_fields.KeywordField(),
125+
'dob': opensearch_fields.DateField(),
126+
})
127+
})
128+
129+
class Index:
130+
name = 'payroll_benefit_consumption'
131+
settings = {
132+
'number_of_shards': 1,
133+
'number_of_replicas': 0
134+
}
135+
auto_refresh = True
136+
137+
class Django:
138+
model = PayrollBenefitConsumption
139+
related_models = [Payroll, BenefitConsumption]
140+
fields = [
141+
'id'
142+
]
143+
queryset_pagination = 5000
144+
145+
def get_instances_from_related(self, related_instance):
146+
if isinstance(related_instance, Payroll):
147+
return PayrollBenefitConsumption.objects.filter(payroll=related_instance)
148+
elif isinstance(related_instance, BenefitConsumption):
149+
return PayrollBenefitConsumption.objects.filter(benefit=related_instance)
150+
151+
152+
@registry.register_document
153+
class BenefitAttachmentDocument(Document):
154+
bill = opensearch_fields.ObjectField(properties={
155+
'code': opensearch_fields.KeywordField(),
156+
'code_ext': opensearch_fields.KeywordField(),
157+
'code_tp': opensearch_fields.KeywordField(),
158+
'status': opensearch_fields.KeywordField(),
159+
'currency_code': opensearch_fields.KeywordField(),
160+
'note': opensearch_fields.KeywordField(),
161+
'terms': opensearch_fields.KeywordField(),
162+
'date_created': opensearch_fields.DateField(),
163+
'date_due': opensearch_fields.DateField(),
164+
'date_payed': opensearch_fields.DateField(),
165+
'amount_total': opensearch_fields.KeywordField(),
166+
})
167+
benefit = opensearch_fields.ObjectField(properties={
168+
'code': opensearch_fields.KeywordField(),
169+
'status': opensearch_fields.KeywordField(),
170+
'type': opensearch_fields.KeywordField(),
171+
'receipt': opensearch_fields.KeywordField(),
172+
'amount': opensearch_fields.KeywordField(),
173+
'photo': opensearch_fields.KeywordField(),
174+
'date_due': opensearch_fields.DateField(),
175+
'individual': opensearch_fields.ObjectField(properties={
176+
'first_name': opensearch_fields.KeywordField(),
177+
'last_name': opensearch_fields.KeywordField(),
178+
'dob': opensearch_fields.DateField(),
179+
})
180+
})
181+
payroll = opensearch_fields.NestedField(properties={
182+
'name': opensearch_fields.KeywordField(),
183+
'status': opensearch_fields.KeywordField(),
184+
'payment_method': opensearch_fields.KeywordField(),
185+
'date_created': opensearch_fields.DateField(),
186+
'payment_plan': opensearch_fields.ObjectField(properties={
187+
'code': opensearch_fields.KeywordField(),
188+
'name': opensearch_fields.KeywordField(),
189+
}),
190+
'payment_cycle': opensearch_fields.ObjectField(properties={
191+
'code': opensearch_fields.KeywordField(),
192+
'status': opensearch_fields.KeywordField(),
193+
'start_date': opensearch_fields.DateField(),
194+
'end_date': opensearch_fields.DateField(),
195+
})
196+
})
197+
198+
class Index:
199+
name = 'benefit_attachment'
200+
settings = {
201+
'number_of_shards': 1,
202+
'number_of_replicas': 0
203+
}
204+
auto_refresh = True
205+
206+
class Django:
207+
model = BenefitAttachment
208+
related_models = [Payroll, Bill, BenefitConsumption]
209+
fields = [
210+
'id'
211+
]
212+
queryset_pagination = 5000
213+
214+
def get_instances_from_related(self, related_instance):
215+
if isinstance(related_instance, Payroll):
216+
return BenefitAttachment.objects.filter(
217+
benefit__payrollbenefitconsumption__payroll=related_instance
218+
)
219+
elif isinstance(related_instance, Bill):
220+
return BenefitAttachment.objects.filter(bill=related_instance)
221+
elif isinstance(related_instance, BenefitConsumption):
222+
return BenefitAttachment.objects.filter(benefit=related_instance)

0 commit comments

Comments
 (0)