template.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. class Template():
  2. is_global = (
  3. "доступно ли для хранения в глобальном "
  4. "сервисе/необходима синхронизация"
  5. )
  6. is_visible = (
  7. "доступно ли для планирования в цепочке "
  8. "с другими услугами в глобальном сервисе"
  9. )
  10. id_metaservice = (
  11. "уникальный идентификатор мета-сервиса, необходимый для "
  12. "синхронизации данных. Если при синхронизации возникает конфликт "
  13. "(несовместимость) с другим сервисом, предлагается или форсировать "
  14. "изменения везде (если возможно), либо is_global выставляется как false."
  15. )
  16. class Permissions(models.Model):
  17. # DATA
  18. permission_type = models.BigIntegerField(
  19. help_text="уникальный идентификатор определяющий наличие разрешения из множества в словаре - выданных пользователю/клиенту/аккаунту"
  20. )
  21. check_level = models.CharField(
  22. max_length=10,
  23. help_text="(check-level из классификатора платформы) - информация об уровне проверки. Проверка может быть проведена как платформой, так и мета-сервисом, так и партнером мета-сервиса, а может быть и никем (просто загружен). Указывается, так как достоверность проверки разная. Экзамен, проверенный только на низком уровне, не принимается во внимание как имеющийся до прохождения более высокоуровневой проверки."
  24. )
  25. status = models.CharField(
  26. max_length=150,
  27. help_text="статус обработки заявки в системе заявок"
  28. )
  29. check_date = models.DateTimeField(
  30. null=True,
  31. help_text="timestamp проверки"
  32. )
  33. expire_date = models.DateField(
  34. help_text="Срок окончания действия разрешения"
  35. )
  36. # FK
  37. ticket_status = models.ForeignKey(
  38. Ticket,
  39. on_delete=models.DO_NOTHING,
  40. null=True,
  41. help_text="id заявки, по которой происходит проверка статуса relationship. State меняется только в результате изменений в заявке."
  42. )
  43. user_id = models.ForeignKey(
  44. get_user_model(),
  45. related_name="user_id_perm",
  46. on_delete=models.DO_NOTHING,
  47. null=True,
  48. help_text="уникальный идентификатор пользователя/клиента/аккаунта, которым была пройдена проверка и получено разрешение"
  49. )
  50. checked_by = models.ForeignKey(
  51. get_user_model(),
  52. related_name="checked_by_perm",
  53. on_delete=models.DO_NOTHING,
  54. null=True,
  55. help_text="userid проверившего"
  56. )
  57. class Provider(models.Model):
  58. # DATA
  59. type = models.CharField(
  60. max_length=150,
  61. help_text="тип поставщика (партнер/ответственное лицо/поставщик услуг). Смысл такой - провайдер это статус пользователя, который, в зависимости от применения, может нести разный смысл и подразумевает под собой какой-то тип действия. Обычные исполнители - это провайдеры услуг (код 3). Ответственные за какое-то имущество, которые сдают его в аренду - это тоже провайдеры (код 2). Ответственные за набор услуг перед метасервисом (фактически - назначенные админы) - это провайдеры-партнеры (код 1)"
  62. )
  63. requirements = models.CharField(
  64. max_length=300,
  65. help_text="требования для того, чтобы можно было предоставлять услуги любые в этом метасервисе в целом (самые строгие)"
  66. )
  67. status = models.CharField(
  68. max_length=150,
  69. help_text="статус пользователя в системе относительно прохождения проверок (activity_status) (может быть active только в том случае, если ticket, влияющий на статус - закрыт."
  70. )
  71. location_type = models.CharField(
  72. max_length=300,
  73. help_text="статическая или динамическая локация оказания услуги. Если статическая, а исполнитель находится существенно за пределами локации - то тогда статус автоматом оффлайн для приема новых заявок."
  74. )
  75. default_location = models.CharField(
  76. max_length=300,
  77. help_text="локация по умолчанию для объекта."
  78. )
  79. # FK
  80. user_id = models.ForeignKey(
  81. get_user_model(),
  82. on_delete=models.DO_NOTHING,
  83. null=True,
  84. help_text="уникальный идентификатор конкретного пользователя системы (meta-user), который будет оказывать услугу. Один пользователь может быть провайдером нескольких услуг. Статус провайдера означает, что с данным пользователем может быть установлена связь, как с исполнителем."
  85. )
  86. company_id = models.ForeignKey(
  87. Company,
  88. on_delete=models.DO_NOTHING,
  89. null=True,
  90. help_text="уникальный идентификатор компании, от лица которой выступает провайдер. Смысл такой - ответственны могут быть только одушевленные лица, компании - не одушевленные. Все услуги предоставляются через компании-партнеры, самозанятые или ИП являются единицами таких компаний."
  91. )
  92. ticket_status = models.ForeignKey(
  93. Ticket,
  94. on_delete=models.DO_NOTHING,
  95. null=True,
  96. help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю."
  97. )
  98. service = models.ForeignKey(
  99. Service,
  100. on_delete=models.DO_NOTHING,
  101. null=True,
  102. help_text="id услуги, которую предостовляют"
  103. )
  104. class RatingNeg(models.Model):
  105. # DATA
  106. count = models.IntegerField(
  107. help_text="" # Написать описание поля
  108. )
  109. # FK
  110. user_who = models.ForeignKey(
  111. get_user_model(),
  112. related_name="rating_neg_user_who",
  113. on_delete=models.DO_NOTHING,
  114. help_text="уникальный идентификатор инициатора договорных отношений"
  115. )
  116. user_whom = models.ForeignKey(
  117. get_user_model(),
  118. related_name="rating_neg_user_whom",
  119. on_delete=models.DO_NOTHING,
  120. help_text=" уникальный идентификатор того с кем связываются"
  121. )
  122. servicetype = models.ForeignKey(
  123. ServiceType,
  124. on_delete=models.DO_NOTHING,
  125. help_text="тип оказываемой услуги по классификатору услуг сервиса"
  126. )
  127. class RatingOk(models.Model):
  128. # DATA
  129. count = models.IntegerField(
  130. help_text="" # Написать описание поля
  131. )
  132. # FK
  133. user_who = models.ForeignKey(
  134. get_user_model(),
  135. related_name="rating_ok_user_who",
  136. on_delete=models.DO_NOTHING,
  137. help_text="уникальный идентификатор инициатора договорных отношений"
  138. )
  139. user_whom = models.ForeignKey(
  140. get_user_model(),
  141. related_name="rating_ok_user_whom",
  142. on_delete=models.DO_NOTHING,
  143. help_text=" уникальный идентификатор того с кем связываются"
  144. )
  145. servicetype = models.ForeignKey(
  146. ServiceType,
  147. on_delete=models.DO_NOTHING,
  148. help_text="тип оказываемой услуги по классификатору услуг сервиса"
  149. )
  150. class RatingPos(models.Model):
  151. # DATA
  152. count = models.IntegerField(
  153. help_text="" # Написать описание поля
  154. )
  155. # FK
  156. user_who = models.ForeignKey(
  157. get_user_model(),
  158. related_name="rating_pos_user_who",
  159. on_delete=models.DO_NOTHING,
  160. help_text="уникальный идентификатор инициатора договорных отношений"
  161. )
  162. user_whom = models.ForeignKey(
  163. get_user_model(),
  164. related_name="rating_pos_user_whom",
  165. on_delete=models.DO_NOTHING,
  166. help_text=" уникальный идентификатор того с кем связываются"
  167. )
  168. servicetype = models.ForeignKey(
  169. ServiceType,
  170. on_delete=models.DO_NOTHING,
  171. help_text="тип оказываемой услуги по классификатору услуг сервиса"
  172. )
  173. class Relationship(models.Model):
  174. # DATA
  175. neg_type = models.IntegerField(
  176. help_text="тип договорных отношений по его уникальному идентификатору"
  177. )
  178. requirements = models.CharField(
  179. max_length=150,
  180. help_text="код необходимого (самый строгий) для того, чтобы ресурс мог стать активным. Оно вставляется автоматом, в соответствии с профилем метасервиса. Далее, если кому-то из партнеров или пользователей надо строже - применяется более строгий вариант на данную связь."
  181. )
  182. status = models.CharField(
  183. max_length=150,
  184. help_text="(статус обработки заявки в системе заявок)"
  185. )
  186. # FK
  187. user_id_who = models.ForeignKey(
  188. get_user_model(),
  189. related_name="user_id_who",
  190. on_delete=models.DO_NOTHING,
  191. help_text="уникальный идентификатор инициатора договорных отношений"
  192. )
  193. user_id_whom = models.ForeignKey(
  194. get_user_model(),
  195. related_name="user_id_whom",
  196. on_delete=models.DO_NOTHING,
  197. help_text=" уникальный идентификатор того с кем связываются"
  198. )
  199. ticket_status = models.ForeignKey(
  200. Ticket,
  201. on_delete=models.DO_NOTHING,
  202. help_text="id заявки, по которой происходит проверка статуса relationship. State меняется только в результате изменений в заявке."
  203. )
  204. class Resource(models.Model):
  205. # DATA
  206. resoure_type = models.CharField(
  207. max_length=10,
  208. help_text="определение типа ресурса по его уникальному идентификатору в соответствии с классификатором"
  209. )
  210. requirements = models.CharField(
  211. max_length=150,
  212. help_text="код необходимого (самый строгий) для того, чтобы ресурс мог стать активным"
  213. )
  214. status = models.CharField(
  215. max_length=150,
  216. help_text="статус ресурса в системе относительно прохождения проверок (activity_status) (может быть active только в том случае, если ticket, влияющий на статус - закрыт."
  217. )
  218. # FK
  219. ticket_status = models.ForeignKey(
  220. Ticket,
  221. on_delete=models.DO_NOTHING,
  222. help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю."
  223. )
  224. user_id = models.ForeignKey(
  225. get_user_model(),
  226. on_delete=models.DO_NOTHING,
  227. help_text="уникальный идентификатор ответственного (за состояние, доступность и так далее - то есть для договора) пользователя - идентификатор провайдера, по которому восстанавливается конкретный пользовательский аккаунт"
  228. )
  229. class Service(models.Model):
  230. # DATA
  231. price_alg = models.CharField(
  232. max_length=100,
  233. help_text="шаблон алгоритма расчета цены для оказываемой услуги (по этой переменной определяется, какую функцию для расчета цены вызывать)"
  234. )
  235. price_km = models.DecimalField(
  236. max_digits=9,
  237. decimal_places=2,
  238. help_text="значение параметра стоимости 1км данного поставщика для данного шаблона услуги"
  239. )
  240. price_min = models.DecimalField(
  241. max_digits=9,
  242. decimal_places=2,
  243. help_text="значение параметра стоимости 1мин данного поставщика для данного шаблона услуги"
  244. )
  245. price_amount = models.DecimalField(
  246. max_digits=9,
  247. decimal_places=2,
  248. help_text="значение параметра стоимости 1 услуги данного поставщика для данного шаблона услуги"
  249. )
  250. company_comission = models.FloatField(
  251. help_text="Коммисия сервиса"
  252. )
  253. requirements = models.CharField(
  254. max_length=150,
  255. help_text="код необходимого (самый строгий) для того, чтобы ресурс мог стать активным. Оно вставляется автоматом, в соответствии с профилем метасервиса. Далее, если кому-то из партнеров или пользователей надо строже - применяется более строгий вариант на данную связь."
  256. )
  257. service_status = models.CharField(
  258. max_length=150,
  259. help_text="статус спецификации типа услуги, принимает значения Online, Offline, Preorder with Gap. Online/offline выставляются по проверке параметров и желанию пользователя (например, если пользователь переключает себя online, но по какой-то причине ему такую услугу оказывать запрещено - оно не переключится, то есть надо перед сменой значения этого поля всегда запускать проверку)"
  260. )
  261. status = models.CharField(
  262. max_length=150,
  263. help_text="статус обработки заявки в системе заявок. активность на основе системы заяво"
  264. )
  265. # FK
  266. ticket_status = models.ForeignKey(
  267. Ticket,
  268. on_delete=models.DO_NOTHING,
  269. help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю."
  270. )
  271. resource_id = models.ForeignKey(
  272. Resource,
  273. on_delete=models.DO_NOTHING,
  274. blank=True,
  275. null=True,
  276. help_text="ответственный за ресурс(не всегда). так как ресурсы сами услугу оказать не могут, а также один ресурс может быть представлен в виде разных услуг, то фактически с точки зрения смысла системы ресурс - это как неодушевленный пользователь. Без провайдера, который с его помощью оказывает услугу - никуда. Поле остается пустым, если сервис не предусматривает использование услуг. Стоит обратить внимание, что это не обязательно ответственный за ресурс. Например, за состояние автомобиля может быть ответственен пользователь (он и указывается в таблице со свойствами ресурса), а услугу доступа или перевозки может оказывать иное лицо."
  277. )
  278. servicetype_id = models.ForeignKey(
  279. ServiceType,
  280. on_delete=models.DO_NOTHING,
  281. help_text="тип оказываемой услуги по классификатору услуг сервиса"
  282. )
  283. class ServiceType(models.Model):
  284. # DATA
  285. codename = models.CharField(
  286. max_length=255,
  287. help_text="латинское наименование услуги в системе"
  288. )
  289. requirements = models.CharField(
  290. max_length=300,
  291. help_text="код требований на основе вспомогательных таблиц-справочников"
  292. )
  293. status = models.CharField(
  294. max_length=150,
  295. help_text="активность на основе системы заявок"
  296. )
  297. caption = models.CharField(
  298. max_length=255,
  299. help_text="наименование услуги для отображения пользователю"
  300. )
  301. description = models.TextField(
  302. blank=True,
  303. help_text="текстовое описание услуги"
  304. )
  305. link_agreement = models.CharField(
  306. max_length=400,
  307. help_text="ссылка на договор в вики об оказании услуги данного типа (аренда, перевозка и тп)"
  308. )
  309. price_type = models.CharField(
  310. max_length=150,
  311. help_text="ценообразование - код допустимых вариантов или код параметров, принимаемых во внимание и способ их учета (по сути хорошо закодировать формулу)"
  312. )
  313. company_comission = models.FloatField(
  314. help_text="Коммисия сервиса"
  315. )
  316. # FK
  317. ticket_status = models.ForeignKey(
  318. Ticket,
  319. on_delete=models.DO_NOTHING,
  320. null=True,
  321. help_text="id последнего актуального тикета, касающийся статуса. Если он меняет статус на закрытый - вызывается проверка, которая смотрит, нет ли другого открытого по пользователю."
  322. )