aboutsummaryrefslogtreecommitdiffstats
path: root/apps/checkin
diff options
context:
space:
mode:
Diffstat (limited to 'apps/checkin')
-rw-r--r--apps/checkin/README.rst103
-rw-r--r--apps/checkin/__init__.py0
-rw-r--r--apps/checkin/checkin.mindnode/QuickLook/Preview.jpgbin0 -> 57589 bytes
-rw-r--r--apps/checkin/checkin.mindnode/contents.xml1507
-rw-r--r--apps/checkin/checkin.mindnode/style.mindnodestyle/contents.xmlbin0 -> 1483 bytes
-rw-r--r--apps/checkin/checkin.mindnode/style.mindnodestyle/metadata.plistbin0 -> 152 bytes
-rw-r--r--apps/checkin/checkin.mindnode/viewState.plistbin0 -> 185 bytes
-rw-r--r--apps/checkin/models.py94
-rw-r--r--apps/checkin/tests.py16
-rw-r--r--apps/checkin/views.py1
10 files changed, 1721 insertions, 0 deletions
diff --git a/apps/checkin/README.rst b/apps/checkin/README.rst
new file mode 100644
index 0000000..871037b
--- /dev/null
+++ b/apps/checkin/README.rst
@@ -0,0 +1,103 @@
+Introduction
+============
+Servo Checkin is a tool for checking in Apple hardware for service. It's designed for consumers, business customers and service providers. Should work on both desktop and mobile devices. The service will be a free public service for consumers to manage their Apple hardware and a paid service for Service Providers (SP) who can:
+- Link to the service from their homepage
+- Use the service at their stores as a self-service system
+
+Business customers should be able to check in their service cases with a certain SP as well as receive updates and give feedback on a case.
+
+Each "instance" is always tied to a specific SP. The customer always starts withs https://checkin.servoapp.com/$sp
+
+
+Features
+========
+Customers should be able to:
+- Create an account and manage their Apple hardware
+- Check in a device for service without creating an account
+- Check the status of their current service cases (if they've created an account)
+
+
+Managing hardware
+=================
+- Customers should be able to check the warranty of their device.
+- Upload purchase receipts and other relevant documents. Mark a device as stolen (?).
+- Check part prices (with proper service provider backend)
+- Check the specs of the machine (what type of RAM, supported OS, etc)
+- See current repair extension programs for the device
+
+
+Creating a Service Case
+=======================
+- Choose language
+- Enter serial number
+- Enter problem description
+- Enter username and password
+- Enter whether data backup is necessary
+- Enter maximum price for repair (if OOW)
+- Troubleshooting
+
+
+During service
+==============
+- Customers should be able to check the status of the repair
+- See the latest reported notes by the technician
+- See the totall cost of the repair
+- Authorize or decline a cost estimate
+
+
+After service
+=============
+- Customers should be able to give feedback on the case
+- Rate the case (1-5 on speed, professionalism... check CSAT)
+- Overall time to repair completion
+- Professionalism of the service location employees
+- Quality of the repair and condition of the repaired product
+- Timeliness of updates provided, especially if the repair is delayed
+- Follow-up? (somehow checking that the problem is really gone?)
+
+
+Troubleshooting
+===============
+- Help the customer describe the problem
+- Help the service provider get the information they need
+- Admin-configurable (question: choices)
+- Creates a "story"
+
+
+Backends
+========
+Servo Checkin should be a separate product from Servo. This would allow:
+- providing a public service for customers to manage their Apple hardware
+- sell the system separately to service providers who don't need/want Servo
+
+Checkin should have 3 possible backend choices:
+- Email (just dump all the entered text into an email)
+- HTTP post (JSON, authenticated)
+- Servo
+
+
+The Servo backend
+=================
+- Associate the customer with a Servo customer with their email address (?)
+- Create the Service Order
+- Add the customer's notes (by the API user)
+- Update the service order with input from the customer duing the repair
+- The customer can print the work confirmation
+- The Service Provider gets a custom URL (http://checkin.servoapp.com/provider)
+
+
+The Implementation
+==================
+- Django app
+- PostgreSQL
+- south
+- Use as many generic class-based views as possible
+- Bootstrap 3
+- warranty checkup through py-gsxws
+- Desktop, phone, tablet
+
+
+Checkin Admin
+=============
+- Create AASP accounts (backend, urls, etc)
+- Show some customer stats? (no. of logins...)
diff --git a/apps/checkin/__init__.py b/apps/checkin/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/apps/checkin/__init__.py
diff --git a/apps/checkin/checkin.mindnode/QuickLook/Preview.jpg b/apps/checkin/checkin.mindnode/QuickLook/Preview.jpg
new file mode 100644
index 0000000..3a33372
--- /dev/null
+++ b/apps/checkin/checkin.mindnode/QuickLook/Preview.jpg
Binary files differ
diff --git a/apps/checkin/checkin.mindnode/contents.xml b/apps/checkin/checkin.mindnode/contents.xml
new file mode 100644
index 0000000..3171723
--- /dev/null
+++ b/apps/checkin/checkin.mindnode/contents.xml
@@ -0,0 +1,1507 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>author</key>
+ <string></string>
+ <key>comments</key>
+ <string></string>
+ <key>isUsingConstrainedLayout</key>
+ <false/>
+ <key>keywords</key>
+ <string></string>
+ <key>mindMap</key>
+ <dict>
+ <key>associations</key>
+ <array>
+ <dict>
+ <key>endArrow</key>
+ <integer>1</integer>
+ <key>endNodeID</key>
+ <string>B9D3B1E4-B44D-4A49-87CC-852937542677</string>
+ <key>startArrow</key>
+ <integer>0</integer>
+ <key>startNodeID</key>
+ <string>2CFCCC66-C66B-44BB-85B1-88EE7CDCC9C0</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.500, 1.000, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>1</integer>
+ <key>strokeWidth</key>
+ <real>1</real>
+ <key>wayPointOffset</key>
+ <string>{-96.6797, 157.84}</string>
+ </dict>
+ </array>
+ <key>color</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>mainNodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <true/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{-296.22585227272691, -190.51065340909088}</string>
+ <key>nodeID</key>
+ <string>C199C0FB-BE46-4F21-919A-D1760AC07432</string>
+ <key>strokeColor</key>
+ <string>{0.500, 0.500, 0.500, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>2</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{-31.132102272726911, -426.63174715909088}</string>
+ <key>nodeID</key>
+ <string>DB60DB17-ABB4-41F1-A5E8-2AE2E9EDB286</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>6</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{130.92968750000034, -637.74325284090924}</string>
+ <key>nodeID</key>
+ <string>55AA61F0-0A63-44FB-900D-1587F471E3B9</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -765.74325284090924}</string>
+ <key>nodeID</key>
+ <string>0AEE735E-431C-427E-9C71-1A79BD2E5FFC</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;first name&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 first name}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -733.74325284090924}</string>
+ <key>nodeID</key>
+ <string>963D451B-1670-44D6-A8C5-E2D476424939</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;last name&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 last name}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -701.74325284090924}</string>
+ <key>nodeID</key>
+ <string>C9938290-7D28-4AF2-A56E-5CB3DFB2B05D</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;company&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 company}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -669.74325284090924}</string>
+ <key>nodeID</key>
+ <string>B6BE8DC1-3C39-44B3-AF13-015809F88E27</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;email&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 email}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -637.74325284090924}</string>
+ <key>nodeID</key>
+ <string>F4CB2543-5ACD-4839-B909-BFA27AC5CF26</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;phone&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 phone}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -605.74325284090924}</string>
+ <key>nodeID</key>
+ <string>E2D4CAA1-4EC0-4902-AF2D-CBBBE81F28F5</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;address&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 address}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -573.74325284090924}</string>
+ <key>nodeID</key>
+ <string>096A67F4-1240-4545-A069-848CD7FE2A35</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;zip code&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 zip code}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -541.74325284090924}</string>
+ <key>nodeID</key>
+ <string>BB7C71F6-C57F-4F7E-9F41-1E09C33077D7</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;city&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 city}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{242.92968750000034, -509.74325284090924}</string>
+ <key>nodeID</key>
+ <string>00832BCE-D6D2-4C1B-A9B9-4E7B26D0CC4F</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;password&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 password}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;fields&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 fields}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{99.867897727273089, -378.63174715909088}</string>
+ <key>nodeID</key>
+ <string>B9A64567-58AE-4728-80AB-CB4135511C7B</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{219.86789772727309, -442.63174715909088}</string>
+ <key>nodeID</key>
+ <string>A0411427-08C3-4112-B0E6-FC7DE25E7310</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;model&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 model}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{219.86789772727309, -410.63174715909088}</string>
+ <key>nodeID</key>
+ <string>59971B68-93AA-41EB-A6D1-B131675137CA</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;configuration&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 configuration}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{219.86789772727309, -378.63174715909088}</string>
+ <key>nodeID</key>
+ <string>44E4FF78-B308-41F7-ABF7-510366694717</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;pop&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 pop}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{219.86789772727309, -346.63174715909088}</string>
+ <key>nodeID</key>
+ <string>1FF5714A-255B-4063-A7E2-51AF2111499D</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;username&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 username}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{219.86789772727309, -314.63174715909088}</string>
+ <key>nodeID</key>
+ <string>E6C6A9F0-B6A7-4B5B-AFE9-1C6D4F8063E6</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;password&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 password}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;devices&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 devices}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{99.867897727273089, -218.63174715909088}</string>
+ <key>nodeID</key>
+ <string>E6AC23C3-9AC2-4E39-A588-B38BB9770809</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{249.86789772727309, -282.63174715909088}</string>
+ <key>nodeID</key>
+ <string>BE72CAFD-3DF8-49B0-BB3E-BA9BAAB2957A</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;problem&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 problem}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{249.86789772727309, -250.63174715909088}</string>
+ <key>nodeID</key>
+ <string>058C266C-5DD5-433C-9D9E-6379801193AA</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{361.86789772727309, -250.63174715909088}</string>
+ <key>nodeID</key>
+ <string>BD5A5DC2-3BC1-4491-819E-BE54D514C4A5</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>3</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;attachments&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 attachments}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;notes&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 notes}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{249.86789772727309, -218.63174715909088}</string>
+ <key>nodeID</key>
+ <string>5468F5DB-6F82-4A74-997C-47E4D48A97B8</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;status&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 status}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{249.86789772727309, -186.63174715909088}</string>
+ <key>nodeID</key>
+ <string>3218C3C2-7862-4731-8B56-433A16E93FFB</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;rating&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 rating}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{249.86789772727309, -154.63174715909088}</string>
+ <key>nodeID</key>
+ <string>2CFCCC66-C66B-44BB-85B1-88EE7CDCC9C0</string>
+ <key>strokeColor</key>
+ <string>{0.467, 0.000, 0.851, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;service provider&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 service provider}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;service case&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 service case}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;customer&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 customer}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{56.508522727273089, 161.04794034090912}</string>
+ <key>nodeID</key>
+ <string>B9D3B1E4-B44D-4A49-87CC-852937542677</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.608, 0.847, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>6</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{228.50852272727309, 145.04794034090912}</string>
+ <key>nodeID</key>
+ <string>7726D723-5B52-4CD6-BCA0-8648E437D1A3</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.608, 0.847, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;backend type&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 backend type}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <false/>
+ <key>location</key>
+ <string>{228.50852272727309, 177.04794034090912}</string>
+ <key>nodeID</key>
+ <string>3FC8C8A7-54DE-45F6-A66A-6E34AB6954FF</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.608, 0.847, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;servo url&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 servo url}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;service provider&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 service provider}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-466.22585227272691, -99.510653409090878}</string>
+ <key>nodeID</key>
+ <string>4F122D04-DAE9-422F-9D22-807F6F8AD928</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>6</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-710.22585227272691, -179.51065340909088}</string>
+ <key>nodeID</key>
+ <string>C1C503FA-E1E1-4EAB-8CB4-3C60710CED4A</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Does the device power on?&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Does the device power on?}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-825.22585227272691, -147.51065340909088}</string>
+ <key>nodeID</key>
+ <string>0C3E1E6A-57AE-4B07-BF21-CE2CC6509E4B</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Was the issue caused by accidental damage?&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Was the issue caused by accidental damage?}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-809.22585227272691, -115.51065340909088}</string>
+ <key>nodeID</key>
+ <string>C15860CD-ED20-436D-ABC0-CE5EA4177623</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Do you have a recent backup of your data?&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Do you have a recent backup of your data?}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-764.22585227272691, -51.510653409090878}</string>
+ <key>nodeID</key>
+ <string>E3D0D683-B76B-4BBE-BC4A-1E4D7EEA5C94</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>5</real>
+ <key>subnodes</key>
+ <array>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-904.22585227272691, -83.510653409090878}</string>
+ <key>nodeID</key>
+ <string>DF33303C-54EC-449E-996A-8E2222F263E0</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Constantly&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Constantly}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-972.22585227272691, -51.510653409090878}</string>
+ <key>nodeID</key>
+ <string>8C45AA5C-F770-4F73-996A-2B7F394F6F08</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Several times per day&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Several times per day}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>contentAlignment</key>
+ <integer>1</integer>
+ <key>fillColor</key>
+ <string>{1.000, 1.000, 1.000, 1.000}</string>
+ <key>isDecreasingBranchThickness</key>
+ <true/>
+ <key>isDrawingFill</key>
+ <false/>
+ <key>isLeftAligned</key>
+ <true/>
+ <key>location</key>
+ <string>{-982.22585227272691, -19.510653409090878}</string>
+ <key>nodeID</key>
+ <string>B961D71E-AF99-4BDB-8ED0-EB6D0C840A0E</string>
+ <key>strokeColor</key>
+ <string>{0.000, 0.851, 0.671, 1.000}</string>
+ <key>strokeStyle</key>
+ <integer>0</integer>
+ <key>strokeWidth</key>
+ <real>4</real>
+ <key>subnodes</key>
+ <array/>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Several times per week&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Several times per week}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;How often does the problem occur?&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 How often does the problem occur?}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;troubleshooting&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 troubleshooting}</string>
+ </dict>
+ </dict>
+ </array>
+ <key>title</key>
+ <dict>
+ <key>constrainedWidth</key>
+ <integer>300</integer>
+ <key>htmlText</key>
+ <string>&lt;p style='color: rgba(0, 0, 0, 1.000000); font: 14px "Helvetica Neue"; -cocoa-font-postscriptname: "HelveticaNeue"; '&gt;Checkin&lt;/p&gt;</string>
+ <key>shrinkToFitContent</key>
+ <integer>1</integer>
+ <key>text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1265
+{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
+
+\f0\fs28 \cf2 Checkin}</string>
+ </dict>
+ </dict>
+ </array>
+ </dict>
+ <key>printInfo</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE
+ hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpCJKEhIQITlNT
+ dHJpbmcBlIQBKxZOU0hvcml6b250YWxseUNlbnRlcmVkhpKEhIQITlNOdW1iZXIAhIQH
+ TlNWYWx1ZQCUhAEqhIQBY50BhpKEmZkNTlNSaWdodE1hcmdpboaShJuchIQBZp5IhpKE
+ mZkMTlNMZWZ0TWFyZ2luhpKEm5ygnkiGkoSZmRVOU0hvcml6b25hbFBhZ2luYXRpb26G
+ koSbnISXlwKGkoSZmRROU1ZlcnRpY2FsUGFnaW5hdGlvboaShJucpZcAhpKEmZkUTlNW
+ ZXJ0aWNhbGx5Q2VudGVyZWSGkpqShJmZC05TVG9wTWFyZ2luhpKEm5ygnlqGkoSZmQ5O
+ U0JvdHRvbU1hcmdpboaShJucoJ5ahoaG
+ </data>
+ <key>title</key>
+ <string>checkin</string>
+ <key>version</key>
+ <integer>4</integer>
+</dict>
+</plist>
diff --git a/apps/checkin/checkin.mindnode/style.mindnodestyle/contents.xml b/apps/checkin/checkin.mindnode/style.mindnodestyle/contents.xml
new file mode 100644
index 0000000..7904eba
--- /dev/null
+++ b/apps/checkin/checkin.mindnode/style.mindnodestyle/contents.xml
Binary files differ
diff --git a/apps/checkin/checkin.mindnode/style.mindnodestyle/metadata.plist b/apps/checkin/checkin.mindnode/style.mindnodestyle/metadata.plist
new file mode 100644
index 0000000..5cb6e90
--- /dev/null
+++ b/apps/checkin/checkin.mindnode/style.mindnodestyle/metadata.plist
Binary files differ
diff --git a/apps/checkin/checkin.mindnode/viewState.plist b/apps/checkin/checkin.mindnode/viewState.plist
new file mode 100644
index 0000000..b5098a5
--- /dev/null
+++ b/apps/checkin/checkin.mindnode/viewState.plist
Binary files differ
diff --git a/apps/checkin/models.py b/apps/checkin/models.py
new file mode 100644
index 0000000..efea6ff
--- /dev/null
+++ b/apps/checkin/models.py
@@ -0,0 +1,94 @@
+import uuid
+from django.db import models
+from django.conf import settings
+from django.utils.translation import ugettext as _
+
+from apps.core.models import TaggedItem, ServiceProvider
+
+
+class Device(models.Model):
+ sn = models.CharField(
+ blank=True,
+ default='',
+ max_length=32,
+ verbose_name=_("Serial Number")
+ )
+ description = models.CharField(
+ max_length=128,
+ default=_("New Device"),
+ verbose_name=_("description")
+ )
+ WARRANTY_CHOICES = (
+ ('ALW', _("Apple Limited Warranty")),
+ ('APP', _("AppleCare Protection Plan")),
+ ('CSC', _("Customer Satisfaction (CS) Code")),
+ ('CBC', _("Custom Bid Contracts")),
+ ('WTY', _("3'rd Party Warranty")),
+ ('OOW', _("Out Of Warranty (No Coverage)")),
+ ('NA', _("Unknown")),
+ )
+
+ warranty_status = models.CharField(
+ max_length=3,
+ default="NA",
+ choices=WARRANTY_CHOICES,
+ verbose_name=_("Warranty Status")
+ )
+ username = models.CharField(
+ blank=True,
+ default='',
+ max_length=32,
+ verbose_name=_("username")
+ )
+ password = models.CharField(
+ blank=True,
+ default='',
+ max_length=32,
+ verbose_name=_("password")
+ )
+
+
+class Customer(models.Model):
+ sp = models.ForeignKey(ServiceProvider)
+ user = models.ForeignKey(settings.AUTH_USER_MODEL)
+ street_address = models.CharField(
+ null=True,
+ blank=True,
+ max_length=128,
+ verbose_name=_('address')
+ )
+ zip_code = models.CharField(
+ null=True,
+ blank=True,
+ max_length=32,
+ verbose_name=_('ZIP Code')
+ )
+ city = models.CharField(
+ null=True,
+ blank=True,
+ max_length=32,
+ verbose_name=_('city')
+ )
+ devices = models.ManyToManyField(Device, null=True)
+
+
+class ServiceOrder(models.Model):
+ sp = models.ForeignKey(ServiceProvider)
+ uuid = models.CharField(
+ max_length=36,
+ unique=True,
+ default=lambda: str(uuid.uuid4())
+ )
+ created_by = models.ForeignKey(settings.AUTH_USER_MODEL)
+ notes = models.TextField(default='')
+ customer = models.ForeignKey(Customer)
+ devices = models.ManyToManyField(Device, null=True)
+ tags = models.ManyToManyField(TaggedItem)
+
+ def add_accessory(self, accessory):
+ tag = TaggedItem()
+ tag.kind = 'accessory'
+ tag.save()
+
+ def submit(self):
+ pass
diff --git a/apps/checkin/tests.py b/apps/checkin/tests.py
new file mode 100644
index 0000000..501deb7
--- /dev/null
+++ b/apps/checkin/tests.py
@@ -0,0 +1,16 @@
+"""
+This file demonstrates writing tests using the unittest module. These will pass
+when you run "manage.py test".
+
+Replace this with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+
+class SimpleTest(TestCase):
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.assertEqual(1 + 1, 2)
diff --git a/apps/checkin/views.py b/apps/checkin/views.py
new file mode 100644
index 0000000..60f00ef
--- /dev/null
+++ b/apps/checkin/views.py
@@ -0,0 +1 @@
+# Create your views here.