176 lines
7.7 KiB
Python
176 lines
7.7 KiB
Python
# Part of Flectra. See LICENSE file for full copyright and licensing
|
|
# details.
|
|
|
|
import logging
|
|
|
|
from flectra.exceptions import Warning
|
|
from flectra.tests.common import TransactionCase
|
|
|
|
|
|
class TestPurchaseOrder(TransactionCase):
|
|
def setUp(self):
|
|
super(TestPurchaseOrder, self).setUp()
|
|
self.stock_move = self.env['stock.move']
|
|
self.inv_obj = self.env['account.invoice']
|
|
self.purchase_wizard = self.env['purchase.transfer.products']
|
|
self.po1 = self.env.ref('blanket_so_po.blanket_purchase_order')
|
|
self.po_line_with_blanket = self.env.ref(
|
|
'blanket_so_po.blanket_purchase_order_line_1')
|
|
self.po_line_without_blanket = self.env.ref(
|
|
'blanket_so_po.blanket_purchase_order_line_2')
|
|
self.po_line_without_blanket2 = self.env.ref(
|
|
'blanket_so_po.blanket_purchase_order_line_3')
|
|
|
|
def test_2_purchase_with_blanket(self):
|
|
self.assertTrue(self.po1, 'Purchase: no purchase order created')
|
|
self.po1.button_confirm()
|
|
self.assertEqual(self.po1.state, 'purchase',
|
|
'Purchase: PO state should be "Purchase"')
|
|
self.assertTrue(self.po1.picking_ids, "Picking should be created.")
|
|
logging.info('Test Cases for Blanket Purchase order')
|
|
logging.info('Purchase Order - %s' % (self.po1.name))
|
|
logging.info(
|
|
'============================================================='
|
|
'==================+=====')
|
|
logging.info(
|
|
' | Blanket Po Line | Product | Ordered Qty | Remaining '
|
|
'to transfer | Received Qty |')
|
|
for line in self.po1.order_line:
|
|
logging.info(
|
|
' %s | %s | %d | %d '
|
|
' | %d ' % (
|
|
line.blanket_po_line, line.product_id.name,
|
|
line.product_qty,
|
|
line.remaining_to_po_transfer, line.qty_received))
|
|
logging.info(
|
|
'========================================================='
|
|
'========================')
|
|
#
|
|
blanket_lines_po = self.po1.order_line.search(
|
|
[('order_id', '=', self.po1.id),
|
|
('blanket_po_line', '=', True)])
|
|
uom_qty = self.po_line_with_blanket.product_qty
|
|
transfer_qty = 2
|
|
remaining_qty = 0.0
|
|
|
|
len_blanket_lines = len(blanket_lines_po)
|
|
total_po_line = len(self.po1.order_line)
|
|
move_lines = len(self.po1.picking_ids.move_lines)
|
|
logging.info(
|
|
'*****************************************************')
|
|
logging.info('Delivery Order for Purchase Order- %s' % (
|
|
self.po1.picking_ids.name))
|
|
logging.info(
|
|
'============================================================'
|
|
'===================+=====')
|
|
logging.info(
|
|
' | Product | Initial Demand | Reserved | Done |')
|
|
for move in self.po1.picking_ids.move_lines:
|
|
logging.info('| %s | %d |%d | %d' % (
|
|
move.product_id.name, move.product_uom_qty,
|
|
move.reserved_availability, move.quantity_done))
|
|
logging.info(
|
|
'========================================================'
|
|
'=========================')
|
|
self.assertEqual(move_lines, total_po_line - len_blanket_lines,
|
|
'There is no equal number of move lines in move')
|
|
|
|
self.assertTrue(self.po_line_with_blanket.blanket_po_line,
|
|
'Purchase: There is a Blanket po line')
|
|
|
|
remaining_qty = uom_qty - transfer_qty
|
|
transfer_wizard = self.purchase_wizard.create(
|
|
{'ref_id': self.po_line_with_blanket.id,
|
|
'transfer_qty': transfer_qty})
|
|
transfer_wizard.split_qty_wt_newline_po()
|
|
self.assertEqual(remaining_qty, uom_qty - transfer_qty,
|
|
'Remaining to transfer qty is different')
|
|
|
|
total_po_line = len(self.po1.order_line)
|
|
|
|
transfer_qty += 5
|
|
remaining_qty = uom_qty - transfer_qty
|
|
transfer_wizard = self.purchase_wizard.create(
|
|
{'ref_id': self.po_line_with_blanket.id, 'transfer_qty': 5})
|
|
transfer_wizard.split_qty_wt_newline_po()
|
|
self.assertEqual(remaining_qty, uom_qty - transfer_qty,
|
|
'Remaining to transfer qty is different')
|
|
|
|
logging.info(
|
|
'*****************************************************')
|
|
logging.info(
|
|
'Purchase Order after Blanket Split lines- %s' % (
|
|
self.po1.name))
|
|
logging.info(
|
|
'============================================================'
|
|
'===================+=====')
|
|
logging.info(
|
|
' | Blanket Po Line | Product | Ordered Qty | Remaining '
|
|
'to transfer | Received Qty |')
|
|
for line in self.po1.order_line:
|
|
logging.info(
|
|
' %s | %s | %d | %d '
|
|
' | %d ' % (
|
|
line.blanket_po_line, line.product_id.name,
|
|
line.product_qty,
|
|
line.remaining_to_po_transfer, line.qty_received))
|
|
logging.info(
|
|
'========================================================='
|
|
'========================')
|
|
|
|
with self.assertRaises(Warning):
|
|
self.po1.button_cancel()
|
|
|
|
self.picking = self.po1.picking_ids[0]
|
|
self.assertEqual(self.picking.move_lines[-1].quantity_done, 0.0)
|
|
self.assertEqual(self.picking.move_lines[-2].quantity_done, 0.0)
|
|
self.picking.move_lines[-1].quantity_done = 2
|
|
|
|
self.po1._compute_picking()
|
|
self.po1._compute_is_shipped()
|
|
|
|
logging.info(
|
|
'*****************************************************')
|
|
logging.info('Delivery Order - %s' % (self.picking.name))
|
|
logging.info(
|
|
'========================================================='
|
|
'======================+=====')
|
|
logging.info(
|
|
' id | Product | Initial Demand | Reserved | Done |')
|
|
for move in self.picking.move_lines:
|
|
logging.info(
|
|
'%d | %s | %d |%d | %d' % (
|
|
move.id, move.product_id.name, move.product_uom_qty,
|
|
move.reserved_availability, move.quantity_done))
|
|
logging.info(
|
|
'========================================================='
|
|
'========================')
|
|
|
|
self.picking.force_assign()
|
|
res_dict = self.picking.button_validate()
|
|
backorder_wizard = self.env[(res_dict.get('res_model'))].browse(
|
|
res_dict.get('res_id'))
|
|
backorder_wizard.process()
|
|
self.picking.action_done()
|
|
|
|
logging.info(
|
|
'*****************************************************')
|
|
logging.info('Purchase Order after validate Delivery order- %s' % (
|
|
self.po1.name))
|
|
logging.info(
|
|
'============================================================'
|
|
'===================+=====')
|
|
logging.info(
|
|
' | Blanket Po Line | Product | Ordered Qty | Remaining '
|
|
'to transfer | Received Qty |')
|
|
for line in self.po1.order_line:
|
|
logging.info(
|
|
' %s | %s | %d | %d '
|
|
' | %d ' % (
|
|
line.blanket_po_line, line.product_id.name,
|
|
line.product_qty,
|
|
line.remaining_to_po_transfer, line.qty_received))
|
|
logging.info(
|
|
'========================================================='
|
|
'========================')
|