2017-08-17 12 views
1

請求書列の値を取得します。Odoo 10 - 私はaccount.invoiceモデルのリンク解除メソッドをオーバーライドしたい

現在、この方法は次のとおりです。

@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() 

move_nameは(すなわち、有効なシーケンスがこの請求書に与えられた)割り当てられている場合、それはあなたが請求書を削除することはできません。 これは完璧で完璧な会計ルールですが、実際に請求書を削除する必要がある特定のビジネスの実際の運用についての理解が低いことを反映しています。

だから私は、それが発生した場合でも、ユーザーが最後の請求書を削除できるようにしたいです。 、プログラム的に(Pythonの消去方法の内側に)次のアクションが必要とされていることを行うために

  1. move_nameマッチの値があればその請求書に
  2. チェックを適用するシーケンスのIDを特定しますその場合、請求書を削除し、シーケンス

の次の値から1を引き、そのシーケンス

  • によって生成された最後の値で誰かがするのに役立つ可能性がありその3つのステップがどのように達成されるのかを強調します(特に最初のステップ)。

    問合せ::これはあなたの最初のクエリに対する答えである

  • 答えて

    1

    おかげで、どのようにその請求書に適用される一連のIDを識別するために?

    コード:

    @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() 
    

    が開いた状態で/検証5枚の請求書があり、あなたはinvoice no:3を削除したい考えてみましょう、ので、私はあなたの2番目と3番目の質問で少し混乱しています。だから、move_nameの値が同定された配列によって生成された最後の値と一致した場合、あなたの要件ごとに、あなたがチェックし、それが一致した場合には、シーケンスのnext_valueから1を差し引きます。

    したがって、シーケンスのnext_valueは5になり、別の請求書を作成すると、シーケンス番号はinvoice no:5として複製され、シーケンスの一意性制約に違反します。

    あなたは、ユーザーが問題なくのみ最後に作成された請求書を削除する場合。

    だから、それについて考えると、私は私の答えはあなたを助け願っています。

    +0

    私は、ユーザーが作成しただけで、最後の請求書を削除したいです。 (ほとんどの国の会計基準/法律に従った)請求書の削除を許可しないで、間違いを修正するための余裕を提供するのは、公正な取引です。 –

    関連する問題