2017-08-17 4 views
1

Ich möchte die Unlink-Methode des account.invoice-Modells überschreiben.Odoo 10 - Abrufen des Werts der Rechnungssequenz

Derzeit ist diese Methode:

@api.multi 
def unlink(self): 
    for invoice in self: 
     if invoice.state not in ('draft', 'cancel'): 
      raise UserError(
       _('You cannot delete an invoice which is not draft or cancelled. You should refund it instead.')) 
     elif invoice.move_name: 
      raise UserError(_(
       'You cannot delete an invoice after it has been validated (and received a number). You can set it back to "Draft" state and modify its content, then re-confirm it.')) 
    return super(AccountInvoice, self).unlink() 

Wenn move_name (das heißt eine gültige Folge zu dieser Rechnung gegeben wurde) zugewiesen wurde, ist es nicht Sie die Rechnung entbindet lassen. Dies ist zwar eine perfekte und einwandfreie Bilanzierungsregel, spiegelt jedoch das schlechte Verständnis der tatsächlichen Geschäftsabläufe in bestimmten Unternehmen wider, in denen Sie tatsächlich eine Rechnung löschen müssen.

So möchte ich Benutzern erlauben, letzte Rechnung zu löschen, auch wenn es ausgelöst wurde.

Um das zu tun, programmatisch (innerhalb des Python Löschmethode) werden die folgenden Maßnahmen erforderlich:

  1. ID der Sequenz identifizieren, die
  2. überprüfen, ob der Wert von move_name Einstimmungen zu dieser Rechnung gilt mit dem letzten von dieser Sequenz
  3. wenn so generierte Wert, die Rechnung löschen und einen von dem nächsten Wert der Sequenz

subtrahieren Könnte jemand helfen hervorheben, wie diese 3 Schritte erreicht werden könnten (besonders der erste).

Danke,

Antwort

1

Dies ist die Antwort auf Ihre erste Frage ist:

Abfrage: Wie ID der Sequenz zu identifizieren, die zu dieser Rechnung gilt?

Code:

@api.multi 
    def unlink(self): 
     for invoice in self: 
      if invoice.state not in ('draft', 'cancel'): 
       raise UserError(_('You cannot delete an invoice which is not draft or cancelled. You should refund it instead.')) 
      elif invoice.move_name: 
       print "movename", invoice.move_name 
       if invoice.journal_id.sequence_id: 
        sequence_id = invoice.journal_id.sequence_id.id 
        print sequence_id 
       raise UserError(_('You cannot delete an invoice after it has been validated (and received a number). You can set it back to "Draft" state and modify its content, then re-confirm it.')) 
     return super(AccountInvoice, self).unlink() 

Ich bin ein wenig verwirrt mit dem 2. und 3. Frage, weil Wichtige Überlegungen gibt es 5 Rechnungen validiert/in offenen Zustand, und Sie wollen invoice no:3 löschen. Entsprechend Ihrer Anforderung werden Sie prüfen, ob der Wert von move_name mit dem letzten Wert übereinstimmt, der von der identifizierten Sequenz generiert wurde, und wenn er übereinstimmt, werden Sie 1 vom next_value der Sequenz subtrahieren.

So wird der next_value der Sequenz 5 und wenn Sie eine andere Rechnung erstellen, wird die Sequenznummer als invoice no:5 dupliziert werden, die die eindeutige Einschränkung der Sequenzen verletzen wird.

Wenn Sie möchten, dass Ihre Benutzer nur die zuletzt erstellte Rechnung löschen, dann ist das kein Problem.

Also denken Sie darüber nach und ich hoffe meine Antwort hilft Ihnen.

+0

Ich möchte Benutzer nur die zuletzt erstellte Rechnung löschen. Es ist ein fairer Handel, es ihnen nicht zu erlauben, Rechnungen zu löschen (gemäß Rechnungslegungsstandards/Gesetzgebung in den meisten Ländern) und ihnen einen Raum zu geben, Fehler zu beheben. –