Advertisement
Splav555

Untitled

Feb 2nd, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.22 KB | None | 0 0
  1. /* МОДЕЛИ */
  2. class fb_themes(models.Model):
  3.     id = models.IntegerField(primary_key=True)
  4.     name = models.CharField(db_column='name', max_length=48, blank=True)
  5.     enable = models.IntegerField(db_column='enable')
  6.     sort = models.IntegerField(db_column='sort')
  7.  
  8.     class Meta:
  9.         managed = False
  10.         db_table = 'fb_theme'
  11.  
  12. class SupportTicketMessages(models.Model):
  13.     ticket_id = models.IntegerField(db_column='ticket_id',primary_key=True)
  14.     message_num = models.IntegerField(db_column='message_num')
  15.     message_dttm = models.DateTimeField(db_column='message_dttm')
  16.     author_id = models.ForeignKey(GWSUser,related_name='author',db_column='author_id')
  17.     message_text = models.TextField(max_length=3000)
  18.     read_flg = models.IntegerField(db_column='read_flg')
  19.     msg_type = models.IntegerField(db_column='msg_type')
  20.  
  21.     class Meta:
  22.         managed = False
  23.         db_table = 'support_ticket_messages'
  24.  
  25. class SupportAdminPermissions(models.Model):
  26.     admin_id = models.IntegerField( db_column='admin_id',primary_key=True)
  27.     theme_id = models.IntegerField(db_column='theme_id',primary_key=True)
  28.  
  29.     class Meta:
  30.         managed = False
  31.         db_table = 'support_admin_permissions'
  32.  
  33. class SupportTickets(models.Model):
  34.     id = models.IntegerField(primary_key=True, db_column='ticket_id')
  35.     theme = models.ForeignKey(fb_themes, related_name='theme_name', db_column='theme_id')
  36.     user = models.ForeignKey(GWSUser, related_name='ticket_author', db_column='user_id')
  37.     create_dttm = models.DateTimeField(db_column='create_dttm')
  38.     close_dttm = models.DateTimeField(db_column='close_dttm')
  39.     status = models.IntegerField(db_column='status')
  40.     @property
  41.     def last_admin(self):
  42.         cursor = connection.cursor()
  43.         query = 'SELECT t2.author_id '\
  44.                 'FROM support_tickets t1 '\
  45.                 'inner join support_ticket_messages t2 '\
  46.                     'on t1.ticket_id = t2.ticket_id '\
  47.                     'and t1.user_id <> t2.author_id '\
  48.                 'where t1.ticket_id = %s order by t2.message_num desc' % self.id
  49.         cursor.execute(query);
  50.         id = cursor.fetchone();
  51.         if id == None:
  52.             return "Нет ответа администратора"
  53.         else:
  54.             return GWSUser.objects.get(id=id[0])
  55.     @property
  56.     def ticket_status(self):
  57.         lastmsg = SupportTicketMessages.objects.filter(ticket_id=self.id).order_by('-message_num')[:1]
  58.         msg = lastmsg.values('message_dttm', 'author_id')[0]
  59.         if self.status == 0 and msg['author_id'] == self.user.id:
  60.             return 0
  61.         elif self.status == 0 and msg['author_id'] != self.user.id:
  62.             return 1
  63.         elif self.status == 1:
  64.             return 2
  65.     @property
  66.     def unread_messages(self):
  67.         msgs = SupportTicketMessages.objects.filter(ticket_id=self.id, read_flg=0).exclude(author_id=self.user).count()
  68.         return msgs
  69.  
  70.     class Meta:
  71.         managed = False
  72.         db_table = 'support_tickets'
  73.  
  74.  
  75.  
  76. /* VIEW */
  77. @login_required()
  78. @render_to('main/admin/feedback.html')
  79. def feedback_list(request,page=1):
  80.     if request.user.is_admin < 1:
  81.         return TemplateResponse(request, 'main/404.html', {'authorized': request.user.is_authenticated()})
  82.     else:
  83.         themes = fb_themes.objects.all()
  84.         #fblist = SupportTickets.objects.all().filter().order_by('status','-create_dttm')
  85.         params = {
  86.             "id": str()
  87.         }
  88.         query = 'SELECT '\
  89.             't1.ticket_id,'\
  90.             't1.create_dttm,'\
  91.             'accounts.Login,'\
  92.             't1.theme_id,'\
  93.             't1.status '\
  94.         'FROM support_tickets t1 JOIN accounts ON accounts.ID = t1.user_id '\
  95.         'where (select support_admin_access(%s, t1.ticket_id)) ORDER BY t1.status, t1.create_dttm desc' % request.user.id
  96.         fblist = SupportTickets.objects.raw(query)
  97.         paginator = Paginator(fblist, 30)
  98.         paginator.count = len(list(fblist))
  99.         page = int(page)
  100.         try:
  101.             feedbacks = paginator.page(page)
  102.         except PageNotAnInteger:
  103.             feedbacks = paginator.page(1)
  104.         except EmptyPage:
  105.             feedbacks = paginator.page(paginator.num_pages)
  106.  
  107.  
  108.         paginator.page_range2 = [n for n in range(page - 10, page + 11) if n > 0 and n <= paginator.num_pages]
  109.         return {'user': request.user, 'authorized': request.user.is_authenticated(), 'fb_themes': themes,
  110.                 'feedback_list': feedbacks, 'page_range': paginator.page_range2}
  111.  
  112. /* TEMPLATE */
  113. <div class="table-responsive">
  114.                     <table class="table table-bordered table-hover table-striped">
  115.                         <thead>
  116.                           <tr>
  117.                             <th>#</th>
  118.                             <th>Дата создания</th>
  119.                             <th>Создатель</th>
  120.                             <th>Тема</th>
  121.                             <th>Статус</th>
  122.                             <th>Админ</th>
  123.                           </tr>
  124.                         </thead>
  125.                         {% for fb in feedback_list %}
  126.                         <tr class="complaint-row">
  127.                                 <td>{{ fb.pk }}</td>
  128.                                 <td>{{ fb.create_date }}</td>
  129.                                 <td>{{ fb.user }}</td>
  130.                                 <td>{{ fb.theme.name }}</td>
  131.                                 <td>{% if fb.status == 0%}Передан{% elif fb.status == 1 %}В работе{% else %}Закрыт{% endif %}</td>
  132.                                 <td>{{ fb.admin }}</td>
  133.                         </tr>
  134.                         {%endfor%}
  135.                         <tbody>
  136.  
  137.                         </tbody>
  138.                     </table>
  139.                     <ul class="pagination">
  140.                             {% if feedback_list.has_previous %}
  141.                                 <li class="arrow"><a href="{% url 'admin_feedback' %}{{ feedback_list.previous_page_number }}" title="Предыдущая">«</a></li>
  142.                             {% else %}
  143.                                 <li class="disabled arrow"><a>«</a></li>
  144.                             {% endif %}
  145.                             {% for page in page_range %}
  146.                                 {% if page %}
  147.                                     {% ifequal page feedback_list.number %}
  148.                                         <li class="active"><a>{{ page }}</a></li>
  149.                                     {% else %}
  150.                                         <li><a href="{% url 'admin_feedback' %}{{ page }}">{{ page }}</a></li>
  151.                                     {% endifequal %}
  152.                                 {% else %}
  153.                                     <li><a>...</a></li>
  154.                                 {% endif %}
  155.                             {% endfor %}
  156.                             {% if feedback_list.has_next %}
  157.                                 <li class="arrow"><a href="{% url 'admin_feedback' %}{{ feedback_list.next_page_number }}">»</a></li>
  158.                             {% else %}
  159.                                 <li class="disabled arrow"><a title="Следующая">»</a></li>
  160.                             {% endif %}
  161.                     </ul>
  162.                 </div>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement