Skip to content

Commit 6b38e25

Browse files
authored
Merge pull request #60 from openagri-eu/missing-farm-info
Missing farm info
2 parents 9886734 + 1d10556 commit 6b38e25

5 files changed

Lines changed: 66 additions & 7 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ Response is uuid of generated PDF file.
122122
### calendar_activity_type
123123
- **Type**: `str`
124124
- **Description**: All Farm Calendar Observation Type values are possible as input (optional). If operation_id provided not used.
125+
(**Compost Operation** _calendar_activity_type_ is used to get all Compost Operations)
125126

126127
### operation_id
127128
- **Type**: `uudi str`

app/tests/unit/test_reports_endpoints.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,55 @@ def test_get_report_endpoint_success(self):
9191
response = self.client.get(f"{TestReportAPI.BASE_URL}/123/", headers={"X-Token": "OK"},
9292
params={"token": TestReportAPI.CORRECT_TOKEN})
9393
assert response.status_code == 200
94+
95+
96+
97+
def test_generate_irrigation_report_success(self):
98+
from api.api_v1.endpoints import report
99+
100+
mock_bg_task = self.patch(report, "process_irrigation_fertilization_data")
101+
params = {
102+
"token": TestReportAPI.CORRECT_TOKEN,
103+
"irrigation_id": "test_irrigation_id",
104+
"from_date": "2023-01-01",
105+
"to_date": "2023-01-31",
106+
"parcel_id": "test_parcel_id"
107+
}
108+
109+
response = self.client.post(
110+
f"{TestReportAPI.BASE_URL}/irrigation-report/",
111+
headers={"X-Token": "OK"},
112+
params=params
113+
)
114+
115+
assert response.status_code == 200
116+
response_json = response.json()
117+
assert "uuid" in response_json
118+
assert len(response_json["uuid"]) == 36
119+
120+
mock_bg_task.assert_called_once()
121+
122+
args, kwargs = mock_bg_task.call_args
123+
assert "123/" in kwargs['pdf_file_name']
124+
125+
def test_generate_irrigation_report_with_file_upload(self):
126+
from api.api_v1.endpoints import report
127+
mock_bg_task = self.patch(report, "process_irrigation_fertilization_data")
128+
129+
file_content = b'{"some": "json_data"}'
130+
files = {
131+
'data': ('test_data.json', file_content, 'application/json')
132+
}
133+
134+
response = self.client.post(
135+
f"{TestReportAPI.BASE_URL}/irrigation-report/",
136+
headers={"X-Token": "OK"},
137+
params={"token": TestReportAPI.CORRECT_TOKEN},
138+
files=files
139+
)
140+
141+
assert response.status_code == 200
142+
mock_bg_task.assert_called_once()
143+
144+
_, kwargs = mock_bg_task.call_args
145+
assert kwargs['data'] == file_content

app/utils/animals_report.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from fpdf.fonts import FontFace
88

99
from core import settings
10-
from utils import EX, add_fonts, decode_jwt_token, decode_dates_filters, get_parcel_info
10+
from utils import EX, add_fonts, decode_jwt_token, decode_dates_filters, get_parcel_info, FarmInfo
1111
from schemas.animals import *
1212
from utils.farm_calendar_report import geolocator
1313
from utils.json_handler import make_get_request
@@ -67,7 +67,7 @@ def create_pdf_from_animals(
6767
an = animals[0]
6868
parcel_id = an.hasAgriParcel.id if an.hasAgriParcel else None
6969
address = ""
70-
farm = ""
70+
farm = FarmInfo(description="", administrator="", vatID="", name="", municipality="", contactPerson="")
7171
identifier = ""
7272
if parcel_id:
7373
parcel = parcel_id.split(":")[3]
@@ -274,6 +274,8 @@ def process_animal_data(
274274
raise HTTPException(
275275
status_code=400, detail="PDF generation of animal report failed."
276276
)
277+
278+
277279
pdf_dir = f"{settings.PDF_DIRECTORY}{pdf_file_name}"
278280
os.makedirs(os.path.dirname(f"{pdf_dir}.pdf"), exist_ok=True)
279281
anima_pdf.output(f"{pdf_dir}.pdf")

app/utils/farm_calendar_report.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,12 @@ def create_farm_calendar_pdf(
112112
)
113113
parcel_id = (
114114
agr_resp.get("hasAgriParcel", {}).get("@id", None)
115-
if agr_mach_id
115+
if agr_resp and agr_mach_id
116116
else None
117117
)
118118

119-
address, farm = "", ""
119+
address = ""
120+
farm = FarmInfo(description="", administrator="", vatID="", name="", municipality="", contactPerson="")
120121
if parcel_id:
121122
parcel_data, farm = get_parcel_info(
122123
parcel_id.split(":")[-1], token, geolocator

app/utils/irrig_fert_pest_report.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from core import settings
1111
from schemas import IrrigationOperation, FertilizationOperation, CropProtectionOperation
1212
from utils.satellite_image_get import fetch_wms_image, SatelliteImageException
13-
from utils import EX, add_fonts, decode_dates_filters, get_parcel_info, display_pdf_parcel_details
13+
from utils import EX, add_fonts, decode_dates_filters, get_parcel_info, display_pdf_parcel_details, FarmInfo
1414
from utils.farm_calendar_report import geolocator
1515
from utils.generate_aggregation_data import (
1616
generate_total_volume_graph,
@@ -99,7 +99,10 @@ def create_pdf_from_operations(
9999
pdf.line(pdf.l_margin, y_position, line_end_x, y_position)
100100
pdf.ln(5)
101101

102-
address, farm, parcel_defined = None, None, None
102+
address = ""
103+
identifier = ""
104+
farm = FarmInfo(description="", administrator="", vatID="", name="", municipality="", contactPerson="")
105+
parcel_defined = None
103106
from_date_local, to_date_local = today, None
104107
if from_date:
105108
from_date_local = from_date.strftime("%Y-%m-%d")
@@ -271,7 +274,7 @@ def create_pdf_from_operations(
271274
if not parcel_defined:
272275
parcel_id = op.operatedOn.get("@id") if op.operatedOn else None
273276
address = ""
274-
farm = ""
277+
farm = FarmInfo(description="", administrator="", vatID="", name="", municipality="", contactPerson="")
275278
identifier = ""
276279
if parcel_id:
277280
parcel = parcel_id.split(":")[3] if op.operatedOn else None

0 commit comments

Comments
 (0)