{"action":"created","comment":{"url":"https://api.github.com/repos/mirumee/saleor/pulls/comments/178244227","pull_request_review_id":108275446,"id":178244227,"diff_hunk":"@@ -1,27 +1,267 @@\n from django import forms\n from django.conf import settings\n from django.core.validators import MinValueValidator\n-from django.urls import reverse_lazy\n+from django.urls import reverse, reverse_lazy\n from django.utils.translation import npgettext_lazy, pgettext_lazy\n from django_prices.forms import MoneyField\n from payments import PaymentError, PaymentStatus\n \n from ...account.i18n import (\n     AddressForm as StorefrontAddressForm, PossiblePhoneNumberFormField)\n+from ...account.models import User\n from ...cart.forms import QuantityField\n from ...core.exceptions import InsufficientStock\n-from ...discount.utils import decrease_voucher_usage\n+from ...core.utils import ZERO_TAXED_MONEY\n+from ...discount.models import Voucher\n+from ...discount.utils import decrease_voucher_usage, increase_voucher_usage\n+from ...order import CustomPaymentChoices, OrderStatus\n from ...order.emails import send_note_confirmation\n-from ...order.models import Fulfillment, FulfillmentLine, OrderLine, OrderNote\n+from ...order.models import (\n+    Fulfillment, FulfillmentLine, Order, OrderLine, OrderNote, Payment)\n from ...order.utils import (\n     add_variant_to_order, cancel_fulfillment, cancel_order,\n     change_order_line_quantity, merge_duplicates_into_order_line,\n     recalculate_order)\n from ...product.models import Product, ProductVariant, Stock\n from ...product.utils import allocate_stock, deallocate_stock\n+from ...shipping.models import ANY_COUNTRY, ShippingMethodCountry\n from ..forms import AjaxSelect2ChoiceField\n from ..widgets import PhonePrefixWidget\n-from .utils import fulfill_order_line\n+from .utils import (\n+    fulfill_order_line, get_voucher_discount_for_order,\n+    update_order_with_user_addresses)\n+\n+\n+class CreateOrderFromDraftForm(forms.ModelForm):\n+    \"\"\"Save draft order as a ready to fulfill.\"\"\"\n+    notify_customer = forms.BooleanField(\n+        label=pgettext_lazy(\n+            'Send email to customer about order created by staff users',\n+            'Notify customer'),\n+        required=False, initial=True)\n+\n+    class Meta:\n+        model = Order\n+        fields = []\n+\n+    def __init__(self, *args, **kwargs):\n+        super().__init__(*args, **kwargs)\n+        if not self.instance.get_user_current_email():\n+            self.fields.pop('notify_customer')\n+\n+    def clean(self):\n+        super().clean()\n+        errors = []\n+        if self.instance.get_total_quantity() == 0:\n+            errors.append(forms.ValidationError(pgettext_lazy(\n+                'Create draft order form error',\n+                'Could not create order without any products')))\n+        if self.instance.is_shipping_required():\n+            method = self.instance.shipping_method\n+            shipping_address = self.instance.shipping_address\n+            if (\n+                method and shipping_address and\n+                method.country_code != ANY_COUNTRY and\n+                shipping_address.country.code != method.country_code\n+            ):\n+                errors.append(forms.ValidationError(pgettext_lazy(\n+                    'Create draft order form error',\n+                    'Shipping method is not valid for chosen shipping '\n+                    'address')))\n+        if errors:\n+            raise forms.ValidationError(errors)\n+        return self.cleaned_data\n+\n+    def save(self, commit=True):\n+        self.instance.status = OrderStatus.UNFULFILLED\n+        if self.instance.user:\n+            self.instance.user_email = self.instance.user.email\n+        if not self.instance.is_shipping_required():\n+            if self.instance.shipping_address:\n+                self.instance.shipping_address.delete()\n+            self.instance.shipping_method_name = None\n+            self.instance.shipping_price = ZERO_TAXED_MONEY\n+        return super().save(commit)\n+\n+\n+class OrderCustomerForm(forms.ModelForm):\n+    \"\"\"Set customer details in an order.\"\"\"\n+\n+    update_addresses = forms.BooleanField(\n+        label=pgettext_lazy(\n+            'Update an order with user default addresses',\n+            'Set billing and shipping address in order to customer defaults'),\n+        initial=True, required=False)\n+    user = AjaxSelect2ChoiceField(\n+        queryset=User.objects.all(),\n+        fetch_data_url=reverse_lazy('dashboard:ajax-users-list'),\n+        required=False)\n+\n+    class Meta:\n+        model = Order\n+        fields = ['user', 'user_email']\n+        labels = {\n+            'user': pgettext_lazy('Order customer', 'User'),\n+            'user_email': pgettext_lazy(\n+                'Order customer email',\n+                'Email')}\n+\n+    def __init__(self, *args, **kwargs):\n+        super().__init__(*args, **kwargs)\n+        if self.instance.user:\n+            self.fields['user'].set_initial(\n+                self.instance.user, label=self.instance.user.ajax_label)\n+\n+    def clean(self):\n+        cleaned_data = super().clean()\n+        user_email = cleaned_data.get('user_email')\n+        user = cleaned_data.get('user')\n+        if user and user_email:\n+            raise forms.ValidationError(pgettext_lazy(\n+                'Edit customer details in order form error',\n+                'An order can be related either with an email or an existing '\n+                'user account'))\n+        return self.cleaned_data\n+\n+    def save(self):\n+        super().save()\n+        if self.cleaned_data.get('update_addresses'):\n+            update_order_with_user_addresses(self.instance)\n+        return self.instance\n+\n+\n+class OrderRemoveCustomerForm(forms.ModelForm):\n+    \"\"\"Remove customer data from an order.\"\"\"\n+\n+    class Meta:\n+        model = Order\n+        fields = []\n+\n+    def __init__(self, *args, **kwargs):","path":"saleor/dashboard/order/forms.py","position":51,"original_position":144,"commit_id":"3bf006c54780d12b8519c277efecbb500a567d05","original_commit_id":"3bf006c54780d12b8519c277efecbb500a567d05","user":{"login":"Pacu2","id":21290461,"avatar_url":"https://avatars3.githubusercontent.com/u/21290461?v=4","gravatar_id":"","url":"https://api.github.com/users/Pacu2","html_url":"https://github.com/Pacu2","followers_url":"https://api.github.com/users/Pacu2/followers","following_url":"https://api.github.com/users/Pacu2/following{/other_user}","gists_url":"https://api.github.com/users/Pacu2/gists{/gist_id}","starred_url":"https://api.github.com/users/Pacu2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Pacu2/subscriptions","organizations_url":"https://api.github.com/users/Pacu2/orgs","repos_url":"https://api.github.com/users/Pacu2/repos","events_url":"https://api.github.com/users/Pacu2/events{/privacy}","received_events_url":"https://api.github.com/users/Pacu2/received_events","type":"User","site_admin":false},"body":"Not needed","created_at":"2018-03-30T07:14:45Z","updated_at":"2018-03-30T07:33:13Z","html_url":"https://github.com/mirumee/saleor/pull/1971#discussion_r178244227","pull_request_url":"https://api.github.com/repos/mirumee/saleor/pulls/1971","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/mirumee/saleor/pulls/comments/178244227"},"html":{"href":"https://github.com/mirumee/saleor/pull/1971#discussion_r178244227"},"pull_request":{"href":"https://api.github.com/repos/mirumee/saleor/pulls/1971"}}},"pull_request":{"url":"https://api.github.com/repos/mirumee/saleor/pulls/1971","id":177095760,"html_url":"https://github.com/mirumee/saleor/pull/1971","diff_url":"https://github.com/mirumee/saleor/pull/1971.diff","patch_url":"https://github.com/mirumee/saleor/pull/1971.patch","issue_url":"https://api.github.com/repos/mirumee/saleor/issues/1971","number":1971,"state":"open","locked":false,"title":"Ability to create order from dashboard","user":{"login":"mad-anne","id":20802901,"avatar_url":"https://avatars1.githubusercontent.com/u/20802901?v=4","gravatar_id":"","url":"https://api.github.com/users/mad-anne","html_url":"https://github.com/mad-anne","followers_url":"https://api.github.com/users/mad-anne/followers","following_url":"https://api.github.com/users/mad-anne/following{/other_user}","gists_url":"https://api.github.com/users/mad-anne/gists{/gist_id}","starred_url":"https://api.github.com/users/mad-anne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mad-anne/subscriptions","organizations_url":"https://api.github.com/users/mad-anne/orgs","repos_url":"https://api.github.com/users/mad-anne/repos","events_url":"https://api.github.com/users/mad-anne/events{/privacy}","received_events_url":"https://api.github.com/users/mad-anne/received_events","type":"User","site_admin":false},"body":"I want to merge this change because it adds an ability to create order from dashboard. Those orders have `DRAFT` status and can be edited until confirmed by staff users. Draft status allows to add new products, change shipping, modify discount, assign customer or user email and edit shipping and billing address. Confirmed draft order changes status to `UNFULFILLED` and customer can be notified (optionally) about it.\r\n\r\nCloses #1125 \r\n\r\n### TODO's\r\n\r\n1. [x] Reapply a voucher every time order state changes\r\n1. [x] Remove a customer (an existing user or user email) from an order, optionally with related billing and shipping address\r\n1. [x] Orders created from dashboard do not require all data that storefront does to confirm (`shipping_address`, `billing_address`, `shipping_method`)\r\n1. [x] Prevent discounts changing order total to less than 0\r\n1. [x] Display `Same as shipping address` in billing address details if equal\r\n1. [x] Default `discount_amount` value in order set to 0\r\n1. [x] Do not allow payment actions for orders without billing address and drafts\r\n1. [x] Don't send any emails if customer in an order is a guest\r\n1. [x] Marking order as paid\r\n1. [x] Invoices for IRL orders\r\n1. [x] Guides about draft orders\r\n1. [ ] Add missing tests\r\n\r\n### Pull Request Checklist\r\n\r\n1. [ ] Privileged views and APIs are guarded by proper permission checks.\r\n1. [ ] All visible strings are translated with proper context.\r\n1. [ ] All data-formatting is locale-aware (dates, numbers, and so on).\r\n1. [ ] Database queries are optimized and the number of queries is constant.\r\n1. [ ] The changes are tested.\r\n1. [ ] The code is documented (docstrings, project documentation).\r\n1. [ ] Python code quality checks pass: `pycodestyle`, `pydocstyle`, `pylint`.\r\n1. [ ] JavaScript code quality checks pass: `eslint`.\r\n\r\n\r\n[Edit]\r\n\r\nDraft order details dashboard page.\r\n\r\nOrder header for draft orders is `Order draft #<number>`. You can edit shipping, discount and discount amount by clicking on their names/values. You can edit customer and billing/shipping address by clicking `Edit` button next to them. Billing address contains `Same as shipping address` note if not differs from shipping address (but you can still edit it). `Create order` button is highlighted as the most important action.\r\n\r\n![draft-order-details](https://user-images.githubusercontent.com/20802901/38030397-ca4b96f8-3298-11e8-9ee3-b17ead442c95.png)\r\n\r\nEdit voucher modal.\r\n\r\nYou can choose any voucher to apply to an order without validation if it is correct for current state - it will be done while saving draft order. If some voucher is already applied, additional `Remove voucher from order` action appears in modal.\r\n\r\n![order-voucher-edit](https://user-images.githubusercontent.com/20802901/38030331-9830780a-3298-11e8-924c-2cc26e0a99db.png)\r\n\r\nEdit customer modal.\r\n\r\nYou can set any existing user as a customer in a draft order (order is invisible until created) or just set an email, but only one option is accepted. If some customer is already set, additional `Remove customer from order` action appears in modal. Order can have no customer set - then customer is simple a `Guest`.\r\n\r\n![order-customer-edit](https://user-images.githubusercontent.com/20802901/38030336-9c5c3b26-3298-11e8-9206-092fd773f6a1.png)","created_at":"2018-03-23T15:00:21Z","updated_at":"2018-03-30T07:33:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c503bd897e2b63a91c41af582c81e04d5bd9a2cd","assignee":{"login":"mad-anne","id":20802901,"avatar_url":"https://avatars1.githubusercontent.com/u/20802901?v=4","gravatar_id":"","url":"https://api.github.com/users/mad-anne","html_url":"https://github.com/mad-anne","followers_url":"https://api.github.com/users/mad-anne/followers","following_url":"https://api.github.com/users/mad-anne/following{/other_user}","gists_url":"https://api.github.com/users/mad-anne/gists{/gist_id}","starred_url":"https://api.github.com/users/mad-anne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mad-anne/subscriptions","organizations_url":"https://api.github.com/users/mad-anne/orgs","repos_url":"https://api.github.com/users/mad-anne/repos","events_url":"https://api.github.com/users/mad-anne/events{/privacy}","received_events_url":"https://api.github.com/users/mad-anne/received_events","type":"User","site_admin":false},"assignees":[{"login":"mad-anne","id":20802901,"avatar_url":"https://avatars1.githubusercontent.com/u/20802901?v=4","gravatar_id":"","url":"https://api.github.com/users/mad-anne","html_url":"https://github.com/mad-anne","followers_url":"https://api.github.com/users/mad-anne/followers","following_url":"https://api.github.com/users/mad-anne/following{/other_user}","gists_url":"https://api.github.com/users/mad-anne/gists{/gist_id}","starred_url":"https://api.github.com/users/mad-anne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mad-anne/subscriptions","organizations_url":"https://api.github.com/users/mad-anne/orgs","repos_url":"https://api.github.com/users/mad-anne/repos","events_url":"https://api.github.com/users/mad-anne/events{/privacy}","received_events_url":"https://api.github.com/users/mad-anne/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":85254421,"url":"https://api.github.com/repos/mirumee/saleor/labels/in%20progress","name":"in progress","color":"2980B9","default":false}],"milestone":{"url":"https://api.github.com/repos/mirumee/saleor/milestones/27","html_url":"https://github.com/mirumee/saleor/milestone/27","labels_url":"https://api.github.com/repos/mirumee/saleor/milestones/27/labels","id":3142817,"number":27,"title":"2018.03","description":"","creator":{"login":"elwoodxblues","id":5421321,"avatar_url":"https://avatars1.githubusercontent.com/u/5421321?v=4","gravatar_id":"","url":"https://api.github.com/users/elwoodxblues","html_url":"https://github.com/elwoodxblues","followers_url":"https://api.github.com/users/elwoodxblues/followers","following_url":"https://api.github.com/users/elwoodxblues/following{/other_user}","gists_url":"https://api.github.com/users/elwoodxblues/gists{/gist_id}","starred_url":"https://api.github.com/users/elwoodxblues/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elwoodxblues/subscriptions","organizations_url":"https://api.github.com/users/elwoodxblues/orgs","repos_url":"https://api.github.com/users/elwoodxblues/repos","events_url":"https://api.github.com/users/elwoodxblues/events{/privacy}","received_events_url":"https://api.github.com/users/elwoodxblues/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":9,"state":"open","created_at":"2018-02-26T08:47:40Z","updated_at":"2018-03-29T14:55:41Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/mirumee/saleor/pulls/1971/commits","review_comments_url":"https://api.github.com/repos/mirumee/saleor/pulls/1971/comments","review_comment_url":"https://api.github.com/repos/mirumee/saleor/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mirumee/saleor/issues/1971/comments","statuses_url":"https://api.github.com/repos/mirumee/saleor/statuses/3bf006c54780d12b8519c277efecbb500a567d05","head":{"label":"mad-anne:create-order","ref":"create-order","sha":"3bf006c54780d12b8519c277efecbb500a567d05","user":{"login":"mad-anne","id":20802901,"avatar_url":"https://avatars1.githubusercontent.com/u/20802901?v=4","gravatar_id":"","url":"https://api.github.com/users/mad-anne","html_url":"https://github.com/mad-anne","followers_url":"https://api.github.com/users/mad-anne/followers","following_url":"https://api.github.com/users/mad-anne/following{/other_user}","gists_url":"https://api.github.com/users/mad-anne/gists{/gist_id}","starred_url":"https://api.github.com/users/mad-anne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mad-anne/subscriptions","organizations_url":"https://api.github.com/users/mad-anne/orgs","repos_url":"https://api.github.com/users/mad-anne/repos","events_url":"https://api.github.com/users/mad-anne/events{/privacy}","received_events_url":"https://api.github.com/users/mad-anne/received_events","type":"User","site_admin":false},"repo":{"id":103639749,"name":"saleor","full_name":"mad-anne/saleor","owner":{"login":"mad-anne","id":20802901,"avatar_url":"https://avatars1.githubusercontent.com/u/20802901?v=4","gravatar_id":"","url":"https://api.github.com/users/mad-anne","html_url":"https://github.com/mad-anne","followers_url":"https://api.github.com/users/mad-anne/followers","following_url":"https://api.github.com/users/mad-anne/following{/other_user}","gists_url":"https://api.github.com/users/mad-anne/gists{/gist_id}","starred_url":"https://api.github.com/users/mad-anne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mad-anne/subscriptions","organizations_url":"https://api.github.com/users/mad-anne/orgs","repos_url":"https://api.github.com/users/mad-anne/repos","events_url":"https://api.github.com/users/mad-anne/events{/privacy}","received_events_url":"https://api.github.com/users/mad-anne/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mad-anne/saleor","description":"An e-commerce storefront for Python and Django","fork":true,"url":"https://api.github.com/repos/mad-anne/saleor","forks_url":"https://api.github.com/repos/mad-anne/saleor/forks","keys_url":"https://api.github.com/repos/mad-anne/saleor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mad-anne/saleor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mad-anne/saleor/teams","hooks_url":"https://api.github.com/repos/mad-anne/saleor/hooks","issue_events_url":"https://api.github.com/repos/mad-anne/saleor/issues/events{/number}","events_url":"https://api.github.com/repos/mad-anne/saleor/events","assignees_url":"https://api.github.com/repos/mad-anne/saleor/assignees{/user}","branches_url":"https://api.github.com/repos/mad-anne/saleor/branches{/branch}","tags_url":"https://api.github.com/repos/mad-anne/saleor/tags","blobs_url":"https://api.github.com/repos/mad-anne/saleor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mad-anne/saleor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mad-anne/saleor/git/refs{/sha}","trees_url":"https://api.github.com/repos/mad-anne/saleor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mad-anne/saleor/statuses/{sha}","languages_url":"https://api.github.com/repos/mad-anne/saleor/languages","stargazers_url":"https://api.github.com/repos/mad-anne/saleor/stargazers","contributors_url":"https://api.github.com/repos/mad-anne/saleor/contributors","subscribers_url":"https://api.github.com/repos/mad-anne/saleor/subscribers","subscription_url":"https://api.github.com/repos/mad-anne/saleor/subscription","commits_url":"https://api.github.com/repos/mad-anne/saleor/commits{/sha}","git_commits_url":"https://api.github.com/repos/mad-anne/saleor/git/commits{/sha}","comments_url":"https://api.github.com/repos/mad-anne/saleor/comments{/number}","issue_comment_url":"https://api.github.com/repos/mad-anne/saleor/issues/comments{/number}","contents_url":"https://api.github.com/repos/mad-anne/saleor/contents/{+path}","compare_url":"https://api.github.com/repos/mad-anne/saleor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mad-anne/saleor/merges","archive_url":"https://api.github.com/repos/mad-anne/saleor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mad-anne/saleor/downloads","issues_url":"https://api.github.com/repos/mad-anne/saleor/issues{/number}","pulls_url":"https://api.github.com/repos/mad-anne/saleor/pulls{/number}","milestones_url":"https://api.github.com/repos/mad-anne/saleor/milestones{/number}","notifications_url":"https://api.github.com/repos/mad-anne/saleor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mad-anne/saleor/labels{/name}","releases_url":"https://api.github.com/repos/mad-anne/saleor/releases{/id}","deployments_url":"https://api.github.com/repos/mad-anne/saleor/deployments","created_at":"2017-09-15T09:29:43Z","updated_at":"2018-03-27T14:56:21Z","pushed_at":"2018-03-28T15:27:54Z","git_url":"git://github.com/mad-anne/saleor.git","ssh_url":"git@github.com:mad-anne/saleor.git","clone_url":"https://github.com/mad-anne/saleor.git","svn_url":"https://github.com/mad-anne/saleor","homepage":"http://getsaleor.com","size":36465,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"mirumee:master","ref":"master","sha":"59a3dddc720264bb5bf819f2f13f9709343a1dcc","user":{"login":"mirumee","id":170574,"avatar_url":"https://avatars3.githubusercontent.com/u/170574?v=4","gravatar_id":"","url":"https://api.github.com/users/mirumee","html_url":"https://github.com/mirumee","followers_url":"https://api.github.com/users/mirumee/followers","following_url":"https://api.github.com/users/mirumee/following{/other_user}","gists_url":"https://api.github.com/users/mirumee/gists{/gist_id}","starred_url":"https://api.github.com/users/mirumee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mirumee/subscriptions","organizations_url":"https://api.github.com/users/mirumee/orgs","repos_url":"https://api.github.com/users/mirumee/repos","events_url":"https://api.github.com/users/mirumee/events{/privacy}","received_events_url":"https://api.github.com/users/mirumee/received_events","type":"Organization","site_admin":false},"repo":{"id":8162715,"name":"saleor","full_name":"mirumee/saleor","owner":{"login":"mirumee","id":170574,"avatar_url":"https://avatars3.githubusercontent.com/u/170574?v=4","gravatar_id":"","url":"https://api.github.com/users/mirumee","html_url":"https://github.com/mirumee","followers_url":"https://api.github.com/users/mirumee/followers","following_url":"https://api.github.com/users/mirumee/following{/other_user}","gists_url":"https://api.github.com/users/mirumee/gists{/gist_id}","starred_url":"https://api.github.com/users/mirumee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mirumee/subscriptions","organizations_url":"https://api.github.com/users/mirumee/orgs","repos_url":"https://api.github.com/users/mirumee/repos","events_url":"https://api.github.com/users/mirumee/events{/privacy}","received_events_url":"https://api.github.com/users/mirumee/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mirumee/saleor","description":"An e-commerce storefront for Python and Django","fork":false,"url":"https://api.github.com/repos/mirumee/saleor","forks_url":"https://api.github.com/repos/mirumee/saleor/forks","keys_url":"https://api.github.com/repos/mirumee/saleor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mirumee/saleor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mirumee/saleor/teams","hooks_url":"https://api.github.com/repos/mirumee/saleor/hooks","issue_events_url":"https://api.github.com/repos/mirumee/saleor/issues/events{/number}","events_url":"https://api.github.com/repos/mirumee/saleor/events","assignees_url":"https://api.github.com/repos/mirumee/saleor/assignees{/user}","branches_url":"https://api.github.com/repos/mirumee/saleor/branches{/branch}","tags_url":"https://api.github.com/repos/mirumee/saleor/tags","blobs_url":"https://api.github.com/repos/mirumee/saleor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mirumee/saleor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mirumee/saleor/git/refs{/sha}","trees_url":"https://api.github.com/repos/mirumee/saleor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mirumee/saleor/statuses/{sha}","languages_url":"https://api.github.com/repos/mirumee/saleor/languages","stargazers_url":"https://api.github.com/repos/mirumee/saleor/stargazers","contributors_url":"https://api.github.com/repos/mirumee/saleor/contributors","subscribers_url":"https://api.github.com/repos/mirumee/saleor/subscribers","subscription_url":"https://api.github.com/repos/mirumee/saleor/subscription","commits_url":"https://api.github.com/repos/mirumee/saleor/commits{/sha}","git_commits_url":"https://api.github.com/repos/mirumee/saleor/git/commits{/sha}","comments_url":"https://api.github.com/repos/mirumee/saleor/comments{/number}","issue_comment_url":"https://api.github.com/repos/mirumee/saleor/issues/comments{/number}","contents_url":"https://api.github.com/repos/mirumee/saleor/contents/{+path}","compare_url":"https://api.github.com/repos/mirumee/saleor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mirumee/saleor/merges","archive_url":"https://api.github.com/repos/mirumee/saleor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mirumee/saleor/downloads","issues_url":"https://api.github.com/repos/mirumee/saleor/issues{/number}","pulls_url":"https://api.github.com/repos/mirumee/saleor/pulls{/number}","milestones_url":"https://api.github.com/repos/mirumee/saleor/milestones{/number}","notifications_url":"https://api.github.com/repos/mirumee/saleor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mirumee/saleor/labels{/name}","releases_url":"https://api.github.com/repos/mirumee/saleor/releases{/id}","deployments_url":"https://api.github.com/repos/mirumee/saleor/deployments","created_at":"2013-02-12T16:46:39Z","updated_at":"2018-03-30T01:41:14Z","pushed_at":"2018-03-29T23:06:20Z","git_url":"git://github.com/mirumee/saleor.git","ssh_url":"git@github.com:mirumee/saleor.git","clone_url":"https://github.com/mirumee/saleor.git","svn_url":"https://github.com/mirumee/saleor","homepage":"http://getsaleor.com","size":40898,"stargazers_count":1751,"watchers_count":1751,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":842,"mirror_url":null,"archived":false,"open_issues_count":194,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":842,"open_issues":194,"watchers":1751,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mirumee/saleor/pulls/1971"},"html":{"href":"https://github.com/mirumee/saleor/pull/1971"},"issue":{"href":"https://api.github.com/repos/mirumee/saleor/issues/1971"},"comments":{"href":"https://api.github.com/repos/mirumee/saleor/issues/1971/comments"},"review_comments":{"href":"https://api.github.com/repos/mirumee/saleor/pulls/1971/comments"},"review_comment":{"href":"https://api.github.com/repos/mirumee/saleor/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mirumee/saleor/pulls/1971/commits"},"statuses":{"href":"https://api.github.com/repos/mirumee/saleor/statuses/3bf006c54780d12b8519c277efecbb500a567d05"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"Pacu2"}}