· 4 years ago · Sep 06, 2021, 07:24 AM
1class Company(models.Model):
2 class Meta:
3 db_table = 'companies'
4 default_permissions = ()
5 ordering = ['pk']
6
7 class Map:
8 GOOGLE = 1
9 YANDEX = 2
10 OSM = 3
11 VISICOM = 4
12 LIGATAXI = 5
13 GOMAP = 6
14 OPENMAPTILES = 7
15 GOOGLE_EMBEDDED = 8
16 HERE = 10
17
18 class RoutingAlgo:
19 SHORTEST = 1
20 FASTEST = 2
21
22 class CalcWaitTime:
23 ARRIVED = 1
24 OTHER = 2
25
26 CHOICE_MAP_PROVIDER = (
27 (Map.GOOGLE, _(u'google')),
28 (Map.HERE, _(u'Here')),
29 (Map.YANDEX, _(u'yandex')),
30 (Map.OSM, _(u'osm')),
31 (Map.VISICOM, _(u'visicom')),
32 (Map.GOMAP, _(u'gomap')),
33 )
34
35 CHOICE_ROUTE_PROVIDER = (
36 (Map.GOOGLE, _(u'google')),
37 (Map.HERE, _(u'Here')),
38 (Map.YANDEX, _(u'yandex')),
39 (Map.OSM, _(u'osm')),
40 (Map.VISICOM, _(u'visicom')),
41 (Map.GOMAP, _(u'gomap')),
42 )
43
44 CHOICE_GEOCODE_PROVIDER = (
45 (Map.GOOGLE, _(u'google')),
46 (Map.HERE, _(u'Here')),
47 (Map.YANDEX, _(u'yandex')),
48 (Map.OSM, _(u'osm')),
49 (Map.LIGATAXI, _(u'LigaTaxi')),
50 (Map.VISICOM, _(u'visicom')),
51 (Map.GOMAP, _(u'gomap')),
52 )
53
54 CHOICE_ROUTING_ALGO = (
55 (RoutingAlgo.SHORTEST, _(u'Shortest')),
56 (RoutingAlgo.FASTEST, _(u'Fastest')),
57 )
58
59 CHOICE_ROUND_PRICE = (
60 (0.01, u'0.01'),
61 (0.1, u'0.1'),
62 (0.5, u'0.5'),
63 (1.0, u'1'),
64 (2.0, u'2'),
65 (5.0, u'5'),
66 (10.0, u'10'),
67 (20.0, u'20'),
68 (50.0, u'50'),
69 (100.0, u'100'),
70 (500.0, u'500'),
71 (1000.0, u'1000'),
72 )
73
74 CHOICE_CALC_WAIT_TIME = (
75 (CalcWaitTime.ARRIVED, _('Arrived')),
76 (CalcWaitTime.OTHER, _('Other')),
77 )
78
79 name = models.CharField(_(u'Company name'), max_length=80)
80 logo = ImageField(_(u'Company logo'), upload_to='images/logo', null=True, blank=True)
81 map_provider = models.SmallIntegerField(_(u'Default map provider'), choices=CHOICE_MAP_PROVIDER, default=Map.GOOGLE)
82 route_provider = models.SmallIntegerField(_(u'Default route provider'), choices=CHOICE_ROUTE_PROVIDER, default=Map.GOOGLE)
83 geocode_provider = models.SmallIntegerField(_(u'Default geocode provider'), choices=CHOICE_GEOCODE_PROVIDER, default=Map.GOOGLE)
84 routing_algo = models.SmallIntegerField(_(u'Routing algo'), choices=CHOICE_ROUTING_ALGO, default=RoutingAlgo.SHORTEST)
85 google_api_key = models.CharField(_(u'Google API Key'), max_length=250, null=True, blank=True)
86 yandex_api_key = models.CharField(_(u'Yandex API Key'), max_length=250, null=True, blank=True)
87 gomap_api_key = models.CharField(_(u'Gomap API Key'), max_length=250, null=True, blank=True)
88 visicom_api_key = models.CharField(_(u'Visicom API Key'), max_length=250, null=True, blank=True)
89 here_app_id = models.CharField(_(u'Here Maps app id'), max_length=50, null=True, blank=True)
90 here_app_code = models.CharField(_(u'Here Maps app code'), max_length=50, null=True, blank=True)
91 here_maps_api_key = models.CharField(_(u'Here Maps app key'), max_length=50, null=True, blank=True, default='')
92 default_locality = models.ForeignKey(Locality, verbose_name=_(u'Default locality'), on_delete=models.SET_NULL, null=True)
93 round_price = models.FloatField(_(u'Round price'), default=1, choices=CHOICE_ROUND_PRICE)
94 round_up = models.BooleanField(_(u'Round up'), default=True)
95 order_accept_timeout = models.SmallIntegerField(_(u'Time for accepting order'), help_text=_(u'Seconds'), default=45)
96 wait_client_distance = models.PositiveSmallIntegerField(_(u'Wait client distance'), help_text=_(u'Meters'), default=0)
97 done_client_distance = models.PositiveSmallIntegerField(_(u'Done client_distance'), help_text=_(u'Meters'), default=0)
98 driving_min_time = models.PositiveSmallIntegerField(_(u'Driving min time'), help_text=_(u'Minutes'), default=0)
99 max_parkings = models.SmallIntegerField(_(u'Maximum parkings for check in'), default=5)
100 break_enabled = models.BooleanField(_(u'Can driver take break'), default=True)
101 parkings_enabled = models.BooleanField(_(u'Parkings enabled'), default=True)
102 parking_on_order = models.BooleanField(_(u'Can driver check in parking when performing order'), default=False)
103 break_min_time = models.PositiveSmallIntegerField(_(u'Break min time'), help_text=_(u'Minutes'), default=1)
104 second_order = models.BooleanField(_(u'Second order'), default=False)
105 taximeter = models.BooleanField(_(u'Taximeter'), default=False)
106 driver_archive = models.BooleanField(_(u'Show archive to driver '), default=True)
107 driver_rating = models.BooleanField(_(u'Show rating to driver '), default=True)
108 driver_fin_operations = models.BooleanField(_(u'Show fin operations to driver'), default=True)
109 drivers_on_map = models.BooleanField(_(u'Show other drivers on map to driver'), default=True)
110 driver_store = models.BooleanField(_(u'Store available in driver app'), default=False)
111 driver_store_archive = models.BooleanField(_(u'Store archive available in driver app'), default=False)
112 mobile_config_version = models.IntegerField(default=0)
113 associate_clients = models.BooleanField(_(u'Associate clients with company'), default=True)
114 late_check = models.BooleanField(_(u'Check if driver be in time on order'), default=True, help_text=_(u'Applying for reserved order'))
115 ticket_html = models.TextField(_(u'Html ticket'), default='---')
116 show_parkings = models.BooleanField(_(u'Show Parking'), default=True)
117 driver_can_checkin_parking = models.BooleanField(_(u'Driver can checkin parking'), default=True)
118 taximeter_round_price = models.BooleanField(_('Taximeter round price'), default=True)
119 active_cancel_order_button = models.BooleanField(_('Active cancel order button'), default=True)
120 play_broadcast_sound_on_order = models.BooleanField(_('Play broadcast sound on order'), default=True)
121 show_sos_button = models.BooleanField(_('Show sos button'), default=True)
122 pickup_time_visibility = models.BooleanField(_('Pickup time visibility'), default=True)
123 show_markup = models.BooleanField(_('Show markup'), default=True)
124 driver_can_close_session = models.BooleanField(_('Driver can close session'), default=True)
125 driver_earnings_visibility = models.BooleanField(_('Driver earnings visibility'), default=True)
126 order_discount_visible_in_broadcast = models.BooleanField(_('Order discount visible in broadcast'), default=True)
127 show_client_bonus_balance = models.BooleanField(_('Show client bonus balance'), default=True)
128 show_distance_without_destination = models.BooleanField(_('Show distance without destination'), default=True)
129 ask_question_for_accepting_order = models.BooleanField(_('Ask question for accepting order'), default=True)
130 show_orders_in_radius = models.IntegerField(_('Show orders in radius'), default=0)
131 show_order_id_in_arhive = models.BooleanField(_('Show order id in arhive'), default=True)
132 ask_question_for_decline_order = models.BooleanField(_('Ask question for decline order'), default=True)
133 calc_wait_time_from = models.IntegerField(_('Calc wait time from'), default=CalcWaitTime.ARRIVED, choices=CHOICE_CALC_WAIT_TIME)
134 check_distance_on_route = models.BooleanField(_('Check distance on route'), default=True)
135 hide_drivers_info_on_map = models.BooleanField(_('Hide drivers info on map'), default=True)
136 show_busy_drivers_on_map = models.BooleanField(_('Show busy drivers on map'), default=True)
137 is_log_push_allowed = models.BooleanField(_('Is log push allowed'), default=True)
138
139 def __unicode__(self):
140 return self.name
141
142 def get_provider_choices(self, choices):
143 global_settings = GlobalSettings.get()
144 if global_settings['country'] == GlobalSettings.Country.UA:
145 choices += ((Company.Map.VISICOM, _(u'visicom')),)
146 elif global_settings['country'] == GlobalSettings.Country.AZ:
147 choices += ((Company.Map.GOMAP, _(u'gomap')),)
148 return choices
149
150 def get_map_provider_choices(self):
151 choices = Company.CHOICE_MAP_PROVIDER[:-2]
152 return self.get_provider_choices(choices)
153
154 def get_route_provider_choices(self):
155 choices = Company.CHOICE_ROUTE_PROVIDER[:-2]
156 return self.get_provider_choices(choices)
157
158 def get_geocode_provider_choices(self):
159 choices = Company.CHOICE_GEOCODE_PROVIDER[:-2]
160 return self.get_provider_choices(choices)