prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Promotional code field and button overlap each other.
  In the checkout process:
  <img width="465" alt="zrzut ekranu 2018-01-10 o 10 02 22" src="https://user-images.githubusercontent.com/1561204/34765559-24865056-f5f2-11e7-9e2a-d0ff639e7a79.png">
  
  
  </issue>
  <code>
  [start of saleor/discount/forms.py]
  1 from datetime import date
  2 
  3 from django import forms
  4 from django.utils.encoding import smart_text
  5 from django.utils.translation import pgettext_lazy
  6 
  7 from .models import NotApplicable, Voucher
  8 
  9 
  10 class VoucherField(forms.ModelChoiceField):
  11 
  12     default_error_messages = {
  13         'invalid_choice': pgettext_lazy(
  14             'voucher', pgettext_lazy(
  15                 'Voucher form error', 'Discount code incorrect or expired')),
  16     }
  17 
  18 
  19 class CheckoutDiscountForm(forms.Form):
  20 
  21     voucher = VoucherField(
  22         queryset=Voucher.objects.none(),
  23         to_field_name='code',
  24         label=pgettext_lazy(
  25             'Checkout discount form label for voucher field',
  26             'Gift card or discount code'),
  27         widget=forms.TextInput)
  28 
  29     def __init__(self, *args, **kwargs):
  30         self.checkout = kwargs.pop('checkout')
  31         initial = kwargs.get('initial', {})
  32         if 'voucher' not in initial:
  33             initial['voucher'] = self.checkout.voucher_code
  34         kwargs['initial'] = initial
  35         super().__init__(*args, **kwargs)
  36         self.fields['voucher'].queryset = Voucher.objects.active(
  37             date=date.today())
  38 
  39     def clean(self):
  40         cleaned_data = super().clean()
  41         if 'voucher' in cleaned_data:
  42             voucher = cleaned_data['voucher']
  43             try:
  44                 discount = voucher.get_discount_for_checkout(self.checkout)
  45                 cleaned_data['discount'] = discount
  46             except NotApplicable as e:
  47                 self.add_error('voucher', smart_text(e))
  48         return cleaned_data
  49 
  50     def apply_discount(self):
  51         discount = self.cleaned_data['discount']
  52         voucher = self.cleaned_data['voucher']
  53         self.checkout.discount = discount
  54         self.checkout.voucher_code = voucher.code
  55
  [end of saleor/discount/forms.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/saleor/discount/forms.py b/saleor/discount/forms.py
  --- a/saleor/discount/forms.py
  +++ b/saleor/discount/forms.py
  @@ -21,7 +21,7 @@
       voucher = VoucherField(
           queryset=Voucher.objects.none(),
           to_field_name='code',
  -        label=pgettext_lazy(
  +        help_text=pgettext_lazy(
               'Checkout discount form label for voucher field',
               'Gift card or discount code'),
           widget=forms.TextInput)
  
verification_info: {"golden_diff": "diff --git a/saleor/discount/forms.py b/saleor/discount/forms.py\n--- a/saleor/discount/forms.py\n+++ b/saleor/discount/forms.py\n@@ -21,7 +21,7 @@\n     voucher = VoucherField(\n         queryset=Voucher.objects.none(),\n         to_field_name='code',\n-        label=pgettext_lazy(\n+        help_text=pgettext_lazy(\n             'Checkout discount form label for voucher field',\n             'Gift card or discount code'),\n         widget=forms.TextInput)\n", "issue": "Promotional code field and button overlap each other.\nIn the checkout process:\r\n<img width=\"465\" alt=\"zrzut ekranu 2018-01-10 o 10 02 22\" src=\"https://user-images.githubusercontent.com/1561204/34765559-24865056-f5f2-11e7-9e2a-d0ff639e7a79.png\">\r\n\n", "before_files": [{"content": "from datetime import date\n\nfrom django import forms\nfrom django.utils.encoding import smart_text\nfrom django.utils.translation import pgettext_lazy\n\nfrom .models import NotApplicable, Voucher\n\n\nclass VoucherField(forms.ModelChoiceField):\n\n    default_error_messages = {\n        'invalid_choice': pgettext_lazy(\n            'voucher', pgettext_lazy(\n                'Voucher form error', 'Discount code incorrect or expired')),\n    }\n\n\nclass CheckoutDiscountForm(forms.Form):\n\n    voucher = VoucherField(\n        queryset=Voucher.objects.none(),\n        to_field_name='code',\n        label=pgettext_lazy(\n            'Checkout discount form label for voucher field',\n            'Gift card or discount code'),\n        widget=forms.TextInput)\n\n    def __init__(self, *args, **kwargs):\n        self.checkout = kwargs.pop('checkout')\n        initial = kwargs.get('initial', {})\n        if 'voucher' not in initial:\n            initial['voucher'] = self.checkout.voucher_code\n        kwargs['initial'] = initial\n        super().__init__(*args, **kwargs)\n        self.fields['voucher'].queryset = Voucher.objects.active(\n            date=date.today())\n\n    def clean(self):\n        cleaned_data = super().clean()\n        if 'voucher' in cleaned_data:\n            voucher = cleaned_data['voucher']\n            try:\n                discount = voucher.get_discount_for_checkout(self.checkout)\n                cleaned_data['discount'] = discount\n            except NotApplicable as e:\n                self.add_error('voucher', smart_text(e))\n        return cleaned_data\n\n    def apply_discount(self):\n        discount = self.cleaned_data['discount']\n        voucher = self.cleaned_data['voucher']\n        self.checkout.discount = discount\n        self.checkout.voucher_code = voucher.code\n", "path": "saleor/discount/forms.py"}]}