Programming

6. changes

{% load static %}
{% load humanize %}

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
    <meta name="description" content="" />
    <meta name="author" content="" />
    <title>Панель управления - Капиталбанк</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
    <link href="https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/style.min.css" rel="stylesheet" />
    <link href="{% static 'css/styles.css' %}" rel="stylesheet" />
    <link href="https://use.fontawesome.com/releases/v6.3.0/css/all.css" rel="stylesheet" />
    <script src="{% static 'js/plotly.min.js' %}"></script>
    
    {% block extra_js %}
    {% endblock extra_js %}
    
    <link rel="icon" href="data:;base64,=">
    <style>
        body {
            font-family: var(--font-sans);
            background: linear-gradient(135deg, #e0f2fe 0%, #f1f5f9 100%);
            color: var(--dark);
            line-height: 1.7;
            margin: 0;
            overflow-x: hidden;
        }
        .currency-ticker-container {
        overflow: hidden; /* Hides content outside the container */
        white-space: nowrap; /* Keeps content on a single line */
        width: 100%;
        max-width: 500px; /* Adjust max-width as needed for navbar space */
    }

    .currency-ticker-wrap {
        display: inline-block;
        padding-left: 100%; /* Starts the animation off-screen to the right */
        box-sizing: content-box;
        animation: marquee 25s linear infinite; /* Adjust duration to control speed */
    }

    .currency-ticker-wrap:hover {
        animation-play-state: paused; /* Pauses the animation on hover */
    }

    .ticker-item {
        display: inline-block;
        padding-right: 1rem; /* Space between items */
    }

    @keyframes marquee {
        0% { transform: translateX(0); }
        100% { transform: translateX(-100%); } /* Scrolls the entire content width to the left */
    }

    </style>
    {% block extra_css %}
    {% endblock extra_css %}
</head>
<body class="sb-nav-fixed">
    <nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark" id="alfa">
        <!-- Navbar Brand-->
        
        
        



dynamic_report/:72 Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')
    at dynamic_report/:72:8
    at dynamic_report/:90:3
main.js?attr=F0JEnvjt9d5BkWD3xOPae2JERCoKbb5Zps2gNKYJORWudVjWad8j-iy2OmA8SMofyRkv5qnBa0v6YEbeUn8p3Q:270 [Violation] Permissions policy violation: unload is not allowed in this document.
AddEventListener @ main.js?attr=F0JEnvjt9d5BkWD3xOPae2JERCoKbb5Zps2gNKYJORWudVjWad8j-iy2OmA8SMofyRkv5qnBa0v6YEbeUn8p3Q:270
main.js?attr=F0JEnvjt9d5BkWD3xOPae2JERCoKbb5Zps2gNKYJORWudVjWad8j-iy2OmA8SMofyRkv5qnBa0v6YEbeUn8p3Q:270 [Violation] Permissions policy violation: unload is not allowed in this document.
AddEventListener @ main.js?attr=F0JEnvjt9d5BkWD3xOPae2JERCoKbb5Zps2gNKYJORWudVjWad8j-iy2OmA8SMofyRkv5qnBa0v6YEbeUn8p3Q:270
{% endblock %}

{% block extra_js %}
<script>
document.addEventListener("DOMContentLoaded", 
(function () {
  const form  = document.getElementById('dr-form');
  const go    = document.getElementById('dr-go');
  const panel = document.getElementById('dr-panel');
  const step  = document.getElementById('dr-step');
  const bar   = document.getElementById('dr-bar');

  function csrf() {
    const m = document.cookie.match(/csrftoken=([^;]+)/);
    return m ? m[1] : '';
  }

  function show(text, isError) {
    panel.classList.add('on');
    panel.classList.toggle('err', !!isError);
    bar.style.display = isError ? 'none' : 'block';
    step.innerHTML = text;
  }

  // The run takes minutes, so the page polls instead of waiting on the POST.
  async function poll(id) {
    try {
      const r = await fetch(`status/${id}/`);
      const s = await r.json();

      if (s.status === 'done') {
        bar.style.display = 'none';
        const st = s.stats || {};
        show(`Готово за ${s.seconds} с — ${st.n_charts || ''} графиков, ` +
             `${(st.n_periods || 0)} отчётных дат. ` +
             `<a class="go" href="view/${id}/" target="_blank" rel="noopener">` +
             `Открыть отчёт`);
        window.open(`view/${id}/`, '_blank', 'noopener');
        go.disabled = false;
        setTimeout(() => window.location.reload(), 1500);
        return;
      }
      if (s.status === 'failed') {
        show('Ошибка: ' + (s.error || '').split('\n')[0], true);
        go.disabled = false;
        return;
      }
      show((s.step || 'выполняется') + ` … ${s.seconds} с`);
      setTimeout(() => poll(id), 1200);
    } catch (e) {
      show('Потеряна связь с сервером: ' + e.message, true);
      go.disabled = false;
    }
  }

  form.addEventListener('submit', async (ev) => {
    ev.preventDefault();
    go.disabled = true;
    show('Запуск…');
    try {
      const r = await fetch('start/', {
        method: 'POST',
        headers: {'X-CSRFToken': csrf()},
        body: new FormData(form),
      });
      const s = await r.json();
      if (!r.ok) { show('Ошибка: ' + (s.error || r.status), true); go.disabled = false; return; }
      poll(s.id);
    } catch (e) {
      show('Не удалось запустить: ' + e.message, true);
      go.disabled = false;
    }
  });
})());
</script>
{% endblock %}

{"id": 2, "status": "pending"}

 

WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/6.0/howto/deployment/
[08/Oct/2026 12:35:03] "GET /dynamic_report/ HTTP/1.1" 200 24608
[08/Oct/2026 12:35:28] "GET /dynamic_report/?csrfmiddlewaretoken=MYPphlKXHWJSvwTbfQmlJZ6uRy4vtWKQzet4D8ZvfkpxVJhOzk5xDVksJg8aWMJM&period_from=202402&period_to=&selected_period= HTTP/1.1" 200 24608
[08/Oct/2026 12:35:52] "GET /dynamic_report/?csrfmiddlewaretoken=YIhOjqJT1JnHxN6ZLZDvLVKmClbS1SEeLYVtFdYrz73mX0uC5tmHFRYku3fxuIDa&period_from=&period_to=&selected_period= HTTP/1.1" 200 24608
[08/Oct/2026 13:22:08] "GET / HTTP/1.1" 200 23636
[08/Oct/2026 13:22:09] "GET /dynamic_report/constructor/ HTTP/1.1" 200 3220557
[08/Oct/2026 13:22:13] "GET /dynamic_report/ HTTP/1.1" 200 24608
[08/Oct/2026 13:22:17] "GET /dynamic_report/?csrfmiddlewaretoken=acGa7ffLgQtCFLF7DxpzBVqo7bthY629XskPt2ujOe9h5Y3KX18LvREmZTxWrW15&period_from=202311&period_to=&selected_period= HTTP/1.1" 200 24608
[08/Oct/2026 13:29:44] "GET /dynamic_report/?csrfmiddlewaretoken=acGa7ffLgQtCFLF7DxpzBVqo7bthY629XskPt2ujOe9h5Y3KX18LvREmZTxWrW15&period_from=202311&period_to=&selected_period= HTTP/1.1" 200 24704
[08/Oct/2026 13:29:49] "GET /dynamic_report/constructor/ HTTP/1.1" 200 3220557
[08/Oct/2026 13:29:51] "GET /dynamic_report/ HTTP/1.1" 200 24704
[08/Oct/2026 13:29:52] "POST /dynamic_report/start/ HTTP/1.1" 200 30
Not Found: /.well-known/appspecific/com.chrome.devtools.json
[08/Oct/2026 13:30:38] "GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1" 404 7522
[08/Oct/2026 13:33:32] "POST /dynamic_report/start/ HTTP/1.1" 200 30

Foydali bo'ldimi? Yoqmadi 0 Baholash uchun kiring