diff --git a/app/__pycache__/excel_processing.cpython-312.pyc b/app/__pycache__/excel_processing.cpython-312.pyc index b2bb301..dfd1ac5 100644 Binary files a/app/__pycache__/excel_processing.cpython-312.pyc and b/app/__pycache__/excel_processing.cpython-312.pyc differ diff --git a/app/__pycache__/helper.cpython-312.pyc b/app/__pycache__/helper.cpython-312.pyc index f224d6b..b1ae252 100644 Binary files a/app/__pycache__/helper.cpython-312.pyc and b/app/__pycache__/helper.cpython-312.pyc differ diff --git a/app/__pycache__/helper_excel.cpython-312.pyc b/app/__pycache__/helper_excel.cpython-312.pyc index 0242cd0..4fba8e1 100644 Binary files a/app/__pycache__/helper_excel.cpython-312.pyc and b/app/__pycache__/helper_excel.cpython-312.pyc differ diff --git a/app/__pycache__/serializers.cpython-312.pyc b/app/__pycache__/serializers.cpython-312.pyc index 99fd1f8..d102591 100644 Binary files a/app/__pycache__/serializers.cpython-312.pyc and b/app/__pycache__/serializers.cpython-312.pyc differ diff --git a/app/__pycache__/urls.cpython-312.pyc b/app/__pycache__/urls.cpython-312.pyc index 48d8983..667d643 100644 Binary files a/app/__pycache__/urls.cpython-312.pyc and b/app/__pycache__/urls.cpython-312.pyc differ diff --git a/app/__pycache__/views.cpython-312.pyc b/app/__pycache__/views.cpython-312.pyc index 40eceb7..093b398 100644 Binary files a/app/__pycache__/views.cpython-312.pyc and b/app/__pycache__/views.cpython-312.pyc differ diff --git a/app/views.py b/app/views.py index b152d80..a771aab 100644 --- a/app/views.py +++ b/app/views.py @@ -796,180 +796,180 @@ class HatchingsViewSet(viewsets.ModelViewSet): 'ایند��ن ریور': 'ایندین ریور', 'ک��ب': 'کاب' } - if int(request.data['GoodSum']) > 0: - poultry_data = {} + # if int(request.data['GoodSum']) > 0: + poultry_data = {} - same_keys = [ - 'UnitName', 'SystemCode', 'EpidemiologicCode', 'LocationNameProvince', - 'LocationNameCity', 'RegDate', 'RegDateShamsi', 'RegDateShamsiWithTime', - 'RegDateShamsiOnlyTime', 'StringId', 'ModalCss', 'GridContainerParametersModel', - 'MenuUserAccess', 'LogTableName', 'LogTableAlias', 'PageTitle', - 'PartIdCode', 'UnitTypeName' - ] + same_keys = [ + 'UnitName', 'SystemCode', 'EpidemiologicCode', 'LocationNameProvince', + 'LocationNameCity', 'RegDate', 'RegDateShamsi', 'RegDateShamsiWithTime', + 'RegDateShamsiOnlyTime', 'StringId', 'ModalCss', 'GridContainerParametersModel', + 'MenuUserAccess', 'LogTableName', 'LogTableAlias', 'PageTitle', + 'PartIdCode', 'UnitTypeName' + ] - for key in same_keys: - if key in request.data and request.data[key] is not None: - poultry_data[key] = request.data[key] + for key in same_keys: + if key in request.data and request.data[key] is not None: + poultry_data[key] = request.data[key] - bool_keys = ['IsPersisted', 'AllowInsert', 'AllowUpdate', 'UnitIsActive'] - for key in bool_keys: - if key in request.data: - poultry_data[key] = bool(request.data[key]) + bool_keys = ['IsPersisted', 'AllowInsert', 'AllowUpdate', 'UnitIsActive'] + for key in bool_keys: + if key in request.data: + poultry_data[key] = bool(request.data[key]) - if 'MenuUserAccessId' in request.data: - try: - poultry_data['MenuUserAccessId'] = int(request.data['MenuUserAccessId']) - except (ValueError, TypeError): - poultry_data['MenuUserAccessId'] = -1 + if 'MenuUserAccessId' in request.data: + try: + poultry_data['MenuUserAccessId'] = int(request.data['MenuUserAccessId']) + except (ValueError, TypeError): + poultry_data['MenuUserAccessId'] = -1 - if 'UnitPostalCode' in request.data: - poultry_data['PostalCode'] = request.data['UnitPostalCode'] + if 'UnitPostalCode' in request.data: + poultry_data['PostalCode'] = request.data['UnitPostalCode'] - if 'ProvinceName' in request.data: - poultry_data['Province'] = request.data['ProvinceName'] + if 'ProvinceName' in request.data: + poultry_data['Province'] = request.data['ProvinceName'] - if 'CityName' in request.data: - poultry_data['City'] = request.data['CityName'] + if 'CityName' in request.data: + poultry_data['City'] = request.data['CityName'] - if 'PersonFullName' in request.data and 'UserName' not in poultry_data: - poultry_data['UserName'] = request.data['PersonFullName'] - - system_code = request.data.get('SystemCode') - if system_code: - poultry = Poultry.objects.filter(SystemCode=system_code).first() - - if not poultry: - try: - poultry = Poultry.objects.create(**poultry_data) - poultry.save() - except Exception as e: - print(f"Error creating poultry: {e}") - else: - update_fields = [] - for key, value in poultry_data.items(): - setattr(poultry, key, value) - poultry.save() - - # if update_fields: - # try: - # poultry.save(update_fields=update_fields) - # except : - # pass + if 'PersonFullName' in request.data and 'UserName' not in poultry_data: + poultry_data['UserName'] = request.data['PersonFullName'] + system_code = request.data.get('SystemCode') + if system_code: poultry = Poultry.objects.filter(SystemCode=system_code).first() - bars = request.data.get('Transports', []) - if 'Transports' in request.data: - request.data.pop('Transports') - evacuation_details = request.data.get('EvacuationDetail', []) - if 'EvacuationDetail' in request.data: - request.data.pop('EvacuationDetail') - - hatching = Hatching.objects.filter(RequestCode=request.data['RequestCode']).first() - print({'1': request.data['ProvinceName']}) - if hatching: - for key, value in request.data.items(): - setattr(hatching, key, value) - if hatching.poultry is None: - hatching.poultry=poultry - hatching.save() + if not poultry: + try: + poultry = Poultry.objects.create(**poultry_data) + poultry.save() + except Exception as e: + print(f"Error creating poultry: {e}") else: + update_fields = [] + for key, value in poultry_data.items(): + setattr(poultry, key, value) + poultry.save() - hatchings = Hatching.objects.filter(poultry=poultry).order_by('id').last() - period = hatchings.Period + 1 if hatchings else 1 - request.data['Period'] = period - hatching = Hatching.objects.create(**request.data) - hatching.ArchiveDate = hatching.Date + datetime.timedelta(days=76) + # if update_fields: + # try: + # poultry.save(update_fields=update_fields) + # except : + # pass - if poultry: - hatching.poultry = poultry - hatching.save() - allowed_evacuation_fields = { - 'PartIdCode', 'RequestId', 'MoReportId', 'ReportType', 'ReportTypeString', - 'ReportDate', 'ReportDateShamsi', 'MoReason', 'MoDate', 'MoDateShamsi', - 'MoStartDay', 'MoEndDay', 'MoReportSubId', 'ReportStatus', 'GoodCount', - 'Message', 'ErrorCode', 'IsDeleted', 'RegDate', 'RegDateShamsi', - 'RegDateShamsiWithTime', 'RegDateShamsiOnlyTime', 'ExternalId', 'StringId', - 'IsPersisted', 'AllowInsert', 'AllowUpdate', 'ModalCss', - 'GridContainerParametersModel', 'MenuUserAccess', 'MenuUserAccessId', - 'LogTableName', 'LogTableAlias', 'PageTitle' - } + poultry = Poultry.objects.filter(SystemCode=system_code).first() + bars = request.data.get('Transports', []) + if 'Transports' in request.data: + request.data.pop('Transports') + evacuation_details = request.data.get('EvacuationDetail', []) + if 'EvacuationDetail' in request.data: + request.data.pop('EvacuationDetail') - if evacuation_details: - cleaned_payload = [] - external_ids = [] - for evacuation_data in evacuation_details: - clean_data = { - k: v for k, v in evacuation_data.items() - if k in allowed_evacuation_fields or k == 'Id' - } - external_id = clean_data.pop('Id', None) - if external_id is not None: - clean_data['ExternalId'] = external_id - external_ids.append(external_id) - cleaned_payload.append((external_id, clean_data)) - - existing_map = {} - if external_ids: - existing_qs = EvacuationDetail.objects.filter( - ExternalId__in=external_ids, - trash=False - ) - existing_map = {ev.ExternalId: ev for ev in existing_qs} - - bulk_create = [] - for external_id, clean_data in cleaned_payload: - if external_id: - evacuation = existing_map.get(external_id) - if evacuation and 'GoodCount' in clean_data: - evacuation.GoodCount = clean_data['GoodCount'] - evacuation.hatching = hatching - evacuation.save(update_fields=['GoodCount', 'hatching']) - continue - clean_data['hatching'] = hatching - bulk_create.append(EvacuationDetail(**clean_data)) - - if bulk_create: - EvacuationDetail.objects.bulk_create(bulk_create) - - if bars: - for transport_data in bars: - transport = TransportingDetail.objects.filter( - TrackingCode=transport_data['TrackingCode']).first() - if transport: - for key, value in transport_data.items(): - setattr(transport, key, value) - transport.save() - - else: - transport = TransportingDetail.objects.create(**transport_data) - kill_house = KillHouse.objects.filter(PartIdCode=transport.DesPartIdCode, trash=False).first() - transport.hatching = hatching - if kill_house: - transport.Province = kill_house.Province - transport.City = kill_house.City - if hatching.poultry.LocationIdProvince != kill_house.ProvinceId: - transport.Out = True - transport.save() - transport.Age = (transport.Date.date() - transport.hatching.Date.date()).days + 1 - transport.save() - bars = TransportingDetail.objects.filter(trash=False, hatching=hatching) - bars_quantity = bars.filter(TrackingStatusDescription='تایید تخلیه').aggregate(total=Sum('GoodAmount'))[ - 'total'] or 0 - ave_age = int(bars.aggregate(avg_age=Avg('Age'))[ - 'avg_age'] or 0) - hatching.LeftOver = hatching.ChickCountSum - (hatching.Evacuation + bars_quantity) if ( - hatching.ChickCountSum - ( - hatching.Evacuation + bars_quantity)) > 0 else 0 - print({'2': hatching.ProvinceName}) - if hatching.PedigreeName in BREED_STANDARDIZATION: - hatching.PedigreeName = BREED_STANDARDIZATION[hatching.PedigreeName] - hatching.KillingAve = ave_age - hatching.samasat_discharge_percentage = int( - ((hatching.Evacuation + bars_quantity) / hatching.ChickCountSum) * 100) + hatching = Hatching.objects.filter(RequestCode=request.data['RequestCode']).first() + print({'1': request.data['ProvinceName']}) + if hatching: + for key, value in request.data.items(): + setattr(hatching, key, value) + if hatching.poultry is None: + hatching.poultry=poultry hatching.save() + else: - print('تعداد حمل صفر است') + + hatchings = Hatching.objects.filter(poultry=poultry).order_by('id').last() + period = hatchings.Period + 1 if hatchings else 1 + request.data['Period'] = period + hatching = Hatching.objects.create(**request.data) + hatching.ArchiveDate = hatching.Date + datetime.timedelta(days=76) + + if poultry: + hatching.poultry = poultry + hatching.save() + allowed_evacuation_fields = { + 'PartIdCode', 'RequestId', 'MoReportId', 'ReportType', 'ReportTypeString', + 'ReportDate', 'ReportDateShamsi', 'MoReason', 'MoDate', 'MoDateShamsi', + 'MoStartDay', 'MoEndDay', 'MoReportSubId', 'ReportStatus', 'GoodCount', + 'Message', 'ErrorCode', 'IsDeleted', 'RegDate', 'RegDateShamsi', + 'RegDateShamsiWithTime', 'RegDateShamsiOnlyTime', 'ExternalId', 'StringId', + 'IsPersisted', 'AllowInsert', 'AllowUpdate', 'ModalCss', + 'GridContainerParametersModel', 'MenuUserAccess', 'MenuUserAccessId', + 'LogTableName', 'LogTableAlias', 'PageTitle' + } + + if evacuation_details: + cleaned_payload = [] + external_ids = [] + for evacuation_data in evacuation_details: + clean_data = { + k: v for k, v in evacuation_data.items() + if k in allowed_evacuation_fields or k == 'Id' + } + external_id = clean_data.pop('Id', None) + if external_id is not None: + clean_data['ExternalId'] = external_id + external_ids.append(external_id) + cleaned_payload.append((external_id, clean_data)) + + existing_map = {} + if external_ids: + existing_qs = EvacuationDetail.objects.filter( + ExternalId__in=external_ids, + trash=False + ) + existing_map = {ev.ExternalId: ev for ev in existing_qs} + + bulk_create = [] + for external_id, clean_data in cleaned_payload: + if external_id: + evacuation = existing_map.get(external_id) + if evacuation and 'GoodCount' in clean_data: + evacuation.GoodCount = clean_data['GoodCount'] + evacuation.hatching = hatching + evacuation.save(update_fields=['GoodCount', 'hatching']) + continue + clean_data['hatching'] = hatching + bulk_create.append(EvacuationDetail(**clean_data)) + + if bulk_create: + EvacuationDetail.objects.bulk_create(bulk_create) + + if bars: + for transport_data in bars: + transport = TransportingDetail.objects.filter( + TrackingCode=transport_data['TrackingCode']).first() + if transport: + for key, value in transport_data.items(): + setattr(transport, key, value) + transport.save() + + else: + transport = TransportingDetail.objects.create(**transport_data) + kill_house = KillHouse.objects.filter(PartIdCode=transport.DesPartIdCode, trash=False).first() + transport.hatching = hatching + if kill_house: + transport.Province = kill_house.Province + transport.City = kill_house.City + if hatching.poultry.LocationIdProvince != kill_house.ProvinceId: + transport.Out = True + transport.save() + transport.Age = (transport.Date.date() - transport.hatching.Date.date()).days + 1 + transport.save() + bars = TransportingDetail.objects.filter(trash=False, hatching=hatching) + bars_quantity = bars.filter(TrackingStatusDescription='تایید تخلیه').aggregate(total=Sum('GoodAmount'))[ + 'total'] or 0 + ave_age = int(bars.aggregate(avg_age=Avg('Age'))[ + 'avg_age'] or 0) + hatching.LeftOver = hatching.ChickCountSum - (hatching.Evacuation + bars_quantity) if ( + hatching.ChickCountSum - ( + hatching.Evacuation + bars_quantity)) > 0 else 0 + print({'2': hatching.ProvinceName}) + if hatching.PedigreeName in BREED_STANDARDIZATION: + hatching.PedigreeName = BREED_STANDARDIZATION[hatching.PedigreeName] + hatching.KillingAve = ave_age + hatching.samasat_discharge_percentage = int( + ((hatching.Evacuation + bars_quantity) / hatching.ChickCountSum) * 100) + hatching.save() + # else: + # print('تعداد حمل صفر است') return Response({"result": "با موفقیت ثبت شد"}, status=status.HTTP_201_CREATED) def list(self, request, *args, **kwargs):