4 "summary": "A SDK that enables the developer to open a table at a restaurant, follow the order and reorder items.",
5 "description": "# MyCheck Dine SDK\n\nAn SDK that enables the developer to open a table at a restaurant, follow the order and reorder items (payment - coming soon).\n\nThis SDK will enable your app to access an open check on a table at a restaurant, view the check (bill), reorder items and pay the check (payment functions coming soon).\n\nThe basic flow of the transactions is:\n- The guest accesses the app to get a four digit code\n- The code is given to the guest's food server who will access the open check on the POS and enter the code.\n- The POS will connect the check with MyCheck services\n- The guest will then be able to see the check and interact with the check by reordering existing items and paying.\n- Once the guest pays the check he/she no longer has access to the check.\n\n\n## Requirements\n\niOS 9 or above.\n\nSwift 3.0\n\n## Installation\n\nMyCheck Restaurant SDK is available through [CocoaPods](http://cocoapods.org). You will first need to ask a MyCheck team member to give you read privileges to the MyCheck Repository. Once you have gotten the privileges, install it by simply adding the following lines to the top of your Podfile:\n\n```\nsource 'http://bitbucket.org/erez_spatz/pod-spec-repo.git'\nsource 'http://github.com/CocoaPods/Specs.git'\n```\nThis will set both the public CocoaPods repo and the MyCheck private repo as targets for CocoaPods to search for frameworks from.\n\nYou can add YOUR_USER_NAME@ before the 'bitbucket.org' so the pod tool won't need to ask you for it every time you update or install.\n\nInside the target add:\n\n```\npod \"MyCheckDine\"\n```\nNow you can run 'pod install'\n\n## Use\nThe Dine Singleton will be the point of contact that will allow you to create, follow and make actions on the users order. In order to manage the users session (login, logout etc.) you will need to use the session singleton.\n\nStart by adding\n```\nimport MyCheckCore\n```\n\n\nto the top of the class where you want to use MyCheck.\n\nIn your app delegate's `application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)` function call the configure function of the Session singleton:\n\n```\nSession.shared.configure(YOUR_PUBLISHABLE_KEY, environment: .sandbox)\n```\nThis will setup the SDK to work with the desired environment.\n\nBefore using any other functions you will have to login the user. Login is done by first obtaining a refresh token from your server (that, in turn, will obtain it from the MyCheck server using the secret). Once you have the refresh token call the login function on the Session singleton:\n\n\n```\nSession.shared.login(REFRESH_TOKEN, success: HANDLE_SUCCESS\n}, fail: HANDLE_FAIL)\n\n```\nOnce you are logged in, you can open a table. Now you can start doing dine in specific actions using the Dine singleton. Import the Dine module of the SDK.\n```\nimport MyCheckDine\n```\n\nBellow is a flow chart that explains the Dine in flow and explains what functions need to be called in each stage of the user experience.\n![Dine flow chart](https://s3-eu-west-1.amazonaws.com/docs.mycheckapp.com/Resources/flowChart.jpg \"Dine flow chart\")\nThe first step in the process is generating a 4 digit code. The code generated by the MyCheck server is valid for a limited time, for a specific user in a specific location. This code, when entered into the POS enables MyCheck to sync the client with his order on the POS and can start receiving order updates and perform actions on it. The user will need to have a method of payment in order for this to succeed. Once you have received a code, display it to the user so he, in turn, can show it to his waiter / bartender. If you wish to support Apple Pay you will need some additional setup, please read the Apple Pay section.\n\n```\nDine.shared.generateCode(hotelId: HOTEL_ID , restaurantId: RESTUARANT_ID, success: HANDLE_SUCCESS\n}, fail: HANDLE_FAIL)\n\n```\n\nNow that a code was generated and displayed you will probably want to start polling the MyCheck server in order to get order updates. You will get an update when the order is opened, and on every change made to the bill. In order to poll the order, turn on the poller and implement the 'OrderPollerDelegate'.\n\n```\nDine.shared.poller.delegate = self\n\nMyCheck.shared.poller.startPolling()\n\n```\n\nThe delegate example implementation:\n\n```\nextension YOUR_VIEWCONTROLLER : OrderPollerDelegate{\n\nfunc orderUpdated(order:Order){\n\n//Deal with order updates. Check the 'status' variable to make sure the status didn't change, otherwise update the order displayed to the user with the updated bill.\n}\n\n\nfunc failingToReceiveUpdates(lastReceivedError: NSError , failCount:Int){\n//this callback will be called if the poller failed the last few calls to the MyCheck server. This means your app may not be in sync with the POS.\n}\n}\n```\n\n\nIn order to reorder items send an array of tuples to the reorder call. Each tuple has an Int representing the amount to order and the item to reorder.\n\n```\nMyCheck.shared.reorderItems(items: [(3, order.items.first!)], success: {\n//Handle success\n}, fail: {error in\n// handle fail\n})\n```\n### Payment\nIf you have an open table with a non zero balance and a payment method you can make a payment.\nThe first step is to create a `PaymentDetails` object\n\n```\nlet details = PaymentDetails(order: THE_ORDER, amount: THE_AMOUNT_TO_CHARGE, tip: TIP_AMOUNT, paymentMethod: A_PAYMENT_METHOD)\n\n// OR\n\nlet details = PaymentDetails(order: THE_ORDER, items: ITEMS_THAT_SHOULD_BE_BOUGHT, tip: TIP_AMOUNT, paymentMethod: A_PAYMENT_METHOD)\n```\n\nThe `PaymentDetails` has 2 failable constructors. One is for paying by amount and the second is for paying by items. The constructors will fail if the order supplied is not open or if the amount is greater than the order balance.\nYou will also need to get a `PaymentMethodInterface` object, For more on this please review the MyCheckWalletUI documents.\nOnce you have a `PaymentDetails` object call the `makePayment` function.\n\n```\nDine.shared.makePayment(paymentDetails: details, displayDelegate: self, success: {\n\n}, fail: {error in\n\n})\n```\n\n## Apple Pay\n\nIn order to set up Apple Pay please review the MyCheckWallet or MyCheckWalletUI docs. Once Apple Pay is set up their are 2 additional changes you will need to make in order for it to work with the Dine SDK.\n### Generate Code\nWhen generating a code MyCheck must be able to charge the default payment method without the users interaction in certain cases (for example if the user walks out and forgets to pay). Apple Pay creates tokens that can be used only once that expires after some time. For this reason we will need to prompt the user to Pay with Apple Pay at this point.\nIn order to accomplish this the generateCode function has 2 extra optional parameters (that are required for Apple Pay support):\n1. DisplayViewControllerDelegate : The delegate function will be called when a Apple Pay view controller needs to be displayed or dismissed.\n2. ApplePayController - The controller will supply the Dine SDK with the means to query the wallet about Apple Pay and create Apple Pay tokens. You should get the instance of the ApplePayController from the Wallet singleton (e.g. 'Wallet.shared.applePayController')\n\nThe code snippet bellow demonstrates how the generate code is called when Apple Pay must be supported\n\n```\nDine.shared.generateCode(hotelId: nil, restaurantId: THE_ID, displayDelegate: self, applePayController: Wallet.shared.applePayController, success: {\ncode in\n\n}\n}, fail: {error in\n\n})\n\n\n//DisplayViewControllerDelegate implementation\nfunc display(viewController: UIViewController) {\n\nself.present(viewController, animated: true, completion: nil)\n\n}\n\n\nfunc dismiss(viewController: UIViewController) {\n\nviewController.dismiss(animated: true, completion: nil)\n\n}\n```\nIn the same manner, you must pass the `displayDelegate` to the payment function in order for Apple Pay to work.\n\n\n##Benefits\n\nIn order to support benefits add the following line to your podfile:\n```\npod \"MyCheckDine/Benefits\"\n```\n\nYou can now use the static functions in the Benefits class to query and redeem benefits. Please refer to the API docs for more information.\n## Authors\n\nElad Schiller, eladsc@mycheck.co.il\n## License\n\nPlease read the LICENSE file available in the project",
6 "homepage": "http://www.mycheck.io/",
12 "elad schiller": "eladsc@mycheck.co.il"
15 "git": "https://github.com/mycheck888/MyCheckDine.git",
22 "MyCheckDine/Classes/*",
23 "MyCheckDine/Classes/extenshions tools/**",
24 "MyCheckDine/Classes/Networking/**",
25 "MyCheckDine/Classes/objects/**",
26 "MyCheckDine/Classes/OrderPoller/**"
44 "source_files": "MyCheckDine/Classes/Benefits/**/*",