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([{ 'id': item.id, 'code': item.code, 'desciption': item.desciption, 'total_quantity': item.quantity, 'available_quantity': item.get_quantity(item.location) } for item in stock_models.Item.objects.filter(is_active=True, ).order_by('code')]) return context
def test_order_form_invalid_data(self): ''' Test invalid form for order form ''' form = forms.OrderForm(data={ 'company': '', }) self.assertFalse(form.is_valid())
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())
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)
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['saleorder'] = 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, '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, ).order_by('code').values( 'id', 'code', 'desciption', ) ]) return context
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"]), '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)) item = stock_models.Item.objects.get(id=request.POST[f"{i}item"]) if item.is_assembly: for sub_item in item.get_assembly_items(): item_form = stock_forms.ItemMoveForm( data={ 'item': sub_item.sub_item.id, 'type': 'R', 'location': sub_item.sub_item.location.id, 'quantity': int(request.POST[f"{i}quantity"]) * sub_item.quantity, }) if not item_form.is_valid(): error_message = item_form.errors 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)) else: item_form = stock_forms.ItemMoveForm( data={ 'item': item.id, 'type': 'R', 'location': item.location.id, 'quantity': int(request.POST[f"{i}quantity"]), 'note': request.POST[f"{i}note"] }) if not item_form.is_valid(): error_message = item_form.errors 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.REMOVE, related_to=stock_models.ItemMove.SELL, quantity=request.POST[f"{i}quantity"]) sales_models.SaleItems.objects.create( order=self.object, item=item_move, price=item.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="Sale 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))