diff --git a/authentication/register.py b/authentication/register.py index 2fae02b..e1a1dc3 100644 --- a/authentication/register.py +++ b/authentication/register.py @@ -2660,6 +2660,21 @@ def accept_bar_difference_request_pending_cron_job(): bar_request.hatching.save() bar_request.save() +def accept_bar_difference_request_pending_manual(request): + date = datetime.now().date() - timedelta(days=2) + bar_requests = BarDifferenceRequest.objects.filter(trash=False, + state='pending', create_date__date__lt=date).order_by('id') + for bar_request in bar_requests: + bar_request.state = 'accepted' + bar_request.acceptor_fullname = 'سیستمی' + bar_request.acceptor_mobile = '00000000000' + bar_request.acceptor_date = datetime.now() + bar_request.hatching.bar_difference_request_quantity += bar_request.quantity + bar_request.hatching.bar_difference_request_weight += bar_request.weight + bar_request.hatching.save() + bar_request.save() + return HttpResponse('ok') + @api_view(["POST"]) @permission_classes([AllowAny]) @@ -4442,3 +4457,32 @@ def fix_pos_owner(request): transaction.save() return Response("done!") + + +def canceled_out_province_request_manual(request): + province_requests = PoultryRequest.objects.filter(state_process__in=('accepted', 'pending'), + province_state__in=('accepted', 'pending'), trash=False, + archive=False, + out_province_request_cancel=False, out=True, wage_pay=False, + has_wage=True) + data = {"date": str(datetime.now()), "role": "SuperAdmin", "mobile": "-", + "fullname": "کنسل شده توسط سیستم به دلیل عدم پرداخت"} + for province_request in province_requests: + if province_request.state_process == 'accepted' and province_request.province_state == 'accepted': + hatching = PoultryHatching.objects.get(key=province_request.hatching.key, trash=False) + hatching.out_province_killed_weight -= int(province_request.quantity * province_request.Index_weight) + hatching.out_province_killed_quantity -= province_request.quantity + hatching.save() + province_request.out_province_request_cancel = True + province_request.out_province_request_canceller = data + province_request.archive = True + province_request.state_process = 'rejected' + province_request.province_state = 'rejected' + province_request.save() + + message = f'بار خارج از استان به شماره {province_request.order_code} به علت عدم پرداخت کنسل شد.' \ + f'\n' \ + f'(سامانه رصدیار)' + req = send_sms_request( + f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={UNION_NUMBER}&message={message}") + return HttpResponse('ok') diff --git a/panel/ReportingPanel/views.py b/panel/ReportingPanel/views.py index 1a2ff29..a20a060 100644 --- a/panel/ReportingPanel/views.py +++ b/panel/ReportingPanel/views.py @@ -5243,6 +5243,27 @@ def delete_kill_req_cron(): market_poultry_request_remain_quantity(kill_request.poultry_request) +def delete_kill_req_manual(request): + current_time = datetime.datetime.now() + kill_requests = KillRequest.objects.filter(Q(market_final_accept=True, market_code_status=True, + input_market_code__isnull=True) | Q(market_final_accept=False), + trash=False, + market=True, + market_state='pending', + market_expire_date_time__lt=current_time + ).select_related('poultry_request') + for kill_request in kill_requests: + kill_request.trash = True + kill_request.market_state_message = { + "fullname": "سیستمی", + "mobile": "سیستمی", + "date": str(datetime.datetime.now()) + } + kill_request.market_state = 'deleted' + kill_request.save() + market_poultry_request_remain_quantity(kill_request.poultry_request) + return HttpResponse('ok') + def delete_steward_allocation_cron(): current_time = datetime.datetime.now().date() # allow=AllowRegisterCodeForStewardAllocation.objects.filter(trash=False,active=True).first() @@ -9336,4 +9357,200 @@ def poultry_science_for_bazresi(request): ) serializer = PoultryScienceReportSerializer(query, many=True) - return Response(serializer.data, status=status.HTTP_200_OK) \ No newline at end of file + return Response(serializer.data, status=status.HTTP_200_OK) + + +def archive_kill_house_remain_limitation_weight_manual(request): + production_date = (datetime.datetime.now() - datetime.timedelta(days=3)).date() + archive_date = (datetime.datetime.now() - datetime.timedelta(days=3)) + kill_houses = KillHouse.objects.filter(trash=False, out_province=False) + for kill_house in kill_houses: + kill_house_requests = KillHouseRequest.objects.filter(input_warehouse=kill_house, + province_request__poultry_request__free_sale_in_province=False, + kill_request__recive_date__date=production_date, + ware_house_confirmation=True, trash=False, + calculate_status=True, warehouse=True) + + kill_house_allocations = StewardAllocation.objects.filter( + kill_house=kill_house, trash=False, calculate_status=True, warehouse=True, system_registration_code=True, + receiver_state__in=('pending', 'accepted'), production_date__date=production_date, quota='governmental') + + kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house, + quota='governmental', + production_date__date=production_date, + trash=False, + calculate_status=True, + warehouse=True) + segmentations = PosSegmentation.objects.filter(kill_house=kill_house, production_date__date=production_date, + trash=False, warehouse=True, + quota='governmental') + + kill_house_requests_weight = kill_house_requests.aggregate(total=Sum('ware_house_accepted_real_weight'))[ + 'total'] or 0 + kill_house_allocations_weight = \ + kill_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0 + kill_house_free_sale_bars_weight = kill_house_free_sale_bars.aggregate(total=Sum('real_weight_of_carcasses'))[ + 'total'] or 0 + + segmentation_weight = \ + segmentations.aggregate(total=Sum('weight'))[ + 'total'] or 0 + + archives = WarehouseArchive.objects.filter(kill_house=kill_house, date__date=production_date, + quota='governmental', + trash=False) + + archives_governmental_weight = \ + archives.aggregate(total=Sum('weight'))[ + 'total'] or 0 + + total_input = kill_house_requests_weight + total_output = kill_house_allocations_weight + kill_house_free_sale_bars_weight + segmentation_weight + archives_governmental_weight + total_remain = total_input - total_output + + if total_remain > 0: + if kill_house.ware_house_remaining_weight_archive_percent > 0: + percent_limitation_weight = total_input * (kill_house.ware_house_remaining_weight_archive_percent / 100) + if percent_limitation_weight >= total_remain: + archive = WarehouseArchive( + kill_house=kill_house, + date=archive_date, + quota='governmental', + weight=total_remain, + registerer='سیستم', + registerer_mobile='سیستم', + registerer_role='سیستم', + description='مانده کمتر از استاندارد تعیین شده', + ) + archive.save() + kill_house_archive_warehousing(archive.kill_house) + + return HttpResponse('ok') + + +def delete_steward_allocation_manual(request): + current_time = datetime.datetime.now().date() + # allow=AllowRegisterCodeForStewardAllocation.objects.filter(trash=False,active=True).first() + # if allow: + steward_allocation = StewardAllocation.objects.filter(trash=False, + date__date=current_time, + receiver_state='pending', + active_expire_date_time=True, + logged_registration_code__isnull=True, + kill_house__isnull=False, + return_trash=False).order_by('id') + for allocation in steward_allocation: + product = allocation.product + seller_type = allocation.seller_type + to_cold_house = allocation.to_cold_house + other_cold_house = allocation.other_cold_house if allocation.other_cold_house else None + allocation.trash = True + allocation.save() + if seller_type == 'KillHouse': + kill_house_allocations_product_warehousing(product) + if to_cold_house and to_cold_house.kill_house == product.kill_house: + kill_house_cold_house_allocations(to_cold_house) + + elif seller_type == 'ColdHouse': + cold_house_warehousing(to_cold_house) + if other_cold_house: + cold_house_warehousing(other_cold_house) + + else: + guild_steward_allocations_product_warehousing(product) + return HttpResponse('ok') + +def delete_sale_bar_manual(request): + steward_sale_bar = StewardFreeSaleBarInformation.objects.filter(trash=False, logged_registration_code__isnull=True, + system_registration_code=True, + active_expire_date_time=True, + registration_code__isnull=False) + + for free_sale_bar in steward_sale_bar: + free_sale_bar.trash = True + free_sale_bar.save() + guild_steward_free_sale_product_warehousing(free_sale_bar.product) + + kill_house_sale_bar = KillHouseFreeSaleBarInformation.objects.filter(trash=False, + logged_registration_code__isnull=True, + system_registration_code=True, + active_expire_date_time=True, + registration_code__isnull=False) + + for free_sale_bar_kill_house in kill_house_sale_bar: + product = free_sale_bar_kill_house.product + free_sale_bar_kill_house.trash = True + free_sale_bar_kill_house.save() + kill_house_free_sale_product_warehousing(product) + + +def send_credit_sahandsms_sms_manual(request): + filters = {} + if base_url_for_sms_report == 'ha': + filters['username'] = 'hamedan' + elif base_url_for_sms_report == 'ku': + filters['username'] = 'kurdistan' + elif base_url_for_sms_report == 'ma': + filters['username__in'] = ['markazi', 'senfmarkazi'] + managements = ManagementSendSms.objects.filter(**filters) \ + .values('username') \ + .annotate(min_id=Min('id')) \ + .values_list('min_id', flat=True) + + managements = ManagementSendSms.objects.filter(id__in=managements) + + for management in managements: + r = requests.get( + f"http://webservice.sahandsms.com/newsmswebservice.asmx/GetUserCredit?username={management.username}" + f"&password={management.password}") + + url = f'https://eitaayar.ir/api/{token}/sendMessage' + date = datetime.datetime.now().date() + if base_url_for_sms_report == 'ma': + province = 'مرکزی' + elif base_url_for_sms_report == 'ha': + province = 'همدان' + elif base_url_for_sms_report == 'ku': + province = 'کردستان' + elif base_url_for_sms_report == 'bu': + province = 'بوشهر' + else: + province = 'تست' + date_shamsi = shamsi_date(date).replace('-', '_') + base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n' + base_message += f' #گزارش_مانده_حساب_پنل_پیامکی #{date_shamsi}\n' + base_message += f' #استان_{province}\n\n' + base_message += f'➖➖➖➖➖➖➖➖➖➖\n' + + messages = [] + current_message = base_message + + root = ET.fromstring(r.content) + credit_amount = int(root.text) + amount = "{:,}".format(credit_amount) + + new_message_part = "🔸 نام کاربری پنل : {0} \n".format(management.username) + new_message_part += "🔸 مانده حساب پنل : {0} ریال \n".format(amount) + # new_message_part = "🔸 نام کاربری پنل {0}: {1} ریال \n".format(management.username, amount) + if credit_amount < 1000000: + new_message_part += "‼توجه: لطفا برای شارژ پنل پیامکی خود اقدام فرمایید‼" + + new_message_part += '\n➖➖➖➖➖➖➖➖➖➖\n' + + if len(current_message) + len(new_message_part) > 4000: + messages.append(current_message) + current_message = base_message + + current_message += new_message_part + + if current_message and current_message != base_message: + messages.append(current_message) + + for message in messages: + data = { + 'chat_id': chat_id_mali, + 'text': message, + } + response = requests.post(url, data=data, verify=False) + + return HttpResponse('ok') diff --git a/panel/urls.py b/panel/urls.py index 5ccacf8..5498cdd 100644 --- a/panel/urls.py +++ b/panel/urls.py @@ -1,4 +1,5 @@ -from authentication.register import add_zero_for_user_mobile +from authentication.register import add_zero_for_user_mobile, accept_bar_difference_request_pending_manual, \ + canceled_out_province_request_manual from authentication.sms_management import send_daily_slaughter_statistics_sms_manual, \ send_daily_distribution_report_sms_manual, send_kill_house_debt_report_pdf_sms_manual from pdf.views import kill_request_pdf, management_all_poultry_and_warehouse_pdf, summary_report_pdf, \ @@ -57,7 +58,9 @@ from .ReportingPanel.views import check_excel, find_gid_code, fix_duplicate_guil report_guilds_without_national_or_pos_transactions, get_guilds_for_update_or_create, \ update_all_active_guilds_from_api, find_users_with_duplicate_national_id, fix_duplicate_national_id_users, \ get_legal_person_unit_info, upload_image_to_server_for_poultry_science, poultry_science_for_bazresi, \ - fetch_evacuation_details_for_unknown_hatchings + fetch_evacuation_details_for_unknown_hatchings, delete_kill_req_manual, \ + archive_kill_house_remain_limitation_weight_manual, delete_steward_allocation_manual, delete_sale_bar_manual, \ + send_credit_sahandsms_sms_manual from .VetFarm.excel_processing import technical_responsible_performance_excel, \ totoal_technical_responsible_performance_excel from .excel_processing import user_excel_update, user_excel, vet_check_excel, kill_house_request_excel, \ @@ -1393,6 +1396,14 @@ urlpatterns = [ path('kdp/', kill_house_debt_report_pdf), path('send_kill_house_debt_report_pdf_sms_manual/', send_kill_house_debt_report_pdf_sms_manual), path('send_all_bar_to_eitaa_ticket/', send_all_bar_to_eitaa_ticket), + path('delete_kill_req_manual/', delete_kill_req_manual), + path('accept_bar_difference_request_pending_manual/', accept_bar_difference_request_pending_manual), + path('archive_kill_house_remain_limitation_weight_manual/', archive_kill_house_remain_limitation_weight_manual), + path('canceled_out_province_request_manual/', canceled_out_province_request_manual), + path('delete_steward_allocation_manual/', delete_steward_allocation_manual), + path('delete_sale_bar_manual/', delete_sale_bar_manual), + path('send_credit_sahandsms_sms_manual/', send_credit_sahandsms_sms_manual), + ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)