Skip to content

Commit 1b1e897

Browse files
dragos-dobresniedzielskiDamian BorowieckiJandborowiecki
authored
MERGING RELEASE branches (#17)
* CM-315: adjusted flow to have rejected bills in adaptor * CM-315: rejected bills empty * CM-315: added check for rejected bills * CM-315: added check for rejected bills * CM-315: extended reconciliation process * CM-315: fixed payroll date * CM-315: fixed payed status * CM-315: added print statements * CM-315: fixed getting attached bills in payroll * CM-315: fixed code receipt * CM-315: fixed payment origin * CM-315: fixed replace object function * CM-315: fixed content type in payment invoice creation * CM-315: fixed content type import * CM-315: added adjustments to process payments * CM-315: moved some part of code to separate methods * CM-315: fixed test sample for bill * CM-315: added to json_ext bill unpaid flag for unpaid bill coming to cycle * CM-316: added condition to processs unpaid payroll too * CI update * CI Update 2 * CM-315: changes after review * Added CI server deloy workflow (#13) * CM-316: added tests to check json field filtering in queryset * hotfix: added json_ext check if None * CM-342: filter only not assigned bills (#15) * CM-342: filter only not assigned bills * CM-342: provide more strict filtering * CM-342: add translations --------- Co-authored-by: Jan <[email protected]> * CM-336: remove field payment poin as mandatory in payroll (#16) Co-authored-by: Jan <[email protected]> --------- Co-authored-by: sniedzielski <[email protected]> Co-authored-by: Damian Borowiecki <[email protected]> Co-authored-by: Jan <[email protected]> Co-authored-by: Damian Borowiecki <[email protected]> Co-authored-by: Jan <[email protected]>
1 parent 646b078 commit 1b1e897

File tree

14 files changed

+250
-202
lines changed

14 files changed

+250
-202
lines changed

.github/workflows/ci.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Module CI
2+
on:
3+
pull_request:
4+
types: [opened, synchronize, reopened]
5+
push:
6+
branches:
7+
- main
8+
- 'release/**'
9+
- develop
10+
- 'feature/**'
11+
workflow_dispatch:
12+
inputs:
13+
comment:
14+
description: Just a simple comment to know the purpose of the manual build
15+
required: false
16+
17+
jobs:
18+
call:
19+
name: Default CI Flow
20+
uses: openimis/openimis-be_py/.github/workflows/ci_module.yml@develop
21+
secrets:
22+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
23+
with:
24+
SONAR_PROJECT_KEY: openimis_openimis-be-payroll_py
25+
SONAR_ORGANIZATION: openimis-1
26+
SONAR_PROJECT_NAME: openimis-be-payroll_py
27+
SONAR_PROJECT_VERSION: 1.0
28+
SONAR_SOURCES: payroll
29+
SONAR_EXCLUSIONS: "**/migrations/**,**/static/**,**/media/**,**/tests/**"
30+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: CoreMIS Server Deployment
2+
on:
3+
push:
4+
branches:
5+
- develop
6+
7+
jobs:
8+
rebuild-test-server:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Check out code
12+
uses: actions/checkout@v2
13+
14+
- name: Set up SSH
15+
run: |
16+
mkdir -p ~/.ssh
17+
echo "${{ secrets.CORE_MIS_DEPLOYMENT_SSH_KEY }}" > ~/.ssh/id_rsa
18+
chmod 600 ~/.ssh/id_rsa
19+
ssh-keyscan -H ${{ secrets.CORE_MIS_DEPLOYMENT_HOST }} >> ~/.ssh/known_hosts
20+
env:
21+
CORE_MIS_DEPLOYMENT_SSH_KEY: ${{ secrets.CORE_MIS_DEPLOYMENT_SSH_KEY }}
22+
CORE_MIS_DEPLOYMENT_USER: ${{ secrets.CORE_MIS_DEPLOYMENT_USER }}
23+
CORE_MIS_DEPLOYMENT_HOST: ${{ secrets.CORE_MIS_DEPLOYMENT_HOST }}
24+
25+
- name: Run Docker Compose
26+
run: |
27+
ssh -o StrictHostKeyChecking=no -T ${{ secrets.CORE_MIS_DEPLOYMENT_USER }}@${{ secrets.CORE_MIS_DEPLOYMENT_HOST }} -p 1022
28+
ssh ${{ secrets.CORE_MIS_DEPLOYMENT_USER }}@${{ secrets.CORE_MIS_DEPLOYMENT_HOST }} -p 1022 << EOF
29+
cd coreMIS/
30+
docker-compose build backend gateway && docker-compose up -d
31+
EOF
32+

.github/workflows/openmis-module-test-mssql.yml

Lines changed: 0 additions & 100 deletions
This file was deleted.

.github/workflows/openmis-module-test-psql.yml

Lines changed: 0 additions & 80 deletions
This file was deleted.

locale/en/LC_MESSAGES/django.po

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
msgid "payroll.validation.payroll.bill_already_assigned"
2+
msgstr "Bills %(bill_ids) already assigned to payroll."
3+
4+
msgid "payroll.validation.payroll.no_bills_for_filter_criteria"
5+
msgstr "Bills not found for given search criteria."
6+
7+
msgid "payroll.validation.payroll.name_exists"
8+
msgstr "Name %(name) already exists."
9+
10+
msgid "payroll.validation.field_empty"
11+
msgstr "Field %(field) can not be empty."

payroll/gql_mutations.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@ class PayrollStatusEnum(graphene.Enum):
3535

3636
name = graphene.String(required=True, max_length=255)
3737
benefit_plan_id = graphene.UUID(required=True)
38-
payment_point_id = graphene.UUID(required=True)
38+
payment_point_id = graphene.UUID(required=False)
3939
status = graphene.Field(PayrollStatusEnum, required=True)
4040
payment_method = graphene.String(required=True, max_length=255)
41+
included_unpaid = graphene.Boolean(required=True)
4142

4243
date_valid_from = graphene.Date(required=False)
4344
date_valid_to = graphene.Date(required=False)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 3.2.21 on 2023-10-06 07:55
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('payroll', '0008_historicalpaymentadaptorhistory_paymentadaptorhistory'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='payroll',
18+
name='payment_point',
19+
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='payroll.paymentpoint'),
20+
),
21+
]

payroll/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class PaymentPoint(HistoryModel):
2323
class Payroll(HistoryBusinessModel):
2424
name = models.CharField(max_length=255, blank=False, null=False)
2525
benefit_plan = models.ForeignKey(BenefitPlan, on_delete=models.DO_NOTHING)
26-
payment_point = models.ForeignKey(PaymentPoint, on_delete=models.DO_NOTHING)
26+
payment_point = models.ForeignKey(PaymentPoint, on_delete=models.DO_NOTHING, null=True)
2727
status = models.CharField(
2828
max_length=100, choices=PayrollStatus.choices, default=PayrollStatus.CREATED, null=False
2929
)

payroll/services.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22

33
from django.db import transaction
4+
from django.db.models import Q
45
from django.contrib.contenttypes.models import ContentType
56

67
from core.custom_filters import CustomFilterWizardStorage
@@ -49,8 +50,9 @@ def __init__(self, user, validation_class=PayrollValidation):
4950
def create(self, obj_data):
5051
try:
5152
with transaction.atomic():
53+
included_unpaid = obj_data.pop("included_unpaid", False)
5254
obj_data = self._adjust_create_payload(obj_data)
53-
bills_queryset = self._get_bills_queryset(obj_data)
55+
bills_queryset = self._get_bills_queryset(obj_data, included_unpaid)
5456
obj_data_and_bills = {**obj_data, "bills": bills_queryset}
5557
self.validation_class.validate_create(self.user, **obj_data_and_bills)
5658
obj_ = self.OBJECT_TYPE(**obj_data)
@@ -96,7 +98,7 @@ def _create_payroll_bills(self, bills_queryset, payroll_id):
9698
payroll_bill = PayrollBill(bill_id=bill.id, payroll_id=payroll_id)
9799
payroll_bill.save(username=self.user.username)
98100

99-
def _get_bills_queryset(self, obj_data):
101+
def _get_bills_queryset(self, obj_data, included_unpaid):
100102
benefit_plan_id = obj_data.get("benefit_plan_id")
101103
date_from = obj_data.get("date_valid_from")
102104
date_to = obj_data.get("date_valid_to")
@@ -125,7 +127,20 @@ def _get_bills_queryset(self, obj_data):
125127
is_deleted=False,
126128
date_bill__range=(date_from, date_to),
127129
subject_type=ContentType.objects.get_for_model(Beneficiary),
128-
subject_id__in=beneficiary_ids
130+
subject_id__in=beneficiary_ids,
131+
status__in=[Bill.Status.VALIDATED],
129132
)
130133

134+
bills_queryset = bills_queryset.filter(
135+
Q(payrollbill__isnull=True) | Q(payrollbill__is_deleted=True)
136+
)
137+
138+
if included_unpaid:
139+
bills_queryset = bills_queryset.filter(json_ext__unpaid=True)
140+
else:
141+
bills_queryset = bills_queryset.filter(
142+
Q(json_ext__unpaid=False) |
143+
Q(json_ext__unpaid__isnull=True)
144+
)
145+
131146
return bills_queryset

payroll/strategies/strategy_of_payments_interface.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def accept_payroll(cls, payroll, user, **kwargs):
88
pass
99

1010
@classmethod
11-
def acknowledge_of_reponse_view(cls, payroll, response_from_gateway, user):
11+
def acknowledge_of_reponse_view(cls, payroll, response_from_gateway, user, rejected_bills):
1212
pass
1313

1414
@classmethod

0 commit comments

Comments
 (0)