コード例 #1
0
ファイル: views.py プロジェクト: Exomus/LibreOsteo
 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})
コード例 #2
0
    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)
コード例 #3
0
 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)
コード例 #4
0
ファイル: views.py プロジェクト: Exomus/LibreOsteo
 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)