diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 31ab3a2..3e3a59d 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -20,4 +20,6 @@ @use "base"; @use "application_settings"; - @use "main"; \ No newline at end of file + @use "main"; + @use "header"; + @use "nav"; \ No newline at end of file diff --git a/app/assets/stylesheets/application_settings.scss b/app/assets/stylesheets/application_settings.scss index 3cc73d4..6f42cdd 100644 --- a/app/assets/stylesheets/application_settings.scss +++ b/app/assets/stylesheets/application_settings.scss @@ -31,3 +31,12 @@ body { width: 90vw; margin: 0 auto; } + + +.welcome__container__laptop { + margin-top: 15%; + text-align: center; + font-size: 36px; + font-family: "Ubuntu sans"; + font-weight: 600; +} \ No newline at end of file diff --git a/app/assets/stylesheets/header.scss b/app/assets/stylesheets/header.scss new file mode 100644 index 0000000..1b4b64e --- /dev/null +++ b/app/assets/stylesheets/header.scss @@ -0,0 +1,13 @@ +.main-header { + width: 100%; + font-size: 2.5rem; + font-weight: var(--bold); + text-align: center; + position: relative; +} + +.exit { + position: absolute; + top: 0; + right: 5px; +} diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 44b28e8..0a79815 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -1,18 +1,3 @@ -.main-header { - width: 100%; - text-align: center; - font-size: 2.5rem; - font-weight: var(--bold); -} - -.nav-container { - width: 20%; - margin: 0 auto; - display: flex; - justify-content: space-around; - -} - .add-new { text-align: center; width: 100%; @@ -24,13 +9,11 @@ a.link { border-radius: 20px 20px; padding: 10px; font-size: 1.5rem; - } a.link:hover { background-color: black; color: var(--white-color) - } .header{ @@ -56,6 +39,11 @@ a.link:hover { margin: 0 auto 10px; } +.informations-data h2 { + font-weight: 700; + font-size: 2.5em; +} + .information-data { border: 2px solid black; display: flex; @@ -75,3 +63,38 @@ a.link:hover { padding: 10px; margin: 10px 0; } + +.information-button { + align-self: center; + margin-block: 8px; +} + +.information-table table { + border-collapse: collapse; + text-align: center; +} + +.information-table td, th { + padding: 5px; + border: 3px solid black; +} + +.type_doc_header#tabs { + width: 75%; + margin: 0 auto; +} + +.type__doc__list__type__container { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, 1fr); + place-items: center; + gap: 15px; + a.link { + font-size: 1.35rem; + } +} + +a.link:has(.active__button) { + background-color: gray; +} diff --git a/app/assets/stylesheets/nav.scss b/app/assets/stylesheets/nav.scss new file mode 100644 index 0000000..808fe38 --- /dev/null +++ b/app/assets/stylesheets/nav.scss @@ -0,0 +1,6 @@ +.nav-container { + width: 25%; + margin: 0 auto; + display: flex; + justify-content: space-around; +} \ No newline at end of file diff --git a/app/controllers/concerns/Authorization.rb b/app/controllers/concerns/Authorization.rb index 6006118..0b692d4 100644 --- a/app/controllers/concerns/Authorization.rb +++ b/app/controllers/concerns/Authorization.rb @@ -2,11 +2,13 @@ module Authorization extend ActiveSupport::Concern included do - before_action :set_paper_trail_whodunnit before_action :load_current_user # load user from database + before_action :set_paper_trail_whodunnit before_action :check_authentication # check if user authenticated before_action :check_current_user # check if user authorized + helper_method :logged_in?, :current_user + rescue_from ActionController::UnknownFormat do request.format = :html render_error @@ -15,6 +17,10 @@ module Authorization def current_login session['zombie'] || cas_login end + + def logged_in? + current_login.present? + end private diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb new file mode 100644 index 0000000..6837851 --- /dev/null +++ b/app/controllers/organisations_controller.rb @@ -0,0 +1,54 @@ +class OrganisationsController < ApplicationController + def index + organizations = Organization.all + + @info_about_organisations = organizations.each_with_object({}) do |org, hash| + hash[org.id] = { + "ИНН" => org.inn, + "Полное наименование юридического лица" => org.full_name, + # "КПП" => org.kpp, + # "Код по ОКПО" => org.okpo, + # "Форма собственности (по ОКФС)" => org.okfs, + # "Организационно-правовая форма (по ОКОПФ)" => org.okopf, + # "Вид экономической деятельности по ОКВЭД 2" => org.okved2, + # "Местонахождение (адрес)" => org.address + } + end + end + + def show + org = Organization.find(params[:id]) + @org_id = org.id + + doc_types = { + 0 => 'Бухгалтерский баланс', + 1 => 'Отчёт о финансовых результатах', + 2 => 'Отчёт об изменении капитала', + 3 => 'Отчет о движении денежных средств' + } + @type_doc = params[:type_doc].present? ? params[:type_doc].to_i : 0 + + @info_about_organisation = { + "Сведения об организации" => { + "ИНН" => org.inn, + "Полное наименование юридического лица" => org.full_name, + "КПП" => org.kpp, + "Код по ОКПО" => org.okpo, + "Форма собственности (по ОКФС)" => org.okfs, + "Организационно-правовая форма (по ОКОПФ)" => org.okopf, + "Вид экономической деятельности по ОКВЭД 2" => org.okved2, + "Местонахождение (адрес)" => org.address + + }, + "Бухгалтерский баланс" => [["Наименование показателя", "На 31 декабря 2024 г.", "На 31 декабря 2023 г."], \ + ["Нематериальные активы", 10457, 9925], \ + ["Результаты исследований и разработок", 6969, 428571]], + "Отчёт о финансовых результатах" => [["Наименование показателя", "За 2024 г.", "За 2023 г."], \ + ["Выручка", 301837283, 238834307], \ + ["Себестоимость продаж", -228706983, -178449438]] + + } + @doc_name = doc_types[@type_doc] + @current_doc_info = @info_about_organisation[@doc_name] + end +end \ No newline at end of file diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 83a8c4c..4102b85 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,19 +1,11 @@ class WelcomeController < ApplicationController - - def index - organizations = Organization.all - - @info_about_organisations = organizations.each_with_object({}) do |org, hash| - hash[org.id] = { - "ИНН" => org.inn, - "Полное наименование юридического лица" => org.full_name, - "КПП" => org.kpp, - "Код по ОКПО" => org.okpo, - "Форма собственности (по ОКФС)" => org.okfs, - "Организационно-правовая форма (по ОКОПФ)" => org.okopf, - "Вид экономической деятельности по ОКВЭД 2" => org.okved2, - "Местонахождение (адрес)" => org.address - } + def home + if logged_in? + if @current_user.present? + redirect_to '/organisations/index' + else + render_error + end end end end diff --git a/app/helpers/organisations_helper.rb b/app/helpers/organisations_helper.rb new file mode 100644 index 0000000..1b84554 --- /dev/null +++ b/app/helpers/organisations_helper.rb @@ -0,0 +1,2 @@ +module OrganisationsHelper +end diff --git a/app/javascript/application.js b/app/javascript/application.js index 3e99234..00824c1 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -4,4 +4,5 @@ import "controllers" import "jquery" import "jquery_ujs" import "toastr" +import "tabs_select" window.toastr = toastr \ No newline at end of file diff --git a/app/javascript/tabs_select.js b/app/javascript/tabs_select.js new file mode 100644 index 0000000..e299541 --- /dev/null +++ b/app/javascript/tabs_select.js @@ -0,0 +1,18 @@ + +let tabs_select = () => { + const tabsContainer = document.getElementById("tabs") + if (!tabsContainer) { + return; + } + + const buttons = tabsContainer.getElementsByClassName("switch__button") + for (const button of buttons) { + const value = button.getAttribute("data-value"); + const id = button.getAttribute("id"); + button.classList.toggle("active__button", value === id); + } +} + + +document.addEventListener('turbo:load', tabs_select) +console.log('Hi') \ No newline at end of file diff --git a/app/views/application/_header.html.slim b/app/views/application/_header.html.slim index acd29d3..84f0592 100644 --- a/app/views/application/_header.html.slim +++ b/app/views/application/_header.html.slim @@ -1,2 +1,7 @@ .main-header - = 'Отчетность за 2026 год' \ No newline at end of file + = 'Отчетность за 2026 год' + .exit + - if logged_in? + a.link[href="/logout"] + span.text-large + = 'Выйти' \ No newline at end of file diff --git a/app/views/application/_navbar.html.slim b/app/views/application/_navbar.html.slim index 5f085fb..eda3591 100644 --- a/app/views/application/_navbar.html.slim +++ b/app/views/application/_navbar.html.slim @@ -1,5 +1,6 @@ -.nav-container - a.link[href="/"] - = 'Организации' - a.link[href="/auditors/index"] - = 'Аудиторы' \ No newline at end of file +- if @current_user.present? + .nav-container + a.link[href="/"] + = 'Организации' + a.link[href="/auditors/index"] + = 'Аудиторы' \ No newline at end of file diff --git a/app/views/welcome/index.html.slim b/app/views/organisations/index.html.slim similarity index 70% rename from app/views/welcome/index.html.slim rename to app/views/organisations/index.html.slim index f6c4b94..3d14171 100644 --- a/app/views/welcome/index.html.slim +++ b/app/views/organisations/index.html.slim @@ -13,4 +13,7 @@ .information-data - params.keys.each do |key| .information-elem - = "#{key}: #{params[key]}" \ No newline at end of file + = "#{key}: #{params[key]}" + .information-button + a.link[href="/organisations/#{organisation}"] + = "Подробнее" diff --git a/app/views/organisations/show.html.slim b/app/views/organisations/show.html.slim new file mode 100644 index 0000000..9b6e682 --- /dev/null +++ b/app/views/organisations/show.html.slim @@ -0,0 +1,31 @@ +.header + .header-title + = "Организация" +.main-container + - unless @info_about_organisation.any? + = 'У данной организации пока не загружена отчетность' + - else + .informations-data + h2 + = "Сведения об организации" + .information-data + - @info_about_organisation["Сведения об организации"].each do |key, value| + .information-elem + = "#{key}: #{value}" + = render 'organisations/templates/type_doc', target: "type_doc_#{@type_doc}", org_id: "#{@org_id}" + h2 + = "#{@doc_name}" + .information-table + table + thead + tr + - @current_doc_info[0].each do |value| + th + = value + + tbody + - @current_doc_info[1..-1].each do |values| + tr + - values.each do |value| + td + = value diff --git a/app/views/organisations/templates/_type_doc.html.slim b/app/views/organisations/templates/_type_doc.html.slim new file mode 100644 index 0000000..45389f6 --- /dev/null +++ b/app/views/organisations/templates/_type_doc.html.slim @@ -0,0 +1,16 @@ +.main__container + .type_doc_header#tabs + .type__doc__list__type__container + a.link[href="/organisations/#{org_id}?type_doc=0"] + .switch__button.text-large#type_doc_0 data-value=target + = 'Бухгалтерский баланс' + a.link[href="/organisations/#{org_id}?type_doc=1"] + .switch__button.text-large#type_doc_1 data-value=target + = 'Отчёт о финансовых результатах' + / - if not_simplified + a.link[href="/organisations/#{org_id}?type_doc=2"] + .switch__button.text-large#type_doc_2 data-value=target + = 'Отчёт об изменении капитала' + a.link[href="/organisations/#{org_id}?type_doc=3"] + .switch__button.text-large#type_doc_3 data-value=target + = 'Отчёт о движении денежных средств' \ No newline at end of file diff --git a/app/views/welcome/home.html.slim b/app/views/welcome/home.html.slim index e69de29..f0aed69 100644 --- a/app/views/welcome/home.html.slim +++ b/app/views/welcome/home.html.slim @@ -0,0 +1,13 @@ +.welcome__container__laptop + div + = 'Информационная система' + div + = '«Электронный дневник»' + + - unless logged_in? + a.link[href="/auth/login"] + .welcome-login__container + span + = image_tag('auth.svg', class: 'icon') + span.text-login + = 'Войти' \ No newline at end of file diff --git a/config/importmap.rb b/config/importmap.rb index 561e137..48eb8f2 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -11,4 +11,5 @@ pin "jquery", to: "jquery.min.js", preload: true pin "jquery_ujs", to: "jquery_ujs.js", preload: true pin "jquery-ui", to: "jquery-ui.js", preload: true pin "inputmask", to: "jquery.inputmask.bundle.min.js", preload: true -pin 'slimselect', to: 'slimselect.min.js', preload: true \ No newline at end of file +pin 'slimselect', to: 'slimselect.min.js', preload: true +pin "tabs_select", to: 'tabs_select.js', preload: true \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index ff926e5..3793173 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,14 +1,17 @@ # require 'sidekiq/web' Rails.application.routes.draw do - get 'auditors/index' - get 'reports/create' + + get '/auth/login', to: 'auth#login', as: :login + get '/organisations/index' + get '/organisations/:id', to: 'organisations#show' + get '/auditors/index' + get '/reports/create' get '/reports', to: 'reports#index' post '/reports', to: 'reports#create' - # mount Sidekiq::Web => '/sidekiq' # Для проверки работы Sidekiq через веб-интерфейс # Defines the root path route ("/") - root "welcome#index" + root "welcome#home" end diff --git a/spec/helpers/organisations_helper_spec.rb b/spec/helpers/organisations_helper_spec.rb new file mode 100644 index 0000000..85ff232 --- /dev/null +++ b/spec/helpers/organisations_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the OrganisationsHelper. For example: +# +# describe OrganisationsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe OrganisationsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/requests/organisations_spec.rb b/spec/requests/organisations_spec.rb new file mode 100644 index 0000000..7f56219 --- /dev/null +++ b/spec/requests/organisations_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "Organisations", type: :request do + describe "GET /index" do + it "returns http success" do + get "/organisations/index" + expect(response).to have_http_status(:success) + end + end + + describe "GET /show" do + it "returns http success" do + get "/organisations/show" + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/views/organisations/index.html.tailwindcss_spec.rb b/spec/views/organisations/index.html.tailwindcss_spec.rb new file mode 100644 index 0000000..232f87b --- /dev/null +++ b/spec/views/organisations/index.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "organisations/index.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/organisations/show.html.tailwindcss_spec.rb b/spec/views/organisations/show.html.tailwindcss_spec.rb new file mode 100644 index 0000000..d2aeb71 --- /dev/null +++ b/spec/views/organisations/show.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "organisations/show.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end