def update_paiement(self, request, pk=None): current_examination = self.get_object() serializer = apiserializers.ExaminationInvoicingSerializer( data=request.data) if not serializer.is_valid(): return Response(status=status.HTTP_400_BAD_REQUEST) if serializer.data[ 'status'] != 'invoiced' or current_examination.last_invoice is None: return Response(status=status.HTTP_400_BAD_REQUEST) if serializer.data['paiment_mode'] == 'notpaid': return Response( {'not modified': current_examination.last_invoice.id}) if current_examination.last_invoice.status != models.InvoiceStatus.WAITING_FOR_PAIEMENT: return Response(status=status.HTTP_400_BAD_REQUEST) current_examination.status = models.ExaminationStatus.INVOICED_PAID invoice_to_update = models.Invoice.objects.get( id=current_examination.last_invoice.id) invoice_to_update.status = models.InvoiceStatus.INVOICED_PAID officesettings = request.officesettings p = models.Paiment(amount=invoice_to_update.amount, currency=officesettings.currency, date=timezone.now(), paiment_mode=serializer.data['paiment_mode']) p.save() p.invoice.add(current_examination.last_invoice) p.save() invoice_to_update.save() current_examination.save() return Response({'invoiced': current_examination.last_invoice.id})
def cancel(self, request, pk=None): # Ensure that invoice was not canceled before if self.get_object().status != models.InvoiceStatus.CANCELED: officesettings = request.officesettings if officesettings.cancel_invoice_credit_note: cancelation = invoicing_generator.Generator( officesettings, None).cancel_invoice(self.get_object()) canceled = self.get_object() canceled.status = models.InvoiceStatus.CANCELED cancelation.save() canceled.canceled_by = cancelation canceled.save() officesettings.save() response = { 'canceled': self.serializer_class(self.get_object()).data, 'credit_note': self.serializer_class(cancelation).data } else: # The new invoicing has to be provided serializer = apiserializers.InvoiceCancelingWithCorrectiveInvoiceSerializer( data=request.data) if serializer.is_valid(): therapeutsettings = models.TherapeutSettings.objects.filter( user=self.request.user)[0] invoicing_serializer = apiserializers.ExaminationInvoicingSerializer( data=dict( serializer.validated_data['corrective_invoice'])) result = invoicing_generator.ExaminationInvoiceHelper(officesettings, therapeutsettings, request.user)\ .invoice_examination(invoicing_serializer, models.Examination.objects.get( id=request.data['examination']['id']), self.get_object()) if 'errors' in result: return Response(result['errors'], status=status.HTTP_400_BAD_REQUEST) corrective_invoice = models.Invoice.objects.get( id=result['invoiced']) response = { 'canceled': self.serializer_class(self.get_object()).data, 'corrective_invoice': self.serializer_class(corrective_invoice).data } else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(response, status=status.HTTP_202_ACCEPTED) else: return Response(status=status.HTTP_400_BAD_REQUEST)
def close(self, request, pk=None): current_examination = self.get_object() serializer = apiserializers.ExaminationInvoicingSerializer( data=request.data) if serializer.is_valid(): if serializer.data['status'] == 'notinvoiced': current_examination.status = models.Examination.EXAMINATION_NOT_INVOICED current_examination.status_reason = serializer.data['reason'] current_examination.save() return Response({'invoiced': None}) if serializer.data['status'] == 'invoiced': current_examination.invoice = self.generate_invoice( serializer.data, ) if serializer.data['paiment_mode'] == 'notpaid': current_examination.status = models.Examination.EXAMINATION_WAITING_FOR_PAIEMENT current_examination.save() if serializer.data['paiment_mode'] in ['check', 'cash']: current_examination.status = models.Examination.EXAMINATION_INVOICED_PAID current_examination.save() return Response({'invoiced': current_examination.invoice.id}) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def close(self, request, pk=None): current_examination = self.get_object() serializer = apiserializers.ExaminationInvoicingSerializer( data=request.data) return self._invoice_examination(current_examination, serializer, request.officesettings)