1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/helpdesk_account/tests/test_helpdesk_account.py
2024-12-10 09:04:09 +07:00

136 lines
5.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.helpdesk.tests import common
from odoo.tests.common import Form, tagged
@tagged('post_install', '-at_install')
class TestHelpdeskAccount(common.HelpdeskCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
# give the test team ability to create credit note
cls.test_team.use_credit_notes = True
# create a sale order and invoice
cls.product = cls.env['product.product'].create({
'name': 'product 1',
'type': 'consu',
'invoice_policy': 'order',
})
cls.so = cls.env['sale.order'].create({
'partner_id': cls.partner.id,
})
def test_helpdesk_account_1(self):
""" Test used to check that the functionalities of After sale in Helpdesk (credit note).
"""
self.env['sale.order.line'].create({
'product_id': self.product.id,
'price_unit': 10,
'order_id': self.so.id,
})
self.so.action_confirm()
self.so._create_invoices()
invoice = self.so.invoice_ids
invoice.action_post()
# helpdesk.ticket access rights
ticket = self.env['helpdesk.ticket'].create({
'name': 'test',
'partner_id': self.partner.id,
'team_id': self.test_team.id,
'sale_order_id': self.so.id,
})
credit_note_form = Form(self.env['account.move.reversal'].with_context({
'default_helpdesk_ticket_id': ticket.id,
}), view=self.env.ref('helpdesk_account.view_account_move_reversal_inherit_helpdesk_account'))
for inv in self.so.invoice_ids:
credit_note_form.move_ids.add(inv)
credit_note_form.reason = 'test'
credit_note = credit_note_form.save()
res = credit_note.refund_moves()
refund = self.env['account.move'].browse(res['res_id'])
self.assertEqual(len(refund), 1, "No refund created")
self.assertEqual(refund.state, 'draft', "Wrong status of the refund")
self.assertEqual(refund.ref, 'Reversal of: %s, %s' % (invoice.name, credit_note_form.reason), "The reference is wrong")
self.assertEqual(len(ticket.invoice_ids), 1,
"The ticket should be linked to a credit note")
self.assertEqual(ticket.invoices_count, 1,
"The ticket should be linked to a credit note")
self.assertEqual(refund[0].id, ticket.invoice_ids[0].id,
"The correct credit note should be referenced in the ticket")
refund.action_post()
last_message = str(ticket.message_ids[0].body)
self.assertTrue(refund.display_name in last_message and 'Refund' in last_message,
'Refund Post should be logged on the ticket')
def test_create_multiple_credit_notes_in_ticket(self):
""" Test used to check a multiple credit notes are created in the ticket.
Test Case:
----------
- Create sale order With 10 product Qty
- Confirm sale order and create invoice
- Confirm Invoice
- Create helpdesk Ticket
- Create a credit note(Partial Refund)
- Confirm a credit note
- Create a credit note(Full Refund)
- Check the credit note state
- Create a credit note With Form
"""
journal_id = self.env['account.journal'].search([('type', '=', 'sale'), ('company_id', '=', self.main_company_id)], limit=1).id
self.env['sale.order.line'].create({
'product_id': self.product.id,
'price_unit': 10,
'order_id': self.so.id,
})
self.so.action_confirm()
self.so._create_invoices()
invoice = self.so.invoice_ids
invoice.action_post()
# helpdesk.ticket access rights
ticket = self.env['helpdesk.ticket'].create({
'name': 'test',
'partner_id': self.partner.id,
'team_id': self.test_team.id,
'sale_order_id': self.so.id,
})
# create a Partial Refund
credit_note = self.env['account.move.reversal'].create({
'helpdesk_ticket_id': ticket.id,
'reason': 'test',
'journal_id': journal_id,
'move_ids': self.so.invoice_ids,
})
res = credit_note.refund_moves()
move = self.env['account.move'].browse(res['res_id'])
move.invoice_line_ids.quantity = 2
move.action_post()
self.assertEqual(invoice.state, 'posted', "credit note should be posted.")
# create a Full Refund
credit_note = self.env['account.move.reversal'].create({
'helpdesk_ticket_id': ticket.id,
'reason': 'test',
'journal_id': journal_id,
'move_ids': invoice,
})
res = credit_note.modify_moves()
new_invoice = self.env['account.move'].browse(res['res_id'])
self.assertEqual(invoice.state, 'posted', "reversed invoice remain in posted state")
self.assertEqual(new_invoice.state, 'draft', "newly created invoice should be in draft state.")
# create a Refund
credit_note_form = Form(self.env['account.move.reversal'].with_context({
'default_helpdesk_ticket_id': ticket.id,
}), view=self.env.ref('helpdesk_account.view_account_move_reversal_inherit_helpdesk_account'))
for inv in self.so.invoice_ids:
credit_note_form.move_ids.add(inv)
credit_note_form.reason = 'test'
credit_note_form.save()