diff options
author | Filipp Lepalaan <filipp@mac.com> | 2021-05-12 16:24:02 +0300 |
---|---|---|
committer | Filipp Lepalaan <filipp@mac.com> | 2021-05-12 16:24:02 +0300 |
commit | 7dd0cb9acd46fcfb1936e81b6d9f53e40df9cdb5 (patch) | |
tree | eb293e30916c6697725dca2068e7e81146ad4c9b /servo | |
parent | 71226657449ae821f6a89682eb2a8873aaad8210 (diff) | |
download | Servo-7dd0cb9acd46fcfb1936e81b6d9f53e40df9cdb5.tar.gz Servo-7dd0cb9acd46fcfb1936e81b6d9f53e40df9cdb5.tar.bz2 Servo-7dd0cb9acd46fcfb1936e81b6d9f53e40df9cdb5.zip |
Flattened migrations
Diffstat (limited to 'servo')
-rw-r--r-- | servo/migrations/0001_initial.py | 1106 |
1 files changed, 1106 insertions, 0 deletions
diff --git a/servo/migrations/0001_initial.py b/servo/migrations/0001_initial.py new file mode 100644 index 0000000..93f414a --- /dev/null +++ b/servo/migrations/0001_initial.py @@ -0,0 +1,1106 @@ +# Generated by Django 3.2.2 on 2021-05-12 13:23 + +from django.conf import settings +import django.contrib.auth.models +import django.contrib.auth.validators +import django.contrib.postgres.fields +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import mptt.fields +import servo.defaults +import servo.lib.shorturl +import servo.models.account +import servo.models.note +import servo.models.product +import servo.validators + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('full_name', models.CharField(default='New User', editable=False, max_length=128)), + ('locale', models.CharField(choices=[('da_DK.UTF-8', 'Danish'), ('nl_NL.UTF-8', 'Dutch'), ('en_US.UTF-8', 'English'), ('et_EE.UTF-8', 'Estonian'), ('fi_FI.UTF-8', 'Finnish'), ('sv_SE.UTF-8', 'Swedish')], default='da_DK.UTF-8', help_text='Select which language you want to use Servo in.', max_length=32, verbose_name='Language')), + ('timezone', models.CharField(choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Nuuk', 'America/Nuuk'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qostanay', 'Asia/Qostanay'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], default='Europe/Stockholm', help_text='Your current timezone', max_length=128, verbose_name='Time zone')), + ('region', models.CharField(choices=[('da_DK.UTF-8', 'Denmark'), ('et_EE.UTF-8', 'Estonia'), ('fi_FI.UTF-8', 'Finland'), ('en_US.UTF-8', 'United States'), ('nl_NL.UTF-8', 'Netherlands'), ('sv_SE.UTF-8', 'Sweden')], default=servo.defaults.locale, help_text='Affects formatting of numbers, dates and currencies.', max_length=32, verbose_name='region')), + ('should_notify', models.BooleanField(default=True, help_text='Enable notifications in the toolbar.', verbose_name='Enable notifications')), + ('notify_by_email', models.BooleanField(default=False, help_text='Event notifications will also be emailed to you.', verbose_name='Email notifications')), + ('autoprint', models.BooleanField(default=True, help_text='Opens print dialog automatically.', verbose_name='print automatically')), + ('tech_id', models.CharField(blank=True, default='', max_length=16, verbose_name='Tech ID')), + ('gsx_userid', models.CharField(blank=True, default='', max_length=128, verbose_name='User ID')), + ('gsx_poprefix', models.CharField(blank=True, default='', help_text='GSX repairs you create will be prefixed', max_length=8, verbose_name='PO prefix')), + ('photo', models.ImageField(blank=True, help_text='Maximum avatar size is 1MB', null=True, upload_to='avatars', verbose_name='Photo')), + ('is_visible', models.BooleanField(default=True, editable=False)), + ], + options={ + 'verbose_name': 'User', + 'verbose_name_plural': 'Users & Groups', + 'ordering': ('full_name',), + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ('techies', servo.models.account.TechieManager()), + ('active', servo.models.account.ActiveManager()), + ], + ), + migrations.CreateModel( + name='Attachment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ref', models.CharField(max_length=32)), + ('ref_id', models.IntegerField()), + ('mime_type', models.CharField(editable=False, max_length=64)), + ('content', models.FileField(upload_to='attachments', validators=[servo.validators.file_upload_validator], verbose_name='file')), + ], + options={ + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='Checklist', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Checklist', max_length=255, unique=True, verbose_name='title')), + ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), + ], + options={ + 'verbose_name': 'Checklist', + 'verbose_name_plural': 'Checklists', + 'ordering': ('title',), + }, + ), + migrations.CreateModel( + name='ChecklistItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Task')), + ('description', models.TextField(blank=True, default='', verbose_name='Description')), + ('checklist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.checklist')), + ], + ), + migrations.CreateModel( + name='Configuration', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(max_length=255)), + ('value', models.TextField(blank=True, default='')), + ], + ), + migrations.CreateModel( + name='Customer', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='New Customer', max_length=255, verbose_name='name')), + ('fullname', models.CharField(default='', editable=False, max_length=255)), + ('phone', models.CharField(blank=True, default='', max_length=32, verbose_name='phone')), + ('email', models.EmailField(blank=True, default='', max_length=254, verbose_name='email')), + ('street_address', models.CharField(blank=True, default='', max_length=128, verbose_name='address')), + ('zip_code', models.CharField(blank=True, default='', max_length=32, verbose_name='ZIP Code')), + ('city', models.CharField(blank=True, default='', max_length=32, verbose_name='city')), + ('country', models.CharField(blank=True, choices=[('AD', 'Andorra'), ('AE', 'United Arab Emirates'), ('AF', 'Afghanistan'), ('AG', 'Antigua & Barbuda'), ('AI', 'Anguilla'), ('AL', 'Albania'), ('AM', 'Armenia'), ('AO', 'Angola'), ('AQ', 'Antarctica'), ('AR', 'Argentina'), ('AS', 'Samoa (American)'), ('AT', 'Austria'), ('AU', 'Australia'), ('AW', 'Aruba'), ('AX', 'Åland Islands'), ('AZ', 'Azerbaijan'), ('BA', 'Bosnia & Herzegovina'), ('BB', 'Barbados'), ('BD', 'Bangladesh'), ('BE', 'Belgium'), ('BF', 'Burkina Faso'), ('BG', 'Bulgaria'), ('BH', 'Bahrain'), ('BI', 'Burundi'), ('BJ', 'Benin'), ('BL', 'St Barthelemy'), ('BM', 'Bermuda'), ('BN', 'Brunei'), ('BO', 'Bolivia'), ('BQ', 'Caribbean NL'), ('BR', 'Brazil'), ('BS', 'Bahamas'), ('BT', 'Bhutan'), ('BV', 'Bouvet Island'), ('BW', 'Botswana'), ('BY', 'Belarus'), ('BZ', 'Belize'), ('CA', 'Canada'), ('CC', 'Cocos (Keeling) Islands'), ('CD', 'Congo (Dem. Rep.)'), ('CF', 'Central African Rep.'), ('CG', 'Congo (Rep.)'), ('CH', 'Switzerland'), ('CI', "Côte d'Ivoire"), ('CK', 'Cook Islands'), ('CL', 'Chile'), ('CM', 'Cameroon'), ('CN', 'China'), ('CO', 'Colombia'), ('CR', 'Costa Rica'), ('CU', 'Cuba'), ('CV', 'Cape Verde'), ('CW', 'Curaçao'), ('CX', 'Christmas Island'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DE', 'Germany'), ('DJ', 'Djibouti'), ('DK', 'Denmark'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('DZ', 'Algeria'), ('EC', 'Ecuador'), ('EE', 'Estonia'), ('EG', 'Egypt'), ('EH', 'Western Sahara'), ('ER', 'Eritrea'), ('ES', 'Spain'), ('ET', 'Ethiopia'), ('FI', 'Finland'), ('FJ', 'Fiji'), ('FK', 'Falkland Islands'), ('FM', 'Micronesia'), ('FO', 'Faroe Islands'), ('FR', 'France'), ('GA', 'Gabon'), ('GB', 'Britain (UK)'), ('GD', 'Grenada'), ('GE', 'Georgia'), ('GF', 'French Guiana'), ('GG', 'Guernsey'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GL', 'Greenland'), ('GM', 'Gambia'), ('GN', 'Guinea'), ('GP', 'Guadeloupe'), ('GQ', 'Equatorial Guinea'), ('GR', 'Greece'), ('GS', 'South Georgia & the South Sandwich Islands'), ('GT', 'Guatemala'), ('GU', 'Guam'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HK', 'Hong Kong'), ('HM', 'Heard Island & McDonald Islands'), ('HN', 'Honduras'), ('HR', 'Croatia'), ('HT', 'Haiti'), ('HU', 'Hungary'), ('ID', 'Indonesia'), ('IE', 'Ireland'), ('IL', 'Israel'), ('IM', 'Isle of Man'), ('IN', 'India'), ('IO', 'British Indian Ocean Territory'), ('IQ', 'Iraq'), ('IR', 'Iran'), ('IS', 'Iceland'), ('IT', 'Italy'), ('JE', 'Jersey'), ('JM', 'Jamaica'), ('JO', 'Jordan'), ('JP', 'Japan'), ('KE', 'Kenya'), ('KG', 'Kyrgyzstan'), ('KH', 'Cambodia'), ('KI', 'Kiribati'), ('KM', 'Comoros'), ('KN', 'St Kitts & Nevis'), ('KP', 'Korea (North)'), ('KR', 'Korea (South)'), ('KW', 'Kuwait'), ('KY', 'Cayman Islands'), ('KZ', 'Kazakhstan'), ('LA', 'Laos'), ('LB', 'Lebanon'), ('LC', 'St Lucia'), ('LI', 'Liechtenstein'), ('LK', 'Sri Lanka'), ('LR', 'Liberia'), ('LS', 'Lesotho'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('LV', 'Latvia'), ('LY', 'Libya'), ('MA', 'Morocco'), ('MC', 'Monaco'), ('MD', 'Moldova'), ('ME', 'Montenegro'), ('MF', 'St Martin (French)'), ('MG', 'Madagascar'), ('MH', 'Marshall Islands'), ('MK', 'North Macedonia'), ('ML', 'Mali'), ('MM', 'Myanmar (Burma)'), ('MN', 'Mongolia'), ('MO', 'Macau'), ('MP', 'Northern Mariana Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MS', 'Montserrat'), ('MT', 'Malta'), ('MU', 'Mauritius'), ('MV', 'Maldives'), ('MW', 'Malawi'), ('MX', 'Mexico'), ('MY', 'Malaysia'), ('MZ', 'Mozambique'), ('NA', 'Namibia'), ('NC', 'New Caledonia'), ('NE', 'Niger'), ('NF', 'Norfolk Island'), ('NG', 'Nigeria'), ('NI', 'Nicaragua'), ('NL', 'Netherlands'), ('NO', 'Norway'), ('NP', 'Nepal'), ('NR', 'Nauru'), ('NU', 'Niue'), ('NZ', 'New Zealand'), ('OM', 'Oman'), ('PA', 'Panama'), ('PE', 'Peru'), ('PF', 'French Polynesia'), ('PG', 'Papua New Guinea'), ('PH', 'Philippines'), ('PK', 'Pakistan'), ('PL', 'Poland'), ('PM', 'St Pierre & Miquelon'), ('PN', 'Pitcairn'), ('PR', 'Puerto Rico'), ('PS', 'Palestine'), ('PT', 'Portugal'), ('PW', 'Palau'), ('PY', 'Paraguay'), ('QA', 'Qatar'), ('RE', 'Réunion'), ('RO', 'Romania'), ('RS', 'Serbia'), ('RU', 'Russia'), ('RW', 'Rwanda'), ('SA', 'Saudi Arabia'), ('SB', 'Solomon Islands'), ('SC', 'Seychelles'), ('SD', 'Sudan'), ('SE', 'Sweden'), ('SG', 'Singapore'), ('SH', 'St Helena'), ('SI', 'Slovenia'), ('SJ', 'Svalbard & Jan Mayen'), ('SK', 'Slovakia'), ('SL', 'Sierra Leone'), ('SM', 'San Marino'), ('SN', 'Senegal'), ('SO', 'Somalia'), ('SR', 'Suriname'), ('SS', 'South Sudan'), ('ST', 'Sao Tome & Principe'), ('SV', 'El Salvador'), ('SX', 'St Maarten (Dutch)'), ('SY', 'Syria'), ('SZ', 'Eswatini (Swaziland)'), ('TC', 'Turks & Caicos Is'), ('TD', 'Chad'), ('TF', 'French Southern & Antarctic Lands'), ('TG', 'Togo'), ('TH', 'Thailand'), ('TJ', 'Tajikistan'), ('TK', 'Tokelau'), ('TL', 'East Timor'), ('TM', 'Turkmenistan'), ('TN', 'Tunisia'), ('TO', 'Tonga'), ('TR', 'Turkey'), ('TT', 'Trinidad & Tobago'), ('TV', 'Tuvalu'), ('TW', 'Taiwan'), ('TZ', 'Tanzania'), ('UA', 'Ukraine'), ('UG', 'Uganda'), ('UM', 'US minor outlying islands'), ('US', 'United States'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VA', 'Vatican City'), ('VC', 'St Vincent'), ('VE', 'Venezuela'), ('VG', 'Virgin Islands (UK)'), ('VI', 'Virgin Islands (US)'), ('VN', 'Vietnam'), ('VU', 'Vanuatu'), ('WF', 'Wallis & Futuna'), ('WS', 'Samoa (western)'), ('YE', 'Yemen'), ('YT', 'Mayotte'), ('ZA', 'South Africa'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe')], default=servo.defaults.country, max_length=2, verbose_name='Country')), + ('photo', models.ImageField(blank=True, null=True, upload_to='photos', verbose_name='photo')), + ('notes', models.TextField(blank=True, default='', verbose_name='notes')), + ('created_at', models.DateTimeField(auto_now=True)), + ('is_company', models.BooleanField(default=False, help_text='Companies can contain contacts', verbose_name='company')), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), + ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), + ('level', models.PositiveIntegerField(editable=False)), + ], + ), + migrations.CreateModel( + name='CustomerGroup', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='New Group', max_length=255, unique=True, verbose_name='name')), + ('slug', models.SlugField(editable=False)), + ], + options={ + 'ordering': ('id',), + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='Device', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sn', models.CharField(blank=True, default='', max_length=32, validators=[servo.validators.sn_validator], verbose_name='Serial Number')), + ('description', models.CharField(default='New Device', max_length=128, verbose_name='Description')), + ('brand', models.CharField(blank=True, default='Apple', max_length=128, verbose_name='Brand')), + ('reseller', models.CharField(blank=True, default='', max_length=128, verbose_name='Reseller')), + ('created_at', models.DateTimeField(auto_now_add=True, null=True)), + ('imei', models.CharField(blank=True, default='', max_length=15, verbose_name='IMEI Number')), + ('initial_activation_policy', models.CharField(default='', editable=False, max_length=128, verbose_name='Initial Activation Policy')), + ('applied_activation_policy', models.CharField(default='', editable=False, max_length=128, verbose_name='Applied Activation Policy')), + ('next_tether_policy', models.CharField(default='', editable=False, max_length=128, verbose_name='Next Tether Policy')), + ('unlocked', models.BooleanField(default=None, editable=False, null=True)), + ('slug', models.SlugField(editable=False, max_length=128, null=True)), + ('product_line', models.CharField(choices=[('APPLETV', 'Apple TV'), ('DISPLAYS', 'Display'), ('IMAC', 'iMac'), ('IPAD', 'iPad'), ('IPADACCESSORY', 'iPad Accessory'), ('IPHONE', 'iPhone'), ('IPHONEACCESSORY', 'iPhone Accessory'), ('MACACCESSORY', 'Mac Accessory'), ('IPODCLASSIC', 'iPod Classic'), ('IPODNANO', 'iPod nano'), ('IPODSHUFFLE', 'iPod Shuffle'), ('IPODTOUCH', 'iPod Touch'), ('MACMINI', 'Mac mini'), ('MACPRO', 'Mac Pro'), ('MACBOOK', 'MacBook'), ('MACBOOKLEGACY', 'MacBook (Legacy)'), ('MACBOOKAIR', 'MacBook Air'), ('MACBOOKPRO', 'MacBook Pro'), ('SERVERS', 'Server'), ('POWERMAC', 'Power Mac'), ('BEATS', 'Beats Products'), ('OTHER', 'Other Products'), ('WATCH', 'Apple Watch'), ('AUDIO', 'Audio')], default='OTHER', max_length=16, verbose_name='Product Line')), + ('config_code', models.CharField(default='', editable=False, max_length=8)), + ('configuration', models.CharField(blank=True, default='', max_length=256, verbose_name='Configuration')), + ('warranty_status', models.CharField(choices=[('QP', 'Quality Program'), ('CS', 'Customer Satisfaction'), ('ALW', 'Apple Limited Warranty'), ('APP', 'AppleCare Protection Plan'), ('CC', 'Custom Bid Contracts'), ('CBC', 'Custom Bid Contracts'), ('WTY', "3'rd Party Warranty"), ('OOW', 'Out Of Warranty (No Coverage)'), ('NA', 'Unknown')], default='NA', max_length=3, 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')), + ('purchased_on', models.DateField(blank=True, null=True, verbose_name='Date of Purchase')), + ('purchase_country', models.CharField(blank=True, choices=[('AF', 'Afghanistan'), ('AX', 'Åland Islands'), ('AL', 'Albania'), ('DZ', 'Algeria'), ('AS', 'American Samoa'), ('AD', 'Andorra'), ('AO', 'Angola'), ('AI', 'Anguilla'), ('AQ', 'Antarctica'), ('AG', 'Antigua and Barbuda'), ('AR', 'Argentina'), ('AM', 'Armenia'), ('AW', 'Aruba'), ('AU', 'Australia'), ('AT', 'Austria'), ('AZ', 'Azerbaijan'), ('BS', 'Bahamas'), ('BH', 'Bahrain'), ('BD', 'Bangladesh'), ('BB', 'Barbados'), ('BY', 'Belarus'), ('BE', 'Belgium'), ('BZ', 'Belize'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BT', 'Bhutan'), ('BO', 'Bolivia'), ('BQ', 'Bonaire, Sint Eustatius and Saba'), ('BA', 'Bosnia and Herzegovina'), ('BW', 'Botswana'), ('BV', 'Bouvet Island'), ('BR', 'Brazil'), ('IO', 'British Indian Ocean Territory'), ('BN', 'Brunei'), ('BG', 'Bulgaria'), ('BF', 'Burkina Faso'), ('BI', 'Burundi'), ('CV', 'Cabo Verde'), ('KH', 'Cambodia'), ('CM', 'Cameroon'), ('CA', 'Canada'), ('KY', 'Cayman Islands'), ('CF', 'Central African Republic'), ('TD', 'Chad'), ('CL', 'Chile'), ('CN', 'China'), ('CX', 'Christmas Island'), ('CC', 'Cocos (Keeling) Islands'), ('CO', 'Colombia'), ('KM', 'Comoros'), ('CG', 'Congo'), ('CD', 'Congo (the Democratic Republic of the)'), ('CK', 'Cook Islands'), ('CR', 'Costa Rica'), ('CI', "Côte d'Ivoire"), ('HR', 'Croatia'), ('CU', 'Cuba'), ('CW', 'Curaçao'), ('CY', 'Cyprus'), ('CZ', 'Czechia'), ('DK', 'Denmark'), ('DJ', 'Djibouti'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('EC', 'Ecuador'), ('EG', 'Egypt'), ('SV', 'El Salvador'), ('GQ', 'Equatorial Guinea'), ('ER', 'Eritrea'), ('EE', 'Estonia'), ('SZ', 'Eswatini'), ('ET', 'Ethiopia'), ('FK', 'Falkland Islands (Malvinas)'), ('FO', 'Faroe Islands'), ('FJ', 'Fiji'), ('FI', 'Finland'), ('FR', 'France'), ('GF', 'French Guiana'), ('PF', 'French Polynesia'), ('TF', 'French Southern Territories'), ('GA', 'Gabon'), ('GM', 'Gambia'), ('GE', 'Georgia'), ('DE', 'Germany'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GR', 'Greece'), ('GL', 'Greenland'), ('GD', 'Grenada'), ('GP', 'Guadeloupe'), ('GU', 'Guam'), ('GT', 'Guatemala'), ('GG', 'Guernsey'), ('GN', 'Guinea'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HT', 'Haiti'), ('HM', 'Heard Island and McDonald Islands'), ('VA', 'Holy See'), ('HN', 'Honduras'), ('HK', 'Hong Kong'), ('HU', 'Hungary'), ('IS', 'Iceland'), ('IN', 'India'), ('ID', 'Indonesia'), ('IR', 'Iran'), ('IQ', 'Iraq'), ('IE', 'Ireland'), ('IM', 'Isle of Man'), ('IL', 'Israel'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JP', 'Japan'), ('JE', 'Jersey'), ('JO', 'Jordan'), ('KZ', 'Kazakhstan'), ('KE', 'Kenya'), ('KI', 'Kiribati'), ('KW', 'Kuwait'), ('KG', 'Kyrgyzstan'), ('LA', 'Laos'), ('LV', 'Latvia'), ('LB', 'Lebanon'), ('LS', 'Lesotho'), ('LR', 'Liberia'), ('LY', 'Libya'), ('LI', 'Liechtenstein'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('MO', 'Macao'), ('MG', 'Madagascar'), ('MW', 'Malawi'), ('MY', 'Malaysia'), ('MV', 'Maldives'), ('ML', 'Mali'), ('MT', 'Malta'), ('MH', 'Marshall Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MU', 'Mauritius'), ('YT', 'Mayotte'), ('MX', 'Mexico'), ('FM', 'Micronesia (Federated States of)'), ('MD', 'Moldova'), ('MC', 'Monaco'), ('MN', 'Mongolia'), ('ME', 'Montenegro'), ('MS', 'Montserrat'), ('MA', 'Morocco'), ('MZ', 'Mozambique'), ('MM', 'Myanmar'), ('NA', 'Namibia'), ('NR', 'Nauru'), ('NP', 'Nepal'), ('NL', 'Netherlands'), ('NC', 'New Caledonia'), ('NZ', 'New Zealand'), ('NI', 'Nicaragua'), ('NE', 'Niger'), ('NG', 'Nigeria'), ('NU', 'Niue'), ('NF', 'Norfolk Island'), ('KP', 'North Korea'), ('MK', 'North Macedonia'), ('MP', 'Northern Mariana Islands'), ('NO', 'Norway'), ('OM', 'Oman'), ('PK', 'Pakistan'), ('PW', 'Palau'), ('PS', 'Palestine, State of'), ('PA', 'Panama'), ('PG', 'Papua New Guinea'), ('PY', 'Paraguay'), ('PE', 'Peru'), ('PH', 'Philippines'), ('PN', 'Pitcairn'), ('PL', 'Poland'), ('PT', 'Portugal'), ('PR', 'Puerto Rico'), ('QA', 'Qatar'), ('RE', 'Réunion'), ('RO', 'Romania'), ('RU', 'Russia'), ('RW', 'Rwanda'), ('BL', 'Saint Barthélemy'), ('SH', 'Saint Helena, Ascension and Tristan da Cunha'), ('KN', 'Saint Kitts and Nevis'), ('LC', 'Saint Lucia'), ('MF', 'Saint Martin (French part)'), ('PM', 'Saint Pierre and Miquelon'), ('VC', 'Saint Vincent and the Grenadines'), ('WS', 'Samoa'), ('SM', 'San Marino'), ('ST', 'Sao Tome and Principe'), ('SA', 'Saudi Arabia'), ('SN', 'Senegal'), ('RS', 'Serbia'), ('SC', 'Seychelles'), ('SL', 'Sierra Leone'), ('SG', 'Singapore'), ('SX', 'Sint Maarten (Dutch part)'), ('SK', 'Slovakia'), ('SI', 'Slovenia'), ('SB', 'Solomon Islands'), ('SO', 'Somalia'), ('ZA', 'South Africa'), ('GS', 'South Georgia and the South Sandwich Islands'), ('KR', 'South Korea'), ('SS', 'South Sudan'), ('ES', 'Spain'), ('LK', 'Sri Lanka'), ('SD', 'Sudan'), ('SR', 'Suriname'), ('SJ', 'Svalbard and Jan Mayen'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('SY', 'Syria'), ('TW', 'Taiwan'), ('TJ', 'Tajikistan'), ('TZ', 'Tanzania'), ('TH', 'Thailand'), ('TL', 'Timor-Leste'), ('TG', 'Togo'), ('TK', 'Tokelau'), ('TO', 'Tonga'), ('TT', 'Trinidad and Tobago'), ('TN', 'Tunisia'), ('TR', 'Turkey'), ('TM', 'Turkmenistan'), ('TC', 'Turks and Caicos Islands'), ('TV', 'Tuvalu'), ('UG', 'Uganda'), ('UA', 'Ukraine'), ('AE', 'United Arab Emirates'), ('GB', 'United Kingdom'), ('UM', 'United States Minor Outlying Islands'), ('US', 'United States of America'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VU', 'Vanuatu'), ('VE', 'Venezuela'), ('VN', 'Vietnam'), ('VG', 'Virgin Islands (British)'), ('VI', 'Virgin Islands (U.S.)'), ('WF', 'Wallis and Futuna'), ('EH', 'Western Sahara'), ('YE', 'Yemen'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe')], default=servo.defaults.country, max_length=128, verbose_name='Purchase Country')), + ('sla_description', models.TextField(editable=False, null=True)), + ('has_onsite', models.BooleanField(default=False, help_text='Device is eligible for onsite repairs in GSX')), + ('contract_start_date', models.DateField(editable=False, null=True)), + ('contract_end_date', models.DateField(editable=False, null=True)), + ('onsite_start_date', models.DateField(editable=False, null=True)), + ('onsite_end_date', models.DateField(editable=False, null=True)), + ('parts_and_labor_covered', models.BooleanField(default=False, editable=False)), + ('notes', models.TextField(blank=True, default='', verbose_name='notes')), + ('photo', models.ImageField(blank=True, null=True, upload_to='devices', verbose_name='Photo')), + ('image_url', models.URLField(blank=True, null=True, verbose_name='Image URL')), + ('manual_url', models.URLField(blank=True, null=True, verbose_name='Manual URL')), + ('exploded_view_url', models.URLField(blank=True, null=True, verbose_name='Exploded View')), + ('is_vintage', models.BooleanField(default=False, help_text='Device is considered vintage in GSX', verbose_name='Vintage')), + ('fmip_active', models.BooleanField(default=False, editable=False)), + ], + options={ + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='DeviceGroup', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=128, unique=True)), + ], + ), + migrations.CreateModel( + name='Escalation', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('escalation_id', models.CharField(default='', editable=False, max_length=22)), + ('contexts', models.TextField(blank=True, default='{}')), + ('issue_type', models.CharField(blank=True, choices=[('AMQ', 'Account Management Question'), ('UQ', 'GSX Usage Question'), ('OSI', 'Order Status Issue'), ('PRI', 'Part Return Issue'), ('PPOR', 'Problem Placing Order/Repair'), ('PUR', 'Problem Updating Repair'), ('SCI', 'Shipping Carrier Issue'), ('SES', 'Service Excellence Scoring'), ('ARF', 'Apple Retail Feedback'), ('DF', 'Depot Feedback'), ('FS', 'GSX Feedback/Suggestion'), ('WS', 'GSX Web Services (API)'), ('SEPI', 'Service Excellence Program Information'), ('TTI', 'Technical or Troubleshooting Issue'), ('DTA', 'Diagnostic Tool Assistance'), ('BIQ', 'Billing or Invoice Question'), ('SESC', 'Safety Issue')], default='', max_length=4)), + ('status', models.CharField(choices=[('O', 'Open'), ('C', 'Closed'), ('E', 'Escalated')], default='O', max_length=1)), + ('submitted_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='GsxAccount', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New GSX Account', max_length=128)), + ('sold_to', models.CharField(max_length=10, verbose_name='Sold-To')), + ('ship_to', models.CharField(max_length=10, verbose_name='Ship-To')), + ('user_id', models.CharField(blank=True, default='', max_length=128, verbose_name='User ID')), + ('region', models.CharField(choices=[('002', 'Asia/Pacific'), ('003', 'Japan'), ('004', 'Europe'), ('005', 'United States'), ('006', 'Canadia'), ('007', 'Latin America')], max_length=3, verbose_name='Region')), + ('timezone', models.CharField(choices=[('PST', 'UTC - 8h (Pacific Standard Time)'), ('PDT', 'UTC - 7h (Pacific Daylight Time)'), ('CST', 'UTC - 6h (Central Standard Time)'), ('CDT', 'UTC - 5h (Central Daylight Time)'), ('EST', 'UTC - 5h (Eastern Standard Time)'), ('EDT', 'UTC - 4h (Eastern Daylight Time)'), ('GMT', 'UTC (Greenwich Mean Time)'), ('CET', 'UTC + 1h (Central European Time)'), ('CEST', 'UTC + 2h (Central European Summer Time)'), ('USZ1', 'UTC + 3h (Kaliningrad Time)'), ('MSK', 'UTC + 4h (Moscow Time)'), ('IST', 'UTC + 5.5h (Indian Standard Time)'), ('YEKST', 'UTC + 6h (Yekaterinburg Time)'), ('OMSST', 'UTC + 7h (Omsk Time)'), ('KRAST', 'UTC + 8h (Krasnoyarsk Time)'), ('CCT', 'UTC + 8h (Chinese Coast Time)'), ('IRKST', 'UTC + 9h (Irkutsk Time)'), ('JST', 'UTC + 9h (Japan Standard Time)'), ('YAKST', 'UTC + 10h (Yakutsk Time)'), ('AEST', 'UTC + 10h (Australian Eastern Standard Time)'), ('VLAST', 'UTC + 11h (Vladivostok Time)'), ('AEDT', 'UTC + 11h (Australian Eastern Daylight Time)'), ('ACST', 'UTC + 9.5h (Austrailian Central Standard Time)'), ('ACDT', 'UTC + 10.5h (Australian Central Daylight Time)'), ('NZST', 'UTC + 12h (New Zealand Standard Time)'), ('MAGST', 'UTC + 12h (Magadan Time)')], default='CEST', max_length=8, verbose_name='Timezone')), + ('environment', models.CharField(choices=[('pr', 'Production'), ('ut', 'Development'), ('it', 'Testing')], default='pr', max_length=2, verbose_name='Environment')), + ], + options={ + 'verbose_name': 'GSX Account', + 'verbose_name_plural': 'GSX Accounts', + 'ordering': ['title'], + 'get_latest_by': 'id', + 'unique_together': {('sold_to', 'ship_to', 'environment')}, + }, + ), + migrations.CreateModel( + name='Invoice', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('payment_method', models.IntegerField(choices=[(0, 'No Charge'), (1, 'Cash'), (2, 'Invoice'), (3, 'Credit Card'), (4, 'Mail payment'), (5, 'Online payment')], default=0, editable=False, verbose_name='Payment Method')), + ('is_paid', models.BooleanField(default=False, verbose_name='Paid')), + ('paid_at', models.DateTimeField(editable=False, null=True)), + ('customer_name', models.CharField(default='Walk-in', max_length=255, verbose_name='Name')), + ('customer_phone', models.CharField(blank=True, max_length=128, null=True, verbose_name='Phone')), + ('customer_email', models.CharField(blank=True, max_length=128, null=True, verbose_name='Email')), + ('customer_address', models.CharField(blank=True, max_length=255, null=True, verbose_name='Address')), + ('reference', models.CharField(blank=True, max_length=255, null=True, verbose_name='Reference')), + ('total_net', models.DecimalField(decimal_places=2, max_digits=8)), + ('total_tax', models.DecimalField(decimal_places=2, max_digits=8)), + ('total_gross', models.DecimalField(decimal_places=2, max_digits=8)), + ('total_margin', models.DecimalField(decimal_places=2, editable=False, max_digits=8)), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('customer', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.customer')), + ], + options={ + 'ordering': ('-id',), + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='Location', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Location', max_length=255, unique=True, verbose_name='Name')), + ('phone', models.CharField(blank=True, default='', max_length=32, verbose_name='Phone')), + ('email', models.EmailField(blank=True, default='', max_length=254, verbose_name='Email')), + ('address', models.CharField(blank=True, default='', max_length=32, verbose_name='Address')), + ('zip_code', models.CharField(blank=True, default='', max_length=8, verbose_name='ZIP Code')), + ('city', models.CharField(blank=True, default='', max_length=16, verbose_name='City')), + ('timezone', models.CharField(choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Nuuk', 'America/Nuuk'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qostanay', 'Asia/Qostanay'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], default='UTC', max_length=128, verbose_name='Time zone')), + ('gsx_shipto', models.CharField(blank=True, default='', max_length=10, verbose_name='Ship-To')), + ('gsx_tz', models.CharField(choices=[('PST', 'UTC - 8h (Pacific Standard Time)'), ('PDT', 'UTC - 7h (Pacific Daylight Time)'), ('CST', 'UTC - 6h (Central Standard Time)'), ('CDT', 'UTC - 5h (Central Daylight Time)'), ('EST', 'UTC - 5h (Eastern Standard Time)'), ('EDT', 'UTC - 4h (Eastern Daylight Time)'), ('GMT', 'UTC (Greenwich Mean Time)'), ('CET', 'UTC + 1h (Central European Time)'), ('CEST', 'UTC + 2h (Central European Summer Time)'), ('USZ1', 'UTC + 3h (Kaliningrad Time)'), ('MSK', 'UTC + 4h (Moscow Time)'), ('IST', 'UTC + 5.5h (Indian Standard Time)'), ('YEKST', 'UTC + 6h (Yekaterinburg Time)'), ('OMSST', 'UTC + 7h (Omsk Time)'), ('KRAST', 'UTC + 8h (Krasnoyarsk Time)'), ('CCT', 'UTC + 8h (Chinese Coast Time)'), ('IRKST', 'UTC + 9h (Irkutsk Time)'), ('JST', 'UTC + 9h (Japan Standard Time)'), ('YAKST', 'UTC + 10h (Yakutsk Time)'), ('AEST', 'UTC + 10h (Australian Eastern Standard Time)'), ('VLAST', 'UTC + 11h (Vladivostok Time)'), ('AEDT', 'UTC + 11h (Australian Eastern Daylight Time)'), ('ACST', 'UTC + 9.5h (Austrailian Central Standard Time)'), ('ACDT', 'UTC + 10.5h (Australian Central Daylight Time)'), ('NZST', 'UTC + 12h (New Zealand Standard Time)'), ('MAGST', 'UTC + 12h (Magadan Time)')], default='CEST', max_length=8, verbose_name='Timezone')), + ('notes', models.TextField(blank=True, default='Business hours between 9:00 - 18:00', help_text='Will be shown on print templates', verbose_name='Notes')), + ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), + ('checkin', models.BooleanField(default=True, verbose_name='Use for check-in')), + ('gsx_accounts', models.ManyToManyField(blank=True, to='servo.GsxAccount', verbose_name='Accounts')), + ('manager', models.ForeignKey(blank=True, limit_choices_to={'is_visible': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_locations', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Location', + 'verbose_name_plural': 'Locations', + 'ordering': ('title',), + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='Notification', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('kind', models.CharField(max_length=16)), + ('action', models.CharField(max_length=16)), + ('message', models.TextField()), + ], + ), + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(max_length=8, null=True, unique=True)), + ('url_code', models.CharField(max_length=8, null=True, unique=True)), + ('description', models.CharField(default='', max_length=128)), + ('status_icon', models.CharField(default='undefined', max_length=16)), + ('priority', models.IntegerField(choices=[(2, 'High'), (1, 'Normal'), (0, 'Low')], default=1, verbose_name='priority')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('started_at', models.DateTimeField(null=True)), + ('closed_at', models.DateTimeField(null=True)), + ('place', models.CharField(default='', max_length=128)), + ('customer_name', models.CharField(default='', max_length=128)), + ('state', models.IntegerField(choices=[(0, 'Unassigned'), (1, 'Open'), (2, 'Closed'), (3, 'Waiting')], default=0)), + ('status_name', models.CharField(default='', max_length=128)), + ('status_started_at', models.DateTimeField(null=True)), + ('status_limit_green', models.DateTimeField(null=True)), + ('status_limit_yellow', models.DateTimeField(null=True)), + ('checkin_location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.location')), + ('checkout_location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.location')), + ('closed_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='closed_orders', to=settings.AUTH_USER_MODEL)), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_orders', to=settings.AUTH_USER_MODEL)), + ('customer', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orders', to='servo.customer')), + ], + options={ + 'ordering': ('-priority', 'id'), + 'permissions': (('change_user', 'Can set assignee'), ('change_status', 'Can change status'), ('follow_order', 'Can follow order'), ('copy_order', 'Can copy order'), ('batch_process', 'Can batch process')), + }, + ), + migrations.CreateModel( + name='Product', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(default=servo.lib.shorturl.from_time, max_length=32, unique=True, verbose_name='Code')), + ('subst_code', models.CharField(default='', editable=False, max_length=32, verbose_name='Substituted (new) code of this part')), + ('title', models.CharField(default='New Product', max_length=255, verbose_name='Title')), + ('description', models.TextField(blank=True, default='', verbose_name='Description')), + ('pct_vat', models.DecimalField(decimal_places=2, default=servo.models.product.default_vat, max_digits=4, verbose_name='VAT %')), + ('fixed_price', models.BooleanField(default=False, help_text="Don't update price when recalculating prices or importing parts")), + ('price_purchase_exchange', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='Purchase price')), + ('pct_margin_exchange', models.DecimalField(decimal_places=2, default=servo.models.product.get_margin, max_digits=4, verbose_name='Margin %')), + ('price_notax_exchange', models.DecimalField(decimal_places=2, default=0, help_text='Purchase price + margin %', max_digits=8, verbose_name='Net price')), + ('price_sales_exchange', models.DecimalField(decimal_places=2, default=0, help_text='Purchase price + margin % + shipping + VAT %', max_digits=8, verbose_name='Sales price')), + ('price_purchase_stock', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='Purchase price')), + ('pct_margin_stock', models.DecimalField(decimal_places=2, default=servo.models.product.get_margin, max_digits=4, verbose_name='Margin %')), + ('price_notax_stock', models.DecimalField(decimal_places=2, default=0, help_text='Purchase price + margin %', max_digits=8, verbose_name='Net price')), + ('price_sales_stock', models.DecimalField(decimal_places=2, default=0, help_text='Purchase price + margin % + shipping + VAT %', max_digits=8, verbose_name='Sales price')), + ('is_serialized', models.BooleanField(default=False, help_text='Product has a serial number', verbose_name='Is serialized')), + ('warranty_period', models.PositiveIntegerField(default=0, verbose_name='Warranty (months)')), + ('shelf', models.CharField(blank=True, default='', max_length=8, verbose_name='Shelf code')), + ('brand', models.CharField(blank=True, default='', max_length=32, verbose_name='Brand')), + ('photo', models.ImageField(blank=True, null=True, upload_to='products', verbose_name='Photo')), + ('shipping', models.FloatField(default=0, verbose_name='Shipping')), + ('component_code', models.CharField(blank=True, choices=[('0', 'General'), ('1', 'Visual'), ('2', 'Displays'), ('3', 'Mass Storage'), ('4', 'Input Devices'), ('5', 'Boards'), ('6', 'Power'), ('7', 'Printer'), ('8', 'Multi-function Device'), ('9', 'Communication Devices'), ('A', 'Share'), ('B', 'iPhone'), ('E', 'iPod'), ('F', 'iPad'), ('G', 'Beats Products'), ('W', 'Apple Watch')], default='', max_length=1, verbose_name='Component group')), + ('labour_tier', models.CharField(blank=True, default='', max_length=15)), + ('part_type', models.CharField(choices=[('ADJUSTMENT', 'Adjustment'), ('MODULE', 'Module'), ('REPLACEMENT', 'Replacement'), ('SERVICE', 'Service'), ('SERVICE CONTRACT', 'Service Contract'), ('OTHER', 'Other')], default='OTHER', max_length=18, verbose_name='Part type')), + ('eee_code', models.CharField(blank=True, default='', max_length=256, verbose_name='EEE code')), + ('total_amount', models.IntegerField(default=0, editable=False)), + ], + options={ + 'ordering': ('-id',), + 'permissions': (('change_amount', 'Can change product amount'),), + }, + ), + migrations.CreateModel( + name='Property', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Field', max_length=255, verbose_name='title')), + ('type', models.CharField(choices=[('customer', 'Customer'), ('order', 'Order'), ('product', 'Product')], default=('customer', 'Customer'), max_length=32, verbose_name='type')), + ('format', models.CharField(blank=True, default='', max_length=32, verbose_name='format')), + ('value', models.TextField(blank=True, default='', verbose_name='value')), + ], + options={ + 'verbose_name': 'Field', + 'verbose_name_plural': 'Fields', + 'ordering': ['title'], + }, + ), + migrations.CreateModel( + name='PurchaseOrder', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('reference', models.CharField(blank=True, default='', max_length=32, verbose_name='Reference')), + ('confirmation', models.CharField(blank=True, default='', max_length=32, verbose_name='Confirmation')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('submitted_at', models.DateTimeField(editable=False, null=True)), + ('supplier', models.CharField(blank=True, max_length=32, verbose_name='Supplier')), + ('carrier', models.CharField(blank=True, max_length=32, verbose_name='Carrier')), + ('tracking_id', models.CharField(blank=True, max_length=128, verbose_name='Tracking ID')), + ('days_delivered', models.IntegerField(blank=True, default=1, verbose_name='Delivery Time')), + ('has_arrived', models.BooleanField(default=False)), + ('total', models.FloatField(editable=False, null=True)), + ('invoice_id', models.CharField(default='', editable=False, max_length=10)), + ('invoice', models.FileField(editable=False, help_text="Apple's sales invoice for this PO", null=True, upload_to='gsx_invoices')), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('location', models.ForeignKey(editable=False, help_text='The location from which this PO was created', null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.location')), + ('sales_order', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.order')), + ], + options={ + 'ordering': ('-id',), + }, + ), + migrations.CreateModel( + name='Queue', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Queue', max_length=255, unique=True, verbose_name='Title')), + ('keywords', models.TextField(blank=True, default='', help_text='Orders with devices matching these keywords will be automatically assigned to this queue')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('priority', models.IntegerField(choices=[(2, 'High'), (1, 'Normal'), (0, 'Low')], default=1, verbose_name='priority')), + ('gsx_soldto', models.CharField(blank=True, default='', help_text='GSX queries of an order in this queue will be made using this Sold-To', max_length=10, verbose_name='Sold-To')), + ('order_template', models.FileField(blank=True, help_text='HTML template for Service Order/Work Confirmation', null=True, upload_to='templates', verbose_name='order template')), + ('quote_template', models.FileField(blank=True, help_text='HTML template for cost estimate', null=True, upload_to='templates', verbose_name='quote template')), + ('receipt_template', models.FileField(blank=True, help_text='HTML template for Sales Order Receipt', null=True, upload_to='templates', verbose_name='receipt template')), + ('dispatch_template', models.FileField(blank=True, help_text='HTML template for dispatched order', null=True, upload_to='templates', verbose_name='dispatch template')), + ('locations', models.ManyToManyField(help_text='Pick the locations you want this queue to appear in.', to='servo.Location', verbose_name='locations')), + ], + options={ + 'verbose_name': 'Queue', + 'verbose_name_plural': 'Queues', + 'ordering': ['title'], + }, + ), + migrations.CreateModel( + name='QueueStatus', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('limit_green', models.IntegerField(default=1, verbose_name='Green limit')), + ('limit_yellow', models.IntegerField(default=15, verbose_name='Yellow limit')), + ('limit_factor', models.IntegerField(choices=[(60, 'Minutes'), (3600, 'Hours'), (86400, 'Days'), (604800, 'Weeks'), (2419200, 'Months')], default=60, verbose_name='Time unit')), + ('idx', models.IntegerField(default=1, verbose_name='Ordering')), + ('queue', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.queue')), + ], + options={ + 'ordering': ('idx',), + }, + ), + migrations.CreateModel( + name='Repair', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('tech_id', models.CharField(blank=True, default='', max_length=15, verbose_name='Technician')), + ('unit_received_at', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Unit Received')), + ('submitted_at', models.DateTimeField(editable=False, null=True)), + ('completed_at', models.DateTimeField(editable=False, null=True)), + ('request_review', models.BooleanField(default=False, help_text='Repair should be reviewed by Apple before confirmation')), + ('confirmation', models.CharField(default='', editable=False, max_length=15)), + ('reference', models.CharField(blank=True, default='', max_length=16, verbose_name='Reference')), + ('symptom', models.TextField()), + ('diagnosis', models.TextField()), + ('notes', models.TextField(blank=True, default='', help_text='Notes are mandatory when requesting review.', validators=[django.core.validators.MaxLengthValidator(800)])), + ('status', models.CharField(default='', editable=False, max_length=128)), + ('status_code', models.CharField(choices=[('AWTP', 'Awaiting Parts'), ('AWTR', 'Parts Allocated'), ('BEGR', 'In Repair'), ('RFPU', 'Ready for Pickup')], default='', editable=False, max_length=4)), + ('attachment', models.FileField(blank=True, help_text='Choose files to be sent with the repair creation request', null=True, upload_to='repairs')), + ('repair_number', models.CharField(default='', editable=False, max_length=12)), + ('mark_complete', models.BooleanField(blank=True, default=False, help_text='Requires replacement serial number', verbose_name='mark complete')), + ('replacement_sn', models.CharField(blank=True, default='', help_text='Serial Number of replacement part', max_length=18, verbose_name='New serial number')), + ('repair_type', models.CharField(choices=[('CA', 'Carry-In/Non-Replinished'), ('NE', 'Return Before Replace'), ('NT', 'No Trouble Found'), ('ON', 'Onsite (Indirect/Direct)'), ('RR', 'Repair Or Replace/Whole Unit Mail-In'), ('WH', 'Mail-In')], default='CA', editable=False, max_length=2)), + ('component_data', models.TextField(default='', editable=False)), + ('consumer_law', models.BooleanField(default=None, help_text='Repair is eligible for consumer law coverage', null=True)), + ('acplus', models.BooleanField(default=None, help_text='Repair is covered by AppleCare+', null=True, verbose_name='AppleCare+')), + ('symptom_code', models.CharField(default='', max_length=7)), + ('issue_code', models.CharField(default='', max_length=7)), + ('completed_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='completed_repairs', to=settings.AUTH_USER_MODEL)), + ('created_by', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, related_name='created_repairs', to=settings.AUTH_USER_MODEL)), + ('device', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, to='servo.device')), + ('gsx_account', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, to='servo.gsxaccount')), + ('order', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, to='servo.order')), + ], + options={ + 'get_latest_by': 'created_at', + }, + ), + migrations.CreateModel( + name='Rule', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.CharField(default='New Rule', max_length=128)), + ('match', models.CharField(choices=[('ANY', 'Any'), ('ALL', 'All')], default='ANY', max_length=3)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Search', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('query', models.TextField()), + ('model', models.CharField(max_length=32)), + ('title', models.CharField(max_length=128)), + ('shared', models.BooleanField(default=True)), + ], + ), + migrations.CreateModel( + name='ServiceOrderItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(blank=True, default='', max_length=128)), + ('title', models.CharField(max_length=128, verbose_name='title')), + ('description', models.TextField(blank=True, default='', verbose_name='description')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('amount', models.IntegerField(default=1, verbose_name='amount')), + ('sn', models.CharField(blank=True, default='', max_length=32, verbose_name='KGB Serial Number')), + ('dispatched', models.BooleanField(default=False, verbose_name='dispatched')), + ('should_report', models.BooleanField(default=True, verbose_name='report')), + ('price', models.DecimalField(decimal_places=2, max_digits=8, verbose_name='sales price')), + ('replaced_at', models.DateTimeField(null=True)), + ('kbb_sn', models.CharField(blank=True, default='', max_length=32, verbose_name='KBB Serial Number')), + ('imei', models.CharField(blank=True, default='', max_length=35, verbose_name='IMEI')), + ('price_category', models.CharField(choices=[('warranty', 'Warranty'), ('exchange', 'Exchange Price'), ('stock', 'Stock Price')], default=('warranty', 'Warranty'), max_length=32, verbose_name='Price category')), + ('comptia_code', models.CharField(blank=True, default='', max_length=4, verbose_name='Symptom code')), + ('comptia_modifier', models.CharField(blank=True, default='', max_length=1, verbose_name='Symptom modifier')), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.order')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='servo.product')), + ('replaced_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='replaced_parts', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ('id',), + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='ShippingMethod', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Shipping Method', max_length=128)), + ('description', models.TextField(blank=True, default='')), + ('notify_email', models.EmailField(blank=True, max_length=254, null=True)), + ], + ), + migrations.CreateModel( + name='Template', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Template', max_length=128, unique=True, verbose_name='Title')), + ('content', models.TextField(verbose_name='Content')), + ], + options={ + 'verbose_name': 'Template', + 'verbose_name_plural': 'Templates', + 'ordering': ['title'], + }, + ), + migrations.CreateModel( + name='UserGroup', + fields=[ + ('group_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='auth.group')), + ], + bases=('auth.group',), + managers=[ + ('objects', django.contrib.auth.models.GroupManager()), + ], + ), + migrations.CreateModel( + name='TaggedItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ref', models.CharField(max_length=32)), + ('ref_id', models.IntegerField()), + ('tag', models.CharField(max_length=128)), + ('slug', models.SlugField()), + ('color', models.CharField(default='', max_length=8)), + ], + options={ + 'unique_together': {('ref', 'ref_id', 'tag')}, + }, + ), + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Tag', max_length=255, unique=True, verbose_name='name')), + ('type', models.CharField(choices=[('device', 'Device'), ('order', 'Order'), ('note', 'Note'), ('other', 'Other')], max_length=32, verbose_name='type')), + ('times_used', models.IntegerField(default=0, editable=False)), + ('color', models.CharField(blank=True, choices=[('default', 'Default'), ('success', 'Green'), ('warning', 'Orange'), ('important', 'Red'), ('info', 'Blue')], default='default', max_length=16, null=True)), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), + ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), + ('level', models.PositiveIntegerField(editable=False)), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='servo.tag')), + ], + options={ + 'verbose_name': 'Tag', + 'verbose_name_plural': 'Tags', + }, + ), + migrations.CreateModel( + name='Status', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Status', max_length=255, verbose_name='name')), + ('description', models.TextField(blank=True, null=True, verbose_name='description')), + ('limit_green', models.IntegerField(default=1, verbose_name='green limit')), + ('limit_yellow', models.IntegerField(default=15, verbose_name='yellow limit')), + ('limit_factor', models.IntegerField(choices=[(60, 'Minutes'), (3600, 'Hours'), (86400, 'Days'), (604800, 'Weeks'), (2419200, 'Months')], default=(60, 'Minutes'), verbose_name='time unit')), + ('queue', models.ManyToManyField(editable=False, through='servo.QueueStatus', to='servo.Queue')), + ], + options={ + 'verbose_name': 'Status', + 'verbose_name_plural': 'Statuses', + 'ordering': ('title',), + }, + ), + migrations.CreateModel( + name='Shipment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ship_to', models.CharField(default='', editable=False, max_length=10)), + ('return_id', models.CharField(editable=False, help_text='The return ID returned by GSX', max_length=10, null=True, unique=True)), + ('tracking_id', models.CharField(blank=True, default='', help_text="Carrier's tracking ID", max_length=30, verbose_name='Tracking ID')), + ('tracking_url', models.URLField(editable=False, help_text='The tracking URL returned by GSX', null=True)), + ('packing_list', models.FileField(editable=False, help_text='The PDF returned by GSX', null=True, upload_to='returns')), + ('carrier', models.CharField(blank=True, choices=[('XAER', 'Aero 2000'), ('XAIRBEC', 'Airborne'), ('XAIRB', 'Airborne'), ('XARM', 'Aramex'), ('XOZP', 'Australia Post'), ('XBAX', 'BAX GLOBAL PTE LTD'), ('XCPW', 'CPW Internal'), ('XCL', 'Citylink'), ('XDHL', 'DHL'), ('XDHLC', 'DHL'), ('XDZNA', 'Danzas-AEI'), ('XEAS', 'EAS'), ('XEGL', 'Eagle ASIA PACIFIC HOLDINGS'), ('XEXXN', 'Exel'), ('XFEDE', 'FedEx'), ('XFDE', 'FedEx Air'), ('XGLS', 'GLS-General Logistics Systems'), ('XHNF', 'H and Friends'), ('XNGLN', 'Nightline'), ('XPL', 'Parceline'), ('XPRLA', 'Purolator'), ('SDS', 'SDS An Post'), ('XSNO', 'Seino Transportation Co. Ltd.'), ('XSTE', 'Star Track Express'), ('XTNT', 'TNT'), ('XUPSN', 'UPS'), ('XUTI', 'UTi (Japan) K.K.'), ('XYMT', 'YAMATO')], default='', max_length=18, verbose_name='Carrier')), + ('created_at', models.DateTimeField(auto_now=True)), + ('dispatched_at', models.DateTimeField(editable=False, null=True)), + ('width', models.PositiveIntegerField(blank=True, null=True, verbose_name='width')), + ('height', models.PositiveIntegerField(blank=True, null=True, verbose_name='height')), + ('length', models.PositiveIntegerField(blank=True, null=True, verbose_name='length')), + ('weight', models.PositiveIntegerField(blank=True, null=True, verbose_name='weight')), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_shipments', to=settings.AUTH_USER_MODEL)), + ('dispatched_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dispatched_shipments', to=settings.AUTH_USER_MODEL)), + ('location', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.location')), + ], + options={ + 'ordering': ('-dispatched_at',), + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='ServicePart', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('comptia_code', models.CharField(editable=False, max_length=4, verbose_name='Symptom Code')), + ('comptia_modifier', models.CharField(editable=False, max_length=1, verbose_name='Symptom Modifier')), + ('line_number', models.SmallIntegerField(editable=False, null=True)), + ('registered_for_return', models.BooleanField(default=False)), + ('returned_at', models.DateTimeField(editable=False, null=True)), + ('ship_to', models.CharField(editable=False, max_length=18)), + ('part_title', models.CharField(max_length=128)), + ('part_number', models.CharField(max_length=18)), + ('service_order', models.CharField(max_length=10)), + ('return_order', models.CharField(default='', max_length=10)), + ('return_status', models.CharField(default='', editable=False, max_length=128)), + ('return_code', models.CharField(default='', editable=False, max_length=4)), + ('order_status', models.CharField(default='', editable=False, max_length=128)), + ('order_status_code', models.CharField(default='', editable=False, max_length=4)), + ('coverage_description', models.CharField(default='', editable=False, max_length=128)), + ('box_number', models.PositiveIntegerField(null=True)), + ('return_label', models.FileField(editable=False, null=True, upload_to='return_labels')), + ('carrier_url', models.CharField(default='', editable=False, max_length=255)), + ('order_item', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='servo.serviceorderitem')), + ('purchase_order', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.purchaseorder')), + ('repair', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='servo.repair')), + ('shipment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.shipment')), + ], + options={ + 'ordering': ('order_item',), + 'get_latest_by': 'id', + 'unique_together': {('id', 'shipment')}, + }, + ), + migrations.AddField( + model_name='repair', + name='parts', + field=models.ManyToManyField(through='servo.ServicePart', to='servo.ServiceOrderItem'), + ), + migrations.AddField( + model_name='queuestatus', + name='status', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.status'), + ), + migrations.AddField( + model_name='queue', + name='status_assigned', + field=models.ForeignKey(blank=True, help_text='Order has ben assigned to a user', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Order Assigned'), + ), + migrations.AddField( + model_name='queue', + name='status_closed', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Order Closed'), + ), + migrations.AddField( + model_name='queue', + name='status_created', + field=models.ForeignKey(blank=True, help_text='Order has ben placed to a queue', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Order Created'), + ), + migrations.AddField( + model_name='queue', + name='status_dispatched', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Order Dispatched'), + ), + migrations.AddField( + model_name='queue', + name='status_products_ordered', + field=models.ForeignKey(blank=True, help_text='Purchase Order for this Service Order has been submitted', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Products Ordered'), + ), + migrations.AddField( + model_name='queue', + name='status_products_received', + field=models.ForeignKey(blank=True, help_text='Products have been received', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Products Received'), + ), + migrations.AddField( + model_name='queue', + name='status_repair_completed', + field=models.ForeignKey(blank=True, help_text='GSX repair completed', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.queuestatus', verbose_name='Repair Completed'), + ), + migrations.CreateModel( + name='PurchaseOrderItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(blank=True, default='', max_length=128)), + ('title', models.CharField(max_length=128, verbose_name='title')), + ('description', models.TextField(blank=True, default='', verbose_name='description')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('amount', models.IntegerField(default=1, verbose_name='amount')), + ('sn', models.CharField(blank=True, default='', max_length=32, verbose_name='KGB Serial Number')), + ('price', models.DecimalField(decimal_places=2, help_text='Purchase price without taxes', max_digits=8, verbose_name='Purchase Price')), + ('sales_order_ref', models.CharField(default='', editable=False, max_length=8)), + ('purchase_order_ref', models.CharField(default='', editable=False, max_length=32)), + ('user_fullname', models.CharField(default='', editable=False, max_length=256)), + ('reference', models.CharField(blank=True, default='', max_length=128)), + ('ordered_at', models.DateTimeField(editable=False, null=True)), + ('expected_ship_date', models.DateField(editable=False, null=True)), + ('received_at', models.DateTimeField(blank=True, editable=False, null=True, verbose_name='arrived')), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('order_item', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.serviceorderitem')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='servo.product')), + ('purchase_order', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='servo.purchaseorder', verbose_name='Purchase Order')), + ('received_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('sales_order', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.order')), + ], + options={ + 'ordering': ('id',), + 'get_latest_by': 'id', + }, + ), + migrations.CreateModel( + name='ProductCategory', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='New Category', max_length=255, unique=True)), + ('slug', models.SlugField(editable=False, null=True)), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), + ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), + ('level', models.PositiveIntegerField(editable=False)), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='servo.productcategory')), + ], + options={ + 'ordering': ('-title',), + 'get_latest_by': 'id', + }, + ), + migrations.AddField( + model_name='product', + name='categories', + field=models.ManyToManyField(blank=True, to='servo.ProductCategory', verbose_name='Categories'), + ), + migrations.AddField( + model_name='product', + name='device_models', + field=models.ManyToManyField(blank=True, to='servo.DeviceGroup', verbose_name='Device models'), + ), + migrations.CreateModel( + name='Payment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('method', models.IntegerField(choices=[(0, 'No Charge'), (1, 'Cash'), (2, 'Invoice'), (3, 'Credit Card'), (4, 'Mail payment'), (5, 'Online payment')], default=0, verbose_name='Payment Method')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('amount', models.DecimalField(decimal_places=2, max_digits=8)), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('invoice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.invoice')), + ], + ), + migrations.CreateModel( + name='OrderStatus', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('started_at', models.DateTimeField(auto_now_add=True)), + ('finished_at', models.DateTimeField(null=True)), + ('green_limit', models.DateTimeField(null=True)), + ('yellow_limit', models.DateTimeField(null=True)), + ('badge', models.CharField(choices=[('undefined', 'undefined'), ('success', 'success'), ('warning', 'warning'), ('danger', 'danger')], default='undefined', max_length=16)), + ('duration', models.IntegerField(default=0)), + ('finished_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.order')), + ('started_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)), + ('status', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.status')), + ], + options={ + 'ordering': ('-started_at',), + 'get_latest_by': 'started_at', + }, + ), + migrations.CreateModel( + name='OrderDevice', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('should_report', models.BooleanField(default=True)), + ('repeat_service', models.BooleanField(default=False)), + ('repair_strategies', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text='Available repair strategies from GSX', null=True, size=None)), + ('device', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='servo.device')), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.order')), + ], + options={ + 'unique_together': {('order', 'device')}, + }, + ), + migrations.AddField( + model_name='order', + name='devices', + field=models.ManyToManyField(through='servo.OrderDevice', to='servo.Device'), + ), + migrations.AddField( + model_name='order', + name='followed_by', + field=models.ManyToManyField(related_name='followed_orders', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='order', + name='location', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='servo.location'), + ), + migrations.AddField( + model_name='order', + name='queue', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.queue', verbose_name='queue'), + ), + migrations.AddField( + model_name='order', + name='started_by', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='started_orders', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='order', + name='status', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.queuestatus', verbose_name='status'), + ), + migrations.AddField( + model_name='order', + name='statuses', + field=models.ManyToManyField(related_name='orders', through='servo.OrderStatus', to='servo.Status'), + ), + migrations.AddField( + model_name='order', + name='tags', + field=models.ManyToManyField(to='servo.Tag', verbose_name='tags'), + ), + migrations.AddField( + model_name='order', + name='user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL), + ), + migrations.CreateModel( + name='Note', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('subject', models.CharField(blank=True, default=servo.defaults.subject, max_length=255, verbose_name='Subject')), + ('body', models.TextField(verbose_name='Message')), + ('code', models.CharField(default=servo.lib.shorturl.from_time, editable=False, max_length=9, unique=True)), + ('sender', models.CharField(default='', max_length=255, verbose_name='From')), + ('recipient', models.CharField(blank=True, default='', max_length=255, verbose_name='To')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('sent_at', models.DateTimeField(editable=False, null=True)), + ('is_reported', models.BooleanField(default=False, help_text='Show this note on the confirmation printout', verbose_name='Report')), + ('is_read', models.BooleanField(default=True, editable=False, verbose_name='Read')), + ('is_flagged', models.BooleanField(default=False, editable=False, verbose_name='Flagged')), + ('type', models.IntegerField(blank=True, choices=[(0, 'Note'), (1, 'Problem'), (2, 'Escalation')], default=0, verbose_name='Type')), + ('lft', models.PositiveIntegerField(editable=False)), + ('rght', models.PositiveIntegerField(editable=False)), + ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), + ('level', models.PositiveIntegerField(editable=False)), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('customer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.customer')), + ('escalation', servo.models.note.UnsavedForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.escalation')), + ('labels', models.ManyToManyField(blank=True, limit_choices_to={'type': 'note'}, to='servo.Tag')), + ('order', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='servo.order')), + ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='servo.note')), + ], + options={ + 'get_latest_by': 'created_at', + }, + ), + migrations.CreateModel( + name='InvoiceItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(blank=True, default='', max_length=128)), + ('title', models.CharField(max_length=128, verbose_name='title')), + ('description', models.TextField(blank=True, default='', verbose_name='description')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('amount', models.IntegerField(default=1, verbose_name='amount')), + ('sn', models.CharField(blank=True, default='', max_length=32, verbose_name='KGB Serial Number')), + ('price', models.DecimalField(decimal_places=2, max_digits=8, verbose_name='Sales Price')), + ('created_by', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('invoice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.invoice')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='servo.product')), + ], + ), + migrations.AddField( + model_name='invoice', + name='location', + field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.location'), + ), + migrations.AddField( + model_name='invoice', + name='order', + field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, to='servo.order'), + ), + migrations.CreateModel( + name='FlaggedItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ref', models.CharField(max_length=32)), + ('ref_id', models.IntegerField()), + ('flagged_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ref', models.CharField(max_length=32)), + ('ref_id', models.IntegerField()), + ('description', models.CharField(max_length=255)), + ('triggered_at', models.DateTimeField(auto_now_add=True)), + ('handled_at', models.DateTimeField(null=True)), + ('action', models.CharField(max_length=32)), + ('priority', models.SmallIntegerField(default=1)), + ('notify_users', models.ManyToManyField(related_name='notifications', to=settings.AUTH_USER_MODEL)), + ('triggered_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ('priority', '-id'), + }, + ), + migrations.AddField( + model_name='escalation', + name='gsx_account', + field=models.ForeignKey(default=servo.defaults.gsx_account, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.gsxaccount', verbose_name='GSX Account'), + ), + migrations.AddField( + model_name='device', + name='products', + field=models.ManyToManyField(editable=False, help_text='Products that are compatible with this device instance', to='servo.Product'), + ), + migrations.AddField( + model_name='customer', + name='devices', + field=models.ManyToManyField(blank=True, editable=False, to='servo.Device', verbose_name='devices'), + ), + migrations.AddField( + model_name='customer', + name='groups', + field=models.ManyToManyField(blank=True, to='servo.CustomerGroup', verbose_name='Groups'), + ), + migrations.AddField( + model_name='customer', + name='parent', + field=mptt.fields.TreeForeignKey(blank=True, limit_choices_to={'is_company': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contacts', to='servo.customer', verbose_name='company'), + ), + migrations.AddField( + model_name='customer', + name='tags', + field=models.ManyToManyField(blank=True, limit_choices_to={'type': 'customer'}, to='servo.Tag', verbose_name='tags'), + ), + migrations.CreateModel( + name='Condition', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(choices=[('QUEUE', 'Queue'), ('STATUS', 'Status'), ('DEVICE', 'Device name'), ('CUSTOMER_NAME', 'Customer name')], max_length=16)), + ('operator', models.CharField(choices=[('^%s$', 'Equals'), ('%s', 'Contains'), ('%d < %d', 'Less than'), ('%d > %d', 'Greater than')], default='^%s$', max_length=8)), + ('value', models.TextField(default='')), + ('rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.rule')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='ChecklistItemValue', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('checked_at', models.DateTimeField(auto_now_add=True)), + ('checked_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.checklistitem')), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.order')), + ], + ), + migrations.AddField( + model_name='checklist', + name='queues', + field=models.ManyToManyField(blank=True, to='servo.Queue', verbose_name='queue'), + ), + migrations.CreateModel( + name='Article', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('gsx_id', models.CharField(default='', editable=False, max_length=20)), + ('date_created', models.DateField(editable=False)), + ('date_published', models.DateField(null=True)), + ('title', models.TextField(default='New Article')), + ('summary', models.TextField(default='')), + ('content', models.TextField(default='')), + ('priority', models.CharField(choices=[('HIGH', 'High'), ('MEDIUM', 'Medium'), ('LOW', 'Low')], default='HIGH', max_length=128)), + ('url', models.URLField(default='')), + ('product_model', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=128), editable=False, null=True, size=None)), + ('read_by', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), default=list, size=None)), + ('flagged_by', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), default=list, size=None)), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Action', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(choices=[('SEND_SMS', 'Send SMS'), ('SEND_EMAIL', 'Send email'), ('ADD_TAG', 'Add Tag'), ('SET_PRIO', 'Set Priority'), ('SET_QUEUE', 'Set Queue'), ('SET_USER', 'Assign to')], default='SEND_EMAIL', max_length=32)), + ('value', models.TextField(default='')), + ('rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.rule')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Accessory', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ('qty', models.IntegerField(default=1)), + ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.device')), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.order')), + ], + ), + migrations.AddField( + model_name='user', + name='customer', + field=mptt.fields.TreeForeignKey(blank=True, limit_choices_to={'is_company': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, to='servo.customer'), + ), + migrations.AddField( + model_name='user', + name='groups', + field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), + ), + migrations.AddField( + model_name='user', + name='location', + field=models.ForeignKey(help_text='Orders you create will be registered to this location.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='servo.location', verbose_name='Current Location'), + ), + migrations.AddField( + model_name='user', + name='locations', + field=models.ManyToManyField(blank=True, to='servo.Location'), + ), + migrations.AddField( + model_name='user', + name='queues', + field=models.ManyToManyField(blank=True, to='servo.Queue', verbose_name='queues'), + ), + migrations.AddField( + model_name='user', + name='user_permissions', + field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), + ), + migrations.AlterUniqueTogether( + name='queuestatus', + unique_together={('queue', 'status')}, + ), + migrations.CreateModel( + name='Message', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(default=servo.defaults.uid, max_length=36, unique=True)), + ('sender', models.CharField(max_length=128)), + ('recipient', models.CharField(max_length=128)), + ('body', models.TextField()), + ('sent_at', models.DateTimeField(null=True)), + ('received_at', models.DateTimeField(null=True)), + ('status', models.CharField(choices=[('SENT', 'SENT'), ('DELIVERED', 'DELIVERED'), ('RECEIVED', 'RECEIVED'), ('FAILED', 'FAILED')], max_length=16)), + ('method', models.CharField(choices=[('EMAIL', 'EMAIL'), ('SMS', 'SMS'), ('GSX', 'GSX')], default='EMAIL', max_length=16)), + ('error', models.TextField()), + ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('note', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.note')), + ], + options={ + 'unique_together': {('note', 'recipient')}, + }, + ), + migrations.CreateModel( + name='Inventory', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('amount_minimum', models.PositiveIntegerField(default=0, verbose_name='Minimum amount')), + ('amount_reserved', models.PositiveIntegerField(default=0, verbose_name='Reserved amount')), + ('amount_stocked', models.IntegerField(default=0, verbose_name='Stocked amount')), + ('amount_ordered', models.PositiveIntegerField(default=0, verbose_name='Ordered amount')), + ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.location')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.product')), + ], + options={ + 'unique_together': {('product', 'location')}, + }, + ), + migrations.CreateModel( + name='ContactInfo', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(max_length=255)), + ('value', models.CharField(max_length=255)), + ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servo.customer')), + ], + options={ + 'unique_together': {('customer', 'key')}, + }, + ), + ] |