flectra/addons/blanket_so_po/tests/test_sale_to_invoice_and_delivery.py
riddhikansaraflectra f27882fa3c Master so/po riddhi
2018-06-20 07:39:59 +00:00

181 lines
8.1 KiB
Python

# Part of Flectra. See LICENSE file for full copyright and licensing
# details.
import logging
from flectra.tests.common import TransactionCase
class TestSaleOrder(TransactionCase):
def setUp(self):
super(TestSaleOrder, self).setUp()
self.so_model = self.env['sale.order']
self.so_line_model = self.env['sale.order.line']
self.stock_picking_model = self.env['stock.picking']
self.stock_move_model = self.env['stock.move']
self.stock_location_model = self.env['stock.location']
self.sale_wizard = self.env['sale.transfer.products']
self.invoice_wizard = self.env['sale.advance.payment.inv']
self.sale1 = self.env.ref('blanket_so_po.sale_order_blanket1')
self.so_line_with_blanket = self.env.ref(
'blanket_so_po.sale_order_line_blanket_1')
self.so_line_without_blanket = self.env.ref(
'blanket_so_po.sale_order_line_blanket_2')
self.so_line_without_blanket2 = self.env.ref(
'blanket_so_po.sale_order_line_blanket_3')
self.inv_obj = self.env['account.invoice']
def test_1_sale_with_blanket(self):
self.sale1.force_quotation_send()
self.sale1.action_confirm()
self.assertTrue(self.sale1.state, 'sale')
self.assertTrue(self.sale1.invoice_status, 'to invoice')
logging.info('Test Cases for Blanket Sale order')
logging.info('Sale Order - %s' % (self.sale1.name))
logging.info(
'============================================================'
'===================+=====')
logging.info(
' | Blanket So Line | Product | Ordered Qty | Remaining '
'to transfer | Delivered |')
for line in self.sale1.order_line:
logging.info(
' %s | %s | %d | %d '
' | %d ' % (
line.blanket_so_line, line.product_id.name,
line.product_uom_qty, line.remaining_to_so_transfer,
line.qty_delivered))
logging.info(
'========================================================'
'=========================')
uom_qty = self.so_line_with_blanket.product_uom_qty
transfer_qty = 2
remaining_qty = 0.0
logging.info(
'*****************************************************')
logging.info(
'========================================================='
'======================+=====')
logging.info(
' | Product | Initial Demand | Reserved | Done |')
for picking in self.sale1.picking_ids:
for line in picking.move_lines:
logging.info('| %s | %d |%d | %d' % (
line.product_id.name, line.product_uom_qty,
line.reserved_availability, line.quantity_done))
logging.info(
'======================================================='
'==========================')
remaining_qty = uom_qty - transfer_qty
transfer_wizard = self.sale_wizard.create(
{'ref_id': self.so_line_with_blanket.id,
'transfer_qty': transfer_qty})
transfer_wizard.split_qty_wt_newline()
self.assertEqual(remaining_qty, uom_qty - transfer_qty,
'Remaining to transfer qty is different')
transfer_qty += 5
remaining_qty = uom_qty - transfer_qty
transfer_wizard = self.sale_wizard.create(
{'ref_id': self.so_line_with_blanket.id, 'transfer_qty': 5})
transfer_wizard.split_qty_wt_newline()
self.assertEqual(remaining_qty, uom_qty - transfer_qty,
'Remaining to transfer qty is different')
logging.info(
'*****************************************************')
logging.info(
'Sale Order after Blanket Split lines- %s' % (self.sale1.name))
logging.info(
'========================================================='
'======================+=====')
logging.info(
' | Blanket So Line | Product | Ordered Qty | Remaining '
'to transfer | Delivered |')
for line in self.sale1.order_line:
logging.info(
' %s | %s | %d | %d '
' | %d ' % (
line.blanket_so_line, line.product_id.name,
line.product_uom_qty, line.remaining_to_so_transfer,
line.qty_delivered))
logging.info(
'======================================================='
'==========================')
self.assertEqual(self.sale1.picking_ids.move_lines[-1].quantity_done,
0.0)
self.assertEqual(self.sale1.picking_ids.move_lines[-2].quantity_done,
0.0)
self.sale1.picking_ids.move_lines[-1].quantity_done = 2
logging.info(
'*****************************************************')
logging.info('Delivery Order - %s' % (self.sale1.picking_ids.name))
logging.info(
'==========================================================='
'====================+=====')
logging.info(
' | Product | Initial Demand | Reserved | Done |')
for move in self.sale1.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.sale1.picking_ids.action_confirm()
self.sale1.picking_ids.action_assign()
res_dict = self.sale1.picking_ids.button_validate()
backorder_wizard = self.env[(res_dict.get('res_model'))].browse(
res_dict.get('res_id'))
backorder_wizard.process()
logging.info(
'*****************************************************')
logging.info(
'Sale Order after validate Delivery order- %s' % (
self.sale1.name))
logging.info(
'=========================================================='
'=====================+=====')
logging.info(
' | Blanket So Line | Product | Ordered Qty | Remaining '
'to transfer | Delivered |invoice status')
for line in self.sale1.order_line:
logging.info(
' %s | %s | %d | %d '
' | %d |%s' % (
line.blanket_so_line, line.product_id.name,
line.product_uom_qty, line.remaining_to_so_transfer,
line.qty_delivered, line.invoice_status))
logging.info(
'======================================================='
'==========================')
self.assertEqual(len(self.sale1.picking_ids), 2,
'There is no 2 pickings are available')
context = {"active_model": 'sale.order',
"active_ids": [self.sale1.id],
"active_id": self.sale1.id}
for invoice in self.sale1.invoice_ids:
logging.info('Invoice of Delivered Quantity.')
for line in invoice.invoice_line_ids:
logging.info(
'==================================================')
logging.info(
'| Product | Quantity | Unit Price | Subtotal |')
logging.info(
'=================================================|')
logging.info(
'|%s |%d |%d |%d | ' % (
line.product_id.name, line.quantity,
line.price_unit,
line.price_subtotal))
invoice.with_context(context).invoice_validate()