11    #APIs 
2+ from  datetime  import  date , datetime , timedelta 
23from  django .db .models  import  F 
34from  rest_framework .views  import  APIView 
45from  rest_framework .response  import  Response 
6+ # from FusionIIIT.notification.views import central_mess_notif 
57from  .serializers  import  * 
68from  django .shortcuts  import  get_object_or_404 
79from  applications .central_mess .models  import  * 
810from  django .contrib .auth .models  import  User 
911from  applications .globals .models  import  ExtraInfo , HoldsDesignation , Designation 
1012from  django .http  import  JsonResponse 
1113
14+ today_g  =  datetime .datetime .now ()
15+ 
1216class  FeedbackApi (APIView ):
1317
1418    def  get (self , request ):
@@ -61,6 +65,29 @@ def put(self, request):
6165        feedback_request .save ()
6266
6367        return  Response ({'status' :200 })
68+     
69+     def  delete (self , request ):
70+         data  =  request .data 
71+         student_id  =  data .get ('student_id' )
72+         mess  =  data .get ('mess' )
73+         feedback_type  =  data .get ('feedback_type' )
74+         description  =  data .get ('description' )
75+         fdate  =  data .get ('fdate' )
76+ 
77+         # Locate the feedback record 
78+         feedback_request  =  get_object_or_404 (
79+             Feedback ,
80+             student_id = student_id ,
81+             mess = mess ,
82+             feedback_type = feedback_type ,
83+             description = description ,
84+             fdate = fdate ,
85+         )
86+         
87+         # Delete the feedback record 
88+         feedback_request .delete ()
89+         
90+         return  Response ({'status' : 200 , 'message' : 'Feedback deleted successfully.' })
6491
6592
6693class  MessinfoApi (APIView ):
@@ -126,6 +153,7 @@ def post(self, request):
126153
127154class  Monthly_billApi (APIView ):
128155    def  get (self , request ):
156+         
129157        monthly_bill_obj  =  Monthly_bill .objects .all ();
130158        serialized_obj  =  Monthly_billSerializer (monthly_bill_obj , many = True )
131159        return  Response ({'status' :200 , 'payload' :serialized_obj .data })    
@@ -168,31 +196,36 @@ def post(self, request):
168196
169197class  PaymentsApi (APIView ):
170198    def  get (self , request ):
199+         username  =  get_object_or_404 (User ,username = request .user .username )
200+         idd  =  ExtraInfo .objects .get (user = username )
201+         student  =  Student .objects .get (id = idd .id )
171202        payments_obj  =  Payments .objects .all ();
203+         payments_obj  =  payments_obj .filter (student_id = student )
172204        serialized_obj  =  PaymentsSerializer (payments_obj , many = True )
173205        return  Response ({'status' :200 , 'payload' :serialized_obj .data })   
174206
175-     def  post (self , request ):
176-         data  =  request .data 
207+     #  def post(self, request):
208+     #      data = request.data
177209
178-         # sem = data['sem'] 
179-         # year = data['year'] 
180-         amount_paid  =  data ['amount_paid' ]
210+     #      # sem = data['sem']
211+     #      # year = data['year']
212+     #      amount_paid = data['amount_paid']
181213
182214
183-         username  =  get_object_or_404 (User ,username = request .user .username )
184-         idd  =  ExtraInfo .objects .get (user = username )
185-         student  =  Student .objects .get (id = idd .id )
215+     #      username = get_object_or_404(User,username=request.user.username)
216+     #      idd = ExtraInfo.objects.get(user=username)
217+     #      student = Student.objects.get(id=idd.id)
186218
187219
188-         obj  =  Payments (
189-             student_id  =  student ,
190-             # sem = sem, 
191-             # year = year, 
192-             amount_paid  =  amount_paid ,
193-         )
194-         obj .save ()
195-         return  Response ({'status' :200 }) 
220+     #     obj = Payments( 
221+     #         student_id = student, 
222+     #         # sem = sem, 
223+     #         # year = year, 
224+     #         amount_paid = amount_paid, 
225+     #     ) 
226+     #     obj.save() 
227+     #     return Response({'status':200})  
228+     
196229class  MenuApi (APIView ):
197230    def  get (self , request ):
198231        menu_obj  =  Menu .objects .all ();
@@ -201,6 +234,7 @@ def get(self, request):
201234
202235    def  post (self , request ):
203236        data  =  request .data 
237+         print (data )
204238
205239        mess_option  =  data ['mess_option' ]
206240        meal_time  =  data ['meal_time' ]
@@ -224,17 +258,44 @@ def post(self, request):
224258        data  =  request .data 
225259
226260        # student_id = data['mess_option'] 
261+         flag = 1 
227262        start_date  =  data ['start_date' ]
228263        end_date  =  data ['end_date' ]
229264        purpose  =  data ['purpose' ]
230265        status  =  data ['status' ]
266+         """ 
267+             status: 
268+                 '2' -> approved 
269+                 '1' -> pending 
270+                 '0' -> declined 
271+         """ 
231272        app_date  =  data ['app_date' ]
232273        leave_type  =  data ['leave_type' ]
233274
275+         if  (end_date  <  start_date ):
276+             flag  =  0 
277+             return  Response ({'status' : 3 , 'message' : 'Please check the dates' })
278+ 
234279        username  =  get_object_or_404 (User ,username = request .user .username )
235280        idd  =  ExtraInfo .objects .get (user = username )
236281        student  =  Student .objects .get (id = idd .id )
237282
283+         date_format  =  "%Y-%m-%d" 
284+         b  =  datetime .datetime .strptime (str (start_date ), date_format )
285+         d  =  datetime .datetime .strptime (str (end_date ), date_format )
286+ 
287+         rebate_check  =  Rebate .objects .filter (student_id = student , status = '2' )
288+         for  r  in  rebate_check :
289+             a  =  datetime .datetime .strptime (str (r .start_date ), date_format )
290+             c  =  datetime .datetime .strptime (str (r .end_date ), date_format )
291+             if  ((b  <=  a  and  (d  >=  a  and  d  <=  c )) or  (b  >=  a  and  (d  >=  a  and  d  <=  c ))
292+                     or  (b  <=  a  and  (d  >=  c )) or  ((b  >=  a  and  b  <=  c ) and  (d  >=  c ))):
293+                 flag  =  0 
294+                 data  =  {
295+                     'status' : 3 ,
296+                     'message' : "Already applied for these dates" ,
297+                 }
298+                 return  Response ({'status' : 3 , 'message' : 'Already applied for these dates' })
238299
239300        obj  =  Rebate (
240301            student_id  =  student ,
@@ -245,6 +306,10 @@ def post(self, request):
245306            end_date =  end_date ,
246307            start_date  =  start_date 
247308        )
309+ 
310+         if  flag  ==  1 :
311+             message  =  'Your leave request has been accepted between dates '  +  str (b .date ()) +  ' and '  +  str (d .date ())
312+             # central_mess_notif(request.user, student.id.user, 'leave_request', message) 
248313        obj .save ()
249314        return  Response ({'status' :200 })     
250315
@@ -404,8 +469,7 @@ def get(self, request):
404469
405470    def  post (self , request ):
406471        data  =  request .data 
407-         
408-       
472+ 
409473        start_date  =  data ['start_date' ]
410474        end_date  =  data ['end_date' ]
411475        status  =  data ['status' ]
@@ -568,13 +632,11 @@ def post(self,request):
568632                return  response 
569633
570634class  Get_Reg_Records (APIView ):
571- 
572-     def  post (self ,request ):
573-         student  =  request .data ['student_id' ]
574-         reg_record  =  Reg_records .objects .filter (student_id = student )
575- 
635+     def  get (self ,request ):
636+         student_id  =  request .GET .get ('student_id' )
637+         reg_record  =  Reg_records .objects .filter (student_id = student_id )
576638        serialized_obj  =  reg_recordSerialzer (reg_record ,many = True )
577-         return  Response ({'payload' :serialized_obj .data })  
639+         return  Response ({'payload' :serialized_obj .data })
578640
579641
580642class  Get_Student_bill (APIView ):
@@ -722,33 +784,38 @@ def put(self, request):
722784            print ({'error' : str (e )})
723785            return  Response ({'error' : str (e )}, status = 400 )
724786
725- class  DeregistrationApi (APIView ):
726-     def  post (self , request ):
727-         try :
728-             data  =  request .data 
729-             print (data )
730-             student_id  =  data ['student_id' ]
731-             end_date  =  data ['end_date' ]
732- 
733-             username  =  get_object_or_404 (User , username = student_id )
734-             idd  =  ExtraInfo .objects .get (user = username )
735-             student  =  Student .objects .get (id = idd .id )
736- 
737-             reg_main  =  Reg_main .objects .get (student_id = student )
738-             reg_main .current_mess_status  =  "Deregistered" 
739-             reg_main .save ()
740- 
741-             reg_record  =  Reg_records .objects .filter (student_id = student ).latest ('start_date' )
742-             reg_record .end_date  =  end_date 
743-             reg_record .save ()
744-             return  Response ({'status' : 200 })
745-         except  Exception  as  e :
746-             print ({'error' : str (e )})
747-             return  Response ({'error' : str (e )}, status = 400 )
787+ #  class DeregistrationApi(APIView):
788+ #      def post(self, request):
789+ #          try:
790+ #              data = request.data
791+ #              print(data)
792+ #              student_id = data['student_id']
793+ #              end_date = data['end_date']
794+ 
795+ #              username = get_object_or_404(User, username=student_id)
796+ #              idd = ExtraInfo.objects.get(user=username)
797+ #              student = Student.objects.get(id=idd.id)
798+ 
799+ #              reg_main = Reg_main.objects.get(student_id=student)
800+ #              reg_main.current_mess_status = "Deregistered"
801+ #              reg_main.save()
802+ 
803+ #              reg_record = Reg_records.objects.filter(student_id=student).latest('start_date')
804+ #              reg_record.end_date = end_date
805+ #              reg_record.save()
806+ #              return Response({'status': 200})
807+ #          except Exception as e:
808+ #              print({'error': str(e)})
809+ #              return Response({'error': str(e)}, status=400)
748810
749811class  UpdatePaymentRequestApi (APIView ):
750812    def  get (self , request ):
751-         update_payment_requests  =  Update_Payment .objects .all ()
813+         student_id  =  request .query_params .get ('student_id' )
814+         if  student_id :
815+             update_payment_requests  =  Update_Payment .objects .filter (student_id = student_id )
816+         else :
817+             update_payment_requests  =  Update_Payment .objects .all ()
818+ 
752819        serializer  =  UpdatePaymentRequestSerializer (update_payment_requests , many = True )
753820        return  Response ({'status' : 200 , 'payload' : serializer .data })
754821
@@ -792,4 +859,85 @@ def put(self, request):
792859            return  Response ({'status' : 200 })
793860        except  Exception  as  e :
794861            print ({'error' : str (e )})
795-             return  Response ({'error' : str (e )}, status = 400 )
862+             return  Response ({'error' : str (e )}, status = 400 )
863+ 
864+ from  rest_framework .parsers  import  MultiPartParser , FormParser 
865+ from  rest_framework  import  status 
866+ from  openpyxl  import  load_workbook 
867+ 
868+ class  UpdateBillExcelAPI (APIView ):
869+     parser_classes  =  (MultiPartParser , FormParser )
870+ 
871+     def  post (self , request ):
872+         if  'file'  not  in   request .FILES :
873+             return  Response ({'error' : 'No file provided' }, status = status .HTTP_400_BAD_REQUEST )
874+ 
875+         file  =  request .FILES ['file' ]
876+         if  not  file .name .endswith (('.xlsx' , '.xls' )):
877+             return  Response ({'error' : 'Invalid file format. Only .xlsx and .xls are allowed.' }, status = status .HTTP_400_BAD_REQUEST )
878+ 
879+         try :
880+             wb  =  load_workbook (file )
881+             sheet  =  wb .active 
882+             flag  =  False 
883+ 
884+             for  row  in  sheet .iter_rows (min_row = 2 ):
885+                 student_id  =  str (row [0 ].value ).upper ()
886+                 try :
887+                     student  =  Student .objects .select_related ('id' , 'id__user' , 'id__department' ).get (id = student_id )
888+                 except  Student .DoesNotExist :
889+                     continue 
890+ 
891+                 month  =  str (row [1 ].value )
892+                 year  =  row [2 ].value 
893+                 amt  =  row [3 ].value 
894+                 rebate_cnt  =  row [4 ].value 
895+                 rebate_amt  =  row [5 ].value 
896+                 total_amt  =  row [6 ].value 
897+                 try :
898+                     bill  =  Monthly_bill .objects .get (student_id = student_id , month = month , year = year )
899+                     reg_main  =  Reg_main .objects .get (student_id = student_id )
900+                     reg_main .balance  +=  bill .total_bill 
901+                     bill .amount  =  amt 
902+                     bill .rebate_count  =  rebate_cnt 
903+                     bill .rebate_amount  =  rebate_amt 
904+                     bill .total_bill  =  total_amt 
905+                     reg_main .balance  -=  total_amt 
906+                     
907+                     bill .save ()
908+                     reg_main .save ()
909+                 except  Monthly_bill .DoesNotExist :
910+                     bill  =  Monthly_bill (
911+                         student_id = student ,
912+                         month = month ,
913+                         year = year ,
914+                         amount = amt ,
915+                         rebate_count = rebate_cnt ,
916+                         rebate_amount = rebate_amt ,
917+                         total_bill = total_amt 
918+                     )
919+                     bill .save ()
920+ 
921+             return  Response ({'message' : 'File processed successfully' }, status = status .HTTP_200_OK )
922+ 
923+         except  Exception  as  e :
924+             return  Response ({'error' : f'An error occurred: { str (e )}  ' }, status = status .HTTP_500_INTERNAL_SERVER_ERROR )
925+         
926+ class  Get_Mess_Balance_Status (APIView ):
927+     def  get (self , request ):
928+         username  =  get_object_or_404 (User ,username = request .user .username )
929+         idd  =  ExtraInfo .objects .get (user = username )
930+         student_id  =  Student .objects .get (id = idd .id )
931+         try :
932+             mess_optn  =  Reg_main .objects .select_related ('student_id' ,'student_id__id' ,'student_id__id__user' ,'student_id__id__department' ).get (student_id = student_id )
933+             # y = Menu.objects.filter(mess_option=mess_optn.mess_option) 
934+             current_rem_balance  =  mess_optn .balance 
935+             current_mess_status  =  mess_optn .current_mess_status 
936+         except :
937+             mess_optn = {}
938+             mess_optn = {'mess_option' :'no-mess' }
939+             # y = Menu.objects.filter(mess_option="mess1") 
940+             current_rem_balance  =  0 
941+             current_mess_status  =  'Deregistered' 
942+ 
943+         return  Response ({'payload' : {'mess_option' : mess_optn .mess_option , 'current_rem_balance' : current_rem_balance , 'current_mess_status' : current_mess_status }})
0 commit comments