Пример #1
0
    def get_context_data(self, **kwargs):

        full_box_url = self.get_box_url_by_filters(product__isnull=False)
        empty_box_url = self.get_box_url_by_filters(product__isnull=True)

        new_box_url = self.get_box_scanned_url(BoxNumber.get_next_box_number())

        # schema http or https
        schema = 'http'
        if settings.DEBUG is False and hasattr(self.request, 'schema'):
            schema = self.request.schema

        protocol_and_host = "{}://{}".format(
            schema, self.request.META.get('HTTP_HOST', ''))

        full_box_url = protocol_and_host + full_box_url
        empty_box_url = protocol_and_host + empty_box_url
        new_box_url = protocol_and_host + new_box_url

        empty_box = Box.objects.filter(product__isnull=True).first()
        full_box = Box.objects.filter(product__isnull=False).first()

        return {
            'full_box_url': full_box_url,
            'empty_box_url': empty_box_url,
            'new_box_url': new_box_url,
            'empty_box': empty_box,
            'full_box': full_box,
            'next_box_number': BoxNumber.get_next_box_number(),
        }
    def test_post_box_number_form(self):
        client = self.setup_user_and_client('john', 'doe4')

        box_number = BoxNumber.get_next_box_number()

        response = client.post(
            self.url,
            {
                'mode': ManualMoveBoxView.MODE_ENTER_BOX_NUMBER,
                'box_number': box_number
            },
        )
        self.assertEqual(404, response.status_code)
        self.assertEqual(
            ManualMoveBoxView.MODE_ENTER_BOX_NUMBER,
            response.context['mode'],
        )
        self.assertIsInstance(
            response.context['box_number_form'],
            FilledBoxNumberForm,
        )

        box = Box.objects.create(
            box_number=box_number,
            box_type=BoxType.objects.get(box_type_code='Evans'),
            product=Product.objects.get(prod_name='Canned Potatoes'),
        )
    def test_post_box_number_form(self):
        user = User.objects.create_user('jdoe4', '*****@*****.**', 'abc123')

        client = Client()
        client.force_login(user)

        box_number = BoxNumber.get_next_box_number()

        response = client.post(
            self.url,
            {
                'mode': ManualMoveBoxView.MODE_ENTER_BOX_NUMBER,
                'box_number': box_number
            },
        )
        self.assertEqual(404, response.status_code)
        self.assertEqual(
            ManualMoveBoxView.MODE_ENTER_BOX_NUMBER,
            response.context['mode'],
        )
        self.assertIsInstance(
            response.context['box_number_form'],
            FilledBoxNumberForm,
        )

        box = Box.objects.create(
            box_number=box_number,
            box_type=BoxType.objects.get(box_type_code='Evans'),
            product=Product.objects.get(prod_name='Canned Potatoes'),
        )
    def test_prepare_pallet_and_pallet_boxes__duplicate_box_numbers(self):

        pallet = Pallet.objects.create(
            name='duplicate_box_numbers'
        )

        location = Location.get_location('01', '02', 'B1')

        box_number = BoxNumber.get_next_box_number()

        product1, product2 = Product.objects.all()[:2]

        pallet_form = self.get_pallet_form(pallet)
        build_pallet_form = self.get_build_pallet_form(location)

        post_data = management_form_post_data(
            BuildPalletView.formset_prefix,
            2
        )

        post_data.update(
            formset_form_post_data(
                BuildPalletView.formset_prefix,
                0,
                self.get_box_item_form_data(
                    box_number,
                    product1,
                )
            )
        )

        post_data.update(
            formset_form_post_data(
                BuildPalletView.formset_prefix,
                1,
                self.get_box_item_form_data(
                    box_number,
                    product2,
                )
            )
        )

        box_forms = BuildPalletView.BoxFormFactory(
            post_data,
            prefix=BuildPalletView.formset_prefix
        )

        self.assertTrue(pallet_form.is_valid())
        self.assertTrue(build_pallet_form.is_valid())
        self.assertTrue(box_forms.is_valid())

        view = BuildPalletView()
        pattern = f"Duplicate box numbers: {box_number}"
        with self.assertRaisesRegex(BuildPalletError, pattern):
            view.prepare_pallet_and_pallet_boxes(
                pallet_form,
                build_pallet_form,
                box_forms,
            )
Пример #5
0
    def get_context_data(self, **kwargs):

        full_box_url = self.get_box_url_by_filters(product__isnull=False)
        empty_box_url = self.get_box_url_by_filters(product__isnull=True)

        new_box_url = self.get_box_scanned_url(BoxNumber.get_next_box_number())

        empty_box = Box.objects.filter(product__isnull=True).first()
        full_box = Box.objects.filter(product__isnull=False).first()

        return {
            'full_box_url': full_box_url,
            'empty_box_url': empty_box_url,
            'new_box_url': new_box_url,
            'empty_box': empty_box,
            'full_box': full_box,
            'next_box_number': BoxNumber.get_next_box_number()
        }
 def build_boxes(number_of_boxes):
     boxes = []
     default_box_type = Box.box_type_default()
     for i in range(number_of_boxes):
         box_number = BoxNumber.get_next_box_number()
         box = Box.objects.create(
             box_number=box_number,
             box_type=default_box_type,
         )
         boxes.append(box)
     return boxes
    def test_post_location_form(self):
        user = User.objects.create_user('jdoe5', '*****@*****.**', 'abc123')

        client = Client()
        client.force_login(user)

        box = Box.objects.create(
            box_number=BoxNumber.get_next_box_number(),
            box_type=BoxType.objects.get(box_type_code='Evans'),
            product=Product.objects.get(prod_name='Canned Potatoes'),
            date_filled=timezone.now(),
            exp_year=2022,
            quantity=0,
        )
        self.assertIsNone(box.location)

        location = Location.objects.first()

        response = client.post(
            self.url, {
                'mode': ManualMoveBoxView.MODE_ENTER_LOCATION,
                'loc_row': location.loc_row_id,
                'loc_bin': location.loc_bin_id,
                'loc_tier': location.loc_tier_id,
                'box_pk': box.pk,
            })

        self.assertEqual(200, response.status_code, response.content)

        context_box = response.context.get('box')
        self.assertIsNotNone(context_box)
        self.assertEqual(
            box.pk,
            context_box.pk,
        )
        self.assertEqual(
            location.pk,
            context_box.location.pk,
        )
    def test_prepare_pallet_and_pallet_boxes__successful_run(self):

        pallet = Pallet.objects.create(
            name='prepare pallet & boxes'
        )

        location = Location.get_location('01', '02', 'C1')

        pallet_form = self.get_pallet_form(pallet)
        build_pallet_form = self.get_build_pallet_form(location)

        product1, product2 = Product.objects.all()[2:4]

        box_number1 = BoxNumber.get_next_box_number()
        Box.objects.create(
            box_number=box_number1,
            box_type=Box.box_type_default(),
        )
        exp_year1 = timezone.now().year + 1

        box_number2 = BoxNumber.get_next_box_number()
        Box.objects.create(
            box_number=box_number2,
            box_type=Box.box_type_default(),
        )
        exp_year2 = timezone.now().year + 2

        post_data = management_form_post_data(
            BuildPalletView.formset_prefix,
            2
        )

        post_data.update(
            formset_form_post_data(
                BuildPalletView.formset_prefix,
                0,
                self.get_box_item_form_data(
                    box_number1,
                    product1,
                    exp_year=exp_year1,
                )
            )
        )

        post_data.update(
            formset_form_post_data(
                BuildPalletView.formset_prefix,
                1,
                self.get_box_item_form_data(
                    box_number2,
                    product2,
                    exp_year=exp_year2,
                )
            )
        )

        box_forms = BuildPalletView.BoxFormFactory(
            post_data,
            prefix=BuildPalletView.formset_prefix
        )

        self.assertTrue(pallet_form.is_valid())
        self.assertTrue(build_pallet_form.is_valid())
        self.assertTrue(box_forms.is_valid())

        self.assertNotEqual(box_number1, box_number2)

        view = BuildPalletView()
        pallet_out, location_out, boxes_by_box_number = \
            view.prepare_pallet_and_pallet_boxes(
                pallet_form,
                build_pallet_form,
                box_forms,
            )

        self.assertEqual(location, pallet_out.location)
        self.assertEqual(Pallet.FILL, pallet_out.pallet_status)

        self.assertEqual(location, location_out)

        self.assertEqual(
            {box_number1, box_number2},
            boxes_by_box_number.keys(),
        )

        pallet_box1 = boxes_by_box_number[box_number1]
        self.assertEqual(box_number1, pallet_box1.box_number)
        self.assertEqual(pallet, pallet_box1.pallet)
        self.assertEqual(box_number1, pallet_box1.box.box_number)
        self.assertEqual(product1, pallet_box1.product)
        self.assertEqual(exp_year1, pallet_box1.exp_year)

        pallet_box2 = boxes_by_box_number[box_number2]
        self.assertEqual(box_number2, pallet_box2.box_number)
        self.assertEqual(pallet, pallet_box2.pallet)
        self.assertEqual(box_number2, pallet_box2.box.box_number)
        self.assertEqual(product2, pallet_box2.product)
        self.assertEqual(exp_year2, pallet_box2.exp_year)