コード例 #1
0
ファイル: views.py プロジェクト: XecusM/SESHAT
    def get_context_data(self, form=None, **kwargs):
        '''
        Add more context to template
        '''
        context = super().get_context_data()
        if self.request.GET.get('next'):
            context['next'] = self.request.GET.get('next')

        if form:
            context['form'] = form
        else:
            context['form'] = forms.OrderForm()

        if 'error_message' in kwargs:
            context['error_message'] = kwargs['error_message']

        if 'items_count' in kwargs:
            context['items_count'] = kwargs['items_count']
            context['items_data'] = json.dumps(kwargs['items_data'])

        context['items'] = json.dumps([
            item for item in stock_models.Item.objects.filter(
                is_active=True, is_assembly=False).order_by('code').values(
                    'id',
                    'code',
                    'desciption',
                )
        ])
        return context
コード例 #2
0
    def test_order_form_invalid_data(self):
        '''
        Test invalid form for order form
        '''
        form = forms.OrderForm(data={
            'company': '',
        })

        self.assertFalse(form.is_valid())
コード例 #3
0
    def test_order_form_valid_data(self):
        '''
        Test valid form for order form
        '''
        form = forms.OrderForm(data={
            'company': self.company.id,
        })

        self.assertTrue(form.is_valid())
コード例 #4
0
    def test_order_form_fields(self):
        '''
        Test order form fields
        '''
        expected = [
            'company',
            'invoice',
            'invoice_date',
            'note',
        ]

        actual = list(forms.OrderForm().fields)
        self.assertSequenceEqual(expected, actual)
コード例 #5
0
ファイル: views.py プロジェクト: XecusM/SESHAT
    def get_context_data(self, form=None, **kwargs):
        '''
        Add more context to template
        '''
        if not self.object:
            self.object = self.get_object()
        context = super().get_context_data()

        context['purchaseorder'] = self.object

        if self.request.GET.get('next'):
            context['next'] = self.request.GET.get('next')

        if form:
            context['form'] = form
        else:
            context['form'] = forms.OrderForm(instance=self.object)
            i = 0
            items_data = list()
            for item in self.object.get_items():
                i += 1
                items_data.append({
                    'name': f"{i}item",
                    'value': item.item.item.id,
                    'quantity': item.item.quantity,
                    'price': float(item.price),
                    'note': item.note
                })
            context['items_data'] = json.dumps(items_data)
            context['items_count'] = self.object.get_items().count()

        if 'error_message' in kwargs:
            context['error_message'] = kwargs['error_message']

        if 'items_count' in kwargs:
            context['items_count'] = kwargs['items_count']
            context['items_data'] = json.dumps(kwargs['items_data'])

        context['items'] = json.dumps([
            item for item in stock_models.Item.objects.filter(
                is_active=True, is_assembly=False).order_by('code').values(
                    'id',
                    'code',
                    'desciption',
                )
        ])
        return context
コード例 #6
0
ファイル: views.py プロジェクト: XecusM/SESHAT
    def post(self, request, *args, **kwargs):
        """
        Handle POST requests: instantiate a form instance with the passed
        POST variables and then check if it's valid.
        """
        form = forms.OrderForm(request.POST)

        items_data = [{
            'name': f"{i}item",
            'value': int(request.POST[f"{i}item"]),
            'quantity': int(request.POST[f"{i}quantity"]),
            'price': int(request.POST[f"{i}price"]),
            'note': request.POST[f"{i}note"]
        } for i in range(1,
                         int(request.POST['items_count']) + 1)]
        items_values = [
            int(request.POST[f"{i}item"])
            for i in range(1,
                           int(request.POST['items_count']) + 1)
        ]
        for i in range(1, int(request.POST['items_count']) + 1):
            if len(list(dict.fromkeys(items_values))) != len(items_values):
                error_message = _("Can't choose the same item twice.")
                return self.render_to_response(
                    self.get_context_data(form=form,
                                          error_message=error_message,
                                          items_count=int(
                                              request.POST['items_count']),
                                          items_data=items_data))

        if form.is_valid():
            self.object = form.save()
            self.object.created_by = self.request.user
            self.object.save()

            for i in range(1, int(request.POST['items_count']) + 1):
                item = stock_models.Item.objects.get(
                    id=request.POST[f"{i}item"])
                item_move = stock_models.ItemMove.objects.create(
                    item=item,
                    location=item.location,
                    type=stock_models.ItemMove.ADD,
                    related_to=stock_models.ItemMove.PURCHASE,
                    quantity=request.POST[f"{i}quantity"])
                purchases_models.PurchaseItems.objects.create(
                    order=self.object,
                    item=item_move,
                    price=request.POST[f"{i}price"],
                    note=request.POST[f"{i}note"],
                )
            # Store user activity
            activity = Activity.objects.create_activity(
                activity_object=self.object,
                activity=Activity.CREATE,
                user=self.request.user,
                message="Purchase Order-{0}/{1}".format(
                    self.object.company.name, self.object.id))
            activity.save()

            return HttpResponseRedirect(self.get_success_url())
        else:
            return self.render_to_response(
                self.get_context_data(form=form,
                                      items_count=int(
                                          request.POST['items_count']),
                                      items_data=items_data))