def get(self, request, *args, **kwargs): proforma_pk = kwargs.get('pk') try: proforma = Proforma.objects.get(pk=proforma_pk) except Proforma.DoesNotExist: return Response({"detail": "Proforma not found"}, status=status.HTTP_404_NOT_FOUND) serializer = InvoiceSerializer(proforma.invoice, context={'request': request}) return Response(serializer.data)
def put(self, request, *args, **kwargs): invoice_pk = kwargs.get('pk') try: invoice = Invoice.objects.get(pk=invoice_pk) except Invoice.DoesNotExist: return Response({"detail": "Invoice not found"}, status=status.HTTP_404_NOT_FOUND) state = request.data.get('state', None) if state == Invoice.STATES.ISSUED: if invoice.state != Invoice.STATES.DRAFT: msg = "An invoice can be issued only if it is in draft state." return Response({"detail": msg}, status=status.HTTP_403_FORBIDDEN) issue_date = request.data.get('issue_date', None) due_date = request.data.get('due_date', None) invoice.issue(issue_date, due_date) invoice.save() elif state == Invoice.STATES.PAID: if invoice.state != Invoice.STATES.ISSUED: msg = "An invoice can be paid only if it is in issued state." return Response({"detail": msg}, status=status.HTTP_403_FORBIDDEN) paid_date = request.data.get('paid_date', None) invoice.pay(paid_date) invoice.save() elif state == Invoice.STATES.CANCELED: if invoice.state != Invoice.STATES.ISSUED: msg = "An invoice can be canceled only if it is in issued " \ "state." return Response({"detail": msg}, status=status.HTTP_403_FORBIDDEN) cancel_date = request.data.get('cancel_date', None) invoice.cancel(cancel_date) invoice.save() elif not state: msg = "You have to provide a value for the state field." return Response({"detail": msg}, status=status.HTTP_403_FORBIDDEN) else: msg = "Illegal state value." return Response({"detail": msg}, status=status.HTTP_403_FORBIDDEN) serializer = InvoiceSerializer(invoice, context={'request': request}) return Response(serializer.data)